Beispiel #1
0
 /**
  * Called before any other action method in this class.
  *
  * - If coming from the quick reply allows to route to the proper action
  * - if needed (for example external search engine or members search
  */
 public function pre_dispatch()
 {
     global $modSettings, $scripturl;
     // Coming from quick search box and going to some custome place?
     if (isset($_REQUEST['search_selection']) && !empty($modSettings['additional_search_engines'])) {
         $engines = prepareSearchEngines();
         if (isset($engines[$_REQUEST['search_selection']])) {
             $engine = $engines[$_REQUEST['search_selection']];
             redirectexit($engine['url'] . urlencode(implode($engine['separator'], explode(' ', $_REQUEST['search']))));
         }
     }
     // if comming from the quick search box, and we want to search on members, well we need to do that ;)
     if (isset($_REQUEST['search_selection']) && $_REQUEST['search_selection'] === 'members') {
         redirectexit($scripturl . '?action=memberlist;sa=search;fields=name,email;search=' . urlencode($_REQUEST['search']));
     }
     // If load balancing is on and the load is high, no need to even show the form.
     if (!empty($modSettings['loadavg_search']) && $modSettings['current_load'] >= $modSettings['loadavg_search']) {
         fatal_lang_error('loadavg_search_disabled', false);
     }
 }
Beispiel #2
0
/**
 * Sets up the basic theme context stuff.
 *
 * @param bool $forceload = false
 */
