function globalTemplate($html, $documentHeadItems, $css, $jsModules, $metaTags, $header_items = array(), $items = array(), $footer_items = array(), $stats = array()) { $IPBHTML = ""; $this->templateVars['forumActive'] = ""; $this->__default__templateVars['forumActive'] = ""; if (IPS_APP_COMPONENT == 'forums') { $this->templateVars['forumActive'] = "active"; } else { $this->templateVars['forumActive'] = $this->__default__templateVars['forumActive']; } $this->templateVars['membersActive'] = ""; $this->__default__templateVars['membersActive'] = ""; if (IPS_APP_COMPONENT == 'members') { $this->templateVars['membersActive'] = "active"; } else { $this->templateVars['membersActive'] = $this->__default__templateVars['membersActive']; } $this->templateVars['helpActive'] = ""; $this->__default__templateVars['helpActive'] = ""; if (IPS_APP_COMPONENT == 'core' and $this->request['module'] == 'help') { $this->templateVars['helpActive'] = "active"; } else { $this->templateVars['helpActive'] = $this->__default__templateVars['helpActive']; } $this->did_first = 0; $IPBHTML .= "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n\t<html xml:lang=\"en\" lang=\"en\" xmlns=\"http://www.w3.org/1999/xhtml\"" . (IPSLib::fbc_enabled() === TRUE ? " xmlns:fb=\"http://www.facebook.com/2008/fbml\"" : "") . ">\n\t<head>\n\t\t<meta http-equiv=\"content-type\" content=\"text/html; charset={$this->settings['gb_char_set']}\" />\n\t\t<title>{$header_items['title']}" . ($header_items['page'] ? " {$this->lang->words['page_title_page']} {$header_items['page']}" : "") . "</title>\n\t\t<link rel=\"shortcut icon\" href='" . ($this->registry->output->isHTTPS ? "{$this->settings['board_url_https']}" : "{$this->settings['board_url']}") . "/favicon.ico' />\n\t\t<script type='text/javascript'>\n\t\t\tjsDebug = " . intval($this->settings['_jsDebug']) . "; /* Must come before JS includes */\n\t\t\tUSE_RTE = " . ($this->memberData['members_editor_choice'] == 'rte' && $this->memberData['_canUseRTE'] === TRUE ? "1" : "0") . ";\n\t\t\tinACP = false;\n\t\t</script>\n\t\t" . $this->registry->getClass('output')->getTemplate('global')->includeCSS($css) . "\n\t\t<!--<meta http-equiv=\"X-UA-Compatible\" content=\"IE=7\" />-->\n\t\t" . $this->registry->getClass('output')->getTemplate('global')->includeMeta($metaTags) . "" . $this->registry->getClass('output')->getTemplate('global')->includeJS($jsModules) . "" . $this->registry->getClass('output')->getTemplate('global')->includeFeeds($documentHeadItems) . "" . $this->registry->getClass('output')->getTemplate('global')->includeRTL() . "\t\t\n\t\t" . $this->registry->getClass('output')->getTemplate('global')->includeVars() . "\n\t\t<script type='text/javascript'>\n\t\t\tLoader.boot();\n\t\t</script>\n\t</head>\n\t<body id='ipboard_body'>\n\t\t<div id='ipbwrapper'>\n\t\t\t<h1>{$this->settings['board_name']}: {$header_items['title']}</h1>\n\t\t\t<p id='content_jump'><a id='top'></a><a href='#j_content' title='{$this->lang->words['jump_to_content']}' accesskey='m'>{$this->lang->words['jump_to_content']}</a></p>\n\t\t\n\t\t\t" . (($this->memberData['g_is_supmod'] == 1 or isset($this->memberData['access_report_center']) and $this->memberData['access_report_center']) ? "<div id='admin_bar'>\n\t\t\t\t\t" . (($this->memberData['g_access_cp'] == 1 and $this->settings['security_remove_acp_link'] == 0) ? "\n\t\t\t\t\t<p class='right'>\n\t\t\t\t\t\t<a href=\"{$this->settings['_admin_link']}\" title='{$this->lang->words['admin_cp']}'>{$this->lang->words['login_to_acp']} ></a>\n\t\t\t\t\t</p>\n\t\t\t\t\t" : "") . "\n\t\t\t\t\t<strong>{$this->lang->words['mod_tools']}</strong> \n\t\t\t\t\t<ul id='mod_tools'>\n\t\t\t\t\t\t" . ($this->memberData['g_is_supmod'] == 1 ? "\n\t\t\t\t\t\t\t<li><a href='" . $this->registry->getClass('output')->formatUrl($this->registry->getClass('output')->buildUrl("app=core&module=usercp&tab=members&area=mod_ipaddress", 'public', ''), "", "") . "' title='{$this->lang->words['ip_lookup']}'>{$this->lang->words['ip_lookup']}</a></li>\n\t\t\t\t\t\t\t<li><a href='" . $this->registry->getClass('output')->formatUrl($this->registry->getClass('output')->buildUrl("app=core&module=usercp&tab=forums&area=modAddAnnouncement&do=add", 'public', ''), "", "") . "' title='{$this->lang->words['post_announcement']}'>{$this->lang->words['post_announcement']}</a></li>\n\t\t\t\t\t\t" : "") . "\n\t\t\t\t\t\t" . ($this->memberData['access_report_center'] ? "<li " . ($this->memberData['_cache']['report_num'] > 0 ? "class='active'" : "") . "><a href=\"" . $this->registry->getClass('output')->formatUrl($this->registry->getClass('output')->buildUrl("app=core&module=reports&do=index", 'public', ''), "", "") . "\" title='{$this->lang->words['view_reports']}'>{$this->memberData['_cache']['report_num']} {$this->lang->words['report_member_bar']}</a></li>" : "") . "\n\t\t\t\t\t</ul>\n\t\t\t\t</div>" : "") . "\n\t\t\t<div id='header'>\n\t\t\t\t<div id='branding'>\n\t\t\t\t\t" . (method_exists($this->registry->output->getTemplate($this->registry->getCurrentApplication() . '_global'), 'overwriteHeader') ? "\n\t\t\t\t\t\t" . $this->registry->getClass('output')->getTemplate('' . $this->registry->getCurrentApplication() . '_global')->overwriteHeader() . "\n\t\t\t\t\t" : "\n\t\t\t\t\t\t" . $this->registry->getClass('output')->getTemplate('global')->defaultHeader() . "\n\t\t\t\t\t") . "\n\t\t\t\t</div>\n\t\t\t\t\t\t\n\t\t\t\t" . ($this->memberData['member_id'] ? "<div id='user_navigation' class='logged_in'>\n\t\t\t\t\t\t<img src='{$this->memberData['pp_thumb_photo']}' alt=\"{$this->memberData['members_display_name']}{$this->lang->words['users_photo']}\" width='{$this->memberData['pp_thumb_width']}' height='{$this->memberData['pp_thumb_height']}' class='photo' />\n\t\t\t\t\t\t<div id='user_info'>\n\t\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\t\t<span class='hide'>{$this->lang->words['logged_in_as']} </span>\nLogged in as\n\t\t\t\t\t\t\t\t<a id='user_link' class='ipbmenu' href=\"" . $this->registry->getClass('output')->formatUrl($this->registry->getClass('output')->buildUrl("showuser={$this->memberData['member_id']}", 'public', ''), "{$this->memberData['members_seo_name']}", "showuser") . "\" title='{$this->lang->words['your_profile']}'>{$this->memberData['members_display_name']} <img src='{$this->settings['img_url']}/opts_arrow.png' alt='>' /></a>" . ($this->memberData['msg_count_new'] != 0 ? "<a href='" . $this->registry->getClass('output')->formatUrl($this->registry->getClass('output')->buildUrl("app=members&module=messaging", 'public', ''), "", "") . "' id='new_msg_count' title='{$this->memberData['msg_count_new']} {$this->lang->words['msg_new']}'>{$this->memberData['msg_count_new']}<span class='hide'> {$this->lang->words['msg_new']}</span></a>" : "") . "\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<ul id='user_link_menucontent'>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t<ul id='user_other'>\n\t\t\t\t\t\t\t\t<li><a href=\"" . $this->registry->getClass('output')->formatUrl($this->registry->getClass('output')->buildUrl("app=core&module=global&section=login&do=logout&k={$this->member->form_hash}", 'public', ''), "", "") . "\">{$this->lang->words['log_out']}</a></li>\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t" . ($this->memberData['member_group_id'] == $this->settings['auth_group'] ? "\n\t\t\t\t\t\t\t\t\t<li><strong><a href=\"" . $this->registry->getClass('output')->formatUrl($this->registry->getClass('output')->buildUrl("app=core&module=global&section=register&do=reval", 'public', ''), "", "") . "\" title='{$this->lang->words['resend_val']}'>{$this->lang->words['resend_val']}</a></strong></li>\n\t\t\t\t\t\t\t\t" : "") . "\n\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t<script type='text/javascript'>\n\t\t\t\t\t\t\t\tif( \$('user_link_menucontent') ){\n\t\t\t\t\t\t\t\t\t\$('user_link_menucontent').hide();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</script>\n\t\t\t\t\t\t\t" . $this->registry->getClass('output')->addJSModule("friends", "0") . "\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>" : "\n\t\t\t\t\t<div id='user_navigation' class='not_logged_in'>\n\t\t\t\t\t\t<a href='" . $this->registry->getClass('output')->formatUrl($this->registry->getClass('output')->buildUrl("app=core&module=global&section=login", 'public', ''), "", "") . "' title='{$this->lang->words['sign_in']}'>" . $this->registry->getClass('output')->getReplacement("signin_icon") . " {$this->lang->words['sign_in']}</a>\n\t\t\t\t\t\t<a href=\"" . $this->registry->getClass('output')->formatUrl($this->registry->getClass('output')->buildUrl("app=core&module=global&section=register", 'public', ''), "", "") . "\" title='{$this->lang->words['register']}'>" . $this->registry->getClass('output')->getReplacement("register_icon") . " {$this->lang->words['register']}</a>\n\t\t\t\t\t\t<a href=\"" . $this->registry->getClass('output')->formatUrl($this->registry->getClass('output')->buildUrl("app=core&module=help", 'public', ''), "", "") . "\" title='{$this->lang->words['view_help']}' rel=\"help\" accesskey='6'>" . $this->registry->getClass('output')->getReplacement("help_icon") . " {$this->lang->words['sj_help']}</a>\n\t\t\t\t\t</div>\n\t\t\t\t\n\t\t\t\t") . "\n\t\t\t\n\t\t\t\t<div id='primary_nav'>\n\t\t\t\t\t<div id='search'>\n\t\t\t\t\t\t" . (!in_array($this->settings['search_method'], array('traditional', 'sphinx')) ? "\n\t\t\t\t\t\t<form action=\"" . $this->registry->getClass('output')->formatUrl($this->registry->getClass('output')->buildUrl("app=core&module=search&do=quick_search&search_filter_app[all]=1", 'public', ''), "", "") . "\" method=\"post\" id='search-box' >\n\t\t\t\t\t\t" : "<form action=\"" . $this->registry->getClass('output')->formatUrl($this->registry->getClass('output')->buildUrl("app=core&module=search&do=quick_search&search_filter_app[" . (!empty($this->request['search_app']) ? "{$this->request['search_app']}" : "" . (IPSSearchIndex::appIsSearchable($this->registry->getCurrentApplication()) ? "{$this->registry->getCurrentApplication()}" : "forums") . "") . "]=1", 'public', ''), "", "") . "\" method=\"post\" id='search-box' >") . "\n\t\t\t\t\t\t\t<fieldset>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t<label for='main_search' class='hide'>{$this->lang->words['sj_search']}</label>\n\t\t\t\t\t\t\t\t<input type='text' id='main_search' name='search_term' class='text_input' size='17' tabindex='6' />\n\t\t\t\t\t\t\t\t<input type='submit' class='submit_input' value='{$this->lang->words['sj_search']}' />\n\t\t\t\t\t\t\t\t<a href='" . $this->registry->getClass('output')->formatUrl($this->registry->getClass('output')->buildUrl("app=core&module=search", 'public', ''), "", "") . "' title='{$this->lang->words['advanced_search']}' accesskey='4' rel=\"search\" id='adv_search'>{$this->lang->words['advanced']}</a>\n\t\t\t\t\t\t\t</fieldset>\n\t\t\t\t\t\t</form>\n\t\t\t\t\t</div>\n\t\t\t\t\t<ul>\n\t\t\t\t\t" . ($this->settings['home_url'] ? "\n\t\t\t\t\t\t\t<li id='nav_home' class='left'><a href='{$this->settings['home_url']}' title='{$this->lang->words['homepage_title']}' rel=\"home\">{$this->settings['home_name']}</a></li>\n\t\t\t\t\t\t" : "") . " \n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t" . ((is_array($header_items['applications']) and count($header_items['applications'])) ? "\n\t\t\t\t\t\t\t" . $this->__f__f3ef81aefc61e1ddbb3a00ce02d56217($html, $documentHeadItems, $css, $jsModules, $metaTags, $header_items, $items, $footer_items, $stats) . "\t\t\t\t\t\t" : "") . "\n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\t\t\t\t" . (is_array($items['pmData']) ? "<div id='pm_notification'>\n\t\t\t\t\t\t<div id='pm_wrap'>\n\t\t\t\t\t\t\t<img src='{$items['pmData']['authorData']['pp_thumb_photo']}' alt=\"{$items['pmData']['authorData']['members_display_name']}{$this->lang->words['users_photo']}\" width='{$items['pmData']['authorData']['pp_thumb_width']}' height='{$items['pmData']['authorData']['pp_thumb_height']}' class='photo' />\n\t\t\t\t\t\t\t<h2>{$items['pmData']['authorData']['members_display_name']} " . ($items['pmData']['_type'] == 'new' ? "{$this->lang->words['sent_new_convo']}" : "{$this->lang->words['replied_convo']}") . "</h2>\n\t\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\t\t<strong>{$this->lang->words['pc_subject']}</strong> {$items['pmData']['mt_title']}<br />\n\t\t\t\t\t\t\t\t<strong>{$this->lang->words['pc_replies']}</strong> " . intval($items['pmData']['mt_replies']) . "<br />\n\t\t\t\t\t\t\t\t<strong>{$this->lang->words['pc_sent']}</strong> " . $this->registry->getClass('class_localization')->getDate($items['pmData']['msg_date'], "short", 0) . "\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<p class='excerpt'>\n\t\t\t\t\t\t\t\t" . IPSText::truncate($items['pmData']['msg_post'], 500) . "\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<br />\n\t\t\t\t\t\t\t<ul class='topic_buttons ok_thanks'>\n\t\t\t\t\t\t\t\t<li><a href='#j_content' id='close_pm_notification'><img src='{$this->settings['img_url']}/cross.png' alt='{$this->lang->words['icon']}' /> {$this->lang->words['ignore_conversation']}</a></li>\n\t\t\t\t\t\t\t\t<li><a href='" . $this->registry->getClass('output')->formatUrl($this->registry->getClass('output')->buildUrl("app=members&module=messaging&section=view&do=findMessage&topicID={$items['pmData']['mt_id']}&msgID=__firstUnread__", 'public', ''), "", "") . "'><img src='{$this->settings['img_url']}/email.png' alt='{$this->lang->words['icon']}' /> {$this->lang->words['global_pm_read']}</a></li>\n\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<script type='text/javascript'>\n\t\t\t\t\t\t\$('pm_notification').hide();\n\t\t\t\t\t</script>" : "") . "\n\t\t\t\n\t\t\t<!-- NAVIGATION TOP LEFT\t<div id='secondary_nav'>\n\t\t\t\t\t<ul id='breadcrumb' class='left'>\n\t\t\t\t\t\t\t\t\t\t\t\t" . ((!$this->settings['remove_forums_nav'] or ipsRegistry::$current_application == 'forums') ? "<li class='first'><a href='" . $this->registry->getClass('output')->formatUrl($this->registry->getClass('output')->buildUrl("act=idx", 'public', ''), "false", "") . "'>{$this->settings['board_name']}</a></li>\n\t\t\t\t\t\t\t" . (($this->did_first = 1) ? "" : "") . "" : "") . " \n\t\t\t\t\t\t" . $this->__f__ce9338f8ac36f63d75adce3df1cb47a3($html, $documentHeadItems, $css, $jsModules, $metaTags, $header_items, $items, $footer_items, $stats) . "\t\t\t\t\t</ul>\n\t\t\t\t\t<ul id='section_links' class='right'>\n\t\t\t\t\t\t" . (($this->settings['gl_show'] and $this->settings['gl_title']) ? "<li><a href='" . ($this->settings['gl_link'] ? "{$this->settings['gl_link']}" : "" . $this->registry->getClass('output')->formatUrl($this->registry->getClass('output')->buildUrl("app=forums&module=extras&section=boardrules", 'public', ''), "", "") . "") . "'>" . ($this->settings['gl_title'] ? "{$this->settings['gl_title']}" : "{$this->lang->words['board_rules']}") . "</a></li>" : "") . "\n\t\t\t\t\t\t<li><a href='" . $this->registry->getClass('output')->formatUrl($this->registry->getClass('output')->buildUrl("app=core&module=search&do=new_posts&search_filter_app[" . (($this->registry->getCurrentApplication() != 'core' and IPSSearchIndex::appIsSearchable($this->registry->getCurrentApplication())) ? "{$this->registry->getCurrentApplication()}" : "forums") . "]=1", 'public', ''), "", "") . "' accesskey='2'>{$this->lang->words['view_new_posts']}</a></li>\n\t\t\t\t\t\t<li><img src='{$this->settings['img_url']}/feed.png' alt='{$this->lang->words['rss_feed']}' id='rss_feed' class='clickable' /></li> \n\t\t\t\t\t</ul>\n\t\t\t\t</div>\n\t\t\t</div> -->\n\t\t\t<div id='content' class='clear'>\n\t\t\t\t<a id='j_content'></a>\n\t\t\t\t" . ($html ? "{$html}" : "") . "\n\t\t\t\t<br class='clear' />\n\t\t\t</div>\n\t\t\t<div id='footer_utilities' class='clearfix clear rounded'>\n\t\t\t\t<h2 class='hide'>{$this->lang->words['skin_and_lang']}</h2>\n\t\t\t\t" . (($this->settings['allow_skins'] and $footer_items['skin_chooser']) ? "" . (($this->memberData['userAgentLocked'] and !$this->memberData['userAgentBypass']) ? "\n\t\t\t\t\t\t<p id='useragent_msg'>\n\t\t\t\t\t\t\t{$this->lang->words['skin_browser_set']} <a href='" . $this->registry->getClass('output')->formatUrl($this->registry->getClass('output')->buildUrl("{$this->settings['query_string_formatted']}&unlockUserAgent=1", 'public', ''), "", "") . "'>{$this->lang->words['override_browser_theme']}</a>\n\t\t\t\t\t\t</p>\n\t\t\t\t\t" : "\n\t\t\t\t\t\t<form action=\"" . $this->registry->getClass('output')->formatUrl($this->registry->getClass('output')->buildUrl("{$this->settings['query_string_formatted']}", 'public', ''), "", "") . "\" method=\"post\" class='left'>\n\t\t\t\t\t\t\t<fieldset>\n\t\t\t\t\t\t\t\t<input type='hidden' name='k' value='{$this->member->form_hash}' />\n\t\t\t\t\t\t\t\t<label for='newSkin' class='hide'>{$this->lang->words['theme_prefix']}</label>\n\t\t\t\t\t\t\t\t<select name=\"settingNewSkin\" id='newSkin'>\n\t\t\t\t\t\t\t\t\t{$footer_items['skin_chooser']}\n\t\t\t\t\t\t\t\t</select>\n\t\t\t\t\t\t\t\t<input type='submit' value='{$this->lang->words['jmp_go']}' class='input_submit alt' id='newSkinSubmit' />\n\t\t\t\t\t\t\t</fieldset>\n\t\t\t\t\t\t</form>\n\t\t\t\t\t") . "" : "") . "\n\t\t\t\t<form action=\"" . $this->registry->getClass('output')->formatUrl($this->registry->getClass('output')->buildUrl("{$this->settings['query_string_formatted']}", 'public', ''), "", "") . "\" method=\"post\" class='left'>\n\t\t\t\t\t<fieldset>\n\t\t\t\t\t\t<input type='hidden' name='k' value='{$this->member->form_hash}' />\n\t\t\t\t\t\t<input type='hidden' name='setlanguage' value='1' />\n\t\t\t\t\t\t<input type=\"hidden\" name=\"langurlbits\" value=\"{$this->settings['query_string_safe']}&cal_id={$this->request['cal_id']}\" />\n\t\t\t\t\t\t<label for='newLang' class='hide'>{$this->lang->words['language_prefix']}</label>\n\t\t\t\t\t\t<select name=\"langid\" id='newLang'>\n\t\t\t\t\t\t\t\t{$footer_items['lang_chooser']}\n\t\t\t\t\t\t</select>\n\t\t\t\t\t\t<input type='submit' class='input_submit alt' value='{$this->lang->words['jmp_go']}' id='newLangSubmit' />\n\t\t\t\t\t</fieldset>\n\t\t\t\t</form>\n\t\t\t\t<h2 class='hide'>{$this->lang->words['exec_stats']}</h2>\n\t\t\t\t<ul class='right'>\n\t\t\t\t\t<li>{$this->lang->words['time_now']} {$footer_items['time']}\n\t\t\t\t\t\t" . (($this->memberData['member_id'] and $this->memberData['last_visit']) ? "<p>{$this->lang->words['you_last_visit']} " . $this->registry->getClass('class_localization')->getDate($this->memberData['last_visit'], "short", 0) . "</p>" : "") . "\n\t\t\t\t\t</li>\n\t\t\t\t\t" . (($this->memberData['member_id'] and $this->settings['debug_level']) ? "<li><img src='{$this->settings['img_url']}/stats_time.png' alt='{$this->lang->words['icon']}' /> {$stats['ex_time']} {$this->lang->words['stats_sec']}</li>\n\t\t\t\t\t\t<li><img src='{$this->settings['img_url']}/stats_server.png' alt='{$this->lang->words['icon']}' /> {$stats['server_load']}</li>\n\t\t\t\t\t\t<li><img src='{$this->settings['img_url']}/stats_database.png' alt='{$this->lang->words['icon']}' /> {$stats['queries']} " . (IPS_SQL_DEBUG_MODE ? "<a href='" . $this->registry->getClass('output')->formatUrl($this->registry->getClass('output')->buildUrl("{$this->settings['query_string_safe']}&debug=1", 'public', ''), "", "") . "'>" : "") . "{$this->lang->words['stats_queries']}" . (IPS_SQL_DEBUG_MODE ? "</a>" : "") . "</li>\n\t\t\t\t\t\t<li><img src='{$this->settings['img_url']}/stats_compression.png' alt='{$this->lang->words['icon']}' /> {$stats['gzip_status']}</li>" : "") . "\n\t\t\t\t</ul>\n\t\t\t</div>\n\t\t\t<!-- __FOOTER__ -->\n\t\t\t<!-- /__FOOTER__ -->\n\t\t\t<!--DEBUG_STATS-->\n\t\t\t<div id='board_footer'>\n\t\t\t\t<ul id='utility_links' class='left'>\n\t\t\t\t\t<li><a href='#top' title='{$this->lang->words['go_to_top']}'>{$this->lang->words['back_to_top']}</a></li>\n\t\t\t\t\t<li><a href='" . $this->registry->getClass('output')->formatUrl($this->registry->getClass('output')->buildUrl("", 'public', ''), "", "") . "' title='{$this->lang->words['sj_home']}'>Home</a></li>\n\t\t\t\t\t<li><a href=\"" . $this->registry->getClass('output')->formatUrl($this->registry->getClass('output')->buildUrl("app=core&module=global&section=login&do=deleteCookies&k={$this->member->form_hash}", 'public', ''), "", "") . "\" title='{$this->lang->words['delete_all_cookies_title']}'>{$this->lang->words['delete_my_cookies']}</a></li>\n\t\t\t\t</ul>\n\t\t\t\t{$footer_items['copyright']}\n\t\t\t</div>\n\t\t\t{$stats['task']}\n\t\t\t" . ($this->settings['do_include_lightbox_real'] ? "" . $this->registry->getClass('output')->getTemplate('global')->include_lightbox_real() . "" : "") . "\n\t\t</div>\n\t</body>\n</html>"; return $IPBHTML; }
/** * Does search * * @access private * @param string $search_term * @param array $limit_clause The erray should be array( begin, end ) * @param string $sort_by Either relevance or date * @param string [$group_by] Field to group on * @param bool [$count_only] Set to true for a count(*) query * @param bool [$content_title_only] Only search titles * @return array **/ private function _searchQuery($search_term, $limit_clause, $sort_by, $group_by = '', $count_only = false, $content_title_only = false) { /* Do we only need to count results? */ if (!$count_only) { if ($limit_clause[1]) { /* Limit Results */ $this->sphinxClient->SetLimits(intval($limit_clause[0]), intval($limit_clause[1])); } else { if ($limit_clause[0]) { $this->sphinxClient->SetLimits(0, intval($limit_clause[0])); } } /* Sort By */ if (isset($sort_by) && in_array($sort_by, array('date', 'relevance'))) { if ($sort_by == 'date') { if ($this->request['search_sort_order'] == 0) { $this->sphinxClient->SetSortMode(SPH_SORT_ATTR_DESC, $this->appSearchPlugin->getDateField()); } else { $this->sphinxClient->SetSortMode(SPH_SORT_ATTR_ASC, $this->appSearchPlugin->getDateField()); } } else { $this->sphinxClient->SetSortMode(SPH_SORT_RELEVANCE); } } else { $this->sphinxClient->SetSortMode(SPH_SORT_RELEVANCE); } } /* Exclude Apps */ if (count($this->exclude_apps)) { $app_id_exclude = array(); foreach ($this->exclude_apps as $app_dir) { $app_id_exclude[] = ipsRegistry::$applications[$app_dir]['app_id']; } $this->sphinxClient->SetFilter('app', $app_id_exclude, TRUE); } /* Permissions */ $perm_array = $this->member->perm_id_array; $perm_array[] = 0; /* Need to remove empty values... */ $final_perms = array(); foreach ($perm_array as $perm_id) { if (is_numeric($perm_id)) { $final_perms[] = $perm_id; } } $this->sphinxClient->SetFilter('perm_view', $final_perms); /* Exclude some items */ if (!$this->memberData['g_is_supmod']) { /* Owner only */ $this->sphinxClient->SetFilter('owner_only', array(0, $this->memberData['member_id'])); /* Friend only */ $this->DB->build(array('select' => 'friends_member_id', 'from' => 'profile_friends', 'where' => "friends_friend_id={$this->memberData['member_id']}")); $this->DB->execute(); $friends_ids = array(0); while ($r = $this->DB->fetch()) { $friends_ids[] = $r['friends_member_id']; } $this->sphinxClient->SetFilter('friend_only', $friends_ids); /* Authorized users only */ $this->sphinxClient->SetFilter('authorized_users', array(0, $this->memberData['member_id'])); } /* Loop through all the search plugins and let them modify the search query */ foreach (ipsRegistry::$applications as $app) { if (IPSSearchIndex::appisSearchable($app['app_directory'])) { if (!isset($this->display_plugins[$app['app_directory']]) || !$this->display_plugins[$app['app_directory']]) { require_once IPSLib::getAppDir($app['app_directory']) . '/extensions/searchDisplay.php'; $_class = $app['app_directory'] . 'SearchDisplay'; $this->display_plugins[$app['app_directory']] = new $_class(); } $this->display_plugins[$app['app_directory']]->search_plugin = $this->appSearchPlugin; if (method_exists($this->display_plugins[$app['app_directory']], 'modifySearchQuery')) { /* Get the modified query */ $this->display_plugins[$app['app_directory']]->modifySearchQuery($this->sphinxClient, $count_only); } } } $groupby = $this->request['show_as_titles'] ? true : false; /* Perform the search */ if (method_exists($this->display_plugins[$this->request['search_app']], 'runSearchQuery')) { $result = $this->display_plugins[$this->request['search_app']]->runSearchQuery($this->sphinxClient, $search_term, $groupby); } else { if ($groupby) { $this->sphinxClient->SetGroupBy('search_id', SPH_GROUPBY_ATTR, '@group DESC'); } $result = $this->sphinxClient->Query($search_term, $this->request['search_app'] . '_search_main,' . $this->request['search_app'] . '_search_delta'); } /* Return the total number of results */ if ($count_only) { return $result['total']; } else { $search_ids = array(); if (is_array($result['matches']) && count($result['matches'])) { foreach ($result['matches'] as $res) { $search_ids[] = $res['attrs']['search_id']; } } return $search_ids; } }
function __f__47beb649a03e6ac0faaad715cb98b843($results, $pagination, $total, $member) { $_ips___x_retval = ''; foreach ($this->registry->getApplications() as $app) { $_ips___x_retval .= "\n\t\t" . (IPSSearchIndex::appIsSearchable($app['app_directory']) && !in_array($app['app_directory'], array('core', 'members')) ? "" . ($this->request['search_app'] == $app['app_directory'] ? "\n\t\t\t\t<li class='active'><strong>{$app['app_public_title']}</strong></li>\n\t\t\t" : "\t\t\t\t\n\t\t\t\t<li><a href='" . $this->registry->getClass('output')->formatUrl($this->registry->getClass('output')->buildUrl("app=core&module=search&do=user_posts&mid={$this->request['mid']}&search_filter_app[{$app['app_directory']}]=1&view_by_title={$this->request['view_by_title']}", 'public', ''), "", "") . "'>{$app['app_public_title']}</a></li>\n\t\t\t") . "" : "") . "\n\t\n"; } $_ips___x_retval .= ''; return $_ips___x_retval; }
/** * Parse a common search result * * @access private * @param array $r Search result * @param string $search_term Keywords searched for * @param bool $isVnc Is from view new content * @return array $search_result Search result for template */ private function _parseSearchResult($r, $search_term = '', $isVnc = false) { /* Forum stuff */ $sub = false; $r['_topic_array'] = $this->_topicArray; /* If basic search, strip the content */ IPSText::getTextClass('bbcode')->parse_wordwrap = 0; IPSText::getTextClass('bbcode')->parse_bbcode = 0; IPSText::getTextClass('bbcode')->strip_quotes = 1; IPSText::getTextClass('bbcode')->parsing_section = 'topics'; IPSText::getTextClass('bbcode')->parsing_mgroup = $r['member_group_id']; IPSText::getTextClass('bbcode')->parsing_mgroup_others = $r['mgroup_others']; $r['content'] = strip_tags(IPSText::getTextClass('bbcode')->stripAllTags($r['content'])); $r['content'] = str_replace(array('<br>', '<br />'), '', $r['content']); $r['content'] = trim(str_replace(array("\n\n\n", "\n\n"), "\n", str_replace("\r", '', $r['content']))); /* Highlight */ $r['content'] = IPSText::searchHighlight($this->_searchTruncate($r['content'], $search_term), $search_term); $r['content_title'] = (!$this->search_plugin->onlyPosts and $this->_getShowAsForum() === false) ? IPSText::searchHighlight($r['content_title'], $search_term) : $r['content_title']; /* Check to see if the display plugin is loaded */ if (!isset($this->search_plugin->display_plugins[$r['app']])) { $this->search_plugin->display_plugins[$r['app']] = IPSSearchIndex::getSearchDisplayPlugin($r['app']); $this->search_plugin->display_plugins[$r['app']]->search_plugin = $this->search_plugin; } /* Return the formatted result */ if (isset($this->search_plugin->display_plugins[$r['app']]) && is_object($this->search_plugin->display_plugins[$r['app']])) { $return = $this->search_plugin->display_plugins[$r['app']]->formatContent($r, $isVnc); if (is_array($return)) { $html = $return[0]; $sub = $return[1]; } else { $html = $return; } } else { $html = $this->registry->output->getTemplate('search')->searchRowGenericFormat($r); } return array('html' => $html, 'app' => $r['app'], 'type' => $r['type'], 'sub' => $sub); }
/** * Builds an array that can be used in build * * @access public * @param string $search_term * @param array $limit_clause The erray should be array( begin, end ) * @param string $sort_by Either relevance or date * @param string [$group_by] Field to group on * @param bool [$count_only] Set to true for a count(*) query * @param bool [$content_title_only] Set to true to only search titles * @return array */ private function _buildSearchQueryArray($search_term, $limit_clause, $sort_by, $group_by = '', $count_only = false, $content_title_only = false) { /* Do we only need to count results? */ if ($count_only) { if ($group_by) { $group_by = 'i.' . $group_by; } $search_query_array = array('select' => 'COUNT(*) as total_results', 'from' => array('search_index' => 'i'), 'where' => $this->_buildWhereStatement($search_term, $content_title_only), 'group' => $group_by, 'add_join' => array(array('from' => array('permission_index' => 'p'), 'where' => 'p.perm_type_id=i.type_id AND p.perm_type=i.type', 'type' => 'left'), array('from' => array('profile_friends' => 'friend'), 'where' => 'friend.friends_member_id=i.member_id AND friend.friends_friend_id=' . $this->memberData['member_id'], 'type' => 'left'))); } else { /* Sort By */ if (isset($sort_by) && in_array($sort_by, array('date', 'relevance', 'ascdate'))) { $_ord = strstr($sort_by, 'asc') ? 'ASC' : 'DESC'; $order = $sort_by == 'date' ? 'i.updated ' . $_ord : 'ranking' . $_ord; } else { $order = 'ranking DESC'; } /* If there is no search term, we need to force search by updated */ if (!$search_term) { $order = 'i.updated DESC'; } if ($group_by) { $group_by = 'i.' . $group_by; } if ($content_title_only) { $ranking_select = $search_term ? ", MATCH( i.content_title ) AGAINST( '{$search_term}' IN BOOLEAN MODE ) as ranking" : ''; } else { $ranking_select = $search_term ? ", MATCH( i.content, i.content_title ) AGAINST( '{$search_term}' IN BOOLEAN MODE ) as ranking" : ''; } /* Build the search query array */ $search_query_array = array('select' => "i.*{$ranking_select}", 'from' => array('search_index' => 'i'), 'where' => $this->_buildWhereStatement($search_term, $content_title_only), 'limit' => $limit_clause, 'group' => $group_by, 'order' => $order, 'add_join' => array(array('select' => 'p.perm_view', 'from' => array('permission_index' => 'p'), 'where' => 'p.perm_type_id=i.type_id AND p.perm_type=i.type', 'type' => 'left'), array('select' => 'm.members_display_name, m.member_group_id, m.mgroup_others', 'from' => array('members' => 'm'), 'where' => 'i.member_id=m.member_id', 'type' => 'left'), array('from' => array('profile_friends' => 'friend'), 'where' => 'friend.friends_member_id=i.member_id AND friend.friends_friend_id=' . $this->memberData['member_id'], 'type' => 'left'))); } /* Loop through all the search plugins and let them modify the search query */ foreach (ipsRegistry::$applications as $app) { if (IPSSearchIndex::appisSearchable($app['app_directory'])) { if (!isset($this->display_plugins[$app['app_directory']]) || !$this->display_plugins[$app['app_directory']]) { require_once IPSLib::getAppDir($app['app_directory']) . '/extensions/searchDisplay.php'; $_class = $app['app_directory'] . 'SearchDisplay'; $this->display_plugins[$app['app_directory']] = new $_class(); } if (method_exists($this->display_plugins[$app['app_directory']], 'modifySearchQuery')) { /* Get the modified query */ $new_query = $this->display_plugins[$app['app_directory']]->modifySearchQuery($search_query_array, $count_only); /* Simple check to prevent accidentaly breaking the query, clearly not fool proof :) */ $search_query_array = is_array($new_query) && count($new_query) ? $new_query : $search_query_array; } } } return $search_query_array; }