Esempio n. 1
0
 /**
  * Standard aed_module delete actualiser.
  *
  * @param  ID_TEXT		The entry being deleted
  */
 function delete_actualisation($id)
 {
     delete_chatroom(intval($id));
 }
Esempio n. 2
0
 function tearDown()
 {
     delete_chatroom($this->chatroom_id);
     parent::tearDown();
 }
Esempio n. 3
0
 /**
  * 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));
 }
Esempio n. 4
0
/**
 * Output messages (in XML format) from up to five minutes ago (give somebody who's just joined the chatroom some chat backlog), or the messages posted since the last check.
 *
 * @param  AUTO_LINK			Room ID (or -1 to mean 'all' as used for IM global process, -2 to mean none)
 * @param  boolean			Output the backlog?
 * @param  ?AUTO_LINK		Latest received message ID (NULL: we're not getting latest messages)
 * @param  ?AUTO_LINK		Latest event ID (NULL: we're not getting events, but we do request a null event so we can use that as a future reference point)
 * @param  string				Events output to append
 */
function _chat_messages_script_ajax($room_id, $backlog = false, $message_id = NULL, $event_id = NULL, $events_output = '')
{
    if ($event_id == -1) {
        $event_id = NULL;
    }
    require_lang('chat');
    require_lang('submitban');
    $room_check = NULL;
    if ($room_id >= 0) {
        $room_check = $GLOBALS['SITE_DB']->query_select('chat_rooms', array('id', 'is_im', 'c_welcome', 'allow_list_groups', 'disallow_list_groups', 'allow_list', 'disallow_list', 'room_owner'), array('id' => $room_id), '', 1);
        if (!array_key_exists(0, $room_check)) {
            // This room doesn't exist
            warn_exit(do_lang_tempcode('MISSING_RESOURCE'));
        }
        if (!check_chatroom_access($room_check[0], true)) {
            return;
        }
        // Possibly the room was closed already
        $welcome = array_key_exists(get_member(), get_chatters_in_room($room_id)) || !$backlog || get_param_integer('no_reenter_message', 0) == 1 ? NULL : $room_check[0]['c_welcome'];
    } else {
        $welcome = NULL;
    }
    if ($room_id >= 0) {
        $room_check = $GLOBALS['SITE_DB']->query_select('chat_rooms', array('*'), array('id' => $room_id));
        if (array_key_exists(0, $room_check)) {
            chat_room_prune($room_id);
        }
    } elseif ($room_id != -2) {
        // Note that *we are still here*
        if ($room_id == -1) {
            $GLOBALS['SITE_DB']->query_update('chat_active', array('date_and_time' => time()), array('member_id' => get_member()));
        } else {
            $GLOBALS['SITE_DB']->query_delete('chat_active', array('member_id' => get_member(), 'room_id' => $room_id), '', 1);
            $GLOBALS['SITE_DB']->query_insert('chat_active', array('member_id' => get_member(), 'date_and_time' => time(), 'room_id' => $room_id));
        }
    }
    if (is_null($room_check)) {
        $room_check = $GLOBALS['SITE_DB']->query('SELECT id,is_im,c_welcome,allow_list_groups,disallow_list_groups,allow_list,disallow_list,room_owner FROM ' . get_table_prefix() . 'chat_rooms WHERE is_im=1 AND allow_list LIKE \'' . db_encode_like('%' . strval(get_member()) . '%') . '\'');
    }
    $from_id = NULL;
    $start = NULL;
    if (!$backlog) {
        $from_id = $message_id;
    } else {
        $start = time() - CHAT_BACKLOG_TIME;
    }
    $messages = $room_id == -2 ? array() : chat_get_room_content($room_id, $room_check, 20, false, false, $start, NULL, $from_id, NULL, $welcome, true, get_param_integer('no_reenter_message', 0) == 0);
    $stored_id = array_key_exists(0, $messages) ? $messages[0]['id'] : NULL;
    $messages_output = '';
    foreach ($messages as $_message) {
        $edit_url = new ocp_tempcode();
        $chat_ban_url = new ocp_tempcode();
        $chat_unban_url = new ocp_tempcode();
        if (!is_null($room_check) && array_key_exists(0, $room_check)) {
            $moderator = is_chat_moderator($_message['member_id'], $room_id, $room_check[0]['room_owner']);
            $edit_url = build_url(array('page' => 'cms_chat', 'type' => 'ed', 'id' => $_message['id'], 'room_id' => $_message['room_id']), get_module_zone('cms_chat'));
            if (has_specific_permission(get_member(), 'ban_chatters_from_rooms')) {
                if (check_chatroom_access($room_check[0], true, $_message['member_id'])) {
                    $chat_ban_url = build_url(array('page' => 'cms_chat', 'type' => 'ban', 'id' => $_message['room_id'], 'member_id' => $_message['member_id']), get_module_zone('cms_chat'));
                    $chat_unban_url = new ocp_tempcode();
                } else {
                    $chat_ban_url = new ocp_tempcode();
                    $chat_unban_url = build_url(array('page' => 'cms_chat', 'type' => 'unban', 'id' => $_message['room_id'], 'member_id' => $_message['member_id']), get_module_zone('cms_chat'));
                }
            }
        } else {
            $moderator = false;
        }
        if (addon_installed('actionlog') && has_actual_page_access(get_member(), 'admin_actionlog') && preg_match('#[:\\.]#', $_message['ip_address']) != 0) {
            if (is_guest($_message['member_id'])) {
                $ban_url = build_url(array('page' => 'admin_actionlog', 'type' => 'toggle_ip_ban', 'id' => $_message['ip_address']), 'adminzone');
            } else {
                $ban_url = build_url(array('page' => 'admin_actionlog', 'type' => 'toggle_submitter_ban', 'id' => $_message['member_id']), 'adminzone');
            }
            //$ban_url=build_url(array('page'=>'admin_actionlog','type'=>'multi_ban','id'=>$_message['ip_address'].':'.$_message['username']),'adminzone');
        } else {
            $ban_url = new ocp_tempcode();
        }
        if ($room_id != -1 && addon_installed('actionlog') && (has_actual_page_access(get_member(), 'admin_actionlog') || has_actual_page_access(get_member(), 'cms_chat'))) {
            $staff_actions = do_template('CHAT_STAFF_ACTIONS', array('_GUID' => 'd3fbcaa9eee688452091583ee436e465', 'CHAT_BAN_URL' => $chat_ban_url, 'CHAT_UNBAN_URL' => $chat_unban_url, 'EDIT_URL' => $edit_url, 'BAN_URL' => $ban_url));
        } else {
            $staff_actions = new ocp_tempcode();
        }
        $avatar_url = $GLOBALS['FORUM_DRIVER']->get_member_avatar_url($_message['member_id']);
        if (!is_guest($_message['member_id'])) {
            $user = $GLOBALS['FORUM_DRIVER']->member_profile_hyperlink($_message['member_id'], true, $_message['username']);
        } else {
            if (preg_match('#[:\\.]#', $_message['ip_address']) != 0) {
                $user = make_string_tempcode(escape_html(do_lang('GUEST') . '-' . substr(md5($_message['ip_address']), 0, 5)));
            } else {
                $user = make_string_tempcode(escape_html($_message['ip_address']));
            }
        }
        $template = do_template('CHAT_MESSAGE', array('_GUID' => '6bcac8d9fdd166cde266f8d23b790b69', 'SYSTEM_MESSAGE' => strval($_message['system_message']), 'STAFF' => $moderator, 'OLD_MESSAGES' => $backlog, 'AVATAR_URL' => $avatar_url, 'STAFF_ACTIONS' => $staff_actions, 'USER' => $user, 'MESSAGE' => $_message['the_message'], 'TIME' => $_message['date_and_time_nice'], 'RAW_TIME' => strval($_message['date_and_time']), 'FONT_COLOUR' => $_message['text_colour'], 'FONT_FACE' => $_message['font_name']));
        $messages_output .= '<div xmlns="http://www.w3.org/1999/xhtml" sender_id="' . strval($_message['member_id']) . '" room_id="' . strval($_message['room_id']) . '" id="' . strval($_message['id']) . '" timestamp="' . strval($_message['date_and_time']) . '">' . $template->evaluate() . '</div>';
    }
    // Members update, but only for the room interface
    if ($room_id >= 0) {
        $tpl = get_chatters_in_room_tpl(get_chatters_in_room($room_id));
        $events_output .= '<chat_members_update>' . escape_html($tpl->evaluate()) . '</chat_members_update>';
    }
    // IM events and invitations, but only for the lobby IM interface
    $invitations_output = '';
    if ($room_id < 0) {
        $room_check = list_to_map('id', $GLOBALS['SITE_DB']->query('SELECT * FROM ' . get_table_prefix() . 'chat_rooms WHERE is_im=1 AND allow_list LIKE \'' . db_encode_like('%' . strval(get_member()) . '%') . '\''));
        foreach ($room_check as $room) {
            if (check_chatroom_access($room, true, NULL, true)) {
                if ($room['allow_list'] == strval(get_member()) && is_null($event_id)) {
                    require_code('chat2');
                    delete_chatroom($room['id']);
                } else {
                    $people_in_room = explode(',', $room['allow_list']);
                    if ($room['room_name'] == $GLOBALS['FORUM_DRIVER']->get_username(get_member()) && count($people_in_room) > 1) {
                        $test = $GLOBALS['FORUM_DRIVER']->get_username(intval($people_in_room[1]));
                        if (!is_null($test)) {
                            $room['room_name'] = $test;
                        }
                    }
                    // Find who else is in room
                    $participants = '';
                    foreach ($people_in_room as $person) {
                        if (intval($person) != get_member()) {
                            if ($participants != '') {
                                $participants .= '';
                            }
                            $participants .= $person;
                        }
                    }
                    $num_posts = $GLOBALS['SITE_DB']->query_value('chat_messages', 'COUNT(*)', array('room_id' => $room['id']));
                    $avatar_url = $GLOBALS['FORUM_DRIVER']->get_member_avatar_url($room['room_owner']);
                    $invitations_output .= '<chat_invite num_posts="' . strval($num_posts) . '" you="' . strval(get_member()) . '" inviter="' . (is_null($room['room_owner']) ? '' : strval($room['room_owner'])) . '" participants="' . xmlentities($participants) . '" room_name="' . xmlentities($room['room_name']) . '" avatar_url="' . xmlentities($avatar_url) . '">' . strval($room['id']) . '</chat_invite>';
                }
            }
        }
        if (!is_null($event_id)) {
            $events = $GLOBALS['SITE_DB']->query('SELECT * FROM ' . get_table_prefix() . 'chat_events WHERE id>' . strval((int) $event_id));
            foreach ($events as $event) {
                if ($event['e_member_id'] == get_member()) {
                    continue;
                }
                if (is_guest($event['e_member_id'])) {
                    continue;
                }
                $send_out = false;
                switch ($event['e_type_code']) {
                    case 'BECOME_INACTIVE':
                    case 'BECOME_ACTIVE':
                        if (!member_blocked(get_member(), $event['e_member_id']) && member_befriended($event['e_member_id'])) {
                            $send_out = true;
                        }
                        break;
                    case 'PREINVITED_TO_IM':
                    case 'JOIN_IM':
                        if (array_key_exists($event['e_room_id'], $room_check) && check_chatroom_access($room_check[$event['e_room_id']], true, NULL, true)) {
                            $send_out = true;
                        }
                        break;
                    case 'DEINVOLVE_IM':
                        if (array_key_exists($event['e_room_id'], $room_check) && check_chatroom_access($room_check[$event['e_room_id']], true, NULL, true)) {
                            $send_out = true;
                        }
                        break;
                    case 'INVITED_TO_IM':
                        // Ignore this one
                        break;
                }
                if ($send_out) {
                    $username = $GLOBALS['FORUM_DRIVER']->get_username($event['e_member_id']);
                    $avatar_url = $GLOBALS['FORUM_DRIVER']->get_member_avatar_url($event['e_member_id']);
                    if (!is_null($username)) {
                        $events_output .= '<chat_event away="' . (chatter_active($event['e_member_id']) ? '0' : '1') . '" event_type="' . $event['e_type_code'] . '" member_id="' . strval($event['e_member_id']) . '" username="******" avatar_url="' . xmlentities($avatar_url) . '" room_id="' . (is_null($event['e_room_id']) ? '' : strval($event['e_room_id'])) . '">' . strval($event['id']) . '</chat_event>';
                    }
                }
            }
        } else {
            $max_id = $GLOBALS['SITE_DB']->query_value('chat_events', 'MAX(id)');
            if (is_null($max_id)) {
                $max_id = db_get_first_id() - 1;
            }
            $events_output .= '<chat_event type="NULL">' . strval($max_id) . '</chat_event>';
        }
    }
    if ($messages_output == '') {
        $messages_output = '<chat_null>' . strval($room_id) . '</chat_null>';
    }
    header("Cache-Control: no-cache, must-revalidate");
    // HTTP/1.1
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
    // Date in the past
    header('Content-Type: application/xml');
    $output = '<' . '?xml version="1.0" encoding="' . get_charset() . '" ?' . '>
<!DOCTYPE xc:content [
<!ENTITY euro "&#8364;">
<!ENTITY ldquo "&#8220;">
<!ENTITY rdquo "&#8221;">
<!ENTITY lsquo "&#8216;">
<!ENTITY rsquo "&#8217;">
<!ENTITY dagger "&#8224;">
<!ENTITY Dagger "&#8225;">
<!ENTITY permil "&#8240;">
<!ENTITY Scaron "&#352;">
<!ENTITY scaron "&#353;">
<!ENTITY Yuml "&#376;">
<!ENTITY ndash "&#8211;">
<!ENTITY mdash "&#8212;">
<!ENTITY hellip "&#8230;">
<!ENTITY copy "&#169;">
<!ENTITY nbsp " ">
<!ENTITY fnof "&#402;">
<!ENTITY reg "&#174;">
<!ENTITY trade "&#8482;">
<!ENTITY raquo "&#187;">
<!ENTITY frac14 "&#188;">
<!ENTITY frac12 "&#189;">
<!ENTITY frac34 "&#190;">
]>

<response>
	<result>
		' . $events_output . $invitations_output . $messages_output . '
	</result>
</response>';
    echo $output;
}