function setupThemeContext($forceload = false)
{
    global $modSettings, $user_info, $scripturl, $context, $settings, $options, $txt;
    global $user_settings;
    static $loaded = false;
    // Under SSI this function can be called more then once.  That can cause some problems.
    //   So only run the function once unless we are forced to run it again.
    if ($loaded && !$forceload) {
        return;
    }
    $loaded = true;
    $context['current_time'] = standardTime(time(), false);
    $context['current_action'] = isset($_GET['action']) ? $_GET['action'] : '';
    $context['show_quick_login'] = !empty($modSettings['enableVBStyleLogin']) && $user_info['is_guest'];
    // Get some news...
    $context['news_lines'] = array_filter(explode("\n", str_replace("\r", '', trim(addslashes($modSettings['news'])))));
    for ($i = 0, $n = count($context['news_lines']); $i < $n; $i++) {
        if (trim($context['news_lines'][$i]) == '') {
            continue;
        }
        // Clean it up for presentation ;).
        $context['news_lines'][$i] = parse_bbc(stripslashes(trim($context['news_lines'][$i])), true, 'news' . $i);
    }
    if (!empty($context['news_lines'])) {
        $context['random_news_line'] = $context['news_lines'][mt_rand(0, count($context['news_lines']) - 1)];
        $context['upper_content_callbacks'][] = 'news_fader';
    }
    if (!$user_info['is_guest']) {
        $context['user']['messages'] =& $user_info['messages'];
        $context['user']['unread_messages'] =& $user_info['unread_messages'];
        $context['user']['mentions'] =& $user_info['mentions'];
        // Personal message popup...
        if ($user_info['unread_messages'] > (isset($_SESSION['unread_messages']) ? $_SESSION['unread_messages'] : 0)) {
            $context['user']['popup_messages'] = true;
        } else {
            $context['user']['popup_messages'] = false;
        }
        $_SESSION['unread_messages'] = $user_info['unread_messages'];
        $context['user']['avatar'] = array('href' => !empty($user_info['avatar']['href']) ? $user_info['avatar']['href'] : '', 'image' => !empty($user_info['avatar']['image']) ? $user_info['avatar']['image'] : '');
        // @deprecated since 1.0.2
        if (!empty($modSettings['avatar_max_width'])) {
            $context['user']['avatar']['width'] = $modSettings['avatar_max_width'];
        }
        // @deprecated since 1.0.2
        if (!empty($modSettings['avatar_max_height'])) {
            $context['user']['avatar']['height'] = $modSettings['avatar_max_height'];
        }
        // Figure out how long they've been logged in.
        $context['user']['total_time_logged_in'] = array('days' => floor($user_info['total_time_logged_in'] / 86400), 'hours' => floor($user_info['total_time_logged_in'] % 86400 / 3600), 'minutes' => floor($user_info['total_time_logged_in'] % 3600 / 60));
    } else {
        $context['user']['messages'] = 0;
        $context['user']['unread_messages'] = 0;
        $context['user']['mentions'] = 0;
        $context['user']['avatar'] = array();
        $context['user']['total_time_logged_in'] = array('days' => 0, 'hours' => 0, 'minutes' => 0);
        $context['user']['popup_messages'] = false;
        if (!empty($modSettings['registration_method']) && $modSettings['registration_method'] == 1) {
            $txt['welcome_guest'] .= $txt['welcome_guest_activate'];
        }
        $txt['welcome_guest'] = replaceBasicActionUrl($txt['welcome_guest']);
        // If we've upgraded recently, go easy on the passwords.
        if (!empty($modSettings['enable_password_conversion'])) {
            $context['disable_login_hashing'] = true;
        }
    }
    // Setup the main menu items.
    setupMenuContext();
    if (empty($settings['theme_version'])) {
        $context['show_vBlogin'] = $context['show_quick_login'];
    }
    // This is here because old index templates might still use it.
    $context['show_news'] = !empty($settings['enable_news']);
    $context['additional_dropdown_search'] = prepareSearchEngines();
    // This is done to allow theme authors to customize it as they want.
    $context['show_pm_popup'] = $context['user']['popup_messages'] && !empty($options['popup_messages']) && (!isset($_REQUEST['action']) || $_REQUEST['action'] != 'pm');
    // Add the PM popup here instead. Theme authors can still override it simply by editing/removing the 'fPmPopup' in the array.
    if ($context['show_pm_popup']) {
        addInlineJavascript('
		$(document).ready(function(){
			new smc_Popup({
				heading: ' . JavaScriptEscape($txt['show_personal_messages_heading']) . ',
				content: ' . JavaScriptEscape(sprintf($txt['show_personal_messages'], $context['user']['unread_messages'], $scripturl . '?action=pm')) . ',
				icon: elk_images_url + \'/im_sm_newmsg.png\'
			});
		});', true);
    }
    // This looks weird, but it's because BoardIndex.controller.php references the variable.
    $context['common_stats']['latest_member'] = array('id' => $modSettings['latestMember'], 'name' => $modSettings['latestRealName'], 'href' => $scripturl . '?action=profile;u=' . $modSettings['latestMember'], 'link' => '<a href="' . $scripturl . '?action=profile;u=' . $modSettings['latestMember'] . '">' . $modSettings['latestRealName'] . '</a>');
    $context['common_stats'] = array('total_posts' => comma_format($modSettings['totalMessages']), 'total_topics' => comma_format($modSettings['totalTopics']), 'total_members' => comma_format($modSettings['totalMembers']), 'latest_member' => $context['common_stats']['latest_member']);
    $context['common_stats']['boardindex_total_posts'] = sprintf($txt['boardindex_total_posts'], $context['common_stats']['total_posts'], $context['common_stats']['total_topics'], $context['common_stats']['total_members']);
    if (empty($settings['theme_version'])) {
        addJavascriptVar(array('elk_scripturl' => '\'' . $scripturl . '\''));
    }
    if (!isset($context['page_title'])) {
        $context['page_title'] = '';
    }
    // Set some specific vars.
    $context['page_title_html_safe'] = Util::htmlspecialchars(un_htmlspecialchars($context['page_title'])) . (!empty($context['current_page']) ? ' - ' . $txt['page'] . ' ' . ($context['current_page'] + 1) : '');
    $context['meta_keywords'] = !empty($modSettings['meta_keywords']) ? Util::htmlspecialchars($modSettings['meta_keywords']) : '';
    // Load a custom CSS file?
    if (file_exists($settings['theme_dir'] . '/css/custom.css')) {
        loadCSSFile('custom.css');
    }
    if (!empty($context['theme_variant']) && file_exists($settings['theme_dir'] . '/css/' . $context['theme_variant'] . '/custom' . $context['theme_variant'] . '.css')) {
        loadCSSFile($context['theme_variant'] . '/custom' . $context['theme_variant'] . '.css');
    }
}