public static function create_array($ids) { global $vbulletin; $set = $vbulletin->db->query_read_slave(" SELECT announcementid, startdate, title, announcement.views, forumid, user.username, user.userid, user.usertitle, user.customtitle, user.usergroupid, IF(displaygroupid=0, user.usergroupid, displaygroupid) AS displaygroupid, infractiongroupid FROM " . TABLE_PREFIX . "announcement AS announcement LEFT JOIN " . TABLE_PREFIX . "user AS user USING (userid) WHERE announcementid IN (" . implode(',', array_map('intval', $ids)) . ") "); $items = array(); while ($record = $vbulletin->db->fetch_array($set)) { fetch_musername($record); $record['title'] = fetch_censored_text($record['title']); $record['postdate'] = vbdate($vbulletin->options['dateformat'], $record['startdate']); $record['statusicon'] = 'new'; $record['views'] = vb_number_format($record['views']); $record['forumtitle'] = $vbulletin->forumcache["$record[forumid]"]['title']; $show['forumtitle'] = ($record['forumid'] == -1) ? false : true; $announcement = new vBForum_Search_Result_Announcement(); $announcement->record = $record; $items[$record['announcementid']] = $announcement; } return $items; }
/** * Create the results based on a list of ids return from the search implmentation * * @param vB_Current_User $user * @param vB_Search_Criteria criteria for the search * @return vB_Search_Results */ public static function create_from_criteria($user, $criteria, $searchcontroller = null) { global $vbulletin; $results = new vB_Search_Results(); $results->user = $user; $results->criteria = $criteria; $start = microtime(); if (is_null($searchcontroller)) { $searchcontroller = vB_Search_Core::get_instance()->get_search_controller(); $searchcontroller->clear(); } $results->results = $searchcontroller->get_results($user, $criteria); //move log_search call after get_results to allow for any changes to the $criteria //object that might be made by the searchcontroller $results->searchid = $results->log_search(); $results->dateline = TIMENOW; $results->cache_results(); $searchtime = vb_number_format(fetch_microtime_difference($start), 2); $results->searchtime = $searchtime; $results->complete_search($searchtime); //log tag search $filter = $criteria->get_filters('tag'); if (isset($filter[vB_Search_Core::OP_EQ])) { $dm = datamanager_init('tag', $vbulletin, ERRTYPE_ARRAY); $dm->log_tag_search($filter[vB_Search_Core::OP_EQ]); } return $results; }
/** * Creates the milestone stats array (target date, total issues, progress). * Array contains formatted data. * * @param array Array of milestone info * @param array Array of raw count info * * @return array Formatted stats data */ function prepare_milestone_stats($milestone, $raw_counts) { global $vbulletin; $stats = array('total_issues' => vb_number_format($raw_counts['total_issues']), 'total_completed' => vb_number_format($raw_counts['total_completed']), 'total_active' => vb_number_format($raw_counts['total_active']), 'percent_completed' => vb_number_format($raw_counts['percent_completed'])); if ($milestone['completeddate']) { $stats['completed_date'] = vbdate($vbulletin->options['dateformat'], $milestone['completeddate']); $stats['milestone_overdue'] = false; } else { $stats['target_date'] = vbdate($vbulletin->options['dateformat'], $milestone['targetdate']); $stats['milestone_overdue'] = ($milestone['targetdate'] and $milestone['targetdate'] < TIMENOW); } return $stats; }
/** * Verify that the name doesn't already exists * * @param string Group Name * * @return boolean */ function verify_name(&$name) { // replace html-encoded spaces with actual spaces $name = preg_replace('/&#(0*32|x0*20);/', ' ', $name); $name = trim($name); if (!$this->condition or $name != $this->existing['name']) { $dupegroup = $this->registry->db->query_first("\n\t\t\t\tSELECT *\n\t\t\t\tFROM " . TABLE_PREFIX . "socialgroup\n\t\t\t\tWHERE name = '" . $this->registry->db->escape_string($name) . "'\n\t\t\t\t\tAND groupid <> " . intval($this->fetch_field('groupid'))); if ($dupegroup) { $this->error('group_already_exists_view_x', 'group.php?' . $this->registry->session->vars['sessionurl'] . 'do=view&groupid=' . $dupegroup['groupid']); return false; } } if (empty($name)) { $this->error('must_enter_group_name'); return false; } if (vbstrlen($name, true) > $this->registry->options['sg_name_maxchars']) { $this->error('name_too_long_max_x', vb_number_format($this->registry->options['sg_name_maxchars'])); return false; } return true; }
} $photoplog['select_row'] = htmlspecialchars_uni(photoplog_get_category_title($photoplog_file_catid)); $photoplog['title'] = $photoplog_file_info['title']; $photoplog['title'] = photoplog_process_text($photoplog['title'], $photoplog_file_catid, true, false); if ($photoplog['title'] == $vbphrase['photoplog_untitled']) { $photoplog['title'] = ''; } $photoplog['description'] = $photoplog_file_info['description']; $photoplog['description'] = photoplog_process_text($photoplog['description'], $photoplog_file_catid, false, false); $photoplog_fielddata = $photoplog_file_info['fielddata']; $photoplog_fielddata = $photoplog_fielddata == '' ? array() : unserialize($photoplog_fielddata); if (!is_array($photoplog_fielddata)) { $photoplog_fielddata = array(); } $photoplog['maxfilesize'] = intval($permissions['photoplogmaxfilesize']); $photoplog['maxfilesize'] = vb_number_format($photoplog['maxfilesize'], 1, true); $do_html = 0; $do_smilies = 0; $do_bbcode = 0; $do_imgcode = 0; if ($photoplog_file_catid > 0 && in_array($photoplog_file_catid, array_keys($photoplog_ds_catopts))) { $photoplog_categorybit = $photoplog_ds_catopts["{$photoplog_file_catid}"]['options']; $photoplog_catoptions = convert_bits_to_array($photoplog_categorybit, $photoplog_categoryoptions); $do_html = $photoplog_catoptions['allowhtml'] ? 1 : 0; $do_smilies = $photoplog_catoptions['allowsmilies'] ? 1 : 0; $do_bbcode = $photoplog_catoptions['allowbbcode'] ? 1 : 0; // this is to show the little image toolbar icon $do_imgcode = $photoplog_catoptions['allowimgcode'] ? 1 : 0; $vbulletin->options['allowbbimagecode'] = $do_imgcode; } else { photoplog_output_page('photoplog_error_page', $vbphrase['photoplog_error'], $vbphrase['photoplog_no'] . ' ' . $vbphrase['photoplog_category']);
// build group template eval('$messagelist_periodgroups .= "' . fetch_template('pm_messagelist_periodgroup') . '";'); } // build pagenav $pagenav = construct_page_nav($vbulletin->GPC['pagenumber'], $vbulletin->GPC['perpage'], $totalmessages, 'private.php?' . $vbulletin->session->vars['sessionurl'] . 'folderid=' . $vbulletin->GPC['folderid'] . '&pp=' . $vbulletin->GPC['perpage']); } if ($vbulletin->GPC['folderid'] == -1) { $show['sentto'] = true; $show['movetofolder'] = false; } else { $show['sentto'] = false; $show['movetofolder'] = true; } $totalmessages = vb_number_format($totalmessages); $pmtotal = vb_number_format($vbulletin->userinfo['pmtotal']); $pmquota = vb_number_format($vbulletin->userinfo['permissions']['pmquota']); $templatename = 'pm_messagelist'; } // ############################################################################# if ($templatename != '') { // draw cp nav bar construct_usercp_nav($templatename); // build navbar $navbits = construct_navbits($navbits); eval('$navbar = "' . fetch_template('navbar') . '";'); ($hook = vBulletinHook::fetch_hook('private_complete')) ? eval($hook) : false; // print page eval('$HTML = "' . fetch_template($templatename) . '";'); eval('print_output("' . fetch_template('USERCP_SHELL') . '");'); } /*======================================================================*\
} if (!($forumperms & $vbulletin->bf_ugp_forumpermissions['canviewothers']) and ($threadinfo['postuserid'] != $vbulletin->userinfo['userid'] or !$vbulletin->userinfo['userid'])) { print_no_permission(); } $attachs = $db->query_read_slave("\n\t\tSELECT attachment.*\n\t\tFROM " . TABLE_PREFIX . "post AS post\n\t\tINNER JOIN " . TABLE_PREFIX . "attachment AS attachment ON (attachment.postid=post.postid AND attachment.visible=1)\n\t\tWHERE threadid = {$threadinfo['threadid']}\n\t\t\tAND post.visible = 1\n\t\tORDER BY filename DESC\n\t"); if ($db->num_rows($attachs)) { require_once DIR . '/includes/functions_bigthree.php'; while ($attachment = $db->fetch_array($attachs)) { // hide users in Coventry $ast = ''; if (in_coventry($attachment['userid']) and !can_moderate($threadinfo['forumid'])) { continue; } $attachment['filename'] = fetch_censored_text(htmlspecialchars_uni($attachment['filename'])); $attachment['attachmentextension'] = strtolower(file_extension($attachment['filename'])); $attachment['filesize'] = vb_number_format($attachment['filesize'], 1, true); exec_switch_bg(); eval('$attachments .= "' . fetch_template('attachmentbit') . '";'); } ($hook = vBulletinHook::fetch_hook('misc_showattachments_complete')) ? eval($hook) : false; eval('print_output("' . fetch_template('ATTACHMENTS') . '");'); } else { eval(standard_error(fetch_error('noattachments'))); } } // ############################### start show avatars ############################### if ($_REQUEST['do'] == 'showavatars') { $vbulletin->input->clean_array_gpc('r', array('pagenumber' => TYPE_UINT)); ($hook = vBulletinHook::fetch_hook('misc_avatars_start')) ? eval($hook) : false; $perpage = $vbulletin->options['numavatarsperpage']; $totalavatars = $db->query_first_slave("\n\t\tSELECT COUNT(*) AS count\n\t\tFROM " . TABLE_PREFIX . "avatar AS avatar\n\t\tLEFT JOIN " . TABLE_PREFIX . "imagecategorypermission AS perm ON (perm.imagecategoryid=avatar.imagecategoryid AND perm.usergroupid=" . $vbulletin->userinfo['usergroupid'] . ")\n\t\tWHERE ISNULL(perm.imagecategoryid)\n\t");
$totalpages = ceil($totalinf / $vbulletin->GPC['perpage']); $args = '&status=' . $vbulletin->GPC['status'] . '&u=' . $vbulletin->GPC['userid'] . '&whoadded=' . $vbulletin->GPC['whoadded'] . '&startstamp=' . $vbulletin->GPC['start'] . '&endstamp=' . $vbulletin->GPC['end'] . '&pp=' . $vbulletin->GPC['perpage'] . '&page=' . $vbulletin->GPC['pagenumber'] . '&infractionlevelid=' . $vbulletin->GPC['infractionlevelid'] . '&orderby='; $infractions = $db->query_read("\n\t\tSELECT infraction.*,\n\t\t\tuser2.username,\n\t\t\tuser.username AS leftby_username,\n\t\t\tIF(ISNULL(post.postid) AND infraction.postid != 0, 1, 0) AS postdeleted\n\t\tFROM " . TABLE_PREFIX . "infraction AS infraction\n\t\tLEFT JOIN " . TABLE_PREFIX . "user AS user ON (infraction.whoadded = user.userid)\n\t\tLEFT JOIN " . TABLE_PREFIX . "user AS user2 ON (infraction.userid = user2.userid)\n\t\tLEFT JOIN " . TABLE_PREFIX . "post AS post ON (infraction.postid = post.postid)\n\t\tWHERE {$condition}\n\t\tORDER BY {$orderby}\n\t\tLIMIT {$startat}, " . $vbulletin->GPC['perpage']); if ($db->num_rows($infractions)) { if ($vbulletin->GPC['pagenumber'] != 1) { $prv = $vbulletin->GPC['pagenumber'] - 1; $firstpage = "<input type=\"button\" class=\"button\" tabindex=\"1\" value=\"« " . $vbphrase['first_page'] . "\" onclick=\"window.location='admininfraction.php?" . $vbulletin->session->vars['sessionurl'] . "do=dolist" . $args . $vbulletin->GPC['orderby'] . "&page=1'\">"; $prevpage = "<input type=\"button\" class=\"button\" tabindex=\"1\" value=\"< " . $vbphrase['prev_page'] . "\" onclick=\"window.location='admininfraction.php?" . $vbulletin->session->vars['sessionurl'] . "do=dolist" . $args . $vbulletin->GPC['orderby'] . "&page={$prv}'\">"; } if ($vbulletin->GPC['pagenumber'] != $totalpages) { $nxt = $vbulletin->GPC['pagenumber'] + 1; $nextpage = "<input type=\"button\" class=\"button\" tabindex=\"1\" value=\"" . $vbphrase['next_page'] . " >\" onclick=\"window.location='admininfraction.php?" . $vbulletin->session->vars['sessionurl'] . "do=dolist" . $args . $vbulletin->GPC['orderby'] . "&page={$nxt}'\">"; $lastpage = "<input type=\"button\" class=\"button\" tabindex=\"1\" value=\"" . $vbphrase['last_page'] . " »\" onclick=\"window.location='admininfraction.php?" . $vbulletin->session->vars['sessionurl'] . "do=dolist" . $args . $vbulletin->GPC['orderby'] . "&page={$totalpages}'\">"; } print_form_header('admininfraction', 'remove'); print_table_header(construct_phrase($vbphrase['infraction_viewer_page_x_y_there_are_z_total_log_entries'], vb_number_format($vbulletin->GPC['pagenumber']), vb_number_format($totalpages), vb_number_format($counter['total'])), 8); $headings = array(); $headings[] = "<a href=\"admininfraction.php?" . $vbulletin->session->vars['sessionurl'] . "do=dolist" . $args . "\" title=\"" . $vbphrase['order_by_username'] . "\">" . $vbphrase['user_name'] . "</a>"; $headings[] = "<a href=\"admininfraction.php?" . $vbulletin->session->vars['sessionurl'] . "do=dolist" . $args . "leftby_username\" title=\"" . $vbphrase['order_by_username'] . "\">" . $vbphrase['left_by'] . "</a>"; $headings[] = "<a href=\"admininfraction.php?" . $vbulletin->session->vars['sessionurl'] . "do=dolist" . $args . "date\" title=\"" . $vbphrase['order_by_date'] . "\">" . $vbphrase['date'] . "</a>"; $headings[] = $vbphrase['infraction_type']; $headings[] = "<a href=\"admininfraction.php?" . $vbulletin->session->vars['sessionurl'] . "do=dolist" . $args . "points\" title=\"" . $vbphrase['order_by_points'] . "\">" . $vbphrase['points'] . "</a>"; $headings[] = "<a href=\"admininfraction.php?" . $vbulletin->session->vars['sessionurl'] . "do=dolist" . $args . "expires\" title=\"" . $vbphrase['order_by_expiration'] . "\">" . $vbphrase['expires'] . "</a>"; $headings[] = $vbphrase['post']; $headings[] = $vbphrase['controls']; print_cells_row($headings, 1); while ($infraction = $db->fetch_array($infractions)) { $cell = array(); $cell[] = "<a href=\"user.php?" . $vbulletin->session->vars['sessionurl'] . "do=edit&u={$infraction['userid']}\"><b>{$infraction['username']}</b></a>"; $cell[] = "<a href=\"user.php?" . $vbulletin->session->vars['sessionurl'] . "do=edit&u={$infraction['whoadded']}\"><b>{$infraction['leftby_username']}</b></a>"; $cell[] = '<span class="smallfont">' . vbdate($vbulletin->options['logdateformat'], $infraction['dateline']) . '</span>';
} $option['number'] = $counter; //number of the option //Now we check if the user has voted or not if ($showresults or $uservoted) { // user did vote or poll is closed if ($value <= 0) { $option['percentraw'] = 0; } else { if ($pollinfo['multiple']) { $option['percentraw'] = $value < $pollinfo['voters'] ? $value / $pollinfo['voters'] * 100 : 100; } else { $option['percentraw'] = $value < $pollinfo['numbervotes'] ? $value / $pollinfo['numbervotes'] * 100 : 100; } } $option['percent'] = vb_number_format($option['percentraw'], 2); $option['graphicnumber'] = $option['number'] % 6 + 1; $option['barnumber'] = round($option['percent']) * 2; $option['remainder'] = 201 - $option['barnumber']; // Phrase parts below if ($nopermission) { $pollstatus = $vbphrase['you_may_not_vote_on_this_poll']; } else { if ($showresults) { $pollstatus = $vbphrase['this_poll_is_closed']; } else { if ($uservoted) { $pollstatus = $vbphrase['you_have_already_voted_on_this_poll']; } } }
print_form_header('user', 'dopruneusers'); construct_hidden_code('usergroupid', $vbulletin->GPC['usergroupid']); construct_hidden_code('daysprune', $vbulletin->GPC['daysprune']); construct_hidden_code('minposts', $vbulletin->GPC['minposts']); construct_hidden_code('joindate[day]', $vbulletin->GPC['joindate']['day']); construct_hidden_code('joindate[month]', $vbulletin->GPC['joindate']['month']); construct_hidden_code('joindate[year]', $vbulletin->GPC['joindate']['year']); construct_hidden_code('order', $order); print_table_header(construct_phrase($vbphrase['showing_users_x_to_y_of_z'], 1, $numusers, $numusers), 7); print_cells_row(array('Userid', $vbphrase['username'], $vbphrase['email'], $vbphrase['post_count'], $vbphrase['last_activity'], $vbphrase['join_date'], '<input type="checkbox" name="allbox" onclick="js_check_all(this.form)" title="' . $vbphrase['check_all'] . '" checked="checked" />'), 1); while ($user = $db->fetch_array($users)) { $cell = array(); $cell[] = $user['userid']; $cell[] = "<a href=\"user.php?" . $vbulletin->session->vars['sessionurl'] . "do=edit&u={$user['userid']}\" target=\"_blank\">{$user['username']}</a><br /><span class=\"smallfont\">{$user['title']}" . iif($user['moderatorid'], ', Moderator', '') . "</span>"; $cell[] = "<a href=\"mailto:{$user['email']}\">{$user['email']}</a>"; $cell[] = vb_number_format($user['posts']); $cell[] = vbdate($vbulletin->options['dateformat'], $user['lastactivity']); $cell[] = vbdate($vbulletin->options['dateformat'], $user['joindate']); if ($user['userid'] == $vbulletin->userinfo['userid'] or $user['usergroupid'] == 6 or $user['usergroupid'] == 5 or $user['moderatorid'] or is_unalterable_user($user['userid'])) { $cell[] = '<input type="button" class="button" value=" ! " onclick="js_alert_no_permission()" />'; } else { $cell[] = "<input type=\"checkbox\" name=\"users[{$user['userid']}]\" value=\"1\" checked=\"checked\" tabindex=\"1\" />"; } print_cells_row($cell); } print_description_row('<center><span class="smallfont"> <b>' . $vbphrase['action'] . ': <label for="dw_delete"><input type="radio" name="dowhat" value="delete" id="dw_delete" tabindex="1" />' . $vbphrase['delete'] . '</label> <label for="dw_move"><input type="radio" name="dowhat" value="move" id="dw_move" tabindex="1" />' . $vbphrase['move'] . '</label> <select name="movegroup" tabindex="1" class="bginput">' . $groupslist . '</select></b> </span></center>', 0, 7);
if ($vbulletin->GPC['product']) { if ($vbulletin->GPC['product'] == 'vbulletin') { $sqlconds[] = "product IN ('', 'vbulletin')"; } else { $sqlconds[] = "product = '" . $db->escape_string($vbulletin->GPC['product']) . "'"; } } $logs = $db->query_first("\n\t\tSELECT COUNT(*) AS total\n\t\tFROM " . TABLE_PREFIX . "moderatorlog\n\t\tWHERE " . (!empty($sqlconds) ? implode("\r\n\tAND ", $sqlconds) : "") . "\n\t"); if ($logs['total']) { print_form_header('modlog', 'doprunelog'); construct_hidden_code('datecut', $datecut); construct_hidden_code('modaction', $vbulletin->GPC['modaction']); construct_hidden_code('userid', $vbulletin->GPC['userid']); construct_hidden_code('product', $vbulletin->GPC['product']); print_table_header($vbphrase['prune_moderator_log']); print_description_row(construct_phrase($vbphrase['are_you_sure_you_want_to_prune_x_log_entries_from_moderator_log'], vb_number_format($logs['total']))); print_submit_row($vbphrase['yes'], 0, 0, $vbphrase['no']); } else { print_stop_message('no_logs_matched_your_query'); } } // ###################### Start do prune log ####################### if ($_POST['do'] == 'doprunelog' and can_access_logs($vbulletin->config['SpecialUsers']['canpruneadminlog'], 0, '<p>' . $vbphrase['control_panel_log_pruning_permission_restricted'] . '</p>')) { $vbulletin->input->clean_array_gpc('p', array('datecut' => TYPE_UINT, 'modaction' => TYPE_STR, 'userid' => TYPE_UINT, 'product' => TYPE_STR)); $sqlconds = array("dateline < " . $vbulletin->GPC['datecut']); if (!empty($vbulletin->GPC['modaction'])) { $sqlconds[] = "action LIKE '%" . $db->escape_string_like($vbulletin->GPC['modaction']) . "%'"; } if (!empty($vbulletin->GPC['userid'])) { $sqlconds[] = "userid = " . $vbulletin->GPC['userid']; }
public function cropImg($imgInfo, $maxwidth = 100, $maxheight = 100, $forceResize = false) { $thumbnail = array('filedata' => '', 'filesize' => 0, 'dateline' => 0, 'imageerror' => ''); $filename = $imgInfo['filename']; $imgInfo['extension'] = strtoupper($imgInfo['extension']); if ($imgInfo['extension'] == 'JPG') { $imgInfo['extension'] = 'JPEG'; } if ($validfile = $this->isValidThumbnailExtension($imgInfo['extension'])) { $thumbnail['source_width'] = $new_width = $width = $imgInfo['width']; $thumbnail['source_height'] = $new_height = $height = $imgInfo['height']; if ($forceResize or $width >= $maxwidth or $height >= $maxheight) { $memoryok = true; $checkmem = false; if (function_exists('memory_get_usage') and $memory_limit = @ini_get('memory_limit') and $memory_limit != -1) { $memorylimit = vb_number_format($memory_limit, 0, false, null, ''); $memoryusage = memory_get_usage(); $freemem = $memorylimit - $memoryusage; $checkmem = true; $tmemory = $width * $height * ($imgInfo['extension'] == 'JPEG' ? 5 : 2) + 7372.8 + sqrt(sqrt($width * $height)); $tmemory += 166000; // fudge factor, object overhead, etc if ($freemem > 0 and $tmemory > $freemem and $tmemory <= $memorylimit * 3) { // attempt to increase memory within reason, no more than triple if (($current_memory_limit = vB_Utilities::ini_size_to_bytes(@ini_get('memory_limit'))) < $memorylimit + $tmemory and $current_memory_limit > 0) { @ini_set('memory_limit', $memorylimit + $tmemory); } $memory_limit = @ini_get('memory_limit'); $memorylimit = vb_number_format($memory_limit, 0, false, null, ''); $memoryusage = memory_get_usage(); $freemem = $memorylimit - $memoryusage; } } $fh = fopen($filename, 'w'); fwrite($fh, $imgInfo['filedata']); fclose($fh); switch ($imgInfo['extension']) { case 'GIF': if (function_exists('imagecreatefromgif')) { if ($checkmem) { if ($freemem > 0 and $tmemory > $freemem) { throw new vB_Exception_Api('thumbnail_notenoughmemory'); } } if ($memoryok and !($image = @imagecreatefromgif($filename))) { throw new vB_Exception_Api('thumbnail_nocreateimage_gif'); } } else { throw new vB_Exception_Api('thumbnail_nosupport'); } break; case 'JPEG': if (function_exists('imagecreatefromjpeg')) { if ($checkmem) { if ($freemem > 0 and $tmemory > $freemem) { throw new vB_Exception_Api('thumbnail_notenoughmemory'); } } if ($memoryok and !($image = @imagecreatefromjpeg($filename))) { throw new vB_Exception_Api('thumbnail_nocreateimage_jpeg'); } } else { throw new vB_Exception_Api('thumbnail_nosupport'); } break; case 'PNG': if (function_exists('imagecreatefrompng')) { if ($checkmem) { if ($freemem > 0 and $tmemory > $freemem) { throw new vB_Exception_Api('thumbnail_notenoughmemory'); } } if ($memoryok and !($image = @imagecreatefrompng($filename))) { throw new vB_Exception_Api('thumbnail_nocreateimage_png'); } } else { throw new vB_Exception_Api('thumbnail_nosupport'); } break; } if ($image) { $xratio = $maxwidth == 0 ? 1 : $width / $maxwidth; $yratio = $maxheight == 0 ? 1 : $height / $maxheight; if ($xratio > $yratio) { $new_width = round($width / $xratio); $new_height = round($height / $xratio); } else { $new_width = round($width / $yratio); $new_height = round($height / $yratio); } } if (!($finalimage = @imagecreatetruecolor($new_width, $new_height))) { imagedestroy($image); throw new vB_Exception_Api('thumbnail_nocreateimage_truecolor'); } $bgcolor = imagecolorallocate($finalimage, 255, 255, 255); imagefill($finalimage, 0, 0, $bgcolor); imagecopyresampled($finalimage, $image, 0, 0, $imgInfo['x1'], $imgInfo['y1'], $new_width, $new_height, $imgInfo['width'], $imgInfo['height']); imagedestroy($image); if ($imgInfo['extension'] != 'GIF') { $this->unsharpmask($finalimage); } ob_start(); $new_extension = $this->printImage($finalimage, $imgInfo['extension'], false, 75); $thumbnail['filedata'] = ob_get_contents(); ob_end_clean(); $thumbnail['width'] = $new_width; $thumbnail['height'] = $new_height; $extension = $imgInfo['extension']; if ($new_extension != $extension) { $thumbnail['filename'] = preg_replace('#' . preg_quote($extension, '#') . '$#', $new_extension, $filename); } } else { // image is a thumbnail size already if ($imgInfo['width'] > 0 and $imgInfo['height'] > 0) { $thumbnail['filedata'] = @file_get_contents($filename); $thumbnail['width'] = $imgInfo['width']; $thumbnail['height'] = $imgInfo['height']; } else { throw new vB_Exception_Api('thumbnail_nogetimagesize'); } } } else { if (!$validfile) { throw new vB_Exception_Api('thumbnail_nosupport'); } } if (!empty($thumbnail['filedata'])) { $thumbnail['filesize'] = strlen($thumbnail['filedata']); $thumbnail['dateline'] = vB::getRequest()->getTimeNow(); } @unlink($filename); return $thumbnail; }
/** * Takes information regardign a group, and prepares the information within it * for display * * @param array Group Array * @param bool Whether to fetch group members and avatars * * @return array Group Array with prepared information * */ function prepare_socialgroup($group, $fetchmembers = false) { global $vbulletin; if (!is_array($group)) { return array(); } if ($fetchmembers) { $membersinfo = cache_group_members(); $group['membersinfo'] = $membersinfo[$group['groupid']]; } $group['joindate'] = !empty($group['joindate']) ? vbdate($vbulletin->options['dateformat'], $group['joindate'], true) : ''; $group['createtime'] = !empty($group['createdate']) ? vbdate($vbulletin->options['timeformat'], $group['createdate'], true) : ''; $group['createdate'] = !empty($group['createdate']) ? vbdate($vbulletin->options['dateformat'], $group['createdate'], true) : ''; $group['lastupdatetime'] = !empty($group['lastupdate']) ? vbdate($vbulletin->options['timeformat'], $group['lastupdate'], true) : ''; $group['lastupdatedate'] = !empty($group['lastupdate']) ? vbdate($vbulletin->options['dateformat'], $group['lastupdate'], true) : ''; $group['visible'] = vb_number_format($group['visible']); $group['moderation'] = vb_number_format($group['moderation']); $group['members'] = vb_number_format($group['members']); $group['moderatedmembers'] = vb_number_format($group['moderatedmembers']); $group['categoryname'] = htmlspecialchars_uni($group['categoryname']); $group['discussions'] = vb_number_format($group['discussions']); $group['lastdiscussion'] = fetch_word_wrapped_string(fetch_censored_text($group['lastdiscussion'])); $group['trimdiscussion'] = fetch_trimmed_title($group['lastdiscussion']); if (!($group['options'] & $vbulletin->bf_misc_socialgroupoptions['enable_group_albums'])) { // albums disabled in this group - force 0 pictures $group['picturecount'] = 0; } $group['rawpicturecount'] = $group['picturecount']; $group['picturecount'] = vb_number_format($group['picturecount']); $group['rawname'] = $group['name']; $group['rawdescription'] = $group['description']; $group['name'] = fetch_word_wrapped_string(fetch_censored_text($group['name'])); if ($group['description']) { $group['shortdescription'] = fetch_word_wrapped_string(fetch_censored_text(fetch_trimmed_title($group['description'], 185))); } else { $group['shortdescription'] = $group['name']; } $group['mediumdescription'] = fetch_word_wrapped_string(fetch_censored_text(fetch_trimmed_title($group['description'], 1000))); $group['description'] = nl2br(fetch_word_wrapped_string(fetch_censored_text($group['description']))); $group['is_owner'] = $group['creatoruserid'] == $vbulletin->userinfo['userid']; $group['is_automoderated'] = ($group['options'] & $vbulletin->bf_misc_socialgroupoptions['owner_mod_queue'] and $vbulletin->options['sg_allow_owner_mod_queue'] and !$vbulletin->options['social_moderation']); $group['canviewcontent'] = (!($group['options'] & $vbulletin->bf_misc_socialgroupoptions['join_to_view']) or !$vbulletin->options['sg_allow_join_to_view'] or $group['membertype'] == 'member' or can_moderate(0, 'canmoderategroupmessages') or can_moderate(0, 'canremovegroupmessages') or can_moderate(0, 'candeletegroupmessages') or fetch_socialgroup_perm('canalwayspostmessage') or fetch_socialgroup_perm('canalwascreatediscussion')); $group['lastpostdate'] = vbdate($vbulletin->options['dateformat'], $group['lastpost'], true); $group['lastposttime'] = vbdate($vbulletin->options['timeformat'], $group['lastpost']); $group['lastposterid'] = $group['canviewcontent'] ? $group['lastposterid'] : 0; $group['lastposter'] = $group['canviewcontent'] ? $group['lastposter'] : ''; // check read marking //remove notice and make readtime determination a bit more clear if (!empty($group['readtime'])) { $readtime = $group['readtime']; } else { $readtime = fetch_bbarray_cookie('group_marking', $group['groupid']); if (!$readtime) { $readtime = $vbulletin->userinfo['lastvisit']; } } // get thumb url $group['iconurl'] = fetch_socialgroupicon_url($group, true); // check if social group is moderated to join $group['membermoderated'] = 'moderated' == $group['type']; // posts older than markinglimit days won't be highlighted as new $oldtime = TIMENOW - $vbulletin->options['markinglimit'] * 24 * 60 * 60; $readtime = max((int) $readtime, $oldtime); $group['readtime'] = $readtime; $group['is_read'] = $readtime >= $group['lastpost']; // Legacy Hook 'group_prepareinfo' Removed // return $group; }
function print_usergroup_row($usergroup, $options) { global $usergroupleaders, $vbphrase, $promotions, $vbulletin; if ($promotions["{$usergroup['usergroupid']}"]) { $options['promote'] .= " ({$promotions[$usergroup[usergroupid]]})"; } $cell = array(); $cell[] = "<b>{$usergroup['title']}" . iif($usergroup['canoverride'], '*') . "</b>" . iif($usergroup['ispublicgroup'], '<br /><span class="smallfont">' . $usergroup['description'] . '</span>'); $cell[] = iif($usergroup['count'], vb_number_format($usergroup['count']), '-'); $cell[] = iif($usergroup['secondarycount'], vb_number_format($usergroup['secondarycount']), '-'); if ($usergroup['ispublicgroup']) { $cell[] = iif($usergroup['requests'], vb_number_format($usergroup['requests']), '0'); } if ($usergroup['ispublicgroup']) { $cell_out = '<span class="smallfont">'; if (is_array($usergroupleaders["{$usergroup['usergroupid']}"])) { foreach ($usergroupleaders["{$usergroup['usergroupid']}"] as $usergroupleader) { $cell_out .= "<a href=\"user.php?" . $vbulletin->session->vars['sessionurl'] . "do=edit&u={$usergroupleader['userid']}\"><b>{$usergroupleader['username']}</b></a>" . construct_link_code($vbphrase['delete'], "usergroup.php?" . $vbulletin->session->vars['sessionurl'] . "do=removeleader&usergroupleaderid={$usergroupleader['usergroupleaderid']}") . '<br />'; } } $cell[] = $cell_out . '</span>'; } $options['edit'] .= " (id: {$usergroup['usergroupid']})"; $cell[] = "\n\t<select name=\"u{$usergroup['usergroupid']}\" onchange=\"js_usergroup_jump({$usergroup['usergroupid']});\" class=\"bginput\">\n" . construct_select_options($options) . "\t</select><input type=\"button\" class=\"button\" value=\"" . $vbphrase['go'] . "\" onclick=\"js_usergroup_jump({$usergroup['usergroupid']});\" />\n\t"; print_cells_row($cell); }
/** * Reads XML style file and imports data from it into the database * * @param string XML data * @param integer Style ID * @param integer Parent style ID * @param string New style title * @param boolean Allow vBulletin version mismatch * @param integer Display order for new style * @param boolean Allow user selection of new style * @param int|null Starting template group index for this run of importing templates (0 based). * Null means all templates (single run) * @paream int|null * * @return array Array of information about the imported style */ function xml_import_style( $xml = false, $styleid = -1, $parentid = -1, $title = '', $anyversion = false, $displayorder = 1, $userselect = true, $startat = null, $perpage = null ) { // $GLOBALS['path'] needs to be passed into this function or reference $vbulletin->GPC['path'] global $vbulletin, $vbphrase; print_dots_start('<b>' . $vbphrase['importing_style'] . "</b>, $vbphrase[please_wait]", ':', 'dspan'); require_once(DIR . '/includes/class_xml.php'); //where is this used? I hate having this random global value in the middle of this function $xmlobj = new vB_XML_Parser($xml, $vbulletin->GPC['path']); if ($xmlobj->error_no == 1) { print_dots_stop(); print_stop_message('no_xml_and_no_path'); } else if ($xmlobj->error_no == 2) { print_dots_stop(); print_stop_message('please_ensure_x_file_is_located_at_y', 'vbulletin-style.xml', $vbulletin->GPC['path']); } if(!$parsed_xml = $xmlobj->parse()) { print_dots_stop(); print_stop_message('xml_error_x_at_line_y', $xmlobj->error_string(), $xmlobj->error_line()); } $version = $parsed_xml['vbversion']; $master = ($parsed_xml['type'] == 'master' ? 1 : 0); $title = (empty($title) ? $parsed_xml['name'] : $title); $product = (empty($parsed_xml['product']) ? 'vbulletin' : $parsed_xml['product']); $one_pass = (is_null($startat) AND is_null($perpage)); if (!$one_pass AND (!is_numeric($startat) OR !is_numeric($perpage) OR $perpage <= 0 OR $startat < 0)) { print_dots_stop(); print_stop_message(''); } if ($one_pass OR ($startat == 0)) { // version check $full_product_info = fetch_product_list(true); $product_info = $full_product_info["$product"]; if ($version != $product_info['version'] AND !$anyversion AND !$master) { print_dots_stop(); print_stop_message('upload_file_created_with_different_version', $product_info['version'], $version); } //Initialize the style -- either init the master, create a new style, or verify the style to overwrite. if ($master) { $import_data = @unserialize(fetch_adminutil_text('master_style_import')); if (!empty($import_data) AND (TIMENOW - $import_data['last_import']) <= 30) { print_dots_stop(); print_stop_message('must_wait_x_seconds_master_style_import', vb_number_format($import_data['last_import'] + 30 - TIMENOW)); } // overwrite master style echo "<h3>$vbphrase[master_style]</h3>\n<p>$vbphrase[please_wait]</p>"; vbflush(); $vbulletin->db->query_write(" DELETE FROM " . TABLE_PREFIX . "template WHERE styleid = -10 AND (product = '" . $vbulletin->db->escape_string($product) . "'" . iif($product == 'vbulletin', " OR product = ''") . ")" ); $vbulletin->db->query_write(" UPDATE " . TABLE_PREFIX . "template SET styleid = -10 WHERE styleid = -1 AND (product = '" . $vbulletin->db->escape_string($product) . "'" . iif($product == 'vbulletin', " OR product = ''") . ") "); $styleid = -1; } else { if ($styleid == -1) { // creating a new style $test = $vbulletin->db->query_first(" SELECT styleid FROM " . TABLE_PREFIX . "style WHERE title = '" . $vbulletin->db->escape_string($title) . "'" ); if ($test) { print_dots_stop(); print_stop_message('style_already_exists', $title); } else { echo "<h3><b>" . construct_phrase($vbphrase['creating_a_new_style_called_x'], $title) . "</b></h3>\n<p>$vbphrase[please_wait]</p>"; vbflush(); /*insert query*/ $styleresult = $vbulletin->db->query_write(" INSERT INTO " . TABLE_PREFIX . "style (title, parentid, displayorder, userselect) VALUES ('" . $vbulletin->db->escape_string($title) . "', $parentid, $displayorder, " . ($userselect ? 1 : 0) . ") "); $styleid = $vbulletin->db->insert_id($styleresult); } } else { // overwriting an existing style if ($getstyle = $vbulletin->db->query_first("SELECT title FROM " . TABLE_PREFIX . "style WHERE styleid = $styleid")) { echo "<h3><b>" . construct_phrase($vbphrase['overwriting_style_x'], $getstyle['title']) . "</b></h3>\n<p>$vbphrase[please_wait]</p>"; vbflush(); } else { print_dots_stop(); print_stop_message('cant_overwrite_non_existent_style'); } } } } //load the templates if ($arr = $parsed_xml['templategroup']) { if (empty($arr[0])) { $arr = array($arr); } $templates_done = (is_numeric($startat) AND (count($arr) < $startat)); if ($one_pass OR !$templates_done) { if (!$one_pass) { $arr = array_slice($arr, $startat, $perpage); } xml_import_template_groups($styleid, $product, $arr, !$one_pass); } } else { $templates_done = true; } //note that templates may actually be done at this point, but templates_done is //only true if templates were completed in a prior step. If we are doing a multi-pass //process, we don't want to install stylevars in the same pass. We aren't really done //until we hit a pass where the templates are done before processing. $done = ($one_pass OR $templates_done); if ($done) { //load stylevars and definitions // re-import any stylevar definitions if ($master AND !empty($parsed_xml['stylevardfns']['stylevargroup'])) { xml_import_stylevar_definitions($parsed_xml['stylevardfns'], 'vbulletin'); } //if the tag is present but empty we'll end up with a string with whitespace which //is a non "empty" value. if (!empty($parsed_xml['stylevars']) AND is_array($parsed_xml['stylevars'])) { xml_import_stylevars($parsed_xml['stylevars'], $styleid); } if ($master) { xml_import_restore_adsense_templates(); build_adminutil_text('master_style_import', serialize(array('last_import' => TIMENOW))); } print_dots_stop(); } return array( 'version' => $version, 'master' => $master, 'title' => $title, 'product' => $product, 'done' => $done ); }
/** * Prepares Information regarding the Users's usernotes * */ function prepare_usernote() { global $show; if (!($this->prepared['userperms']['genericpermissions'] & $this->registry->bf_ugp_genericpermissions['canbeusernoted'])) { $this->prepared['usernotecount'] = 0; $this->prepared['usernoteinfo'] = array(); $show['usernoteview'] = false; return; } if ($this->prepared['userid'] == $this->registry->userinfo['userid'] and $this->registry->userinfo['permissions']['genericpermissions'] & $this->registry->bf_ugp_genericpermissions['canviewownusernotes'] or $this->prepared['userid'] != $this->registry->userinfo['userid'] and $this->registry->userinfo['permissions']['genericpermissions'] & $this->registry->userinfo->bf_ugp_genericpermissions['canviewothersusernotes']) { $show['usernotes'] = true; } if ($this->prepared['userid'] == $this->registry->userinfo['userid'] and $this->registry->userinfo['permissions']['genericpermissions'] & $this->registry->bf_ugp_genericpermissions['canpostownusernotes'] or $this->prepared['userid'] != $this->registry->userinfo['userid'] and $this->registry->userinfo['permissions']['genericpermissions'] & $this->registry->bf_ugp_genericpermissions['canpostothersusernotes']) { $show['usernotes'] = true; $show['usernotepost'] = true; } $usernote = $this->registry->db->query_first_slave("\n\t\t\tSELECT MAX(dateline) AS lastpost, COUNT(*) AS total\n\t\t\tFROM " . TABLE_PREFIX . "usernote AS usernote\n\t\t\tWHERE userid = " . $this->userinfo['userid']); $this->prepared['usernotecount'] = vb_number_format($usernote['total']); $show['usernoteview'] = intval($usernote['total']) ? true : false; $usernote['lastpostdate'] = vbdate($this->registry->options['dateformat'], $usernote['lastpost'], true); $usernote['lastposttime'] = vbdate($this->registry->options['timeformat'], $usernote['lastpost'], true); $this->prepared['usernoteinfo'] = $usernote; }
$expiretime = 0; break; case 'H': default: $expiretime += mktime(date('H') + $infraction['expires'], date('i'), date('s'), date('m'), date('d'), date('y')); break; } $timeleft = $expiretime - TIMENOW; $decimal = $vbulletin->userinfo['lang_decimalsep']; if ($timeleft < 86400) { $expires = construct_phrase($vbphrase['x_hours'], preg_replace('#^(\\d+)' . $decimal . '0#', '\\1', vb_number_format($timeleft / 3600, 1))); } else { if ($timeleft < 2592000) { $expires = construct_phrase($vbphrase['x_days'], preg_replace('#^(\\d+)' . $decimal . '0#', '\\1', vb_number_format($timeleft / 86400, 1))); } else { $expires = construct_phrase($vbphrase['x_months'], preg_replace('#^(\\d+)' . $decimal . '0#', '\\1', vb_number_format($timeleft / 2592000, 1))); } } } } } if (!$expires) { switch ($infraction['period']) { case 'H': $period = 'x_hours'; break; case 'D': $period = 'x_days'; break; case 'M': $period = 'x_months';
if ($show['inlinemod']) { $threadcolspan++; $announcecolspan++; } if (!$show['threadicons']) { $threadcolspan--; $announcecolspan--; } if (!empty($search['announceids']) and $vbulletin->GPC['pagenumber'] == 1) { $announcements = $db->query_read_slave("\n\t\t\tSELECT announcementid, startdate, title, announcement.views, forumid,\n\t\t\t\tuser.username, user.userid, user.usertitle, user.customtitle, user.usergroupid,\n\t\t\t\tIF(displaygroupid=0, user.usergroupid, displaygroupid) AS displaygroupid, infractiongroupid\n\t\t\tFROM " . TABLE_PREFIX . "announcement AS announcement\n\t\t\tLEFT JOIN " . TABLE_PREFIX . "user AS user USING (userid)\n\t\t\tWHERE announcementid IN ({$search['announceids']})\n\t\t\tORDER BY startdate DESC\n\t\t"); while ($announcement = $db->fetch_array($announcements)) { fetch_musername($announcement); $announcement['title'] = fetch_censored_text($announcement['title']); $announcement['postdate'] = vbdate($vbulletin->options['dateformat'], $announcement['startdate']); $announcement['statusicon'] = 'new'; $announcement['views'] = vb_number_format($announcement['views']); $announcementidlink = "&a={$announcement['announcementid']}"; $announcement['forumtitle'] = $vbulletin->forumcache["{$announcement['forumid']}"]['title']; $show['forumtitle'] = $announcement['forumid'] == -1 ? false : true; eval('$announcebits .= "' . fetch_template('threadbit_announcement') . '";'); } } // get highlight words if (!empty($display['highlight'])) { $highlightwords = '&highlight=' . urlencode(implode(' ', $display['highlight'])); } else { $highlightwords = ''; } // initialize counters and template bits $searchbits = ''; $itemcount = $startat;
/** * Fetches the HTML for the tag cloud. * * @param string Type of cloud. Supports search, usage * * @return string Tag cloud HTML (nothing if no cloud) */ function fetch_tagcloud($type = 'usage') { global $vbulletin, $stylevar, $vbphrase, $show, $template_hook; if ($vbulletin->options['tagcloud_usergroup'] > 0 and !isset($vbulletin->usergroupcache[$vbulletin->options['tagcloud_usergroup']])) { // handle a usergroup being deleted: default to live permission checking $vbulletin->options['tagcloud_usergroup'] = -1; } $cacheable = $vbulletin->options['tagcloud_usergroup'] != -1; if (!$cacheable) { $cloud = null; } else { switch ($type) { case 'search': $cloud = $vbulletin->searchcloud; break; case 'usage': default: $cloud = $vbulletin->tagcloud; break; } } if (!is_array($cloud) or $cloud['dateline'] < TIMENOW - 60 * $vbulletin->options['tagcloud_cachetime']) { if ($type == 'search') { $tags_result = $vbulletin->db->query_read_slave("\n\t\t\t\tSELECT tagsearch.tagid, tag.tagtext, COUNT(*) AS searchcount\n\t\t\t\tFROM " . TABLE_PREFIX . "tagsearch AS tagsearch\n\t\t\t\tINNER JOIN " . TABLE_PREFIX . "tag AS tag ON (tagsearch.tagid = tag.tagid)\n\t\t\t\t" . ($vbulletin->options['tagcloud_searchhistory'] ? "WHERE tagsearch.dateline > " . (TIMENOW - 60 * 60 * 24 * $vbulletin->options['tagcloud_searchhistory']) : '') . "\n\t\t\t\tGROUP BY tagsearch.tagid, tag.tagtext\n\t\t\t\tORDER BY searchcount DESC\n\t\t\t\tLIMIT " . $vbulletin->options['tagcloud_tags']); } else { if (!$vbulletin->options['tagcloud_usergroup']) { $perm_limit = false; } else { $forums = array(); $perm_limit = true; foreach ($vbulletin->forumcache as $forumid => $forum) { // -1 for live permission checking $perm_array = $vbulletin->options['tagcloud_usergroup'] == -1 ? $vbulletin->userinfo['forumpermissions']["{$forumid}"] : $forum['permissions'][$vbulletin->options['tagcloud_usergroup']]; if ($perm_array & $vbulletin->bf_ugp_forumpermissions['canview'] and $perm_array & $vbulletin->bf_ugp_forumpermissions['canviewthreads'] and $perm_array & $vbulletin->bf_ugp_forumpermissions['canviewothers']) { $forums[] = intval($forumid); } } } if (!$perm_limit or $forums) { $tags_result = $vbulletin->db->query_read_slave("\n\t\t\t\t\tSELECT tagthread.tagid, tag.tagtext, COUNT(*) AS searchcount\n\t\t\t\t\tFROM " . TABLE_PREFIX . "tagthread AS tagthread\n\t\t\t\t\tINNER JOIN " . TABLE_PREFIX . "tag AS tag ON (tagthread.tagid = tag.tagid)\n\t\t\t\t\tINNER JOIN " . TABLE_PREFIX . "thread AS thread ON (tagthread.threadid = thread.threadid)\n\t\t\t\t\tWHERE thread.open <> 10\n\t\t\t\t\t\tAND thread.visible = 1\n\t\t\t\t\t" . ($perm_limit ? "AND thread.forumid IN (" . implode(',', $forums) . ")" : '') . "\n\t\t\t\t\t" . ($vbulletin->options['tagcloud_usagehistory'] ? "AND tagthread.dateline > " . (TIMENOW - 60 * 60 * 24 * $vbulletin->options['tagcloud_usagehistory']) : '') . "\n\t\t\t\t\tGROUP BY tagthread.tagid, tag.tagtext\n\t\t\t\t\tORDER BY searchcount DESC\n\t\t\t\t\tLIMIT " . $vbulletin->options['tagcloud_tags']); } } $total = 0; $count = 0; if (!empty($tags_result)) { $count = $vbulletin->db->num_rows($tags_result); while ($currenttag = $vbulletin->db->fetch_array($tags_result)) { $tags["{$currenttag['tagtext']}"] = $currenttag; $total += $currenttag['searchcount']; } $vbulletin->db->free_result($tags_result); } $final_tags = array(); if ($count > 0) { // calculate the standard deviation $mean = $total / $count; $summation = 0; foreach ($tags as $tagtext => $tagvalue) { $summation += pow($tagvalue['searchcount'] - $mean, 2); } $sd = sqrt($summation / $count); uksort($tags, 'strnatcasecmp'); if ($sd) { $sdtags = array(); $lowestsds = 0; $highestsds = 0; // find the max and min standard deviations foreach ($tags as $tagtext => $currenttag) { $tags["{$tagtext}"]['deviation'] = $currenttag['searchcount'] - $mean; $tags["{$tagtext}"]['sds'] = $tags["{$tagtext}"]['deviation'] / $sd; $sdtags[] = $tags["{$tagtext}"]; if ($tags["{$tagtext}"]['sds'] < $lowestsds) { $lowestsds = $tags["{$tagtext}"]['sds']; } if ($tags["{$tagtext}"]['sds'] > $highestsds) { $highestsds = $tags["{$tagtext}"]['sds']; } } $levels = $vbulletin->options['tagcloud_levels']; foreach ($sdtags as $thistag) { // normalize the std devs to 0 - 1, then map back to 1 - #levls $thistag['level'] = round(($thistag['sds'] - $lowestsds) / ($highestsds - $lowestsds) * ($levels - 1)) + 1; $thistag['tagtext_url'] = urlencode(unhtmlspecialchars($thistag['tagtext'])); $final_tags[] = $thistag; } } else { foreach ($tags as $tagtext => $tagarr) { $final_tags[] = array('tagid' => $tagarr['tagid'], 'tagtext' => $tagtext, 'tagtext_url' => urlencode(unhtmlspecialchars($tagtext)), 'level' => round($vbulletin->options['tagcloud_levels'] / 2)); } } } $cloud = array('tags' => $final_tags, 'count' => sizeof($final_tags), 'dateline' => TIMENOW); if ($cacheable) { if ($type == 'search') { $vbulletin->searchcloud = $cloud; build_datastore('searchcloud', serialize($cloud), 1); } else { $vbulletin->tagcloud = $cloud; build_datastore('tagcloud', serialize($cloud), 1); } } } if (empty($cloud['tags'])) { return ''; } $cloud['links'] = ''; foreach ($cloud['tags'] as $thistag) { ($hook = vBulletinHook::fetch_hook('tag_cloud_bit')) ? eval($hook) : false; eval('$cloud[\'links\'] .= "' . fetch_template('tag_cloud_link') . '";'); } $cloud['count'] = vb_number_format($cloud['count']); if ($type == 'search') { eval('$cloud_html .= "' . fetch_template('tag_cloud_box_search') . '";'); } else { eval('$cloud_html .= "' . fetch_template('tag_cloud_box') . '";'); } return $cloud_html; }
function check_overage() { require_once DIR . '/includes/functions_album.php'; if ($this->userinfo['permissions']['albummaxpics']) { $overage = fetch_count_overage($this->userinfo['userid'], $this->userinfo['permissions']['albummaxpics'], 1); if ($overage > 0) { $this->set_error('upload_total_album_pics_countfull', vb_number_format($overage)); return false; } } if ($this->userinfo['permissions']['albummaxsize']) { $overage = fetch_size_overage($this->userinfo['userid'], $this->userinfo['permissions']['albummaxsize'], $this->upload['filesize']); if ($overage > 0) { $this->set_error('upload_album_sizefull', vb_number_format($overage, 0, true)); return false; } } return true; }
/** * Parses the appropriate template for contenttype that is to be updated on the calling window during an upload * * @param array Attachment information * @param array Values array pertaining to contenttype * @param boolean Disable template comments * * @return string */ public function process_display_template($attach, $values = array(), $disablecomment = true) { $attach['extension'] = strtolower(file_extension($attach['filename'])); $attach['filename'] = fetch_censored_text(htmlspecialchars_uni($attach['filename'], false)); $attach['filesize'] = vb_number_format($attach['filesize'], 1, true); $attach['imgpath'] = $this->fetch_imgpath($attach['extension']); $templater = vB_Template::create('newpost_attachmentbit'); $templater->register('attach', $attach); return $templater->render($disablecomment); }
$sub['title'] = $vbphrase['sub' . $sub['subscriptionid'] . '_title']; $sub['description'] = $vbphrase['sub' . $sub['subscriptionid'] . '_desc']; $currency = $vbulletin->GPC['currency']["{$subscriptionid}"]; $tmp = explode('_', $currency); $currency = $tmp[1]; $subscriptionsubid = intval($tmp[0]); unset($tmp); $costs = unserialize($sub['cost']); if ($costs["{$subscriptionsubid}"]['length'] == 1) { $subscription_units = $lengths[$costs["{$subscriptionsubid}"]['units']]; } else { $subscription_units = $lengths[$costs["{$subscriptionsubid}"]['units'] . 's']; } $subscription_length = construct_phrase($vbphrase['length_x_units_y_recurring_z'], $costs["{$subscriptionsubid}"]['length'], $subscription_units, $costs["{$subscriptionsubid}"]['recurring'] ? ' *' : ''); $subscription_title = $sub['title']; $subscription_cost = $subobj->_CURRENCYSYMBOLS["{$currency}"] . vb_number_format($costs["{$subscriptionsubid}"]['cost']["{$currency}"], 2); $orderbits = ''; if (empty($costs["{$subscriptionsubid}"]['cost']["{$currency}"])) { eval(standard_error(fetch_error('invalid_currency'))); } // These phrases are constant since they are the name of a service $tmp = array('paypal' => 'PayPal', 'nochex' => 'NOCHEX', 'worldpay' => 'WorldPay', '2checkout' => '2Checkout', 'moneybookers' => 'MoneyBookers', 'authorizenet' => 'Authorize.Net', 'ccbill' => 'CCBill'); $vbphrase += $tmp; ($hook = vBulletinHook::fetch_hook('paidsub_order_start')) ? eval($hook) : false; $hash = md5($vbulletin->userinfo['userid'] . $vbulletin->userinfo['salt'] . $subscriptionid . uniqid(microtime(), 1)); /* insert query */ $db->query_write("\n\t\tINSERT INTO " . TABLE_PREFIX . "paymentinfo\n\t\t\t(hash, completed, subscriptionid, subscriptionsubid, userid)\n\t\tVALUES\n\t\t\t('" . $db->escape_string($hash) . "', 0, {$subscriptionid}, {$subscriptionsubid}, " . $vbulletin->userinfo['userid'] . ")\n\t"); $methods = $db->query_read_slave("SELECT * FROM " . TABLE_PREFIX . "paymentapi WHERE active = 1 AND FIND_IN_SET('" . $db->escape_string($currency) . "', currency)"); while ($method = $db->fetch_array($methods)) { if (empty($costs["{$subscriptionsubid}"]['ccbillsubid']) and $method['classname'] == 'ccbill') { continue;
sanitize_pageresults($totalrep, $vbulletin->GPC['pagenumber'], $vbulletin->GPC['perpage']); $startat = ($vbulletin->GPC['pagenumber'] - 1) * $vbulletin->GPC['perpage']; $totalpages = ceil($totalrep / $vbulletin->GPC['perpage']); $comments = $db->query_read("\n\t\tSELECT post.postid, rep.userid AS userid, whoadded, rep.reason, rep.dateline, rep.reputationid, rep.reputation,\n\t\t\tleftfor_user.username AS leftfor_username,\n\t\t\tleftby_user.username AS leftby_username,\n\t\t\tpost.title, post.threadid\n\t\tFROM " . TABLE_PREFIX . "reputation AS rep\n\t\tLEFT JOIN " . TABLE_PREFIX . "post AS post ON (rep.postid = post.postid)\n\t\tLEFT JOIN " . TABLE_PREFIX . "user AS leftby_user ON (rep.whoadded = leftby_user.userid)\n\t\tLEFT JOIN " . TABLE_PREFIX . "user AS leftfor_user ON (rep.userid = leftfor_user.userid)\n\t\t{$condition}\n\t\tORDER BY {$orderbysql}\n\t\tLIMIT {$startat}, " . $vbulletin->GPC['perpage']); if ($vbulletin->GPC['pagenumber'] != 1) { $prv = $vbulletin->GPC['pagenumber'] - 1; $firstpage = "<input type=\"button\" class=\"button\" value=\"« " . $vbphrase['first_page'] . "\" tabindex=\"1\" onclick=\"window.location='adminreputation.php?" . $vbulletin->session->vars['sessionurl'] . "do=dolist" . "&u=" . $vbulletin->GPC['userid'] . "&whoadded=" . $vbulletin->GPC['whoadded'] . "&pp=" . $vbulletin->GPC['perpage'] . "&page=1" . "&startstamp=" . $vbulletin->GPC['start'] . "&endstamp=" . $vbulletin->GPC['end'] . "&orderby=" . $vbulletin->GPC['orderby'] . "'\">"; $prevpage = "<input type=\"button\" class=\"button\" value=\"< " . $vbphrase['prev_page'] . "\" tabindex=\"1\" onclick=\"window.location='adminreputation.php?" . $vbulletin->session->vars['sessionurl'] . "do=dolist" . "&u=" . $vbulletin->GPC['userid'] . "&whoadded=" . $vbulletin->GPC['whoadded'] . "&pp=" . $vbulletin->GPC['perpage'] . "&page=" . $prv . "&startstamp=" . $vbulletin->GPC['start'] . "&endstamp=" . $vbulletin->GPC['end'] . "&orderby=" . $vbulletin->GPC['orderby'] . "'\">"; } if ($vbulletin->GPC['pagenumber'] != $totalpages) { $nxt = $vbulletin->GPC['pagenumber'] + 1; $nextpage = "<input type=\"button\" class=\"button\" value=\"" . $vbphrase['next_page'] . " >\" tabindex=\"1\" onclick=\"window.location='adminreputation.php?" . $vbulletin->session->vars['sessionurl'] . "do=dolist" . "&u=" . $vbulletin->GPC['userid'] . "&whoadded=" . $vbulletin->GPC['whoadded'] . "&pp=" . $vbulletin->GPC['perpage'] . "&page=" . $nxt . "&startstamp=" . $vbulletin->GPC['start'] . "&endstamp=" . $vbulletin->GPC['end'] . "&orderby=" . $vbulletin->GPC['orderby'] . "'\">"; $lastpage = "<input type=\"button\" class=\"button\" value=\"" . $vbphrase['last_page'] . " »\" tabindex=\"1\" onclick=\"window.location='adminreputation.php?" . $vbulletin->session->vars['sessionurl'] . "do=dolist" . "&u=" . $vbulletin->GPC['userid'] . "&whoadded=" . $vbulletin->GPC['whoadded'] . "&pp=" . $vbulletin->GPC['perpage'] . "&page=" . $totalpages . "&startstamp=" . $vbulletin->GPC['start'] . "&endstamp=" . $vbulletin->GPC['end'] . "&orderby=" . $vbulletin->GPC['orderby'] . "'\">"; } print_form_header('adminreputation', 'dolist'); print_table_header(construct_phrase($vbphrase['x_reputation_comments_page_y_z'], vb_number_format($totalrep), $vbulletin->GPC['pagenumber'], vb_number_format($totalpages)), 7); $headings = array(); $headings[] = "<a href='adminreputation.php?" . $vbulletin->session->vars['sessionurl'] . "do=dolist" . "&u=" . $vbulletin->GPC['userid'] . "&whoadded=" . $vbulletin->GPC['whoadded'] . "&pp=" . $vbulletin->GPC['perpage'] . "&orderby=leftbyuser" . "&page=" . $vbulletin->GPC['pagenumber'] . "&startstamp=" . $vbulletin->GPC['start'] . "&endstamp=" . $vbulletin->GPC['end'] . "' title='" . $vbphrase['order_by_username'] . "'>" . $vbphrase['leftby'] . "</a>"; $headings[] = "<a href='adminreputation.php?" . $vbulletin->session->vars['sessionurl'] . "do=dolist" . "&u=" . $vbulletin->GPC['userid'] . "&whoadded=" . $vbulletin->GPC['whoadded'] . "&pp=" . $vbulletin->GPC['perpage'] . "&orderby=leftforuser" . "&page=" . $vbulletin->GPC['pagenumber'] . "&startstamp=" . $vbulletin->GPC['start'] . "&endstamp=" . $vbulletin->GPC['end'] . "' title='" . $vbphrase['order_by_username'] . "'>" . $vbphrase['leftfor'] . "</a>"; $headings[] = "<a href='adminreputation.php?" . $vbulletin->session->vars['sessionurl'] . "do=dolist" . "&u=" . $vbulletin->GPC['userid'] . "&whoadded=" . $vbulletin->GPC['whoadded'] . "&pp=" . $vbulletin->GPC['perpage'] . "&orderby=date" . "&page=" . $vbulletin->GPC['pagenumber'] . "&startstamp=" . $vbulletin->GPC['start'] . "&endstamp=" . $vbulletin->GPC['end'] . "' title='" . $vbphrase['order_by_date'] . "'>" . $vbphrase['date'] . "</a>"; $headings[] = $vbphrase['reputation']; $headings[] = $vbphrase['reason']; $headings[] = $vbphrase['post']; $headings[] = $vbphrase['controls']; print_cells_row($headings, 1); while ($comment = $db->fetch_array($comments)) { $postlink = ''; if (!empty($comment['postid'])) { //deliberately don't use the title. We don't have it in our result set (or //in any of the tables in our result set) and we'll catch it on redirect. //Plus the admincp isn't a big SEO issue -- we just want to get the links
$cell[] = '<span class="smallfont">' . construct_link_code($vbphrase['view_content'], $attachmultiple->fetch_content_url($attachment, '../'), true) . construct_link_code($vbphrase['edit'], "attachment.php?" . $vbulletin->session->vars['sessionurl'] . "do=edit&attachmentid={$attachment['attachmentid']}") . construct_link_code($vbphrase['delete'], "attachment.php?" . $vbulletin->session->vars['sessionurl'] . "do=delete&attachmentid={$attachment['attachmentid']}") . '</span>'; print_cells_row($cell); } print_table_break(); $content = array(); $largestuser = $db->query_read("\n\t\tSELECT COUNT(*) AS count, SUM(filesize) AS totalsize, user.userid, username\n\t\tFROM " . TABLE_PREFIX . "attachment AS a\n\t\tINNER JOIN " . TABLE_PREFIX . "filedata AS fd ON (a.filedataid = fd.filedataid)\n\t\tLEFT JOIN " . TABLE_PREFIX . "user AS user ON (a.userid = user.userid)\n\t\tGROUP BY a.userid\n\t\tHAVING totalsize > 0\n\t\tORDER BY totalsize DESC\n\t\tLIMIT 5\n\t"); $position = 0; print_table_header($vbphrase['five_users_most_attachment_space'], 5); print_cells_row(array(' ', $vbphrase['username'], $vbphrase['attachments'], $vbphrase['total_size'], ' '), 1); while ($thispop = $db->fetch_array($largestuser)) { $position++; $cell = array(); $cell[] = $position . '.'; $cell[] = "<a href=\"user.php?" . $vbulletin->session->vars['sessionurl'] . "do=edit&u={$thispop['userid']}\">{$thispop['username']}</a>"; $cell[] = vb_number_format($thispop['count']); $cell[] = vb_number_format($thispop['totalsize'], 1, true); $cell[] = '<span class="smallfont">' . construct_link_code($vbphrase['view_attachments'], "attachment.php?" . $vbulletin->session->vars['sessionurl'] . "do=search&search[attachedby]=" . urlencode($thispop['username'])) . '</span>'; print_cells_row($cell); } print_table_footer(); } // ###################### Introduction #################### if ($_REQUEST['do'] == 'intro') { print_form_header('attachment', 'search'); print_table_header($vbphrase['quick_search']); print_description_row("\n\t<ul style=\"margin:0px; padding:0px; list-style:none\">\n\t\t<li><a href=\"attachment.php?" . $vbulletin->session->vars['sessionurl'] . "do=search&search[orderby]=filesize&search[ordering]=DESC\">" . $vbphrase['view_largest_attachments'] . "</a></li>\n\t\t<li><a href=\"attachment.php?" . $vbulletin->session->vars['sessionurl'] . "do=search&search[orderby]=counter&search[ordering]=DESC\">" . $vbphrase['view_most_popular_attachments'] . "</a></li>\n\t\t<li><a href=\"attachment.php?" . $vbulletin->session->vars['sessionurl'] . "do=search&search[orderby]=dateline&search[ordering]=DESC\">" . $vbphrase['view_newest_attachments'] . "</a></li>\n\t\t<li><a href=\"attachment.php?" . $vbulletin->session->vars['sessionurl'] . "do=search&search[orderby]=dateline&search[ordering]=ASC\">" . $vbphrase['view_oldest_attachments'] . "</a></li>\n\t</ul>\n\t"); print_table_break(); print_table_header($vbphrase['prune_attachments']); print_input_row($vbphrase['find_all_attachments_older_than_days'], 'prunedate', 30); print_submit_row($vbphrase['search'], 0); print_form_header('attachment', 'search');
construct_hidden_code('query', $query); construct_hidden_code('perpage', $vbulletin->GPC['perpage']); construct_hidden_code('confirmquery', 1); print_table_header($vbphrase['confirm_query_execution']); print_description_row($vbphrase['query_may_modify_database']); print_submit_row($vbphrase['continue'], false, 2, $vbphrase['go_back']); } else { $time_before = microtime(); $db->query_write($query); $time_taken = fetch_microtime_difference($time_before); print_form_header('queries', 'doquery'); print_table_header($vbphrase['vbulletin_message']); if ($errornum = $db->errno()) { print_description_row(construct_phrase($vbphrase['an_error_occured_while_attempting_to_run_your_query'], $errornum, nl2br(htmlspecialchars_uni($db->error())))); } else { print_description_row(construct_phrase($vbphrase['affected_rows'], vb_number_format($db->affected_rows()), vb_number_format($time_taken, 4))); } print_table_footer(); } break; } } // ##################### START MODIFY ##################### if ($_REQUEST['do'] == 'modify') { print_form_header('queries', 'doquery'); print_table_header($vbphrase['execute_sql_query']); print_select_row($vbphrase['auto_query'], 'autoquery', $queryoptions, -1); print_textarea_row($vbphrase['manual_query'], 'query', '', 10, 55); print_input_row($vbphrase['results_to_show_per_page'], 'perpage', 20); print_submit_row($vbphrase['continue']); }
$usergroups = array(); // query usergroups of which bbuser is a leader $joinrequests = $db->query_read_slave("\n\t\tSELECT usergroupleader.usergroupid, COUNT(usergrouprequestid) AS requests\n\t\tFROM " . TABLE_PREFIX . "usergroupleader AS usergroupleader\n\t\tLEFT JOIN " . TABLE_PREFIX . "usergrouprequest AS usergrouprequest USING(usergroupid)\n\t\tWHERE usergroupleader.userid = " . $vbulletin->userinfo['userid'] . "\n\t\tGROUP BY usergroupleader.usergroupid\n\t"); while ($joinrequest = $db->fetch_array($joinrequests)) { $usergroups["{$joinrequest['usergroupid']}"] = intval($joinrequest['requests']); } unset($joinrequest); $db->free_result($joinrequests); // if we got no results, or if the specified usergroupid was not returned, show no permission if (empty($usergroups)) { print_no_permission(); } $usergroupbits = ''; foreach ($vbulletin->usergroupcache as $optionvalue => $usergroup) { if (isset($usergroups["{$optionvalue}"])) { $optiontitle = construct_phrase($vbphrase['x_y_requests'], $vbulletin->usergroupcache["{$optionvalue}"]['title'], vb_number_format($usergroups["{$optionvalue}"])); $optionselected = iif($optionvalue == $vbulletin->GPC['usergroupid'], 'selected="selected"', ''); $optionclass = ''; $usergroupbits .= render_option_template($optiontitle, $optionvalue, $optionselected, $optionclass); } } // set a shortcut to the vbulletin->usergroupcache entry for this group $usergroup =& $vbulletin->usergroupcache["{$vbulletin->GPC['usergroupid']}"]; // initialize $joinrequestbits $joinrequestbits = ''; $numrequests =& $usergroups["{$vbulletin->GPC['usergroupid']}"]; // if there are some requests for this usergroup, display them if ($numrequests > 0) { // set defaults sanitize_pageresults($numrequests, $vbulletin->GPC['pagenumber'], $vbulletin->GPC['perpage'], 100, 20); $startat = ($vbulletin->GPC['pagenumber'] - 1) * $vbulletin->GPC['perpage'];
/** * Fetch the valid tags from a list. Filters are length, censorship, perms (if desired). * * @param array Array of existing thread info (including the existing tags) * @param string|array List of tags to add (comma delimited, or an array as is). If array, ensure there are no commas. * @param array (output) List of errors that happens * @param boolean Whether to check the browsing user's create tag perms * @param boolean Whether to expand the error phrase * * @return array List of valid tags */ function fetch_valid_tags($threadinfo, $taglist, &$errors, $check_browser_perms = true, $evalerrors = true) { global $vbulletin; static $tagbadwords, $taggoodwords; $errors = array(); if (!is_array($taglist)) { $taglist = split_tag_list($taglist); } if (!trim($threadinfo['taglist'])) { $existing_tags = array(); } else { // this will always be delimited by a comma $existing_tags = explode(',', trim($threadinfo['taglist'])); } if ($vbulletin->options['tagmaxthread'] and count($existing_tags) >= $vbulletin->options['tagmaxthread']) { $errors['threadmax'] = $evalerrors ? fetch_error('thread_has_max_allowed_tags') : 'thread_has_max_allowed_tags'; return array(); } if ($vbulletin->options['tagmaxlen'] <= 0 or $vbulletin->options['tagmaxlen'] >= 100) { $vbulletin->options['tagmaxlen'] = 100; } $valid_raw = array(); // stop words: too common require DIR . '/includes/searchwords.php'; // get the stop word list; allow multiple requires // filter the stop words by adding custom stop words (tagbadwords) and allowing through exceptions (taggoodwords) if (!is_array($tagbadwords)) { $tagbadwords = preg_split('/\\s+/s', vbstrtolower($vbulletin->options['tagbadwords']), -1, PREG_SPLIT_NO_EMPTY); } if (!is_array($taggoodwords)) { $taggoodwords = preg_split('/\\s+/s', vbstrtolower($vbulletin->options['taggoodwords']), -1, PREG_SPLIT_NO_EMPTY); } // merge hard-coded badwords and tag-specific badwords $badwords = array_merge($badwords, $tagbadwords); foreach ($taglist as $tagtext) { $tagtext = trim(preg_replace('#[ \\r\\n\\t]+#', ' ', $tagtext)); if ($tagtext === '') { continue; } if (!in_array(vbstrtolower($tagtext), $taggoodwords)) { $char_strlen = vbstrlen($tagtext, true); if ($vbulletin->options['tagminlen'] and $char_strlen < $vbulletin->options['tagminlen']) { $errors['min_length'] = $evalerrors ? fetch_error('tag_too_short_min_x', $vbulletin->options['tagminlen']) : array('tag_too_short_min_x', $vbulletin->options['tagminlen']); continue; } if ($char_strlen > $vbulletin->options['tagmaxlen']) { $errors['max_length'] = $evalerrors ? fetch_error('tag_too_long_max_x', $vbulletin->options['tagmaxlen']) : array('tag_too_long_max_x', $vbulletin->options['tagmaxlen']); continue; } if (strlen($tagtext) > 100) { // only have 100 bytes to store a tag $errors['max_length'] = $evalerrors ? fetch_error('tag_too_long_max_x', $vbulletin->options['tagmaxlen']) : array('tag_too_long_max_x', $vbulletin->options['tagmaxlen']); continue; } $censored = fetch_censored_text($tagtext); if ($censored != $tagtext) { // can't have tags with censored text $errors['censor'] = $evalerrors ? fetch_error('tag_no_censored') : 'tag_no_censored'; continue; } if (count(split_tag_list($tagtext)) > 1) { // contains a delimiter character $errors['comma'] = $evalerrors ? fetch_error('tag_no_comma') : 'tag_no_comma'; continue; } if (in_array(strtolower($tagtext), $badwords)) { $errors['common'] = $evalerrors ? fetch_error('tag_x_not_be_common_words', $tagtext) : array('tag_x_not_be_common_words', $tagtext); continue; } } $valid_raw[] = $vbulletin->options['tagforcelower'] ? vbstrtolower($tagtext) : $tagtext; } // we need to essentially do a case-insensitive array_unique here $valid_unique = array_unique(array_map('vbstrtolower', $valid_raw)); $valid = array(); foreach (array_keys($valid_unique) as $key) { $valid[] = $valid_raw["{$key}"]; } $valid_unique = array_values($valid_unique); // make the keys jive with $valid if ($valid) { $existing_sql = $vbulletin->db->query_read("\n\t\t\tSELECT tag.tagtext, IF(tagthread.tagid IS NULL, 0, 1) AS taginthread\n\t\t\tFROM " . TABLE_PREFIX . "tag AS tag\n\t\t\tLEFT JOIN " . TABLE_PREFIX . "tagthread AS tagthread ON\n\t\t\t\t(tag.tagid = tagthread.tagid AND tagthread.threadid = " . intval($threadinfo['threadid']) . ")\n\t\t\tWHERE tag.tagtext IN ('" . implode("','", array_map(array(&$vbulletin->db, 'escape_string'), $valid)) . "')\n\t\t"); if ($check_browser_perms and !($vbulletin->userinfo['permissions']['genericpermissions'] & $vbulletin->bf_ugp_genericpermissions['cancreatetag'])) { // can't create tags, need to throw errors about bad ones $new_tags = array_flip($valid_unique); while ($tag = $vbulletin->db->fetch_array($existing_sql)) { unset($new_tags[vbstrtolower($tag['tagtext'])]); } if ($new_tags) { // trying to create tags without permissions. Remove and throw an error $errors['no_create'] = $evalerrors ? fetch_error('tag_no_create') : 'tag_no_create'; foreach ($new_tags as $new_tag => $key) { // remove those that we can't add from the list unset($valid["{$key}"], $valid_unique["{$key}"]); } } } $vbulletin->db->data_seek($existing_sql, 0); // determine which tags are already in the thread and just ignore them while ($tag = $vbulletin->db->fetch_array($existing_sql)) { if ($tag['taginthread']) { // tag is in thread, find it and remove if (($key = array_search(vbstrtolower($tag['tagtext']), $valid_unique)) !== false) { unset($valid["{$key}"], $valid_unique["{$key}"]); } } } $user_tags_remain = null; if ($vbulletin->options['tagmaxthread']) { // check global limit $user_tags_remain = $vbulletin->options['tagmaxthread'] - count($existing_tags) - count($valid); } if (!can_moderate($threadinfo['forumid'], 'caneditthreads')) { $my_tag_count_array = $vbulletin->db->query_first("\n\t\t\t\tSELECT COUNT(*) AS count\n\t\t\t\tFROM " . TABLE_PREFIX . "tagthread\n\t\t\t\tWHERE threadid = " . intval($threadinfo['threadid']) . "\n\t\t\t\t\tAND userid = " . $vbulletin->userinfo['userid']); $my_tag_count = $my_tag_count_array['count'] + count($valid); $tags_remain = null; if ($vbulletin->options['tagmaxstarter'] and $threadinfo['postuserid'] == $vbulletin->userinfo['userid']) { $tags_remain = $vbulletin->options['tagmaxstarter'] - $my_tag_count; } else { if ($vbulletin->options['tagmaxuser']) { $tags_remain = $vbulletin->options['tagmaxuser'] - $my_tag_count; } } if ($tags_remain !== null) { $user_tags_remain = $user_tags_remain == null ? $tags_remain : min($tags_remain, $user_tags_remain); } } if ($user_tags_remain < 0) { $errors['threadmax'] = $evalerrors ? fetch_error('number_tags_add_exceeded_x', vb_number_format($user_tags_remain * -1)) : array('number_tags_add_exceeded_x', vb_number_format($user_tags_remain * -1)); $allowed_tag_count = count($valid) + $user_tags_remain; if ($allowed_tag_count > 0) { $valid = array_slice($valid, 0, count($valid) + $user_tags_remain); } else { $valid = array(); } } } return $valid; }
unset($customfieldsheader); if ($show['customfields'] AND is_array($profileinfo)) { foreach ($profileinfo AS $index => $customfield) { $totalcols++; $customfield = $customfield['title']; $templater = vB_Template::create('memberlist_results_header'); $templater->register('customfield', $customfield); $customfieldsheader .= $templater->render(); } } // build navbar $navbits = array('' => $vbphrase['members_list']); $searchtime = vb_number_format(fetch_microtime_difference($searchstart), 2); $totalcols += !empty($usergroupid) ? 2 : 1; $page_templater = vB_Template::create('memberlist'); $page_templater->register('customfieldsheader', $customfieldsheader); $page_templater->register('first', $first); $page_templater->register('forumjump', $forumjump); $page_templater->register('gobutton', $gobutton); $page_templater->register('last', $last); $page_templater->register('leadergroup', $leadergroup); $page_templater->register('letterbits', $letterbits); $page_templater->register('ltr', $ltr); $page_templater->register('memberlistbits', $memberlistbits); $page_templater->register('pagenav', $pagenav); $page_templater->register('perpage', $perpage); $page_templater->register('searchtime', $searchtime);
} ($hook = vBulletinHook::fetch_hook('profile_editattachments_bit')) ? eval($hook) : false; eval('$template[\'attachmentlistbits\'] .= "' . fetch_template('modifyattachmentsbit') . '";'); } $sorturl = 'profile.php?' . $vbulletin->session->vars['sessionurl'] . 'do=editattachments'; if ($userid != $vbulletin->userinfo['userid']) { $sorturl .= "&u={$userid}"; } if ($perpage != $defaultperpage) { $sorturl .= "&pp={$perpage}"; } if ($showthumbs) { $sorturl .= "&showthumbs=1"; } $pagenav = construct_page_nav($pagenumber, $perpage, $totalattachments, $sorturl); $totalattachments = vb_number_format($totalattachments); $show['attachlimit'] = $permissions['attachlimit']; $show['currentattachsize'] = $attachsize; $show['totalattachsize'] = $totalsize; $show['thumbnails'] = $showthumbs; } } $show['lightbox'] = ($vbulletin->options['lightboxenabled'] and $vbulletin->options['usepopups'] and $showthumbs); ($hook = vBulletinHook::fetch_hook('profile_editattachments_complete')) ? eval($hook) : false; if ($userid == $vbulletin->userinfo['userid']) { // show $vbulletin->userinfo's attachments in usercp construct_usercp_nav('attachments'); $navbits[''] = construct_phrase($vbphrase['attachments_posted_by_x'], $vbulletin->userinfo['username']); } else { // show some other user's attachments $pagetitle = construct_phrase($vbphrase['attachments_posted_by_x'], $username);
/** * Deletes all private messages belonging to the specified user * * @param integer User ID * @param boolean If true, update the user record in the database to reflect their new number of private messages * * @return mixed If messages are deleted, will return a string to be printed out detailing work done by this function */ function delete_user_pms($userid, $updateuser = true) { global $vbulletin, $vbphrase; $userid = intval($userid); // array to store pm ids message ids $pms = array(); // array to store the number of pmtext records used by this user $pmTextCount = array(); // array to store the ids of any pmtext records that are used soley by this user $deleteTextIDs = array(); // array to store results $out = array(); // first zap all receipts belonging to this user $vbulletin->db->query_write("DELETE FROM " . TABLE_PREFIX . "pmreceipt WHERE userid = {$userid}"); $out['receipts'] = $vbulletin->db->affected_rows(); // now find all this user's private messages $messages = $vbulletin->db->query_read("\n\t\tSELECT pmid, pmtextid\n\t\tFROM " . TABLE_PREFIX . "pm\n\t\tWHERE userid = {$userid}\n\t"); while ($message = $vbulletin->db->fetch_array($messages)) { // stick this record into our $pms array $pms["{$message['pmid']}"] = $message['pmtextid']; // increment the number of PMs that use the current PMtext record $pmTextCount["{$message['pmtextid']}"]++; } $vbulletin->db->free_result($messages); if (!empty($pms)) { // zap all pm records belonging to this user $vbulletin->db->query_write("DELETE FROM " . TABLE_PREFIX . "pm WHERE userid = {$userid}"); $out['pms'] = $vbulletin->db->affected_rows(); $out['pmtexts'] = 0; // update the user record if necessary if ($updateuser and $user = fetch_userinfo($userid)) { $updateduser = true; $userdm =& datamanager_init('User', $vbulletin, ERRTYPE_SILENT); $userdm->set_existing($user); $userdm->set('pmtotal', 0); $userdm->set('pmunread', 0); $userdm->set('pmpopup', 'IF(pmpopup=2, 1, pmpopup)', false); $userdm->save(); unset($userdm); } } else { $out['pms'] = 0; $out['pmtexts'] = 0; } // in case the totals have been corrupted somehow if (!isset($updateduser) and $updateuser and $user = fetch_userinfo($userid)) { $userdm =& datamanager_init('User', $vbulletin, ERRTYPE_SILENT); $userdm->set_existing($user); $userdm->set('pmtotal', 0); $userdm->set('pmunread', 0); $userdm->set('pmpopup', 'IF(pmpopup=2, 1, pmpopup)', false); $userdm->save(); unset($userdm); } foreach ($out as $k => $v) { $out["{$k}"] = vb_number_format($v); } return $out; }