/** * The main user interface for choosing a chat room to moderate. * * @return tempcode The UI. */ function chat_choose_room() { if (has_actual_page_access(get_member(), 'admin_chat')) { require_lang('menus'); $also_url = build_url(array('page' => 'admin_chat'), get_module_zone('admin_chat')); attach_message(do_lang_tempcode('ALSO_SEE_CMS', escape_html($also_url->evaluate())), 'inform'); } $title = get_page_title('CHAT_MOD_PANEL'); $introtext = do_lang_tempcode('CHAT_PANEL_INTRO'); breadcrumb_set_self(do_lang_tempcode('CHOOSE')); $start = get_param_integer('start', 0); $max = get_param_integer('max', 50); $sortables = array('room_name' => do_lang_tempcode('ROOM_NAME'), 'messages' => do_lang_tempcode('MESSAGES')); $test = explode(' ', either_param('sort', 'room_name DESC')); if (count($test) == 1) { $test[1] = 'DESC'; } list($sortable, $sort_order) = $test; if (strtoupper($sort_order) != 'ASC' && strtoupper($sort_order) != 'DESC' || !array_key_exists($sortable, $sortables)) { log_hack_attack_and_exit('ORDERBY_HACK'); } global $NON_CANONICAL_PARAMS; $NON_CANONICAL_PARAMS[] = 'sort'; require_code('templates_results_table'); $fields_title = results_field_title(array(do_lang_tempcode('ROOM_NAME'), do_lang_tempcode('ROOM_OWNER'), do_lang_tempcode('ROOM_LANG'), do_lang_tempcode('MESSAGES')), $sortables, 'sort', $sortable . ' ' . $sort_order); $max_rows = $GLOBALS['SITE_DB']->query_value('chat_rooms', 'COUNT(*)', array('is_im' => 0)); $sort_clause = $sortable == 'room_name' ? 'ORDER BY room_name ' . $sort_order : ''; $rows = $GLOBALS['SITE_DB']->query_select('chat_rooms', array('*'), array('is_im' => 0), $sort_clause, $max, $start); if ($sortable == 'messages') { usort($rows, array('Module_cms_chat', '_sort_chat_browse_rows')); if ($sort_order == 'DESC') { $rows = array_reverse($rows); } } $fields = new ocp_tempcode(); foreach ($rows as $row) { $has_mod_access = has_specific_permission(get_member(), 'edit_lowrange_content', 'cms_chat', array('chat', $row['id'])) || $row['room_owner'] == get_member() && has_specific_permission(get_member(), 'moderate_my_private_rooms'); if (!handle_chatroom_pruning($row) && $has_mod_access) { $url = build_url(array('page' => '_SELF', 'type' => 'room', 'id' => $row['id']), '_SELF'); $messages = $GLOBALS['SITE_DB']->query_value('chat_messages', 'COUNT(*)', array('room_id' => $row['id'])); $username = $GLOBALS['FORUM_DRIVER']->get_username($row['room_owner']); if (is_null($username)) { $username = ''; } //do_lang('UNKNOWN'); $fields->attach(results_entry(array(hyperlink($url, escape_html($row['room_name'])), escape_html($username), escape_html($row['room_language']), escape_html(integer_format($messages))))); } } if ($fields->is_empty()) { inform_exit(do_lang_tempcode('NO_CATEGORIES')); } $results_table = results_table(do_lang_tempcode('ROOMS'), $start, 'start', $max, 'max', $max_rows, $fields_title, $fields, $sortables, $sortable, $sort_order, 'sort'); return do_template('CHAT_MODERATE_SCREEN', array('_GUID' => 'c59cb6c8409d0e678b05628d92e423db', 'TITLE' => $title, 'INTRODUCTION' => $introtext, 'CONTENT' => $results_table, 'LINKS' => array())); }
/** * Standard aed_module list function. * * @return tempcode The selection list */ function nice_get_entries() { $rows = $GLOBALS['SITE_DB']->query_select('chat_rooms', array('*'), array('is_im' => 0), 'ORDER BY room_name DESC', 500); if (count($rows) == 500) { warn_exit(do_lang_tempcode('TOO_MANY_TO_CHOOSE_FROM')); } $fields = new ocp_tempcode(); foreach ($rows as $row) { if (!handle_chatroom_pruning($row)) { $fields->attach(form_input_list_entry(strval($row['id']), false, $row['room_name'])); } } return $fields; }
/** * The UI to choose a chat room. * * @return tempcode The UI */ function chat_lobby() { require_javascript('javascript_ajax_people_lists'); // Who are we viewing the lobby of? $member_id = get_param_integer('member_id', get_member()); if (!is_guest($member_id)) { enforce_personal_access($member_id); } // Starting an IM? The IM will popup by AJAX once the page loads, because it's in the system now $enter_im = get_param_integer('enter_im', NULL); if (!is_null($enter_im) && !is_guest()) { $test = $GLOBALS['SITE_DB']->query('SELECT * FROM ' . get_table_prefix() . 'chat_rooms WHERE is_im=1 AND allow_list LIKE \'' . db_encode_like('%' . strval($enter_im) . '%') . '\''); $found_one = false; foreach ($test as $t) { if (check_chatroom_access($t, true, $enter_im) && check_chatroom_access($t, true, get_member())) { $found_one = true; } } if (!$found_one) { require_code('chat2'); add_chatroom('', $GLOBALS['FORUM_DRIVER']->get_username(get_member()), get_member(), strval(get_member()) . ',' . strval($enter_im), '', '', '', user_lang(), 1); } } // And empty IM conversations $old_dead_ims = $GLOBALS['SITE_DB']->query('SELECT r.* FROM ' . get_table_prefix() . 'chat_rooms r JOIN ' . get_table_prefix() . 'chat_events e ON e.e_room_id=r.id AND ' . db_string_equal_to('e.e_type_code', 'JOIN_IM') . ' LEFT JOIN ' . get_table_prefix() . 'chat_messages m ON m.room_id=r.id WHERE r.is_im=1 AND e_date_and_time<' . strval(time() - CHAT_EVENT_PRUNE) . ' AND m.id IS NULL'); foreach ($old_dead_ims as $old) { require_code('chat2'); delete_chatroom($old['id']); } // Prune chat events $GLOBALS['SITE_DB']->query('DELETE FROM ' . $GLOBALS['SITE_DB']->get_table_prefix() . 'chat_events WHERE e_date_and_time<' . strval(time() - CHAT_EVENT_PRUNE)); enter_chat_lobby(); // Generic stuff: Title, feed URL $title = get_page_title('CHAT_LOBBY'); $GLOBALS['FEED_URL'] = find_script('backend') . '?mode=chat&filter='; // Rooms $rows = $GLOBALS['SITE_DB']->query_select('chat_rooms', array('*'), array('is_im' => 0), 'ORDER BY room_name DESC', 200); if (count($rows) == 200) { $rows = $GLOBALS['SITE_DB']->query_select('chat_rooms', array('*'), array('is_im' => 0, 'allow_list' => ''), 'ORDER BY room_name DESC', 200); } $fields = new ocp_tempcode(); foreach ($rows as $myrow) { // Check to see if we are on the room's allow list, if we aren't, don't display the room :D $showroom = check_chatroom_access($myrow, true, $member_id); if (!handle_chatroom_pruning($myrow) && $showroom) { $users = get_chatters_in_room($myrow['id']); $usernames = get_chatters_in_room_tpl($users); //$url=build_url(array('page'=>'_SELF','mode'=>$mode,'type'=>'room','id'=>$myrow['id']),'_SELF'); $url = build_url(array('page' => '_SELF', 'type' => 'room', 'id' => $myrow['id']), '_SELF'); $room_link = do_template('CHAT_ROOM_LINK', array('PRIVATE' => $myrow['allow_list'] != '' || $myrow['allow_list_groups'] != '', 'ID' => strval($myrow['id']), 'NAME' => $myrow['room_name'], 'USERNAMES' => $usernames, 'URL' => $url)); $fields->attach($room_link); } } // Extra links if (has_actual_page_access($member_id, 'cms_chat')) { $modlink = hyperlink(build_url(array('page' => 'cms_chat'), get_module_zone('cms_chat')), do_lang_tempcode('CHAT_MOD_PANEL')); } else { $modlink = new ocp_tempcode(); } if (!is_guest()) { $blocking_link = hyperlink(build_url(array('page' => '_SELF', 'type' => 'blocking_interface'), '_SELF'), do_lang_tempcode('MEMBER_BLOCKING')); } else { $blocking_link = new ocp_tempcode(); } if (has_specific_permission($member_id, 'create_private_room') && !is_guest()) { $private_room = hyperlink(build_url(array('page' => '_SELF', 'type' => 'private'), '_SELF'), do_lang_tempcode('CREATE_PRIVATE_ROOM')); } else { $private_room = new ocp_tempcode(); } // Buddy list and IM if ($member_id == get_member() && !is_guest()) { $post_url_add_buddy = build_url(array('page' => '_SELF', 'type' => 'buddy_add', 'redirect' => get_self_url(true)), '_SELF'); $post_url_remove_buddies = build_url(array('page' => '_SELF', 'type' => 'buddy_remove', 'redirect' => get_self_url(true)), '_SELF'); } else { $post_url_add_buddy = new ocp_tempcode(); $post_url_remove_buddies = new ocp_tempcode(); } $online_url = $GLOBALS['FORUM_DRIVER']->online_members_url(); $can_im = has_specific_permission(get_member(), 'start_im'); $buddies = array(); $buddy_rows = $GLOBALS['SITE_DB']->query_select('chat_buddies', array('*'), array('member_likes' => $member_id), 'ORDER BY date_and_time', 100); $buddy_active = get_chatters_in_room(NULL); global $SESSION_CACHE; $users_online_time_seconds = CHAT_ACTIVITY_PRUNE; foreach ($buddy_rows as $buddy) { if (array_key_exists($buddy['member_liked'], $buddy_active) && !member_blocked(get_member(), $buddy['member_liked'])) { $online_text = do_lang_tempcode('ACTIVE'); } else { $online_text = member_is_online($buddy['member_liked']) ? do_lang_tempcode('ONLINE') : do_lang_tempcode('OFFLINE'); } $username = array_key_exists($buddy['member_liked'], $buddy_active) ? $buddy_active[$buddy['member_liked']] : $GLOBALS['FORUM_DRIVER']->get_username($buddy['member_liked']); if (!is_null($username)) { $member_profile_url = $GLOBALS['FORUM_DRIVER']->member_profile_url($buddy['member_liked'], true, true); $buddies[] = array('DATE_AND_TIME_RAW' => strval($buddy['date_and_time']), 'DATE_AND_TIME' => get_timezoned_date($buddy['date_and_time'], false), 'MEMBER_PROFILE_LINK' => $member_profile_url, 'MEMBER_ID' => strval($buddy['member_liked']), 'USERNAME' => $username, 'ONLINE_TEXT' => $online_text); } } $messages_php = find_script('messages'); $im_area_template = do_template('CHAT_LOBBY_IM_AREA', array('_GUID' => 'cd230527da03caa596135f74647b2ca7', 'MESSAGES_PHP' => $messages_php, 'ROOM_ID' => '__room_id__')); $make_buddy_url = build_url(array('page' => '_SELF', 'type' => 'buddy_add', 'member_id' => '__id__'), '_SELF'); $block_member_url = build_url(array('page' => '_SELF', 'type' => 'blocking_add', 'member_id' => '__id__'), '_SELF'); $profile_url = $GLOBALS['FORUM_DRIVER']->member_profile_url(-100, true, true); if (is_object($profile_url)) { $profile_url = $profile_url->evaluate(); } $profile_url = str_replace('-100', '__id__', $profile_url); $im_participant_template = do_template('CHAT_LOBBY_IM_PARTICIPANT', array('_GUID' => '9a36efe3a449dabac6ef9866d1f6f48a', 'PROFILE_URL' => $profile_url, 'ID' => '__id__', 'ROOM_ID' => '__room_id__', 'USERNAME' => '__username__', 'ONLINE' => '__online__', 'AVATAR_URL' => '__avatar_url__', 'MAKE_BUDDY_URL' => $make_buddy_url, 'BLOCK_MEMBER_URL' => $block_member_url)); if (!is_guest()) { $seteffectslink = hyperlink(build_url(array('page' => '_SELF', 'type' => 'set_effects'), '_SELF'), do_lang_tempcode('CHAT_SET_EFFECTS'), true); } else { $seteffectslink = new ocp_tempcode(); } $message = new ocp_tempcode(); $message->attach(do_lang_tempcode('WELCOME_CHAT_LOBBY', $private_room->is_empty() ? new ocp_tempcode() : do_lang_tempcode('WELCOME_CHAT_LOBBY_PRIVATE_ROOMS'), $can_im ? do_lang_tempcode('WELCOME_CHAT_LOBBY_USE_IM') : new ocp_tempcode(), $can_im ? do_lang_tempcode(get_option('sitewide_im') == '1' ? 'WELCOME_CHAT_LOBBY_USE_IM2_SITEWIDE' : 'WELCOME_CHAT_LOBBY_USE_IM2_NO_SITEWIDE') : new ocp_tempcode())); if (has_actual_page_access(get_member(), 'admin_chat')) { $add_room_url = build_url(array('page' => 'admin_chat', 'type' => 'ad'), get_module_zone('admin_chat')); } else { $add_room_url = new ocp_tempcode(); } return do_template('CHAT_LOBBY_SCREEN', array('_GUID' => 'f82ddfd0dccbd25752dd05a1d87429e2', 'ADD_ROOM_URL' => $add_room_url, 'MESSAGE' => $message, 'CHAT_SOUND' => get_chat_sound_tpl(), 'IM_PARTICIPANT_TEMPLATE' => $im_participant_template, 'IM_AREA_TEMPLATE' => $im_area_template, 'BUDDIES' => $buddies, 'CAN_IM' => $can_im, 'ONLINE_URL' => $online_url, 'URL_ADD_BUDDY' => $post_url_add_buddy, 'URL_REMOVE_BUDDIES' => $post_url_remove_buddies, 'TITLE' => $title, 'ROOMS' => $fields, 'PRIVATE_ROOM' => $private_room, 'MOD_LINK' => $modlink, 'BLOCKING_LINK' => $blocking_link, 'SETEFFECTS_LINK' => $seteffectslink)); }