/** * MyBB 1.6 * Copyright 2010 MyBB Group, All Rights Reserved * * Website: http://mybb.com * License: http://mybb.com/about/license * * $Id$ */ function task_dailycleanup($task) { global $mybb, $db, $cache, $lang; require_once MYBB_ROOT . "inc/functions_user.php"; // Clear out sessions older than 24h $cut = TIME_NOW - 60 * 60 * 24; $db->delete_query("sessions", "time < '{$cut}'"); // Delete old read topics if ($mybb->settings['threadreadcut'] > 0) { $cut = TIME_NOW - $mybb->settings['threadreadcut'] * 60 * 60 * 24; $db->delete_query("threadsread", "dateline < '{$cut}'"); $db->delete_query("forumsread", "dateline < '{$cut}'"); } // Check PMs moved to trash over a week ago & delete them $timecut = TIME_NOW - 60 * 60 * 24 * 7; $query = $db->simple_select("privatemessages", "pmid, uid, folder", "deletetime<='{$timecut}' AND folder='4'"); while ($pm = $db->fetch_array($query)) { $user_update[$pm['uid']] = $uid; $pm_update[] = $pm['pmid']; } if (!empty($pm_update)) { $db->delete_query("privatemessages", "pmid IN(" . implode(',', $pm_update) . ")"); } if (!empty($user_update)) { foreach ($user_update as $uid) { update_pm_count($uid); } } $cache->update_most_replied_threads(); $cache->update_most_viewed_threads(); $cache->update_birthdays(); $cache->update_forumsdisplay(); add_task_log($task, $lang->task_dailycleanup_ran); }
function mark_pm_unread_func($xmlrpc_params) { global $db, $lang, $theme, $plugins, $mybb, $session, $settings, $cache, $time, $mybbgroups; $input = Tapatalk_Input::filterXmlInput(array('message_id' => 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]; } $sql_array = array("status" => 0, "readtime" => 0); $db->update_query("privatemessages", $sql_array, "pmid='{$input['message_id']}' AND uid='" . $mybb->user['uid'] . "'"); update_pm_count(); return xmlresptrue(); }
/** * MyBB 1.8 * Copyright 2014 MyBB Group, All Rights Reserved * * Website: http://www.mybb.com * License: http://www.mybb.com/about/license * */ function task_dailycleanup($task) { global $mybb, $db, $cache, $lang, $plugins; require_once MYBB_ROOT . "inc/functions_user.php"; $time = array('sessionstime' => TIME_NOW - 60 * 60 * 24, 'threadreadcut' => TIME_NOW - (int) $mybb->settings['threadreadcut'] * 60 * 60 * 24, 'privatemessages' => TIME_NOW - 60 * 60 * 24 * 7, 'deleteinvite' => TIME_NOW - (int) $mybb->settings['deleteinvites'] * 60 * 60 * 24, 'stoppmtracking' => TIME_NOW - 60 * 60 * 24 * 180); if (is_object($plugins)) { $args = array('task' => &$task, 'time' => &$time); $plugins->run_hooks('task_dailycleanup_start', $args); } // Clear out sessions older than 24h $db->delete_query("sessions", "time < '" . (int) $time['sessionstime'] . "'"); // Delete old read topics if ($mybb->settings['threadreadcut'] > 0) { $db->delete_query("threadsread", "dateline < '" . (int) $time['threadreadcut'] . "'"); $db->delete_query("forumsread", "dateline < '" . (int) $time['threadreadcut'] . "'"); } // Check PMs moved to trash over a week ago & delete them $query = $db->simple_select("privatemessages", "pmid, uid, folder", "deletetime<='" . (int) $time['privatemessages'] . "' AND folder='4'"); while ($pm = $db->fetch_array($query)) { $user_update[$pm['uid']] = 1; $pm_update[] = $pm['pmid']; } // Delete old group invites if ($mybb->settings['deleteinvites'] > 0) { $db->delete_query("joinrequests", "dateline < '" . (int) $time['deleteinvite'] . "' AND invite='1'"); } // Stop tracking read PMs after 6 months $sql_array = array("receipt" => 0); $db->update_query("privatemessages", $sql_array, "receipt='2' AND folder!='3' AND status!='0' AND readtime < '" . (int) $time['stoppmtracking'] . "'"); if (is_object($plugins)) { $args = array('user_update' => &$user_update, 'pm_update' => &$pm_update); $plugins->run_hooks('task_dailycleanup_end', $args); } if (!empty($pm_update)) { $db->delete_query("privatemessages", "pmid IN(" . implode(',', $pm_update) . ")"); } if (!empty($user_update)) { foreach ($user_update as $uid) { update_pm_count($uid); } } $cache->update_most_replied_threads(); $cache->update_most_viewed_threads(); $cache->update_birthdays(); $cache->update_forumsdisplay(); add_task_log($task, $lang->task_dailycleanup_ran); }
function get_quote_pm_func($xmlrpc_params) { global $db, $lang, $theme, $plugins, $mybb, $session, $settings, $cache, $time, $mybbgroups; require_once MYBB_ROOT . $mybb->settings['tapatalk_directory'] . '/emoji/emoji.class.php'; $input = Tapatalk_Input::filterXmlInput(array('message_id' => 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]; } if ($mybb->usergroup['cansendpms'] == 0) { return tt_no_permission(); } $query = $db->query("\n\t\tSELECT pm.*, u.username AS quotename\n\t\tFROM " . TABLE_PREFIX . "privatemessages pm\n\t\tLEFT JOIN " . TABLE_PREFIX . "users u ON (u.uid=pm.fromid)\n\t\tWHERE pm.pmid='{$input['message_id']}' AND pm.uid='" . $mybb->user['uid'] . "'\n\t"); $pm = $db->fetch_array($query); $message = $pm['message']; $subject = $pm['subject']; $subject = preg_replace("#(FW|RE):( *)#is", '', $subject); $message = "[quote={$pm['quotename']}]\n{$message}\n[/quote]"; $message = preg_replace('#^/me (.*)$#im', "* " . $pm['quotename'] . " \\1", $message); $subject = "Re: {$subject}"; $result = new xmlrpcval(array('result' => new xmlrpcval(true, 'boolean'), 'result_text' => new xmlrpcval('', 'base64'), 'msg_id' => new xmlrpcval($pm['pmid'], 'string'), 'msg_subject' => new xmlrpcval($subject, 'base64'), 'text_body' => new xmlrpcval(tapatalkEmoji::covertNameToEmoji($message), 'base64')), 'struct'); return new xmlrpcresp($result); }
function create_message_func($xmlrpc_params) { global $db, $lang, $theme, $plugins, $mybb, $session, $settings, $cache, $time, $mybbgroups, $pminfo, $pm; $input = Tapatalk_Input::filterXmlInput(array('user_name' => Tapatalk_Input::RAW, 'subject' => Tapatalk_Input::STRING, 'text_body' => Tapatalk_Input::STRING, 'action' => Tapatalk_Input::INT, 'pm_id' => 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(); } if ($mybb->usergroup['cansendpms'] == 0) { return tt_no_permission(); } $pmhandler = new PMDataHandler(); $pm = array("subject" => $input['subject'], "message" => $input['text_body'], "icon" => 0, "fromid" => $mybb->user['uid'], "do" => $input['action'] == 1 ? 'reply' : 'forward', "pmid" => $input['pm_id']); $pm['to'] = array_map("trim", $input['user_name']); $pm['options'] = array("signature" => 0, "disablesmilies" => 0, "savecopy" => 1, "readreceipt" => 0); $pmhandler->set_data($pm); if (!$pmhandler->validate_pm()) { $pm_errors = $pmhandler->get_friendly_errors(); return xmlrespfalse(implode(" :: ", $pm_errors)); } else { $pminfo = $pmhandler->insert_pm(); $plugins->run_hooks("private_do_send_end"); } return xmlresptrue(); }
function delete_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), $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]; } $query = $db->simple_select("privatemessages", "*", "pmid='{$input['message_id']}' AND uid='" . $mybb->user['uid'] . "' AND folder='4'", array('order_by' => 'pmid')); if ($db->num_rows($query) == 1) { $db->delete_query("privatemessages", "pmid='{$input['message_id']}'"); } else { $sql_array = array("folder" => 4, "deletetime" => TIME_NOW); $db->update_query("privatemessages", $sql_array, "pmid='{$input['message_id']}' AND uid='" . $mybb->user['uid'] . "'"); } update_pm_count(); return xmlresptrue(); }
} eval("\$pmsdownload .= \"" . $templates->get("private_archive_" . $mybb->input['exporttype'] . "_message", 1, 0) . "\";"); $ids .= ",'{$message['pmid']}'"; } if ($mybb->input['exporttype'] == "html") { // Gather global stylesheet for HTML $query = $db->simple_select("themestylesheets", "stylesheet", "sid = '1'", array('limit' => 1)); $css = $db->fetch_field($query, "stylesheet"); } $plugins->run_hooks("private_do_export_end"); eval("\$archived = \"" . $templates->get("private_archive_" . $mybb->input['exporttype'], 1, 0) . "\";"); if ($mybb->get_input('deletepms', MyBB::INPUT_INT) == 1) { // delete the archived pms $db->delete_query("privatemessages", "pmid IN ('0'{$ids})"); // Update PM count update_pm_count(); } if ($mybb->input['exporttype'] == "html") { $filename = "pm-archive.html"; $contenttype = "text/html"; } elseif ($mybb->input['exporttype'] == "csv") { $filename = "pm-archive.csv"; $contenttype = "application/octet-stream"; } else { $filename = "pm-archive.txt"; $contenttype = "text/plain"; } $archived = str_replace("\\\\'", "'", $archived); header("Content-disposition: filename={$filename}"); header("Content-type: " . $contenttype); if ($mybb->input['exporttype'] == "html") {
/** * Marks all forums as read. * */ function mark_all_forums_read() { global $mybb, $db, $cache; // Can only do "true" tracking for registered users if ($mybb->user['uid'] > 0) { $db->update_query("users", array('lastvisit' => TIME_NOW), "uid='" . $mybb->user['uid'] . "'"); require_once MYBB_ROOT . "inc/functions_user.php"; update_pm_count('', 2); if ($mybb->settings['threadreadcut'] > 0) { // Need to loop through all forums and mark them as read $forums = $cache->read('forums'); $update_count = ceil(count($forums) / 20); if ($update_count < 15) { $update_count = 15; } $mark_query = ''; $done = 0; foreach (array_keys($forums) as $fid) { switch ($db->type) { case "pgsql": case "sqlite": $mark_query[] = array('fid' => $fid, 'uid' => $mybb->user['uid'], 'dateline' => TIME_NOW); break; default: if ($mark_query != '') { $mark_query .= ','; } $mark_query .= "('{$fid}', '{$mybb->user['uid']}', '" . TIME_NOW . "')"; } ++$done; // Only do this in loops of $update_count, save query time if ($done % $update_count) { switch ($db->type) { case "pgsql": case "sqlite": foreach ($mark_query as $replace_query) { add_shutdown(array($db, "replace_query"), array("forumsread", $replace_query, array("fid", "uid"))); } $mark_query = array(); break; default: $db->shutdown_query("\n\t\t\t\t\t\t\t\tREPLACE INTO " . TABLE_PREFIX . "forumsread (fid, uid, dateline)\n\t\t\t\t\t\t\t\tVALUES {$mark_query}\n\t\t\t\t\t\t\t"); $mark_query = ''; } } } if ($mark_query != '') { switch ($db->type) { case "pgsql": case "sqlite": foreach ($mark_query as $replace_query) { add_shutdown(array($db, "replace_query"), array("forumsread", $replace_query, array("fid", "uid"))); } break; default: $db->shutdown_query("\n\t\t\t\t\t\t\tREPLACE INTO " . TABLE_PREFIX . "forumsread (fid, uid, dateline)\n\t\t\t\t\t\t\tVALUES {$mark_query}\n\t\t\t\t\t\t"); } } } } else { my_setcookie("mybb[readallforums]", 1); my_setcookie("mybb[lastvisit]", TIME_NOW); my_unsetcookie("mybb[threadread]"); my_unsetcookie("mybb[forumread]"); } }
/** * Load a user via the user credentials. * * @param int The user id. * @param string The user's password. */ function load_user($uid, $password = '') { global $mybb, $db, $time, $lang, $mybbgroups, $session, $cache; // Read the banned cache $bannedcache = $cache->read("banned"); // If the banned cache doesn't exist, update it and re-read it if (!is_array($bannedcache)) { $cache->update_banned(); $bannedcache = $cache->read("banned"); } $uid = intval($uid); $query = $db->query("\n\t\t\tSELECT u.*, f.*\n\t\t\tFROM " . TABLE_PREFIX . "users u \n\t\t\tLEFT JOIN " . TABLE_PREFIX . "userfields f ON (f.ufid=u.uid) \n\t\t\tWHERE u.uid='{$uid}'\n\t\t\tLIMIT 1\n\t\t"); $mybb->user = $db->fetch_array($query); $this->logins = $mybb->user['loginattempts']; $this->failedlogin = $mybb->user['failedlogin']; if ($bannedcache[$uid]) { $banned_user = $bannedcache[$uid]; $mybb->user['bandate'] = $banned_user['dateline']; $mybb->user['banlifted'] = $banned_user['lifted']; $mybb->user['banoldgroup'] = $banned_user['oldgroup']; $mybb->user['banolddisplaygroup'] = $banned_user['olddisplaygroup']; $mybb->user['banoldadditionalgroups'] = $banned_user['oldadditionalgroups']; } // Check the password if we're not using a session if ($password != $mybb->user['loginkey'] || !$mybb->user['uid']) { unset($mybb->user); $this->uid = 0; return false; } $this->uid = $mybb->user['uid']; // Set the logout key for this user $mybb->user['logoutkey'] = md5($mybb->user['loginkey']); // Sort out the private message count for this user. if (($mybb->user['totalpms'] == -1 || $mybb->user['unreadpms'] == -1) && $mybb->settings['enablepms'] != 0) { $update = 0; if ($mybb->user['totalpms'] == -1) { $update += 1; } if ($mybb->user['unreadpms'] == -1) { $update += 2; } require_once MYBB_ROOT . "inc/functions_user.php"; $pmcount = update_pm_count('', $update); if (is_array($pmcount)) { $mybb->user = array_merge($mybb->user, $pmcount); } } $mybb->user['pms_total'] = $mybb->user['totalpms']; $mybb->user['pms_unread'] = $mybb->user['unreadpms']; if ($mybb->user['lastip'] != $this->ipaddress && array_key_exists('lastip', $mybb->user)) { $lastip_add .= ", lastip='" . $db->escape_string($this->ipaddress) . "', longlastip='" . intval(ip2long($this->ipaddress)) . "'"; } // If the last visit was over 900 seconds (session time out) ago then update lastvisit. $time = TIME_NOW; if ($time - $mybb->user['lastactive'] > 900) { $db->shutdown_query("UPDATE " . TABLE_PREFIX . "users SET lastvisit='{$mybb->user['lastactive']}', lastactive='{$time}' {$lastip_add} WHERE uid='{$mybb->user['uid']}'"); $mybb->user['lastvisit'] = $mybb->user['lastactive']; require_once MYBB_ROOT . "inc/functions_user.php"; update_pm_count('', 2); } else { $timespent = TIME_NOW - $mybb->user['lastactive']; $db->shutdown_query("UPDATE " . TABLE_PREFIX . "users SET lastactive='{$time}', timeonline=timeonline+{$timespent} {$lastip_add} WHERE uid='{$mybb->user['uid']}'"); } // Sort out the language and forum preferences. if ($mybb->user['language'] && $lang->language_exists($mybb->user['language'])) { $mybb->settings['bblanguage'] = $mybb->user['language']; } if ($mybb->user['dateformat'] != 0 && $mybb->user['dateformat'] != '') { global $date_formats; if ($date_formats[$mybb->user['dateformat']]) { $mybb->settings['dateformat'] = $date_formats[$mybb->user['dateformat']]; } } // Choose time format. if ($mybb->user['timeformat'] != 0 && $mybb->user['timeformat'] != '') { global $time_formats; if ($time_formats[$mybb->user['timeformat']]) { $mybb->settings['timeformat'] = $time_formats[$mybb->user['timeformat']]; } } // Find out the threads per page preference. if ($mybb->user['tpp']) { $mybb->settings['threadsperpage'] = $mybb->user['tpp']; } // Find out the posts per page preference. if ($mybb->user['ppp']) { $mybb->settings['postsperpage'] = $mybb->user['ppp']; } // Does this user prefer posts in classic mode? if ($mybb->user['classicpostbit']) { $mybb->settings['postlayout'] = 'classic'; } else { $mybb->settings['postlayout'] = 'horizontal'; } // Check if this user is currently banned and if we have to lift it. if (!empty($mybb->user['bandate']) && (isset($mybb->user['banlifted']) && !empty($mybb->user['banlifted'])) && $mybb->user['banlifted'] < $time) { // must have been good.. bans up :D $db->shutdown_query("UPDATE " . TABLE_PREFIX . "users SET usergroup='" . intval($mybb->user['banoldgroup']) . "', additionalgroups='" . $mybb->user['oldadditionalgroups'] . "', displaygroup='" . intval($mybb->user['olddisplaygroup']) . "' WHERE uid='" . $mybb->user['uid'] . "' LIMIT 1"); $db->shutdown_query("DELETE FROM " . TABLE_PREFIX . "banned WHERE uid='" . $mybb->user['uid'] . "'"); // we better do this..otherwise they have dodgy permissions $mybb->user['usergroup'] = $mybb->user['banoldgroup']; $mybb->user['displaygroup'] = $mybb->user['banolddisplaygroup']; $mybb->user['additionalgroups'] = $mybb->user['banoldadditionalgroups']; $cache->update_banned(); $mybbgroups = $mybb->user['usergroup']; if ($mybb->user['additionalgroups']) { $mybbgroups .= ',' . $mybb->user['additionalgroups']; } } else { if (!empty($mybb->user['bandate']) && (empty($mybb->user['banlifted']) || !empty($mybb->user['banlifted']) && $mybb->user['banlifted'] > $time)) { $mybbgroups = $mybb->user['usergroup']; } else { // Gather a full permission set for this user and the groups they are in. $mybbgroups = $mybb->user['usergroup']; if ($mybb->user['additionalgroups']) { $mybbgroups .= ',' . $mybb->user['additionalgroups']; } } } $mybb->usergroup = usergroup_permissions($mybbgroups); if (!$mybb->user['displaygroup']) { $mybb->user['displaygroup'] = $mybb->user['usergroup']; } $mydisplaygroup = usergroup_displaygroup($mybb->user['displaygroup']); if (is_array($mydisplaygroup)) { $mybb->usergroup = array_merge($mybb->usergroup, $mydisplaygroup); } if (!$mybb->user['usertitle']) { $mybb->user['usertitle'] = $mybb->usergroup['usertitle']; } // Update or create the session. if (!defined("NO_ONLINE")) { if (!empty($this->sid)) { $this->update_session($this->sid, $mybb->user['uid']); } else { $this->create_session($mybb->user['uid']); } } return true; }
function get_box_func($xmlrpc_params) { global $db, $lang, $theme, $plugins, $mybb, $session, $settings, $cache, $time, $mybbgroups; $input = Tapatalk_Input::filterXmlInput(array('box_id' => Tapatalk_Input::INT, 'start_num' => Tapatalk_Input::INT, 'last_num' => Tapatalk_Input::INT), $xmlrpc_params); list($start, $limit) = process_page($input['start_num'], $input['last_num']); $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]; } if (!$input['box_id'] || !array_key_exists($input['box_id'], $foldernames)) { $input['box_id'] = 1; } $folder = $input['box_id']; $foldername = $foldernames[$folder]; $lang->pms_in_folder = $lang->sprintf($lang->pms_in_folder, $foldername); if ($folder == 2 || $folder == 3) { $sender = $lang->sentto; } else { $sender = $lang->sender; } // Do Multi Pages $query = $db->simple_select("privatemessages", "COUNT(*) AS total", "uid='" . $mybb->user['uid'] . "' AND folder='{$folder}'"); $count_total = $db->fetch_field($query, 'total'); $query = $db->simple_select("privatemessages", "COUNT(*) AS unread", "uid='" . $mybb->user['uid'] . "' AND folder='{$folder}' AND readtime = 0"); $count_unread = $db->fetch_field($query, 'unread'); // Get all recipients into an array $cached_users = $get_users = array(); $users_query = $db->simple_select("privatemessages", "recipients", "folder='{$folder}' AND uid='{$mybb->user['uid']}'", array('limit_start' => $start, 'limit' => $limit, 'order_by' => 'dateline', 'order_dir' => 'DESC')); while ($row = $db->fetch_array($users_query)) { $recipients = unserialize($row['recipients']); if (is_array($recipients['to']) && count($recipients['to'])) { $get_users = array_merge($get_users, $recipients['to']); } if (is_array($recipients['bcc']) && count($recipients['bcc'])) { $get_users = array_merge($get_users, $recipients['bcc']); } } $get_users = implode(',', array_unique($get_users)); // Grab info if ($get_users) { $users_query = $db->simple_select("users", "uid, username, usergroup, displaygroup", "uid IN ({$get_users})"); while ($user = $db->fetch_array($users_query)) { $cached_users[$user['uid']] = $user; } } $user_online = $folder == 1 ? ', fu.lastactive, fu.invisible, fu.lastvisit ' : ', tu.lastactive, tu.invisible, tu.lastvisit '; $query = $db->query("\n\t\tSELECT pm.*, fu.username AS fromusername, tu.username as tousername, fu.avatar as favatar, tu.avatar as tavatar {$user_online}\n\t\tFROM " . TABLE_PREFIX . "privatemessages pm\n\t\tLEFT JOIN " . TABLE_PREFIX . "users fu ON (fu.uid=pm.fromid)\n\t\tLEFT JOIN " . TABLE_PREFIX . "users tu ON (tu.uid=pm.toid)\n\t\tWHERE pm.folder='{$folder}' AND pm.uid='" . $mybb->user['uid'] . "'\n\t\tORDER BY pm.dateline DESC\n\t\tLIMIT {$start}, {$limit}\n\t"); $message_list = array(); if ($db->num_rows($query) > 0) { while ($message = $db->fetch_array($query)) { $status = 1; if ($message['status'] == 0) { $msgalt = $lang->new_pm; } elseif ($message['status'] == 1) { $msgalt = $lang->old_pm; $status = 2; } elseif ($message['status'] == 3) { $msgalt = $lang->reply_pm; $status = 3; } elseif ($message['status'] == 4) { $msgalt = $lang->fwd_pm; $status = 4; } $msg_from = null; $msg_to = array(); $avatar = ""; $outboxdisplayuserid = 0; // Sent Items or Drafts Folder Check $recipients = unserialize($message['recipients']); if (count($recipients['to']) > 1 || count($recipients['to']) == 1 && count($recipients['bcc']) > 0) { foreach ($recipients['to'] as $uid) { $profilelink = get_profile_link($uid); $user = $cached_users[$uid]; if (!empty($user['username'])) { $msg_to[] = new xmlrpcval(array("username" => new xmlrpcval($user['username'], "base64"), "user_id" => new xmlrpcval($uid, "string"), "user_type" => check_return_user_type($user['username'])), "struct"); } if (($folder == 2 or $folder == 3) && !$outboxdisplayuserid) { $outboxdisplayuserid = $uid; } } /*if(is_array($recipients['bcc']) && count($recipients['bcc'])) { foreach($recipients['bcc'] as $uid) { $profilelink = get_profile_link($uid); $user = $cached_users[$uid]; $msg_to[]=new xmlrpcval($user['username'], "base64"); } }*/ } else { if ($message['toid']) { $tofromusername = $message['tousername']; $tofromuid = $message['toid']; if (!empty($tofromusername)) { $msg_to[] = new xmlrpcval(array("username" => new xmlrpcval($tofromusername, "base64"), "user_id" => new xmlrpcval($message['toid'], "string"), "user_type" => check_return_user_type($tofromusername)), "struct"); } } } $avatar = $message['tavatar']; if ($folder != 2 && $folder != 3) { $tofromusername = $message['fromusername']; $tofromuid = $message['fromid']; if ($tofromuid == 0) { $tofromusername = $lang->mybb_engine; } if (!$tofromusername) { $tofromuid = 0; $tofromusername = $lang->na; } $msg_from = $tofromusername; $avatar = $message['favatar']; } else { if ($outboxdisplayuserid) { $outboxdisplayuser = get_user($outboxdisplayuserid); $avatar = $outboxdisplayuser['avatar']; } } if (!trim($message['subject'])) { $message['subject'] = $lang->pm_no_subject; } $is_online = false; $timecut = TIME_NOW - $mybb->settings['wolcutoff']; if ($message['lastactive'] > $timecut && ($message['invisible'] != 1 || $mybb->usergroup['canviewwolinvis'] == 1) && $message['lastvisit'] != $message['lastactive']) { $is_online = true; } $new_message = array('msg_id' => new xmlrpcval($message['pmid'], 'string'), 'msg_state' => new xmlrpcval($status, 'int'), 'sent_date' => new xmlrpcval(mobiquo_iso8601_encode($message['dateline']), 'dateTime.iso8601'), 'msg_to' => new xmlrpcval($msg_to, 'array'), 'icon_url' => new xmlrpcval(absolute_url($avatar), 'string'), 'msg_subject' => new xmlrpcval($message['subject'], 'base64'), 'short_content' => new xmlrpcval(process_short_content($message['message'], $parser), 'base64'), 'is_online' => new xmlrpcval($is_online, 'boolean')); if ($msg_from !== null) { $new_message['msg_from'] = new xmlrpcval($msg_from, 'base64'); } $message_list[] = new xmlrpcval($new_message, "struct"); } } $result = new xmlrpcval(array('result' => new xmlrpcval(true, 'boolean'), 'result_text' => new xmlrpcval('', 'base64'), 'total_message_count' => new xmlrpcval($count_total, 'int'), 'total_unread_count' => new xmlrpcval($count_unread, 'int'), 'list' => new xmlrpcval($message_list, 'array')), 'struct'); return new xmlrpcresp($result); }
/** * Flag all private messages of a user as deleted * It is also possible to flag pms as deleted of multiple users, when paramater is an array with IDs * * @param integer|array $pm_id ID(s) of User IDs (many IDs require an array) */ function deletePrivateMessagesOfUser($user_id) { require_once MYBB_ROOT . 'inc/functions_user.php'; $this->plugins->run_hooks('private_delete_start'); $data = array('folder' => 4, 'deletetime' => TIME_NOW); if (is_array($user_id)) { $this->db->update_query('privatemessages', $data, 'uid IN (' . implode(',', array_map('intval', $user_id)) . ')'); } else { $this->db->update_query('privatemessages', $data, 'uid = ' . intval($user_id)); } update_pm_count(); $this->plugins->run_hooks('private_delete_end'); }
/** * Recount private messages (total and unread) for users */ function acp_recount_private_messages() { global $db, $mybb, $lang; $query = $db->simple_select("users", "COUNT(uid) as num_users"); $num_users = $db->fetch_field($query, 'num_users'); $page = $mybb->get_input('page', MyBB::INPUT_INT); $per_page = $mybb->get_input('privatemessages', MyBB::INPUT_INT); if ($per_page <= 0) { $per_page = 500; } $start = ($page - 1) * $per_page; $end = $start + $per_page; require_once MYBB_ROOT . "inc/functions_user.php"; $query = $db->simple_select("users", "uid", '', array('order_by' => 'uid', 'order_dir' => 'asc', 'limit_start' => $start, 'limit' => $per_page)); while ($user = $db->fetch_array($query)) { update_pm_count($user['uid']); } check_proceed($num_users, $end, ++$page, $per_page, "privatemessages", "do_recountprivatemessages", $lang->success_rebuilt_private_messages); }
/** * Insert a new private message. * * @return array Array of PM useful data. */ function insert_pm() { global $cache, $db, $mybb, $plugins, $lang; // Yes, validating is required. if (!$this->get_validated()) { die("The PM needs to be validated before inserting it into the DB."); } if (count($this->get_errors()) > 0) { die("The PM is not valid."); } // Assign data to common variable $pm =& $this->data; $pm['pmid'] = intval($pm['pmid']); if (!$pm['icon'] || $pm['icon'] < 0) { $pm['icon'] = 0; } $uid = 0; if (!is_array($pm['recipients'])) { $recipient_list = array(); } else { // Build recipient list foreach ($pm['recipients'] as $recipient) { if ($recipient['bcc']) { $recipient_list['bcc'][] = $recipient['uid']; } else { $recipient_list['to'][] = $recipient['uid']; $uid = $recipient['uid']; } } } $this->pm_insert_data = array('fromid' => intval($pm['sender']['uid']), 'folder' => $pm['folder'], 'subject' => $db->escape_string($pm['subject']), 'icon' => intval($pm['icon']), 'message' => $db->escape_string($pm['message']), 'dateline' => TIME_NOW, 'status' => 0, 'includesig' => $pm['options']['signature'], 'smilieoff' => $pm['options']['disablesmilies'], 'receipt' => intval($pm['options']['readreceipt']), 'readtime' => 0, 'recipients' => $db->escape_string(serialize($recipient_list))); // Check if we're updating a draft or not. $query = $db->simple_select("privatemessages", "pmid, deletetime", "folder='3' AND uid='" . intval($pm['sender']['uid']) . "' AND pmid='{$pm['pmid']}'"); $draftcheck = $db->fetch_array($query); // This PM was previously a draft if ($draftcheck['pmid']) { if ($draftcheck['deletetime']) { // This draft was a reply to a PM $pm['pmid'] = $draftcheck['deletetime']; $pm['do'] = "reply"; } // Delete the old draft as we no longer need it $db->delete_query("privatemessages", "pmid='{$draftcheck['pmid']}'"); } // Saving this message as a draft if ($pm['saveasdraft']) { $this->pm_insert_data['uid'] = $pm['sender']['uid']; // If this is a reply, then piggyback into the deletetime to let us know in the future if ($pm['do'] == "reply" || $pm['do'] == "replyall") { $this->pm_insert_data['deletetime'] = $pm['pmid']; } $plugins->run_hooks("datahandler_pm_insert_updatedraft", $this); $db->insert_query("privatemessages", $this->pm_insert_data); // If this is a draft, end it here - below deals with complete messages return array("draftsaved" => 1); } // Save a copy of the PM for each of our recipients foreach ($pm['recipients'] as $recipient) { // Send email notification of new PM if it is enabled for the recipient $query = $db->simple_select("privatemessages", "dateline", "uid='" . $recipient['uid'] . "' AND folder='1'", array('order_by' => 'dateline', 'order_dir' => 'desc', 'limit' => 1)); $lastpm = $db->fetch_array($query); if ($recipient['pmnotify'] == 1 && $recipient['lastactive'] > $lastpm['dateline']) { if ($recipient['language'] != "" && $lang->language_exists($recipient['language'])) { $uselang = $recipient['language']; } elseif ($mybb->settings['bblanguage']) { $uselang = $mybb->settings['bblanguage']; } else { $uselang = "english"; } if ($uselang == $mybb->settings['bblanguage'] && !empty($lang->emailsubject_newpm)) { $emailsubject = $lang->emailsubject_newpm; $emailmessage = $lang->email_newpm; } else { $userlang = new MyLanguage(); $userlang->set_path(MYBB_ROOT . "inc/languages"); $userlang->set_language($uselang); $userlang->load("messages"); $emailsubject = $userlang->emailsubject_newpm; $emailmessage = $userlang->email_newpm; } if (!$pm['sender']['username']) { $pm['sender']['username'] = $lang->mybb_engine; } $emailmessage = $lang->sprintf($emailmessage, $recipient['username'], $pm['sender']['username'], $mybb->settings['bbname'], $mybb->settings['bburl']); $emailsubject = $lang->sprintf($emailsubject, $mybb->settings['bbname']); $new_email = array("mailto" => $db->escape_string($recipient['email']), "mailfrom" => '', "subject" => $db->escape_string($emailsubject), "message" => $db->escape_string($emailmessage), "headers" => ''); $db->insert_query("mailqueue", $new_email); $cache->update_mailqueue(); } $this->pm_insert_data['uid'] = $recipient['uid']; $this->pm_insert_data['toid'] = $recipient['uid']; $plugins->run_hooks("datahandler_pm_insert", $this); $this->pmid = $db->insert_query("privatemessages", $this->pm_insert_data); // If PM noices/alerts are on, show! if ($recipient['pmnotice'] == 1) { $updated_user = array("pmnotice" => 2); $db->update_query("users", $updated_user, "uid='{$recipient['uid']}'"); } // Update private message count (total, new and unread) for recipient require_once MYBB_ROOT . "/inc/functions_user.php"; update_pm_count($recipient['uid'], 7, $recipient['lastactive']); } // Are we replying or forwarding an existing PM? if ($pm['pmid']) { if ($pm['do'] == "reply" || $pm['do'] == "replyall") { $sql_array = array('status' => 3, 'statustime' => TIME_NOW); $db->update_query("privatemessages", $sql_array, "pmid={$pm['pmid']} AND uid={$pm['sender']['uid']}"); } elseif ($pm['do'] == "forward") { $sql_array = array('status' => 4, 'statustime' => TIME_NOW); $db->update_query("privatemessages", $sql_array, "pmid={$pm['pmid']} AND uid={$pm['sender']['uid']}"); } } // If we're saving a copy if ($pm['options']['savecopy'] != 0) { if (isset($recipient_list['to']) && count($recipient_list['to']) == 1) { $this->pm_insert_data['toid'] = $uid; } else { $this->pm_insert_data['toid'] = 0; } $this->pm_insert_data['uid'] = intval($pm['sender']['uid']); $this->pm_insert_data['folder'] = 2; $this->pm_insert_data['status'] = 1; $this->pm_insert_data['receipt'] = 0; $plugins->run_hooks("datahandler_pm_insert_savedcopy", $this); $db->insert_query("privatemessages", $this->pm_insert_data); // Because the sender saved a copy, update their total pm count require_once MYBB_ROOT . "/inc/functions_user.php"; update_pm_count($pm['sender']['uid'], 1); } // Return back with appropriate data return array("messagesent" => 1); }
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); }
function get_box_info_func($xmlrpc_params) { global $db, $lang, $theme, $plugins, $mybb, $session, $settings, $cache, $time, $mybbgroups; $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(); } $foldercache = array(); $folderids = array(); $folderlist = ''; $foldersexploded = explode("\$%%\$", $mybb->user['pmfolders']); foreach ($foldersexploded as $key => $folders) { $folderinfo = explode("**", $folders, 2); $foldername = $folderinfo[1]; $fid = $folderinfo[0]; $foldername = get_pm_folder_name($fid, $foldername); $type = ""; if ($fid == 1) { $type = "INBOX"; } else { if ($fid == 2) { $type = "SENT"; } else { continue; } } // return inbox and send box only $foldercache[$fid] = array("fid" => $fid, "name" => $foldername, "total" => 0, "unread" => 0, "type" => $type); $folderids[] = intval($fid); } $query = $db->simple_select("privatemessages", "folder, count(*) as total", "FIND_IN_SET(folder, '" . implode(",", $folderids) . "') AND uid='{$mybb->user['uid']}' group by folder"); while ($folder = $db->fetch_array($query)) { $foldercache[$folder['folder']]['total'] = $folder['total']; } $query = $db->simple_select("privatemessages", "folder, count(*) as unread", "FIND_IN_SET(folder, '" . implode(",", $folderids) . "') AND uid='{$mybb->user['uid']}' AND readtime = 0 group by folder"); while ($folder = $db->fetch_array($query)) { $foldercache[$folder['folder']]['unread'] = $folder['unread']; } $folder_list = array(); foreach ($foldercache as $fid => $folder) { $folder_list[] = new xmlrpcval(array('box_id' => new xmlrpcval($fid, 'string'), 'box_name' => new xmlrpcval($folder['name'], 'base64'), 'msg_count' => new xmlrpcval($folder['total'], 'int'), 'unread_count' => new xmlrpcval($folder['unread'], 'int'), 'box_type' => new xmlrpcval($folder['type'], 'string')), 'struct'); } $spaceused = 0; if ($mybb->usergroup['pmquota'] != '0' && $mybb->usergroup['cancp'] != 1) { $query = $db->simple_select("privatemessages", "COUNT(*) AS total", "uid='" . $mybb->user['uid'] . "'"); $pmscount = $db->fetch_array($query); if ($pmscount['total'] > 0) { $spaceused = $mybb->usergroup['pmquota'] - $pmscount['total']; } } $result = new xmlrpcval(array('result' => new xmlrpcval(true, 'boolean'), 'result_text' => new xmlrpcval('', 'base64'), 'message_room_count' => new xmlrpcval($mybb->usergroup['cancp'] == 1 ? 100 : $spaceused, 'int'), 'list' => new xmlrpcval($folder_list, 'array')), 'struct'); return $result; }