/** * "Kill" timed out sessions, set "Away" online status for sessions with ping older than (updater_interval+N) seconds */ function _s_cleanUp() { // Store current state $this_vars = $this->_db_getFromObject(); // Get sessions $sessions = array(); $query = $this->_db_makeQuery(2100, date('Y-m-d H:i:s', time() - 1800), date('Y-m-d H:i:s', time() - $this->_conf_all['session_timeout']), date('Y-m-d H:i:s', time() - 5)); $result = $this->_db_query($query); while ($data = $this->_db_fetch($result, MYSQL_ASSOC)) { $sessions[] = $data; } $this->_db_freeResult($result); $this->_db_freeList(); if (!empty($sessions)) { _pcpin_loadClass('session'); $session = new PCPIN_Session($this, '', true); foreach ($sessions as $sessiondata) { $session->_db_setObject($sessiondata); $session->_s_logOut(); } } // Delete old messages if (!empty($this->_conf_all['message_lifetime'])) { _pcpin_loadClass('message'); $message = new PCPIN_Message($this); $message->deleteMessages(null, time() - $this->_conf_all['message_lifetime']); } // Unmute users _pcpin_loadClass('user'); $user = new PCPIN_User($this); if ($user->_db_getList('id', 'global_muted_until > 0000-00-00 00:00:00', 'global_muted_until < ' . date('Y-m-d H:i:s'))) { $user_ids = $user->_db_list; $user->_db_freeList(); foreach ($user_ids as $data) { // Unmute user $user->globalMuteUnmute($data['id'], 0); } // Add system messages _pcpin_loadClass('message'); $message = new PCPIN_Message($this); foreach ($user_ids as $data) { if ($this->_db_getList('_s_room_id', '_s_user_id = ' . $data['id'], 1)) { $message->addMessage(10111, 'n', 0, '', 0, 0, $data['id'] . '/0', date('Y-m-d H:i:s'), 0, ''); } } } // Clean unbanned users if ($result = $this->_db_query($this->_db_makeQuery(2080, date('Y-m-d H:i:s')))) { $this->_db_freeResult($result); } // Clean not activated email addresses if (!empty($this->_conf_all['activate_new_emails'])) { _pcpin_loadClass('user'); $user = new PCPIN_User($this); if ($user->_db_getList('id', 'email_new != ', 'email_new_date < ' . date('Y-m-d H:i:s', time() - 3600 * $this->_conf_all['new_email_activation_timeout']))) { $user_ids = $user->_db_list; $user->_db_freeList(); foreach ($user_ids as $data) { $user->_db_updateRow($data['id'], 'id', array('email_new' => '', 'email_new_date' => '', 'email_new_activation_code' => '')); } } } // Delete idle and/or not activated user accounts if (!PCPIN_SLAVE_MODE && $this->_conf_all['activate_new_accounts'] == 1 || !empty($this->_conf_all['account_pruning'])) { _pcpin_loadClass('user'); $user = new PCPIN_User($this); $query = $this->_db_makeQuery(2060, $this->_conf_all['activate_new_accounts'] == 1 ? date('Y-m-d H:i:s', time() - 3600 * $this->_conf_all['new_account_activation_timeout']) : '', !empty($this->_conf_all['account_pruning']) ? date('Y-m-d H:i:s', time() - $this->_conf_all['account_pruning'] * 86400) : ''); $user_ids = array(); if ($result = $this->_db_query($query)) { while ($data = $this->_db_fetch($result, MYSQL_ASSOC)) { $user_ids[] = $data['id']; } $this->_db_freeResult($result); } if (!empty($user_ids)) { foreach ($user_ids as $id) { $user->deleteUser($id); } } } // Delete empty and timed out user rooms _pcpin_loadClass('room'); $room = new PCPIN_Room($this); if ($room->_db_getList('id', 'type = u', 'users_count <= 0', 'last_ping < ' . date('Y-m-d H:i:s', time() - $this->_conf_all['empty_userroom_lifetime']))) { $rooms = $room->_db_list; $room->_db_freeList(); foreach ($rooms as $data) { $room->deleteRoom($data['id']); } // Add system message _pcpin_loadClass('message'); $message = new PCPIN_Message($this); $message->addMessage(1100, 'n', 0, '', 0, 0, '-', date('Y-m-d H:i:s'), 0, ''); } // Delete old logs if (!empty($this->_conf_all['logging_period'])) { _pcpin_loadClass('message_log'); $message_log = new PCPIN_Message_Log($this); $message_log->cleanUp(); } // Restore current state $this->_db_setObject($this_vars); }
// Slave mode? if (PCPIN_SLAVE_MODE && (!defined('PCPIN_ADMIN_ACCESS') || !PCPIN_ADMIN_ACCESS) && empty($_GET['b_id']) && empty($_GET['external_url']) && empty($_GET['load_banner']) && !defined('PCPIN_NO_SESSION')) { // Check mod file $_pcpin_mod_filename = './mods/slave/' . trim($_pcpin_init_session->_conf_all['slave_mode_master']) . '/' . trim($_pcpin_init_session->_conf_all['slave_mode_master']) . '.php'; if (!file_exists($_pcpin_mod_filename) || !is_file($_pcpin_mod_filename) || !is_readable($_pcpin_mod_filename)) { // Mod file not exists or not readable die('Slave mode: Master file "' . $_pcpin_mod_filename . '" does not exists or not readable'); } else { // Load mod file require $_pcpin_mod_filename; // Reinit session $__pcpin_init_class = new stdClass(); $__pcpin_init_class->_cache = array(); new PCPIN_DB($__pcpin_init_class, ${$_pcpin_dbcn}); new PCPIN_Config($__pcpin_init_class); $_pcpin_init_session = new PCPIN_Session($__pcpin_init_class, $s_id, !empty($_GET['b_id']) || !empty($_GET['external_url']) || !empty($_GET['load_banner']) || defined('PCPIN_NO_SESSION')); unset($__pcpin_init_class); } } unset(${$_pcpin_dbcn}); unset($_pcpin_dbcn); // Get software version if (!defined('PCPIN_NO_SESSION') && empty($_GET['external_url'])) { _pcpin_loadClass('version'); $_pcpin_version = new PCPIN_Version($_pcpin_init_session); if ($_pcpin_version->_db_getList('version', 1)) { define('PCPIN_VERSION', number_format($_pcpin_version->_db_list[0]['version'], 2, '.', '')); $_pcpin_version->_db_freeList(); unset($_pcpin_version); } else { define('PCPIN_VERSION', '0.00');
/** * Put user into/out of a room * @param int $user_id User ID * @param int $target_room_id ID of room where to put user into * @param boolean $skip_msg If TRUE, then system message 115 will be NOT inserted * @param string $stealth_mode "Stealth" mode flag ("y"/"n") * @return boolean TRUE on success or FALSE on error */ function putUser($user_id = 0, $target_room_id = 0, $skip_msg = false, $stealth_mode = 'n') { $ok = false; _pcpin_loadClass('message'); $message = new PCPIN_Message($this); _pcpin_loadClass('session'); $session = new PCPIN_Session($this, '', true); // Get user's session if (!empty($user_id) && $session->_db_getList('_s_user_id = ' . $user_id, 1)) { // Session exists if ($target_room_id != $session->_db_list[0]['_s_room_id']) { if (!empty($session->_db_list[0]['_s_room_id'])) { // Put user out of a room $ok = true; if ($this->_db_getList('users_count', 'id = ' . $session->_db_list[0]['_s_room_id'], 1)) { $this->updateRoom($session->_db_list[0]['_s_room_id'], false, true, null, null, null, null, $this->_db_list[0]['users_count'] - 1, null, null, null, date('Y-m-d H:i:s')); } if (true !== $skip_msg) { $message->addMessage(115, 'n', 0, '', $session->_db_list[0]['_s_room_id'], 0, $user_id . '/' . $session->_db_list[0]['_s_room_id']); } } if (!empty($target_room_id)) { // Put user into a room if ($this->_db_getList('users_count', 'id = ' . $target_room_id, 1)) { $ok = true; $this->updateRoom($target_room_id, false, true, null, null, null, null, $this->_db_list[0]['users_count'] + 1, null, null, null, date('Y-m-d H:i:s')); } else { // Room does not exists $target_room_id = 0; } if (true !== $skip_msg) { $message->addMessage(111, 'n', 0, '', $target_room_id, 0, $user_id . '/' . $target_room_id); } } // Update session $session->_s_updateSession($session->_db_list[0]['_s_id'], false, true, null, null, $target_room_id, null, null, null, null, !empty($target_room_id) ? date('Y-m-d H:i:s') : '', null, null, null, $stealth_mode, null, null, '0000-00-00 00:00:00', ''); if ($session->_db_list[0]['_s_online_status'] != 1) { $session->_db_setObject($session->_db_list[0]); $session->_s_setOnlineStatus(1); } } else { $ok = true; } // Delete temporary message attachments _pcpin_loadClass('tmpdata'); $tmpdata = new PCPIN_TmpData($this); $tmpdata->deleteUserRecords($user_id, 3); } return $ok; }