Ejemplo n.º 1
0
function mob_get_participated_forum()
{
    global $mobdb, $context, $scripturl, $settings, $user_info;
    if ($user_info['is_guest']) {
        mob_error('guests not allowed');
    }
    $request = $mobdb->query('
		SELECT b.name, b.ID_BOARD AS id_board' . ($user_info['is_guest'] ? ", 1 AS is_read, 0 AS new_from" : ", (IFNULL(lb.ID_MSG, 0) >= b.ID_MSG_UPDATED) AS is_read, IFNULL(ln.sent, -1) AS is_notify") . '
		FROM {db_prefix}messages AS m
			INNER JOIN {db_prefix}boards AS b ON (m.ID_BOARD = b.ID_BOARD)' . (!$user_info['is_guest'] ? "\n            LEFT JOIN {db_prefix}log_boards AS lb ON (lb.ID_BOARD = b.ID_BOARD AND lb.ID_MEMBER = {int:member})\n            LEFT JOIN {db_prefix}log_notify AS ln ON (ln.ID_BOARD = b.ID_BOARD AND ln.ID_MEMBER = {int:member})" : '') . '
		WHERE m.ID_MEMBER = {int:member}
			AND {query_see_board}
		GROUP BY b.ID_BOARD
		ORDER BY m.posterTime DESC', array('member' => $user_info['id']));
    $boards = array();
    while ($row = $mobdb->fetch_assoc($request)) {
        $boards[] = new xmlrpcval(array('forum_id' => new xmlrpcval($row['id_board'], 'string'), 'forum_name' => new xmlrpcval(processSubject($row['name']), 'base64'), 'new_post' => new xmlrpcval($row['is_read'], 'boolean'), 'icon_url' => new xmlrpcval(get_board_icon($row['id_board'], $row['is_read'], false), 'string')), 'struct');
    }
    $mobdb->free_result($request);
    return new xmlrpcresp(new xmlrpcval(array('total_forums_num' => new xmlrpcval(count($boards), 'int'), 'forums' => new xmlrpcval($boards, 'array')), 'struct'));
}
Ejemplo n.º 2
0
function mob_search_topic($rpcmsg, $subject_only = false)
{
    global $mobdb, $context, $sourcedir, $user_info, $modSettings, $scripturl, $modSettings, $messages_request;
    // Guest?
    if ($user_info['is_guest']) {
        mob_error('guests not allowed');
    }
    $string = $rpcmsg->getScalarValParam(0);
    $start = $rpcmsg->getScalarValParam(1);
    $end = $rpcmsg->getScalarValParam(2);
    $count = $end - $start > 50 ? 50 : $end - $start + 1;
    // We got an ID?
    if ($rpcmsg->getParam(3)) {
        $id_search = $rpcmsg->getScalarValParam(3);
    }
    // Is it an existing search?
    $new_search = !isset($id_search) || empty($_SESSION['search_cache'][$id_search]);
    if (!$new_search) {
        $_SESSION['search_cache'] = $_SESSION['search_cache'][$id_search];
    }
    // We use a cheap hack to perform our search
    $_REQUEST['start'] = $_GET['start'] = isset($start_num) ? $start_num : 0;
    $modSettings['search_results_per_page'] = isset($limit) ? $limit : 20;
    $_REQUEST['search'] = $_POST['search'] = $string;
    $_REQUEST['advanced'] = $_POST['advanced'] = 0;
    $_REQUEST['subject_only'] = $_POST['subject_only'] = $subject_only;
    require_once $sourcedir . '/Search.php';
    PlushSearch2();
    // We got results?
    if (!isset($_SESSION['search_cache'])) {
        mob_error('search not successful');
    }
    $count = $_SESSION['search_cache']['num_results'];
    $search_id = $_SESSION['search_cache']['ID_SEARCH'];
    // Cache it
    if (isset($id_search)) {
        $search_cache = $_SESSION['search_cache'];
        unset($_SESSION['search_cache']);
        $_SESSION['search_cache'][$id_search] = $search_cache;
        unset($search_cache);
    }
    // Get the results
    $topics = array();
    $tids = array();
    while ($topic = $context['get_topics']()) {
        $match = $topic['matches'][0];
        $topics[$topic['id']] = $topic;
        $topics[$topic['id']]['first_post'] = $match;
        $topics[$topic['id']]['last_post'] = $match;
        $tids[] = $topic['id'];
    }
    if (!empty($tids)) {
        // Check for notifications on this topic OR board.
        $mobdb->query("\n\t\t    SELECT sent, ID_TOPIC\n            FROM {db_prefix}log_notify\n            WHERE ID_TOPIC IN ({array_int:topic_ids})\n                AND ID_MEMBER = {int:member}", array('topic_ids' => $tids, 'member' => $user_info['id']));
        while ($row = $mobdb->fetch_assoc()) {
            // Find if this topic is marked for notification...
            if (!empty($row['ID_TOPIC'])) {
                $topics[$row['ID_TOPIC']]['is_notify'] = true;
            }
        }
        $mobdb->free_result();
    }
    foreach ($topics as $k => $topic) {
        $topics[$k]['subject'] = $topic['first_post']['subject'];
    }
    // Output the results
    return new xmlrpcresp(new xmlrpcval(array('total_topic_num' => new xmlrpcval($count, 'int'), 'search_id' => new xmlrpcval($search_id, 'string'), 'topics' => new xmlrpcval(get_topics_xmlrpc($topics), 'array')), 'struct'));
}
Ejemplo n.º 3
0
function mob_m_ban_user($rpcmsg)
{
    global $mobdb, $context, $func, $user_info, $modSettings, $user_info, $sourcedir;
    checkSession('session');
    // Cannot ban an user?
    if (!allowedTo('manage_bans')) {
        mob_error('cannot ban users');
    }
    $reason = strtr($func['htmlspecialchars']($rpcmsg->getParam(2) ? $rpcmsg->getScalarValParam(2) : ''), array("\r" => '', "\n" => '', "\t" => ''));
    $username = $rpcmsg->getScalarValParam(0);
    require_once $sourcedir . '/Subs-Auth.php';
    // If we have an user ID, use it otherwise search for the user
    if (!is_null($id_user)) {
        $request = $mobdb->query('
			SELECT ID_MEMBER
			FROM {db_prefix}members
			WHERE ID_MEMBER = {int:member}', array('member' => $id_user));
        if ($mobdb->num_rows($request) == 0) {
            $id_user = null;
        } else {
            list($id_user) = $mobdb->fetch_row($request);
        }
        $mobdb->free_result($request);
    }
    // Otherwise search from the DB,
    if (is_null($id_user)) {
        $username = utf8ToAscii($username);
        $members = findMembers($username);
        if (empty($members)) {
            mob_error('user not found');
        }
        $member_ids = array_keys($members);
        $id_user = $members[$member_ids[0]]['id'];
    }
    $member = $id_user;
    // Create the ban
    $mobdb->query('
		INSERT INTO {db_prefix}ban_groups
			(name, ban_time, cannot_access, expire_time, reason)
		VALUES
			({string:name}, {int:time}, 1, NULL, {string:reason})', array('time' => time(), 'name' => 'Tapatalk ban (' . $username . ')', 'reason' => $reason));
    $id_ban_group = $mobdb->insert_id();
    // Insert the user into the ban
    $mobdb->query('
		INSERT INTO {db_prefix}ban_items
			(ID_BAN_GROUP, ID_MEMBER)
		VALUES
			({int:group}, {int:member})', array('group' => $id_ban_group, 'member' => $member));
    // Do we have to delete every post made by this user?
    // !!! Optimize this
    if ($rpcmsg->getScalarValParam(1) == 2) {
        require_once $sourcedir . '/RemoveTopic.php';
        @ignore_user_abort();
        @set_time_limit(0);
        $request = $mobdb->query('
			SELECT m.ID_MSG AS id_msg
			FROM {db_prefix}messages AS m
				LEFT JOIN {db_prefix}topics AS t ON (t.ID_TOPIC = m.ID_TOPIC)
			WHERE m.ID_MEMBER = {int:member}
				AND (t.ID_FIRST_MSG != m.ID_MSG OR t.numReplies = 0)', array('member' => $member));
        while ($row = $mobdb->fetch_assoc($request)) {
            removeMessage($row['id_msg']);
        }
        $mobdb->free_result($request);
    }
    // Return a true response
    return new xmlrpcresp(new xmlrpcval(array('result' => new xmlrpcval(true, 'boolean')), 'struct'));
}
Ejemplo n.º 4
0
function mob_get_user_info($rpcmsg)
{
    global $mobdb, $context, $modSettings, $memberContext, $user_profile, $sourcedir, $txt, $user_info;
    $username = $rpcmsg->getParam(0) ? $rpcmsg->getScalarValParam(0) : null;
    $id_user = $rpcmsg->getParam(1) ? $rpcmsg->getScalarValParam(1) : null;
    if (empty($username) && empty($id_user)) {
        $id_user = $user_info['id'];
    }
    $id_user = intval($id_user);
    require_once $sourcedir . '/Subs-Auth.php';
    // If we have an user ID, use it otherwise search for the user
    if (!is_null($id_user)) {
        $request = $mobdb->query('
            SELECT ID_MEMBER
            FROM {db_prefix}members
            WHERE ID_MEMBER = {int:member}', array('member' => $id_user));
        if ($mobdb->num_rows($request) == 0) {
            $id_user = null;
        } else {
            list($id_user) = $mobdb->fetch_row($request);
        }
        $mobdb->free_result($request);
    }
    // Otherwise search from the DB,
    if (is_null($id_user)) {
        $username = utf8ToAscii($username);
        $members = findMembers($username);
        if (empty($members)) {
            mob_error('user not found');
        }
        $member_ids = array_keys($members);
        $id_user = $members[$member_ids[0]]['id'];
    }
    loadMemberData($id_user);
    loadMemberContext($id_user);
    $member = $memberContext[$id_user];
    // Is the guy banned?
    $request = $mobdb->query('
        SELECT COUNT(*)
        FROM {db_prefix}ban_items AS bi
            INNER JOIN {db_prefix}ban_groups AS bg ON (bg.ID_BAN_GROUP = bi.ID_BAN_GROUP)
        WHERE bi.ID_MEMBER = {int:member}
            AND (bg.expire_time IS NULL OR bg.expire_time > {int:time})
            AND bg.cannot_access != 0', array('member' => $member['id'], 'time' => time()));
    $banned = false;
    list($count) = $mobdb->fetch_row($request);
    if ($count > 0) {
        $banned = true;
    }
    $mobdb->free_result($request);
    loadLanguage('Profile');
    // Load the current action
    $current_action = determineActions($user_profile[$id_user]['url']);
    // Figure out all the custom fields
    $custom_fields = array();
    $custom_fields[] = new xmlrpcval(array('name' => new xmlrpcval($txt[87], 'base64'), 'value' => new xmlrpcval(!empty($member['group']) ? $member['group'] : $member['post_group'], 'base64')), 'struct');
    // Custom communication fields
    $fields = array('icq', 'aim', 'msn', 'yim');
    $_fields = array($txt[513], $txt[603], $txt['MSN'], $txt[604]);
    foreach ($fields as $k => $field) {
        if (!empty($member[$field]['name'])) {
            $custom_fields[] = new xmlrpcval(array('name' => new xmlrpcval(processSubject($_fields[$k]), 'base64'), 'value' => new xmlrpcval(processSubject($member[$field]['name']), 'base64')), 'struct');
        }
    }
    if ($modSettings['karmaMode'] == '1' || $modSettings['karmaMode'] == '2') {
        $custom_fields[] = new xmlrpcval(array('name' => new xmlrpcval(processSubject($modSettings['karmaLabel']), 'base64'), 'value' => new xmlrpcval(processSubject($modSettings['karmaMode'] == '1' ? $member['karma']['good'] - $member['karma']['bad'] : '+' . $member['karma']['good'] . '/-' . $member['karma']['bad']), 'base64')), 'struct');
    }
    if (!empty($member['gender']['name'])) {
        $custom_fields[] = new xmlrpcval(array('name' => new xmlrpcval(processSubject($txt[231]), 'base64'), 'value' => new xmlrpcval(processSubject($member['gender']['name']), 'base64')), 'struct');
    }
    if (!empty($member['location'])) {
        $custom_fields[] = new xmlrpcval(array('name' => new xmlrpcval(processSubject($txt[227]), 'base64'), 'value' => new xmlrpcval(processSubject($member['location']), 'base64')), 'struct');
    }
    if (!empty($member['signature'])) {
        $custom_fields[] = new xmlrpcval(array('name' => new xmlrpcval(processSubject($txt[85]), 'base64'), 'value' => new xmlrpcval(processSubject($member['signature']), 'base64')), 'struct');
    }
    $response = array('user_id' => new xmlrpcval($member['id'], 'string'), 'user_name' => new xmlrpcval(processUsername(!empty($member['name']) ? $member['name'] : $member['username']), 'base64'), 'display_name' => new xmlrpcval(processUsername(!empty($member['name']) ? $member['name'] : $member['username']), 'base64'), 'post_count' => new xmlrpcval($member['posts'], 'int'), 'reg_time' => new xmlrpcval(mobiquo_time($member['registered_timestamp']), 'dateTime.iso8601'), 'is_online' => new xmlrpcval(!empty($user_profile[$id_user]['isOnline']), 'boolean'), 'accept_pm' => new xmlrpcval(true, 'boolean'), 'display_text' => new xmlrpcval(processSubject($member['title']), 'base64'), 'icon_url' => new xmlrpcval($member['avatar']['href'], 'string'), 'current_activity' => new xmlrpcval(processSubject($current_action), 'base64'), 'current_action' => new xmlrpcval(processSubject($current_action), 'base64'), 'is_ban' => new xmlrpcval($banned, 'boolean'), 'can_ban' => new xmlrpcval(allowedTo('manage_bans'), 'boolean'), 'custom_fields_list' => new xmlrpcval($custom_fields, 'array'));
    if ($banned) {
        $response['user_type'] = new xmlrpcval('banned', 'base64');
    }
    // Return the response
    return new xmlrpcresp(new xmlrpcval($response, 'struct'));
}
Ejemplo n.º 5
0
function mob__get_thread($_topic = null, $post = null, $start = 0, $limit = 20, $per_page = null, $from_new = false)
{
    global $mobdb, $context, $modSettings, $scripturl, $user_info, $memberContext, $user_profile, $board, $topic;
    // If we are not given the topic ID, we load the start, limit and the topic
    $topic = $_topic;
    $position = 0;
    if (is_null($topic)) {
        if (is_null($post) || is_null($per_page)) {
            mob_error('invalid parameters');
        }
        $limit = $per_page;
        // Get the topic
        $request = $mobdb->query('
			SELECT ID_TOPIC AS id_topic
			FROM {db_prefix}messages
			WHERE id_msg = {int:post}', array('post' => $post));
        list($topic) = $mobdb->fetch_row($request);
        $mobdb->free_result($request);
        // Get the start value
        $request = $mobdb->query('
			SELECT COUNT(*)
			FROM {db_prefix}messages
			WHERE id_msg < {int:msg}
				AND id_topic = {int:topic}', array('topic' => $topic, 'msg' => $post));
        list($start) = $mobdb->fetch_row($request);
        $position = $start;
        $mobdb->free_result($request);
    }
    // Load the topic info
    $request = $mobdb->query('
		SELECT t.ID_TOPIC AS id_topic, t.ID_FIRST_MSG AS id_first_msg, t.ID_LAST_MSG AS id_last_msg, t.ID_MEMBER_STARTED AS id_member_started,
				' . ($user_info['is_guest'] ? '0' : 'ln.ID_TOPIC') . ' AS is_notify, t.locked, t.isSticky AS is_sticky, t.numReplies AS replies, t.numViews As views,
				' . ($user_info['is_guest'] ? 't.ID_LAST_MSG + 1' : 'IFNULL(lt.ID_MSG, IFNULL(lmr.ID_MSG, -1)) + 1') . ' AS new_from,
				b.id_board, b.name, m.subject
		FROM {db_prefix}topics AS t
			INNER JOIN {db_prefix}boards AS b ON (b.ID_BOARD = t.ID_BOARD)
			INNER JOIN {db_prefix}messages AS m ON (m.ID_MSG = t.ID_FIRST_MSG)' . ($user_info['is_guest'] ? '' : '
			LEFT JOIN {db_prefix}log_notify AS ln ON (ln.ID_TOPIC = t.ID_TOPIC AND ln.ID_MEMBER = {int:member})
			LEFT JOIN {db_prefix}log_topics AS lt ON (lt.id_topic = {int:topic} AND lt.id_member = {int:member})
			LEFT JOIN {db_prefix}log_mark_read AS lmr ON (lmr.id_board = t.ID_BOARD AND lmr.id_member = {int:member})') . '
		WHERE t.ID_TOPIC = {int:topic}
		LIMIT 1', array('topic' => $topic, 'member' => $user_info['id']));
    if ($mobdb->num_rows($request) == 0) {
        mob_error('topic not found or out of reach');
    }
    $topicinfo = $mobdb->fetch_assoc();
    $mobdb->free_result($request);
    if ($from_new) {
        // Get the start value
        $request = $mobdb->query('
			SELECT COUNT(*)
			FROM {db_prefix}messages
			WHERE id_msg < {int:msg}
			AND id_topic = {int:topic}', array('topic' => $topic, 'msg' => $topicinfo['new_from']));
        list($start) = $mobdb->fetch_row($request);
        $mobdb->free_result($request);
        $position = $start;
        $limit = $per_page;
    }
    // Emulate the permissions
    $topic = $topicinfo['id_topic'];
    $board = $topicinfo['id_board'];
    loadBoard();
    loadPermissions();
    // Up the views!
    if (empty($_SESSION['last_read_topic']) || $_SESSION['last_read_topic'] != $id_topic) {
        $mobdb->query('
		    UPDATE {db_prefix}topics
		    SET numViews = numViews + 1
		    WHERE ID_TOPIC = {int:topic}', array('topic' => $topic));
    }
    // If this user is not a guest, mark this topic as read
    if (!$user_info['is_guest']) {
        $mobdb->query('
		    REPLACE INTO {db_prefix}log_topics
		        (id_member, id_topic, id_msg)
		    VALUES
		        ({int:member}, {int:topic}, {int:msg})', array('member' => $user_info['id'], 'topic' => $topic, 'msg' => $modSettings['maxMsgID']));
    }
    // Set the last read topic
    $_SESSION['last_read_topic'] = $id_topic;
    // Fix the start
    $start = max(0, (int) $start - (int) $start % (int) $limit);
    // Load posts
    $posts = array();
    $id_posts = array();
    $id_members = array();
    $request = $mobdb->query('
		SELECT m.ID_MSG AS id_msg, m.subject, m.body, m.ID_MEMBER AS id_member, m.smileysEnabled AS smileys_enabled,
				m.posterName AS poster_name, m.posterTime AS poster_time, ID_MSG_MODIFIED < {int:new_from} AS is_read
		FROM {db_prefix}messages AS m
		WHERE m.ID_TOPIC = {int:topic}
		ORDER BY m.ID_MSG ASC
		LIMIT {int:start}, {int:limit}', array('topic' => $topic, 'start' => $start, 'limit' => $limit, 'new_from' => $topicinfo['new_from']));
    while ($row = $mobdb->fetch_assoc($request)) {
        $posts[] = $row;
        $id_posts[] = $row['id_msg'];
        $id_members[] = $row['id_member'];
    }
    $mobdb->free_result($request);
    // Load all the member data and context
    loadMemberData($id_members);
    // Load the attachments if we need to
    $attachments = array();
    if (!empty($modSettings['attachmentEnable']) && allowedTo('view_attachments')) {
        $request = $mobdb->query('
			SELECT a.ID_ATTACH as id_attach, a.filename, thumb.id_attach AS id_thumb, a.ID_MSG AS id_msg, a.width, a.height
			FROM {db_prefix}attachments AS a
				LEFT JOIN {db_prefix}attachments AS thumb ON (thumb.id_attach = a.id_thumb)
			WHERE a.ID_MSG IN ({array_int:msg})
				AND a.attachmentType = 0', array('msg' => $id_posts));
        while ($row = $mobdb->fetch_assoc($request)) {
            if (empty($attachments[$row['id_msg']])) {
                $attachments[$row['id_msg']] = array();
            }
            $attachments[$row['id_msg']][] = new xmlrpcval(array('content_type' => new xmlrpcval(!empty($row['width']) && !empty($row['height']) ? 'image' : 'other', 'string'), 'thumbnail_url' => new xmlrpcval(!empty($row['id_thumb']) ? $scripturl . '?action=dlattach;topic=' . $topic . '.0;attach=' . $row['id_thumb'] . ';image' : '', 'string'), 'url' => new xmlrpcval($scripturl . '?action=dlattach;topic=' . $topic . '.0;attach=' . $row['id_attach'], 'string')), 'struct');
        }
        $mobdb->free_result($request);
    }
    $topic_started = $topicinfo['id_member_started'] == $user_info['id'] && !$user_info['is_guest'];
    // Load the posts into a proper array
    foreach ($posts as $k => $post) {
        loadMemberContext($post['id_member']);
        $post_attachments = isset($attachments[$post['id_msg']]) ? $attachments[$post['id_msg']] : array();
        $member = !empty($memberContext[$post['id_member']]) ? $memberContext[$post['id_member']] : array();
        $posts[$k] = new xmlrpcval(array('post_id' => new xmlrpcval($post['id_msg'], 'string'), 'post_title' => new xmlrpcval(processSubject($post['subject']), 'base64'), 'post_content' => new xmlrpcval(processBody($post['body']), 'base64'), 'post_author_id' => new xmlrpcval(!empty($member) ? $member['id'] : 0, 'string'), 'post_author_name' => new xmlrpcval(processUsername(!empty($member) ? $member['name'] : $row['poster_name']), 'base64'), 'is_online' => new xmlrpcval(!empty($member) ? $user_profile[$post['id_member']]['isOnline'] : false, 'boolean'), 'can_edit' => new xmlrpcval((!$topicinfo['locked'] || allowedTo('moderate_board')) && (allowedTo('modify_any') || allowedTo('modify_replies') && $topic_started || allowedTo('modify_own') && $post['id_member'] == $user_info['id']), 'boolean'), 'icon_url' => new xmlrpcval($member['avatar']['href'], 'string'), 'post_time' => new xmlrpcval(mobiquo_time($post['poster_time']), 'dateTime.iso8601'), 'allow_smileys' => new xmlrpcval($post['smileys_enabled'], 'boolean'), 'attachments' => new xmlrpcval($post_attachments, 'array'), 'can_delete' => new xmlrpcval($post['id_msg'] != $topicinfo['id_first_msg'] && (allowedTo('delete_any') || allowedTo('delete_replies') && $topic_started || allowedTo('delete_own') && $user_info['id'] == $post['id_member']), 'boolean'), 'can_approve' => new xmlrpcval(false, 'boolean'), 'can_stick' => new xmlrpcval(allowedTo('make_sticky'), 'boolean'), 'can_move' => new xmlrpcval($topicinfo['id_first_msg'] != $post['id_msg'] && (allowedTo('move_any') || $topic_started && allowedTo('move_own')), 'boolean'), 'can_ban' => new xmlrpcval(allowedTo('manage_bans'), 'boolean')), 'struct');
    }
    // Return the topic
    return new xmlrpcresp(new xmlrpcval(array('total_post_num' => new xmlrpcval($topicinfo['replies'] + 1, 'int'), 'forum_id' => new xmlrpcval($topicinfo['id_board'], 'string'), 'forum_name' => new xmlrpcval(processSubject($topicinfo['name']), 'base64'), 'topic_id' => new xmlrpcval($topicinfo['id_topic'], 'string'), 'topic_title' => new xmlrpcval(processSubject($topicinfo['subject']), 'base64'), 'view_number' => new xmlrpcval($topicinfo['views'], 'int'), 'is_subscribed' => new xmlrpcval($topicinfo['is_notify'], 'boolean'), 'can_subscribe' => new xmlrpcval(allowedTo('mark_notify') && !$user_info['is_guest'], 'boolean'), 'is_closed' => new xmlrpcval($topicinfo['locked'], 'boolean'), 'can_reply' => new xmlrpcval(allowedTo('post_reply_any') || allowedTo('post_reply_own') && $topic_started, 'boolean'), 'can_delete' => new xmlrpcval(allowedTo('remove_any') || $topic_started && allowedTo('remove_own'), 'boolean'), 'can_close' => new xmlrpcval(allowedTo('lock_any') || $topic_started && allowedTo('lock_own'), 'boolean'), 'can_approve' => new xmlrpcval(false, 'boolean'), 'can_stick' => new xmlrpcval(allowedTo('make_sticky'), 'boolean'), 'can_move' => new xmlrpcval(allowedTo('move_any') || $topic_started && allowedTo('move_own'), 'boolean'), 'can_rename' => new xmlrpcval(allowedTo('modify_any') || $topic_started && allowedTo('modify_own'), 'boolean'), 'can_ban' => new xmlrpcval(allowedTo('manage_bans'), 'boolean'), 'position' => new xmlrpcval($position, 'int'), 'posts' => new xmlrpcval($posts, 'array')), 'struct'));
}
Ejemplo n.º 6
0
function mob_get_participated_topic($rpcmsg)
{
    global $mobdb, $scripturl, $user_info, $settings, $modSettings, $sourcedir;
    require_once $sourcedir . '/Subs-Auth.php';
    // Load the parameters, username must always be there
    $username = $rpcmsg->getScalarValParam(0);
    $start = $rpcmsg->getParam(1) ? $rpcmsg->getScalarValParam(1) : 0;
    $end = $rpcmsg->getParam(2) ? $rpcmsg->getScalarValParam(2) : $start + 9;
    $id_user = $rpcmsg->getParam(3) ? (int) $rpcmsg->getScalarValParam(3) : null;
    $count = $end - $start + 1;
    // If we have an user ID, use it otherwise search for the user
    if (!is_null($id_user)) {
        $request = $mobdb->query('
            SELECT ID_MEMBER
            FROM {db_prefix}members
            WHERE ID_MEMBER = {int:member}', array('member' => $id_user));
        if ($mobdb->num_rows($request) == 0) {
            $id_user = null;
        } else {
            list($id_user) = $mobdb->fetch_row($request);
        }
        $mobdb->free_result($request);
    }
    // Otherwise search from the DB,
    if (is_null($id_user)) {
        $username = utf8ToAscii($username);
        $members = findMembers($username);
        if (empty($members)) {
            mob_error('user not found');
        }
        $member_ids = array_keys($members);
        $id_user = $members[$member_ids[0]]['id'];
    }
    // Get the topic's count
    $request = $mobdb->query('
        SELECT COUNT(*)
        FROM {db_prefix}messages AS m
            INNER JOIN {db_prefix}topics AS t ON (m.ID_TOPIC = t.ID_TOPIC)
        WHERE m.ID_MEMBER = {int:member}
        GROUP BY m.ID_TOPIC', array('member' => $id_user));
    list($topic_count) = $mobdb->fetch_row($request);
    $mobdb->free_result($request);
    // Get the topics themselves
    $request = $mobdb->query('
        SELECT t.ID_TOPIC AS id_topic
        FROM {db_prefix}messages AS m
            INNER JOIN {db_prefix}topics AS t ON (m.ID_TOPIC = t.ID_TOPIC)
            INNER JOIN {db_prefix}boards AS b ON (b.ID_BOARD = m.ID_BOARD)
            INNER JOIN {db_prefix}messages AS lm ON (t.ID_LAST_MSG = lm.ID_MSG)
        WHERE m.ID_MEMBER = {int:member}
            AND {query_see_board}
        GROUP BY m.ID_TOPIC
        ORDER BY lm.posterTime DESC
        LIMIT {int:start}, {int:limit}', array('member' => $id_user, 'start' => $start, 'limit' => $count));
    $topics = array();
    while ($row = $mobdb->fetch_assoc($request)) {
        $topics[] = $row['id_topic'];
    }
    $mobdb->free_result($request);
    // Return the topics
    return new xmlrpcresp(new xmlrpcval(array('result' => new xmlrpcval(true, 'boolean'), 'total_topic_num' => new xmlrpcval($topic_count, 'int'), 'topics' => new xmlrpcval(!empty($topics) ? get_topics('t.ID_TOPIC IN ({array_int:topics})', array('topics' => $topics), $start, $count, false) : array(), 'array')), 'struct'));
}