GIF89a;
| Direktori : /home/serb/public_html/chat/inc/classes/full_cache/ |
| Current File : /home/serb/public_html/chat/inc/classes/full_cache/processMessages.php |
<?php
//156
$this->result = array();
if( $this->code_sql==164 )//SELECT id FROM {$GLOBALS['fc_config']['db']['pref']}messages WHERE command='msg' AND toroomid=? ORDER BY id DESC LIMIT
{
$params = array( 'toroomid'=>$params[0] );
$stat_arr = array();
$stats_file_name = $this->getCachFileName('Stats');
$strDesc = 'DESC LIMIT ';
$first = substr($this->queryStr,strpos($this->queryStr,$strDesc) + strlen($strDesc),-1);
$first = (int) substr($first,0,-1);
$first++;
$stats_file = @fopen($stats_file_name, 'r');
if( !$stats_file)
{
$stat_value = $this->getRecordsCount($GLOBALS['fc_config']['db']['pref'].'messages');
//RESTORING message_stats file
$this->saveStatsInCache('MESSAGES_COUNT', $stat_value);
return false;
}
//stream_set_timeout($stats_file, 180);
while ($stat = fgets($stats_file))
{
//$stat = fgets($stats_file);
$stat_elems = explode('=', $stat);
if($stat_elems[0] == 'MESSAGES_COUNT')
{
$stat_arr['MESSAGES_COUNT'] = $stat_elems[1];
}
}
@fclose($stats_file);
$stat_arr['MESSAGES_COUNT'] = (int) $stat_arr['MESSAGES_COUNT'];
//checking all cached files if they have messages with id's: $params["id"] .. $stat_arr["COUNT"]
// if only one ID not found in cach files(if database have spec. command with this id),
// this function return's false and we select all messages from files.
$cacheDir = $this->getCachDir();
$cachePath = $cacheDir->path;
$id_end = $stat_arr['MESSAGES_COUNT'];
$id = array();
$result = null;
while (false !== ($entry = $cacheDir->read()))
{
if( $this->breakFile($entry) || strpos($entry, $GLOBALS['fc_config']['db']['pref'].'messages_')!==FALSE )
continue;
$entry_elems = explode('_', $entry);
if( $entry_elems[0]!=$params['toroomid'] || $entry_elems[0] == 'pm')
continue;
$userid = $entry_elems[1];
$toroomid = $entry_elems[0];
$count=0;
$handle = @fopen($cachePath.$entry, 'r');
$tempArray = array();
fseek($handle,$entry_elems[3]);
//stream_set_timeout($handle, 180);
while ($line = fgets($handle))
{
//$line = fgets($handle);
$line_elems = explode('#', $line);
$bit_pos = $line_elems[count($line_elems)-1];
fseek($handle,$bit_pos);
$line = fgets($handle);
$line_elems = explode('#', $line);
/*if( $count > $first )
break;*/
if( $count > 50 )
break;
fseek($handle,$bit_pos-20);
$id[] = $line_elems[0];
$count++;
if( $line_elems[4]==0 )
break;
}
fclose($handle);
}
sort($id);
$tempAr = array();
$tempAr[0]['numb'] = count($id);
//return $tempAr;
return new ResultSet1( $tempAr );
}
if( $this->code_sql==155 )//SELECT id FROM {$GLOBALS['fc_config']['db']['pref']}messages WHERE command='msg' AND toroomid=? ORDER BY id DESC LIMIT
{
$params = array( 'toroomid'=>$params[0] );
$stat_arr = array();
$stats_file_name = $this->getCachFileName('Stats');
$strDesc = 'DESC LIMIT ';
$first = substr($this->queryStr,strpos($this->queryStr,$strDesc) + strlen($strDesc),-1);
$first = (int) substr($first,0,-1);
$first++;
$stats_file = @fopen($stats_file_name, 'r');
if( !$stats_file)
{
$stat_value = $this->getRecordsCount($GLOBALS['fc_config']['db']['pref'].'messages');
//RESTORING message_stats file
$this->saveStatsInCache('MESSAGES_COUNT', $stat_value);
return false;
}
//stream_set_timeout($stats_file, 180);
while ($stat = fgets($stats_file))
{
//$stat = fgets($stats_file);
$stat_elems = explode('=', $stat);
if($stat_elems[0] == 'MESSAGES_COUNT')
{
$stat_arr['MESSAGES_COUNT'] = $stat_elems[1];
}
}
@fclose($stats_file);
$stat_arr['MESSAGES_COUNT'] = (int) $stat_arr['MESSAGES_COUNT'];
//checking all cached files if they have messages with id's: $params["id"] .. $stat_arr["COUNT"]
// if only one ID not found in cach files(if database have spec. command with this id),
// this function return's false and we select all messages from files.
$cacheDir = $this->getCachDir();
$cachePath = $cacheDir->path;
$id_end = $stat_arr['MESSAGES_COUNT'];
$id = array();
$result = null;
while (false !== ($entry = $cacheDir->read()))
{
if( $this->breakFile($entry) || strpos($entry, $GLOBALS['fc_config']['db']['pref'].'messages_')!==FALSE )
continue;
$entry_elems = explode('_', $entry);
if( $entry_elems[0]!=$params['toroomid'] || $entry_elems[0] == 'pm')
continue;
$userid = $entry_elems[1];
$toroomid = $entry_elems[0];
$count=0;
$handle = @fopen($cachePath.$entry, 'r');
$tempArray = array();
fseek($handle,$entry_elems[3]);
//stream_set_timeout($handle, 180);
while ($line = fgets($handle))
{
//$line = fgets($handle);
$line_elems = explode('#', $line);
$bit_pos = $line_elems[count($line_elems)-1];
fseek($handle,$bit_pos);
$line = fgets($handle);
$line_elems = explode('#', $line);
if( $count > $first )
break;
if( $count > 50 )
break;
fseek($handle,$bit_pos-20);
$id[] = $line_elems[0];
$count++;
if( $line_elems[4]==0 )
break;
}
fclose($handle);
}
sort($id);
$tempAr = array();
$tempAr[0]['id'] = $id[count($id)-$first];
//return $tempAr;
return new ResultSet1( $tempAr );
}
if( $this->code_sql==156 )//strpos($this->queryStr,"SELECT * FROM {$GLOBALS['fc_config']['db']['pref']}messages WHERE command='msg' AND id>=? AND id<=? AND toroomid=? ORDER BY id")!==false
{
$params['toroomid'] = $params[2];
$params['id'] = $params[0];
$stat_arr = array();
$stats_file_name = $this->getCachFileName('Stats');
$find_records = 0;
$stats_file = @fopen($stats_file_name, 'r');
if( !$stats_file)
{
$stat_value = $this->getRecordsCount($GLOBALS['fc_config']['db']['pref'].'messages');
//RESTORING message_stats file
$this->saveStatsInCache('MESSAGES_COUNT', $stat_value);
return false;
}
//stream_set_timeout($stats_file, 180);
while ($stat = fgets($stats_file))
{
//$stat = fgets($stats_file);
$stat_elems = explode('=', $stat);
if($stat_elems[0] == 'MESSAGES_COUNT')
{
$stat_arr['MESSAGES_COUNT'] = $stat_elems[1];
}
}
@fclose($stats_file);
$stat_arr['MESSAGES_COUNT'] = (int) $stat_arr['MESSAGES_COUNT'];
//checking all cached files if they have messages with id's: $params["id"] .. $stat_arr["COUNT"]
// if only one ID not found in cach files(if database have spec. command with this id),
// this function return's false and we select all messages from files.
$cacheDir = $this->getCachDir();
$cachePath = $cacheDir->path;
$id_end = $stat_arr['MESSAGES_COUNT'];
$id = array();
$result = null;
while (false !== ($entry = $cacheDir->read()))
{
if( $this->breakFile($entry) || strpos($entry, $GLOBALS['fc_config']['db']['pref'].'messages_')!==FALSE )
continue;
$entry_elems = explode('_', $entry);
if( $entry_elems[0]!=$params['toroomid'] || $entry_elems[0] == 'pm')
continue;
$userid = $entry_elems[1];
$toroomid = $entry_elems[0];
$count=0;
$handle = @fopen($cachePath.$entry, 'r');
$tempArray = array();
$this->setFilePos($handle,$params,$entry_elems[3]);
if( !$is_cmd )
{
//stream_set_timeout($handle, 180);
while ($line = fgets($handle))
{
//$line = fgets($handle);
if( $line=='' )
continue;
$line_elems = explode('#', $line);
$id = (int) $line_elems[0];
$created = $line_elems[1];
$roomid = (int) $line_elems[2];
if( $id >= $params['id'] )
{
$txt = $line_elems[3];
$txt = str_replace('%$$%$', '#', $txt);
$find_records++;
$result_elem = array('id'=>$id, 'created'=>$created, 'toroomid'=>$params['toroomid'], 'command'=>'msg','userid'=>$userid, 'roomid'=>$roomid, 'txt'=>$txt);
$result[count($result)] = $result_elem;
}
}
}
fclose($handle);
}
if( count( $result ) > 0 )
{
if( !function_exists('cmp') )
{
function cmp($elem1, $elem2)
{
if($elem1['id']<$elem2['id'])
return -1;
elseif($elem1['id']==$elem2['id'])
return 0;
elseif($elem1['id']>$elem2['id'])
return 1;
}
}
usort($result, 'cmp');
//return $result;
return new ResultSet1( $result );
}
else
{
$result = array();
return new ResultSet1( $result );
}
}/*
if( $this->code_sql==171 )//( from chatlist )
{
$cacheDir = $this->getCachDir();
$cachePath = $cacheDir->path;
$FileName = $this->getCachFileName('Messages');
$arrayId1 = array();
$arrayFromMsg = array();
$sql = $this->queryStr;
//find foomid in string
$roomid = $params[0];
$time1 = strtotime( $params[1] );
$time2 = strtotime( $params[2] );
$allText = array();
while (false !== ($entry = $cacheDir->read()))
{
if(
$this->breakFile($entry) ||
strpos($entry, 'tables_id' )!==FALSE ||
strpos($entry, $GLOBALS['fc_config']['db']['pref'].'messages_')!==FALSE
)
continue;
$entry_elems = explode('_', $entry);
if( $entry_elems[0] != $roomid ) continue;
$content = file( $cachePath.$entry );
//echo '<pre>'; print_r($content); echo '</pre>';
foreach( $content as $key=>$val )
{
$line = explode("#",$val);
$time3 = strtotime($line[1]);
//echo '['.$line[1].']'.$time3.'>='.'['.$params[1].']'.$time1.' && '.$time3.'<='.$time2.'<br/>';
if( $time3 >= $time1 && $time3 <= $time2 )
{
$arr = array();
$arr['txt'] = html_entity_decode($line[3]);
//$arr['txt'] = $line[3];
$arr['userid'] = $entry_elems[1];
$allText[] = $arr;
}
}
}
$FileName = $this->getCachFileName('Users');
$contentUser = file( $FileName );
foreach( $allText as $key=>$val )
{
$userid = $val['userid'];
foreach( $contentUser as $k=>$v )
{
$arrUser = explode("\t",$v);
if( $userid==$arrUser[0] )
{
$allText[$key]['login'] = $arrUser[1];
}
}
}
return new ResultSet1( $allText );
}*/
if( $this->code_sql == 171 )//SELECT `created`, `roomid`, `userid` FROM `flashchat_messages` WHERE `roomid` IN ( SELECT `id` FROM `flashchat_rooms` ) AND (`command`="adu" OR `command`="mvu") AND `toconnid` IS NULL
{
$cacheDir = $this->getCachDir();
$cachePath = $cacheDir->path;
$rooms_fname = $this->getCachFileName('Rooms');
$rooms = file($rooms_fname);
$all_rooms = array();
$j = 0;
foreach($rooms as $v)
{
$line = explode("\t", $v);
$all_rooms[$j]['id'] = $line[0];
$all_rooms[$j]['name'] = $line[3];
$j++;
}
$allText = array();
while (false !== ($entry = $cacheDir->read()))
{
if(strpos($entry, $GLOBALS['fc_config']['db']['pref'].'messages_') === FALSE) continue;
$content = file($cachePath.$entry);
$j = 0;
foreach($content as $val)
{
$line = explode("\t", $val);
if($line[2] == '')
{
if($line[5] == 'adu' || $line[5] == 'mvu')
{
foreach($all_rooms as $room)
{
if($line[7] == $room['id'])
{
$allText[$j]['created'] = $line[1];
$allText[$j]['roomid'] = $line[7];
$allText[$j]['userid'] = $line[6];
$j++;
}
}
}
}
}
}
return new ResultSet1( $allText );
}
if( $this->code_sql == 172 )//SELECT `created`, `userid` FROM `flashchat_messages` WHERE `userid`='.$row['userid'].' AND (`command`="rmu" OR `command`="mvu") LIMIT '.($opened_rooms[$row['created']]['limit'] - 1).', 1
{
$cacheDir = $this->getCachDir();
$cachePath = $cacheDir->path;
$allText = array();
while (false !== ($entry = $cacheDir->read()))
{
if(strpos($entry, $GLOBALS['fc_config']['db']['pref'].'messages_') === FALSE) continue;
$content = file($cachePath.$entry);
$j = 0;
foreach($content as $val)
{
$line = explode("\t", $val);
if($line[6] == $params[0])
{
if($line[5] == 'rmu' || $line[5] == 'mvu')
{
$allText[$j]['created'] = $line[1];
$allText[$j]['userid'] = $line[6];
$j++;
}
}
}
}
$returnText = array();
foreach($allText as $k => $v)
{
if($k == $params[1])
{
$returnText[0] = $v;
return new ResultSet1( $returnText );
}
}
return new ResultSet1( $allText );
}
if( $this->code_sql == 173 )
//SELECT `userid`, `txt`, `command`, '.$GLOBALS['fc_config']['db']['pref'].'_users.login, `touserid` FROM `'.$GLOBALS['fc_config']['db']['pref'].'_messages` LEFT JOIN `'.$GLOBALS['fc_config']['db']['pref'].'_users` ON ('.$GLOBALS['fc_config']['db']['pref'].'_messages.userid = '.$GLOBALS['fc_config']['db']['pref'].'_users.id) WHERE ((`roomid` = '.$roomid.' AND (`command`="msg" OR `command`="adu")) OR (`touserid` IS NOT NULL AND `roomid` IS NULL) OR (`roomid` IS NULL AND (`command`="rmu" OR `command`="mvu"))) AND (`created` >= "'.$start.'" AND `created` <= "'.$end.'")
//SELECT `roomid`, `userid`, `txt`, `command`, `created`, '.$GLOBALS['fc_config']['db']['pref'].'users.login FROM `'.$GLOBALS['fc_config']['db']['pref'].'messages` LEFT JOIN `'.$GLOBALS['fc_config']['db']['pref'].'users` ON ('.$GLOBALS['fc_config']['db']['pref'].'messages.userid = $GLOBALS['fc_config']['db']['pref'].'users.id) WHERE ((`roomid` = ? AND `command` IN ("msg", "adu") AND (`created` >= ? AND `created` <= ?)) OR (`roomid` IS NULL AND `command` = "rmu") AND (`created` >= ? AND `created` <= ?))
{
$cacheDir = $this->getCachDir();
$cachePath = $cacheDir->path;
$allText = array();
while (false !== ($entry = $cacheDir->read()))
{
if($this->breakFile($entry) || strpos($entry, 'tables_id' ) !== FALSE || strpos($entry, $GLOBALS['fc_config']['db']['pref'].'messages_') !== FALSE || strpos($entry, $GLOBALS['fc_config']['db']['pref'].'config_') !== FALSE) continue;
$entry_elems = explode('_', $entry);
if($entry_elems[0] != $params[0]) continue;
$content = file($cachePath.$entry);
$j = 0;
foreach($content as $val)
{
$line = explode("\t", $val);
foreach($line as $v)
{
$str = explode('#', $v);
if(strtotime($str[1]) >= strtotime($params[1]))
{
$allText[$j]['userid'] = $entry_elems[1];
$allText[$j]['roomid'] = $entry_elems[0];
$allText[$j]['created'] = $str[1];
$allText[$j]['txt'] = $str[3];
$allText[$j]['command'] = 'msg';
$j++;
}
}
}
}
$FileName = $this->getCachFileName('Users');
$contentUser = file( $FileName );
foreach( $allText as $key=>$val )
{
$userid = $val['userid'];
foreach( $contentUser as $k => $v )
{
$arrUser = explode("\t", $v);
if( $userid==$arrUser[0] )
{
$allText[$key]['login'] = $arrUser[1];
}
}
}
//echo '<pre>'; print_r($allText); echo '</pre>';
return new ResultSet1( $allText );
}
if( $this->code_sql == 174 )//SELECT `userid`, `roomid`, `command`, `created`, `toconnid` FROM `'.$GLOBALS['fc_config']['db']['pref'].'messages` WHERE ( `roomid` IS NULL OR `roomid` IN (SELECT `id` FROM `flashchat_rooms`)) AND ( `created` >= "'.date('Y-m-d G:i:s', 0).'" AND `created` <= "'.date('Y-m-d G:i:s', time() + 60).'" ) AND `command` IN ("adu", "rmu", "mvu") AND `toconnid` IS NULL ORDER BY `created`
{
$cacheDir = $this->getCachDir();
$cachePath = $cacheDir->path;
$allText = array();
$rooms_fname = $this->getCachFileName('Rooms');
$rooms = file($rooms_fname);
$all_rooms = array();
$j = 0;
foreach($rooms as $v)
{
$line = explode("\t", $v);
$all_rooms[$j]['id'] = $line[0];
$all_rooms[$j]['name'] = $line[3];
$j++;
}
while (false !== ($entry = $cacheDir->read()))
{
if(strpos($entry, $GLOBALS['fc_config']['db']['pref'].'messages_') === FALSE) continue;
$content = file($cachePath.$entry);
$tmp = array();
foreach($content as $val)
{
$line = explode("\t", $val);
if(($line[5] == 'adu' || $line[5] == 'rmu' || $line[5] == 'mvu') && $line[2] == '')
{
$tmp['created'] = $line[1];
$tmp['userid'] = $line[6];
$tmp['roomid'] = $line[7];
$tmp['command'] = $line[5];
$tmp['toconnid'] = $line[2];
$allText []= $tmp;
}
}
}
return new ResultSet1( $allText );
}
if( $this->code_sql == 175 )
//SELECT `txt`, `created`, '.$GLOBALS['fc_config']['db']['pref'].'users.login, `touserid` FROM `'.$GLOBALS['fc_config']['db']['pref'].'messages` LEFT JOIN `'.$GLOBALS['fc_config']['db']['pref'].'users` ON ('.$GLOBALS['fc_config']['db']['pref'].'messages.userid = '.$GLOBALS['fc_config']['db']['pref'].'users.id) WHERE `roomid` IS NULL AND `command` = "msg" ORDER BY `created`
{
$cacheDir = $this->getCachDir();
$cachePath = $cacheDir->path;
$allText = array();
while (false !== ($entry = $cacheDir->read()))
{
if($this->breakFile($entry) || strpos($entry, 'tables_id' ) !== FALSE || strpos($entry, $GLOBALS['fc_config']['db']['pref'].'messages_') !== FALSE || strpos($entry, $GLOBALS['fc_config']['db']['pref'].'config_') !== FALSE) continue;
$entry_elems = explode('_', $entry);
if($entry_elems[0] != 'pm') continue;
$content = file($cachePath.$entry);
foreach($content as $val)
{
$line = explode('#', $val);
$tmp = array();
$tmp['created'] = $line[1];
$tmp['login'] = $entry_elems[1];
$tmp['touserid'] = $entry_elems[2];
$tmp['txt'] = $line[3];
$allText []= $tmp;
}
}
$FileName = $this->getCachFileName('Users');
$contentUser = file( $FileName );
foreach( $allText as $key=>$val )
{
$userid = $val['login'];
foreach( $contentUser as $k => $v )
{
$arrUser = explode("\t", $v);
if( $userid == $arrUser[0] )
{
$allText[$key]['login'] = $arrUser[1];
}
}
}
$array_sort = array();
foreach($allText as $k => $v)
{
$array_sort[$k] = $v['created'];
}
array_multisort($array_sort, SORT_ASC, $allText);
return new ResultSet1( $allText );
}
if( $this->code_sql==170 )//( from chatlist )
{
$cacheDir = $this->getCachDir();
$cachePath = $cacheDir->path;
$FileName = $this->getCachFileName('Messages');
$arrayId1 = array();
$arrayFromMsg = array();
while (false !== ($entry = $cacheDir->read()))
{
if( strpos($entry,'messages')===false )
continue;
$content = file( $cachePath.$entry );
break;
}
$msgArrray = array();
foreach( $content as $key => $val )
{
if( $val=='' )
continue;
$arr = explode("\t",$val);
if( $arr[5]=='adu' || $arr[5]=='mvu' || $arr[5]=='rmu' )
{
$arr['created'] = $arr[1];
$arr['command'] = $arr[5];
$arr['userid'] = $arr[6];
$arr['roomid'] = $arr[7];
$arr = $this->unsetAll($arr);
$msgArrray[] = $arr;
}
else
continue;
}
$FileName = $this->getCachFileName('Users');
$contentUser = file( $FileName );
foreach( $msgArrray as $key=>$val )
{
$userid = $val['userid'];
foreach( $contentUser as $k=>$v )
{
$arrUser = explode("\t",$v);
if( $userid==$arrUser[0] )
{
$msgArrray[$key]['login'] = $arrUser[1];
$msgArrray[$key]['roles'] = $arrUser[3];
}
}
}
$FileName = $this->getCachFileName('Rooms');
$contentRooms = file( $FileName );
foreach( $msgArrray as $key=>$val )
{
$roomid = $val['roomid'];
foreach( $contentRooms as $k=>$v )
{
$arrRoom = explode("\t",$v);
if( $roomid==$arrRoom[0] )
$msgArrray[$key]['name'] = $arrRoom[3];
}
}
return new ResultSet1( $msgArrray );
}
if( $this->code_sql==161 )//strpos($this->queryStr,'SELECT id FROM '.$GLOBALS['fc_config']['db']['pref'].'messages WHERE command=\'msg\' AND toroomid=? AND created > DATE_SUB(NOW(),')!==false
{
$cacheDir = $this->getCachDir();
$cachePath = $cacheDir->path;
$allUsers = array();
$arrayId1 = array();
$arrayId = array();
$first = 'INTERVAL';
$second = 'MINUTE';
$tempStr = substr($this->queryStr,strpos($this->queryStr,$first) + strlen($first),strpos($this->queryStr,$second)-(strpos($this->queryStr,$first) + strlen($first)));
$min = trim($tempStr);
while (false !== ($entry = $cacheDir->read()))
{
if( $this->breakFile($entry) || strpos($entry, $GLOBALS['fc_config']['db']['pref'].'messages_')!==FALSE )
continue;
$entry_elems = explode('_', $entry);
if( $entry_elems[0] == '' )//
continue;
if( $entry_elems[0] != $params[0] )
continue;
if( (time()-$entry_elems[4])>($min*60) )
continue;
$handle = @fopen($cachePath.$entry, 'r');
while (!feof( $handle )) //strtotime($str))
{
$line = fgets( $handle );
$line_elems = explode('#', $line);
if( (time()-strtotime($line_elems[1]))>($min*60) )
continue;
$id = (int) $line_elems[0];
$arrayId[$id] = $id;
}
fclose( $handle );
}
sort( $arrayId );
if( count($arrayId)!=0 )
$arrayId1[0]['id'] = $arrayId[0];
else
return null;
//return $arrayId1;
return new ResultSet1( $arrayId1 );
}
//'SELECT count(*) as msgnumb FROM '.$GLOBALS['fc_config']['db']['pref'].'messages WHERE command=\'msg\' AND (userid IS NOT NULL OR roomid IS NOT NULL)'
if( $this->code_sql==160 )//'SELECT id FROM '.$GLOBALS['fc_config']['db']['pref'].'messages WHERE command=\'msg\' AND toroomid=? AND created > DATE_SUB(NOW(),'
{
$cacheDir = $this->getCachDir();
$cachePath = $cacheDir->path;
$count = 0;
while (false !== ($entry = $cacheDir->read()))
{
if( $this->breakFile($entry) || strpos($entry, $GLOBALS['fc_config']['db']['pref'].'messages_')!==FALSE )
continue;
if( strpos($entry, 'tables_id')!==FALSE )
continue;
$content = file( $cachePath.$entry );
$count += sizeof($content);
}
$arrayId1 = array();
$arrayId1[]['msgnumb'] = $count;
return new ResultSet1( $arrayId1 );
}
elseif( $this->code_sql==153 )//DELETE FROM {$GLOBALS['fc_config']['db']['pref']}messages WHERE created < DATE_SUB(NOW(),INTERVAL ? SECOND
{
return true;
}
elseif( $this->code_sql == 151 )//insert
{
$cacheDir = $this->getCachDir();
$cachePath = $cacheDir->path;
if($this->queryStr=='DELETE FROM '.$GLOBALS['fc_config']['db']['pref'].'messages WHERE created < DATE_SUB(NOW(),INTERVAL ? SECOND)')
{
return true;
}
else//if we INSERT new messages
{
$isPrivate = ($params[2]!='');
if( $params[4]!='msg' )
{
if( $params[4]=='lin' )
{
while (false !== ($entry = $cacheDir->read()))
{
if( $this->breakFile($entry) || strpos($entry, $GLOBALS['fc_config']['db']['pref'].'messages_')!==FALSE )
continue;
if(strpos($entry, $GLOBALS['fc_config']['db']['pref'].'config_') !== FALSE) continue;
//$cachePath.$entry
$element = explode('_',$entry);
if( $element[1]==$params[5] || ($element[0]=='pm' && $element[1]==$params[5]) || ((time() - filemtime($cachePath.$entry))>3600))
{
unlink($cachePath.$entry);
}
}
}
return $this->insertCommand( $params );
}
$id = $this->file_insert_id( 7 );
$params = array('id'=>$id, 'touserid'=>$params[2], 'toroomid'=>$params[3], 'userid'=>$params[5], 'roomid'=>$params[6], 'txt'=>$params[7], 'instance_id'=>$params[9]);
/*if( $params['roomid']=='' )
return;*/
$today = date('Y-m-d G:i:s');
//$today = time();
$appended = false;
$greate = false;
$to_add = $GLOBALS['fc_config']['cacheFilePrefix'];
while (false !== ($entry = $cacheDir->read()))
{
if( $this->breakFile($entry) || strpos($entry, $GLOBALS['fc_config']['db']['pref'].'messages_')!==FALSE )
continue;
if(!$isPrivate)
{
//$file = @fopen($cachePath.$params['toroomid'].'_'.$params['userid'].'_'.$to_add.'.txt', 'w');
if( strpos($entry,$params['toroomid'].'_'.$params['userid'].'_') !== FALSE )
{
if( strpos($entry, $GLOBALS['fc_config']['cacheFilePrefix'].'_'.$_SESSION['session_inst'] ) !== FALSE )
{
$file = @fopen($cachePath.$entry, 'a');
$greate = true;
$file_name = $cachePath.$entry;
}
}
}
else
{
if( strpos($entry,'pm_'.$params['userid'].'_'.$params['touserid'].'_') !== FALSE )
{
if( strpos($entry, $GLOBALS['fc_config']['cacheFilePrefix'].'_'.$_SESSION['session_inst'] ) !== FALSE )
{
$file = @fopen($cachePath.$entry, 'a');
$greate = true;
$file_name = $cachePath.$entry;
}
}
}
}
if( !$greate )
{
if(!$isPrivate)
{
$file_name = $cachePath.$params['toroomid'].'_'.$params['userid'].'_'.$id.'_0_'.time().'_'.$to_add.'_'.$_SESSION['session_inst'].'.txt';
$file = @fopen($file_name, 'w');
}
else
{
$file_name = $cachePath.'pm_'.$params['userid'].'_'.$params['touserid'].'_'.$id.'_0_'.$to_add.'_'.$_SESSION['session_inst'].'.txt';
$file = @fopen( $file_name , 'w' );
}
}
$pos = filesize($file_name);
$params['txt'] = ereg_replace('#', '%$$%$', $params['txt']);
$_str = $id.'#'.$today.'#'.$params['roomid'].'#'.$params['txt'].'#'.$pos."\n";
@fwrite($file,$_str);
fflush($file);
@fclose($file);
$cacheDir->close();
$lastrow = filesize($file_name)-$pos;
if( $greate )
{
if(!$isPrivate)
{
rename($file_name, $cachePath.$params['toroomid'].'_'.$params['userid'].'_'.$id.'_'.$pos.'_'.time().'_'.$to_add.'_1.txt');
}
else
{
rename($file_name, $cachePath.'pm_'.$params['userid'].'_'.$params['touserid'].'_'.$id.'_'.$pos.'_'.time().'_'.$to_add.'_1.txt');
}
}
return $id;
}
//return true;
//return $this->saveMessagesInCache( $params );
}
elseif( $this->code_sql == 157 )//$this->queryStr=="SELECT userid FROM {$GLOBALS['fc_config']['db']['pref']}messages where command=? or command=? and userid is not null order by userid"
{
$cacheDir = $this->getCachDir();
$cachePath = $cacheDir->path;
$total = '';
$allMsg = array();
while (false !== ($entry = $cacheDir->read()))
{
if( $this->breakFile($entry) )
continue;
if( strpos($entry, $GLOBALS['fc_config']['db']['pref'].'messages')!==FALSE )
{
$handle = @fopen($cachePath.$entry, 'r');
while (!feof($handle))
{
$buffer = fgets($handle);
$array = explode("\t",$buffer);
if(
(
$array[5] != $params[0] &&
$array[5] != $params[1]
)
&&
$array[6] != ''
)
{
$array['userid'] = $array[6];
$array = $this->unsetAll($array);
$allMsg[] = $array;
}
}
@fclose($handle);
}
}
return new ResultSet1( $allMsg );
}
elseif( $this->code_sql==152 )//SELECT * FROM {$GLOBALS['fc_config']['db']['pref']}messages WHERE toconnid=? AND id>=? ORDER BY id
{
$cacheDir = $this->getCachDir();
$cachePath = $cacheDir->path;
$total = '';
$allMsg = array();
while (false !== ($entry = $cacheDir->read()))
{
if( $this->breakFile($entry) )
continue;
if( strpos($entry, $GLOBALS['fc_config']['db']['pref'].'messages')!==FALSE )
{
$handle = @fopen($cachePath.$entry, 'r');
$elem = explode('_',$entry);
$params['id'] = $params[1];
$handle = $this->setFileMsgPos($handle,$params,$elem[2]);
//stream_set_timeout($handle, 180);
while ($buffer = fgets($handle))
{
//$buffer = fgets($handle);
$array = explode("\t",$buffer);
if( $array[2]==$params[0] && $array[0]>=$params[1] )// && ''!=trim($array[3])
{
$array['id'] = $array[0];
$array['created'] = $array[1];
$array['toconnid'] = $array[2];
$array['touserid'] = $array[3];
$array['toroomid'] = $array[4];
$array['command'] = $array[5];
$array['userid'] = $array[6];
$array['roomid'] = $array[7];
$array['txt'] = $array[8];
$array['chatid'] = $array[9];
$array = $this->unsetAll($array);
$allMsg[] = $array;
}
}
@fclose($handle);
}
}
//return $allMsg;
return new ResultSet1( $allMsg );
}
elseif( $this->code_sql==158 )//strpos($this->queryStr,"SELECT msgs.*, DATE_FORMAT(DATE_ADD")!==false
{
$params = array('toconnid'=>$params[0], 'touserid'=>$params[1], 'toroomid'=>$params[2], 'id'=>$params[3]);
$params['id'] = (int) $params['id'];
$cacheDir = $this->getCachDir();
$cachePath = $cacheDir->path;
$result = array();
$find_records = 0;
while (false !== ($entry = $cacheDir->read()))
{
if( $this->breakFile($entry) || strpos( $entry , 'messages_' )!==false )
continue;
$entry_elems = explode('_', $entry);
if($entry_elems[0] == 'pm')
{
$is_private = true;
$userid = (int) $entry_elems[1];
$touserid = (int) $entry_elems[2];
}
else
{
$is_private = false;
$userid = $entry_elems[1];
$toroomid = $entry_elems[0];
}
$str = $this->queryStr;
if($_REQUEST['roomid'])
{
if( $toroomid!=$_REQUEST['roomid'] )
continue;
}
if($_REQUEST['userid'])
{
if( $userid!=$_REQUEST['userid'] && $touserid!=$_REQUEST['userid'] )
continue;
}
$handle = @fopen($cachePath.$entry, 'r');
$tempArray = array();
//stream_set_timeout($handle, 180);
while ($line = fgets($handle))
{
//$line = fgets($handle);
if( $line=='' )
continue;
$find_records++;
$line_elems = explode('#', $line);
$tempArray['id'] = $line_elems[0];
$tempArray['created'] = $line_elems[1];
$tempArray['toconnid'] = '';
if($_REQUEST['days'])
{
if( strtotime($tempArray['created']) <= strtotime($_REQUEST['days']) )
continue;
}
if($_REQUEST['from'])
{
if( strtotime($tempArray['created']) <= strtotime($_REQUEST['from']) )
continue;
}
if($_REQUEST['to'])
{
if( strtotime($tempArray['created']) >= strtotime($_REQUEST['to']) )
continue;
}
if( $is_private )
$tempArray['touserid'] = $entry_elems[2];
else
$tempArray['touserid'] = '';
$tempArray['toroomid'] = $toroomid;
$tempArray['command'] = 'msg';
$tempArray['userid'] = $entry_elems[1];
$tempArray['roomid'] = $entry_elems[0];
if($_REQUEST['keyword'])
{
if( strpos($line_elems[3],$_REQUEST['keyword'])!==true )
continue;
}
$tempArray['txt'] = $line_elems[3];
$tempArray['chatid'] = 1;
$tempArray['sent'] = date('F j, Y, g:i a',strtotime($line_elems[1]));
$file_name = $this->getCachFileName('Rooms');
//$arrayRoom = file( $file_name );
$i = 0;
while( !($arrayRoom = file($file_name)) )
{
$i++;
if( $i>1000 )
break;
}
$toRoomStr = '';
$fromRoomStr = '';
foreach( $arrayRoom as $key=>$val )
{
$room_elems = explode("\t", $val);
if( $room_elems[0]==$entry_elems[0] )
{
$toRoomStr = $room_elems[3];
$fromRoomStr = $room_elems[3];
break;
}
}
$tempArray['toroom'] = $toRoomStr;
$tempArray['fromroom'] = $fromRoomStr;
$result[] = $tempArray;
}
fclose( $handle );
}
if( $find_records > 0 )
{
if( !function_exists('cmp11') )
{
function cmp11($elem1, $elem2)
{
if($elem1['id']<$elem2['id'])
return -1;
elseif($elem1['id']==$elem2['id'])
return 0;
elseif($elem1['id']>$elem2['id'])
return 1;
}
}
usort($result, 'cmp11');
return new ResultSet1( $result );
}
else
{
$result = array();
return new ResultSet1( $result );
}
}
elseif( $this->code_sql==162 )//strpos($this->queryStr,"SELECT msgs.*, DATE_FORMAT(DATE_ADD")!==false
{
$params = array('toconnid'=>$params[0], 'touserid'=>$params[1], 'toroomid'=>$params[2], 'id'=>$params[3]);
$params['id'] = (int) $params['id'];
$cacheDir = $this->getCachDir();
$cachePath = $cacheDir->path;
$result = array();
$find_records = 0;
if( isset($_REQUEST['from']) )
{
$date = $_REQUEST['from'].'';
$_REQUEST['from'] = substr( $date , 0 , -3 );
}
if( isset($_REQUEST['to']) )
{
$date = $_REQUEST['to'].'';
$_REQUEST['to'] = substr( $date , 0 , -3 );
}
if( isset($_REQUEST['days']) )
{
$date = $_REQUEST['days'].'';
$_REQUEST['days'] = substr( $date , 0 , -3 );
}
while (false !== ($entry = $cacheDir->read()))
{
if( $this->breakFile($entry) || strpos( $entry , 'messages_' )!==false || strpos( $entry , 'tables_id' )!==false || strpos( $entry , 'config_' )!==false)//
continue;
$entry_elems = explode('_', $entry);
if($entry_elems[0] == 'pm')
{
$is_private = true;
$userid = (int) $entry_elems[1];
$touserid = (int) $entry_elems[2];
}
else
{
$is_private = false;
$userid = $entry_elems[1];
$toroomid = $entry_elems[0];
}
$str = $this->queryStr;
if($_REQUEST['roomid'])
{
if( $toroomid!=$_REQUEST['roomid'] )
continue;
}
if($_REQUEST['userid'])
{
if( $userid!=$_REQUEST['userid'] && $touserid!=$_REQUEST['userid'] )
continue;
}
$handle = @fopen($cachePath.$entry, 'r');
$tempArray = array();
//stream_set_timeout($handle, 180);
while ($line = fgets($handle))
{
if( $line=='' )
continue;
$find_records++;
$line_elems = explode('#', $line);
$tempArray['id'] = $line_elems[0];
$tempArray['created'] = $line_elems[1];
$tempArray['toconnid'] = '';
if($_REQUEST['days'])
{
if( strtotime($tempArray['created']) < strtotime($_REQUEST['days']) )
continue;
}
if($_REQUEST['from'])
{
if( strtotime($tempArray['created']) < strtotime($_REQUEST['from']) )
continue;
}
if($_REQUEST['to'])
{
if( strtotime($tempArray['created']) > strtotime($_REQUEST['to']) )
continue;
}
if( $is_private )
$tempArray['touserid'] = $entry_elems[2];
else
$tempArray['touserid'] = '';
$tempArray['toroomid'] = $toroomid;
$tempArray['command'] = 'msg';
$tempArray['userid'] = $entry_elems[1];
$tempArray['roomid'] = $entry_elems[0];
if($_REQUEST['keyword'])
{
if( strpos($line_elems[3],$_REQUEST['keyword'])===false )
continue;
}
$tempArray['txt'] = html_entity_decode($line_elems[3]);
$tempArray['chatid'] = 1;
$tempArray['sent'] = date('F j, Y, g:i a', strtotime($line_elems[1]));
$file_name = $this->getCachFileName('Rooms');
//$arrayRoom = file( $file_name );
$i = 0;
while( !($arrayRoom = file($file_name)) )
{
//usleep(1000);//for linux
$i++;
if( $i>1000 )
break;
}
$toRoomStr = '';
$fromRoomStr = '';
foreach( $arrayRoom as $key=>$val )
{
$room_elems = explode("\t", $val);
if( $room_elems[0]==$entry_elems[0] )
{
$toRoomStr = $room_elems[3];
$fromRoomStr = $room_elems[3];
break;
}
}
$tempArray['toroom'] = $toRoomStr;
$tempArray['fromroom'] = $fromRoomStr;
$result[] = $tempArray;
}
fclose( $handle );
}
if( $find_records > 0 )
{
if( !function_exists('cmp11') )
{
function cmp11($elem1, $elem2)
{
if( $elem1['id']<$elem2['id'] )
return -1;
elseif( $elem1['id']==$elem2['id'] )
return 0;
elseif( $elem1['id']>$elem2['id'] )
return 1;
}
}
usort($result, 'cmp11');
//return $result;
return new ResultSet1( $result );
}
else
{
$result = array();
return new ResultSet1( $result );
}
}
//SELECT userid,login,txt FROM flashchat_messages LEFT JOIN flashchat_users
//ON (flashchat_messages.userid = flashchat_users.id) WHERE (flashchat_messages.command = 'msg')
//AND (flashchat_messages.roomid = '1') AND (flashchat_messages.created >= 2007-09-12 17:36:42)
//AND (flashchat_messages.created <= 2007-09-12 17:37:29)
if( $this->code_sql==163 )
{
$params = array('toconnid'=>$params[0],'touserid'=>$params[1],'toroomid'=>$params[2],'id'=>$params[3]);
$params['id'] = (int) $params['id'];
$cacheDir = $this->getCachDir();
$cachePath = $cacheDir->path;
$result = array();
$find_records = 0;
$allUsers = array();
$userArray = array();
while (false !== ($entry = $cacheDir->read()))
{
if( $this->breakFile($entry) || strpos( $entry , 'messages_' )!==false || strpos( $entry , 'tables_id' )!==false)
continue;
$entry_elems = explode('_', $entry);
if( $entry_elems[0]!=$GLOBALS['tempValue']['roomid'] )
continue;
$content = file( $cachePath.$entry );
foreach( $content as $key=>$val )
{
$find_records++;
$line_elems = explode('#', $val);
$values['txt'] = $line_elems[3];
$values['room'] = $entry_elems[0];
$values['userid'] = $entry_elems[1];
$userArray[] = $entry_elems[1];
$allUsers[] = $values;
}
}
$allUsers = $this->sortByIdUser( $allUsers );
return new ResultSet1( $allUsers );
}
elseif( $this->code_sql==154 )
{
if( ($rows=$this->messageIsCached($params)) !== FALSE )
{
return new ResultSet1($rows);
}
else
{
$cacheDir = $this->getCachDir();
$cachePath = $cacheDir->path;
$total = '';
$allMsg = array();
while (false !== ($entry = $cacheDir->read()))
{
if( $this->breakFile($entry) || strpos($entry, 'messages')!==FALSE )
continue;
if( strpos($entry, 'messages')!==FALSE )
{
$handle = @fopen($cachePath.$entry, 'r');
$elem = explode('_',$entry);
$params['id'] = $params[3];
$this->setFileMsgPos($handle,$params,$elem[2]);
//stream_set_timeout($handle, 180);
while ($buffer = fgets($handle))
{
//$buffer = fgets($handle);
$array = explode("\t",$buffer);
if(
(
$array[2]!='msg' &&
$array[5]!='lout' &&
$array[2]!='msgu'
)
&&
(
$array[2]==$params[0] ||
$array[3]==$params[1] ||
$array[4]==$params[2] ||
(
$array[2]=='' &&
$array[3]=='' &&
$array[4]==''
)
)
&&
$array[0]>=$params[3]
)
{
$array['id'] = $array[0];
$array['created'] = $array[1];
$array['toconnid'] = $array[2];
$array['touserid'] = $array[3];
$array['toroomid'] = $array[4];
$array['command'] = $array[5];
$array['userid'] = $array[6];
$array['roomid'] = $array[7];
$array['txt'] = $array[8];
$array['chatid'] = $array[9];
$array['instance_id'] = $_SESSION['session_inst'];
$array = $this->unsetAll($array);
$allMsg[] = $array;
}
}
@fclose($handle);
}
}
return new ResultSet1( $allMsg );
}
}
?>