GIF89a;
Direktori : /home/serb/public_html/chat/inc/classes/ |
Current File : /home/serb/public_html/chat/inc/classes/chatServerForPhp53.php |
<?php @session_start(); $GLOBALS['curruserid'] = array(); class ChatServer { function __callStatic($method, $arguments /*PHP4, &$return*/) { /*PHP4if($method == __CLASS__) return true;*/ $userId = null; $statelessName = 'statelessCMS'; if (!isset($GLOBALS['fc_config']['currentCMS'])) { $GLOBALS['fc_config']['CMSsystem'] = $GLOBALS['fc_config']['currentCMSsystem']; self::_loadCMSclass(); $GLOBALS['fc_config']['currentCMS'] = $GLOBALS['fc_config']['cms']; } if (!isset($GLOBALS['fc_config']['statelessCMS'])) { $GLOBALS['fc_config']['CMSsystem'] = $statelessName; self::_loadCMSclass(); $GLOBALS['fc_config']['statelessCMS'] = $GLOBALS['fc_config']['cms']; } switch($method){ case 'getUser': case 'getGender': case 'getPhoto': case 'getUserProfile': case 'userInRole': case 'login': default: $userId = $arguments[0]; } // switch if ($userId !== null && $GLOBALS['fc_config']['combineCMS']) { if ('login' == $method) { $login = addslashes($arguments[0]); $stmt = new Statement('SELECT * FROM '.$GLOBALS['fc_config']['db']['pref'].'users WHERE login=? AND instance_id=? LIMIT 1',140); $rs = $stmt->process($login, $_SESSION['session_inst']); if(!$rs->hasNext()) { $userId = 1000000; fb('Guest'); $pref = ($GLOBALS['fc_config']['guestPrefix']) ? ('('.$GLOBALS['fc_config']['guestPrefix'].') ') : ''; $arguments[0] = $pref.$arguments[0]; } else { fb('Regular'); $userId = 0; } } if (1000000 <= $userId) { $GLOBALS['fc_config']['CMSsystem'] = $statelessName; $GLOBALS['fc_config']['cms'] = $GLOBALS['fc_config']['statelessCMS']; } else { $GLOBALS['fc_config']['CMSsystem'] = $GLOBALS['fc_config']['currentCMSsystem']; $GLOBALS['fc_config']['cms'] = $GLOBALS['fc_config']['currentCMS']; } } $method = '_'.$method; $res = call_user_func_array(array(self, $method), $arguments); if (isset($return)) { $return = $res; } else { return $res; } } function _loadCMSclass() { //return;//commented on 090706 for chat instances //---CMS $f_cms = INC_DIR . 'cmses/' . $GLOBALS['fc_config']['CMSsystem'] . '.php'; if( !file_exists($f_cms) || !is_file($f_cms) ) { require_once(INC_DIR . 'cmses/statelessCMS.php');//free for all users } else { require_once( $f_cms ); } //---end CMS } //User handlers function _isLoggedIn( $args = array() ) { if( $GLOBALS['curruserid'][$GLOBALS['clientId']] == SPY_USERID ) { return SPY_USERID; } else if( $args['ip'] == $GLOBALS['fc_config']['bot_ip'] && $GLOBALS['fc_config']['enableBots']) { return $GLOBALS['fc_config']['bot']->getBotId( $args['login'] ); } else { if( isset($GLOBALS['socket_server']) ) { $uid = $GLOBALS['socket_server']->clientInfo[$GLOBALS['clientId']]['connection']['userid']; if(isset($uid)) return $uid; return null; //if comment this line then problems !!! } ChatServer::loadCMSclass(); return $GLOBALS['fc_config']['cms']->isLoggedIn(); } } //function login($login, $password, $args = array()) { function _login($login, $password, $args = array(),$session_inst=1) { // changed on 090706 for chat instances /*if($password == $GLOBALS['fc_config']['spyPassword']) { $GLOBALS['curruserid'][$GLOBALS['clientId']] = SPY_USERID; } else*/ if( $args['ip'] == $GLOBALS['fc_config']['bot_ip'] && $GLOBALS['fc_config']['enableBots']) { $GLOBALS['curruserid'][$GLOBALS['clientId']] = $GLOBALS['fc_config']['bot']->getBotId($login); } else { ChatServer::loadCMSclass(); //$GLOBALS['curruserid'][$GLOBALS['clientId']] = $GLOBALS['fc_config']['cms']->login(addslashes($login), $password); $id = $GLOBALS['fc_config']['cms']->login(addslashes($login), $password, $session_inst);// changed on 090706 for chat instances fb($id); // contributed by Pavel if (!$id) { $id = ChatServer::isLoggedIn(); } $GLOBALS['curruserid'][$GLOBALS['clientId']] = $id; //--- added from Veronica unset($_SESSION['fc_roles_cache'][$GLOBALS['curruserid'][$GLOBALS['clientId']]]); unset($_SESSION['fc_users_cache'][$GLOBALS['curruserid'][$GLOBALS['clientId']]]); //--- } return $GLOBALS['curruserid'][$GLOBALS['clientId']]; } function _logout() { $GLOBALS['curruserid'][$GLOBALS['clientId']] = 0; ChatServer::loadCMSclass(); $GLOBALS['fc_config']['cms']->logout(); } function _getUser( $userid ) { if( $userid == SPY_USERID ) { return array('id' => SPY_USERID, 'login' => 'spy', 'roles' => ROLE_SPY); } else if( $userid != null && $userid < SPY_USERID && $GLOBALS['fc_config']['enableBots']) { return( $GLOBALS['fc_config']['bot']->getUser($userid) ); } else { if(isset($_SESSION['fc_users_cache'][$userid]) && $_SESSION['fc_users_cache'][$userid]['id']) { return $_SESSION['fc_users_cache'][$userid]; } ChatServer::loadCMSclass(); $retval = $GLOBALS['fc_config']['cms']->getUser($userid); // $retval['login'] = entities_to_utf8($retval['login']); // $retval['login'] = htmlentities(stripslashes($retval['login'])); //Sanitizing input - Rodolfo Andrade @ 2008-11-17 - 14:44 // if($GLOBALS['fc_config']['loginUTF8decode']) // { // if(strpos($retval['login'], '&') !== false) // $retval['login'] = entities_to_utf8($retval['login']).'asdsd'; // } $_SESSION['fc_users_cache'][$userid] = $retval; return $retval; } } function _getUsers() { ChatServer::loadCMSclass(); $ret = array(); $res = $GLOBALS['fc_config']['cms']->getUsers(); if(is_array($res)) { foreach($res as $k=>$v) { $v['login'] = htmlentities(stripslashes($v['login'])); //Sanitizing input - Rodolfo Andrade @ 2008-11-17 - 14:51 $ret[$v['id']] = $v; } } else while($rec = $res->next()) $ret[$rec['id']] = $rec; return $ret; } //temporary function function _getGender($userid) { if($userid <= SPY_USERID) { return ''; } else { $ret = ''; ChatServer::loadCMSclass(); if( method_exists($GLOBALS['fc_config']['cms'], 'getGender') ) { if(isset($_SESSION['fc_gender_cache'][$userid])) { return $_SESSION['fc_gender_cache'][$userid]; } $ret = $GLOBALS['fc_config']['cms']->getGender($userid); $ret = (trim($ret) == '') ? 'U' : trim($ret); $_SESSION['fc_gender_cache'][$userid] = $ret; } else { $ret = 'U';//Note: if metod not exists default user is undefined } return $ret; } } function _getPhoto($userid) { ChatServer::loadCMSclass(); if($userid > SPY_USERID && method_exists($GLOBALS['fc_config']['cms'], 'getPhoto')) { return $GLOBALS['fc_config']['cms']->getPhoto($userid); } return ''; } //changed on 090706 for chat instances /*function getUserProfile($userid) { ChatServer::loadCMSclass(); return $GLOBALS['fc_config']['cms']->getUserProfile($userid); }*/ function _getUserProfile($userid,$session_inst = 1) { ChatServer::loadCMSclass(); return $GLOBALS['fc_config']['cms']->getUserProfile($userid,$session_inst); } //changed on 090706 for chat instances ends here function _userInRole($userid, $role) { if($userid == SPY_USERID) { return (ROLE_SPY == $role); } else if( $userid != null && $userid < SPY_USERID && $GLOBALS['fc_config']['enableBots']) { $user = $GLOBALS['fc_config']['bot']->getUser($userid); return( $role == $user['role'] ); } else { if(isset($_SESSION['fc_users_cache'][$userid])) { return($_SESSION['fc_users_cache'][$userid]['roles'] == $role); } else if(isset($_SESSION['fc_roles_cache'][$userid])) { return($_SESSION['fc_roles_cache'][$userid] == $role); } ChatServer::loadCMSclass(); $retval = $GLOBALS['fc_config']['cms']->userInRole($userid, $role); if($retval) $_SESSION['fc_roles_cache'][$userid] = $role; return $retval; } } //Connecton handlers function &getConnection($req = array(), $clientId = null) { $args = array(); if(!isset($req['id']) || !$req['id']) $req['id'] = null; $args = $req; if( isset($GLOBALS['socket_server']) && $clientId !== null && !($GLOBALS['fc_config']['javaSocketServer'] && 'lin' == $req['c'])) { $args = array_merge($req, $GLOBALS['socket_server']->clientInfo[$clientId]['connection']); } if( isset($req['bot_ip']) ) $args = array_merge($args, array( 'ip' => $req['bot_ip'], 'login' => $req['login'])); return new Connection( $req['id'], $req['session_inst'], $args );// changed on 090706 for chat instances } function _addUser($login, $password, $roles) { ChatServer::loadCMSclass(); return $GLOBALS['fc_config']['cms']->addUser($login, $password, $roles); } function _deleteUser($login) { ChatServer::loadCMSclass(); $GLOBALS['fc_config']['cms']->deleteUser($login); } function writeToFile($arr, $path) { $data = serialize($arr); $file = @fopen( $path, 'wb' ); if ( ! $file ) return; if ( ! flock($file, LOCK_EX) ) return; $res = fwrite($file, $data); fflush($file); fclose($file); } function readFromFile($path) { $file = @fopen( $path, 'rb' ); if ( ! $file ) return; $data = fread( $file, filesize( $path ) ) ; fclose($file); return (unserialize($data)); } function purgeExpired() { $file_path = $GLOBALS['fc_config']['appdata_path']; $arr = array(); if( file_exists( $file_path ) && filesize( $file_path ) > 0 ) { $arr = ChatServer::readFromFile($file_path); } else { $arr['time'] = time(); ChatServer::writeToFile($arr, $file_path); } if((time() - $arr['time']) > ($GLOBALS['fc_config']['msgRequestInterval']*3)) { $arr['time'] = time() + 3600; ChatServer::writeToFile($arr, $file_path); ChatServer::purge(); //write time to file $arr['time'] = time(); ChatServer::writeToFile($arr, $file_path); } } function purge() { if($GLOBALS['fc_config']['enableBots']) { $stmt = new Statement('UPDATE '.$GLOBALS['fc_config']['db']['pref'].'connections SET updated=NOW() WHERE userid IS NOT NULL AND ip=?',233); $stmt->process($GLOBALS['fc_config']['bot_ip']); $GLOBALS['fc_config']['bot']->processOptions(); if( $GLOBALS['fc_config']['enableSocketServer'] ) $GLOBALS['fc_config']['bot']->processMessages(); } //Do all we need if( !$GLOBALS['fc_config']['enableSocketServer'] ) { //Close expired connection fb('DELETE FROM '.$GLOBALS['fc_config']['db']['pref'].'connections WHERE updated < DATE_SUB(NOW(),INTERVAL ? SECOND)'); $stmt = new Statement('DELETE FROM '.$GLOBALS['fc_config']['db']['pref'].'connections WHERE updated < DATE_SUB(NOW(),INTERVAL ? SECOND)',203); fb($GLOBALS['fc_config']['autocloseAfter']); $stmt->process($GLOBALS['fc_config']['autocloseAfter']); //Logout expired users $stmt = new Statement('SELECT id FROM '.$GLOBALS['fc_config']['db']['pref'].'connections WHERE userid IS NOT NULL AND updated < DATE_SUB(NOW(),INTERVAL ? SECOND) AND ip <> ?' , 204 ); if($rs = $stmt->process($GLOBALS['fc_config']['autologoutAfter'], $GLOBALS['fc_config']['bot_ip'])) { while($rec = $rs->next()) { $conn = new Connection($rec['id']); $conn->doLogout('expiredlogin'); } } } //update rooms where users exists $updt = new Statement('UPDATE '.$GLOBALS['fc_config']['db']['pref'].'rooms,'.$GLOBALS['fc_config']['db']['pref'].'connections SET '.$GLOBALS['fc_config']['db']['pref'].'rooms.updated=NOW() WHERE '.$GLOBALS['fc_config']['db']['pref'].'rooms.id = '.$GLOBALS['fc_config']['db']['pref'].'connections.roomid',205); $updt->process(); //Remove expired rooms $stmt = new Statement('SELECT id FROM '.$GLOBALS['fc_config']['db']['pref'].'rooms WHERE ispermanent IS NULL AND updated < DATE_SUB(NOW(),INTERVAL ? SECOND)',52); $rmst = new Statement('DELETE FROM '.$GLOBALS['fc_config']['db']['pref'].'rooms WHERE ispermanent IS NULL AND id=?',60); if($rs = $stmt->process($GLOBALS['fc_config']['autoremoveAfter'])) { $messageQueue = new MessageQueue(); while($room = $rs->next()) { $msg = new Message('rmr', null, $room['id']); $messageQueue->addMessage( $msg ); if( isset($GLOBALS['socket_server']) ) $GLOBALS['socket_server']->sendMessage( $msg ); $rmst->process($room['id']); } } //Remove expired messages $rmst = new Statement('DELETE FROM '.$GLOBALS['fc_config']['db']['pref'].'messages WHERE created < DATE_SUB(NOW(),INTERVAL ? SECOND)',153); $rmst->process($GLOBALS['fc_config']['msgRemoveAfter']); //Remove expired bans $rmst = new Statement('DELETE FROM '.$GLOBALS['fc_config']['db']['pref'].'bans WHERE created < DATE_SUB(NOW(),INTERVAL ? SECOND)',251); $rmst->process($GLOBALS['fc_config']['autounbanAfter']); } } ?>