Advertisement
Guest User

Improved MyBB global.php

a guest
Jul 26th, 2017
142
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 27.62 KB | None | 0 0
  1. <?php
  2.  
  3. // Setting our working directory to the main directory.
  4. $working_dir = !filter_input(INPUT_SERVER, 'DOCUMENT_ROOT') ? '.' : filter_input(INPUT_SERVER, 'DOCUMENT_ROOT');
  5.  
  6. // Loading MyBB core file which is a necessity.
  7. require_once $working_dir.'/inc/init.php';
  8.  
  9. // Shutdown Queries
  10. $shutdown_queries = $shutdown_functions = [];
  11.  
  12. // Create groups cache if one doesn't exist
  13. if(!is_array($groupscache)) {
  14.     $cache->update_usergroups();
  15.     $groupscache = $cache->read('usergroups');
  16. }
  17.  
  18. // Define THIS_SCRIPT if hasn't already been done yet
  19. if(!defined('THIS_SCRIPT')) { define('THIS_SCRIPT',''); }
  20.  
  21. // Set current page
  22. $current_page = my_strtolower(basename(THIS_SCRIPT));
  23.  
  24. // Send page headers
  25. if($current_page != 'attachment.php') { send_page_headers(); }
  26.  
  27. // Avoid using sessions for defined pages
  28. if(isset($mybb->input['action']) && isset($nosession[$mybb->input['action']]) || isset($mybb->input['thumbnail']) && $current_page == 'attachment.php') { define('NO_ONLINE', 1); }
  29.  
  30. // Create user session
  31. require_once MYBB_ROOT.'inc/class_session.php';
  32. $session = new session;
  33. $session->init();
  34. $mybb->session = &$session;
  35.  
  36. // Check if user is moderator
  37. $mybb->user['ismoderator'] = is_moderator(0, '', $mybb->user['uid']);
  38.  
  39. // Set POST validation code
  40. $mybb->post_code = generate_post_check();
  41.  
  42. // Set language
  43. if(isset($mybb->input['language']) && $lang->language_exists($mybb->get_input('language')) && verify_post_check($mybb->get_input('my_post_key'), true)) {
  44.     $mybb->settings['bblanguage'] = $mybb->get_input('language');
  45.     if($mybb->user['uid']) {
  46.         if(isset($mybb->cookies['mybblang'])) { my_unsetcookie('mybblang'); }
  47.         $db->update_query('users', ['language' => $db->escape_string($mybb->settings['bblanguage'])], "uid = '{$mybb->user['uid']}'");
  48.     } else { my_setcookie('mybblang', $mybb->settings['bblanguage']); }
  49.     $mybb->user['language'] = $mybb->settings['bblanguage'];
  50. } elseif(!$mybb->user['uid'] && !empty($mybb->cookies['mybblang']) && $lang->language_exists($mybb->cookies['mybblang'])) { $mybb->settings['bblanguage'] = $mybb->cookies['mybblang'];
  51. } elseif(!isset($mybb->settings['bblanguage'])) { $mybb->settings['bblanguage'] = 'english'; }
  52.  
  53. // Load language
  54. $lang->set_language($mybb->settings['bblanguage']);
  55. $lang->load('global');
  56. $lang->load('messages');
  57.  
  58. // Run global_start plugin hook
  59. $plugins->run_hooks('global_start');
  60. if(function_exists('mb_internal_encoding') && !empty($lang->settings['charset'])) { mb_internal_encoding($lang->settings['charset']); }
  61.  
  62. // Select theme
  63. $loadstyle = '';
  64. $load_from_forum = $load_from_user = 0;
  65. $style = [];
  66.  
  67. // Quick theme changer
  68. if(isset($mybb->input['theme']) && verify_post_check($mybb->get_input('my_post_key'), true)) {
  69.     require_once MYBB_ROOT.'inc/datahandlers/user.php';
  70.     $userhandler = new UserDataHandler('update');
  71.     $user = [
  72.         'uid'                   => $mybb->user['uid'],
  73.         'style'                 => $mybb->get_input('theme', MyBB::INPUT_INT),
  74.         'usergroup'             => $mybb->user['usergroup'],
  75.         'additionalusergroups'  => $mybb->user['additionalusergroups']];
  76.     $userhandler->set_data($user);
  77.    
  78.     if($userhandler->validate_user()) {
  79.         if(isset($mybb->cookies['mybbtheme'])) { my_unsetcookie('mybbtheme'); }
  80.         $userhandler->update_user();
  81.     } else { my_setcookie('mybbtheme', $user['style']); }
  82. } elseif(!$mybb->user['uid'] && !empty($mybb->cookie['mybbtheme'])) { $mybb->user['style'] = (int)$mybb->cookies['mybbtheme']; }
  83.  
  84. // Custom theme in profile
  85. if(isset($mybb->user['style']) && (int)$mybb->user['style'] != 0) {
  86.     $mybb->user['style'] = (int)$mybb->user['style'];
  87.     $loadstyle = "tid = '{$mybb->user['style']}'";
  88.     $load_from_user = 1;
  89. }
  90.  
  91. $valid = [
  92.     'showthread.php',
  93.     'forumdisplay.php',
  94.     'newthread.php',
  95.     'newreply.php',
  96.     'ratethread.php',
  97.     'editpost.php',
  98.     'polls.php',
  99.     'sendthread.php',
  100.     'printthread.php',
  101.     'moderation.php'];
  102.    
  103. if(in_array($current_page, $valid)) {
  104.     cache_forums();
  105.    
  106.     if(isset($mybb->input['pid']) && THIS_SCRIPT != 'polls.php') {
  107.         $query = $db->simple_select('posts', 'fid', "pid = '{$mybb->input['pid']}'", ['limit' => 1]);
  108.         $fid = $db->fetch_field($query, 'fid');
  109.         if($fid) {
  110.             $style = $forum_cache[$fid];
  111.             $load_from_forum = 1;
  112.         }
  113.     } elseif(isset($mybb->input['tid'])) {
  114.         $query = $db->simple_select('threads', 'fid', "tid = '{$mybb->input['tid']}'", ['limit' => 1]);
  115.         $fid = $db->fetch_field($query, 'fid');
  116.         if($fid) {
  117.             $style = $forum_cache[$fid];
  118.             $load_from_forum = 1;
  119.         }
  120.     } elseif(isset($mybb->input['pid']) && THIS_SCRIPT == 'polls.php') {
  121.         $query = $db->simple_select('threads', 'fid', "poll = '{$mybb->input['pid']}'", ['limit' => 1]);
  122.         $fid = $db->fetch_field($query, 'fid');
  123.         if($fid) {
  124.             $style = $forum_cache[$fid];
  125.             $load_from_forum = 1;
  126.         }
  127.     } elseif(isset($mybb->input['fid']) && isset($forum_cache[$mybb->input['fid']])) {
  128.         $style = $forum_cache[$mybb->input['fid']];
  129.         $load_from_forum = 1;
  130.     }
  131. } unset($valid);
  132.  
  133. // If a theme was found
  134. if(isset($style['style']) && $style['style'] > 0) {
  135.     $style['style'] = (int)$style['style'];
  136.     if($style['overridestyle'] == 1 || !isset($mybb->user['style'])) { $loadstyle = "tid = '{$style['style']}'"; }
  137. }
  138.  
  139. // No theme
  140. if(empty($loadstyle)) { $loadstyle = "def='1'"; }
  141.  
  142. // Fetch theme cache
  143. if($loadstyle != "def='1'") {
  144.     $query = $db->simple_select('themes', 'name, tid, properties, stylesheets, allowedgroups', $loadstyle, ['limit' => 1]);
  145.     $theme = $db->fetch_array($query);
  146.    
  147.     if(isset($theme['tid']) && !$load_from_forum && !is_member($theme['allowedgroups']) && theme['allowedgroups'] != 'all') {
  148.         if($load_from_user == 1) { $db->update_query('users', ['style' => 0], "style='{$mybb->user['style']}' AND uid='{$mybb->user['uid']}'"); }
  149.     }
  150.     if(isset($mybb->cookies['mybbthemes'])) { my_unsetcookie('mybbtheme'); }
  151.     $loadstyle = "def='1'";
  152. }
  153.  
  154. // Load default style
  155. if($loadstyle == "def='1'") {
  156.     if(!$cache->read('default_theme')) { $cache->update_default_theme(); }
  157.     $theme = $cache->read('default_theme');
  158.     $load_from_forum = $load_from_user = 0;
  159. }
  160.  
  161. // No theme found
  162. if(!isset($theme['tid']) || isset($theme['tid']) && !$theme['tid']) {
  163.     if($load_from_forum == 1) { $db->update_query('forums', ['style' => 0], "style = '{$style['style']}'"); }
  164.     elseif($load_from_user == 1) { $db->update_query('users', ['style' => 0], "style = '{$mybb->user['style']}'"); }
  165.     $query = $db->simple_select('themes', 'name, tid, properties, stylesheets', '', ['order_by' => 'tid', 'limit' => 1]);
  166.     $theme = $db->fetch_array($query);
  167. } $theme = array_merge($theme, my_unserialize($theme['properties']));
  168.  
  169. // Fetch stylesheets
  170. $stylesheets = '';
  171. $theme['stylesheets'] = my_unserialize($theme['stylesheets']);
  172. $stylesheet_scripts = ['global', basename(filter_input(INPUT_SERVER, 'PHP_SELF'))];
  173.  
  174. if(!empty($theme['color'])) { $stylesheet_scripts[] = $theme['color']; }
  175. $stylesheet_actions = ['global'];
  176.  
  177. if(!empty($mybb->input['action'])) { $stylesheet_actions[] = $mybb->get_input('action'); }
  178. foreach($stylesheet_scripts as $stylesheet_script) {
  179.     foreach($stylesheet_actions as $stylesheet_action) {
  180.         if(!$stylesheet_action) { continue; }
  181.         if(!empty($theme['stylesheets'][$stylesheet_script][$stylesheet_action])) {
  182.             foreach($theme['stylesheets'][$stylesheet_script][$stylesheet_action] as $page_stylesheet) {
  183.                 if(!empty($already_loaded[$page_stylesheet])) { continue; }
  184.                 $stylesheet_url = strpos($page_stylesheet, 'css.php') !== false ? $mybb->settings['bburl'].'/'.$page_stylesheet : $mybb->get_asset_url($page_stylesheet);
  185.                
  186.                 if($mybb->settings['minifycss']) { $stylesheet_url = str_replace('.css', '.min.css', $stylesheet_url); }
  187.                 if(strpos($page_stylesheet, 'css.php') !== false) {
  188.                     $query_string = parse_url($stylesheet_url, PHP_URL_QUERY);
  189.                     $id = (int)my_substr($query_string, 11);
  190.                     $query = $db->simple_select('themestylesheets', 'name', "sid={$id}");
  191.                     $real_name = $db->fetch_field($query, 'name');
  192.                     $theme_stylesheets[$real_name] = "<link type=\"text/css\" rel=\"stylesheet\" href=\"{$stylesheet_url}\" />\n";
  193.                 } else { $theme_stylesheets[basename($page_stylesheet)] = "<link type=\"text/css\" rel=\"stylesheet\" href=\"{$stylesheet_url}\" />\n"; }
  194.                 $already_loaded[$page_stylesheet] = 1;
  195.             }
  196.         }
  197.     }
  198. } unset($actions);
  199.  
  200. if(!empty($theme_stylesheets) && is_array($theme['disporder'])) {
  201.     foreach($theme['disporder'] as $style_name => $order) {
  202.         if(!empty($theme_stylesheets[$style_name])) { $stylesheets .= $theme_stylesheets[$style_name]; }
  203.     }
  204. }
  205.  
  206. // Remote theme server
  207. if(my_validate_url($theme['imgdir'])) {
  208.     if(!empty($mybb->user['language'])) { $theme['imglangdir'] = $theme['imgdir'].'/'.$mybb->user['language']; }
  209.     else { $theme['imglangdir'] = !empty($mybb->settings['bblanguage']) ? $theme['imgdir'].'/'.$mybb->settings['bblanguage'] : $theme['imgdir']; }
  210. } else {
  211.     $img_directory = $theme['imgdir'];
  212.     if($mybb->settings['usecdn'] && !empty($mybb->settings['cdnpath'])) { $img_directory = rtrim($mybb->settings['cdnpath'], '/').'/'.ltrim($theme['imgdir'], '/'); }
  213.     if(!is_dir($img_directory)) { $theme['imgdir'] = 'images'; }
  214.     if(!empty($mybb->user['language']) && is_dir($img_directory.'/'.$mybb->user['language'])) { $theme['imglangdir'] = $theme['imgdir'].'/'.$mybb->user['language']; }
  215.     else { $theme['imglangdir'] = is_dir($img_directory.'/'.$mybb->settings['bblanguage']) ? $theme['imgdir'].'/'.$mybb->settings['bblanguage'] : $theme['imgdir']; }
  216. }
  217. $theme['imgdir'] = $mybb->get_asset_url($theme['imgdir']);
  218. $theme['imglangdir'] = $mybb->get_asset_url($theme['imglangdir']);
  219.  
  220. // Theme logo
  221. if(!preg_match("#^(\.\.?(/|$)|([a-z0-9]+)://)#i", $theme['logo']) && substr($theme['logo'], 0, 1) != '/') { $theme['logo'] = $mybb->get_asset_url($theme['logo']); }
  222.  
  223. // Load templates
  224. $templatelist = isset($templatelist) ? ',' : '';
  225. $templatelist .= "headerinclude,header,footer,gobutton,htmldoctype,header_welcomeblock_member,header_welcomeblock_member_user,header_welcomeblock_member_moderator,header_welcomeblock_member_admin,error";
  226. $templatelist .= ",global_pending_joinrequests,global_awaiting_activation,nav,nav_sep,nav_bit,nav_sep_active,nav_bit_active,footer_languageselect,footer_themeselect,global_unreadreports,footer_contactus";
  227. $templatelist .= ",global_boardclosed_warning,global_bannedwarning,error_inline,error_nopermission_loggedin,error_nopermission,global_pm_alert,header_menu_search,header_menu_portal,redirect,footer_languageselect_option";
  228. $templatelist .= ",video_dailymotion_embed,video_facebook_embed,video_liveleak_embed,video_metacafe_embed,video_myspacetv_embed,video_veoh_embed,video_vimeo_embed,video_yahoo_embed,video_youtube_embed,debug_summary";
  229. $templatelist .= ",smilieinsert_row,smilieinsert_row_empty,smilieinsert,smilieinsert_getmore,smilieinsert_smilie,global_board_offline_modal,footer_themeselector,task_image,usercp_themeselector_option";
  230. $templatelist .= ",mycode_code,mycode_email,mycode_img,mycode_php,mycode_quote_post,mycode_size_int,mycode_url,global_no_permission_modal,global_boardclosed_reason,nav_dropdown,global_remote_avatar_notice";
  231. $templatelist .= ",header_welcomeblock_member_pms,header_welcomeblock_member_search,header_welcomeblock_guest,header_menu_calendar,header_menu_memberlist,global_dst_detection,header_quicksearch,smilie";
  232. $templates->cache($db->escape_string($templatelist));
  233.  
  234. // Set current date and time
  235. $datenow = my_date($mybb->settings['dateformat'], TIME_NOW, '', false);
  236. $timenow = my_date($mybb->settings['timeformat'], TIME_NOW);
  237. $lang->welcome_current_time = $lang->sprintf($lang->welcome_current_time, $datenow.$lang->comma.$timenow);
  238.  
  239. // Format visit date
  240. $lastvisit = isset($mybb->user['lastvisit']) ? my_date('relative', $mybb->user['lastvisit'], '', 2) : $lang->lastvisit_never;
  241. $plugins->run_hooks('global_intermediate');
  242.  
  243. // Is board closed
  244. $bbclosedwarning = '';
  245. if($mybb->settings['boardclosed'] == 1 && $mybb->usergroup['canviewboardclosed'] == 1) { eval("\$bbclosedwarning = \"{$templates->get('global_boardclosed_warning')}\";"); }
  246.  
  247. // Prepare main templates
  248. $admincplink = $modcplink = $usercplink = '';
  249.  
  250. // Load welcome block
  251. if($mybb->user['uid'] != 0) {
  252.     if($mybb->usergroup['cancp'] == 1 && $mybb->config['hide_admin_links'] != 1) {
  253.         $admin_dir = $config['admin_dir'];
  254.         eval("\$admincplink = \"{$templates->get('header_welcomeblock_member_admin')}\";");
  255.     } if($mybb->usergroup['canmodcp'] == 1) { eval("\$modcplink = \"{$templates->get('header_welcomeblock_member_moderator')}\";");
  256.     } if($mybb->usergroup['canusercp'] == 1) { eval("\$usercplink = \"{$templates->get('header_welcomeblock_member_user')}\";"); }
  257.     $lang->welcome_back = $lang->sprintf($lang->welcome_back, build_profile_link(htmlspecialchars_uni($mybb->user['username']), $mybb->user['uid']), $lastvisit);
  258.     $searchlink = '';
  259.     if($mybb->usergroup['cansearch'] == 1) { eval("\$searchlink = \"{$templates->get('header_welcomeblock_member_search')}\";"); }
  260.     $pmslink = '';
  261.     if($mybb->settings['enablepms'] != 0 && $mybb->usergroup['canusepms'] == 1) {
  262.         $lang->welcome_pms_usage = $lang->sprintf($lang->welcome_pms_usage, my_number_format($mybb->user['pms_unread']), my_number_format($mybb->user['pms_total']));
  263.         eval("\$pmslink = \"{$templates->get('header_welcomeblock_members_pms')}\";");
  264.     } eval("\$welcomeblock = \"{$templates->get('header_welcomeblock_member')}\";");
  265. } else {
  266.     switch($mybb->settings['username_method']) {
  267.         case 0:
  268.             $login_username = $lang->login_username;
  269.             break;
  270.         case 1:
  271.             $login_username = $lang->login_username1;
  272.             break;
  273.         case 2:
  274.             $login_username = $lang->login_username2;
  275.             break;
  276.         default:
  277.             $login_username = $lang->login_username;
  278.             break;
  279.     } eval("\$welcomeblock = \"{$templates->get('header_welcomeblock_guest')}\";");
  280. }
  281.  
  282. $menu_search = $menu_memberlist = $menu_portal = $menu_calendar = $quicksearch = '';
  283. if($mybb->usergroup['cansearch'] == 1) {
  284.     eval("\$menu_search = \"{$templates->get('header_menu_search')}\";");
  285.     eval("\$quicksearch = \"{$templates->get('header_quicksearch')}\";");
  286. } if($mybb->settings['enablememberlist'] == 1 && $mybb->usergroup['canviewmemberlist'] == 1) { eval("\$menu_memberlist = \"{$templates->get('header_menu_memberlist')}\";");
  287. } if($mybb->settings['enablecalendar'] == 1 && $mybb->usergroup['canviewcalendar'] == 1) { eval("\$menu_calendar = \"{$templates->get('header_menu_calendar')}\";");
  288. } if($mybb->settings['portal'] == 1) { eval("\$menu_portal = \"{$templates->get('header_menu_portal')}\";"); }
  289.  
  290. // Pending join requests for groups
  291. $pending_joinrequests = '';
  292. $groupleaders = $cache->read('groupleaders');
  293. if($mybb->user['uid'] != 0 && is_array($groupleaders) && array_key_exists($mybb->user['uid'], $groupleaders)) {
  294.     $groupleader = $groupleaders[$mybb->user['uid']];
  295.     $gids = "'0'";
  296.     foreach($groupleader as $user) {
  297.         if($user['canmanagerequests'] != 1) { continue; }
  298.         $user['gid'] = (int)$user['gid'];
  299.         $gids .= ",'{$user['gid']}'";
  300.     }
  301.     $query = $db->simple_select('joinrequests', 'COUNT(uid) as total', "gid IN ({$gids}) AND invite='0'");
  302.     $total_joinrequests = $db->fetch_field($query, 'total');
  303.     if($total_joinrequests > 0) {
  304.         if($total_joinrequests == 1) { $lang->pending_joinrequests = $lang->pending_joinrequest; }
  305.         else {
  306.             $total_joinrequests = my_number_format($total_joinrequests);
  307.             $lang->pending_joinrequests = $lang->sprintf($lang->pending_joinrequests, $total_joinrequests);
  308.         } eval("\$pending_joinrequests = \"{$templates->get('global_pending_joinrequests')}\";");
  309.     }
  310. }
  311.  
  312. // This is staff member
  313. $unreadreports = '';
  314. if($mybb->settings['reportmethod'] == 'db' && $mybb->usergroup['cancp'] == 1 || $mybb->user['ismoderator'] && $mybb->usergroup['canmodcp'] == 1 && $mybb->usergroup['canmanagereportedcontent'] == 1) {
  315.     if($mybb->usergroup['cancp'] == 1 && !$mybb->user['ismoderator'] && $mybb->usergroup['canmodcp'] == 1 && $mybb->usergroup['canmanagereportedcontent'] == 1) {
  316.         $can_access_moderationqueue = true;
  317.         $is_super_admin = is_super_admin($mybb->user['uid']);
  318.         if(!$is_super_admin) {
  319.             if(!file_exists(MYBB_ROOT.$mybb->config['admin_dir'].'/inc/functions.php')) { $can_access_moderationqueue = false; }
  320.             require_once MYBB_ROOT.$mybb->config['admin_dir'].'/inc/functions.php';
  321.             require_once MYBB_ROOT.$mybb->config['admin_dir'].'/modules/forum/module_meta.php';
  322.             if(function_exists('forum_admin_permissions')) {
  323.                 $adminperms = get_admin_permissions($mybb->user['uid']);
  324.                 $permissions = forum_admin_permissions();
  325.                 if(array_key_exists('moderation_queue', $permissions['permissions']) && $adminperms['forum']['moderation_queue'] != 1) { $can_access_moderationqueue = false; }
  326.             }
  327.         }
  328.     } else { $can_access_moderationqueue = false; }
  329.  
  330.     if($can_access_moderationqueue || $mybb->user['ismoderator'] && $mybb->usergroup['canmodcp'] == 1 && $mybb->usergroup['canmanagereportedcontent'] == 1) {
  331.         $reported = $cache->read('reportedcontent');
  332.         if($reported['unread'] > 0) {
  333.             if($mybb->usergroup['cancp'] || $mybb->usergroup['issupermod']) { $unread = (int)$reported['unread']; }
  334.             else {
  335.                 $unread = 0;
  336.                 $query = $db->simple_select('reportedcontent', 'id3', "reportstatus='0' AND (type = 'post' OR type = '')");
  337.                 while($fid = $db->fetch_field($query, 'id3')) {
  338.                     if(is_moderator($fid, 'canmanagereportedposts')) { ++$unread; }
  339.                 }
  340.             }
  341.            
  342.             if($unread > 0) {
  343.                 $lang->unread_reports = $unread == 1 ? $lang->unread_report : $lang->sprintf($lang->unread_reports, my_number_format($unread));
  344.                 eval("\$unreadreports = \"{$templates->get('global_unreadreports')}\";");
  345.             }
  346.         }
  347.     }
  348. }
  349.  
  350. // Charactersets
  351. $charset = 'UTF-8';
  352. if(isset($lang->settings['charset']) && $lang->settings['charset']) { $charset = $lang->settings['charset']; }
  353.  
  354. // Is banned
  355. $bannedwarning = '';
  356. if($mybb->usergroup['isbannedgroup'] == 1) {
  357.     $query = $db->simple_select('banned', '*', "uid = '{$mybb->user['uid']}'", ['limit' => 1]);
  358.     $ban = $db->fetch_array($query);
  359.     if($ban['uid']) {
  360.         $banlift = $lang->banned_lifted_never;
  361.         $reason = htmlspecialchars_uni($ban['reason']);
  362.         if($ban['lifted'] > 0) { $banlift = my_date($mybb->settings['dateformat'], $ban['lifted']).$lang->comma.my_date($mybb->settings['timeformat'], $ban['lifted']); }
  363.     } if(empty($reason)) { $reason = $lang->unknown;
  364.     } if(empty($banlift)) { $banlift = $lang->unknown; }
  365.     eval("\$bannedwarning = \"{$templates->get('global_bannedwarning')}\";");
  366. }
  367. $lang->ajax_loading = str_replace("'", "\\'", $lang->ajax_loading);
  368.  
  369. // Check PMs
  370. $pm_notice = '';
  371. if(isset($mybb->user['pmnotice']) && $mybb->user['pmnotice'] == 2 && $mybb->user['pms_unread'] > 0 && $mybb->settings['enablepms'] != 0 && $mybb->usergroup['canusepms'] != 0 && $mybb->usergroup['canview'] != 0 && ($current_page != "private.php" || $mybb->get_input('action') != "read")) {
  372.     if(!isset($parser)) {
  373.         require_once MYBB_ROOT.'inc/class_parser.php';
  374.         $parser = new postParser;
  375.     }
  376.     $query = $db->query("SELECT pm.subject, pm.pmid, fu.username AS fromusername, fu.uid AS fromuid
  377.         FROM ".TABLE_PREFIX."privatemessages pm
  378.         LEFT JOIN ".TABLE_PREFIX."users fu on (fu.uid=pm.fromid)
  379.         WHERE pm.folder = '1' AND pm.uid = '{$mybb->user['uid']}' AND pm.status = '0'
  380.         ORDER BY pm.dateline DESC
  381.         LIMIT 1");
  382.     $pm = $db->fetch_array($query);
  383.     $pm['subject'] = $parser->parse_badwords($pm['subject']);
  384.     if($pm['fromuid'] == 0) {
  385.         $pm['fromusername'] = $lang->mybb_engine;
  386.         $user_text = $pm['fromusername'];
  387.     } else {
  388.         $pm['fromusername'] = htmlspecialchars_uni($pm['fromusername']);
  389.         $user_text = build_profile_link($pm['fromusername'], $pm['fromuid']);
  390.     }
  391.    
  392.     $privatemessage_text = $mybb->user['pms_unread'] == 1 ? $lang->sprintf($lang->newpm_notice_one, $user_text, $mybb->settings['bburl'], $pm['pmid'], htmlspecialchars_uni($pm['subject'])) : $lang->sprintf($lang->newpm_notice_multiple, $mybb->user['pms_unread'], $user_text, $mybb->settings['bburl'], $pm['pmid'], htmlspecialchars_uni($pm['subject']));
  393.     eval("\$pm_notice = \"{$templates->get('global_pm_alert')}\";");
  394. }
  395.  
  396. // Remote avatars
  397. $remote_avatar_notice = '';
  398. if($mybb->user['avatartype'] === 'remote' || $mybb->user['avatartype'] === 'gravatar' && !$mybb->settings['allowremoteavatars']) { eval("\$remote_avatar_notice = \"{$templates->get('global_remote_avatar_notice')}\";"); }
  399. if($mybb->settings['awactialert'] == 1 && $mybb->usergroup['cancp'] == 1) {
  400.     $awaitingusers = $cache->read('awaitingactivation');
  401.     if(isset($awaitingusers['time']) && $awaitingusers['time']+86400 < TIME_NOW) {
  402.         $cache->update_awaitingactivation();
  403.         $awaitingusers = $cache->read('awaitingactivation');
  404.     }
  405.     $awaitingusers = !empty($awaitingusers['users']) ? (int)$awaitingusers['users'] : 0;
  406.     $awaitingusers = $awaitingusers < 1 ? 0 : my_number_format($awaitingusers);
  407.     if($awaitingusers > 0) {
  408.         $awaiting_message = $awaitingusers == 1 ? $lang->awaiting_message_single : $lang->sprintf($lang->awaiting_message_plural, $awaitingusers);
  409.         if($admincplink) { $awaiting_message .= $lang->sprintf($lang->awaiting_message_link, $mybb->settings['bburl'], $admin_dir); }
  410.         eval("\$awaitingusers = \"{$templates->get('global_awaiting_activation')}\";");
  411.     } else { $awaitingusers = ''; }
  412. }
  413.  
  414. // Default templates
  415. eval("\$headerinclude = \"{$templates->get('headerinclude')}\";");
  416. eval("\$gobutton = \"{$templates->get('gobutton')}\";");
  417. eval("\$htmldoctype = \"{$templates->get('htmldoctype', 1, 0)}\";");
  418. eval("\$header = \"{$templates->get('header')}\";");
  419. $copy_year = my_date('Y', TIME_NOW);
  420.  
  421. // Version number
  422. $mybbversion = '';
  423. if($mybb->settings['showvernum'] == 1) { $mybbversion = ' '.$mybb->version; }
  424.  
  425. // Check tasks
  426. $task_image = '';
  427. $task_cache = $cache->read('tasks');
  428. if(!$task_cache['nextrun']) { $task_cache['nextrun'] = TIME_NOW; }
  429. if($task_cache['nextrun'] <= TIME_NOW) { eval("\$task_image = \"".$templates->get("task_image")."\";"); }
  430.  
  431. //Post code
  432. $post_code_string = '';
  433. if($mybb->user['uid']) { $post_code_string = '&amp;my_post_key='.$mybb->post_code; }
  434.  
  435. //Language selection box
  436. $lang_select = $lang_options = '';
  437. if($mybb->settings['showlanguageselect'] != 0) {
  438.     $languages = $lang->get_languages();
  439.     if(count($languages) > 1) {
  440.         foreach($languages as $key => $language) {
  441.             $language = htmlspecialchars_uni($language);
  442.             $selected = $lang->language == $key ? ' selected="selected"' : '';
  443.             eval("\$lang_options .= \"{$templates->get('footer_languageselect')}\";");
  444.         }
  445.         $lang_redirect_url = get_current_location(true, 'language');
  446.         eval("\$lang_select = \"{$templates->get('footer_languageselect')}\";");
  447.     }
  448. }
  449.  
  450. // Show/Hide Quick Theme
  451. $theme_select = $theme_options = '';
  452. if($mybb->settings['showthemeselect'] != 0) {
  453.     $theme_options = build_theme_select('theme', $mybb->user['style'], 0, '', false, true);
  454.     if(!empty($theme_options)) {
  455.         $theme_redirect_url = get_current_location(true, 'theme');
  456.         eval("\$theme_select = \"{$templates->get('footer_themeselect')}\";");
  457.     }
  458. }
  459.  
  460. // Contact form
  461. $contact_us = '';
  462. if($mybb->settings['contactlink'] == "contact.php" && $mybb->settings['contact'] == 1 && $mybb->settings['contact_guests'] != 1 && $mybb->user['uid'] == 0 || $mybb->user['uid'] > 0 || $mybb->settings['contactlink'] != "contact.php") {
  463.     if(!my_validate_url($mybb->settings['contactlink'], true) && my_substr($mybb->settings['contactlink'], 0, 7) != 'mailto:') { $mybb->settings['contactlink'] = $mybb->settings['bburl'].'/'.$mybb->settings['contactlink']; }
  464.     eval("\$contact_us = \"{$templates->get('footer_contactus')}\";");
  465. }
  466.  
  467. //DST autodetection
  468. $auto_dst_detection = '';
  469. if($mybb->user['uid'] > 0 && $mybb->user['dstcorrection'] == 2) {
  470.     $timezone = (float)$mybb->user['timezone']+$mybb->user['dst'];
  471.     eval("\$auto_dst_detection = \"{$templates->get('global_dst_detection')}\";");
  472. } eval("\$footer = \"{$templates->get('footer')}\";");
  473.  
  474. // Navigation
  475. $navbits = [];
  476. $navbits[0]['name'] = $mybb->settings['bbname_orig'];
  477. $navbits[0]['url'] = $mybb->settings['bburl'].'/index.php';
  478. $archive_url = build_archive_link();
  479.  
  480. // Check IP bans
  481. if(is_banned_ip($session->ipaddress, true)) {
  482.     if($mybb->user['uid']) { $db->delete_query('sessions', "ip = ".$db->escape_binary($session->packedip)." OR uid='{$mybb->user['uid']}'"); }
  483.     else { $db->delete_query('sessions', "ip = ".$db->escape_binary($session->packedip)); } error($lang->error_banned);
  484. }
  485.  
  486. // Board closing
  487. $closed_bypass = ['member.php' => ['login','do_login','logout'],'captcha.php'];
  488. if($mybb->settings['boardclosed'] == 1 && $mybb->usergroup['canviewboardclosed'] != 1 && !in_array($current_page, $closed_bypass) && (!is_array($closed_bypass[$current_page]) || !in_array($mybb->get_input('action'), $closed_bypass[$current_page]))) {
  489.     if(!$mybb->settings['boardclosed_reason']) { $mybb->settings['boardclosed_reason'] = $lang->boardclosed_reason; }
  490.     eval("\$reason = \"{$templates->get('global_boardclosed_reason')}\";");
  491.     $lang->error_boardclosed .= $reason;
  492.    
  493.     if(!$mybb->get_input('modal')) { error($lang->error_boardclosed); }
  494.     else {
  495.         $output = '';
  496.         eval("\$output = \"{$templates->get('global_board_offline_modal', 1, 0)}\";");
  497.         echo($output);
  498.     } exit;
  499. }
  500.  
  501. // Force guest
  502. $force_bypass = ['member.php' => ['login','do_login','logout','register','do_register','lostpw','do_lostpw','activate','resendactivation','do_resendactivation','resetpassword'],'captcha.php'];
  503. if($mybb->settings['forcelogin'] == 1 && $mybb->user['uid'] == 0 && !in_array($current_page, $force_bypass) && (!is_array($force_bypass[$current_page]) || !in_array($mybb->get_input('action'), $force_bypass[$current_page]))) {
  504.     error_no_permission();
  505.     exit;
  506. }
  507.  
  508. // Load limiting
  509. if($mybb->usergroup['cancp'] != 1 && $mybb->settings['load'] > 0 && ($load = get_server_load()) && $load != $lang->unknown && $load > $mybb->settings['load']) { error($lang->error_loadlimit); }
  510.  
  511. // valid referrer
  512. if(!$mybb->user['uid'] && $mybb->settings['usereferrals'] == 1 && isset($mybb->input['referrer']) || isset($mybb->input['referrername'])) {
  513.     $condition = isset($mybb->input['referrername']) ? "username = '".$db->escape_string($mybb->get_input('referrername'))."'" : "uid = '".$mybb->get_input('referrer', MyBB::INPUT_INT)."'";
  514.     $query = $db->simple_select('users', 'uid', $condition, ['limit' => 1]);
  515.     $referrer = $db->fetch_array($query);
  516.    
  517.     if($referrer['uid']) { my_setcookie('mybb[referrer]', $referrer['uid']); }
  518. }
  519.  
  520. // view usergroups
  521. $output = '';
  522. $notallowed = false;
  523. if($mybb->usergroup['canview'] != 1) {
  524.     if(defined('ALLOWABLE_PAGE')) {
  525.         if(is_string(ALLOWABLE_PAGE)) {
  526.             $allowable_actions = explode(',', ALLOWABLE_PAGE);
  527.             if(!in_array($mybb->get_input('action'), $allowable_actions)) { $notallowed = true; }
  528.             unset($allowable_actions);
  529.         } elseif(ALLOWABLE_PAGE !== 1) { $notallowed = true; }
  530.     } else { $notallowed = true; }
  531.    
  532.     if($notallowed == true) {
  533.         if(!$mybb->get_input('modal')) { error_no_permission(); }
  534.         else {
  535.             eval("\$output = \"{$templates->get('global_no_permission_modal', 1, 0)}\";");
  536.             echo($output);
  537.             exit;
  538.         }
  539.     }
  540. }
  541.  
  542. // Banned Email Addresses
  543. if($mybb->user['uid'] && is_banned_email($mybb->user['email']) && $mybb->settings['emailkeep'] != 1) {
  544.     if(THIS_SCRIPT != 'usercp.php' || THIS_SCRIPT == 'usercp.php' && $mybb->get_input('action') != 'email' && $mybb->get_input('action') != 'do_email') { redirect('usercp.php?action=email'); }
  545.     elseif($mybb->request_method != 'post') { $banned_email_error = inline_error([$lang->banned_email_warning]); }
  546. }
  547.  
  548. // Collapsed users
  549. $colcookie = '';
  550. if(!empty($mybb->cookies['collapsed'])) { $colcookie = $mybb->cookies['collapsed']; }
  551. $collapsed = ['boardstats' => '', 'boardstats_e' => '', 'quickreply' => '', 'quickreply_e' => ''];
  552. $collapsedimg = $collapsed;
  553.  
  554. if($colcookie) {
  555.     $col = explode('|', $colcookie);
  556.     if(!is_array($col)) { $col[0] = $colcookie; }
  557.     unset($collapsed);
  558.    
  559.     foreach($col as $key => $val) {
  560.         $ex = $val.'_e';
  561.         $co = $val.'_c';
  562.         $collapsed[$co] = 'display: show;';
  563.         $collapsed[$ex] = 'display: none;';
  564.         $collapsedimg[$val] = '_collapsed';
  565.         $collapsedthead[$val] = ' thead_collapsed';
  566.     }
  567. }
  568.  
  569. // Run hooks
  570. $plugins->run_hooks('global_end');
  571. $globaltime = $maintimer->getTime();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement