$room_id = 0; } if (!empty($first_request)) { $full_request = 1; } $xml_data = array(); if (!empty($room_id) && !empty($current_user->id)) { if (empty($session->_s_room_id)) { // User is not in chat room $xmlwriter->setHeaderMessage('User is not in chat room'); $xmlwriter->setHeaderStatus(100); } elseif ($session->_s_room_id != $room_id) { // User is in other room $xmlwriter->setHeaderMessage('User is in other room'); $xmlwriter->setHeaderStatus(200); } elseif (!$room->_db_getList('id', 'id = ' . $room_id, 1)) { // Room does not exists (anymore) $xmlwriter->setHeaderMessage('Room does not exists'); $xmlwriter->setHeaderStatus(300); } else { $xmlwriter->setHeaderStatus(0); $xmlwriter->setHeaderMessage('OK'); if (!empty($first_request)) { $xml_data['welcome_message'] = str_replace('[ROOM]', $current_room_name, $l->g('welcome_to_chat_room')); } // Are there new messages in request? if (!empty($new_messages) && is_array($new_messages)) { // There are some new messages from user // Need to change online status? //if ($session->_s_online_status!=1) { // $session->_s_setOnlineStatus(1, $l->g('online_status_1'));
} if (!isset($password) || !is_scalar($password)) { $password = ''; } if (!isset($image) || !pcpin_ctype_digit($image)) { $image = 0; } if (!empty($current_user->id) && $current_user->is_admin === 'y' && $session->_s_user_id == $current_user->id) { $errortext = array(); $name = trim($name); $description = trim($description); if (empty($category_id) || !$category->_db_getList('id', 'id = ' . $category_id, 1)) { $errortext[] = $l->g('select_category'); } elseif ($name == '') { $errortext[] = $l->g('room_name_empty'); } elseif ($room->_db_getList('category_id = ' . $category_id, 'name LIKE ' . $name, 1)) { $errortext[] = str_replace('[NAME]', $name, $l->g('room_already_exists_in_category')); } elseif (!empty($password_protect) && !empty($change_password) && _pcpin_strlen($password) < 3) { $errortext[] = $l->g('password_too_short'); } if (!empty($errortext)) { $xmlwriter->setHeaderStatus(1); $xmlwriter->setHeaderMessage(implode("\n", $errortext)); } else { // Check image if (!empty($image) && $tmpdata->_db_getList('binaryfile_id', 'user_id = ' . $session->_s_user_id, 'type = 1', 1)) { $binaryfile_id = $tmpdata->_db_list[0]['binaryfile_id']; $tmpdata->_db_freeList(); } else { $binaryfile_id = 0; }
foreach ($categories_array as $category_id) { $category_id = trim($category_id); if (pcpin_ctype_digit($category_id) && $category->_db_getList('id', 'id = ' . $category_id, 1)) { // Category exists $categories_new[] = $category_id; $category->_db_freeList(); } } $categories_new = array_unique($categories_new); sort($categories_new); // Check rooms $rooms_new = array(); $rooms_array = explode(',', $rooms); foreach ($rooms_array as $room_id) { $room_id = trim($room_id); if (pcpin_ctype_digit($room_id) && $room->_db_getList('id', 'id = ' . $room_id, 1)) { // Room exists $rooms_new[] = $room_id; $room->_db_freeList(); } } // Get categories' rooms if (!empty($categories_new) && $room->_db_getList('id', 'category_id IN ' . implode(',', $categories_new))) { foreach ($room->_db_list as $room_data) { $rooms_new[] = $room_data['id']; } $room->_db_freeList(); } $rooms_new = array_unique($rooms_new); sort($rooms_new); // Save data
if (!isset($room_id) || !is_scalar($room_id)) { $room_id = 0; } if (!isset($stealth_mode)) { $stealth_mode = 'n'; } if (!isset($password)) { $password = ''; } if (!empty($current_user->id)) { $enter_allowed = false; if (empty($room_id)) { // No room selected $xmlwriter->setHeaderStatus(300); $xmlwriter->setHeaderMessage($l->g('error')); } elseif (!$room->_db_getList('id, category_id, password', 'id = ' . $room_id, 1)) { // Room does not exists $xmlwriter->setHeaderStatus(400); $xmlwriter->setHeaderMessage($l->g('room_not_exists')); } elseif ($current_user->is_admin !== 'y' && $room->_db_list[0]['password'] != '' && $room->_db_list[0]['password'] != md5(base64_decode($password)) && false === strpos(',' . $current_user->moderated_rooms . ',', ',' . $room_id . ',')) { // Invalid password $xmlwriter->setHeaderStatus(600); $xmlwriter->setHeaderMessage($l->g('invalid_password')); } else { $enter_allowed = true; $category_id = $room->_db_list[0]['category_id']; // Check "stealth" mode if ($stealth_mode == 'y') { if ($current_user->is_admin !== 'y' && false === strpos(',' . $current_user->moderated_rooms . ',', ',' . $room_id . ',')) { $stealth_mode = 'n'; }
* * "PCPIN Chat 6" is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ if (empty($current_user->id) || $session->_s_user_id != $current_user->id) { header('Location: ' . PCPIN_FORMLINK . '?' . md5(microtime())); die; } _pcpin_loadClass('room'); $room = new PCPIN_Room($session); if (!empty($session->_conf_all['default_room']) && $room->_db_getList('id', 'id = ' . $session->_conf_all['default_room'], 1)) { // Default room specified and exists $room->_db_freeList(); if ($room->putUser($current_user->id, $session->_conf_all['default_room'])) { header('Location: ' . PCPIN_FORMLINK . '?s_id=' . $session->_s_id . '&inc=chat_room&ts=' . time()); die; } } if (!empty($session->_s_room_id)) { // User was in chat room. Push him out. $room->putUser($current_user->id, 0, $session->_s_stealth_mode == 'y', 'n'); } $_body_onload[1000000] = 'initRoomSelection(' . $session->_conf_all['updater_interval'] . ',' . '\'' . $current_user->room_selection_view . '\',' . (!empty($session->_conf_all['userlist_avatar_thumb']) && 2 == PCPIN_GD_VERSION ? 'true' : 'false') . ',' . (!empty($session->_conf_all['userlist_privileged_flags']) && 2 == PCPIN_GD_VERSION ? 'true' : 'false') . ',' . (!empty($session->_conf_all['userlist_gender_icon']) ? 'true' : 'false') . ')'; $_load_cm_user_options = true; // Init template _pcpin_loadClass('pcpintpl');
/** * "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); }
/** * Delete category and all contained rooms * @param int $id Category ID * @return boolean TRUE on success or FALSE on error */ function deleteCategory($id = 0) { $result = false; if (!empty($id) && $this->_db_getList('id = ' . $id, 1)) { // Are there rooms in this category? _pcpin_loadClass('room'); $room = new PCPIN_Room($this); if ($room->_db_getList('id', 'category_id = ' . $id)) { // Delete category rooms $rooms = $room->_db_list; $room->_db_freeList(); foreach ($rooms as $room_data) { $room->deleteRoom($room_data['id']); } } // Update "moderated_categories" field by category moderators $moderators = $this->getModerators($id); if (!empty($moderators)) { _pcpin_loadClass('user'); $user = new PCPIN_User($this); foreach ($moderators as $data) { $user->_db_updateRow($data['id'], 'id', array('moderated_categories' => trim(str_replace(',' . $id . ',', ',', ',' . $data['moderated_categories'] . ','), ','))); } } // Delete category $this->_db_deleteRow($id); } return $result; }
$_is_moderator = false; $current_nickname = ''; $current_room_name = ''; if (!empty($session->_s_user_id)) { $current_user->_db_loadObj($session->_s_user_id); if (!empty($session->_s_room_id) && $current_user->moderated_rooms != '') { $_is_moderator = false !== strpos(',' . $current_user->moderated_rooms . ',', ',' . $session->_s_room_id . ','); } _pcpin_loadClass('nickname'); $nickname_ = new PCPIN_Nickname($session); $current_nickname = $nickname_->getDefaultNickname($current_user->id); unset($nickname_); if (!empty($session->_s_room_id)) { _pcpin_loadClass('room'); $room_ = new PCPIN_Room($session); if ($room_->_db_getList('name', 'id = ' . $session->_s_room_id, 1)) { $current_room_name = $room_->_db_list[0]['name']; } } } if (!empty($b_id)) { // Binary file requested require_once './inc/get_binary.inc.php'; die; } elseif (!empty($ajax) && is_scalar($ajax)) { // AJAX request require_once './inc/ajax/_main.inc.php'; die; } elseif (!empty($external_url)) { // Redirect to an external URL require_once './inc/url_redirection.inc.php';
$moderated_categories = array(); // Get client session if (is_object($session) && !empty($profile_user_id) && !empty($current_user->id) && $current_user->is_admin === 'y') { if ($current_user->_db_getList('moderated_categories,moderated_rooms', 'id = ' . $profile_user_id, 1)) { $xmlwriter->setHeaderMessage('OK'); $xmlwriter->setHeaderStatus(0); $member = $current_user->_db_list[0]; $current_user->_db_freeList(); $room_ids = array(); // Get moderated categories if (!empty($member['moderated_categories']) && $category->_db_getList('name', 'id IN ' . $member['moderated_categories'], 'name ASC')) { foreach ($category->_db_list as $category_data) { $moderated_categories[] = $category_data['name']; } $category->_db_freeList(); if ($room->_db_getList('id', 'category_id IN ' . $member['moderated_categories'])) { foreach ($room->_db_list as $room_data) { $room_ids[] = $room_data['id']; } $room->_db_freeList(); } } // Get moderated rooms if (!empty($member['moderated_rooms']) && $room->_db_getList('id', 'id IN ' . $member['moderated_rooms'])) { foreach ($room->_db_list as $room_data) { $room_ids[] = $room_data['id']; } $room->_db_freeList(); } $room_ids = array_unique($room_ids); if (!empty($room_ids) && $room->_db_getList('name', 'id IN ' . implode(',', $room_ids), 'name ASC')) {
// Load smiliebox $_load_smiliebox = true; // Default: Do not context menu user options $_load_cm_user_options = true; if (empty($current_user->id) || $session->_s_user_id != $current_user->id || empty($session->_s_room_id)) { header('Location: ' . PCPIN_FORMLINK . '?' . md5(microtime())); die; } // Delete temporary message attachments _pcpin_loadClass('tmpdata'); $tmpdata = new PCPIN_TmpData($session); $tmpdata->deleteUserRecords($current_user->id, 3); // Get room background image _pcpin_loadClass('room'); $room = new PCPIN_Room($session); $room->_db_getList('background_image', 'id = ' . $session->_s_room_id, 1); $background_image = $room->_db_list[0]['background_image']; $room->_db_freeList(); // Get default avatar _pcpin_loadClass('avatar'); $avatar = new PCPIN_Avatar($session); $avatars = $avatar->getAvatars($current_user->id, 1); if (!empty($avatars)) { $avatar_bid = $avatars[0]['binaryfile_id']; } else { $avatar_bid = 0; } unset($avatars); // JS files to load $_js_files[] = './js/user.js'; $_js_files[] = './js/message_queue.js';
if (!empty($current_user->id) && !empty($category_id) && is_scalar($category_id)) { if (!$category->_db_getList('name, creatable_rooms', 'id = ' . $category_id, 1)) { // Category does not exists $xmlwriter->setHeaderStatus(1); $errortext[] = $l->g('category_not_exists'); } elseif ($category->_db_list[0]['creatable_rooms'] == 'n' || $category->_db_list[0]['creatable_rooms'] == 'r' && $current_user->is_guest == 'y') { // New user room cannot be created in this category $xmlwriter->setHeaderStatus(1); $errortext[] = $l->g('user_room_create_category_error'); } else { $name = trim($name); $description = trim($description); if ($name == '') { $xmlwriter->setHeaderStatus(1); $errortext[] = $l->g('room_name_empty'); } elseif ($room->_db_getList('id', 'category_id = ' . $category_id, 'name = ' . $name)) { // Duplicate room name $xmlwriter->setHeaderStatus(1); $errortext[] = str_replace('[NAME]', $name, $l->g('room_already_exists_in_category')); } if (!empty($password_protect)) { $password = base64_decode($password); if (_pcpin_strlen($password) < 3) { $xmlwriter->setHeaderStatus(1); $errortext[] = $l->g('password_too_short'); } } } if (empty($errortext)) { // Check image $background_image = 0;
* * "PCPIN Chat 6" is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * "PCPIN Chat 6" is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ _pcpin_loadClass('room'); $room = new PCPIN_Room($session); if (!isset($room_id) || !pcpin_ctype_digit($room_id)) { $room_id = 0; } if (!empty($current_user->id) && $current_user->is_admin === 'y' && $session->_s_user_id == $current_user->id) { $xmlwriter->setHeaderStatus(1); $xmlwriter->setHeaderMessage($l->g('error')); if (!empty($room_id) && $room->_db_getList('name', 'id = ' . $room_id)) { // Room exists $xmlwriter->setHeaderStatus(0); $room_name = $room->_db_list[0]['name']; $xmlwriter->setHeaderMessage(str_replace('[NAME]', $room_name, $l->g('room_deleted'))); // Delete room $room->deleteRoom($room_id); } }
*/ _pcpin_loadClass('message'); $msg = new PCPIN_Message($session); _pcpin_loadClass('room'); $room = new PCPIN_Room($session); $abuses_xml = array(); if (!empty($current_user->id)) { $xmlwriter->setHeaderMessage('OK'); $xmlwriter->setHeaderStatus(0); $messages = $msg->getNewMessages($current_user->id); $last_message_id = $session->_s_last_message_id; foreach ($messages as $message_data) { $last_message_id = $last_message_id < $message_data['id'] ? $message_data['id'] : $last_message_id; if ($message_data['type'] == 4001) { $msg_parts = explode('/', $message_data['body'], 5); if ($room->_db_getList('name', 'id = ' . $msg_parts[1], 1)) { $room_name = $room->_db_list[0]['name']; $room->_db_freeList(); } else { $room_name = '-'; } switch ($msg_parts[2]) { case '1': $abuse_category = $l->g('spam'); break; case '2': $abuse_category = $l->g('insult'); break; case '3': $abuse_category = $l->g('adult_content'); break;
} else { // User is not logged in yet $login = $current_user_set['login']; $_pcpin_slave_userdata_md5_password = $_pcpin_slave_userdata['password']; // Update user main data $update_args = array(); foreach ($_pcpin_slave_userdata as $key => $val) { if (!is_null($val) && isset($current_user_set[$key]) && $current_user_set[$key] != $val) { $update_args[$key] = $val; } } // Moderator? $update_args['moderated_rooms'] = ''; $update_args['moderated_categories'] = ''; if ($_pcpin_slave_userdata['is_moderator'] === 'y') { if ($room->_db_getList('id', 'id ASC')) { foreach ($room->_db_list as $data) { $update_args['moderated_rooms'] .= $data['id'] . ','; } $room->_db_freeList(); $update_args['moderated_rooms'] = trim($update_args['moderated_rooms'], ','); } if ($category->_db_getList('id', 'id ASC')) { foreach ($category->_db_list as $data) { $update_args['moderated_categories'] .= $data['id'] . ','; } $category->_db_freeList(); $update_args['moderated_categories'] = trim($update_args['moderated_categories'], ','); } } $current_user->_db_updateRow($current_user_set['id'], 'id', $update_args);
if (!isset($password_protect) || !pcpin_ctype_digit($password_protect)) { $password_protect = 0; } if (!isset($change_password) || !pcpin_ctype_digit($change_password)) { $change_password = 0; } if (!isset($password) || !is_scalar($password)) { $password = ''; } if (!isset($image) || !pcpin_ctype_digit($image)) { $image = 0; } if (!empty($current_user->id) && $current_user->is_admin === 'y' && $session->_s_user_id == $current_user->id) { $xmlwriter->setHeaderStatus(1); $xmlwriter->setHeaderMessage($l->g('error')); if (!empty($room_id) && $room->_db_getList('id = ' . $room_id)) { // Room exists $xmlwriter->setHeaderStatus(0); $xmlwriter->setHeaderMessage('OK'); $room_data = $room->_db_list[0]; $room->_db_freelist(); switch ($action) { case 'change_listpos': if (empty($dir)) { // Move up if ($room->_db_getList('id,listpos', 'category_id = ' . $room_data['category_id'], 'listpos < ' . $room_data['listpos'], 'listpos DESC', 1)) { $higher_room_id = $room->_db_list[0]['id']; $higher_room_listpos = $room->_db_list[0]['listpos']; // Update room $room->updateRoom($room_id, false, true, null, null, null, null, null, null, null, null, null, $higher_room_listpos); // Update higher room
if ($_pcpin_data['online_status'] > 0) { $_pcpin_online_users_count++; $_pcpin_online_users[] = htmlspecialchars($_pcpin_data['nickname_plain']); $_pcpin_online_users_colored[] = $_pcpin_nickname->coloredToHTML($_pcpin_data['nickname']); } if (empty($_pcpin_data['is_guest'])) { $_pcpin_registered_users_count++; $_pcpin_registered_users[] = htmlspecialchars($_pcpin_data['nickname_plain']); $_pcpin_registered_users_colored[] = $_pcpin_nickname->coloredToHTML($_pcpin_data['nickname']); } } unset($_pcpin_memberlist); unset($_pcpin_user); unset($_pcpin_nickname); // Get rooms $_pcpin_rooms_count = $_pcpin_room->_db_getList('name', 'name ASC'); foreach ($_pcpin_room->_db_list as $_pcpin_data) { $_pcpin_rooms[] = htmlspecialchars($_pcpin_data['name']); } $_pcpin_room->_db_freeList(); unset($_pcpin_room); // Close database connection $_pcpin_init_session->_db_close(); // Delete session handler unset($_pcpin_init_session); // Restore original error reporting settings error_reporting($_pcpin_old_error_reporting); unset($_pcpin_old_error_reporting); @ini_set('display_errors', $_pcpin_old_display_errors); unset($_pcpin_old_display_errors); // Restore original error handler