示例#1
0
function get_contact_func($xmlrpc_params)
{
    global $db, $lang, $theme, $plugins, $mybb, $session, $settings, $cache, $time, $mybbgroups, $parser, $displaygroupfields;
    $lang->load("member");
    $input = Tapatalk_Input::filterXmlInput(array('user_id' => Tapatalk_Input::STRING), $xmlrpc_params);
    if (isset($input['user_id']) && !empty($input['user_id'])) {
        $uid = $input['user_id'];
    } else {
        $uid = $mybb->user['uid'];
    }
    if ($mybb->user['uid'] != $uid) {
        $member = get_user($uid);
    } else {
        $member = $mybb->user;
    }
    if (!$member['uid']) {
        error($lang->error_nomember);
    }
    // Guests or those without permission can't email other users
    if ($mybb->usergroup['cansendemail'] == 0 || !$mybb->user['uid']) {
        error_no_permission();
    }
    if ($member['hideemail'] != 0) {
        error($lang->error_hideemail);
    }
    $user_info = array('result' => new xmlrpcval(true, 'boolean'), 'user_id' => new xmlrpcval($member['uid']), 'display_name' => new xmlrpcval(basic_clean($member['username']), 'base64'), 'enc_email' => new xmlrpcval(base64_encode(encrypt($member['email'], loadAPIKey()))));
    $xmlrpc_user_info = new xmlrpcval($user_info, 'struct');
    return new xmlrpcresp($xmlrpc_user_info);
}
function search_user_func()
{
    global $user, $config, $auth, $db, $phpbb_root_path;
    // Start session management
    $user->session_begin();
    $auth->acl($user->data);
    $user->setup(array('memberlist', 'groups'));
    if (!$auth->acl_gets('u_viewprofile', 'a_user', 'a_useradd', 'a_userdel')) {
        if ($user->data['user_id'] != ANONYMOUS) {
            trigger_error('NO_VIEW_USERS');
        }
        trigger_error('LOGIN_EXPLAIN_MEMBERLIST');
    }
    if ($config['load_search'] || $auth->acl_get('a_')) {
        $username = request_var('username', '', true);
        $email = strtolower(request_var('email', ''));
        $sql_where .= $username ? ' AND u.username_clean ' . $db->sql_like_expression(str_replace('*', $db->any_char, utf8_clean_string($username))) : '';
        $sql_where .= $auth->acl_get('a_user') && $email ? ' OR u.user_email ' . $db->sql_like_expression(str_replace('*', $db->any_char, $email)) . ' ' : '';
    } else {
        trigger_error('NO_VIEW_USERS');
    }
    $page = request_var('page', 1);
    $per_page = request_var('perpage', 20);
    $start = ($page - 1) * $per_page;
    $default_key = 'c';
    $sort_key = request_var('sk', $default_key);
    $sort_dir = request_var('sd', 'a');
    $sort_key_sql = array('a' => 'u.username_clean', 'b' => 'u.user_from', 'c' => 'u.user_regdate', 'd' => 'u.user_posts', 'f' => 'u.user_website', 'g' => 'u.user_icq', 'h' => 'u.user_aim', 'i' => 'u.user_msnm', 'j' => 'u.user_yim', 'k' => 'u.user_jabber');
    // Sorting and order
    if (!isset($sort_key_sql[$sort_key])) {
        $sort_key = $default_key;
    }
    $order_by .= $sort_key_sql[$sort_key] . ' ' . ($sort_dir == 'a' ? 'ASC' : 'DESC');
    // Unfortunately we must do this here for sorting by rank, else the sort order is applied wrongly
    if ($sort_key == 'm') {
        $order_by .= ', u.user_posts DESC';
    }
    // Count the users ...
    if ($sql_where) {
        $sql = 'SELECT COUNT(u.user_id) AS total_users
			FROM ' . USERS_TABLE . " u\r\r\n\t\t\tWHERE u.user_type IN (" . USER_NORMAL . ', ' . USER_FOUNDER . ")\r\r\n\t\t\t{$sql_where}";
        $result = $db->sql_query($sql);
        $total_users = (int) $db->sql_fetchfield('total_users');
        $db->sql_freeresult($result);
    } else {
        $total_users = $config['num_users'];
    }
    // Get us some users :D
    $sql = "SELECT u.*\r\r\n\t\tFROM " . USERS_TABLE . " u\r\r\n\t\tWHERE u.user_type IN (" . USER_NORMAL . ', ' . USER_FOUNDER . ")\r\r\n\t\t\t{$sql_where}\r\r\n\t\tORDER BY {$order_by}";
    $result = $db->sql_query_limit($sql, $per_page, $start);
    $user_list = array();
    while ($row = $db->sql_fetchrow($result)) {
        $return_user_lists[] = new xmlrpcval(array('username' => new xmlrpcval(basic_clean($row['username']), 'base64'), 'user_id' => new xmlrpcval($row['user_id'], 'string'), 'icon_url' => new xmlrpcval(get_user_avatar_url($row['user_avatar'], $row['user_avatar_type']), 'string')), 'struct');
    }
    $db->sql_freeresult($result);
    $suggested_users = new xmlrpcval(array('total' => new xmlrpcval($total_users, 'int'), 'list' => new xmlrpcval($return_user_lists, 'array')), 'struct');
    return new xmlrpcresp($suggested_users);
}
function get_recommended_user_func()
{
    global $mybb, $db, $lang, $users, $tapatalk_users;
    $tapatalk_users = array();
    $users = array();
    // Load global language phrases
    $lang->load("memberlist");
    //get tapatalk users
    if (isset($_POST['mode']) && $_POST['mode'] == 2) {
        $sql = "SELECT userid FROM " . TABLE_PREFIX . "tapatalk_users";
        $query = $db->query($sql);
        while ($user = $db->fetch_array($query)) {
            $tapatalk_users[] = $user['userid'];
        }
    }
    // get pm users
    $sql = "SELECT p.toid as uid\n\tFROM " . TABLE_PREFIX . "privatemessages p \n\tWHERE p.uid = " . $mybb->user['uid'] . "\n\tGROUP BY p.toid\n\tLIMIT 0,1000";
    get_recommended_user_list($sql, 'contact');
    // get pm me users
    $sql = "SELECT p.uid as uid\n\tFROM " . TABLE_PREFIX . "privatemessages p \n\tWHERE p.toid = " . $mybb->user['uid'] . "\n\tGROUP BY p.uid\n\tLIMIT 0,1000";
    get_recommended_user_list($sql, 'contact');
    //get sub topic users
    $sql = "SELECT t.uid as uid\n\tFROM " . TABLE_PREFIX . "threadsubscriptions ts \n\tLEFT JOIN " . TABLE_PREFIX . "threads t ON ts.tid = t.tid \n\tWHERE ts.uid = " . $mybb->user['uid'] . "\n\tGROUP BY t.uid\n\tLIMIT 0,1000";
    get_recommended_user_list($sql, 'watch');
    //get sub me topic users
    $sql = "SELECT ts.uid as uid\n\tFROM " . TABLE_PREFIX . "threadsubscriptions ts \n\tRIGHT JOIN " . TABLE_PREFIX . "threads t ON ts.tid = t.tid \n\tWHERE t.uid = " . $mybb->user['uid'] . "\n\tGROUP BY ts.uid\n\tLIMIT 0,1000";
    get_recommended_user_list($sql, 'watch');
    //get like or thank users
    $prefix = "g33k_thankyoulike_";
    if (file_exists('thankyoulike.php') && $db->table_exists($prefix . 'thankyoulike')) {
        $sql = "SELECT thl.puid as uid\n\t\tFROM " . TABLE_PREFIX . $prefix . "thankyoulike thl \n\t\tWHERE thl.uid = " . $mybb->user['uid'] . "\n\t\tGROUP BY thl.puid\n\t\tLIMIT 0,1000";
        get_recommended_user_list($sql, 'like');
        $sql = "SELECT thl.uid as uid\n\t\tFROM " . TABLE_PREFIX . $prefix . "thankyoulike thl \n\t\tWHERE thl.puid = " . $mybb->user['uid'] . "\n\t\tGROUP BY thl.uid\n\t\tLIMIT 0,1000";
        get_recommended_user_list($sql, 'liked');
    }
    $page = intval($_POST['page']);
    $perpage = intval($_POST['perpage']);
    $start = ($page - 1) * $perpage;
    $return_user_lists = array();
    $users_rank = tapa_rank_users($users);
    $total = count($users_rank);
    $users_slice = array_slice($users_rank, $start, $perpage);
    $user_id_str = implode(',', $users_slice);
    $mobi_api_key = loadAPIKey();
    if (!empty($user_id_str)) {
        $sql = "SELECT uid,username,email,avatar FROM " . TABLE_PREFIX . "users WHERE uid IN({$user_id_str})";
        $query = $db->query($sql);
        while ($user = $db->fetch_array($query)) {
            $user['username'] = format_name($user['username'], $user['usergroup'], $user['displaygroup']);
            if ($user['avatar'] != '') {
                $user['avatar'] = absolute_url($user['avatar']);
            }
            $return_user_lists[] = new xmlrpcval(array('username' => new xmlrpcval(basic_clean($user['username']), 'base64'), 'user_id' => new xmlrpcval($user['uid'], 'string'), 'icon_url' => new xmlrpcval($user['avatar'], 'string'), 'type' => new xmlrpcval('', 'string'), 'enc_email' => new xmlrpcval(base64_encode(encrypt(trim($user['email']), $mobi_api_key)), 'string')), 'struct');
        }
    }
    $suggested_users = new xmlrpcval(array('total' => new xmlrpcval($total, 'int'), 'list' => new xmlrpcval($return_user_lists, 'array')), 'struct');
    return new xmlrpcresp($suggested_users);
}
function prefetch_account_func()
{
    global $db;
    $user = tt_get_user_by_email(trim($_POST['email']));
    if (empty($user['user_id'])) {
        trigger_error("Can't find the user");
    }
    $result = array('result' => new xmlrpcval(true, 'boolean'), 'result_text' => new xmlrpcval('', 'base64'), 'user_id' => new xmlrpcval($user['user_id'], 'string'), 'login_name' => new xmlrpcval(basic_clean($user['username']), 'base64'), 'display_name' => new xmlrpcval(basic_clean($user['username']), 'base64'), 'avatar' => new xmlrpcval(get_user_avatar_url($user['user_avatar'], $user['user_avatar_type']), 'string'));
    return new xmlrpcresp(new xmlrpcval($result, 'struct'));
}
示例#5
0
function get_error($err_str, $status = 0)
{
    global $context;
    @ob_clean();
    $result = array('result' => new xmlrpcval(false, 'boolean'), 'result_text' => new xmlrpcval(basic_clean($err_str), 'base64'));
    if ($status) {
        $result['status'] = new xmlrpcval($status, 'string');
    }
    $response = new xmlrpcresp(new xmlrpcval($result, 'struct'));
    echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" . $response->serialize('UTF-8');
    exit;
}
function get_subscribed_forum_func($xmlrpc_params)
{
    global $db, $lang, $theme, $plugins, $mybb, $session, $settings, $cache, $time, $mybbgroups;
    $lang->load("usercp");
    if ($mybb->user['uid'] == 0 || $mybb->usergroup['canusercp'] == 0) {
        return tt_no_permission();
    }
    $query = $db->simple_select("forumpermissions", "*", "gid='" . $db->escape_string($mybb->user['usergroup']) . "'");
    while ($permissions = $db->fetch_array($query)) {
        $permissioncache[$permissions['gid']][$permissions['fid']] = $permissions;
    }
    // Build a forum cache.
    $query = $db->query("\n\t\tSELECT f.fid, fr.dateline AS lastread\n\t\tFROM " . TABLE_PREFIX . "forums f\n\t\tLEFT JOIN " . TABLE_PREFIX . "forumsread fr ON (fr.fid=f.fid AND fr.uid='{$mybb->user['uid']}')\n\t\tWHERE f.active != 0\n\t\tORDER BY pid, disporder\n\t");
    while ($forum = $db->fetch_array($query)) {
        if ($mybb->user['uid'] == 0) {
            if ($forumsread[$forum['fid']]) {
                $forum['lastread'] = $forumsread[$forum['fid']];
            }
        }
        $readforums[$forum['fid']] = $forum['lastread'];
    }
    require_once MYBB_ROOT . "inc/functions_forumlist.php";
    $fpermissions = forum_permissions();
    $query = $db->query("\n\t\tSELECT fs.*, f.*, t.subject AS lastpostsubject, fr.dateline AS lastread\n\t\tFROM " . TABLE_PREFIX . "forumsubscriptions fs\n\t\tLEFT JOIN " . TABLE_PREFIX . "forums f ON (f.fid = fs.fid)\n\t\tLEFT JOIN " . TABLE_PREFIX . "threads t ON (t.tid = f.lastposttid)\n\t\tLEFT JOIN " . TABLE_PREFIX . "forumsread fr ON (fr.fid=f.fid AND fr.uid='{$mybb->user['uid']}')\n\t\tWHERE f.type='f' AND fs.uid='" . $mybb->user['uid'] . "'\n\t\tORDER BY f.name ASC\n\t");
    $forums = '';
    $forum_list = array();
    while ($forum = $db->fetch_array($query)) {
        $forumpermissions = $fpermissions[$forum['fid']];
        if ($forumpermissions['canview'] != 0) {
            $lightbulb = get_forum_lightbulb(array('open' => $forum['open'], 'lastread' => $forum['lastread']), array('lastpost' => $forum['lastpost']));
            $forum_list[] = new xmlrpcval(array('forum_id' => new xmlrpcval($forum['fid'], 'string'), 'forum_name' => new xmlrpcval(basic_clean($forum['name']), 'base64'), 'is_protected' => new xmlrpcval(!empty($forum['password']), 'boolean'), 'new_post' => new xmlrpcval($lightbulb['folder'] == 'on', 'boolean')), 'struct');
        }
    }
    $result = new xmlrpcval(array('total_forums_num' => new xmlrpcval(count($forum_list), 'int'), 'forums' => new xmlrpcval($forum_list, 'array')), 'struct');
    return new xmlrpcresp($result);
}
示例#7
0
function addCustomField($name, $value, &$list)
{
    $name = preg_replace('/:$/', '', $name);
    $list[] = new xmlrpcval(array('name' => new xmlrpcval(basic_clean($name), 'base64'), 'value' => new xmlrpcval(basic_clean($value), 'base64')), 'struct');
}
示例#8
0
function get_announcement_list($foruminfo, $fid)
{
    // Gather forum stats
    global $db, $lang, $theme, $plugins, $mybb, $session, $settings, $time, $mybbgroups, $cache;
    $has_announcements = $has_modtools = false;
    $forum_stats = $cache->read("forumsdisplay");
    $parser = new postParser();
    if (is_array($forum_stats)) {
        if (!empty($forum_stats[-1]['modtools']) || !empty($forum_stats[$fid]['modtools'])) {
            // Mod tools are specific to forums, not parents
            $has_modtools = true;
        }
        if (!empty($forum_stats[-1]['announcements']) || !empty($forum_stats[$fid]['announcements'])) {
            // Global or forum-specific announcements
            $has_announcements = true;
        }
    }
    $parentlist = $foruminfo['parentlist'];
    $parentlistexploded = explode(",", $parentlist);
    foreach ($parentlistexploded as $mfid) {
        if (!empty($forum_stats[$mfid]['announcements'])) {
            $has_announcements = true;
        }
    }
    $announcementlist = $topic_list = array();
    if ($has_announcements == true) {
        $limit = '';
        $announcements = '';
        if ($mybb->settings['announcementlimit']) {
            $limit = "LIMIT 0, " . $mybb->settings['announcementlimit'];
        }
        $sql = build_parent_list($fid, "fid", "OR", $parentlist);
        $time = TIME_NOW;
        $query = $db->query("\n\t\t\tSELECT a.*, u.username\n\t\t\tFROM " . TABLE_PREFIX . "announcements a\n\t\t\tLEFT JOIN " . TABLE_PREFIX . "users u ON (u.uid=a.uid)\n\t\t\tWHERE a.startdate<='{$time}' AND (a.enddate>='{$time}' OR a.enddate='0') AND ({$sql} OR fid='-1')\n\t\t\tORDER BY a.startdate DESC {$limit}\n\t\t");
        // See if this announcement has been read in our announcement array
        $cookie = array();
        if (isset($mybb->cookies['mybb']['announcements'])) {
            $cookie = my_unserialize(stripslashes($mybb->cookies['mybb']['announcements']));
        }
        $announcementlist = '';
        $bgcolor = alt_trow(true);
        // Reset the trow colors
        while ($announcement = $db->fetch_array($query)) {
            if ($announcement['startdate'] > $mybb->user['lastvisit'] && !$cookie[$announcement['aid']]) {
                $new_class = ' class="subject_new"';
                $folder = "newfolder";
            } else {
                $new_class = ' class="subject_old"';
                $folder = "folder";
            }
            // Mmm, eat those announcement cookies if they're older than our last visit
            if (isset($cookie[$announcement['aid']]) && $cookie[$announcement['aid']] < $mybb->user['lastvisit']) {
                unset($cookie[$announcement['aid']]);
            }
            $announcement['announcementlink'] = get_announcement_link($announcement['aid']);
            $announcement['subject'] = $parser->parse_badwords($announcement['subject']);
            $announcement['subject'] = htmlspecialchars_uni($announcement['subject']);
            $postdate = my_date('relative', $announcement['startdate']);
            $announcement['profilelink'] = build_profile_link($announcement['username'], $announcement['uid']);
            $announcementlist[] = $announcement;
        }
        if (empty($cookie)) {
            // Clean up cookie crumbs
            my_setcookie('mybb[announcements]', 0, TIME_NOW - 60 * 60 * 24 * 365);
        } else {
            if (!empty($cookie)) {
                my_setcookie("mybb[announcements]", addslashes(serialize($cookie)), -1);
            }
        }
        foreach ($announcementlist as $announce) {
            $user_info = get_user($announce['uid']);
            $icon_url = absolute_url($user_info['avatar']);
            $xmlrpc_topic = new xmlrpcval(array('forum_id' => new xmlrpcval($fid, 'string'), 'topic_id' => new xmlrpcval('ann_' . $announce['aid'], 'string'), 'topic_title' => new xmlrpcval(basic_clean($announce['subject']), 'base64'), 'topic_author_id' => new xmlrpcval($announce['uid'], 'string'), 'topic_author_name' => new xmlrpcval(basic_clean($announce['username']), 'base64'), 'icon_url' => new xmlrpcval(absolute_url($icon_url), 'string'), 'reply_number' => new xmlrpcval(0, 'int'), 'view_number' => new xmlrpcval(0, 'int'), 'short_content' => new xmlrpcval(process_short_content($announce['message'], $parser), 'base64')), 'struct');
            $topic_list[] = $xmlrpc_topic;
        }
    }
    $response = new xmlrpcval(array('total_topic_num' => new xmlrpcval(count($announcementlist), 'int'), 'forum_id' => new xmlrpcval($fid), 'forum_name' => new xmlrpcval(basic_clean($foruminfo['name']), 'base64'), 'can_post' => new xmlrpcval(false, 'boolean'), 'can_upload' => new xmlrpcval(false, 'boolean'), 'topics' => new xmlrpcval($topic_list, 'array')), 'struct');
    return new xmlrpcresp($response);
}
function get_custom_fields()
{
    global $user, $template;
    $custom_fields = array();
    if ($template->_rootref['RANK_TITLE']) {
        $custom_fields[] = new xmlrpcval(array('name' => new xmlrpcval($user->lang['RANK'], 'base64'), 'value' => new xmlrpcval(basic_clean($template->_rootref['RANK_TITLE']), 'base64')), 'struct');
    }
    if (!empty($template->_rootref['S_USER_INACTIVE'])) {
        $custom_fields[] = new xmlrpcval(array('name' => new xmlrpcval($user->lang['USER_IS_INACTIVE'], 'base64'), 'value' => new xmlrpcval($template->_rootref['USER_INACTIVE_REASON'], 'base64')), 'struct');
    }
    if ($template->_rootref['LOCATION']) {
        $custom_fields[] = new xmlrpcval(array('name' => new xmlrpcval($user->lang['LOCATION'], 'base64'), 'value' => new xmlrpcval($template->_rootref['LOCATION'], 'base64')), 'struct');
    }
    if ($template->_rootref['AGE']) {
        $custom_fields[] = new xmlrpcval(array('name' => new xmlrpcval($user->lang['AGE'], 'base64'), 'value' => new xmlrpcval($template->_rootref['AGE'], 'base64')), 'struct');
    }
    if ($template->_rootref['OCCUPATION']) {
        $custom_fields[] = new xmlrpcval(array('name' => new xmlrpcval($user->lang['OCCUPATION'], 'base64'), 'value' => new xmlrpcval($template->_rootref['OCCUPATION'], 'base64')), 'struct');
    }
    if ($template->_rootref['INTERESTS']) {
        $custom_fields[] = new xmlrpcval(array('name' => new xmlrpcval($user->lang['INTERESTS'], 'base64'), 'value' => new xmlrpcval($template->_rootref['INTERESTS'], 'base64')), 'struct');
    }
    if ($template->_rootref['S_GROUP_OPTIONS']) {
        $custom_fields[] = new xmlrpcval(array('name' => new xmlrpcval($user->lang['USERGROUPS'], 'base64'), 'value' => new xmlrpcval($template->_rootref['S_GROUP_OPTIONS'], 'base64')), 'struct');
    }
    if ($template->_rootref['U_EMAIL']) {
        $custom_fields[] = new xmlrpcval(array('name' => new xmlrpcval($user->lang['EMAIL_ADDRESS'], 'base64'), 'value' => new xmlrpcval($template->_rootref['U_EMAIL'], 'base64')), 'struct');
    }
    if ($template->_rootref['U_WWW']) {
        $custom_fields[] = new xmlrpcval(array('name' => new xmlrpcval($user->lang['WEBSITE'], 'base64'), 'value' => new xmlrpcval($template->_rootref['U_WWW'], 'base64')), 'struct');
    }
    if ($template->_rootref['USER_MSN']) {
        $custom_fields[] = new xmlrpcval(array('name' => new xmlrpcval($user->lang['MSNM'], 'base64'), 'value' => new xmlrpcval($template->_rootref['USER_MSN'], 'base64')), 'struct');
    }
    if ($template->_rootref['USER_YIM']) {
        $custom_fields[] = new xmlrpcval(array('name' => new xmlrpcval($user->lang['YIM'], 'base64'), 'value' => new xmlrpcval($template->_rootref['USER_YIM'], 'base64')), 'struct');
    }
    if ($template->_rootref['USER_AIM']) {
        $custom_fields[] = new xmlrpcval(array('name' => new xmlrpcval($user->lang['AIM'], 'base64'), 'value' => new xmlrpcval($template->_rootref['USER_AIM'], 'base64')), 'struct');
    }
    if ($template->_rootref['USER_ICQ']) {
        $custom_fields[] = new xmlrpcval(array('name' => new xmlrpcval($user->lang['ICQ'], 'base64'), 'value' => new xmlrpcval($template->_rootref['USER_ICQ'], 'base64')), 'struct');
    }
    if ($template->_rootref['USER_JABBER']) {
        $custom_fields[] = new xmlrpcval(array('name' => new xmlrpcval($user->lang['JABBER'], 'base64'), 'value' => new xmlrpcval($template->_rootref['USER_JABBER'], 'base64')), 'struct');
    }
    if ($template->_rootref['S_WARNINGS']) {
        $custom_fields[] = new xmlrpcval(array('name' => new xmlrpcval($user->lang['WARNINGS'], 'base64'), 'value' => new xmlrpcval($template->_rootref['WARNINGS'], 'base64')), 'struct');
    }
    if ($template->_rootref['S_SHOW_ACTIVITY'] && $template->_rootref['POSTS']) {
        if ($template->_rootref['ACTIVE_FORUM']) {
            $custom_fields[] = new xmlrpcval(array('name' => new xmlrpcval($user->lang['ACTIVE_IN_FORUM'], 'base64'), 'value' => new xmlrpcval($template->_rootref['ACTIVE_FORUM'] . "\n(" . $template->_rootref['ACTIVE_FORUM_POSTS'] . ' / ' . $template->_rootref['ACTIVE_FORUM_PCT'] . ')', 'base64')), 'struct');
        }
        if ($template->_rootref['ACTIVE_TOPIC']) {
            $custom_fields[] = new xmlrpcval(array('name' => new xmlrpcval($user->lang['ACTIVE_IN_TOPIC'], 'base64'), 'value' => new xmlrpcval($template->_rootref['ACTIVE_TOPIC'] . "\n(" . $template->_rootref['ACTIVE_TOPIC_POSTS'] . ' / ' . $template->_rootref['ACTIVE_TOPIC_PCT'] . ')', 'base64')), 'struct');
        }
    }
    return $custom_fields;
}
示例#10
0
function search_func()
{
    global $search_data, $include_topic_num, $mybb;
    $return_list = array();
    foreach ($search_data['results'] as $item) {
        $fid = $item['fid'];
        if ($search_data['type'] == 'threads') {
            $lastpost = $item['lastpost'];
            $isbanned = $lastpost['isbanned'];
            $return_thread = array('forum_id' => new xmlrpcval($item['fid'], 'string'), 'forum_name' => new xmlrpcval(basic_clean($item['forumname']), 'base64'), 'topic_id' => new xmlrpcval($item['tid'], 'string'), 'topic_title' => new xmlrpcval(basic_clean($item['subject']), 'base64'), 'post_id' => new xmlrpcval($item['lastpost']['pid'], 'string'), 'post_author_id' => new xmlrpcval($lastpost ? $lastpost['uid'] : $item['lastposteruid'], 'string'), 'post_author_name' => new xmlrpcval(basic_clean($lastpost ? $lastpost['username'] : $item['lastposter']), 'base64'), 'last_reply_time' => new xmlrpcval(mobiquo_iso8601_encode($lastpost ? $lastpost['dateline'] : $item['lastpost']), 'dateTime.iso8601'), 'timestamp' => new xmlrpcval($lastpost ? $lastpost['dateline'] : $item['lastpost'], 'string'), 'icon_url' => new xmlrpcval(absolute_url($lastpost ? $lastpost['avatar'] : $item['avatar']), 'string'), 'short_content' => new xmlrpcval(basic_clean($lastpost ? $lastpost['prev'] : ''), 'base64'), 'last_reply_author_id' => new xmlrpcval($lastpost ? $lastpost['uid'] : $item['lastposteruid'], 'string'), 'last_reply_author_name' => new xmlrpcval(basic_clean($lastpost ? $lastpost['username'] : $item['lastposter']), 'base64'), 'post_time' => new xmlrpcval(mobiquo_iso8601_encode($lastpost ? $lastpost['dateline'] : $item['lastpost']), 'dateTime.iso8601'), 'reply_number' => new xmlrpcval($item['replies'], 'int'), 'view_number' => new xmlrpcval($item['views'], 'int'), 'attachment' => new xmlrpcval($item['attachmentcount'], 'string'), 'can_subscribe' => new xmlrpcval(true, 'boolean'), 'is_approved' => new xmlrpcval($item['visible'], 'boolean'));
            if ($item['threadprefix']) {
                $return_thread['prefix'] = new xmlrpcval(basic_clean($item['threadprefix']), 'base64');
            }
            if (is_moderator($fid, "canopenclosethreads")) {
                $return_thread['can_close'] = new xmlrpcval(true, 'boolean');
            }
            if (is_moderator($fid, "candeleteposts")) {
                $return_thread['can_delete'] = new xmlrpcval(true, 'boolean');
            }
            if (is_moderator($fid, "canmanagethreads")) {
                $return_thread['can_stick'] = new xmlrpcval(true, 'boolean');
            }
            if (is_moderator($fid, "canmanagethreads")) {
                $return_thread['can_move'] = new xmlrpcval(true, 'boolean');
                $return_thread['can_merge'] = new xmlrpcval(true, 'boolean');
                $return_thread['can_merge_post'] = new xmlrpcval(true, 'boolean');
            }
            if (is_moderator($fid, "canopenclosethreads")) {
                $return_thread['can_approve'] = new xmlrpcval(true, 'boolean');
            }
            if (is_moderator($fid, "caneditposts")) {
                $return_thread['can_rename'] = new xmlrpcval(true, 'boolean');
            }
            if ($mybb->usergroup['canmodcp'] == 1) {
                $return_thread['can_ban'] = new xmlrpcval(true, 'boolean');
            }
            if ($isbanned) {
                $return_thread['is_ban'] = new xmlrpcval(true, 'boolean');
            }
            if ($item['unread']) {
                $return_thread['new_post'] = new xmlrpcval(true, 'boolean');
            }
            if ($item['closed']) {
                $return_thread['is_closed'] = new xmlrpcval(true, 'boolean');
            }
            if ($item['sticky']) {
                $return_thread['is_sticky'] = new xmlrpcval(true, 'boolean');
            }
            if ($item['is_sub']) {
                $return_thread['is_subscribed'] = new xmlrpcval(true, 'boolean');
            }
            $xmlrpc_thread = new xmlrpcval($return_thread, 'struct');
            array_push($return_list, $xmlrpc_thread);
        } else {
            $return_post = array('forum_id' => new xmlrpcval($item['fid'], 'string'), 'forum_name' => new xmlrpcval(basic_clean($item['forumname']), 'base64'), 'topic_id' => new xmlrpcval($item['tid'], 'string'), 'topic_title' => new xmlrpcval(basic_clean($item['thread_subject']), 'base64'), 'post_id' => new xmlrpcval($item['pid'], 'string'), 'post_title' => new xmlrpcval(basic_clean($item['subject']), 'base64'), 'post_author_id' => new xmlrpcval($item['uid'], 'string'), 'post_author_name' => new xmlrpcval(basic_clean($item['username']), 'base64'), 'post_time' => new xmlrpcval(mobiquo_iso8601_encode($item['dateline']), 'dateTime.iso8601'), 'timestamp' => new xmlrpcval($item['dateline'], 'string'), 'reply_number' => new xmlrpcval($item['thread_replies'], 'int'), 'view_number' => new xmlrpcval($item['thread_views'], 'int'), 'icon_url' => new xmlrpcval(absolute_url($item['avatar']), 'string'), 'short_content' => new xmlrpcval(basic_clean($item['prev']), 'base64'), 'is_approved' => new xmlrpcval($item['visible'], 'boolean'));
            if (is_moderator($fid, "canmanagethreads")) {
                $return_post['can_approve'] = new xmlrpcval(true, 'boolean');
            }
            if (is_moderator($fid, "candeleteposts")) {
                $return_post['can_delete'] = new xmlrpcval(true, 'boolean');
            }
            if (is_moderator($fid, "canmanagethreads")) {
                $return_post['can_move'] = new xmlrpcval(true, 'boolean');
            }
            if ($mybb->usergroup['canmodcp'] == 1) {
                $return_post['can_ban'] = new xmlrpcval(true, 'boolean');
            }
            if ($item['isbanned']) {
                $return_post['is_ban'] = new xmlrpcval(true, 'boolean');
            }
            if ($item['unread']) {
                $return_post['new_post'] = new xmlrpcval(true, 'boolean');
            }
            $xmlrpc_post = new xmlrpcval($return_post, 'struct');
            array_push($return_list, $xmlrpc_post);
        }
    }
    if ($include_topic_num) {
        if ($search_data['type'] == 'threads') {
            return new xmlrpcresp(new xmlrpcval(array('result' => new xmlrpcval(true, 'boolean'), 'search_id' => new xmlrpcval($search_data['sid'], 'string'), 'total_topic_num' => new xmlrpcval($search_data['total'], 'int'), 'topics' => new xmlrpcval($return_list, 'array')), 'struct'));
        } else {
            return new xmlrpcresp(new xmlrpcval(array('result' => new xmlrpcval(true, 'boolean'), 'search_id' => new xmlrpcval($search_data['sid'], 'string'), 'total_post_num' => new xmlrpcval($search_data['total'], 'int'), 'posts' => new xmlrpcval($return_list, 'array')), 'struct'));
        }
    } else {
        return new xmlrpcresp(new xmlrpcval($return_list, 'array'));
    }
}
function get_subscribed_topic_func($xmlrpc_params)
{
    global $db, $lang, $theme, $plugins, $mybb, $session, $settings, $cache, $time, $mybbgroups;
    $lang->load("usercp");
    $parser = new postParser();
    $input = Tapatalk_Input::filterXmlInput(array('start_num' => Tapatalk_Input::INT, 'last_num' => Tapatalk_Input::INT), $xmlrpc_params);
    if ($mybb->user['uid'] == 0 || $mybb->usergroup['canusercp'] == 0) {
        return tt_no_permission();
    }
    $query = $db->simple_select("forumpermissions", "*", "gid='" . $db->escape_string($mybb->user['usergroup']) . "'");
    while ($permissions = $db->fetch_array($query)) {
        $permissioncache[$permissions['gid']][$permissions['fid']] = $permissions;
    }
    while ($forum = $db->fetch_array($query)) {
        if ($mybb->user['uid'] == 0) {
            if ($forumsread[$forum['fid']]) {
                $forum['lastread'] = $forumsread[$forum['fid']];
            }
        }
        $readforums[$forum['fid']] = $forum['lastread'];
    }
    require_once MYBB_ROOT . "inc/functions_forumlist.php";
    $fpermissions = forum_permissions();
    list($start, $limit) = process_page($input['start_num'], $input['last_num']);
    // Thread visiblity
    $visible = "AND t.visible != 0";
    if (is_moderator() == true) {
        $visible = '';
    }
    // Do Multi Pages
    $query = $db->query("\n\t\tSELECT COUNT(ts.tid) as threads\n\t\tFROM " . TABLE_PREFIX . "threadsubscriptions ts\n\t\tLEFT JOIN " . TABLE_PREFIX . "threads t ON (t.tid = ts.tid)\n\t\tWHERE ts.uid = '" . $mybb->user['uid'] . "' {$visible}\n\t");
    $threadcount = $db->fetch_field($query, "threads");
    // Fetch subscriptions
    $query = $db->query("\n\t\tSELECT s.*, t.*, t.username AS threadusername, u.username, u.username, u.avatar, if({$mybb->user['uid']} > 0 and s.uid = {$mybb->user['uid']}, 1, 0) as subscribed, po.message, f.name as forumname, IF(b.lifted > UNIX_TIMESTAMP() OR b.lifted = 0, 1, 0) as isbanned\n\t\tFROM " . TABLE_PREFIX . "threadsubscriptions s\n\t\tLEFT JOIN " . TABLE_PREFIX . "threads t ON (s.tid=t.tid)\n\t\tLEFT JOIN " . TABLE_PREFIX . "users u ON (u.uid = t.uid)\n\t\tLEFT JOIN " . TABLE_PREFIX . "banned b ON (b.uid = t.uid)\n\t\tLEFT JOIN " . TABLE_PREFIX . "posts po ON (po.pid = t.firstpost)\n\t\tleft join " . TABLE_PREFIX . "forums f on f.fid = t.fid\n\t\tWHERE s.uid='" . $mybb->user['uid'] . "' {$visible}\n\t\tORDER BY t.lastpost DESC\n\t\tLIMIT {$start}, {$limit}\n\t");
    while ($subscription = $db->fetch_array($query)) {
        $forumpermissions = $fpermissions[$subscription['fid']];
        if ($forumpermissions['canview'] == 0 || $forumpermissions['canviewthreads'] == 0) {
            // Hmm, you don't have permission to view this thread - unsubscribe!
            $del_subscriptions[] = $subscription['tid'];
        } else {
            if ($subscription['tid']) {
                $subscriptions[$subscription['tid']] = $subscription;
            }
        }
    }
    if (is_array($del_subscriptions)) {
        $tids = implode(',', $del_subscriptions);
        if ($tids) {
            $db->delete_query("threadsubscriptions", "tid IN ({$tids}) AND uid='{$mybb->user['uid']}'");
        }
    }
    $topic_list = array();
    if (is_array($subscriptions)) {
        $tids = implode(",", array_keys($subscriptions));
        // Build a forum cache.
        $query = $db->query("\n\t\t\tSELECT f.fid, fr.dateline AS lastread\n\t\t\tFROM " . TABLE_PREFIX . "forums f\n\t\t\tLEFT JOIN " . TABLE_PREFIX . "forumsread fr ON (fr.fid=f.fid AND fr.uid='{$mybb->user['uid']}')\n\t\t\tWHERE f.active != 0\n\t\t\tORDER BY pid, disporder\n\t\t");
        while ($forum = $db->fetch_array($query)) {
            if ($mybb->user['uid'] == 0) {
                if ($forumsread[$forum['fid']]) {
                    $forum['lastread'] = $forumsread[$forum['fid']];
                }
            }
            $readforums[$forum['fid']] = $forum['lastread'];
        }
        // Read threads
        if ($mybb->settings['threadreadcut'] > 0) {
            $query = $db->simple_select("threadsread", "*", "uid='{$mybb->user['uid']}' AND tid IN ({$tids})");
            while ($readthread = $db->fetch_array($query)) {
                $subscriptions[$readthread['tid']]['lastread'] = $readthread['dateline'];
            }
        }
        // Now we can build our subscription list
        foreach ($subscriptions as $thread) {
            $bgcolor = alt_trow();
            $folder = '';
            $prefix = '';
            // If this thread has a prefix, insert a space between prefix and subject
            if ($thread['prefix'] != 0) {
                $thread['threadprefix'] .= '&nbsp;';
            }
            // Sanitize
            $thread['subject'] = $parser->parse_badwords($thread['subject']);
            $gotounread = '';
            $isnew = 0;
            $donenew = 0;
            $lastread = 0;
            $unreadpost = 0;
            if ($mybb->settings['threadreadcut'] > 0 && $mybb->user['uid']) {
                $forum_read = $readforums[$thread['fid']];
                $read_cutoff = TIME_NOW - $mybb->settings['threadreadcut'] * 60 * 60 * 24;
                if ($forum_read == 0 || $forum_read < $read_cutoff) {
                    $forum_read = $read_cutoff;
                }
            } else {
                $forum_read = $forumsread[$thread['fid']];
            }
            if ($mybb->settings['threadreadcut'] > 0 && $thread['lastpost'] > $forum_read) {
                $cutoff = TIME_NOW - $mybb->settings['threadreadcut'] * 60 * 60 * 24;
            }
            if ($thread['lastpost'] > $cutoff) {
                if ($thread['lastpost'] > $cutoff) {
                    if ($thread['lastread']) {
                        $lastread = $thread['lastread'];
                    } else {
                        $lastread = 1;
                    }
                }
            }
            if (!$lastread) {
                $readcookie = $threadread = my_get_array_cookie("threadread", $thread['tid']);
                if ($readcookie > $forum_read) {
                    $lastread = $readcookie;
                } else {
                    $lastread = $forum_read;
                }
            }
            if ($thread['lastpost'] > $lastread && $lastread) {
                $unreadpost = 1;
            }
            $topic_list[] = new xmlrpcval(array('forum_id' => new xmlrpcval($thread['fid'], 'string'), 'forum_name' => new xmlrpcval(basic_clean($thread['forumname']), 'base64'), 'topic_id' => new xmlrpcval($thread['tid'], 'string'), 'topic_title' => new xmlrpcval($thread['subject'], 'base64'), 'topic_author_id' => new xmlrpcval($thread['uid'], 'string'), 'post_author_name' => new xmlrpcval($thread['username'], 'base64'), 'can_subscribe' => new xmlrpcval(true, 'boolean'), 'is_subscribed' => new xmlrpcval((bool) $thread['subscribed'], 'boolean'), 'is_closed' => new xmlrpcval((bool) $thread['closed'], 'boolean'), 'short_content' => new xmlrpcval(process_short_content($thread['message'], $parser), 'base64'), 'icon_url' => new xmlrpcval(absolute_url($thread['avatar']), 'string'), 'post_time' => new xmlrpcval(mobiquo_iso8601_encode($thread['lastpost']), 'dateTime.iso8601'), 'reply_number' => new xmlrpcval($thread['replies'], 'int'), 'view_number' => new xmlrpcval($thread['views'], 'int'), 'new_post' => new xmlrpcval($unreadpost, 'boolean'), 'can_delete' => new xmlrpcval(is_moderator($thread['fid'], "candeleteposts"), 'boolean'), 'can_close' => new xmlrpcval(is_moderator($thread['fid'], "canopenclosethreads"), 'boolean'), 'can_approve' => new xmlrpcval(is_moderator($thread['fid'], "canopenclosethreads"), 'boolean'), 'can_stick' => new xmlrpcval(is_moderator($thread['fid'], "canmanagethreads"), 'boolean'), 'can_merge' => new xmlrpcval(is_moderator($thread['fid'], "canmanagethreads"), 'boolean'), 'can_merge_post' => new xmlrpcval(is_moderator($thread['fid'], "canmanagethreads"), 'boolean'), 'can_move' => new xmlrpcval(is_moderator($thread['fid'], "canmovetononmodforum"), 'boolean'), 'can_ban' => new xmlrpcval($mybb->usergroup['canmodcp'] == 1, 'boolean'), 'can_rename' => new xmlrpcval(false, 'boolean'), 'is_ban' => new xmlrpcval($thread['isbanned'], 'boolean'), 'is_sticky' => new xmlrpcval($thread['sticky'], 'boolean'), 'is_approved' => new xmlrpcval(!!$thread['visible'], 'boolean'), 'is_deleted' => new xmlrpcval(false, 'boolean')), 'struct');
        }
    }
    $result = new xmlrpcval(array('total_topic_num' => new xmlrpcval($threadcount, 'int'), 'topics' => new xmlrpcval($topic_list, 'array')), 'struct');
    return new xmlrpcresp($result);
}
示例#12
0
function get_recommended_user_func()
{
    global $context, $smcFunc, $user_info, $profile, $user_profile, $settings, $scripturl;
    $user_id = $user_info['id'];
    if (!empty($user_id)) {
        $return_user_lists = array();
        $total = 0;
        $user_lists = $context['recommend'];
        $start = $_REQUEST['start'];
        $end = $_REQUEST['end'];
        $return_user_lists = array();
        if (isset($user_lists[$user_id])) {
            unset($user_lists[$user_id]);
        }
        if (!empty($user_lists)) {
            if (isset($_REQUEST['mode']) && $_REQUEST['mode'] == 2) {
                $check_users = array_keys($user_lists);
                $valid_users_result = $smcFunc['db_query']('', '
                    SELECT *
                    FROM {db_prefix}tapatalk_users 
                    WHERE userid IN ({array_int:check_users})', array('check_users' => $check_users));
                while ($tapausers = $smcFunc['db_fetch_assoc']($valid_users_result)) {
                    unset($user_lists[$tapausers['userid']]);
                }
                if ($is_tapa_user) {
                    continue;
                }
            }
            $total = count($user_lists);
            arsort($user_lists);
            $num_track = 0;
            foreach ($user_lists as $uid => $score) {
                if ($num_track > $start - 1 && $num_track < $end) {
                    loadMemberData($uid);
                    $profile = $user_profile[$uid];
                    if (!empty($settings['show_user_images']) && empty($profile['options']['show_no_avatars'])) {
                        $avatar = $profile['avatar'] == '' ? $profile['id_attach'] > 0 ? empty($profile['attachment_type']) ? $scripturl . '?action=dlattach;attach=' . $profile['id_attach'] . ';type=avatar' : $modSettings['custom_avatar_url'] . '/' . $profile['filename'] : '' : (stristr($profile['avatar'], 'http://') ? $profile['avatar'] : $modSettings['avatar_url'] . '/' . $profile['avatar']);
                    } else {
                        $avatar = '';
                    }
                    if (!empty($profile)) {
                        $return_user_lists[] = new xmlrpcval(array('username' => new xmlrpcval(basic_clean($user_profile[$uid]['member_name']), 'base64'), 'user_id' => new xmlrpcval($user_profile[$uid]['id_member'], 'string'), 'icon_url' => new xmlrpcval($avatar, 'string')), 'struct');
                    }
                    $num_track++;
                }
            }
        }
    }
    $suggested_users = new xmlrpcval(array('total' => new xmlrpcval($total, 'int'), 'list' => new xmlrpcval($return_user_lists, 'array')), 'struct');
    return new xmlrpcresp($suggested_users);
}
示例#13
0
function get_forum_func($xmlrpc_params)
{
    global $db, $auth, $user, $config, $mobiquo_config, $phpbb_home;
    $params = php_xmlrpc_decode($xmlrpc_params);
    $return_description = isset($params[0]) ? $params[0] : false;
    if (isset($params[1])) {
        $fid = intval($params[1]);
        $forum_filter = " WHERE f.parent_id = '{$fid}'";
        $root_forum_id = $fid;
    } else {
        $forum_filter = '';
        $root_forum_id = 0;
    }
    $user_watch_array = array();
    if ($user->data['is_registered']) {
        $sql = "SELECT notify_status,forum_id FROM " . FORUMS_WATCH_TABLE . " WHERE user_id = '" . $user->data['user_id'] . "'";
        $result_watch = $db->sql_query($sql);
        while ($row_watch = $db->sql_fetchrow($result_watch)) {
            if (isset($row_watch['notify_status']) && !is_null($row_watch['notify_status']) && $row_watch['notify_status'] !== '') {
                $user_watch_array[] = $row_watch['forum_id'];
            }
        }
    }
    $forum_rows = array();
    $forum_rows[$root_forum_id] = array('forum_id' => $root_forum_id, 'parent_id' => -1, 'child' => array());
    $forum_hide_forum_arr = !empty($mobiquo_config['hide_forum_id']) ? $mobiquo_config['hide_forum_id'] : array();
    $sql = 'SELECT f.*  FROM ' . FORUMS_TABLE . ' f ' . $forum_filter . '
            ORDER BY f.left_id ASC';
    $result = $db->sql_query($sql, 600);
    while ($row = $db->sql_fetchrow($result)) {
        $forum_id = $row['forum_id'];
        if ($row['forum_type'] == FORUM_CAT && $row['left_id'] + 1 == $row['right_id']) {
            // Non-postable forum with no subforums, don't display
            continue;
        }
        if (in_array($row['forum_id'], $forum_hide_forum_arr)) {
            continue;
        } elseif (in_array($row['parent_id'], $forum_hide_forum_arr)) {
            array_push($forum_hide_forum_arr, $row['forum_id']);
            continue;
        }
        // Skip branch
        if (isset($right_id)) {
            if ($row['left_id'] < $right_id) {
                continue;
            }
            unset($right_id);
        }
        if (!$auth->acl_get('f_list', $forum_id) || isset($mobiquo_config['hide_forum_id']) && in_array($forum_id, $mobiquo_config['hide_forum_id'])) {
            // if the user does not have permissions to list this forum, skip everything until next branch
            $right_id = $row['right_id'];
            continue;
        }
        $row['unread_count'] = 0;
        if ($user->data['is_registered'] && ($config['email_enable'] || $config['jab_enable']) && $config['allow_forum_notify'] && $row['forum_type'] == FORUM_POST && $auth->acl_get('f_subscribe', $forum_id)) {
            $row['can_subscribe'] = true;
            $row['is_subscribed'] = in_array($row['forum_id'], $user_watch_array) ? true : false;
        } else {
            $row['can_subscribe'] = false;
            $row['is_subscribed'] = false;
        }
        $forum_rows[$forum_id] = $row;
    }
    $db->sql_freeresult($result);
    $fids = array(-1);
    foreach ($forum_rows as $id => $value) {
        if (!in_array($value['parent_id'], $fids)) {
            unset($forum_rows[$id]);
        } else {
            if ($value['left_id'] > $value['right_id']) {
                unset($forum_rows[$id]);
            } else {
                $fids[] = $id;
            }
        }
    }
    while (empty($forum_rows[$root_forum_id]['child']) && count($forum_rows) > 1) {
        $current_parent_id = -1;
        $leaves_forum = array();
        foreach ($forum_rows as $row) {
            $row_parent_id = $row['parent_id'];
            if ($row_parent_id != $current_parent_id) {
                if (isset($leaves_forum[$row_parent_id])) {
                    $leaves_forum[$row_parent_id] = array();
                } else {
                    if (isset($leaves_forum[$forum_rows[$row_parent_id]['parent_id']])) {
                        $leaves_forum[$forum_rows[$row_parent_id]['parent_id']] = array();
                    }
                    $leaves_forum[$row_parent_id][] = $row['forum_id'];
                }
                $current_parent_id = $row_parent_id;
            } else {
                if ($row_parent_id == $current_parent_id) {
                    if (!empty($leaves_forum[$row_parent_id])) {
                        $leaves_forum[$row_parent_id][] = $row['forum_id'];
                    }
                }
            }
        }
        foreach ($leaves_forum as $node_forum_id => $leaves) {
            foreach ($leaves as $forum_id) {
                $forum =& $forum_rows[$forum_id];
                if (function_exists('get_unread_topics')) {
                    $unread_count = count(get_unread_topics(false, "AND t.forum_id = {$forum_id}"));
                } else {
                    $unread_count = count(tt_get_unread_topics(false, "AND t.forum_id = {$forum_id}"));
                }
                $forum['unread_count'] += $unread_count;
                if ($forum['unread_count']) {
                    $forum_rows[$forum['parent_id']]['unread_count'] += $forum['unread_count'];
                }
                $forum_type = $forum['forum_link'] ? 'link' : ($forum['forum_type'] != FORUM_POST ? 'category' : 'forum');
                if ($logo_icon_name = tp_get_forum_icon($forum_id, $forum_type, $forum['forum_status'], $forum['unread_count'])) {
                    $logo_url = $phpbb_home . $config['tapatalkdir'] . '/forum_icons/' . $logo_icon_name;
                } else {
                    if ($forum['forum_image']) {
                        if (preg_match('#^https?://#i', $forum['forum_image'])) {
                            $logo_url = $forum['forum_image'];
                        } else {
                            $logo_url = $phpbb_home . $forum['forum_image'];
                        }
                    } else {
                        $logo_url = '';
                    }
                }
                $xmlrpc_forum = array('forum_id' => new xmlrpcval($forum_id), 'forum_name' => new xmlrpcval(basic_clean($forum['forum_name']), 'base64'), 'parent_id' => new xmlrpcval($node_forum_id), 'logo_url' => new xmlrpcval($logo_url), 'url' => new xmlrpcval($forum['forum_link']));
                if ($forum['unread_count']) {
                    $xmlrpc_forum['unread_count'] = new xmlrpcval($forum['unread_count'], 'int');
                }
                if ($forum['unread_count']) {
                    $xmlrpc_forum['new_post'] = new xmlrpcval(true, 'boolean');
                }
                if ($forum['forum_password']) {
                    $xmlrpc_forum['is_protected'] = new xmlrpcval(true, 'boolean');
                }
                if (!empty($forum['can_subscribe'])) {
                    $xmlrpc_forum['can_subscribe'] = new xmlrpcval(true, 'boolean');
                } else {
                    $xmlrpc_forum['can_subscribe'] = new xmlrpcval(false, 'boolean');
                }
                if (!empty($forum['is_subscribed'])) {
                    $xmlrpc_forum['is_subscribed'] = new xmlrpcval(true, 'boolean');
                } else {
                    $xmlrpc_forum['is_subscribed'] = new xmlrpcval(false, 'boolean');
                }
                if ($forum['forum_type'] != FORUM_POST) {
                    $xmlrpc_forum['sub_only'] = new xmlrpcval(true, 'boolean');
                }
                if ($return_description) {
                    $description = smiley_text($forum['forum_desc'], true);
                    $description = generate_text_for_display($description, $forum['forum_desc_uid'], $forum['forum_desc_bitfield'], $forum['forum_desc_options']);
                    $description = preg_replace('/<br *?\\/?>/i', "\n", $description);
                    $xmlrpc_forum['description'] = new xmlrpcval(basic_clean($description), 'base64');
                }
                if (isset($forum['child'])) {
                    $xmlrpc_forum['child'] = new xmlrpcval($forum['child'], 'array');
                }
                $forum_rows[$node_forum_id]['child'][] = new xmlrpcval($xmlrpc_forum, 'struct');
                unset($forum_rows[$forum_id]);
            }
        }
    }
    $response = new xmlrpcval($forum_rows[$root_forum_id]['child'], 'array');
    return new xmlrpcresp($response);
}
示例#14
0
function m_get_moderate_post_func($xmlrpc_params)
{
    global $input, $post, $thread, $forum, $pid, $tid, $fid, $modlogdata, $db, $lang, $theme, $plugins, $mybb, $session, $settings, $cache, $time, $mybbgroups, $moderation, $parser;
    $input = Tapatalk_Input::filterXmlInput(array('start_num' => Tapatalk_Input::INT, 'last_num' => Tapatalk_Input::INT), $xmlrpc_params);
    mod_setup();
    list($start, $limit) = process_page($input['start_num'], $input['last_num']);
    // Load global language phrases
    $lang->load("modcp");
    if ($mybb->user['uid'] == 0 || $mybb->usergroup['canmodcp'] != 1) {
        return tt_no_permission();
    }
    $errors = '';
    // SQL for fetching items only related to forums this user moderates
    $moderated_forums = array();
    if ($mybb->usergroup['issupermod'] != 1) {
        $query = $db->simple_select("moderators", "*", "id='{$mybb->user['uid']}' AND isgroup = '0'");
        while ($forum = $db->fetch_array($query)) {
            $flist .= ",'{$forum['fid']}'";
            $children = get_child_list($forum['fid']);
            if (!empty($children)) {
                $flist .= ",'" . implode("','", $children) . "'";
            }
            $moderated_forums[] = $forum['fid'];
        }
        if ($flist) {
            $tflist = " AND t.fid IN (0{$flist})";
            $flist = " AND fid IN (0{$flist})";
        }
    } else {
        $flist = $tflist = '';
    }
    $forum_cache = $cache->read("forums");
    $query = $db->query("\n        SELECT COUNT(pid) AS unapprovedposts\n        FROM  " . TABLE_PREFIX . "posts p\n        LEFT JOIN " . TABLE_PREFIX . "threads t ON (t.tid=p.tid)\n        WHERE p.visible='0' {$tflist} AND t.firstpost != p.pid\n    ");
    $unapproved_posts = $db->fetch_field($query, "unapprovedposts");
    $query = $db->query("\n        SELECT p.pid, p.subject, p.message, t.subject AS threadsubject, t.tid, u.username, p.uid, t.fid, p.dateline, u.avatar, t.views, t.replies, IF(b.lifted > UNIX_TIMESTAMP() OR b.lifted = 0, 1, 0) as isbanned\n        FROM  " . TABLE_PREFIX . "posts p\n        LEFT JOIN " . TABLE_PREFIX . "threads t ON (t.tid=p.tid)\n        LEFT JOIN " . TABLE_PREFIX . "users u ON (u.uid=p.uid)\n        LEFT JOIN " . TABLE_PREFIX . "banned b ON (b.uid = p.uid)\n        left join " . TABLE_PREFIX . "forums f on f.fid = t.fid\n        WHERE p.visible='0' {$tflist} AND t.firstpost != p.pid\n        ORDER BY p.dateline DESC\n        LIMIT {$start}, {$limit}\n    ");
    $forumcache = $cache->read("forums");
    $post_list = array();
    while ($post = $db->fetch_array($query)) {
        $post['threadsubject'] = $parser->parse_badwords($post['threadsubject']);
        $forumpermissions = forum_permissions($post['fid']);
        $can_delete = 0;
        if ($mybb->user['uid'] == $post['uid']) {
            if ($forumpermissions['candeletethreads'] == 1 && $post['replies'] == 0) {
                $can_delete = 1;
            } else {
                if ($forumpermissions['candeleteposts'] == 1 && $post['replies'] > 0) {
                    $can_delete = 1;
                }
            }
        }
        $can_delete = (is_moderator($post['fid'], "candeleteposts") || $can_delete == 1) && $mybb->user['uid'] != 0;
        $post_list[] = new xmlrpcval(array('forum_id' => new xmlrpcval($post['fid'], 'string'), 'forum_name' => new xmlrpcval(basic_clean($forumcache[$post['fid']]['name']), 'base64'), 'topic_id' => new xmlrpcval($post['tid'], 'string'), 'topic_title' => new xmlrpcval($post['threadsubject'], 'base64'), 'post_id' => new xmlrpcval($post['pid'], 'string'), 'post_title' => new xmlrpcval($post['subject'], 'base64'), 'post_author_name' => new xmlrpcval($post['username'], 'base64'), 'icon_url' => new xmlrpcval(absolute_url($post['avatar']), 'string'), 'post_time' => new xmlrpcval(mobiquo_iso8601_encode($post['dateline']), 'dateTime.iso8601'), 'short_content' => new xmlrpcval(process_short_content($post['message'], $parser), 'base64'), 'reply_number' => new xmlrpcval($post['replies'], 'int'), 'view_number' => new xmlrpcval($post['views'], 'int'), 'can_delete' => new xmlrpcval($can_delete, 'boolean'), 'can_approve' => new xmlrpcval(is_moderator($post['fid'], "canmanagethreads"), 'boolean'), 'can_move' => new xmlrpcval(is_moderator($post['fid'], "canmovetononmodforum"), 'boolean'), 'can_ban' => new xmlrpcval($mybb->usergroup['canmodcp'] == 1, 'boolean'), 'is_ban' => new xmlrpcval($post['isbanned'], 'boolean'), 'is_approved' => new xmlrpcval(false, 'boolean'), 'is_deleted' => new xmlrpcval(false, 'boolean')), "struct");
    }
    $result = new xmlrpcval(array('total_post_num' => new xmlrpcval($unapproved_posts, 'int'), 'posts' => new xmlrpcval($post_list, 'array')), 'struct');
    return new xmlrpcresp($result);
}
示例#15
0
function reply_post_func($xmlrpc_params)
{
    global $db, $lang, $theme, $plugins, $mybb, $session, $settings, $cache, $time, $mybbgroups, $tid, $pid, $visible, $thread, $post;
    $input = Tapatalk_Input::filterXmlInput(array('forum_id' => Tapatalk_Input::INT, 'topic_id' => Tapatalk_Input::INT, 'subject' => Tapatalk_Input::STRING, 'text_body' => Tapatalk_Input::STRING, 'attachment_id_array' => Tapatalk_Input::RAW, 'group_id' => Tapatalk_Input::STRING, 'return_html' => Tapatalk_Input::INT), $xmlrpc_params);
    $lang->load("newreply");
    $parser = new Tapatalk_Parser();
    $tid = $input['topic_id'];
    $options = array("limit" => 1);
    $query = $db->simple_select("threads", "*", "tid='" . $tid . "'");
    if ($db->num_rows($query) == 0) {
        return xmlrespfalse($lang->error_invalidthread);
    }
    $thread = $db->fetch_array($query);
    $fid = $thread['fid'];
    // Get forum info
    $forum = get_forum($fid);
    if (!$forum) {
        return xmlrespfalse($lang->error_invalidforum);
    }
    $forumpermissions = forum_permissions($fid);
    if ($thread['visible'] == 0 && !is_moderator($fid) || $thread['visible'] < 0) {
        return xmlrespfalse($lang->error_invalidthread);
    }
    if ($forum['open'] == 0 || $forum['type'] != "f") {
        return xmlrespfalse($lang->error_closedinvalidforum);
    }
    if ($mybb->user['uid'] < 1 || $forumpermissions['canview'] == 0 || $forumpermissions['canpostreplys'] == 0 || $mybb->user['suspendposting'] == 1) {
        return tt_no_permission();
    }
    if ($forumpermissions['canonlyviewthreads'] == 1 && $thread['uid'] != $mybb->user['uid']) {
        return tt_no_permission();
    }
    tt_check_forum_password($forum['fid']);
    // Check to see if the thread is closed, and if the user is a mod.
    if (!is_moderator($fid, "caneditposts")) {
        if ($thread['closed'] == 1) {
            return xmlrespfalse($lang->redirect_threadclosed);
        }
    }
    // Is the currently logged in user a moderator of this forum?
    if (is_moderator($fid)) {
        $ismod = true;
    } else {
        $ismod = false;
    }
    if (!empty($input['group_id'])) {
        $posthash = $input['group_id'];
    } else {
        $posthash = md5($thread['tid'] . $mybb->user['uid'] . random_str());
    }
    if ($mybb->settings['maxposts'] > 0 && $mybb->usergroup['cancp'] != 1) {
        $daycut = TIME_NOW - 60 * 60 * 24;
        $query = $db->simple_select("posts", "COUNT(*) AS posts_today", "uid='{$mybb->user['uid']}' AND visible='1' AND dateline>{$daycut}");
        $post_count = $db->fetch_field($query, "posts_today");
        if ($post_count >= $mybb->settings['maxposts']) {
            $lang->error_maxposts = $lang->sprintf($lang->error_maxposts, $mybb->settings['maxposts']);
            return xmlrespfalse($lang->error_maxposts);
        }
    }
    $username = $mybb->user['username'];
    $uid = $mybb->user['uid'];
    $user_check = "p.uid='{$uid}'";
    if (version_compare($mybb->version, '1.8.0', '<')) {
        $query = $db->simple_select("posts p", "p.pid, p.visible", "{$user_check} AND p.tid='{$thread['tid']}' AND p.subject='" . $db->escape_string($mybb->input['subject']) . "' AND p.message='" . $db->escape_string($mybb->input['message']) . "' AND p.posthash='" . $db->escape_string($mybb->input['posthash']) . "' AND p.visible != '-2'");
    } else {
        $query = $db->simple_select("posts p", "p.pid, p.visible", "{$user_check} AND p.tid='{$thread['tid']}' AND p.subject='" . $db->escape_string($mybb->get_input('subject')) . "' AND p.message='" . $db->escape_string($mybb->get_input('message')) . "' AND p.visible != '-2' AND p.dateline>" . (TIME_NOW - 600));
    }
    $duplicate_check = $db->fetch_field($query, "pid");
    if ($duplicate_check) {
        return xmlrespfalse($lang->error_post_already_submitted);
    }
    require_once MYBB_ROOT . "inc/datahandlers/post.php";
    $posthandler = new PostDataHandler("insert");
    $post = array("tid" => $input['topic_id'], "replyto" => 0, "fid" => $thread['fid'], "subject" => $input['subject'], "icon" => 0, "uid" => $uid, "username" => $username, "message" => $input['text_body'], "ipaddress" => get_ip(), "posthash" => $posthash);
    if ($mybb->input['pid']) {
        $post['pid'] = $mybb->input['pid'];
    }
    $post['savedraft'] = 0;
    // Set up the post options from the input.
    $post['options'] = array("signature" => 1, "subscriptionmethod" => $mybb->user['subscriptionmethod'] == 0 ? '' : $mybb->user['subscriptionmethod'], "disablesmilies" => 0);
    $post['modoptions']['stickthread'] = $thread['sticky'];
    $post['modoptions']['closethread'] = $thread['closed'];
    $posthandler->set_data($post);
    // Now let the post handler do all the hard work.
    $valid_post = $posthandler->validate_post();
    $post_errors = array();
    // Fetch friendly error messages if this is an invalid post
    if (!$valid_post) {
        $post_errors = $posthandler->get_friendly_errors();
    }
    // Mark thread as read
    require_once MYBB_ROOT . "inc/functions_indicators.php";
    mark_thread_read($tid, $fid);
    // One or more errors returned, fetch error list and throw to newreply page
    if (count($post_errors) > 0) {
        return xmlrespfalse(implode(" :: ", $post_errors));
    } else {
        $postinfo = $posthandler->insert_post();
        $pid = $postinfo['pid'];
        $visible = $postinfo['visible'];
        tapatalk_push_reply();
        tapatalk_push_quote();
        tapatalk_push_tag();
        // Deciding the fate
        if ($visible == -2) {
            $state = 1;
        } elseif ($visible == 1) {
            $state = 0;
        } else {
            $state = 1;
        }
    }
    $pid = intval($pid);
    if (!empty($input['group_id_esc'])) {
        $db->update_query("attachments", array("pid" => $pid), "posthash='{$input['group_id_esc']}'");
    }
    // update thread attachment account
    if (count($input['attachment_id_array']) > 0) {
        update_thread_counters($tid, array("attachmentcount" => "+" . count($input['attachment_id_array'])));
    }
    $post = get_post($pid);
    $parser_options = array();
    $parser_options['allow_html'] = false;
    $parser_options['allow_mycode'] = true;
    $parser_options['allow_smilies'] = false;
    $parser_options['allow_imgcode'] = true;
    $parser_options['allow_videocode'] = true;
    $parser_options['nl2br'] = (bool) $input['return_html'];
    $parser_options['filter_badwords'] = 1;
    if (!$post['username']) {
        $post['username'] = $lang->guest;
    }
    if ($post['userusername']) {
        $parser_options['me_username'] = $post['userusername'];
    } else {
        $parser_options['me_username'] = $post['username'];
    }
    $post['message'] = post_bbcode_clean($post['message']);
    $post['message'] = $parser->parse_message($post['message'], $parser_options);
    global $attachcache;
    $attachcache = array();
    if ($thread['attachmentcount'] > 0) {
        // Now lets fetch all of the attachments for these posts.
        $query = $db->simple_select("attachments", "*", "pid='{$pid}'");
        while ($attachment = $db->fetch_array($query)) {
            $attachcache[$attachment['pid']][$attachment['aid']] = $attachment;
        }
    }
    $attachment_list = process_post_attachments($post['pid'], $post);
    $can_delete = 0;
    if ($mybb->user['uid'] == $post['uid']) {
        if ($forumpermissions['candeletethreads'] == 1 && $postcounter == 1) {
            $can_delete = 1;
        } else {
            if ($forumpermissions['candeleteposts'] == 1 && $postcounter != 1) {
                $can_delete = 1;
            }
        }
    }
    $can_delete = (is_moderator($fid, "candeleteposts") || $can_delete == 1) && $mybb->user['uid'] != 0;
    $result = new xmlrpcval(array('result' => new xmlrpcval(true, 'boolean'), 'result_text' => new xmlrpcval('', 'base64'), 'post_id' => new xmlrpcval($postinfo['pid'], 'string'), 'state' => new xmlrpcval($state, 'int'), 'post_author_id' => new xmlrpcval($mybb->user['uid'], 'string'), 'post_author_name' => new xmlrpcval(basic_clean($mybb->user['username']), 'base64'), 'icon_url' => new xmlrpcval(absolute_url($mybb->user['avatar']), 'string'), 'post_content' => new xmlrpcval(process_post($post['message'], $input['return_html']), 'base64'), 'can_edit' => new xmlrpcval(is_moderator($fid, "caneditposts") || $thread['closed'] == 0 && $forumpermissions['caneditposts'] == 1, 'boolean'), 'can_delete' => new xmlrpcval($can_delete, 'boolean'), 'post_time' => new xmlrpcval(mobiquo_iso8601_encode(TIME_NOW), 'dateTime.iso8601'), 'timestamp' => new xmlrpcval(TIME_NOW, 'string'), 'attachments' => new xmlrpcval($attachment_list, 'array')), 'struct');
    return new xmlrpcresp($result);
}
示例#16
0
function get_message_func($xmlrpc_params)
{
    global $db, $lang, $theme, $plugins, $mybb, $session, $settings, $cache, $time, $mybbgroups;
    $input = Tapatalk_Input::filterXmlInput(array('message_id' => Tapatalk_Input::INT, 'box_id' => Tapatalk_Input::INT, 'return_html' => Tapatalk_Input::INT), $xmlrpc_params);
    $lang->load("private");
    $parser = new postParser();
    if ($mybb->settings['enablepms'] == 0) {
        return xmlrespfalse($lang->pms_disabled);
    }
    if ($mybb->user['uid'] == '/' || $mybb->user['uid'] == 0 || $mybb->usergroup['canusepms'] == 0) {
        return tt_no_permission();
    }
    if (!$mybb->user['pmfolders']) {
        $mybb->user['pmfolders'] = "1**\$%%\$2**\$%%\$3**\$%%\$4**";
        $sql_array = array("pmfolders" => $mybb->user['pmfolders']);
        $db->update_query("users", $sql_array, "uid = " . $mybb->user['uid']);
    }
    $rand = my_rand(0, 9);
    if ($rand == 5) {
        update_pm_count();
    }
    $foldernames = array();
    $foldersexploded = explode("\$%%\$", $mybb->user['pmfolders']);
    foreach ($foldersexploded as $key => $folders) {
        $folderinfo = explode("**", $folders, 2);
        $folderinfo[1] = get_pm_folder_name($folderinfo[0], $folderinfo[1]);
        $foldernames[$folderinfo[0]] = $folderinfo[1];
    }
    $pmid = $input['message_id'];
    $query = $db->query("\n\t\tSELECT pm.*, u.*, f.*, g.title AS grouptitle, g.usertitle AS groupusertitle, g.stars AS groupstars, g.starimage AS groupstarimage, g.image AS groupimage, g.namestyle\n\t\tFROM " . TABLE_PREFIX . "privatemessages pm\n\t\tLEFT JOIN " . TABLE_PREFIX . "users u ON (u.uid=pm.fromid)\n\t\tLEFT JOIN " . TABLE_PREFIX . "userfields f ON (f.ufid=u.uid)\n\t\tLEFT JOIN " . TABLE_PREFIX . "usergroups g ON (g.gid=u.usergroup)\n\t\tWHERE pm.pmid='{$pmid}' AND pm.uid='" . $mybb->user['uid'] . "'\n\t");
    $pm = $db->fetch_array($query);
    if ($pm['folder'] == 3) {
        return xmlrespfalse("Draft PMs are not supported by Tapatalk");
    }
    if (!$pm['pmid']) {
        return xmlrespfalse($lang->error_invalidpm);
    }
    $parser = new Tapatalk_Parser();
    $parser_options = array();
    $parser_options['allow_html'] = false;
    $parser_options['allow_mycode'] = true;
    $parser_options['allow_smilies'] = false;
    $parser_options['allow_imgcode'] = true;
    $parser_options['allow_videocode'] = true;
    $parser_options['nl2br'] = (bool) $input['return_html'];
    $parser_options['filter_badwords'] = 1;
    $pm['message'] = post_bbcode_clean($pm['message']);
    $pm['message'] = $parser->parse_message($pm['message'], $parser_options);
    if ($pm['receipt'] == 1) {
        if ($mybb->usergroup['cantrackpms'] == 1 && $mybb->usergroup['candenypmreceipts'] == 1 && $mybb->input['denyreceipt'] == 1) {
            $receiptadd = 0;
        } else {
            $receiptadd = 2;
        }
    }
    if ($pm['status'] == 0) {
        $time = TIME_NOW;
        $updatearray = array('status' => 1, 'readtime' => $time);
        if (isset($receiptadd)) {
            $updatearray['receipt'] = $receiptadd;
        }
        $db->update_query('privatemessages', $updatearray, "pmid='{$pmid}'");
        // Update the unread count - it has now changed.
        update_pm_count($mybb->user['uid'], 6);
        // Update PM notice value if this is our last unread PM
        if ($mybb->user['unreadpms'] - 1 <= 0 && $mybb->user['pmnotice'] == 2) {
            $updated_user = array("pmnotice" => 1);
            $db->update_query("users", $updated_user, "uid='{$mybb->user['uid']}'");
        }
    }
    $pm['subject'] = $parser->parse_badwords($pm['subject']);
    if ($pm['fromid'] == 0) {
        $pm['username'] = $lang->mybb_engine;
    }
    if (!$pm['username']) {
        $pm['username'] = $lang->na;
    }
    // Fetch the recipients for this message
    $pm['recipients'] = @unserialize($pm['recipients']);
    if (is_array($pm['recipients']['to'])) {
        $uid_sql = implode(',', $pm['recipients']['to']);
        foreach ($pm['recipients']['to'] as $uid) {
            $user = get_user($uid);
            $msg_to_list[] = new xmlrpcval(array('user_id' => new xmlrpcval($user['uid'], 'string'), 'username' => new xmlrpcval(basic_clean($user['username']), 'base64'), 'user_type' => check_return_user_type($user['username'])), 'struct');
            if (($pm['folder'] == 2 or $pm['folder'] == 3) && !$avatar) {
                $avatar = $user['avatar'];
            }
        }
    } else {
        $user = get_user($pm['toid']);
        $msg_to_list[] = new xmlrpcval(array('user_id' => new xmlrpcval($user['uid'], 'string'), 'username' => new xmlrpcval(basic_clean($user['username']), 'base64'), 'user_type' => check_return_user_type($user['username'])), 'struct');
        if ($pm['folder'] == 2 or $pm['folder'] == 3) {
            $avatar = $user['avatar'];
        }
    }
    $show_bcc = 0;
    // If we have any BCC recipients and this user is an Administrator, add them on to the query
    if (count($pm['recipients']['bcc']) > 0 && $mybb->usergroup['cancp'] == 1) {
        foreach ($pm['recipients']['bcc'] as $uid) {
            $user = get_user($uid);
            $msg_to_list[] = new xmlrpcval(array('user_id' => new xmlrpcval($user['uid'], 'string'), 'username' => new xmlrpcval(basic_clean($user['username']), 'base64'), 'user_type' => check_return_user_type($user['username'])), 'struct');
        }
    }
    if (!$avatar) {
        $avatar = $pm['avatar'];
    }
    //$display_user = ($box_id == 'inbox') ? $message['from'] : $msg_to[0];
    $is_online = false;
    $timecut = TIME_NOW - $mybb->settings['wolcutoff'];
    if ($pm['lastactive'] > $timecut && ($pm['invisible'] != 1 || $mybb->usergroup['canviewwolinvis'] == 1) && $pm['lastvisit'] != $pm['lastactive']) {
        $is_online = true;
    }
    $result = new xmlrpcval(array('result' => new xmlrpcval(true, 'boolean'), 'result_text' => new xmlrpcval('', 'base64'), 'msg_from' => new xmlrpcval($pm['username'], 'base64'), 'msg_from_id' => new xmlrpcval($pm['fromid'], 'string'), 'msg_to' => new xmlrpcval($msg_to_list, 'array'), 'icon_url' => new xmlrpcval(absolute_url($avatar), 'string'), 'sent_date' => new xmlrpcval(mobiquo_iso8601_encode($pm['dateline']), 'dateTime.iso8601'), 'msg_subject' => new xmlrpcval($pm['subject'], 'base64'), 'text_body' => new xmlrpcval(process_post($pm['message'], $input['return_html']), 'base64'), 'is_online' => new xmlrpcval($is_online, 'boolean'), 'allow_smilies' => new xmlrpcval(true, 'boolean')), 'struct');
    return new xmlrpcresp($result);
}
示例#17
0
function processForum($forum)
{
    global $db, $lang, $theme, $plugins, $mybb, $session, $settings, $cache, $time, $mybbgroups, $forumpermissions, $fcache;
    static $private_forums;
    $permissions = $forumpermissions[$forum['fid']];
    $hideinfo = false;
    $showlockicon = 0;
    if ($permissions['canviewthreads'] != 1) {
        $hideinfo = true;
    }
    if ($permissions['canonlyviewownthreads'] == 1) {
        $hideinfo = true;
        // If we only see our own threads, find out if there's a new post in one of them so the lightbulb shows
        if (!is_array($private_forums)) {
            $private_forums = $fids = array();
            foreach ($fcache[$forum['pid']] as $parent_p) {
                foreach ($parent_p as $forum_p) {
                    if ($forumpermissions[$forum_p['fid']]['canonlyviewownthreads']) {
                        $fids[] = $forum_p['fid'];
                    }
                }
            }
            if (!empty($fids)) {
                $fids = implode(',', $fids);
                $query = $db->simple_select("threads", "tid, fid, lastpost", "uid = '{$mybb->user['uid']}' AND fid IN ({$fids})", array("order_by" => "lastpost", "order_dir" => "desc"));
                while ($thread = $db->fetch_array($query)) {
                    if (!$private_forums[$thread['fid']]) {
                        $private_forums[$thread['fid']] = $thread;
                    }
                }
            }
        }
        if ($private_forums[$forum['fid']]['lastpost']) {
            $forum['lastpost'] = $private_forums[$forum['fid']]['lastpost'];
            $lastpost_data = array("lastpost" => $private_forums[$forum['fid']]['lastpost']);
        }
    } else {
        $lastpost_data = array("lastpost" => $forum['lastpost'], "lastpostsubject" => $forum['lastpostsubject'], "lastposter" => $forum['lastposter'], "lastposttid" => $forum['lastposttid'], "lastposteruid" => $forum['lastposteruid']);
    }
    if ($forum['password'] != '' && $mybb->cookies['forumpass'][$forum['fid']] != md5($mybb->user['uid'] . $forum['password'])) {
        $hideinfo = true;
        $showlockicon = 1;
    }
    // If we are hiding information (lastpost) because we aren't authenticated against the password for this forum, remove them
    if ($hideinfo == true) {
        unset($lastpost_data);
    }
    $lightbulb = get_forum_lightbulb($forum, $lastpost_data, $showlockicon);
    $new_post = $lightbulb['folder'] == 'on';
    $is_locked = $forum['open'] == 0;
    $forum_type = $forum['linkto'] ? 'link' : ($forum['type'] == 'c' ? 'category' : 'forum');
    if ($logo_icon_name = tp_get_forum_icon($forum['fid'], $forum_type, $is_locked, $new_post)) {
        $logo_url = $mybb->settings['bburl'] . '/' . $mybb->settings['tapatalk_directory'] . '/forum_icons/' . $logo_icon_name;
    } else {
        if ($forum['forum_image']) {
            if (preg_match('#^https?://#i', $forum['forum_image'])) {
                $logo_url = $forum['forum_image'];
            } else {
                $logo_url = $mybb->settings['bburl'] . '/' . $forum['forum_image'];
            }
        } else {
            $logo_url = '';
        }
    }
    $xmlrpc_forum = new xmlrpcval(array('forum_id' => new xmlrpcval($forum['fid'], 'string'), 'forum_name' => new xmlrpcval(basic_clean($forum['name']), 'base64'), 'description' => new xmlrpcval($forum['description'], 'base64'), 'parent_id' => new xmlrpcval($forum['pid'], 'string'), 'logo_url' => new xmlrpcval($logo_url, 'string'), 'new_post' => new xmlrpcval($new_post, 'boolean'), 'unread_count' => new xmlrpcval($forum['unread_count'], 'int'), 'is_protected' => new xmlrpcval(!empty($forum['password']), 'boolean'), 'url' => new xmlrpcval($forum['linkto'], 'string'), 'sub_only' => new xmlrpcval($forum['type'] == 'c', 'boolean'), 'can_subscribe' => new xmlrpcval($forumpermissions[$forum['fid']]['canviewthreads'] == 1, 'boolean'), 'is_subscribed' => new xmlrpcval(!empty($forum['fsid']), 'boolean')), 'struct');
    return array($xmlrpc_forum, $new_post);
}
示例#18
0
function m_get_report_post_func()
{
    global $template, $auth, $user;
    $posts = array();
    foreach ($template->_tpldata['postrow'] as $postinfo) {
        $posts[] = $postinfo['POST_ID'];
    }
    $posts = get_post_data($posts);
    $post_list = array();
    foreach ($template->_tpldata['postrow'] as $postinfo) {
        $post = $posts[$postinfo['POST_ID']];
        if (empty($post['forum_id'])) {
            $user->setup('viewforum');
            $post['forum_id'] = 0;
            $post['forum_name'] = $user->lang['ANNOUNCEMENTS'];
        }
        $post_list[] = new xmlrpcval(array('forum_id' => new xmlrpcval($post['forum_id']), 'forum_name' => new xmlrpcval(basic_clean($post['forum_name']), 'base64'), 'topic_id' => new xmlrpcval($post['topic_id']), 'topic_title' => new xmlrpcval(basic_clean($post['topic_title']), 'base64'), 'post_id' => new xmlrpcval($post['post_id']), 'post_title' => new xmlrpcval(basic_clean($post['post_subject']), 'base64'), 'post_author_name' => new xmlrpcval(basic_clean($post['username']), 'base64'), 'icon_url' => new xmlrpcval(get_user_avatar_url($post['user_avatar'], $post['user_avatar_type'])), 'post_time' => new xmlrpcval(mobiquo_iso8601_encode($post['post_time']), 'dateTime.iso8601'), 'short_content' => new xmlrpcval(process_short_content($post['post_text']), 'base64'), 'can_delete' => new xmlrpcval($auth->acl_get('m_delete', $forum_id), 'boolean')), 'struct');
    }
    $response = new xmlrpcval(array('total_report_num' => new xmlrpcval($template->_rootref['TOTAL'], 'int'), 'reports' => new xmlrpcval($post_list, 'array')), 'struct');
    return new xmlrpcresp($response);
}
示例#19
0
function tt_login_success()
{
    global $config, $db, $user, $phpbb_root_path, $phpEx, $user_info, $auth, $register;
    header('Set-Cookie: mobiquo_a=0');
    header('Set-Cookie: mobiquo_b=0');
    header('Set-Cookie: mobiquo_c=0');
    $result = $user->session_create($user_info['user_id'], 0, true, 1);
    if ($result) {
        $usergroup_id = array();
        $auth->acl($user->data);
        //add tapatalk_users here,for push service
        if (push_table_exists()) {
            global $table_prefix;
            $sql = "SELECT * FROM " . $table_prefix . "tapatalk_users where userid = '" . $user->data['user_id'] . "'";
            $result = $db->sql_query($sql);
            $userInfo = $db->sql_fetchrow($result);
            $db->sql_freeresult($result);
            $time = time();
            if (empty($userInfo)) {
                $sql_data[$table_prefix . "tapatalk_users"]['sql'] = array('userid' => $user->data['user_id'], 'announcement' => 1, 'pm' => 1, 'subscribe' => 1, 'quote' => 1, 'tag' => 1, 'newtopic' => 1, 'updated' => time());
                $sql = 'INSERT INTO ' . $table_prefix . "tapatalk_users" . ' ' . $db->sql_build_array('INSERT', $sql_data[$table_prefix . "tapatalk_users"]['sql']);
                $db->sql_query($sql);
            }
        }
        // Compatibility with mod NV who was here
        if (file_exists($phpbb_root_path . 'includes/mods/who_was_here.' . $phpEx)) {
            include_once $phpbb_root_path . 'includes/mods/who_was_here.' . $phpEx;
            if (class_exists('phpbb_mods_who_was_here') && method_exists('phpbb_mods_who_was_here', 'update_session')) {
                @phpbb_mods_who_was_here::update_session();
            }
        }
        if ($config['max_attachments'] == 0) {
            $config['max_attachments'] = 100;
        }
        $usergroup_id[] = new xmlrpcval($user->data['group_id']);
        $can_readpm = $config['allow_privmsg'] && $auth->acl_get('u_readpm') && ($user->data['user_allow_pm'] || $auth->acl_gets('a_', 'm_') || $auth->acl_getf_global('m_'));
        $can_sendpm = $config['allow_privmsg'] && $auth->acl_get('u_sendpm') && ($user->data['user_allow_pm'] || $auth->acl_gets('a_', 'm_') || $auth->acl_getf_global('m_'));
        $can_upload = $config['allow_avatar_upload'] && file_exists($phpbb_root_path . $config['avatar_path']) && (function_exists('phpbb_is_writable') ? phpbb_is_writable($phpbb_root_path . $config['avatar_path']) : 1) && $auth->acl_get('u_chgavatar') && (@ini_get('file_uploads') || strtolower(@ini_get('file_uploads')) == 'on') ? true : false;
        $can_search = $auth->acl_get('u_search') && $auth->acl_getf_global('f_search') && $config['load_search'];
        $can_whosonline = $auth->acl_gets('u_viewprofile', 'a_user', 'a_useradd', 'a_userdel');
        $max_filesize = $config['max_filesize'] === '0' || $config['max_filesize'] > 10485760 ? 10485760 : $config['max_filesize'];
        $userPushType = array('pm' => 1, 'newtopic' => 1, 'sub' => 1, 'tag' => 1, 'quote' => 1);
        $push_type = array();
        foreach ($userPushType as $name => $value) {
            $push_type[] = new xmlrpcval(array('name' => new xmlrpcval($name, 'string'), 'value' => new xmlrpcval($value, 'boolean')), 'struct');
        }
        $response = new xmlrpcval(array('result' => new xmlrpcval(true, 'boolean'), 'user_id' => new xmlrpcval($user->data['user_id'], 'string'), 'username' => new xmlrpcval(basic_clean($user->data['username']), 'base64'), 'email' => new xmlrpcval($user->data['user_email'], 'base64'), 'user_type' => check_return_user_type($user->data['username']), 'usergroup_id' => new xmlrpcval($usergroup_id, 'array'), 'ignored_uids' => new xmlrpcval(implode(',', tt_get_ignore_users($user->data['user_id'])), 'string'), 'icon_url' => new xmlrpcval(get_user_avatar_url($user->data['user_avatar'], $user->data['user_avatar_type']), 'string'), 'post_count' => new xmlrpcval($user->data['user_posts'], 'int'), 'can_pm' => new xmlrpcval($can_readpm, 'boolean'), 'can_send_pm' => new xmlrpcval($can_sendpm, 'boolean'), 'can_moderate' => new xmlrpcval($auth->acl_get('m_') || $auth->acl_getf_global('m_'), 'boolean'), 'max_attachment' => new xmlrpcval($config['max_attachments'], 'int'), 'max_png_size' => new xmlrpcval($max_filesize, 'int'), 'max_jpg_size' => new xmlrpcval($max_filesize, 'int'), 'can_search' => new xmlrpcval($can_search, 'boolean'), 'can_whosonline' => new xmlrpcval($can_whosonline, 'boolean'), 'can_upload_avatar' => new xmlrpcval($can_upload, 'boolean'), 'register' => new xmlrpcval($register, "boolean"), 'push_type' => new xmlrpcval($push_type, 'array')), 'struct');
        return new xmlrpcresp($response);
    }
}
示例#20
0
function get_topic_info($fid, $tid)
{
    global $smcFunc, $user_info, $modSettings, $scripturl, $settings;
    static $mobi_permission;
    if (!$tid) {
        return array();
    }
    $perms_action_array = array('mark_notify', 'remove_any', 'remove_own', 'lock_any', 'lock_own', 'make_sticky', 'move_any', 'move_own', 'modify_any', 'modify_own', 'approve_posts');
    foreach ($perms_action_array as $perm) {
        if (!isset($mobi_permission[$fid][$perm])) {
            $mobi_permission[$fid][$perm] = allowedTo($perm, $fid);
        }
    }
    $request = $smcFunc['db_query']('substring', '
        SELECT
            t.id_topic, t.num_replies, t.locked, t.num_views, t.is_sticky, t.id_poll, t.id_previous_board,
            ' . ($user_info['is_guest'] ? '0' : 'IFNULL(lt.id_msg, IFNULL(lmr.id_msg, -1)) + 1') . ' AS new_from,
            ' . ($user_info['is_guest'] ? '0' : 'ln.id_topic') . ' AS is_marked_notify,
            t.id_last_msg, t.approved, t.unapproved_posts, ml.poster_time AS last_poster_time,
            ml.id_msg_modified, ml.subject AS last_subject, ml.icon AS last_icon,
            ml.poster_name AS last_member_name, ml.id_member AS last_id_member,
            IFNULL(meml.real_name, ml.poster_name) AS last_display_name, t.id_first_msg,
            mf.poster_time AS first_poster_time, mf.subject AS first_subject, mf.icon AS first_icon,
            mf.poster_name AS first_member_name, mf.id_member AS first_id_member,
            IFNULL(memf.real_name, mf.poster_name) AS first_display_name, SUBSTRING(ml.body, 1, 500) AS last_body,
            SUBSTRING(mf.body, 1, 500) AS first_body, ml.smileys_enabled AS last_smileys, mf.smileys_enabled AS first_smileys,
            IFNULL(al.id_attach, 0) AS id_attach_last, al.filename as filename_last, al.attachment_type as attachment_type_last, meml.avatar as avatar_last,
            IFNULL(af.id_attach, 0) AS id_attach_first, af.filename as filename_first, af.attachment_type as attachment_type_first, memf.avatar as avatar_first
        FROM {db_prefix}topics AS t
            INNER JOIN {db_prefix}messages AS ml ON (ml.id_msg = t.id_last_msg)
            INNER JOIN {db_prefix}messages AS mf ON (mf.id_msg = t.id_first_msg)
            LEFT JOIN {db_prefix}members AS meml ON (meml.id_member = ml.id_member)
            LEFT JOIN {db_prefix}members AS memf ON (memf.id_member = mf.id_member)
            LEFT JOIN {db_prefix}attachments AS al ON (al.id_member = meml.id_member)
            LEFT JOIN {db_prefix}attachments AS af ON (af.id_member = memf.id_member)' . ($user_info['is_guest'] ? '' : '
            LEFT JOIN {db_prefix}log_topics AS lt ON (lt.id_topic = t.id_topic AND lt.id_member = {int:current_member})
            LEFT JOIN {db_prefix}log_mark_read AS lmr ON (lmr.id_board = {int:current_board} AND lmr.id_member = {int:current_member})
            LEFT JOIN {db_prefix}log_notify AS ln ON (ln.id_topic = t.id_topic AND ln.id_member = {int:current_member})') . '
        WHERE t.id_topic = {int:current_topic}', array('current_board' => intval($fid), 'current_topic' => intval($tid), 'current_member' => $user_info['id']));
    $topic = $smcFunc['db_fetch_assoc']($request);
    $smcFunc['db_free_result']($request);
    if (empty($topic)) {
        return array();
    }
    // Check for notifications on this topic
    $request = $smcFunc['db_query']('', '
        SELECT sent, id_topic
        FROM {db_prefix}log_notify
        WHERE id_topic = {int:current_topic} AND id_member = {int:current_member}
        LIMIT 1', array('current_member' => $user_info['id'], 'current_topic' => $topic['id_topic']));
    $topic['is_marked_notify'] = $smcFunc['db_num_rows']($request) ? true : false;
    $smcFunc['db_free_result']($request);
    $started = $topic['first_id_member'] == $user_info['id'];
    $topic['can_lock'] = $mobi_permission[$fid]['lock_any'] || $started && $mobi_permission[$fid]['lock_own'];
    $topic['can_sticky'] = $mobi_permission[$fid]['make_sticky'] && !empty($modSettings['enableStickyTopics']);
    $topic['can_move'] = $mobi_permission[$fid]['move_any'] || $started && $mobi_permission[$fid]['move_own'];
    $topic['can_modify'] = $mobi_permission[$fid]['modify_any'] || $started && $mobi_permission[$fid]['modify_own'];
    $topic['can_remove'] = $mobi_permission[$fid]['remove_any'] || $started && $mobi_permission[$fid]['remove_own'];
    $topic['can_approve'] = $mobi_permission[$fid]['approve_posts'];
    $topic['can_mark_notify'] = $mobi_permission[$fid]['mark_notify'] && !$user_info['is_guest'];
    $topic['is_sticky'] = !empty($modSettings['enableStickyTopics']) && !empty($topic['is_sticky']);
    $topic['is_locked'] = !empty($topic['locked']);
    $topic['is_approved'] = !empty($topic['approved']);
    $topic['new'] = $topic['new_from'] <= $topic['id_msg_modified'];
    $topic['last_poster_timestamp'] = $topic['last_poster_time'];
    $topic['last_poster_time'] = timeformat($topic['last_poster_time']);
    $topic['first_poster_time'] = timeformat($topic['first_poster_time']);
    if (!empty($settings['message_index_preview'])) {
        // Limit them to 100 characters - do this FIRST because it's a lot of wasted censoring otherwise.
        $topic['first_body'] = basic_clean($topic['first_body'], 200, 1);
        $topic['last_body'] = basic_clean($topic['last_body'], 200, 1);
        // Censor the subject and message preview.
        censorText($topic['first_subject']);
        censorText($topic['first_body']);
        // Don't censor them twice!
        if ($topic['id_first_msg'] == $topic['id_last_msg']) {
            $topic['last_subject'] = $topic['first_subject'];
            $topic['last_body'] = $topic['first_body'];
        } else {
            censorText($topic['last_subject']);
            censorText($topic['last_body']);
        }
    } else {
        $topic['first_body'] = '';
        $topic['last_body'] = '';
        censorText($topic['first_subject']);
        if ($topic['id_first_msg'] == $topic['id_last_msg']) {
            $topic['last_subject'] = $topic['first_subject'];
        } else {
            censorText($topic['last_subject']);
        }
    }
    if (!empty($settings['show_user_images'])) {
        $topic['first_poster_avatar'] = $topic['avatar_first'] == '' ? $topic['id_attach_first'] > 0 ? empty($topic['attachment_type_first']) ? $scripturl . '?action=dlattach;attach=' . $topic['id_attach_first'] . ';type=avatar' : $modSettings['custom_avatar_url'] . '/' . $topic['filename_first'] : '' : (stristr($topic['avatar_first'], 'http://') ? $topic['avatar_first'] : $modSettings['avatar_url'] . '/' . $topic['avatar_first']);
        $topic['last_poster_avatar'] = $topic['avatar_last'] == '' ? $topic['id_attach_last'] > 0 ? empty($topic['attachment_type_last']) ? $scripturl . '?action=dlattach;attach=' . $topic['id_attach_last'] . ';type=avatar' : $modSettings['custom_avatar_url'] . '/' . $topic['filename_last'] : '' : (stristr($topic['avatar_last'], 'http://') ? $topic['avatar_last'] : $modSettings['avatar_url'] . '/' . $topic['avatar_last']);
    }
    $topic['num_views'] = intval($topic['num_views']);
    $topic['num_replies'] = intval($topic['num_replies']);
    return $topic;
}
示例#21
0
function get_announcement_func($xmlrpc_params)
{
    global $db, $lang, $mybb, $position, $plugins, $pids, $groupscache;
    $input = Tapatalk_Input::filterXmlInput(array('topic_id' => Tapatalk_Input::STRING, 'start_num' => Tapatalk_Input::INT, 'last_num' => Tapatalk_Input::INT, 'return_html' => Tapatalk_Input::INT), $xmlrpc_params);
    $parser = new Tapatalk_Parser();
    // Load global language phrases
    $lang->load("announcements");
    $aid = intval($_GET['aid']);
    // Get announcement fid
    $query = $db->simple_select("announcements", "fid", "aid='{$aid}'");
    $announcement = $db->fetch_array($query);
    $plugins->run_hooks("announcements_start");
    if (!$announcement) {
        error($lang->error_invalidannouncement);
    }
    // Get forum info
    $fid = $announcement['fid'];
    if ($fid > 0) {
        $forum = get_forum($fid);
        if (!$forum) {
            error($lang->error_invalidforum);
        }
        // Make navigation
        build_forum_breadcrumb($forum['fid']);
        // Permissions
        $forumpermissions = forum_permissions($forum['fid']);
        if ($forumpermissions['canview'] == 0 || $forumpermissions['canviewthreads'] == 0) {
            error_no_permission();
        }
        // Check if this forum is password protected and we have a valid password
        check_forum_password($forum['fid']);
    }
    add_breadcrumb($lang->nav_announcements);
    $archive_url = build_archive_link("announcement", $aid);
    // Get announcement info
    $time = TIME_NOW;
    $query = $db->query("\n\t\tSELECT u.*, u.username AS userusername, a.*, f.*\n\t\tFROM " . TABLE_PREFIX . "announcements a\n\t\tLEFT JOIN " . TABLE_PREFIX . "users u ON (u.uid=a.uid)\n\t\tLEFT JOIN " . TABLE_PREFIX . "userfields f ON (f.ufid=u.uid)\n\t\tWHERE a.startdate<='{$time}' AND (a.enddate>='{$time}' OR a.enddate='0') AND a.aid='{$aid}'\n\t");
    $announcementarray = $db->fetch_array($query);
    if (!$announcementarray) {
        error($lang->error_invalidannouncement);
    }
    // Gather usergroup data from the cache
    // Field => Array Key
    $data_key = array('title' => 'grouptitle', 'usertitle' => 'groupusertitle', 'stars' => 'groupstars', 'starimage' => 'groupstarimage', 'image' => 'groupimage', 'namestyle' => 'namestyle', 'usereputationsystem' => 'usereputationsystem');
    foreach ($data_key as $field => $key) {
        $announcementarray[$key] = $groupscache[$announcementarray['usergroup']][$field];
    }
    $announcementarray['dateline'] = $announcementarray['startdate'];
    $announcementarray['userusername'] = $announcementarray['username'];
    $announcement = build_postbit($announcementarray, 3);
    $announcementarray['subject'] = $parser->parse_badwords($announcementarray['subject']);
    $lang->forum_announcement = $lang->sprintf($lang->forum_announcement, htmlspecialchars_uni($announcementarray['subject']));
    if ($announcementarray['startdate'] > $mybb->user['lastvisit']) {
        $setcookie = true;
        if (isset($mybb->cookies['mybb']['announcements']) && is_scalar($mybb->cookies['mybb']['announcements'])) {
            $cookie = my_unserialize(stripslashes($mybb->cookies['mybb']['announcements']));
            if (isset($cookie[$announcementarray['aid']])) {
                $setcookie = false;
            }
        }
        if ($setcookie) {
            my_set_array_cookie('announcements', $announcementarray['aid'], $announcementarray['startdate'], -1);
        }
    }
    $user_info = get_user($announcementarray['aid']);
    $icon_url = absolute_url($user_info['avatar']);
    // prepare xmlrpc return
    $xmlrpc_post = new xmlrpcval(array('topic_id' => new xmlrpcval('ann_' . $announcementarray['aid']), 'post_title' => new xmlrpcval(basic_clean($announcementarray['subject']), 'base64'), 'post_content' => new xmlrpcval(process_post($announcementarray['message'], $input['return_html']), 'base64'), 'post_author_id' => new xmlrpcval($announcementarray['uid']), 'post_author_name' => new xmlrpcval(basic_clean($announcementarray['username']), 'base64'), 'user_type' => new xmlrpcval(check_return_user_type($announcementarray['username']), 'base64'), 'icon_url' => new xmlrpcval(absolute_url($icon_url)), 'post_time' => new xmlrpcval(mobiquo_iso8601_encode($announcementarray['dateline']), 'dateTime.iso8601'), 'timestamp' => new xmlrpcval($announcementarray['dateline'], 'string')), 'struct');
    $result = array('total_post_num' => new xmlrpcval(1, 'int'), 'can_reply' => new xmlrpcval(false, 'boolean'), 'can_subscribe' => new xmlrpcval(false, 'boolean'), 'posts' => new xmlrpcval(array($xmlrpc_post), 'array'));
    return new xmlrpcresp(new xmlrpcval($result, 'struct'));
}
示例#22
0
function data_validation(&$data, $validations, $error_handling = "")
{
    /*
    		-----------------------------------------------------------------------------------------------
    		Validations							Syntax							Input Data
    		-----------------------------------------------------------------------------------------------
    		required							|required|						for both arrays and strings
    		optional							|optional|						for both arrays and strings
    		binary (0 or 1)						|binary|						strings
    		is_int								|int|							strings
    		is_email							|email|							strings
    		check restricted words				|check_restricted_words|		strings
    		regexp								|regexp:[a-z]|					strings
    
    		min words							|min_words:x|					strings
    		max words							|max_words:x|					strings
    
    		min value							|min_value:x|					strings
    		max value							|max_value:x|					strings
    
    		min length							|min_length:x|					strings
    		max length							|max_length:x|					strings
    
    		min array count						|min_elements:x|				array
    		max array count						|max_elements:x|				array
    
    		value in							|value_in:x__x__x|				strings
    		value not in						|value_not_in:x__x__x|			strings
    */
    # set if data is an array
    if (is_array($data)) {
        $is_array = true;
    }
    # clean input data
    basic_clean($data);
    # get list of validations to perform
    $validations = array_filter(explode("|", trim($validations)), "remove_empty");
    # reset is_error flag
    $is_error = false;
    # perform validations
    foreach ($validations as $check) {
        if (trim($check) != "") {
            switch (true) {
                case substr($check, 0, 8) == 'optional':
                    if ($is_array && !count($data)) {
                        return true;
                    } else {
                        if (!$is_array && $data == "") {
                            return true;
                        }
                    }
                    # data's optional and not available, so skip all checks
                    break;
                case substr($check, 0, 8) == 'required':
                    if ($is_array && !count($data)) {
                        $is_error = true;
                    } else {
                        if (!$is_array && $data == "") {
                            $is_error = true;
                        }
                    }
                    break;
                case substr($check, 0, 6) == 'binary':
                    if ($data != 0 && $data != 1) {
                        $is_error = true;
                    }
                    break;
                case substr($check, 0, 3) == 'int':
                    if (!eregi("^[0-9-]+\$", $data)) {
                        $is_error = true;
                    }
                    break;
                case substr($check, 0, 5) == 'email':
                    if (!is_email($data)) {
                        $is_error = true;
                    }
                    break;
                case substr($check, 0, 22) == 'check_restricted_words':
                    if (!check_restricted_words($data)) {
                        $is_error = true;
                    }
                    break;
                case substr($check, 0, 6) == 'regexp':
                    if (!eregi(substr($check, 7, strlen($check) - 7), $data)) {
                        $is_error = true;
                    }
                    break;
                case substr($check, 0, 9) == 'min_value':
                    if (!eregi("^[0-9-]+\$", $data) || $data < substr($check, 10, strlen($check) - 10)) {
                        $is_error = true;
                    }
                    break;
                case substr($check, 0, 9) == 'max_value':
                    if (!eregi("^[0-9-]+\$", $data) || $data > substr($check, 10, strlen($check) - 10)) {
                        $is_error = true;
                    }
                    break;
                case substr($check, 0, 9) == 'min_words':
                    if (count(array_filter(explode(" ", $data), "remove_empty")) < substr($check, 10, strlen($check) - 10)) {
                        $is_error = true;
                    }
                    break;
                case substr($check, 0, 9) == 'max_words':
                    if (count(array_filter(explode(" ", $data), "remove_empty")) > substr($check, 10, strlen($check) - 10)) {
                        $is_error = true;
                    }
                    break;
                case substr($check, 0, 10) == 'min_length':
                    if (strlen($data) < substr($check, 11, strlen($check) - 11)) {
                        $is_error = true;
                    }
                    break;
                case substr($check, 0, 10) == 'max_length':
                    if (strlen($data) > substr($check, 11, strlen($check) - 11)) {
                        $is_error = true;
                    }
                    break;
                case substr($check, 0, 12) == 'min_elements':
                    if (count($data) < substr($check, 13, strlen($check) - 13)) {
                        $is_error = true;
                    }
                    break;
                case substr($check, 0, 12) == 'max_elements':
                    if (count($data) > substr($check, 13, strlen($check) - 13)) {
                        $is_error = true;
                    }
                    break;
                case substr($check, 0, 8) == 'value_in':
                    $values = substr($check, 9, strlen($check) - 9);
                    $values = array_filter(explode("__", $values), "remove_empty");
                    $value_in = false;
                    foreach ($values as $value) {
                        if ($data == $value) {
                            $value_in = true;
                        }
                    }
                    if ($value_in == false) {
                        $is_error = true;
                    }
                    break;
                case substr($check, 0, 12) == 'value_not_in':
                    $values = substr($check, 13, strlen($check) - 13);
                    $values = array_filter(explode("__", trim($values)), "remove_empty");
                    $value_not_in = true;
                    foreach ($values as $value) {
                        if ($data == $value) {
                            $value_not_in = false;
                        }
                    }
                    if ($value_not_in == false) {
                        $is_error = true;
                    }
                    break;
            }
        }
    }
    if ($is_error) {
        # errors found
        if ($error_handling == "verbal") {
            handle_verbal_error("RED ALERT: invalid data=" . $data . " checks=" . array_to_string($checks));
        } else {
            if ($error_handling == "silent") {
                handle_silent_error("WATCH: invalid data=" . $data . " checks=" . array_to_string($checks));
            }
        }
        # DONT REMOVE THIS RETURN -- class functions use it for case logic
        return false;
    } else {
        # no errors
        return true;
    }
}
function get_online_users_func()
{
    global $db, $auth, $config, $user, $phpbb_root_path;
    $user->setup('memberlist');
    // Get and set some variables
    $mode = '';
    $session_id = '';
    $start = 0;
    $sort_key = 'b';
    $sort_dir = 'd';
    $show_guests = 0;
    if (!$user->data['is_registered']) {
        trigger_error('LOGIN_EXPLAIN_VIEWONLINE');
    }
    if (!$auth->acl_gets('u_viewprofile', 'a_user', 'a_useradd', 'a_userdel')) {
        trigger_error('NO_VIEW_USERS');
    }
    $sort_key_sql = array('a' => 'u.username_clean', 'b' => 's.session_time', 'c' => 's.session_page');
    $order_by = $sort_key_sql[$sort_key] . ' ' . ($sort_dir == 'a' ? 'ASC' : 'DESC');
    // Forum info
    $sql = 'SELECT forum_id, forum_name, parent_id, forum_type, left_id, right_id
        FROM ' . FORUMS_TABLE . '
        ORDER BY left_id ASC';
    $result = $db->sql_query($sql, 600);
    $forum_data = array();
    while ($row = $db->sql_fetchrow($result)) {
        $forum_data[$row['forum_id']] = $row;
    }
    $db->sql_freeresult($result);
    $guest_counter = 0;
    // Get number of online guests (if we do not display them)
    if (!$show_guests) {
        switch ($db->sql_layer) {
            case 'sqlite':
                $sql = 'SELECT COUNT(session_ip) as num_guests
                    FROM (
                        SELECT DISTINCT session_ip
                            FROM ' . SESSIONS_TABLE . '
                            WHERE session_user_id = ' . ANONYMOUS . '
                                AND session_time >= ' . (time() - $config['load_online_time'] * 60) . ')';
                break;
            default:
                $sql = 'SELECT COUNT(DISTINCT session_ip) as num_guests
                    FROM ' . SESSIONS_TABLE . '
                    WHERE session_user_id = ' . ANONYMOUS . '
                        AND session_time >= ' . (time() - $config['load_online_time'] * 60);
                break;
        }
        $result = $db->sql_query($sql);
        $guest_counter = (int) $db->sql_fetchfield('num_guests');
        $db->sql_freeresult($result);
    }
    // Get user list
    $sql = 'SELECT u.user_id, u.username, u.username_clean, u.user_type, u.user_avatar, u.user_avatar_type, s.session_id, s.session_time, s.session_page, s.session_ip, s.session_browser, s.session_viewonline, s.session_forum_id
        FROM ' . USERS_TABLE . ' u, ' . SESSIONS_TABLE . ' s
        WHERE u.user_id = s.session_user_id
            AND s.session_time >= ' . (time() - $config['load_online_time'] * 60) . (!$show_guests ? ' AND s.session_user_id <> ' . ANONYMOUS : '') . '
        ORDER BY ' . $order_by;
    $result = $db->sql_query($sql);
    $prev_id = $prev_ip = $user_list = array();
    $logged_visible_online = $logged_hidden_online = $counter = 0;
    while ($row = $db->sql_fetchrow($result)) {
        if ($row['user_id'] != ANONYMOUS && !isset($prev_id[$row['user_id']])) {
            $view_online = $s_user_hidden = false;
            if (!$row['session_viewonline']) {
                $view_online = $auth->acl_get('u_viewonline') ? true : false;
                $logged_hidden_online++;
                $s_user_hidden = true;
            } else {
                $view_online = true;
                $logged_visible_online++;
            }
            $prev_id[$row['user_id']] = 1;
            if ($view_online) {
                $counter++;
            }
            if (!$view_online || $counter > $start + 100 || $counter <= $start) {
                continue;
            }
        } else {
            if ($show_guests && $row['user_id'] == ANONYMOUS && !isset($prev_ip[$row['session_ip']])) {
                $prev_ip[$row['session_ip']] = 1;
                $guest_counter++;
                $counter++;
                if ($counter > $start + 100 || $counter <= $start) {
                    continue;
                }
                $s_user_hidden = false;
            } else {
                continue;
            }
        }
        preg_match('#^([a-z0-9/_-]+)#i', $row['session_page'], $on_page);
        if (!sizeof($on_page)) {
            $on_page[1] = '';
        }
        if (file_exists($phpbb_root_path . $config['tapatalkdir'] . '/include/online_hook.php')) {
            include $phpbb_root_path . $config['tapatalkdir'] . '/include/online_hook.php';
        }
        switch ($on_page[1]) {
            case 'index':
                $location = $user->lang['INDEX'];
                $location_url = append_sid("{$phpbb_root_path}index.{$phpEx}");
                break;
            case 'adm/index':
                $location = $user->lang['ACP'];
                $location_url = append_sid("{$phpbb_root_path}index.{$phpEx}");
                break;
            case 'posting':
            case 'viewforum':
            case 'viewtopic':
                $forum_id = $row['session_forum_id'];
                if ($forum_id && $auth->acl_get('f_list', $forum_id)) {
                    $location = '';
                    $location_url = append_sid("{$phpbb_root_path}viewforum.{$phpEx}", 'f=' . $forum_id);
                    if ($forum_data[$forum_id]['forum_type'] == FORUM_LINK) {
                        $location = sprintf($user->lang['READING_LINK'], $forum_data[$forum_id]['forum_name']);
                        break;
                    }
                    switch ($on_page[1]) {
                        case 'posting':
                            preg_match('#mode=([a-z]+)#', $row['session_page'], $on_page);
                            $posting_mode = !empty($on_page[1]) ? $on_page[1] : '';
                            switch ($posting_mode) {
                                case 'reply':
                                case 'quote':
                                    $location = sprintf($user->lang['REPLYING_MESSAGE'], $forum_data[$forum_id]['forum_name']);
                                    break;
                                default:
                                    $location = sprintf($user->lang['POSTING_MESSAGE'], $forum_data[$forum_id]['forum_name']);
                                    break;
                            }
                            break;
                        case 'viewtopic':
                            $location = sprintf($user->lang['READING_TOPIC'], $forum_data[$forum_id]['forum_name']);
                            break;
                        case 'viewforum':
                            $location = sprintf($user->lang['READING_FORUM'], $forum_data[$forum_id]['forum_name']);
                            break;
                    }
                } else {
                    $location = $user->lang['INDEX'];
                    $location_url = append_sid("{$phpbb_root_path}index.{$phpEx}");
                }
                break;
            case 'search':
                $location = $user->lang['SEARCHING_FORUMS'];
                $location_url = append_sid("{$phpbb_root_path}search.{$phpEx}");
                break;
            case 'faq':
                $location = $user->lang['VIEWING_FAQ'];
                $location_url = append_sid("{$phpbb_root_path}faq.{$phpEx}");
                break;
            case 'viewonline':
                $location = $user->lang['VIEWING_ONLINE'];
                $location_url = append_sid("{$phpbb_root_path}viewonline.{$phpEx}");
                break;
            case 'memberlist':
                $location = strpos($row['session_page'], 'mode=viewprofile') !== false ? $user->lang['VIEWING_MEMBER_PROFILE'] : $user->lang['VIEWING_MEMBERS'];
                $location_url = append_sid("{$phpbb_root_path}memberlist.{$phpEx}");
                break;
            case 'mcp':
                $location = $user->lang['VIEWING_MCP'];
                $location_url = append_sid("{$phpbb_root_path}index.{$phpEx}");
                break;
            case 'ucp':
                $location = $user->lang['VIEWING_UCP'];
                // Grab some common modules
                $url_params = array('mode=register' => 'VIEWING_REGISTER', 'i=pm&mode=compose' => 'POSTING_PRIVATE_MESSAGE', 'i=pm&' => 'VIEWING_PRIVATE_MESSAGES', 'i=profile&' => 'CHANGING_PROFILE', 'i=prefs&' => 'CHANGING_PREFERENCES');
                foreach ($url_params as $param => $lang) {
                    if (strpos($row['session_page'], $param) !== false) {
                        $location = $user->lang[$lang];
                        break;
                    }
                }
                $location_url = append_sid("{$phpbb_root_path}index.{$phpEx}");
                break;
            case 'download/file':
                $location = $user->lang['DOWNLOADING_FILE'];
                $location_url = append_sid("{$phpbb_root_path}index.{$phpEx}");
                break;
            case 'report':
                $location = $user->lang['REPORTING_POST'];
                $location_url = append_sid("{$phpbb_root_path}index.{$phpEx}");
                break;
            default:
                $location = $user->lang['INDEX'];
                $location_url = append_sid("{$phpbb_root_path}index.{$phpEx}");
                break;
        }
        $user_avatar_url = get_user_avatar_url($row['user_avatar'], $row['user_avatar_type']);
        $row['from'] = 'broswer';
        if (!empty($row['is_tapatalk'])) {
            $row['from'] = 'tapatalk';
        } else {
            if (!empty($row['is_byo'])) {
                $row['from'] = 'byo';
            } else {
                if (strpos($row['session_browser'], 'Android') !== false || strpos($row['session_browser'], 'iPhone') !== false || strpos($row['session_browser'], 'BlackBerry') !== false) {
                    $row['from'] = 'mobile';
                }
            }
        }
        $user_list[] = new xmlrpcval(array('user_id' => new xmlrpcval($row['user_id'], 'string'), 'username' => new xmlrpcval(basic_clean($row['username']), 'base64'), 'from' => new xmlrpcval($row['from'], 'string'), 'user_type' => check_return_user_type($row['username']), 'user_name' => new xmlrpcval($row['username'], 'base64'), 'icon_url' => new xmlrpcval($user_avatar_url), 'display_text' => new xmlrpcval($location, 'base64')), 'struct');
    }
    $db->sql_freeresult($result);
    unset($prev_id, $prev_ip);
    $online_users = array('member_count' => new xmlrpcval($logged_visible_online, 'int'), 'guest_count' => new xmlrpcval($guest_counter, 'int'), 'list' => new xmlrpcval($user_list, 'array'));
    $response = new xmlrpcval($online_users, 'struct');
    return new xmlrpcresp($response);
}
示例#24
0
function get_box_func($xmlrpc_params)
{
    global $db, $auth, $user, $cache, $config, $phpbb_home, $phpbb_root_path, $phpEx;
    $params = php_xmlrpc_decode($xmlrpc_params);
    $user->setup('ucp');
    if (!$user->data['is_registered']) {
        trigger_error('LOGIN_EXPLAIN_UCP');
    }
    if (!$config['allow_privmsg']) {
        trigger_error('Module not accessible');
    }
    if (!isset($params[0])) {
        trigger_error('UNKNOWN_FOLDER');
    }
    // get folder id from parameters
    $folder_id = intval($params[0]);
    if (PRIVMSGS_INBOX !== $folder_id) {
        $folder_id = PRIVMSGS_SENTBOX;
    }
    list($start, $limit, $page) = process_page($params[1], $params[2]);
    // Grab icons
    //$icons = $cache->obtain_icons();
    $user_id = $user->data['user_id'];
    include_once $phpbb_root_path . 'includes/functions_privmsgs.' . $phpEx;
    $folder = get_folder($user_id, $folder_id);
    include $phpbb_root_path . 'includes/ucp/ucp_pm_viewfolder.' . $phpEx;
    $folder_info = get_pm_from($folder_id, $folder, $user_id);
    $address_list = array();
    // Build Recipient List if in outbox/sentbox - max two additional queries
    if ($folder_id == PRIVMSGS_OUTBOX || $folder_id == PRIVMSGS_SENTBOX) {
        $recipient_list = $address = array();
        foreach ($folder_info['rowset'] as $message_id => $row) {
            $address[$message_id] = rebuild_header(array('to' => $row['to_address'], 'bcc' => $row['bcc_address']));
            $_save = array('u', 'g');
            foreach ($_save as $save) {
                if (isset($address[$message_id][$save]) && sizeof($address[$message_id][$save])) {
                    foreach (array_keys($address[$message_id][$save]) as $ug_id) {
                        $recipient_list[$save][$ug_id] = array('name' => $user->lang['NA'], 'colour' => '');
                    }
                }
            }
        }
        $_types = array('u', 'g');
        foreach ($_types as $ug_type) {
            if (!empty($recipient_list[$ug_type])) {
                if ($ug_type == 'u') {
                    $sql = 'SELECT user_id as id, username as name, user_colour as colour
                        FROM ' . USERS_TABLE . '
                        WHERE ';
                } else {
                    $sql = 'SELECT group_id as id, group_name as name, group_colour as colour, group_type
                        FROM ' . GROUPS_TABLE . '
                        WHERE ';
                }
                $sql .= $db->sql_in_set($ug_type == 'u' ? 'user_id' : 'group_id', array_map('intval', array_keys($recipient_list[$ug_type])));
                $result = $db->sql_query($sql);
                while ($row = $db->sql_fetchrow($result)) {
                    if ($ug_type == 'g') {
                        $row['name'] = $row['group_type'] == GROUP_SPECIAL ? $user->lang['G_' . $row['name']] : $row['name'];
                    }
                    $recipient_list[$ug_type][$row['id']] = array('id' => $row['id'], 'name' => $row['name'], 'colour' => $row['colour']);
                }
                $db->sql_freeresult($result);
            }
        }
        foreach ($address as $message_id => $adr_ary) {
            foreach ($adr_ary as $type => $id_ary) {
                foreach ($id_ary as $ug_id => $_id) {
                    $address_list[$message_id][] = $recipient_list[$type][$ug_id];
                }
            }
        }
        unset($recipient_list, $address);
    }
    // get unread count in inbox only
    if (PRIVMSGS_INBOX === $folder_id) {
        $sql = 'SELECT COUNT(msg_id) as num_messages
                FROM ' . PRIVMSGS_TO_TABLE . '
                WHERE pm_unread = 1
                    AND folder_id = ' . PRIVMSGS_INBOX . '
                    AND user_id = ' . $user->data['user_id'];
        $result = $db->sql_query($sql);
        $unread_num = (int) $db->sql_fetchfield('num_messages');
        $db->sql_freeresult($result);
    } else {
        $unread_num = 0;
    }
    $sql = 'SELECT COUNT(msg_id) as num_messages
            FROM ' . PRIVMSGS_TO_TABLE . '
            WHERE folder_id = ' . $folder_id . '
                AND user_id = ' . $user->data['user_id'];
    $result = $db->sql_query($sql);
    $total_num = (int) $db->sql_fetchfield('num_messages');
    $db->sql_freeresult($result);
    $sql = 'SELECT t.*, p.*, u.username, u.user_avatar, u.user_avatar_type, u.user_id
            FROM ' . PRIVMSGS_TO_TABLE . ' t, ' . PRIVMSGS_TABLE . ' p, ' . USERS_TABLE . " u\r\r\n            WHERE t.user_id = {$user_id}\r\r\n            AND p.author_id = u.user_id\r\r\n            AND t.folder_id = {$folder_id}\r\r\n            AND t.msg_id = p.msg_id\r\r\n            ORDER BY p.message_time DESC";
    $result = $db->sql_query_limit($sql, $limit, $start);
    $total_message_count = $total_unread_count = 0;
    $online_cache = array();
    while ($row = $db->sql_fetchrow($result)) {
        $msg_state = 2;
        // message read
        if ($row['pm_unread']) {
            $msg_state = 1;
        } else {
            if ($row['pm_replied']) {
                $msg_state = 3;
            } else {
                if ($row['pm_forwarded']) {
                    $msg_state = 4;
                }
            }
        }
        if ($folder_id == PRIVMSGS_OUTBOX || $folder_id == PRIVMSGS_SENTBOX) {
            $msg_to_list = $address_list[$row['msg_id']];
        } else {
            $msg_to_list = array(array('id' => $user->data['user_id'], 'name' => $user->data['username']));
        }
        $msg_to = array();
        foreach ($msg_to_list as $address) {
            $msg_to[] = new xmlrpcval(array('user_id' => new xmlrpcval($address['id'], 'string'), 'username' => new xmlrpcval(basic_clean($address['name']), 'base64'), 'user_type' => check_return_user_type($address['name'])), 'struct');
        }
        $sent_date = mobiquo_iso8601_encode($row['message_time']);
        //$icon_url   = (!empty($icons[$row['icon_id']])) ? $phpbb_home . $config['icons_path'] . '/' . $icons[$row['icon_id']]['img'] : '';
        $icon_url = $user->optionget('viewavatars') ? get_user_avatar_url($row['user_avatar'], $row['user_avatar_type']) : '';
        $msg_subject = html_entity_decode(strip_tags(censor_text($row['message_subject'])));
        $short_content = censor_text($row['message_text']);
        $short_content = preg_replace('/\\[url.*?\\].*?\\[\\/url.*?\\]/', '[url]', $short_content);
        $short_content = preg_replace('/\\[img.*?\\].*?\\[\\/img.*?\\]/', '[img]', $short_content);
        $short_content = preg_replace('/[\\n\\r\\t]+/', ' ', $short_content);
        strip_bbcode($short_content);
        $short_content = html_entity_decode($short_content);
        $short_content = substr($short_content, 0, 200);
        if ($config['load_onlinetrack'] && !isset($online_cache[$row['user_id']])) {
            $sql = 'SELECT session_user_id, MAX(session_time) as online_time, MIN(session_viewonline) AS viewonline
                    FROM ' . SESSIONS_TABLE . '
                    WHERE session_user_id=' . $row['user_id'] . '
                    GROUP BY session_user_id';
            $online_result = $db->sql_query($sql);
            $online_info = $db->sql_fetchrow($online_result);
            $db->sql_freeresult($online_result);
            $update_time = $config['load_online_time'] * 60;
            $online_cache[$row['user_id']] = time() - $update_time < $online_info['online_time'] && ($online_info['viewonline'] || $auth->acl_get('u_viewonline')) ? true : false;
        }
        $is_online = isset($online_cache[$row['user_id']]) ? $online_cache[$row['user_id']] : false;
        $pm_list[] = new xmlrpcval(array('msg_id' => new xmlrpcval($row['msg_id']), 'msg_state' => new xmlrpcval($msg_state, 'int'), 'sent_date' => new xmlrpcval($sent_date, 'dateTime.iso8601'), 'timestamp' => new xmlrpcval($row['message_time'], 'string'), 'msg_from' => new xmlrpcval(basic_clean($row['username']), 'base64'), 'msg_from_id' => new xmlrpcval($row['user_id']), 'icon_url' => new xmlrpcval($icon_url), 'msg_to' => new xmlrpcval($msg_to, 'array'), 'msg_subject' => new xmlrpcval($msg_subject, 'base64'), 'short_content' => new xmlrpcval($short_content, 'base64'), 'is_online' => new xmlrpcval($is_online, 'boolean')), 'struct');
    }
    $db->sql_freeresult($result);
    $result = new xmlrpcval(array('total_message_count' => new xmlrpcval($total_num, 'int'), 'total_unread_count' => new xmlrpcval($unread_num, 'int'), 'list' => new xmlrpcval($pm_list, 'array')), 'struct');
    return new xmlrpcresp($result);
}
示例#25
0
function tt_login_success()
{
    global $db, $lang, $theme, $plugins, $mybb, $session, $settings, $cache, $time, $mybbgroups, $mobiquo_config, $user, $register;
    if ($user['coppauser']) {
        error($lang->error_awaitingcoppa);
    }
    my_setcookie('loginattempts', 1);
    $db->delete_query("sessions", "ip='" . $db->escape_string($session->ipaddress) . "' AND sid != '" . $session->sid . "'");
    $newsession = array("uid" => $user['uid']);
    $db->update_query("sessions", $newsession, "sid='" . $session->sid . "'");
    $db->update_query("users", array("loginattempts" => 1), "uid='{$user['uid']}'");
    my_setcookie("mybbuser", $user['uid'] . "_" . $user['loginkey'], null, true);
    my_setcookie("sid", $session->sid, -1, true);
    $mybb->cookies['sid'] = $session->sid;
    $session = new session();
    $session->init();
    $mybbgroups = $mybb->user['usergroup'];
    if ($mybb->user['additionalgroups']) {
        $mybbgroups .= ',' . $mybb->user['additionalgroups'];
    }
    $groups = explode(",", $mybbgroups);
    $xmlgroups = array();
    foreach ($groups as $group) {
        $xmlgroups[] = new xmlrpcval($group, "string");
    }
    tt_update_push();
    if ($settings['maxattachments'] == 0) {
        $settings['maxattachments'] = 100;
    }
    $userPushType = array('pm' => 1, 'newtopic' => 1, 'sub' => 1, 'tag' => 1, 'quote' => 1);
    $push_type = array();
    foreach ($userPushType as $name => $value) {
        $push_type[] = new xmlrpcval(array('name' => new xmlrpcval($name, 'string'), 'value' => new xmlrpcval($value, 'boolean')), 'struct');
    }
    if ($mybb->settings['postfloodsecs'] && !is_moderator(0, "", $mybb->user['uid'])) {
        $flood_interval = $mybb->settings['postfloodsecs'];
    }
    $result = array('result' => new xmlrpcval(true, 'boolean'), 'result_text' => new xmlrpcval('', 'base64'), 'user_id' => new xmlrpcval($mybb->user['uid'], 'string'), 'username' => new xmlrpcval(basic_clean($mybb->user['username']), 'base64'), 'login_name' => new xmlrpcval(basic_clean($mybb->user['username']), 'base64'), 'user_type' => check_return_user_type($mybb->user['username']), 'email' => new xmlrpcval(basic_clean($mybb->user['email']), 'base64'), 'icon_url' => new xmlrpcval(absolute_url($mybb->user['avatar']), 'string'), 'post_count' => new xmlrpcval(intval($mybb->user['postnum']), 'int'), 'usergroup_id' => new xmlrpcval($xmlgroups, 'array'), 'ignored_uids' => new xmlrpcval($mybb->user['ignorelist'], 'string'), 'max_png_size' => new xmlrpcval(10000000, "int"), 'max_jpg_size' => new xmlrpcval(10000000, "int"), 'max_attachment' => new xmlrpcval($mybb->usergroup['canpostattachments'] == 1 ? $settings['maxattachments'] : 0, "int"), 'can_upload_avatar' => new xmlrpcval($mybb->usergroup['canuploadavatars'] == 1, "boolean"), 'can_pm' => new xmlrpcval($mybb->usergroup['canusepms'] == 1 && !$mobiquo_config['disable_pm'], "boolean"), 'can_send_pm' => new xmlrpcval($mybb->usergroup['cansendpms'] == 1 && !$mobiquo_config['disable_pm'], "boolean"), 'can_moderate' => new xmlrpcval($mybb->usergroup['canmodcp'] == 1, "boolean"), 'can_search' => new xmlrpcval($mybb->usergroup['cansearch'] == 1, "boolean"), 'can_whosonline' => new xmlrpcval($mybb->usergroup['canviewonline'] == 1, "boolean"), 'register' => new xmlrpcval($register, "boolean"), 'push_type' => new xmlrpcval($push_type, 'array'), 'post_countdown' => new xmlrpcval($flood_interval, 'int'));
    if ($mybb->usergroup['isbannedgroup'] == 1) {
        // Fetch details on their ban
        $query = $db->simple_select("banned", "*", "uid='{$mybb->user['uid']}'", array('limit' => 1));
        $ban = $db->fetch_array($query);
        if ($ban['uid']) {
            // Format their ban lift date and reason appropriately
            if ($ban['lifted'] > 0) {
                $banlift = my_date($mybb->settings['dateformat'], $ban['lifted']) . ", " . my_date($mybb->settings['timeformat'], $ban['lifted']);
            } else {
                $banlift = $lang->banned_lifted_never;
            }
            $reason = htmlspecialchars_uni($ban['reason']);
        }
        if (empty($reason)) {
            $reason = $lang->unknown;
        }
        if (empty($banlift)) {
            $banlift = $lang->unknown;
        }
        $result_text = $lang->banned_warning . $lang->banned_warning2 . ": " . $reason . "\n" . $lang->banned_warning3 . ": " . $banlift;
        $result['result_text'] = new xmlrpcval($result_text, 'base64');
    }
    return new xmlrpcresp(new xmlrpcval($result, 'struct'));
}
示例#26
0
function action_get_message()
{
    global $context, $smcFunc, $modSettings, $scripturl, $sourcedir, $user_info, $msg_id, $box_id, $user_profile, $memberContext;
    require_once 'include/PersonalMessage.php';
    // No guests!
    is_not_guest();
    // You're not supposed to be here at all, if you can't even read PMs.
    isAllowedTo('pm_read');
    loadLanguage('PersonalMessage');
    $request = $smcFunc['db_query']('', '
        SELECT COUNT(*) AS num
        FROM {db_prefix}pm_recipients pr
            INNER JOIN {db_prefix}personal_messages AS pm ON (pr.id_pm = pm.id_pm)
        WHERE pm.id_pm = {int:id_message} and (pr.id_member = {int:id_member} or pm.id_member_from = {int:id_member})', array('id_message' => $msg_id, 'id_member' => $user_info['id']));
    $permission = $smcFunc['db_fetch_assoc']($request);
    if (empty($permission) || $permission['num'] <= 0) {
        fatal_lang_error('no_access', false);
    }
    $request = $smcFunc['db_query']('', '
        SELECT pm.id_member_from, pm.msgtime, pm.subject, pm.body, m.member_name, m.real_name
        FROM {db_prefix}personal_messages AS pm
            LEFT JOIN {db_prefix}members AS m ON (pm.id_member_from = m.id_member)
        WHERE pm.id_pm = {int:id_message} ' . ($box_id == 'sent' ? 'AND pm.id_member_from = {int:current_member} AND pm.deleted_by_sender = 0' : ''), array('id_message' => $msg_id, 'current_member' => $user_info['id']));
    $pm = $smcFunc['db_fetch_assoc']($request);
    $smcFunc['db_free_result']($request);
    if (empty($pm)) {
        fatal_lang_error('no_access', false);
    }
    censorText($pm['subject']);
    censorText($pm['body']);
    $context['pm'] = array('id_member' => $pm['id_member_from'], 'username' => $pm['member_name'], 'name' => $pm['real_name'], 'time' => timeformat($pm['msgtime']), 'timestamp' => $pm['msgtime'], 'subject' => $pm['subject'], 'body' => mobiquo_parse_bbc($pm['body'], false, 'pm' . $msg_id), 'recipients' => array());
    $request = $smcFunc['db_query']('', '
        SELECT pmr.id_member, m.member_name, m.real_name
        FROM {db_prefix}pm_recipients AS pmr
            LEFT JOIN {db_prefix}members AS m ON (pmr.id_member = m.id_member)
        WHERE pmr.id_pm = {int:id_message} ' . ($box_id == 'inbox' ? 'AND ((pmr.id_member = {int:current_member} AND pmr.deleted = 0) OR (pmr.id_member != {int:current_member} AND pmr.bcc = 0))' : ''), array('id_message' => $msg_id, 'current_member' => $user_info['id']));
    $no_member = true;
    while ($row = $smcFunc['db_fetch_assoc']($request)) {
        $context['pm']['recipients'][] = new xmlrpcval(array('user_id' => new xmlrpcval(basic_clean($row['id_member'])), 'username' => new xmlrpcval(basic_clean($row['real_name']), 'base64')), 'struct');
        if ($no_member) {
            $display_member_id = $box_id == 'inbox' ? $pm['id_member_from'] : $row['id_member'];
            $no_member = false;
        }
    }
    $smcFunc['db_free_result']($request);
    loadMemberData($display_member_id);
    loadMemberContext($display_member_id);
    $context['pm']['member'] = $memberContext[$display_member_id];
    if ($no_avatar) {
        fatal_lang_error('no_access', false);
    }
    // Mark this as read, if it is not already
    markMessages(array($msg_id));
}
示例#27
0
function search_user_func()
{
    global $mybb, $db, $lang, $cache;
    // Load global language phrases
    $lang->load("memberlist");
    if ($mybb->settings['enablememberlist'] == 0) {
        return xmlrespfalse($lang->memberlist_disabled);
    }
    //$plugins->run_hooks("memberlist_start");
    if ($mybb->usergroup['canviewmemberlist'] == 0) {
        return tt_no_permission();
    }
    $colspan = 5;
    $search_url = '';
    // Incoming sort field?
    $mybb->input['sort'] = $mybb->settings['default_memberlist_sortby'];
    switch ($mybb->input['sort']) {
        case "regdate":
            $sort_field = "u.regdate";
            break;
        case "lastvisit":
            $sort_field = "u.lastactive";
            break;
        case "reputation":
            $sort_field = "u.reputation";
            break;
        case "postnum":
            $sort_field = "u.postnum";
            break;
        case "referrals":
            $sort_field = "u.referrals";
            break;
        default:
            $sort_field = "u.username";
            $mybb->input['sort'] = 'username';
            break;
    }
    //$sort_selected[$mybb->input['sort']] = " selected=\"selected\"";
    // Incoming sort order?
    $mybb->input['order'] = strtolower($mybb->settings['default_memberlist_order']);
    if ($mybb->input['order'] == "ascending" || !$mybb->input['order'] && $mybb->input['sort'] == 'username') {
        $sort_order = "ASC";
        $mybb->input['order'] = "ascending";
    } else {
        $sort_order = "DESC";
        $mybb->input['order'] = "descending";
    }
    //$order_check[$mybb->input['order']] = " checked=\"checked\"";
    // Incoming results per page?
    $mybb->input['perpage'] = intval($mybb->input['perpage']);
    if ($mybb->input['perpage'] > 0 && $mybb->input['perpage'] <= 500) {
        $per_page = $mybb->input['perpage'];
    } else {
        if ($mybb->settings['membersperpage']) {
            $per_page = $mybb->input['perpage'] = intval($mybb->settings['membersperpage']);
        } else {
            $per_page = $mybb->input['perpage'] = 20;
        }
    }
    $search_query = '1=1';
    // Searching for a matching username
    $search_username = htmlspecialchars_uni(trim($mybb->input['username']));
    if ($search_username != '') {
        $username_like_query = $db->escape_string_like($search_username);
        // Name begins with
        if ($mybb->input['username_match'] == "begins") {
            $search_query .= " AND u.username LIKE '" . $username_like_query . "%'";
        } else {
            $search_query .= " AND u.username LIKE '%" . $username_like_query . "%'";
        }
    }
    $query = $db->simple_select("users u", "COUNT(*) AS users", "{$search_query}");
    $num_users = $db->fetch_field($query, "users");
    $page = intval($mybb->input['page']);
    if ($page && $page > 0) {
        $start = ($page - 1) * $per_page;
    } else {
        $start = 0;
        $page = 1;
    }
    //$search_url = htmlspecialchars_uni($search_url);
    $multipage = multipage($num_users, $per_page, $page, $search_url);
    // Cache a few things
    $usergroups_cache = $cache->read('usergroups');
    $query = $db->simple_select("usertitles", "*", "", array('order_by' => 'posts', 'order_dir' => 'DESC'));
    while ($usertitle = $db->fetch_array($query)) {
        $usertitles_cache[$usertitle['posts']] = $usertitle;
    }
    $query = $db->query("\n\t\tSELECT u.*, f.*\n\t\tFROM " . TABLE_PREFIX . "users u\n\t\tLEFT JOIN " . TABLE_PREFIX . "userfields f ON (f.ufid=u.uid)\n\t\tWHERE {$search_query}\n\t\tORDER BY {$sort_field} {$sort_order}\n\t\tLIMIT {$start}, {$per_page}\n\t");
    while ($user = $db->fetch_array($query)) {
        //$user = $plugins->run_hooks("memberlist_user", $user);
        if (!$user['username']) {
            continue;
        }
        $user['username'] = format_name($user['username'], $user['usergroup'], $user['displaygroup']);
        if ($user['avatar'] != '') {
            $user['avatar'] = absolute_url($user['avatar']);
        } else {
            $user['avatar'] = "";
        }
        $users[] = $user;
    }
    $total = $num_users;
    if (!empty($users)) {
        foreach ($users as $user) {
            $return_user_lists[] = new xmlrpcval(array('username' => new xmlrpcval(basic_clean($user['username']), 'base64'), 'user_id' => new xmlrpcval($user['uid'], 'string'), 'icon_url' => new xmlrpcval($user['avatar'], 'string')), 'struct');
        }
    }
    $suggested_users = new xmlrpcval(array('total' => new xmlrpcval($total, 'int'), 'list' => new xmlrpcval($return_user_lists, 'array')), 'struct');
    return new xmlrpcresp($suggested_users);
}
示例#28
0
function search_func()
{
    global $db, $template, $user, $auth, $config, $can_subscribe, $show_results, $include_topic_num, $total_match_count;
    $topic_list = $subscribed_tids = array();
    if ($show_results == 'topics' && $user->data['user_id']) {
        $sql = 'SELECT topic_id
            FROM ' . TOPICS_WATCH_TABLE . '
            WHERE user_id = ' . $user->data['user_id'];
        $result = $db->sql_query($sql);
        while ($row = $db->sql_fetchrow($result)) {
            $subscribed_tids[] = (int) $row['topic_id'];
        }
        $db->sql_freeresult($result);
    }
    foreach ($template->_tpldata['searchresults'] as $item) {
        $forum_id = $item['FORUM_ID'];
        if ($show_results == 'topics') {
            $lastpost = $item['lastpost'];
            $isbanned = $lastpost['isbanned'];
            $return_item = array('forum_id' => new xmlrpcval($item['FORUM_ID'], 'string'), 'forum_name' => new xmlrpcval(basic_clean($item['FORUM_TITLE']), 'base64'), 'topic_id' => new xmlrpcval($item['TOPIC_ID'], 'string'), 'topic_title' => new xmlrpcval(basic_clean($item['TOPIC_TITLE']), 'base64'), 'post_author_id' => new xmlrpcval($item['LAST_POSTER_ID'], 'string'), 'post_author_name' => new xmlrpcval(basic_clean($item['LAST_POST_AUTHOR']), 'base64'), 'post_time' => new xmlrpcval($item['LAST_POST_TIME'], 'dateTime.iso8601'), 'timestamp' => new xmlrpcval($item['LAST_POST_TIMESTAMP'], 'string'), 'icon_url' => new xmlrpcval($item['LAST_POSTER_AVATAR'], 'string'), 'short_content' => new xmlrpcval(basic_clean($item['LAST_POST_PREV']), 'base64'), 'last_reply_author_id' => new xmlrpcval($item['LAST_POSTER_ID'], 'string'), 'last_reply_author_name' => new xmlrpcval(basic_clean($item['LAST_POST_AUTHOR']), 'base64'), 'last_reply_time' => new xmlrpcval($item['LAST_POST_TIME'], 'dateTime.iso8601'), 'reply_number' => new xmlrpcval($item['TOPIC_REPLIES'], 'int'), 'view_number' => new xmlrpcval($item['TOPIC_VIEWS'], 'int'), 'can_subscribe' => new xmlrpcval($can_subscribe, 'boolean'), 'is_approved' => new xmlrpcval(!$item['S_TOPIC_UNAPPROVED'], 'boolean'));
            $allow_change_type = $auth->acl_get('m_', $forum_id) || $user->data['is_registered'] && $user->data['user_id'] == $topic_data['topic_poster'];
            $can_close = $auth->acl_get('m_lock', $forum_id) || $auth->acl_get('f_user_lock', $forum_id) && $user->data['is_registered'] && $user->data['user_id'] == $item['TOPIC_AUTHOR_ID'];
            $can_delete = $auth->acl_get('m_delete', $forum_id);
            $can_stick = $allow_change_type && $auth->acl_get('f_sticky', $forum_id);
            $can_move = $auth->acl_get('m_move', $forum_id);
            $can_approve = $auth->acl_get('m_approve', $forum_id) && $item['S_TOPIC_UNAPPROVED'];
            $can_ban = $auth->acl_get('m_ban') && $item['LAST_POSTER_ID'] != $user->data['user_id'];
            $can_rename = $user->data['is_registered'] && ($auth->acl_get('m_edit', $forum_id) || $user->data['user_id'] == $item['TOPIC_AUTHOR_ID'] && $auth->acl_get('f_edit', $forum_id) && ($item['FIRST_POST_TIMESTAMP'] > time() - $config['edit_time'] * 60 || !$config['edit_time']));
            $can_subscribe = ($config['email_enable'] || $config['jab_enable']) && $config['allow_topic_notify'] && $user->data['is_registered'];
            $is_subscribed = in_array($item['TOPIC_ID'], $subscribed_tids);
            if ($can_close) {
                $return_item['can_close'] = new xmlrpcval(true, 'boolean');
            }
            if ($can_delete) {
                $return_item['can_delete'] = new xmlrpcval(true, 'boolean');
            }
            if ($can_stick) {
                $return_item['can_stick'] = new xmlrpcval(true, 'boolean');
            }
            if ($can_move) {
                $return_item['can_move'] = new xmlrpcval(true, 'boolean');
            }
            if ($can_approve) {
                $return_item['can_approve'] = new xmlrpcval(true, 'boolean');
            }
            if ($can_rename) {
                $return_item['can_rename'] = new xmlrpcval(true, 'boolean');
            }
            if ($can_ban) {
                $return_item['can_ban'] = new xmlrpcval(true, 'boolean');
            }
            //if ($is_ban)        $return_item['is_ban']        = new xmlrpcval(true, 'boolean');
            if ($can_subscribe) {
                $return_item['can_subscribe'] = new xmlrpcval(true, 'boolean');
            }
            if ($is_subscribed) {
                $return_item['is_subscribed'] = new xmlrpcval(true, 'boolean');
            }
            if ($item['S_UNREAD_TOPIC']) {
                $return_item['new_post'] = new xmlrpcval(true, 'boolean');
            }
            if ($item['S_TOPIC_LOCKED']) {
                $return_item['is_closed'] = new xmlrpcval(true, 'boolean');
            }
            if ($item['S_POST_STICKY']) {
                $return_item['is_sticky'] = new xmlrpcval(true, 'boolean');
            }
            $return_list[] = new xmlrpcval($return_item, 'struct');
        } else {
            $return_item = array('forum_id' => new xmlrpcval($item['FORUM_ID'], 'string'), 'forum_name' => new xmlrpcval(basic_clean($item['FORUM_TITLE']), 'base64'), 'topic_id' => new xmlrpcval($item['TOPIC_ID'], 'string'), 'topic_title' => new xmlrpcval(basic_clean($item['TOPIC_TITLE']), 'base64'), 'post_id' => new xmlrpcval($item['POST_ID'], 'string'), 'post_title' => new xmlrpcval(basic_clean($item['POST_SUBJECT']), 'base64'), 'post_author_id' => new xmlrpcval($item['POST_AUTHOR_ID'], 'string'), 'post_author_name' => new xmlrpcval(basic_clean($item['POST_AUTHOR']), 'base64'), 'post_time' => new xmlrpcval($item['POST_DATE'], 'dateTime.iso8601'), 'timestamp' => new xmlrpcval($item['POST_TIMESTAMP'], 'string'), 'icon_url' => new xmlrpcval($item['POSTER_AVATAR'], 'string'), 'short_content' => new xmlrpcval(basic_clean($item['MESSAGE']), 'base64'), 'is_approved' => new xmlrpcval($item['POST_APPROVED'], 'boolean'));
            $can_approve = $auth->acl_get('m_approve', $forum_id) && !$item['POST_APPROVED'];
            $can_move = $auth->acl_get('m_split', $forum_id);
            $can_ban = $auth->acl_get('m_ban') && $item['POST_AUTHOR_ID'] != $user->data['user_id'];
            $can_delete = $user->data['is_registered'] && ($auth->acl_get('m_delete', $forum_id) || $user->data['user_id'] == $item['POST_AUTHOR_ID'] && $auth->acl_get('f_delete', $forum_id) && $item['TOPIC_LAST_POST_ID'] == $item['POST_ID'] && ($item['POST_TIMESTAMP'] > time() - $config['delete_time'] * 60 || !$config['delete_time']) && !$item['POST_EDIT_LOCKED']);
            if ($can_approve) {
                $return_item['can_approve'] = new xmlrpcval(true, 'boolean');
            }
            if ($can_delete) {
                $return_item['can_delete'] = new xmlrpcval(true, 'boolean');
            }
            if ($can_move) {
                $return_item['can_move'] = new xmlrpcval(true, 'boolean');
            }
            if ($can_ban) {
                $return_item['can_ban'] = new xmlrpcval(true, 'boolean');
            }
            //if ($is_ban])       $return_item['is_ban']      = new xmlrpcval(true, 'boolean');
            $return_list[] = new xmlrpcval($return_item, 'struct');
        }
    }
    if ($include_topic_num) {
        if ($show_results == 'topics') {
            return new xmlrpcresp(new xmlrpcval(array('result' => new xmlrpcval(true, 'boolean'), 'total_topic_num' => new xmlrpcval($total_match_count, 'int'), 'topics' => new xmlrpcval($return_list, 'array')), 'struct'));
        } else {
            return new xmlrpcresp(new xmlrpcval(array('result' => new xmlrpcval(true, 'boolean'), 'total_post_num' => new xmlrpcval($total_match_count, 'int'), 'posts' => new xmlrpcval($return_list, 'array')), 'struct'));
        }
    } else {
        return new xmlrpcresp(new xmlrpcval($return_list, 'array'));
    }
}
示例#29
0
function get_config_func()
{
    global $mobiquo_config, $mybb, $cache;
    $config_list = array('sys_version' => new xmlrpcval($mybb->version, 'string'), 'version' => new xmlrpcval($mobiquo_config['version'], 'string'), 'is_open' => new xmlrpcval(isset($cache->cache['plugins']['active']['tapatalk']), 'boolean'), 'guest_okay' => new xmlrpcval($mybb->usergroup['canview'] && $mybb->settings['boardclosed'] == 0, 'boolean'));
    if (!isset($cache->cache['plugins']['active']['tapatalk'])) {
        $config_list['is_open'] = new xmlrpcval(false, 'boolean');
        $config_list['result_text'] = new xmlrpcval(basic_clean('Tapatalk is disabled'), 'base64');
    }
    if ($mybb->settings['boardclosed']) {
        $config_list['is_open'] = new xmlrpcval(false, 'boolean');
        $config_list['result_text'] = new xmlrpcval(basic_clean($mybb->settings['boardclosed_reason']), 'base64');
    }
    // First, load the stats cache.
    $stats = $cache->read("stats");
    $config_list['stats'] = new xmlrpcval(array('topic' => new xmlrpcval($stats['numthreads'], 'int'), 'user' => new xmlrpcval($stats['numusers'], 'int'), 'post' => new xmlrpcval($stats['numposts'], 'int')), 'struct');
    if (!empty($mybb->settings['tapatalk_reg_url'])) {
        $config_list['reg_url'] = new xmlrpcval(basic_clean($mybb->settings['tapatalk_reg_url']), 'string');
    } else {
        $config_list['reg_url'] = new xmlrpcval(basic_clean('member.php?action=register'), 'string');
    }
    if (version_compare($mybb->version, '1.6.9', '>=') && !$mybb->settings['disableregs']) {
        $mobiquo_config['inappreg'] = 1;
    }
    if (version_compare($mybb->version, '1.8.0', '>=')) {
        $mobiquo_config['announcement'] = 1;
    }
    if ($mybb->settings['disableregs'] == 1) {
        $mobiquo_config['sign_in'] = 0;
        $mobiquo_config['inappreg'] = 0;
        $mobiquo_config['sso_signin'] = 0;
        $mobiquo_config['sso_register'] = 0;
        $mobiquo_config['native_register'] = 0;
    }
    if (!function_exists('curl_init') && !@ini_get('allow_url_fopen')) {
        $mobiquo_config['sign_in'] = 0;
        $mobiquo_config['inappreg'] = 0;
        $mobiquo_config['sso_login'] = 0;
        $mobiquo_config['sso_signin'] = 0;
        $mobiquo_config['sso_register'] = 0;
    }
    if (isset($mybb->settings['tapatalk_register_status'])) {
        if ($mybb->settings['tapatalk_register_status'] == 0) {
            $mobiquo_config['sign_in'] = 0;
            $mobiquo_config['inappreg'] = 0;
            $mobiquo_config['sso_signin'] = 0;
            $mobiquo_config['sso_register'] = 0;
            $mobiquo_config['native_register'] = 0;
        } elseif ($mybb->settings['tapatalk_register_status'] == 1) {
            $mobiquo_config['inappreg'] = 0;
            $mobiquo_config['sign_in'] = 0;
            $mobiquo_config['sso_signin'] = 0;
            $mobiquo_config['sso_register'] = 0;
        }
    }
    foreach ($mobiquo_config as $key => $value) {
        if (!array_key_exists($key, $config_list) && $key != 'thlprefix') {
            $config_list[$key] = new xmlrpcval($value, 'string');
        }
    }
    if (!$mybb->user['uid']) {
        if ($mybb->usergroup['cansearch']) {
            $config_list['guest_search'] = new xmlrpcval('1', 'string');
        }
        if ($mybb->usergroup['canviewonline']) {
            $config_list['guest_whosonline'] = new xmlrpcval('1', 'string');
        }
    }
    if ($mybb->settings['minsearchword'] < 1) {
        $mybb->settings['minsearchword'] = 3;
    }
    $config_list['min_search_length'] = new xmlrpcval(intval($mybb->settings['minsearchword']), 'int');
    if (!empty($mybb->settings['tapatalk_push_key'])) {
        $config_list['api_key'] = new xmlrpcval(md5($mybb->settings['tapatalk_push_key']), 'string');
    }
    $config_list['ads_disabled_group'] = new xmlrpcval($mybb->settings['tapatalk_ad_filter'], 'string');
    $response = new xmlrpcval($config_list, 'struct');
    return new xmlrpcresp($response);
}
function check_return_user_type($username)
{
    global $db;
    $session = new user();
    $user_id = get_user_id_by_name($username);
    if (empty($user_id)) {
        $user_id = 0;
    }
    $sql = "SELECT group_name FROM " . USER_GROUP_TABLE . " AS ug LEFT JOIN " . GROUPS_TABLE . " AS g ON ug.group_id = g.group_id WHERE user_id = " . $user_id;
    $query = $db->sql_query($sql);
    $is_ban = $session->check_ban($user_id);
    $user_groups = array();
    while ($row = $db->sql_fetchrow($query)) {
        $user_groups[] = $row['group_name'];
    }
    if (!empty($is_ban)) {
        $user_type = 'banned';
    } else {
        if (in_array('ADMINISTRATORS', $user_groups)) {
            $user_type = 'admin';
        } else {
            if (in_array('GLOBAL_MODERATORS', $user_groups)) {
                $user_type = 'mod';
            } else {
                $user_type = 'normal';
            }
        }
    }
    return new xmlrpcval(basic_clean($user_type), 'base64');
}