load("usercp"); if($mybb->user['uid'] == 0 || $mybb->usergroup['canusercp'] == 0) { error_no_permission(); } if(!$mybb->user['pmfolders']) { $mybb->user['pmfolders'] = "1**".$lang->folder_inbox."$%%$2**".$lang->folder_sent_items."$%%$3**".$lang->folder_drafts."$%%$4**".$lang->folder_trash; $db->update_query("users", array('pmfolders' => $mybb->user['pmfolders']), "uid='".$mybb->user['uid']."'"); } $errors = ''; if(!isset($mybb->input['action'])) { $mybb->input['action'] = ''; } $collapse_options = array('usercppms', 'usercpprofile', 'usercpmisc'); foreach($collapse_options as $option) { if(!isset($collapsedimg[$option])) { $collapsedimg[$option] = ''; } if(!isset($collapsed[$option.'_e'])) { $collapsed[$option.'_e'] = ''; } } usercp_menu(); $plugins->run_hooks("usercp_start"); if($mybb->input['action'] == "do_editsig" && $mybb->request_method == "post") { $parser_options = array( 'allow_html' => $mybb->settings['sightml'], 'filter_badwords' => 1, 'allow_mycode' => $mybb->settings['sigmycode'], 'allow_smilies' => $mybb->settings['sigsmilies'], 'allow_imgcode' => $mybb->settings['sigimgcode'], "filter_badwords" => 1 ); $parsed_sig = $parser->parse_message($mybb->input['signature'], $parser_options); if((($mybb->settings['sigimgcode'] == 0 && $mybb->settings['sigsmilies'] != 1) && substr_count($parsed_sig, " 0) || (($mybb->settings['sigimgcode'] == 1 || $mybb->settings['sigsmilies'] == 1) && substr_count($parsed_sig, " $mybb->settings['maxsigimages']) ) { if($mybb->settings['sigimgcode'] == 1) { $imgsallowed = $mybb->settings['maxsigimages']; } else { $imgsallowed = 0; } $lang->too_many_sig_images2 = $lang->sprintf($lang->too_many_sig_images2, $imgsallowed); $error = inline_error($lang->too_many_sig_images." ".$lang->too_many_sig_images2); $mybb->input['preview'] = 1; } else if($mybb->settings['siglength'] > 0) { if($mybb->settings['sigcountmycode'] == 0) { $parsed_sig = $parser->text_parse_message($mybb->input['signature']); } else { $parsed_sig = $mybb->input['signature']; } $parsed_sig = preg_replace("#\s#", "", $parsed_sig); $sig_length = my_strlen($parsed_sig); if($sig_length > $mybb->settings['siglength']) { $lang->sig_too_long = $lang->sprintf($lang->sig_too_long, $mybb->settings['siglength']); if($sig_length - $mybb->settings['siglength'] > 1) { $lang->sig_too_long .= $lang->sprintf($lang->sig_remove_chars_plural, $sig_length-$mybb->settings['siglength']); } else { $lang->sig_too_long .= $lang->sig_remove_chars_singular; } $error = inline_error($lang->sig_too_long); } } if($error || $mybb->input['preview']) { $mybb->input['action'] = "editsig"; } } // Make navigation add_breadcrumb($lang->nav_usercp, "usercp.php"); switch($mybb->input['action']) { case "profile": case "do_profile": add_breadcrumb($lang->ucp_nav_profile); break; case "options": case "do_options": add_breadcrumb($lang->nav_options); break; case "email": case "do_email": add_breadcrumb($lang->nav_email); break; case "password": case "do_password": add_breadcrumb($lang->nav_password); break; case "changename": case "do_changename": add_breadcrumb($lang->nav_changename); break; case "subscriptions": add_breadcrumb($lang->ucp_nav_subscribed_threads); break; case "forumsubscriptions": add_breadcrumb($lang->ucp_nav_forum_subscriptions); break; case "editsig": case "do_editsig": add_breadcrumb($lang->nav_editsig); break; case "avatar": case "do_avatar": add_breadcrumb($lang->nav_avatar); break; case "notepad": case "do_notepad": add_breadcrumb($lang->ucp_nav_notepad); break; case "editlists": case "do_editlists": add_breadcrumb($lang->ucp_nav_editlists); break; case "drafts": add_breadcrumb($lang->ucp_nav_drafts); break; case "usergroups": add_breadcrumb($lang->ucp_nav_usergroups); break; case "attachments": add_breadcrumb($lang->ucp_nav_attachments); break; } if($mybb->input['action'] == "do_profile" && $mybb->request_method == "post") { // Verify incoming POST request verify_post_check($mybb->input['my_post_key']); $plugins->run_hooks("usercp_do_profile_start"); if($mybb->input['away'] == 1 && $mybb->settings['allowaway'] != 0) { $awaydate = TIME_NOW; if($mybb->input['awayday']) { // If the user has indicated that they will return on a specific day, but not month or year, assume it is current month and year if(!$mybb->input['awaymonth']) { $mybb->input['awaymonth'] = my_date('n', $awaydate); } if(!$mybb->input['awayyear']) { $mybb->input['awayyear'] = my_date('Y', $awaydate); } $return_month = intval(substr($mybb->input['awaymonth'], 0, 2)); $return_day = intval(substr($mybb->input['awayday'], 0, 2)); $return_year = min(intval($mybb->input['awayyear']), 9999); // Check if return date is after the away date. $returntimestamp = gmmktime(0, 0, 0, $return_month, $return_day, $return_year); $awaytimestamp = gmmktime(0, 0, 0, my_date('n', $awaydate), my_date('j', $awaydate), my_date('Y', $awaydate)); if($return_year < my_date('Y', $awaydate) || ($returntimestamp < $awaytimestamp && $return_year == my_date('Y', $awaydate))) { error($lang->error_usercp_return_date_past); } $returndate = "{$return_day}-{$return_month}-{$return_year}"; } else { $returndate = ""; } $away = array( "away" => 1, "date" => $awaydate, "returndate" => $returndate, "awayreason" => $mybb->input['awayreason'] ); } else { $away = array( "away" => 0, "date" => '', "returndate" => '', "awayreason" => '' ); } $bday = array( "day" => $mybb->input['bday1'], "month" => $mybb->input['bday2'], "year" => $mybb->input['bday3'] ); // Set up user handler. require_once "inc/datahandlers/user.php"; $userhandler = new UserDataHandler("update"); $user = array( "uid" => $mybb->user['uid'], "website" => $mybb->input['website'], "icq" => intval($mybb->input['icq']), "aim" => $mybb->input['aim'], "yahoo" => $mybb->input['yahoo'], "msn" => $mybb->input['msn'], "birthday" => $bday, "birthdayprivacy" => $mybb->input['birthdayprivacy'], "away" => $away, "profile_fields" => $mybb->input['profile_fields'] ); if($mybb->usergroup['cancustomtitle'] == 1) { if($mybb->input['usertitle'] != '') { $user['usertitle'] = $mybb->input['usertitle']; } else if($mybb->input['reverttitle']) { $user['usertitle'] = ''; } } $userhandler->set_data($user); if(!$userhandler->validate_user()) { $errors = $userhandler->get_friendly_errors(); // Set allowed value otherwise select options disappear if(in_array($lang->userdata_invalid_birthday_privacy, $errors)) { $mybb->input['birthdayprivacy'] = 'none'; } $errors = inline_error($errors); $mybb->input['action'] = "profile"; } else { $userhandler->update_user(); $plugins->run_hooks("usercp_do_profile_end"); redirect("usercp.php", $lang->redirect_profileupdated); } } if($mybb->input['action'] == "profile") { if($errors) { $user = $mybb->input; $bday = array(); $bday[0] = $mybb->input['bday1']; $bday[1] = $mybb->input['bday2']; $bday[2] = intval($mybb->input['bday3']); } else { $user = $mybb->user; $bday = explode("-", $user['birthday']); } $plugins->run_hooks("usercp_profile_start"); $bdaysel = ''; for($i = 1; $i <= 31; ++$i) { if($bday[0] == $i) { $bdaydaysel .= "\n"; } else { $bdaydaysel .= "\n"; } } $bdaymonthsel[$bday[1]] = 'selected="selected"'; $bdayprivacysel = ''; if($user['birthdayprivacy'] == 'all' || !$user['birthdayprivacy']) { $bdayprivacysel .= "\n"; $bdayprivacysel .= "\n"; $bdayprivacysel .= ""; } else if($user['birthdayprivacy'] == 'none') { $bdayprivacysel .= "\n"; $bdayprivacysel .= "\n"; $bdayprivacysel .= ""; } else if($user['birthdayprivacy'] == 'age') { $bdayprivacysel .= "\n"; $bdayprivacysel .= "\n"; $bdayprivacysel .= ""; } if($user['website'] == "" || $user['website'] == "http://") { $user['website'] = "http://"; } else { $user['website'] = htmlspecialchars_uni($user['website']); } if($user['icq'] != "0") { $user['icq'] = intval($user['icq']); } if($user['icq'] == 0) { $user['icq'] = ""; } if($errors) { $user['msn'] = htmlspecialchars_uni($user['msn']); $user['aim'] = htmlspecialchars_uni($user['aim']); $user['yahoo'] = htmlspecialchars_uni($user['yahoo']); } if($mybb->settings['allowaway'] != 0) { if($errors) { if($user['away'] == 1) { $awaycheck[1] = "checked=\"checked\""; } else { $awaycheck[0] = "checked=\"checked\""; } $returndate = array(); $returndate[0] = $mybb->input['awayday']; $returndate[1] = $mybb->input['awaymonth']; $returndate[2] = intval($mybb->input['awayyear']); $user['awayreason'] = htmlspecialchars_uni($mybb->input['awayreason']); } else { $user['awayreason'] = htmlspecialchars_uni($user['awayreason']); if($mybb->user['away'] == 1) { $awaydate = my_date($mybb->settings['dateformat'], $mybb->user['awaydate']); $awaycheck[1] = "checked=\"checked\""; $awaynotice = $lang->sprintf($lang->away_notice_away, $awaydate); } else { $awaynotice = $lang->away_notice; $awaycheck[0] = "checked=\"checked\""; } $returndate = explode("-", $mybb->user['returndate']); } $returndatesel = ''; for($i = 1; $i <= 31; ++$i) { if($returndate[0] == $i) { $returndatesel .= "\n"; } else { $returndatesel .= "\n"; } } $returndatemonthsel[$returndate[1]] = "selected"; eval("\$awaysection = \"".$templates->get("usercp_profile_away")."\";"); } // Custom profile fields baby! $altbg = "trow1"; $requiredfields = ''; $customfields = ''; $query = $db->simple_select("profilefields", "*", "editable=1", array('order_by' => 'disporder')); while($profilefield = $db->fetch_array($query)) { // Does this field have a minimum post count? if($profilefield['postnum'] && $profilefield['postnum'] > $user['postnum']) { continue; } $profilefield['type'] = htmlspecialchars_uni($profilefield['type']); $profilefield['name'] = htmlspecialchars_uni($profilefield['name']); $profilefield['description'] = htmlspecialchars_uni($profilefield['description']); $thing = explode("\n", $profilefield['type'], "2"); $type = $thing[0]; $options = $thing[1]; $field = "fid{$profilefield['fid']}"; $select = ''; if($errors) { $userfield = $mybb->input['profile_fields'][$field]; } else { $userfield = $user[$field]; } if($type == "multiselect") { if($errors) { $useropts = $userfield; } else { $useropts = explode("\n", $userfield); } if(is_array($useropts)) { foreach($useropts as $key => $val) { $val = htmlspecialchars_uni($val); $seloptions[$val] = $val; } } $expoptions = explode("\n", $options); if(is_array($expoptions)) { foreach($expoptions as $key => $val) { $val = trim($val); $val = str_replace("\n", "\\n", $val); $sel = ""; if($val == $seloptions[$val]) { $sel = " selected=\"selected\""; } $select .= "\n"; } if(!$profilefield['length']) { $profilefield['length'] = 3; } $code = ""; } } elseif($type == "select") { $expoptions = explode("\n", $options); if(is_array($expoptions)) { foreach($expoptions as $key => $val) { $val = trim($val); $val = str_replace("\n", "\\n", $val); $sel = ""; if($val == htmlspecialchars_uni($userfield)) { $sel = " selected=\"selected\""; } $select .= ""; } if(!$profilefield['length']) { $profilefield['length'] = 1; } $code = ""; } } elseif($type == "radio") { $expoptions = explode("\n", $options); if(is_array($expoptions)) { foreach($expoptions as $key => $val) { $checked = ""; if($val == $userfield) { $checked = " checked=\"checked\""; } $code .= " $val
"; } } } elseif($type == "checkbox") { if($errors) { $useropts = $userfield; } else { $useropts = explode("\n", $userfield); } if(is_array($useropts)) { foreach($useropts as $key => $val) { $seloptions[$val] = $val; } } $expoptions = explode("\n", $options); if(is_array($expoptions)) { foreach($expoptions as $key => $val) { $checked = ""; if($val == $seloptions[$val]) { $checked = " checked=\"checked\""; } $code .= " $val
"; } } } elseif($type == "textarea") { $value = htmlspecialchars_uni($userfield); $code = ""; } else { $value = htmlspecialchars_uni($userfield); $maxlength = ""; if($profilefield['maxlength'] > 0) { $maxlength = " maxlength=\"{$profilefield['maxlength']}\""; } $code = ""; } if($profilefield['required'] == 1) { eval("\$requiredfields .= \"".$templates->get("usercp_profile_customfield")."\";"); } else { eval("\$customfields .= \"".$templates->get("usercp_profile_customfield")."\";"); } $altbg = alt_trow(); $code = ""; $select = ""; $val = ""; $options = ""; $expoptions = ""; $useropts = ""; $seloptions = ""; } if($customfields) { eval("\$customfields = \"".$templates->get("usercp_profile_profilefields")."\";"); } if($mybb->usergroup['cancustomtitle'] == 1) { if($mybb->usergroup['usertitle'] == "") { $defaulttitle = ''; $usertitles = $cache->read('usertitles'); foreach($usertitles as $title) { if($title['posts'] <= $mybb->user['postnum']) { $defaulttitle = $title['title']; break; } } } else { $defaulttitle = $mybb->usergroup['usertitle']; } if(trim($user['usertitle']) == '') { $lang->current_custom_usertitle = ''; } else { if($errors) { $newtitle = htmlspecialchars_uni($user['usertitle']); $user['usertitle'] = $mybb->user['usertitle']; } } eval("\$customtitle = \"".$templates->get("usercp_profile_customtitle")."\";"); } else { $customtitle = ""; } $plugins->run_hooks("usercp_profile_end"); eval("\$editprofile = \"".$templates->get("usercp_profile")."\";"); output_page($editprofile); } if($mybb->input['action'] == "do_options" && $mybb->request_method == "post") { // Verify incoming POST request verify_post_check($mybb->input['my_post_key']); $plugins->run_hooks("usercp_do_options_start"); // Set up user handler. require_once MYBB_ROOT."inc/datahandlers/user.php"; $userhandler = new UserDataHandler("update"); $user = array( "uid" => $mybb->user['uid'], "style" => intval($mybb->input['style']), "dateformat" => intval($mybb->input['dateformat']), "timeformat" => intval($mybb->input['timeformat']), "timezone" => $db->escape_string($mybb->input['timezoneoffset']), "language" => $mybb->input['language'] ); $user['options'] = array( "allownotices" => $mybb->input['allownotices'], "hideemail" => $mybb->input['hideemail'], "subscriptionmethod" => $mybb->input['subscriptionmethod'], "invisible" => $mybb->input['invisible'], "dstcorrection" => $mybb->input['dstcorrection'], "threadmode" => $mybb->input['threadmode'], "showsigs" => $mybb->input['showsigs'], "showavatars" => $mybb->input['showavatars'], "showquickreply" => $mybb->input['showquickreply'], "receivepms" => $mybb->input['receivepms'], "pmnotice" => $mybb->input['pmnotice'], "receivefrombuddy" => $mybb->input['receivefrombuddy'], "daysprune" => $mybb->input['daysprune'], "showcodebuttons" => intval($mybb->input['showcodebuttons']), "pmnotify" => $mybb->input['pmnotify'], "showredirect" => $mybb->input['showredirect'], "classicpostbit" => $mybb->input['classicpostbit'] ); if($mybb->settings['usertppoptions']) { $user['options']['tpp'] = intval($mybb->input['tpp']); } if($mybb->settings['userpppoptions']) { $user['options']['ppp'] = intval($mybb->input['ppp']); } $userhandler->set_data($user); if(!$userhandler->validate_user()) { $errors = $userhandler->get_friendly_errors(); $errors = inline_error($errors); $mybb->input['action'] = "options"; } else { $userhandler->update_user(); $plugins->run_hooks("usercp_do_options_end"); redirect("usercp.php", $lang->redirect_optionsupdated); } } if($mybb->input['action'] == "options") { $plugins->run_hooks("usercp_options_start"); if($errors != '') { $user = $mybb->input; } else { $user = $mybb->user; } $languages = $lang->get_languages(); $langoptions = ''; foreach($languages as $lname => $language) { $sel = ""; if($user['language'] == $lname) { $sel = " selected=\"selected\""; } $langoptions .= "\n"; } // Lets work out which options the user has selected and check the boxes if($user['allownotices'] == 1) { $allownoticescheck = "checked=\"checked\""; } else { $allownoticescheck = ""; } if($user['invisible'] == 1) { $invisiblecheck = "checked=\"checked\""; } else { $invisiblecheck = ""; } if($user['hideemail'] == 1) { $hideemailcheck = "checked=\"checked\""; } else { $hideemailcheck = ""; } if($user['subscriptionmethod'] == 1) { $no_email_subscribe_selected = "selected=\"selected\""; } else if($user['subscriptionmethod'] == 2) { $instant_email_subscribe_selected = "selected=\"selected\""; } else { $no_subscribe_selected = "selected=\"selected\""; } if($user['showsigs'] == 1) { $showsigscheck = "checked=\"checked\""; } else { $showsigscheck = ""; } if($user['showavatars'] == 1) { $showavatarscheck = "checked=\"checked\""; } else { $showavatarscheck = ""; } if($user['showquickreply'] == 1) { $showquickreplycheck = "checked=\"checked\""; } else { $showquickreplycheck = ""; } if($user['receivepms'] == 1) { $receivepmscheck = "checked=\"checked\""; } else { $receivepmscheck = ""; } if($user['receivefrombuddy'] == 1) { $receivefrombuddycheck = "checked=\"checked\""; } else { $receivefrombuddycheck = ""; } if($user['pmnotice'] == 1 || $user['pmnotice'] == 2) { $pmnoticecheck = " checked=\"checked\""; } else { $pmnoticecheck = ""; } if($user['dstcorrection'] == 2) { $dst_auto_selected = "selected=\"selected\""; } else if($user['dstcorrection'] == 1) { $dst_enabled_selected = "selected=\"selected\""; } else { $dst_disabled_selected = "selected=\"selected\""; } if($user['showcodebuttons'] == 1) { $showcodebuttonscheck = "checked=\"checked\""; } else { $showcodebuttonscheck = ""; } if($user['showredirect'] != 0) { $showredirectcheck = "checked=\"checked\""; } else { $showredirectcheck = ""; } if($user['pmnotify'] != 0) { $pmnotifycheck = "checked=\"checked\""; } else { $pmnotifycheck = ''; } if($user['threadmode'] != "threaded" && $user['threadmode'] != "linear") { $user['threadmode'] = ''; // Leave blank to show default } if($user['classicpostbit'] != 0) { $classicpostbitcheck = "checked=\"checked\""; } else { $classicpostbitcheck = ''; } $date_format_options = ""; foreach($date_formats as $key => $format) { if($user['dateformat'] == $key) { $date_format_options .= ""; } else { $date_format_options .= ""; } } $time_format_options = ""; foreach($time_formats as $key => $format) { if($user['timeformat'] == $key) { $time_format_options .= ""; } else { $time_format_options .= ""; } } $tzselect = build_timezone_select("timezoneoffset", $mybb->user['timezone'], true); if($mybb->settings['allowbuddyonly'] == 1) { eval("\$pms_from_buddys = \"".$templates->get("usercp_options_pms_from_buddys")."\";"); } $threadview[$user['threadmode']] = 'selected="selected"'; $daysprunesel[$user['daysprune']] = 'selected="selected"'; $stylelist = build_theme_select("style", $user['style']); if($mybb->settings['usertppoptions']) { $explodedtpp = explode(",", $mybb->settings['usertppoptions']); $tppoptions = ''; if(is_array($explodedtpp)) { foreach($explodedtpp as $key => $val) { $val = trim($val); $selected = ""; if($user['tpp'] == $val) { $selected = "selected=\"selected\""; } $tppoptions .= "\n"; } } eval("\$tppselect = \"".$templates->get("usercp_options_tppselect")."\";"); } if($mybb->settings['userpppoptions']) { $explodedppp = explode(",", $mybb->settings['userpppoptions']); $pppoptions = ''; if(is_array($explodedppp)) { foreach($explodedppp as $key => $val) { $val = trim($val); $selected = ""; if($user['ppp'] == $val) { $selected = "selected=\"selected\""; } $pppoptions .= "\n"; } } eval("\$pppselect = \"".$templates->get("usercp_options_pppselect")."\";"); } $plugins->run_hooks("usercp_options_end"); eval("\$editprofile = \"".$templates->get("usercp_options")."\";"); output_page($editprofile); } if($mybb->input['action'] == "do_email" && $mybb->request_method == "post") { // Verify incoming POST request verify_post_check($mybb->input['my_post_key']); $errors = array(); $plugins->run_hooks("usercp_do_email_start"); if(validate_password_from_uid($mybb->user['uid'], $mybb->input['password']) == false) { $errors[] = $lang->error_invalidpassword; } else { // Set up user handler. require_once "inc/datahandlers/user.php"; $userhandler = new UserDataHandler("update"); $user = array( "uid" => $mybb->user['uid'], "email" => $mybb->input['email'], "email2" => $mybb->input['email2'] ); $userhandler->set_data($user); if(!$userhandler->validate_user()) { $errors = $userhandler->get_friendly_errors(); } else { if($mybb->user['usergroup'] != "5" && $mybb->usergroup['cancp'] != 1) { $activationcode = random_str(); $now = TIME_NOW; $db->delete_query("awaitingactivation", "uid='".$mybb->user['uid']."'"); $newactivation = array( "uid" => $mybb->user['uid'], "dateline" => TIME_NOW, "code" => $activationcode, "type" => "e", "oldgroup" => $mybb->user['usergroup'], "misc" => $db->escape_string($mybb->input['email']) ); $db->insert_query("awaitingactivation", $newactivation); $username = $mybb->user['username']; $uid = $mybb->user['uid']; $lang->emailsubject_changeemail = $lang->sprintf($lang->emailsubject_changeemail, $mybb->settings['bbname']); $lang->email_changeemail = $lang->sprintf($lang->email_changeemail, $mybb->user['username'], $mybb->settings['bbname'], $mybb->user['email'], $mybb->input['email'], $mybb->settings['bburl'], $activationcode, $mybb->user['username'], $mybb->user['uid']); my_mail($mybb->input['email'], $lang->emailsubject_changeemail, $lang->email_changeemail); $plugins->run_hooks("usercp_do_email_verify"); error($lang->redirect_changeemail_activation); } else { $userhandler->update_user(); $plugins->run_hooks("usercp_do_email_changed"); redirect("usercp.php", $lang->redirect_emailupdated); } } } if(count($errors) > 0) { $mybb->input['action'] = "email"; $errors = inline_error($errors); } } if($mybb->input['action'] == "email") { // Coming back to this page after one or more errors were experienced, show fields the user previously entered (with the exception of the password) if($errors) { $email = htmlspecialchars_uni($mybb->input['email']); $email2 = htmlspecialchars_uni($mybb->input['email2']); } else { $email = $email2 = ''; } $plugins->run_hooks("usercp_email"); eval("\$changemail = \"".$templates->get("usercp_email")."\";"); output_page($changemail); } if($mybb->input['action'] == "do_password" && $mybb->request_method == "post") { // Verify incoming POST request verify_post_check($mybb->input['my_post_key']); $errors = array(); $plugins->run_hooks("usercp_do_password_start"); if(validate_password_from_uid($mybb->user['uid'], $mybb->input['oldpassword']) == false) { $errors[] = $lang->error_invalidpassword; } else { // Set up user handler. require_once "inc/datahandlers/user.php"; $userhandler = new UserDataHandler("update"); $user = array( "uid" => $mybb->user['uid'], "password" => $mybb->input['password'], "password2" => $mybb->input['password2'] ); $userhandler->set_data($user); if(!$userhandler->validate_user()) { $errors = $userhandler->get_friendly_errors(); } else { $userhandler->update_user(); my_setcookie("mybbuser", $mybb->user['uid']."_".$userhandler->data['loginkey']); $plugins->run_hooks("usercp_do_password_end"); redirect("usercp.php", $lang->redirect_passwordupdated); } } if(count($errors) > 0) { $mybb->input['action'] = "password"; $errors = inline_error($errors); } } if($mybb->input['action'] == "password") { $plugins->run_hooks("usercp_password"); eval("\$editpassword = \"".$templates->get("usercp_password")."\";"); output_page($editpassword); } if($mybb->input['action'] == "do_changename" && $mybb->request_method == "post") { // Verify incoming POST request verify_post_check($mybb->input['my_post_key']); $plugins->run_hooks("usercp_do_changename_start"); if($mybb->usergroup['canchangename'] != 1) { error_no_permission(); } if(validate_password_from_uid($mybb->user['uid'], $mybb->input['password']) == false) { $errors[] = $lang->error_invalidpassword; } else { // Set up user handler. require_once "inc/datahandlers/user.php"; $userhandler = new UserDataHandler("update"); $user = array( "uid" => $mybb->user['uid'], "username" => $mybb->input['username'] ); $userhandler->set_data($user); if(!$userhandler->validate_user()) { $errors = $userhandler->get_friendly_errors(); } else { $userhandler->update_user(); $plugins->run_hooks("usercp_do_changename_end"); redirect("usercp.php", $lang->redirect_namechanged); } } if(count($errors) > 0) { $errors = inline_error($errors); $mybb->input['action'] = "changename"; } } if($mybb->input['action'] == "changename") { $plugins->run_hooks("usercp_changename_start"); if($mybb->usergroup['canchangename'] != 1) { error_no_permission(); } $plugins->run_hooks("usercp_changename_end"); eval("\$changename = \"".$templates->get("usercp_changename")."\";"); output_page($changename); } if($mybb->input['action'] == "do_subscriptions") { // Verify incoming POST request verify_post_check($mybb->input['my_post_key']); $plugins->run_hooks("usercp_do_subscriptions_start"); if(!is_array($mybb->input['check'])) { error($lang->no_subscriptions_selected); } // Clean input - only accept integers thanks! $mybb->input['check'] = array_map('intval', $mybb->input['check']); $tids = implode(",", $mybb->input['check']); // Deleting these subscriptions? if($mybb->input['do'] == "delete") { $db->delete_query("threadsubscriptions", "tid IN ($tids) AND uid='{$mybb->user['uid']}'"); } // Changing subscription type else { if($mybb->input['do'] == "no_notification") { $new_notification = 0; } else if($mybb->input['do'] == "instant_notification") { $new_notification = 1; } // Update $update_array = array("notification" => $new_notification); $db->update_query("threadsubscriptions", $update_array, "tid IN ($tids) AND uid='{$mybb->user['uid']}'"); } // Done, redirect redirect("usercp.php?action=subscriptions", $lang->redirect_subscriptions_updated); } if($mybb->input['action'] == "subscriptions") { $plugins->run_hooks("usercp_subscriptions_start"); // Thread visiblity $visible = "AND t.visible != 0"; if(is_moderator() == true) { $visible = ''; } // Do Multi Pages $query = $db->query(" SELECT COUNT(ts.tid) as threads FROM ".TABLE_PREFIX."threadsubscriptions ts LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid = ts.tid) WHERE ts.uid = '".$mybb->user['uid']."' {$visible} "); $threadcount = $db->fetch_field($query, "threads"); if(!$mybb->settings['threadsperpage']) { $mybb->settings['threadsperpage'] = 20; } $perpage = $mybb->settings['threadsperpage']; $page = intval($mybb->input['page']); if($page > 0) { $start = ($page-1) * $perpage; $pages = $threadcount / $perpage; $pages = ceil($pages); if($page > $pages || $page <= 0) { $start = 0; $page = 1; } } else { $start = 0; $page = 1; } $end = $start + $perpage; $lower = $start+1; $upper = $end; if($upper > $threadcount) { $upper = $threadcount; } $multipage = multipage($threadcount, $perpage, $page, "usercp.php?action=subscriptions"); $fpermissions = forum_permissions(); // Fetch subscriptions $query = $db->query(" SELECT s.*, t.*, t.username AS threadusername, u.username, p.displaystyle AS threadprefix FROM ".TABLE_PREFIX."threadsubscriptions s LEFT JOIN ".TABLE_PREFIX."threads t ON (s.tid=t.tid) LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid = t.uid) LEFT JOIN ".TABLE_PREFIX."threadprefixes p ON (p.pid=t.prefix) WHERE s.uid='".$mybb->user['uid']."' {$visible} ORDER BY t.lastpost DESC LIMIT $start, $perpage "); while($subscription = $db->fetch_array($query)) { $forumpermissions = $fpermissions[$subscription['fid']]; if($forumpermissions['canview'] == 0 || $forumpermissions['canviewthreads'] == 0 || ($forumpermissions['canonlyviewownthreads'] != 0 && $subscription['uid'] != $mybb->user['uid'])) { // Hmm, you don't have permission to view this thread - unsubscribe! $del_subscriptions[] = $subscription['sid']; } else if($subscription['tid']) { $subscriptions[$subscription['tid']] = $subscription; } } if(is_array($del_subscriptions)) { $sids = implode(',', $del_subscriptions); if($sids) { $db->delete_query("threadsubscriptions", "sid IN ({$sids}) AND uid='{$mybb->user['uid']}'"); } $threadcount = $threadcount - count($del_subscriptions); if($threadcount < 0) { $threadcount = 0; } } if(is_array($subscriptions)) { $tids = implode(",", array_keys($subscriptions)); if($mybb->user['uid'] == 0) { // Build a forum cache. $query = $db->query(" SELECT fid FROM ".TABLE_PREFIX."forums WHERE active != 0 ORDER BY pid, disporder "); $forumsread = my_unserialize($mybb->cookies['mybb']['forumread']); } else { // Build a forum cache. $query = $db->query(" SELECT f.fid, fr.dateline AS lastread FROM ".TABLE_PREFIX."forums f LEFT JOIN ".TABLE_PREFIX."forumsread fr ON (fr.fid=f.fid AND fr.uid='{$mybb->user['uid']}') WHERE f.active != 0 ORDER BY pid, disporder "); } while($forum = $db->fetch_array($query)) { if($mybb->user['uid'] == 0) { if($forumsread[$forum['fid']]) { $forum['lastread'] = $forumsread[$forum['fid']]; } } $readforums[$forum['fid']] = $forum['lastread']; } // Check participation by the current user in any of these threads - for 'dot' folder icons if($mybb->settings['dotfolders'] != 0) { $query = $db->simple_select("posts", "tid,uid", "uid='{$mybb->user['uid']}' AND tid IN ({$tids})"); while($post = $db->fetch_array($query)) { $subscriptions[$post['tid']]['doticon'] = 1; } } // Read threads if($mybb->settings['threadreadcut'] > 0) { $query = $db->simple_select("threadsread", "*", "uid='{$mybb->user['uid']}' AND tid IN ({$tids})"); while($readthread = $db->fetch_array($query)) { $subscriptions[$readthread['tid']]['lastread'] = $readthread['dateline']; } } $icon_cache = $cache->read("posticons"); // Now we can build our subscription list foreach($subscriptions as $thread) { $bgcolor = alt_trow(); $folder = ''; $prefix = ''; // If this thread has a prefix, insert a space between prefix and subject if($thread['prefix'] != 0) { $thread['threadprefix'] .= ' '; } // Sanitize $thread['subject'] = $parser->parse_badwords($thread['subject']); $thread['subject'] = htmlspecialchars_uni($thread['subject']); // Build our links $thread['threadlink'] = get_thread_link($thread['tid']); $thread['lastpostlink'] = get_thread_link($thread['tid'], 0, "lastpost"); // Fetch the thread icon if we have one if($thread['icon'] > 0 && $icon_cache[$thread['icon']]) { $icon = $icon_cache[$thread['icon']]; $icon = "\"{$icon['name']}\""; } else { $icon = " "; } // Determine the folder $folder = ''; $folder_label = ''; if($thread['doticon']) { $folder = "dot_"; $folder_label .= $lang->icon_dot; } $gotounread = ''; $isnew = 0; $donenew = 0; $lastread = 0; if($mybb->settings['threadreadcut'] > 0 && $mybb->user['uid']) { $forum_read = $readforums[$thread['fid']]; $read_cutoff = TIME_NOW-$mybb->settings['threadreadcut']*60*60*24; if($forum_read == 0 || $forum_read < $read_cutoff) { $forum_read = $read_cutoff; } } else { $forum_read = $forumsread[$thread['fid']]; } if($mybb->settings['threadreadcut'] > 0 && $thread['lastpost'] > $forum_read) { $cutoff = TIME_NOW-$mybb->settings['threadreadcut']*60*60*24; } if($thread['lastpost'] > $cutoff) { if($thread['lastread']) { $lastread = $thread['lastread']; } else { $lastread = 1; } } if(!$lastread) { $readcookie = $threadread = my_get_array_cookie("threadread", $thread['tid']); if($readcookie > $forum_read) { $lastread = $readcookie; } else { $lastread = $forum_read; } } if($lastread && $lastread < $thread['lastpost']) { $folder .= "new"; $folder_label .= $lang->icon_new; $new_class = "subject_new"; $thread['newpostlink'] = get_thread_link($thread['tid'], 0, "newpost"); eval("\$gotounread = \"".$templates->get("forumdisplay_thread_gotounread")."\";"); $unreadpost = 1; } else { $folder_label .= $lang->icon_no_new; $new_class = "subject_old"; } if($thread['replies'] >= $mybb->settings['hottopic'] || $thread['views'] >= $mybb->settings['hottopicviews']) { $folder .= "hot"; $folder_label .= $lang->icon_hot; } if($thread['closed'] == 1) { $folder .= "lock"; $folder_label .= $lang->icon_lock; } $folder .= "folder"; if($thread['visible'] == 0) { $bgcolor = "trow_shaded"; } // Build last post info $lastpostdate = my_date($mybb->settings['dateformat'], $thread['lastpost']); $lastposttime = my_date($mybb->settings['timeformat'], $thread['lastpost']); $lastposter = $thread['lastposter']; $lastposteruid = $thread['lastposteruid']; // Don't link to guest's profiles (they have no profile). if($lastposteruid == 0) { $lastposterlink = $lastposter; } else { $lastposterlink = build_profile_link($lastposter, $lastposteruid); } $thread['replies'] = my_number_format($thread['replies']); $thread['views'] = my_number_format($thread['views']); // What kind of notification type do we have here? switch($thread['notification']) { case "1": // Instant $notification_type = $lang->instant_notification; break; default: // No notification $notification_type = $lang->no_notification; } eval("\$threads .= \"".$templates->get("usercp_subscriptions_thread")."\";"); } // Provide remove options eval("\$remove_options = \"".$templates->get("usercp_subscriptions_remove")."\";"); } else { eval("\$threads = \"".$templates->get("usercp_subscriptions_none")."\";"); } $plugins->run_hooks("usercp_subscriptions_end"); eval("\$subscriptions = \"".$templates->get("usercp_subscriptions")."\";"); output_page($subscriptions); } if($mybb->input['action'] == "forumsubscriptions") { $plugins->run_hooks("usercp_forumsubscriptions_start"); if($mybb->user['uid'] == 0) { // Build a forum cache. $query = $db->query(" SELECT fid FROM ".TABLE_PREFIX."forums WHERE active != 0 ORDER BY pid, disporder "); $forumsread = my_unserialize($mybb->cookies['mybb']['forumread']); } else { // Build a forum cache. $query = $db->query(" SELECT f.fid, fr.dateline AS lastread FROM ".TABLE_PREFIX."forums f LEFT JOIN ".TABLE_PREFIX."forumsread fr ON (fr.fid=f.fid AND fr.uid='{$mybb->user['uid']}') WHERE f.active != 0 ORDER BY pid, disporder "); } while($forum = $db->fetch_array($query)) { if($mybb->user['uid'] == 0) { if($forumsread[$forum['fid']]) { $forum['lastread'] = $forumsread[$forum['fid']]; } } $readforums[$forum['fid']] = $forum['lastread']; } $fpermissions = forum_permissions(); require_once MYBB_ROOT."inc/functions_forumlist.php"; $query = $db->query(" SELECT fs.*, f.*, t.subject AS lastpostsubject, fr.dateline AS lastread FROM ".TABLE_PREFIX."forumsubscriptions fs LEFT JOIN ".TABLE_PREFIX."forums f ON (f.fid = fs.fid) LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid = f.lastposttid) LEFT JOIN ".TABLE_PREFIX."forumsread fr ON (fr.fid=f.fid AND fr.uid='{$mybb->user['uid']}') WHERE f.type='f' AND fs.uid='".$mybb->user['uid']."' ORDER BY f.name ASC "); $forums = ''; while($forum = $db->fetch_array($query)) { $forum_url = get_forum_link($forum['fid']); $forumpermissions = $fpermissions[$forum['fid']]; if($forumpermissions['canview'] == 0 || $forumpermissions['canviewthreads'] == 0) { continue; } $lightbulb = get_forum_lightbulb(array('open' => $forum['open'], 'lastread' => $forum['lastread']), array('lastpost' => $forum['lastpost'])); $folder = $lightbulb['folder']; if($forumpermissions['canonlyviewownthreads'] != 0) { $posts = '-'; $threads = '-'; } else { $posts = my_number_format($forum['posts']); $threads = my_number_format($forum['threads']); } if($forum['lastpost'] == 0 || $forum['lastposter'] == "") { $lastpost = "
{$lang->never}
"; } // Hide last post elseif($forumpermissions['canonlyviewownthreads'] != 0 && $forum['lastposteruid'] != $mybb->user['uid']) { $lastpost = "
{$lang->na}
"; } else { $forum['lastpostsubject'] = $parser->parse_badwords($forum['lastpostsubject']); $lastpost_date = my_date($mybb->settings['dateformat'], $forum['lastpost']); $lastpost_time = my_date($mybb->settings['timeformat'], $forum['lastpost']); $lastposttid = $forum['lastposttid']; $lastposter = $forum['lastposter']; $lastpost_profilelink = build_profile_link($lastposter, $forum['lastposteruid']); $lastpost_subject = htmlspecialchars_uni($forum['lastpostsubject']); if(my_strlen($lastpost_subject) > 25) { $lastpost_subject = my_substr($lastpost_subject, 0, 25) . "..."; } $lastpost_link = get_thread_link($forum['lastposttid'], 0, "lastpost"); eval("\$lastpost = \"".$templates->get("forumbit_depth2_forum_lastpost")."\";"); } if($mybb->settings['showdescriptions'] == 0) { $forum['description'] = ""; } eval("\$forums .= \"".$templates->get("usercp_forumsubscriptions_forum")."\";"); } if(!$forums) { eval("\$forums = \"".$templates->get("usercp_forumsubscriptions_none")."\";"); } $plugins->run_hooks("usercp_forumsubscriptions_end"); eval("\$forumsubscriptions = \"".$templates->get("usercp_forumsubscriptions")."\";"); output_page($forumsubscriptions); } if($mybb->input['action'] == "do_editsig" && $mybb->request_method == "post") { // Verify incoming POST request verify_post_check($mybb->input['my_post_key']); $plugins->run_hooks("usercp_do_editsig_start"); // User currently has a suspended signature if($mybb->user['suspendsignature'] == 1 && $mybb->user['suspendsigtime'] > TIME_NOW) { error_no_permission(); } if($mybb->input['updateposts'] == "enable") { $update_signature = array( "includesig" => 1 ); $db->update_query("posts", $update_signature, "uid='".$mybb->user['uid']."'"); } elseif($mybb->input['updateposts'] == "disable") { $update_signature = array( "includesig" => 0 ); $db->update_query("posts", $update_signature, "uid='".$mybb->user['uid']."'"); } $new_signature = array( "signature" => $db->escape_string($mybb->input['signature']) ); $plugins->run_hooks("usercp_do_editsig_process"); $db->update_query("users", $new_signature, "uid='".$mybb->user['uid']."'"); $plugins->run_hooks("usercp_do_editsig_end"); redirect("usercp.php?action=editsig", $lang->redirect_sigupdated); } if($mybb->input['action'] == "editsig") { $plugins->run_hooks("usercp_editsig_start"); if($mybb->input['preview'] && !$error) { $sig = $mybb->input['signature']; $template = "usercp_editsig_preview"; } elseif(!$error) { $sig = $mybb->user['signature']; $template = "usercp_editsig_current"; } else if($error) { $sig = $mybb->input['signature']; $template = false; } if($mybb->user['suspendsignature'] && ($mybb->user['suspendsigtime'] == 0 || $mybb->user['suspendsigtime'] > 0 && $mybb->user['suspendsigtime'] > TIME_NOW)) { // User currently has no signature and they're suspended error($lang->sig_suspended); } if($mybb->usergroup['canusesig'] != 1) { // Usergroup has no permission to use this facility error_no_permission(); } else if($mybb->usergroup['canusesig'] == 1 && $mybb->usergroup['canusesigxposts'] > 0 && $mybb->user['postnum'] < $mybb->usergroup['canusesigxposts']) { // Usergroup can use this facility, but only after x posts error($lang->sprintf($lang->sig_suspended_posts, $mybb->usergroup['canusesigxposts'])); } if($sig && $template) { $sig_parser = array( "allow_html" => $mybb->settings['sightml'], "allow_mycode" => $mybb->settings['sigmycode'], "allow_smilies" => $mybb->settings['sigsmilies'], "allow_imgcode" => $mybb->settings['sigimgcode'], "me_username" => $mybb->user['username'], "filter_badwords" => 1 ); $sigpreview = $parser->parse_message($sig, $sig_parser); eval("\$signature = \"".$templates->get($template)."\";"); } // User has a current signature, so let's display it (but show an error message) if($mybb->user['suspendsignature'] && $mybb->user['suspendsigtime'] > TIME_NOW) { $plugins->run_hooks("usercp_editsig_end"); // User either doesn't have permission, or has their signature suspended eval("\$editsig = \"".$templates->get("usercp_editsig_suspended")."\";"); } else { // User is allowed to edit their signature if($mybb->settings['sigsmilies'] == 1) { $sigsmilies = $lang->on; $smilieinserter = build_clickable_smilies(); } else { $sigsmilies = $lang->off; } if($mybb->settings['sigmycode'] == 1) { $sigmycode = $lang->on; } else { $sigmycode = $lang->off; } if($mybb->settings['sightml'] == 1) { $sightml = $lang->on; } else { $sightml = $lang->off; } if($mybb->settings['sigimgcode'] == 1) { $sigimgcode = $lang->on; } else { $sigimgcode = $lang->off; } $sig = htmlspecialchars_uni($sig); $lang->edit_sig_note2 = $lang->sprintf($lang->edit_sig_note2, $sigsmilies, $sigmycode, $sigimgcode, $sightml, $mybb->settings['siglength']); if($mybb->settings['bbcodeinserter'] != 0 || $mybb->user['showcodebuttons'] != 0) { $codebuttons = build_mycode_inserter("signature"); } $plugins->run_hooks("usercp_editsig_end"); eval("\$editsig = \"".$templates->get("usercp_editsig")."\";"); } output_page($editsig); } if($mybb->input['action'] == "do_avatar" && $mybb->request_method == "post") { // Verify incoming POST request verify_post_check($mybb->input['my_post_key']); $plugins->run_hooks("usercp_do_avatar_start"); require_once MYBB_ROOT."inc/functions_upload.php"; $avatar_error = ""; if($mybb->input['remove']) // remove avatar { $updated_avatar = array( "avatar" => "", "avatardimensions" => "", "avatartype" => "" ); $db->update_query("users", $updated_avatar, "uid='".$mybb->user['uid']."'"); remove_avatars($mybb->user['uid']); } elseif($mybb->input['gallery']) // Gallery avatar { if(empty($mybb->input['avatar'])) { $avatar_error = $lang->error_noavatar; } $mybb->input['gallery'] = str_replace(array("./", ".."), "", $mybb->input['gallery']); $mybb->input['avatar'] = str_replace(array("./", ".."), "", $mybb->input['avatar']); if(empty($avatar_error)) { if($mybb->input['gallery'] == "default") { $avatarpath = $db->escape_string($mybb->settings['avatardir']."/".$mybb->input['avatar']); } else { $avatarpath = $db->escape_string($mybb->settings['avatardir']."/".$mybb->input['gallery']."/".$mybb->input['avatar']); } if(file_exists($avatarpath)) { $dimensions = @getimagesize($avatarpath); $updated_avatar = array( "avatar" => $avatarpath.'?dateline='.TIME_NOW, "avatardimensions" => "{$dimensions[0]}|{$dimensions[1]}", "avatartype" => "gallery" ); $db->update_query("users", $updated_avatar, "uid='".$mybb->user['uid']."'"); } remove_avatars($mybb->user['uid']); } } elseif($_FILES['avatarupload']['name']) // upload avatar { if($mybb->usergroup['canuploadavatars'] == 0) { error_no_permission(); } $avatar = upload_avatar(); if($avatar['error']) { $avatar_error = $avatar['error']; } else { if($avatar['width'] > 0 && $avatar['height'] > 0) { $avatar_dimensions = $avatar['width']."|".$avatar['height']; } $updated_avatar = array( "avatar" => $avatar['avatar'].'?dateline='.TIME_NOW, "avatardimensions" => $avatar_dimensions, "avatartype" => "upload" ); $db->update_query("users", $updated_avatar, "uid='".$mybb->user['uid']."'"); } } else // remote avatar { $mybb->input['avatarurl'] = preg_replace("#script:#i", "", $mybb->input['avatarurl']); $ext = get_extension($mybb->input['avatarurl']); // Copy the avatar to the local server (work around remote URL access disabled for getimagesize) $file = fetch_remote_file($mybb->input['avatarurl']); if(!$file) { $avatar_error = $lang->error_invalidavatarurl; } else { $tmp_name = $mybb->settings['avataruploadpath']."/remote_".md5(random_str()); $fp = @fopen($tmp_name, "wb"); if(!$fp) { $avatar_error = $lang->error_invalidavatarurl; } else { fwrite($fp, $file); fclose($fp); list($width, $height, $type) = @getimagesize($tmp_name); @unlink($tmp_name); if(!$type) { $avatar_error = $lang->error_invalidavatarurl; } } } if(empty($avatar_error)) { if($width && $height && $mybb->settings['maxavatardims'] != "") { list($maxwidth, $maxheight) = explode("x", my_strtolower($mybb->settings['maxavatardims'])); if(($maxwidth && $width > $maxwidth) || ($maxheight && $height > $maxheight)) { $lang->error_avatartoobig = $lang->sprintf($lang->error_avatartoobig, $maxwidth, $maxheight); $avatar_error = $lang->error_avatartoobig; } } } if(empty($avatar_error)) { if($width > 0 && $height > 0) { $avatar_dimensions = intval($width)."|".intval($height); } $updated_avatar = array( "avatar" => $db->escape_string($mybb->input['avatarurl'].'?dateline='.TIME_NOW), "avatardimensions" => $avatar_dimensions, "avatartype" => "remote" ); $db->update_query("users", $updated_avatar, "uid='".$mybb->user['uid']."'"); remove_avatars($mybb->user['uid']); } } if(empty($avatar_error)) { $plugins->run_hooks("usercp_do_avatar_end"); redirect("usercp.php", $lang->redirect_avatarupdated); } else { $mybb->input['action'] = "avatar"; $avatar_error = inline_error($avatar_error); } } if($mybb->input['action'] == "avatar") { $plugins->run_hooks("usercp_avatar_start"); // Get a listing of available galleries $gallerylist['default'] = $lang->default_gallery; $avatardir = @opendir($mybb->settings['avatardir']); while($dir = @readdir($avatardir)) { if(is_dir($mybb->settings['avatardir']."/$dir") && substr($dir, 0, 1) != ".") { $gallerylist[$dir] = str_replace("_", " ", $dir); } } @closedir($avatardir); natcasesort($gallerylist); reset($gallerylist); $galleries = ''; foreach($gallerylist as $dir => $friendlyname) { if($dir == $mybb->input['gallery']) { $activegallery = $friendlyname; $selected = "selected=\"selected\""; } $galleries .= "\n"; $selected = ""; } // Check to see if we're in a gallery or not if($activegallery) { $gallery = str_replace("..", "", $mybb->input['gallery']); $lang->avatars_in_gallery = $lang->sprintf($lang->avatars_in_gallery, $activegallery); // Get a listing of avatars in this gallery $avatardir = $mybb->settings['avatardir']; if($gallery != "default") { $avatardir .= "/$gallery"; } $opendir = opendir($avatardir); while($avatar = @readdir($opendir)) { $avatarpath = $avatardir."/".$avatar; if(is_file($avatarpath) && preg_match("#\.(jpg|jpeg|gif|bmp|png)$#i", $avatar)) { $avatars[] = $avatar; } } @closedir($opendir); if(is_array($avatars)) { natcasesort($avatars); reset($avatars); $count = 0; $avatarlist = "\n"; foreach($avatars as $avatar) { $avatarpath = $avatardir."/".$avatar; $avatarname = preg_replace("#\.(jpg|jpeg|gif|bmp|png)$#i", "", $avatar); $avatarname = ucwords(str_replace("_", " ", $avatarname)); if($mybb->user['avatar'] == $avatarpath) { $checked = "checked=\"checked\""; } if($count == 5) { $avatarlist .= "\n\n"; $count = 0; } ++$count; eval("\$avatarlist .= \"".$templates->get("usercp_avatar_gallery_avatar")."\";"); } if($count != 0) { for($i = $count; $i <= 5; ++$i) { eval("\$avatarlist .= \"".$templates->get("usercp_avatar_gallery_blankblock")."\";"); } } } else { eval("\$avatarlist = \"".$templates->get("usercp_avatar_gallery_noavatars")."\";"); } $plugins->run_hooks("usercp_avatar_end"); eval("\$gallery = \"".$templates->get("usercp_avatar_gallery")."\";"); output_page($gallery); } // Show main avatar page else { if($mybb->user['avatartype'] == "upload" || stristr($mybb->user['avatar'], $mybb->settings['avataruploadpath'])) { $avatarmsg = "
".$lang->already_uploaded_avatar.""; } elseif($mybb->user['avatartype'] == "gallery" || stristr($mybb->user['avatar'], $mybb->settings['avatardir'])) { $avatarmsg = "
".$lang->using_gallery_avatar.""; } elseif($mybb->user['avatartype'] == "remote" || my_strpos(my_strtolower($mybb->user['avatar']), "http://") !== false) { $avatarmsg = "
".$lang->using_remote_avatar.""; $avatarurl = htmlspecialchars_uni($mybb->user['avatar']); } $urltoavatar = htmlspecialchars_uni($mybb->user['avatar']); if($mybb->user['avatar']) { $avatar_dimensions = explode("|", $mybb->user['avatardimensions']); if($avatar_dimensions[0] && $avatar_dimensions[1]) { $avatar_width_height = "width=\"{$avatar_dimensions[0]}\" height=\"{$avatar_dimensions[1]}\""; } eval("\$currentavatar = \"".$templates->get("usercp_avatar_current")."\";"); $colspan = 1; } else { $colspan = 2; } if($mybb->settings['maxavatardims'] != "") { list($maxwidth, $maxheight) = explode("x", my_strtolower($mybb->settings['maxavatardims'])); $lang->avatar_note .= "
".$lang->sprintf($lang->avatar_note_dimensions, $maxwidth, $maxheight); } if($mybb->settings['avatarsize']) { $maxsize = get_friendly_size($mybb->settings['avatarsize']*1024); $lang->avatar_note .= "
".$lang->sprintf($lang->avatar_note_size, $maxsize); } if($mybb->settings['avatarresizing'] == "auto") { $auto_resize = "
{$lang->avatar_auto_resize_note}\n"; } else if($mybb->settings['avatarresizing'] == "user") { $auto_resize = "
"; } $plugins->run_hooks("usercp_avatar_end"); eval("\$avatar = \"".$templates->get("usercp_avatar")."\";"); output_page($avatar); } } if($mybb->input['action'] == "do_editlists") { // Verify incoming POST request verify_post_check($mybb->input['my_post_key']); $plugins->run_hooks("usercp_do_editlists_start"); $existing_users = array(); $selected_list = array(); if($mybb->input['manage'] == "ignored") { if($mybb->user['ignorelist']) { $existing_users = explode(",", $mybb->user['ignorelist']); } if($mybb->user['buddylist']) { // Create a list of buddies... $selected_list = explode(",", $mybb->user['buddylist']); } } else { if($mybb->user['buddylist']) { $existing_users = explode(",", $mybb->user['buddylist']); } if($mybb->user['ignorelist']) { // Create a list of ignored users $selected_list = explode(",", $mybb->user['ignorelist']); } } $error_message = ""; $message = ""; // Adding one or more users to this list if($mybb->input['add_username']) { // Split up any usernames we have $found_users = 0; $adding_self = false; $users = explode(",", $mybb->input['add_username']); $users = array_map("trim", $users); $users = array_unique($users); foreach($users as $key => $username) { if(empty($username)) { unset($users[$key]); continue; } if(my_strtoupper($mybb->user['username']) == my_strtoupper($username)) { $adding_self = true; unset($users[$key]); continue; } $users[$key] = $db->escape_string($username); } // Fetch out new users if(count($users) > 0) { $query = $db->simple_select("users", "uid", "LOWER(username) IN ('".my_strtolower(implode("','", $users))."')"); while($user = $db->fetch_array($query)) { ++$found_users; // Make sure we're not adding a duplicate if(in_array($user['uid'], $existing_users) || in_array($user['uid'], $selected_list)) { if($mybb->input['manage'] == "ignored") { $error_message = "ignore"; } else { $error_message = "buddy"; } // On another list? $string = "users_already_on_".$error_message."_list"; if(in_array($user['uid'], $selected_list)) { $string .= "_alt"; } $error_message = $lang->$string; array_pop($users); // To maintain a proper count when we call count($users) continue; } $existing_users[] = $user['uid']; } } if($found_users < count($users)) { if($error_message) { $error_message .= "
"; } $error_message .= $lang->invalid_user_selected; } if(($adding_self != true || ($adding_self == true && count($users) > 0)) && ($error_message == "" || count($users) > 1)) { if($mybb->input['manage'] == "ignored") { $message = $lang->users_added_to_ignore_list; } else { $message = $lang->users_added_to_buddy_list; } } if($adding_self == true) { if($mybb->input['manage'] == "ignored") { $error_message = $lang->cant_add_self_to_ignore_list; } else { $error_message = $lang->cant_add_self_to_buddy_list; } } if(count($existing_users) == 0) { $message = ""; } } // Removing a user from this list else if($mybb->input['delete']) { // Check if user exists on the list $key = array_search($mybb->input['delete'], $existing_users); if($key !== false) { unset($existing_users[$key]); $user = get_user($mybb->input['delete']); if($mybb->input['manage'] == "ignored") { $message = $lang->removed_from_ignore_list; } else { $message = $lang->removed_from_buddy_list; } $message = $lang->sprintf($message, $user['username']); } } // Now we have the new list, so throw it all back together $new_list = implode(",", $existing_users); // And clean it up a little to ensure there is no possibility of bad values $new_list = preg_replace("#,{2,}#", ",", $new_list); $new_list = preg_replace("#[^0-9,]#", "", $new_list); if(my_substr($new_list, 0, 1) == ",") { $new_list = my_substr($new_list, 1); } if(my_substr($new_list, -1) == ",") { $new_list = my_substr($new_list, 0, my_strlen($new_list)-2); } // And update $user = array(); if($mybb->input['manage'] == "ignored") { $user['ignorelist'] = $db->escape_string($new_list); $mybb->user['ignorelist'] = $user['ignorelist']; } else { $user['buddylist'] = $db->escape_string($new_list); $mybb->user['buddylist'] = $user['buddylist']; } $db->update_query("users", $user, "uid='".$mybb->user['uid']."'"); $plugins->run_hooks("usercp_do_editlists_end"); // Ajax based request, throw new list to browser if($mybb->input['ajax']) { if($mybb->input['manage'] == "ignored") { $list = "ignore"; } else { $list = "buddy"; } if($message) { $message_js = "var success = document.createElement('div'); var element = \$('{$list}_list'); element.parentNode.insertBefore(success, element); success.innerHTML = '{$message}'; success.className = 'success_message'; window.setTimeout(function() { Element.remove(success) }, 5000);"; } if($error_message) { $message_js .= " var error = document.createElement('div'); var element = \$('{$list}_list'); element.parentNode.insertBefore(error, element); error.innerHTML = '{$error_message}'; error.className = 'error_message'; window.setTimeout(function() { Element.remove(error) }, 5000);"; } if($mybb->input['delete']) { header("Content-type: text/javascript"); echo "Element.remove('{$mybb->input['manage']}_{$mybb->input['delete']}');\n"; if($new_list == "") { echo "\$('{$mybb->input['manage']}_count').innerHTML = '0';\n"; if($mybb->input['manage'] == "ignored") { echo "\$('ignore_list').innerHTML = '
  • {$lang->ignore_list_empty}
  • ';\n"; } else { echo "\$('buddy_list').innerHTML = '
  • {$lang->buddy_list_empty}
  • ';\n"; } } else { echo "\$('{$mybb->input['manage']}_count').innerHTML = '".count(explode(",", $new_list))."';\n"; } echo $message_js; exit; } $mybb->input['action'] = "editlists"; } else { if($error_message) { $message .= "
    ".$error_message; } redirect("usercp.php?action=editlists#{$mybb->input['manage']}", $message); } } if($mybb->input['action'] == "editlists") { $plugins->run_hooks("usercp_editlists_start"); $timecut = TIME_NOW - $mybb->settings['wolcutoff']; // Fetch out buddies $buddy_count = 0; if($mybb->user['buddylist']) { $type = "buddy"; $query = $db->simple_select("users", "*", "uid IN ({$mybb->user['buddylist']})", array("order_by" => "username")); while($user = $db->fetch_array($query)) { $profile_link = build_profile_link(format_name($user['username'], $user['usergroup'], $user['displaygroup']), $user['uid']); if($user['lastactive'] > $timecut && ($user['invisible'] == 0 || $mybb->usergroup['canviewwolinvis'] == 1) && $user['lastvisit'] != $user['lastactive']) { $status = "online"; } else { $status = "offline"; } eval("\$buddy_list .= \"".$templates->get("usercp_editlists_user")."\";"); ++$buddy_count; } } $lang->current_buddies = $lang->sprintf($lang->current_buddies, $buddy_count); if(!$buddy_list) { $buddy_list = "
  • {$lang->buddy_list_empty}
  • "; } // Fetch out ignore list users $ignore_count = 0; if($mybb->user['ignorelist']) { $type = "ignored"; $query = $db->simple_select("users", "*", "uid IN ({$mybb->user['ignorelist']})", array("order_by" => "username")); while($user = $db->fetch_array($query)) { $profile_link = build_profile_link(format_name($user['username'], $user['usergroup'], $user['displaygroup']), $user['uid']); if($user['lastactive'] > $timecut && ($user['invisible'] == 0 || $mybb->usergroup['canviewwolinvis'] == 1) && $user['lastvisit'] != $user['lastactive']) { $status = "online"; } else { $status = "offline"; } eval("\$ignore_list .= \"".$templates->get("usercp_editlists_user")."\";"); ++$ignore_count; } } $lang->current_ignored_users = $lang->sprintf($lang->current_ignored_users, $ignore_count); if(!$ignore_list) { $ignore_list = "
  • {$lang->ignore_list_empty}
  • "; } // If an AJAX request from buddy management, echo out whatever the new list is. if($mybb->request_method == "post" && $mybb->input['ajax'] == 1) { if($mybb->input['manage'] == "ignored") { echo $ignore_list; echo ""; } else { echo $buddy_list; echo ""; } exit; } $plugins->run_hooks("usercp_editlists_end"); eval("\$listpage = \"".$templates->get("usercp_editlists")."\";"); output_page($listpage); } if($mybb->input['action'] == "drafts") { $plugins->run_hooks("usercp_drafts_start"); // Show a listing of all of the current 'draft' posts or threads the user has. $drafts = ''; $query = $db->query(" SELECT p.subject, p.pid, t.tid, t.subject AS threadsubject, t.fid, f.name AS forumname, p.dateline, t.visible AS threadvisible, p.visible AS postvisible FROM ".TABLE_PREFIX."posts p LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=p.tid) LEFT JOIN ".TABLE_PREFIX."forums f ON (f.fid=t.fid) WHERE p.uid='".$mybb->user['uid']."' AND p.visible='-2' ORDER BY p.dateline DESC "); while($draft = $db->fetch_array($query)) { $trow = alt_trow(); if($draft['threadvisible'] == 1) // We're looking at a draft post { $detail = $lang->thread." ".htmlspecialchars_uni($draft['threadsubject']).""; $editurl = "newreply.php?action=editdraft&pid={$draft['pid']}"; $id = $draft['pid']; $type = "post"; } elseif($draft['threadvisible'] == -2) // We're looking at a draft thread { $detail = $lang->forum." {$draft['forumname']}"; $editurl = "newthread.php?action=editdraft&tid={$draft['tid']}"; $id = $draft['tid']; $type = "thread"; } $draft['subject'] = htmlspecialchars_uni($draft['subject']); $savedate = my_date($mybb->settings['dateformat'], $draft['dateline']); $savetime = my_date($mybb->settings['timeformat'], $draft['dateline']); eval("\$drafts .= \"".$templates->get("usercp_drafts_draft")."\";"); } if(!$drafts) { eval("\$drafts = \"".$templates->get("usercp_drafts_none")."\";"); $disable_delete_drafts = 'disabled="disabled"'; } else { eval("\$draftsubmit = \"".$templates->get("usercp_drafts_submit")."\";"); $disable_delete_drafts = ''; } $query = $db->simple_select("posts", "COUNT(*) AS draftcount", "visible='-2' AND uid='".$mybb->user['uid']."'"); $count = $db->fetch_array($query); $draftcount = "(".my_number_format($count['draftcount']).")"; $plugins->run_hooks("usercp_drafts_end"); eval("\$draftlist = \"".$templates->get("usercp_drafts")."\";"); output_page($draftlist); } if($mybb->input['action'] == "do_drafts" && $mybb->request_method == "post") { // Verify incoming POST request verify_post_check($mybb->input['my_post_key']); $plugins->run_hooks("usercp_do_drafts_start"); if(!$mybb->input['deletedraft']) { error($lang->no_drafts_selected); } $pidin = array(); $tidin = array(); foreach($mybb->input['deletedraft'] as $id => $val) { if($val == "post") { $pidin[] = "'".intval($id)."'"; } elseif($val == "thread") { $tidin[] = "'".intval($id)."'"; } } if($tidin) { $tidin = implode(",", $tidin); $db->delete_query("threads", "tid IN ($tidin) AND visible='-2' AND uid='".$mybb->user['uid']."'"); $tidinp = "OR tid IN ($tidin)"; } if($pidin || $tidinp) { if($pidin) { $pidin = implode(",", $pidin); $pidinq = "pid IN ($pidin)"; } else { $pidinq = "1=0"; } $db->delete_query("posts", "($pidinq $tidinp) AND visible='-2' AND uid='".$mybb->user['uid']."'"); } $plugins->run_hooks("usercp_do_drafts_end"); redirect("usercp.php?action=drafts", $lang->selected_drafts_deleted); } if($mybb->input['action'] == "usergroups") { $plugins->run_hooks("usercp_usergroups_start"); $ingroups = ",".$mybb->user['usergroup'].",".$mybb->user['additionalgroups'].",".$mybb->user['displaygroup'].","; // Changing our display group if($mybb->input['displaygroup']) { // Verify incoming POST request verify_post_check($mybb->input['my_post_key']); if(my_strpos($ingroups, ",".$mybb->input['displaygroup'].",") === false) { error($lang->not_member_of_group); } $query = $db->simple_select("usergroups", "*", "gid='".intval($mybb->input['displaygroup'])."'"); $dispgroup = $db->fetch_array($query); if($dispgroup['candisplaygroup'] != 1) { error($lang->cannot_set_displaygroup); } $db->update_query("users", array('displaygroup' => intval($mybb->input['displaygroup'])), "uid='".$mybb->user['uid']."'"); $cache->update_moderators(); $plugins->run_hooks("usercp_usergroups_change_displaygroup"); redirect("usercp.php?action=usergroups", $lang->display_group_changed); exit; } // Leaving a group if($mybb->input['leavegroup']) { // Verify incoming POST request verify_post_check($mybb->input['my_post_key']); if(my_strpos($ingroups, ",".$mybb->input['leavegroup'].",") === false) { error($lang->not_member_of_group); } if($mybb->user['usergroup'] == $mybb->input['leavegroup']) { error($lang->cannot_leave_primary_group); } $query = $db->simple_select("usergroups", "*", "gid='".intval($mybb->input['leavegroup'])."'"); $usergroup = $db->fetch_array($query); if($usergroup['type'] != 4 && $usergroup['type'] != 3) { error($lang->cannot_leave_group); } leave_usergroup($mybb->user['uid'], $mybb->input['leavegroup']); $plugins->run_hooks("usercp_usergroups_leave_group"); redirect("usercp.php?action=usergroups", $lang->left_group); exit; } // Joining a group if($mybb->input['joingroup']) { // Verify incoming POST request verify_post_check($mybb->input['my_post_key']); $mybb->input['joingroup'] = intval($mybb->input['joingroup']); $query = $db->simple_select("usergroups", "*", "gid='".intval($mybb->input['joingroup'])."'"); $usergroup = $db->fetch_array($query); if(($usergroup['type'] != 4 && $usergroup['type'] != 3) || !$usergroup['gid']) { error($lang->cannot_join_group); } if(my_strpos($ingroups, ",".intval($mybb->input['joingroup']).",") !== false) { error($lang->already_member_of_group); } $query = $db->simple_select("joinrequests", "*", "uid='".$mybb->user['uid']."' AND gid='".intval($mybb->input['joingroup'])."'"); $joinrequest = $db->fetch_array($query); if($joinrequest['rid']) { error($lang->already_sent_join_request); } if($mybb->input['do'] == "joingroup" && $usergroup['type'] == 4) { $reason = utf8_handle_4byte_string($mybb->input['reason']); $reason = $db->escape_string($reason); $now = TIME_NOW; $joinrequest = array( "uid" => $mybb->user['uid'], "gid" => intval($mybb->input['joingroup']), "reason" => $reason, "dateline" => TIME_NOW ); $db->insert_query("joinrequests", $joinrequest); $plugins->run_hooks("usercp_usergroups_join_group_request"); redirect("usercp.php?action=usergroups", $lang->group_join_requestsent); exit; } elseif($usergroup['type'] == 4) { $joingroup = $mybb->input['joingroup']; eval("\$joinpage = \"".$templates->get("usercp_usergroups_joingroup")."\";"); output_page($joinpage); exit(); } else { join_usergroup($mybb->user['uid'], $mybb->input['joingroup']); $plugins->run_hooks("usercp_usergroups_join_group"); redirect("usercp.php?action=usergroups", $lang->joined_group); } } // Show listing of various group related things // List of usergroup leaders $query = $db->query(" SELECT g.*, u.username, u.displaygroup, u.usergroup FROM ".TABLE_PREFIX."groupleaders g LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=g.uid) ORDER BY u.username ASC "); while($leader = $db->fetch_array($query)) { $groupleaders[$leader['gid']][$leader['uid']] = $leader; } // List of groups this user is a leader of $groupsledlist = ''; switch($db->type) { case "pgsql": case "sqlite": $query = $db->query(" SELECT g.title, g.gid, g.type, COUNT(DISTINCT u.uid) AS users, COUNT(DISTINCT j.rid) AS joinrequests, l.canmanagerequests, l.canmanagemembers FROM ".TABLE_PREFIX."groupleaders l LEFT JOIN ".TABLE_PREFIX."usergroups g ON(g.gid=l.gid) LEFT JOIN ".TABLE_PREFIX."users u ON(((','|| u.additionalgroups|| ',' LIKE '%,'|| g.gid|| ',%') OR u.usergroup = g.gid)) LEFT JOIN ".TABLE_PREFIX."joinrequests j ON(j.gid=g.gid AND j.uid != 0) WHERE l.uid='".$mybb->user['uid']."' GROUP BY g.gid, g.title, g.type, l.canmanagerequests, l.canmanagemembers "); break; default: $query = $db->query(" SELECT g.title, g.gid, g.type, COUNT(DISTINCT u.uid) AS users, COUNT(DISTINCT j.rid) AS joinrequests, l.canmanagerequests, l.canmanagemembers FROM ".TABLE_PREFIX."groupleaders l LEFT JOIN ".TABLE_PREFIX."usergroups g ON(g.gid=l.gid) LEFT JOIN ".TABLE_PREFIX."users u ON(((CONCAT(',', u.additionalgroups, ',') LIKE CONCAT('%,', g.gid, ',%')) OR u.usergroup = g.gid)) LEFT JOIN ".TABLE_PREFIX."joinrequests j ON(j.gid=g.gid AND j.uid != 0) WHERE l.uid='".$mybb->user['uid']."' GROUP BY l.gid "); } while($usergroup = $db->fetch_array($query)) { $memberlistlink = $moderaterequestslink = ''; $memberlistlink = " [".$lang->view_members."]"; if($usergroup['type'] != 4) { $usergroup['joinrequests'] = '--'; } if($usergroup['joinrequests'] > 0 && $usergroup['canmanagerequests'] == 1) { $moderaterequestslink = " [{$lang->view_requests}]"; } $groupleader[$usergroup['gid']] = 1; $trow = alt_trow(); eval("\$groupsledlist .= \"".$templates->get("usercp_usergroups_leader_usergroup")."\";"); } if($groupsledlist) { eval("\$leadinggroups = \"".$templates->get("usercp_usergroups_leader")."\";"); } // Fetch the list of groups the member is in // Do the primary group first $query = $db->simple_select("usergroups", "*", "gid='".$mybb->user['usergroup']."'"); $usergroup = $db->fetch_array($query); $leavelink = "
    {$lang->usergroup_leave_primary}
    "; $trow = alt_trow(); if($usergroup['candisplaygroup'] == 1 && $usergroup['gid'] == $mybb->user['displaygroup']) { $displaycode = " ({$lang->display_group})"; } elseif($usergroup['candisplaygroup'] == 1) { $displaycode = " (post_code}\">{$lang->set_as_display_group})"; } else { $displaycode = ''; } eval("\$memberoflist = \"".$templates->get("usercp_usergroups_memberof_usergroup")."\";"); $showmemberof = false; if($mybb->user['additionalgroups']) { $query = $db->simple_select("usergroups", "*", "gid IN (".$mybb->user['additionalgroups'].") AND gid !='".$mybb->user['usergroup']."'", array('order_by' => 'title')); while($usergroup = $db->fetch_array($query)) { $showmemberof = true; if($groupleader[$usergroup['gid']]) { $leavelink = "
    $lang->usergroup_leave_leader
    "; } elseif($usergroup['type'] != 4 && $usergroup['type'] != 3) { $leavelink = "
    {$lang->usergroup_cannot_leave}
    "; } else { $leavelink = "
    post_code}\">".$lang->usergroup_leave."
    "; } if($usergroup['description']) { $description = "
    ".$usergroup['description'].""; } else { $description = ''; } if(!$usergroup['usertitle']) { // fetch title here } $trow = alt_trow(); if($usergroup['candisplaygroup'] == 1 && $usergroup['gid'] == $mybb->user['displaygroup']) { $displaycode = " ({$lang->display_group})"; } elseif($usergroup['candisplaygroup'] == 1) { $displaycode = "(post_code}\">{$lang->set_as_display_group})"; } else { $displaycode = ''; } eval("\$memberoflist .= \"".$templates->get("usercp_usergroups_memberof_usergroup")."\";"); } } eval("\$membergroups = \"".$templates->get("usercp_usergroups_memberof")."\";"); // List of groups this user has applied for but has not been accepted in to $query = $db->simple_select("joinrequests", "*", "uid='".$mybb->user['uid']."'"); while($request = $db->fetch_array($query)) { $appliedjoin[$request['gid']] = $request['dateline']; } // Fetch list of groups the member can join $existinggroups = $mybb->user['usergroup']; if($mybb->user['additionalgroups']) { $existinggroups .= ",".$mybb->user['additionalgroups']; } $joinablegroups = ''; $query = $db->simple_select("usergroups", "*", "(type='3' OR type='4') AND gid NOT IN ($existinggroups)", array('order_by' => 'title')); while($usergroup = $db->fetch_array($query)) { $trow = alt_trow(); if($usergroup['description']) { $description = "
    ".$usergroup['description'].""; } else { $description = ''; } // Moderating join requests? if($usergroup['type'] == 4) { $conditions = $lang->usergroup_joins_moderated; } else { $conditions = $lang->usergroup_joins_anyone; } if($appliedjoin[$usergroup['gid']]) { $applydate = my_date($mybb->settings['dateformat'], $appliedjoin[$usergroup['gid']]); $applytime = my_date($mybb->settings['timeformat'], $appliedjoin[$usergroup['gid']]); $joinlink = $lang->sprintf($lang->join_group_applied, $applydate, $applytime); } else { $joinlink = "post_code}\">{$lang->join_group}"; } $usergroupleaders = ''; if($groupleaders[$usergroup['gid']]) { $comma = ''; $usergroupleaders = ''; foreach($groupleaders[$usergroup['gid']] as $leader) { $leader['username'] = format_name($leader['username'], $leader['usergroup'], $leader['displaygroup']); $usergroupleaders .= $comma.build_profile_link($leader['username'], $leader['uid']); $comma = $lang->comma; } $usergroupleaders = $lang->usergroup_leaders." ".$usergroupleaders; } if(my_strpos($usergroupleaders, $mybb->user['username']) === false) { // User is already a leader of the group, so don't show as a "Join Group" eval("\$joinablegrouplist .= \"".$templates->get("usercp_usergroups_joinable_usergroup")."\";"); } } if($joinablegrouplist) { eval("\$joinablegroups = \"".$templates->get("usercp_usergroups_joinable")."\";"); } $plugins->run_hooks("usercp_usergroups_end"); eval("\$groupmemberships = \"".$templates->get("usercp_usergroups")."\";"); output_page($groupmemberships); } if($mybb->input['action'] == "attachments") { $plugins->run_hooks("usercp_attachments_start"); require_once MYBB_ROOT."inc/functions_upload.php"; $attachments = ''; // Pagination if(!$mybb->settings['threadsperpage']) { $mybb->settings['threadsperpage'] = 20; } $perpage = $mybb->settings['threadsperpage']; $page = intval($mybb->input['page']); if(intval($mybb->input['page']) > 0) { $start = ($page-1) *$perpage; } else { $start = 0; $page = 1; } $end = $start + $perpage; $lower = $start+1; $query = $db->query(" SELECT a.*, p.subject, p.dateline, t.tid, t.subject AS threadsubject FROM ".TABLE_PREFIX."attachments a LEFT JOIN ".TABLE_PREFIX."posts p ON (a.pid=p.pid) LEFT JOIN ".TABLE_PREFIX."threads t ON (t.tid=p.tid) WHERE a.uid='".$mybb->user['uid']."' ORDER BY p.dateline DESC LIMIT {$start}, {$perpage} "); $bandwidth = $totaldownloads = 0; while($attachment = $db->fetch_array($query)) { if($attachment['dateline'] && $attachment['tid']) { $attachment['subject'] = htmlspecialchars_uni($parser->parse_badwords($attachment['subject'])); $attachment['postlink'] = get_post_link($attachment['pid'], $attachment['tid']); $attachment['threadlink'] = get_thread_link($attachment['tid']); $attachment['threadsubject'] = htmlspecialchars_uni($parser->parse_badwords($attachment['threadsubject'])); $size = get_friendly_size($attachment['filesize']); $icon = get_attachment_icon(get_extension($attachment['filename'])); $attachment['filename'] = htmlspecialchars_uni($attachment['filename']); $sizedownloads = $lang->sprintf($lang->attachment_size_downloads, $size, $attachment['downloads']); $attachdate = my_date($mybb->settings['dateformat'], $attachment['dateline']); $attachtime = my_date($mybb->settings['timeformat'], $attachment['dateline']); $altbg = alt_trow(); eval("\$attachments .= \"".$templates->get("usercp_attachments_attachment")."\";"); // Add to bandwidth total $bandwidth += ($attachment['filesize'] * $attachment['downloads']); $totaldownloads += $attachment['downloads']; } else { // This little thing delets attachments without a thread/post remove_attachment($attachment['pid'], $attachment['posthash'], $attachment['aid']); } } $query = $db->simple_select("attachments", "SUM(filesize) AS ausage, COUNT(aid) AS acount", "uid='".$mybb->user['uid']."'"); $usage = $db->fetch_array($query); $totalusage = $usage['ausage']; $totalattachments = $usage['acount']; $friendlyusage = get_friendly_size($totalusage); if($mybb->usergroup['attachquota']) { $percent = round(($totalusage/($mybb->usergroup['attachquota']*1024))*100)."%"; $attachquota = get_friendly_size($mybb->usergroup['attachquota']*1024); $usagenote = $lang->sprintf($lang->attachments_usage_quota, $friendlyusage, $attachquota, $percent, $totalattachments); } else { $percent = $lang->unlimited; $attachquota = $lang->unlimited; $usagenote = $lang->sprintf($lang->attachments_usage, $friendlyusage, $totalattachments); } $multipage = multipage($totalattachments, $perpage, $page, "usercp.php?action=attachments"); $bandwidth = get_friendly_size($bandwidth); if(!$attachments) { eval("\$attachments = \"".$templates->get("usercp_attachments_none")."\";"); $usagenote = ''; } $plugins->run_hooks("usercp_attachments_end"); eval("\$manageattachments = \"".$templates->get("usercp_attachments")."\";"); output_page($manageattachments); } if($mybb->input['action'] == "do_attachments" && $mybb->request_method == "post") { // Verify incoming POST request verify_post_check($mybb->input['my_post_key']); $plugins->run_hooks("usercp_do_attachments_start"); require_once MYBB_ROOT."inc/functions_upload.php"; if(!is_array($mybb->input['attachments'])) { error($lang->no_attachments_selected); } $aids = implode(',', array_map('intval', $mybb->input['attachments'])); $query = $db->simple_select("attachments", "*", "aid IN ($aids) AND uid='".$mybb->user['uid']."'"); while($attachment = $db->fetch_array($query)) { remove_attachment($attachment['pid'], '', $attachment['aid']); } $plugins->run_hooks("usercp_do_attachments_end"); redirect("usercp.php?action=attachments", $lang->attachments_deleted); } if($mybb->input['action'] == "do_notepad" && $mybb->request_method == "post") { // Verify incoming POST request verify_post_check($mybb->input['my_post_key']); // Cap at 60,000 chars; text will allow up to 65535? if(my_strlen($mybb->input['notepad']) > 60000) { $mybb->input['notepad'] = my_substr($mybb->input['notepad'], 0, 60000); } $plugins->run_hooks("usercp_do_notepad_start"); $db->update_query("users", array('notepad' => $db->escape_string($mybb->input['notepad'])), "uid='".$mybb->user['uid']."'"); $plugins->run_hooks("usercp_do_notepad_end"); redirect("usercp.php", $lang->redirect_notepadupdated); } if(!$mybb->input['action']) { // Get posts per day $daysreg = (TIME_NOW - $mybb->user['regdate']) / (24*3600); if($daysreg < 1) { $daysreg = 1; } $perday = $mybb->user['postnum'] / $daysreg; $perday = round($perday, 2); if($perday > $mybb->user['postnum']) { $perday = $mybb->user['postnum']; } $stats = $cache->read("stats"); $posts = $stats['numposts']; if($posts == 0) { $percent = "0"; } else { $percent = $mybb->user['postnum']*100/$posts; $percent = round($percent, 2); } $lang->posts_day = $lang->sprintf($lang->posts_day, my_number_format($perday), $percent); $usergroup = $groupscache[$mybb->user['usergroup']]['title']; $colspan = 1; if($mybb->user['avatar']) { $avatar_dimensions = explode("|", $mybb->user['avatardimensions']); if($avatar_dimensions[0] && $avatar_dimensions[1]) { $avatar_width_height = "width=\"{$avatar_dimensions[0]}\" height=\"{$avatar_dimensions[1]}\""; } $mybb->user['avatar'] = htmlspecialchars_uni($mybb->user['avatar']); eval("\$avatar = \"".$templates->get("usercp_currentavatar")."\";"); $colspan = 2; } else { $avatar = ''; } $regdate = my_date($mybb->settings['dateformat'].", ".$mybb->settings['timeformat'], $mybb->user['regdate']); if($mybb->user['usergroup'] == 5 && $mybb->settings['regtype'] != "admin") { $usergroup .= "
    ($lang->resend_activation)"; } // Make reputations row $reputations = ''; if($mybb->usergroup['usereputationsystem'] == 1 && $mybb->settings['enablereputation'] == 1) { $reputation_link = get_reputation($mybb->user['reputation']); eval("\$reputation = \"".$templates->get("usercp_reputation")."\";"); } $latest_warnings = ''; if($mybb->settings['enablewarningsystem'] != 0 && $mybb->settings['canviewownwarning'] != 0) { $warning_level = round($mybb->user['warningpoints']/$mybb->settings['maxwarningpoints']*100); if($warning_level > 100) { $warning_level = 100; } if($mybb->user['warningpoints'] > $mybb->settings['maxwarningpoints']) { $mybb->user['warningpoints'] = $mybb->settings['maxwarningpoints']; } if($warning_level > 0) { expire_warnings(); $lang->current_warning_level = $lang->sprintf($lang->current_warning_level, $warning_level, $mybb->user['warningpoints'], $mybb->settings['maxwarningpoints']); // Fetch latest warnings $query = $db->query(" SELECT w.*, t.title AS type_title, u.username, p.subject AS post_subject FROM ".TABLE_PREFIX."warnings w LEFT JOIN ".TABLE_PREFIX."warningtypes t ON (t.tid=w.tid) LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid=w.issuedby) LEFT JOIN ".TABLE_PREFIX."posts p ON (p.pid=w.pid) WHERE w.uid='{$mybb->user['uid']}' ORDER BY w.expired ASC, w.dateline DESC LIMIT 5 "); while($warning = $db->fetch_array($query)) { $post_link = ""; if($warning['post_subject']) { $warning['post_subject'] = $parser->parse_badwords($warning['post_subject']); $warning['post_subject'] = htmlspecialchars_uni($warning['post_subject']); $post_link = "
    {$lang->warning_for_post} {$warning['post_subject']}"; } $issuedby = build_profile_link($warning['username'], $warning['issuedby']); $date_issued = my_date($mybb->settings['dateformat'], $warning['dateline']).", ".my_date($mybb->settings['timeformat'], $warning['dateline']); if($warning['type_title']) { $warning_type = $warning['type_title']; } else { $warning_type = $warning['title']; } $warning_type = htmlspecialchars_uni($warning_type); if($warning['points'] > 0) { $warning['points'] = "+{$warning['points']}"; } $points = $lang->sprintf($lang->warning_points, $warning['points']); // Figure out expiration time if($warning['daterevoked']) { $expires = $lang->warning_revoked; } elseif($warning['expired']) { $expires = $lang->already_expired; } elseif($warning['expires'] == 0) { $expires = $lang->never; } else { $expires = my_date($mybb->settings['dateformat'], $warning['expires']).", ".my_date($mybb->settings['timeformat'], $warning['expires']); } $alt_bg = alt_trow(); eval("\$warnings .= \"".$templates->get("usercp_warnings_warning")."\";"); } if($warnings) { eval("\$latest_warnings = \"".$templates->get("usercp_warnings")."\";"); } } } // Format username $username = format_name($mybb->user['username'], $mybb->user['usergroup'], $mybb->user['displaygroup']); $username = build_profile_link($username, $mybb->user['uid']); // Format post numbers $mybb->user['posts'] = my_number_format($mybb->user['postnum']); // Build referral link if($mybb->settings['usereferrals'] == 1) { $referral_link = $lang->sprintf($lang->referral_link, $settings['bburl'], $mybb->user['uid']); eval("\$referral_info = \"".$templates->get("usercp_referrals")."\";"); } // User Notepad $plugins->run_hooks("usercp_notepad_start"); $mybb->user['notepad'] = htmlspecialchars_uni($mybb->user['notepad']); eval("\$user_notepad = \"".$templates->get("usercp_notepad")."\";"); $plugins->run_hooks("usercp_notepad_end"); // Thread Subscriptions with New Posts $latest_subscribed = ''; $query = $db->simple_select("threadsubscriptions", "sid", "uid = '".$mybb->user['uid']."'", array("limit" => 1)); if($db->num_rows($query)) { $visible = "AND t.visible != 0"; if(is_moderator() == true) { $visible = ''; } $query = $db->query(" SELECT s.*, t.*, t.username AS threadusername, u.username FROM ".TABLE_PREFIX."threadsubscriptions s LEFT JOIN ".TABLE_PREFIX."threads t ON (s.tid=t.tid) LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid = t.uid) WHERE s.uid='".$mybb->user['uid']."' {$visible} ORDER BY t.lastpost DESC LIMIT 0, 10 "); $fpermissions = forum_permissions(); while($subscription = $db->fetch_array($query)) { $forumpermissions = $fpermissions[$subscription['fid']]; if($forumpermissions['canview'] != 0 && $forumpermissions['canviewthreads'] != 0 && ($forumpermissions['canonlyviewownthreads'] == 0 || $subscription['uid'] == $mybb->user['uid'])) { $subscriptions[$subscription['tid']] = $subscription; } } if(is_array($subscriptions)) { $tids = implode(",", array_keys($subscriptions)); // Checking read if($mybb->settings['threadreadcut'] > 0) { $query = $db->simple_select("threadsread", "*", "uid='{$mybb->user['uid']}' AND tid IN ({$tids})"); while($readthread = $db->fetch_array($query)) { if($readthread['dateline'] >= $subscriptions[$readthread['tid']]['lastpost']) { unset($subscriptions[$readthread['tid']]); // If it's already been read, then don't display the thread } else { $subscriptions[$readthread['tid']]['lastread'] = $readthread['dateline']; } } } if($subscriptions) { if($mybb->settings['dotfolders'] != 0) { $query = $db->simple_select("posts", "tid,uid", "uid='{$mybb->user['uid']}' AND tid IN ({$tids})"); while($post = $db->fetch_array($query)) { $subscriptions[$post['tid']]['doticon'] = 1; } } $icon_cache = $cache->read("posticons"); foreach($subscriptions as $thread) { $folder = ''; $folder_label = ''; $gotounread = ''; if($thread['tid']) { $bgcolor = alt_trow(); $thread['subject'] = $parser->parse_badwords($thread['subject']); $thread['subject'] = htmlspecialchars_uni($thread['subject']); $thread['threadlink'] = get_thread_link($thread['tid']); $thread['lastpostlink'] = get_thread_link($thread['tid'], 0, "lastpost"); // If this thread has a prefix... if($thread['prefix'] != 0) { $query = $db->simple_select('threadprefixes', 'prefix, displaystyle', "pid='{$thread['prefix']}'"); $threadprefix = $db->fetch_array($query); $thread['displayprefix'] = $threadprefix['displaystyle'].' '; } else { $thread['displayprefix'] = ''; } // Icons if($thread['icon'] > 0 && $icon_cache[$thread['icon']]) { $icon = $icon_cache[$thread['icon']]; $icon = "\"{$icon['name']}\""; } else { $icon = " "; } if($thread['doticon']) { $folder = "dot_"; $folder_label .= $lang->icon_dot; } // Check to see which icon we display if($thread['lastread'] && $thread['lastread'] < $thread['lastpost']) { $folder .= "new"; $folder_label .= $lang->icon_new; $new_class = "subject_new"; $thread['newpostlink'] = get_thread_link($thread['tid'], 0, "newpost"); eval("\$gotounread = \"".$templates->get("forumdisplay_thread_gotounread")."\";"); } else { $folder_label .= $lang->icon_no_new; $new_class = "subject_old"; } $folder .= "folder"; if($thread['visible'] == 0) { $bgcolor = "trow_shaded"; } $lastpostdate = my_date($mybb->settings['dateformat'], $thread['lastpost']); $lastposttime = my_date($mybb->settings['timeformat'], $thread['lastpost']); $lastposter = $thread['lastposter']; $lastposteruid = $thread['lastposteruid']; if($lastposteruid == 0) { $lastposterlink = $lastposter; } else { $lastposterlink = build_profile_link($lastposter, $lastposteruid); } $thread['replies'] = my_number_format($thread['replies']); $thread['views'] = my_number_format($thread['views']); $thread['author'] = build_profile_link($thread['username'], $thread['uid']); eval("\$latest_subscribed_threads .= \"".$templates->get("usercp_latest_subscribed_threads")."\";"); } } eval("\$latest_subscribed = \"".$templates->get("usercp_latest_subscribed")."\";"); } } } // User's Latest Threads // Get unviewable forums $f_perm_sql = ''; $unviewable_forums = get_unviewable_forums(); if($unviewable_forums) { $f_perm_sql = "AND t.fid NOT IN (".$unviewable_forums.")"; } $visible = " AND t.visible != 0"; if(is_moderator() == true) { $visible = ''; } $query = $db->query(" SELECT t.*, t.username AS threadusername, u.username FROM ".TABLE_PREFIX."threads t LEFT JOIN ".TABLE_PREFIX."users u ON (u.uid = t.uid) WHERE t.uid='".$mybb->user['uid']."' AND t.firstpost != 0 AND t.visible != '-2' {$visible} {$f_perm_sql} ORDER BY t.lastpost DESC LIMIT 0, 5 "); // Figure out whether we can view these threads... $threadcache = array(); $fpermissions = forum_permissions(); while($thread = $db->fetch_array($query)) { // Moderated, and not moderator? if($thread['visible'] == 0 && is_moderator($thread['fid']) === false) { continue; } $forumpermissions = $fpermissions[$thread['fid']]; if($forumpermissions['canview'] != 0 || $forumpermissions['canviewthreads'] != 0) { $threadcache[$thread['tid']] = $thread; } } if(!empty($threadcache)) { $tids = implode(",", array_keys($threadcache)); // Read Forums $query = $db->query(" SELECT f.fid, fr.dateline AS lastread FROM ".TABLE_PREFIX."forums f LEFT JOIN ".TABLE_PREFIX."forumsread fr ON (fr.fid=f.fid AND fr.uid='{$mybb->user['uid']}') WHERE f.active != 0 ORDER BY pid, disporder "); while($forum = $db->fetch_array($query)) { $readforums[$forum['fid']] = $forum['lastread']; } // Threads being read? if($mybb->settings['threadreadcut'] > 0) { $query = $db->simple_select("threadsread", "*", "uid='{$mybb->user['uid']}' AND tid IN ({$tids})"); while($readthread = $db->fetch_array($query)) { $threadcache[$readthread['tid']]['lastread'] = $readthread['dateline']; } } // Icon Stuff if($mybb->settings['dotfolders'] != 0) { $query = $db->simple_select("posts", "tid,uid", "uid='{$mybb->user['uid']}' AND tid IN ({$tids})"); while($post = $db->fetch_array($query)) { $threadcache[$post['tid']]['doticon'] = 1; } } $icon_cache = $cache->read("posticons"); // Run the threads... $latest_threads_threads = ''; foreach($threadcache as $thread) { if($thread['tid']) { $bgcolor = alt_trow(); $folder = ''; $folder_label = ''; $prefix = ''; $gotounread = ''; $isnew = 0; $donenew = 0; $lastread = 0; // If this thread has a prefix... if($thread['prefix'] != 0) { $query = $db->simple_select('threadprefixes', 'prefix, displaystyle', "pid='{$thread['prefix']}'"); $threadprefix = $db->fetch_array($query); $thread['displayprefix'] = $threadprefix['displaystyle'].' '; } else { $thread['displayprefix'] = ''; } $thread['subject'] = $parser->parse_badwords($thread['subject']); $thread['subject'] = htmlspecialchars_uni($thread['subject']); $thread['threadlink'] = get_thread_link($thread['tid']); $thread['lastpostlink'] = get_thread_link($thread['tid'], 0, "lastpost"); if($thread['icon'] > 0 && $icon_cache[$thread['icon']]) { $icon = $icon_cache[$thread['icon']]; $icon = "\"{$icon['name']}\""; } else { $icon = " "; } if($mybb->settings['threadreadcut'] > 0) { $forum_read = $readforums[$thread['fid']]; $read_cutoff = TIME_NOW-$mybb->settings['threadreadcut']*60*60*24; if($forum_read == 0 || $forum_read < $read_cutoff) { $forum_read = $read_cutoff; } } if($mybb->settings['threadreadcut'] > 0 && $thread['lastpost'] > $forum_read) { $cutoff = TIME_NOW-$mybb->settings['threadreadcut']*60*60*24; } $cutoff = 0; if($thread['lastpost'] > $cutoff) { if($thread['lastread']) { $lastread = $thread['lastread']; } } if(!$lastread) { $readcookie = $threadread = my_get_array_cookie("threadread", $thread['tid']); if($readcookie > $forum_read) { $lastread = $readcookie; } else { $lastread = $forum_read; } } // Folder Icons if($thread['doticon']) { $folder = "dot_"; $folder_label .= $lang->icon_dot; } if($thread['lastpost'] > $lastread && $lastread) { $folder .= "new"; $folder_label .= $lang->icon_new; $new_class = "subject_new"; $thread['newpostlink'] = get_thread_link($thread['tid'], 0, "newpost"); eval("\$gotounread = \"".$templates->get("forumdisplay_thread_gotounread")."\";"); $unreadpost = 1; } else { $folder_label .= $lang->icon_no_new; $new_class = "subject_old"; } if($thread['replies'] >= $mybb->settings['hottopic'] || $thread['views'] >= $mybb->settings['hottopicviews']) { $folder .= "hot"; $folder_label .= $lang->icon_hot; } // Is our thread visible? if($thread['visible'] == 0) { $bgcolor = 'trow_shaded'; } if($thread['closed'] == 1) { $folder .= "lock"; $folder_label .= $lang->icon_lock; } $folder .= "folder"; $lastpostdate = my_date($mybb->settings['dateformat'], $thread['lastpost']); $lastposttime = my_date($mybb->settings['timeformat'], $thread['lastpost']); $lastposter = $thread['lastposter']; $lastposteruid = $thread['lastposteruid']; if($lastposteruid == 0) { $lastposterlink = $lastposter; } else { $lastposterlink = build_profile_link($lastposter, $lastposteruid); } $thread['replies'] = my_number_format($thread['replies']); $thread['views'] = my_number_format($thread['views']); $thread['author'] = build_profile_link($thread['username'], $thread['uid']); eval("\$latest_threads_threads .= \"".$templates->get("usercp_latest_threads_threads")."\";"); } } eval("\$latest_threads = \"".$templates->get("usercp_latest_threads")."\";"); } $plugins->run_hooks("usercp_end"); eval("\$usercp = \"".$templates->get("usercp")."\";"); output_page($usercp); } ?>