本文整理汇总了PHP中loadSubTemplate函数的典型用法代码示例。如果您正苦于以下问题:PHP loadSubTemplate函数的具体用法?PHP loadSubTemplate怎么用?PHP loadSubTemplate使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了loadSubTemplate函数的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: RegbarWarning
function RegbarWarning()
{
global $context, $settings;
loadLanguage('smfhacks_languages/regbar-warning');
loadTemplate('smfhacks_templates/regbar-warning');
$context['html_headers'] .= "\n" . '<link rel="stylesheet" type="text/css" href="' . $settings['theme_url'] . '/smfhacks_css/regbar-warning.css" />';
loadSubTemplate('regbar_warning');
}
示例2: retrieveGlobalHFContent
function retrieveGlobalHFContent($placement)
{
global $context, $boarddir, $sourcedir, $global_hf, $modSettings;
if (!isset($_GET['xml']) && (!isset($_GET['action']) || $_GET['action'] != 'dlattach')) {
$global_hf = array('head' => un_htmlspecialchars(file_get_contents($boarddir . '/smfhacks_resources/global-hf-head.txt')), 'header' => un_htmlspecialchars(file_get_contents($boarddir . '/smfhacks_resources/global-hf-header.txt')), 'footer' => un_htmlspecialchars(file_get_contents($boarddir . '/smfhacks_resources/global-hf-footer.txt')));
if ($placement != 'load') {
if (!empty($modSettings['global_header_bbc'])) {
$global_hf['parsed']['header'] = parse_bbc($global_hf['header']);
}
if (!empty($modSettings['global_footer_bbc'])) {
$global_hf['parsed']['footer'] = parse_bbc($global_hf['footer']);
}
loadTemplate('smfhacks_templates/global-hf');
loadSubTemplate('global_hf' . $placement, true);
} elseif (!empty($global_hf['head'])) {
$context['html_headers'] .= "\n" . $global_hf['head'];
}
}
}
示例3: loadTheme
//.........这里部分代码省略.........
if ($context['user']['is_guest']) {
$context['user']['name'] =& $txt[28];
} else {
$context['user']['name'] =& $user_info['name'];
}
// Determine the current smiley set.
$user_info['smiley_set'] = !in_array($user_info['smiley_set'], explode(',', $modSettings['smiley_sets_known'])) && $user_info['smiley_set'] != 'none' || empty($modSettings['smiley_sets_enable']) ? !empty($settings['smiley_sets_default']) ? $settings['smiley_sets_default'] : $modSettings['smiley_sets_default'] : $user_info['smiley_set'];
$context['user']['smiley_set'] =& $user_info['smiley_set'];
// Some basic information...
if (!isset($context['html_headers'])) {
$context['html_headers'] = '';
}
$context['menu_separator'] = !empty($settings['use_image_buttons']) ? ' ' : ' | ';
$context['session_id'] =& $sc;
$context['forum_name'] =& $mbname;
$context['current_action'] = isset($_REQUEST['action']) ? $_REQUEST['action'] : null;
$context['current_subaction'] = isset($_REQUEST['sa']) ? $_REQUEST['sa'] : null;
if (isset($modSettings['load_average'])) {
$context['load_average'] = $modSettings['load_average'];
}
// This determines the server... not used in many places, except for login fixing.
$context['server'] = array('is_iis' => isset($_SERVER['SERVER_SOFTWARE']) && strpos($_SERVER['SERVER_SOFTWARE'], 'Microsoft-IIS') !== false, 'is_apache' => isset($_SERVER['SERVER_SOFTWARE']) && strpos($_SERVER['SERVER_SOFTWARE'], 'Apache') !== false, 'is_cgi' => isset($_SERVER['SERVER_SOFTWARE']) && strpos(php_sapi_name(), 'cgi') !== false, 'is_windows' => stristr(PHP_OS, 'WIN') !== false, 'iso_case_folding' => ord(strtolower(chr(138))) === 154, 'complex_preg_chars' => @version_compare(PHP_VERSION, '4.3.3') != -1);
// A bug in some versions of IIS under CGI (older ones) makes cookie setting not work with Location: headers.
$context['server']['needs_login_fix'] = $context['server']['is_cgi'];
// The following determines the user agent (browser) as best it can.
$context['browser'] = array('is_opera' => strpos($_SERVER['HTTP_USER_AGENT'], 'Opera') !== false, 'is_opera6' => strpos($_SERVER['HTTP_USER_AGENT'], 'Opera 6') !== false, 'is_opera7' => strpos($_SERVER['HTTP_USER_AGENT'], 'Opera 7') !== false || strpos($_SERVER['HTTP_USER_AGENT'], 'Opera/7') !== false, 'is_opera8' => strpos($_SERVER['HTTP_USER_AGENT'], 'Opera 8') !== false || strpos($_SERVER['HTTP_USER_AGENT'], 'Opera/8') !== false, 'is_ie4' => strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 4') !== false && strpos($_SERVER['HTTP_USER_AGENT'], 'WebTV') === false, 'is_safari' => strpos($_SERVER['HTTP_USER_AGENT'], 'Safari') !== false, 'is_mac_ie' => strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 5.') !== false && strpos($_SERVER['HTTP_USER_AGENT'], 'Mac') !== false, 'is_web_tv' => strpos($_SERVER['HTTP_USER_AGENT'], 'WebTV') !== false, 'is_konqueror' => strpos($_SERVER['HTTP_USER_AGENT'], 'Konqueror') !== false, 'is_firefox' => strpos($_SERVER['HTTP_USER_AGENT'], 'Firefox') !== false, 'is_firefox1' => strpos($_SERVER['HTTP_USER_AGENT'], 'Firefox/1.') !== false, 'is_firefox2' => strpos($_SERVER['HTTP_USER_AGENT'], 'Firefox/2.') !== false);
$context['browser']['is_gecko'] = strpos($_SERVER['HTTP_USER_AGENT'], 'Gecko') !== false && !$context['browser']['is_safari'] && !$context['browser']['is_konqueror'];
// Internet Explorer 5 and 6 are often "emulated".
$context['browser']['is_ie7'] = strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 7') !== false && !$context['browser']['is_opera'] && !$context['browser']['is_gecko'] && !$context['browser']['is_web_tv'];
$context['browser']['is_ie6'] = strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 6') !== false && !$context['browser']['is_opera'] && !$context['browser']['is_gecko'] && !$context['browser']['is_web_tv'];
$context['browser']['is_ie5.5'] = strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 5.5') !== false && !$context['browser']['is_opera'] && !$context['browser']['is_gecko'] && !$context['browser']['is_web_tv'];
$context['browser']['is_ie5'] = strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 5.0') !== false && !$context['browser']['is_opera'] && !$context['browser']['is_gecko'] && !$context['browser']['is_web_tv'];
$context['browser']['is_ie'] = $context['browser']['is_ie4'] || $context['browser']['is_ie5'] || $context['browser']['is_ie5.5'] || $context['browser']['is_ie6'] || $context['browser']['is_ie7'];
$context['browser']['needs_size_fix'] = ($context['browser']['is_ie5'] || $context['browser']['is_ie5.5'] || $context['browser']['is_ie4'] || $context['browser']['is_opera6']) && strpos($_SERVER['HTTP_USER_AGENT'], 'Mac') === false;
// This isn't meant to be reliable, it's just meant to catch most bots to prevent PHPSESSID from showing up.
$ci_user_agent = strtolower($_SERVER['HTTP_USER_AGENT']);
$context['browser']['possibly_robot'] = strpos($_SERVER['HTTP_USER_AGENT'], 'Mozilla') === false && strpos($_SERVER['HTTP_USER_AGENT'], 'Opera') === false || strpos($ci_user_agent, 'googlebot') !== false || strpos($ci_user_agent, 'slurp') !== false || strpos($ci_user_agent, 'crawl') !== false;
// Robots shouldn't be logging in or registering. So, they aren't a bot. Better to be wrong than sorry (or people won't be able to log in!), anyway.
if (isset($_REQUEST['action']) && in_array($_REQUEST['action'], array('login', 'login2', 'register')) || !$context['user']['is_guest']) {
$context['browser']['possibly_robot'] = false;
}
// Set the top level linktree up.
array_unshift($context['linktree'], array('url' => &$scripturl, 'name' => &$context['forum_name']));
$txt = array();
$simpleActions = array('findmember', 'helpadmin', 'printpage', 'quotefast', 'spellcheck');
// Wireless mode? Load up the wireless stuff.
if (WIRELESS) {
$context['template_layers'] = array(WIRELESS_PROTOCOL);
loadTemplate('Wireless');
loadLanguage('Wireless');
loadLanguage('index');
} elseif (isset($_REQUEST['xml'])) {
loadLanguage('index');
loadTemplate('Xml');
$context['template_layers'] = array();
} elseif (!empty($_REQUEST['action']) && in_array($_REQUEST['action'], $simpleActions)) {
loadLanguage('index');
$context['template_layers'] = array();
} else {
// Custom templates to load, or just default?
if (isset($settings['theme_templates'])) {
$templates = explode(',', $settings['theme_templates']);
} else {
$templates = array('index');
}
// Custom template layers?
if (isset($settings['theme_layers'])) {
$context['template_layers'] = explode(',', $settings['theme_layers']);
} else {
$context['template_layers'] = array('main');
}
// Load each template.... and attempt to load its associated language file.
foreach ($templates as $template) {
loadTemplate($template);
loadLanguage($template, '', false);
}
}
// Load the Modifications language file, always ;). (but don't sweat it if it doesn't exist.)
loadLanguage('Modifications', '', false);
// Initialize the theme.
loadSubTemplate('init', 'ignore');
if (isset($settings['use_default_images']) && $settings['use_default_images'] == 'always') {
$settings['theme_url'] = $settings['default_theme_url'];
$settings['images_url'] = $settings['default_images_url'];
$settings['theme_dir'] = $settings['default_theme_dir'];
}
// Set the character set from the template.
$context['character_set'] = empty($modSettings['global_character_set']) ? $txt['lang_character_set'] : $modSettings['global_character_set'];
$context['utf8'] = $context['character_set'] === 'UTF-8' && (strpos(strtolower(PHP_OS), 'win') === false || @version_compare(PHP_VERSION, '4.2.3') != -1);
$context['right_to_left'] = !empty($txt['lang_rtl']);
$context['tabindex'] = 1;
// Fix font size with HTML 4.01, etc.
if (isset($settings['doctype'])) {
$context['browser']['needs_size_fix'] |= $settings['doctype'] == 'html' && $context['browser']['is_ie6'];
}
// Compatibility.
if (!isset($settings['theme_version'])) {
$modSettings['memberCount'] = $modSettings['totalMembers'];
}
}
示例4: template_footer
function template_footer()
{
global $context, $settings, $modSettings, $time_start, $db_count;
// Show the load time? (only makes sense for the footer.)
$context['show_load_time'] = !empty($modSettings['timeLoadPageEnable']);
$context['load_time'] = round(array_sum(explode(' ', microtime())) - array_sum(explode(' ', $time_start)), 3);
$context['load_queries'] = $db_count;
if (isset($settings['use_default_images']) && $settings['use_default_images'] == 'defaults' && isset($settings['default_template'])) {
$settings['theme_url'] = $settings['actual_theme_url'];
$settings['images_url'] = $settings['actual_images_url'];
$settings['theme_dir'] = $settings['actual_theme_dir'];
}
foreach (array_reverse($context['template_layers']) as $layer) {
loadSubTemplate($layer . '_below', true);
}
}
示例5: template_footer
function template_footer()
{
global $context, $settings, $modSettings, $time_start, $db_count;
// Show the load time? (only makes sense for the footer.)
$context['show_load_time'] = !empty($modSettings['timeLoadPageEnable']);
$context['load_time'] = round(array_sum(explode(' ', microtime())) - array_sum(explode(' ', $time_start)), 3);
$context['load_queries'] = $db_count;
if (isset($settings['use_default_images']) && $settings['use_default_images'] == 'defaults' && isset($settings['default_template'])) {
$settings['theme_url'] = $settings['actual_theme_url'];
$settings['images_url'] = $settings['actual_images_url'];
$settings['theme_dir'] = $settings['actual_theme_dir'];
}
foreach (array_reverse($context['template_layers']) as $layer) {
loadSubTemplate($layer . '_below', true);
}
// Do not remove hard-coded text - it's in here so users cannot change the text easily. (as if it were in language file)
if (!theme_copyright(true) && !empty($context['template_layers']) && SMF !== 'SSI' && !WIRELESS) {
// DO NOT MODIFY THIS SECTION. DO NOT REMOVE YOUR COPYRIGHT.
// DOING SO VOIDS YOUR LICENSE AND IS ILLEGAL.
echo '
<div style="text-align: center !important; display: block !important; visibility: visible !important; font-size: large !important; font-weight: bold; color: black !important; background-color: white !important;">
Sorry, the copyright must be in the template.<br />
Please notify this forum\'s administrator that this site is missing the copyright message for <a href="http://www.simplemachines.org/" style="color: black !important; font-size: large !important;">SMF</a> so they can rectify the situation. Display of copyright is a <a href="http://www.simplemachines.org/about/license.php" style="color: red;">legal requirement</a>. For more information on this please visit the <a href="http://www.simplemachines.org">Simple Machines</a> website.', empty($context['user']['is_admin']) ? '' : '<br />
Not sure why this message is appearing? <a href="http://www.simplemachines.org/redirect/index.php?copyright_error">Take a look at some common causes.</a>', '
</div>';
log_error('Copyright removed!!');
}
}
示例6: loadTheme
//.........这里部分代码省略.........
if (WIRELESS) {
$context['template_layers'] = array(WIRELESS_PROTOCOL);
loadTemplate('Wireless');
loadLanguage('Wireless+index+Modifications');
} elseif (isset($_REQUEST['xml'])) {
loadLanguage('index+Modifications');
loadTemplate('Xml');
$context['template_layers'] = array();
} elseif (!empty($_REQUEST['action']) && in_array($_REQUEST['action'], $simpleActions)) {
loadLanguage('index+Modifications');
$context['template_layers'] = array();
} else {
// Custom templates to load, or just default?
if (isset($settings['theme_templates'])) {
$templates = explode(',', $settings['theme_templates']);
} else {
$templates = array('index');
}
// Load each template...
foreach ($templates as $template) {
loadTemplate($template);
}
// ...and attempt to load their associated language files.
$required_files = implode('+', array_merge($templates, array('Modifications')));
loadLanguage($required_files, '', false);
// Custom template layers?
if (isset($settings['theme_layers'])) {
$context['template_layers'] = explode(',', $settings['theme_layers']);
} else {
$context['template_layers'] = array('html', 'body');
}
}
// Initialize the theme.
loadSubTemplate('init', 'ignore');
// Load the compatibility stylesheet if the theme hasn't been updated for 2.0 RC2 (yet).
if (isset($settings['theme_version']) && (version_compare($settings['theme_version'], '2.0 RC2', '<') || strpos($settings['theme_version'], '2.0 Beta') !== false)) {
loadTemplate(false, 'compat');
}
// Guests may still need a name.
if ($context['user']['is_guest'] && empty($context['user']['name'])) {
$context['user']['name'] = $txt['guest_title'];
}
// Any theme-related strings that need to be loaded?
if (!empty($settings['require_theme_strings'])) {
loadLanguage('ThemeStrings', '', false);
}
// We allow theme variants, because we're cool.
$context['theme_variant'] = '';
$context['theme_variant_url'] = '';
if (!empty($settings['theme_variants'])) {
// Overriding - for previews and that ilk.
if (!empty($_REQUEST['variant'])) {
$_SESSION['id_variant'] = $_REQUEST['variant'];
}
// User selection?
if (empty($settings['disable_user_variant']) || allowedTo('admin_forum')) {
$context['theme_variant'] = !empty($_SESSION['id_variant']) ? $_SESSION['id_variant'] : (!empty($options['theme_variant']) ? $options['theme_variant'] : '');
}
// If not a user variant, select the default.
if ($context['theme_variant'] == '' || !in_array($context['theme_variant'], $settings['theme_variants'])) {
$context['theme_variant'] = !empty($settings['default_variant']) && in_array($settings['default_variant'], $settings['theme_variants']) ? $settings['default_variant'] : $settings['theme_variants'][0];
}
// Do this to keep things easier in the templates.
$context['theme_variant'] = '_' . $context['theme_variant'];
$context['theme_variant_url'] = $context['theme_variant'] . '/';
}
示例7: SetThemeSettings
function SetThemeSettings()
{
global $txt, $context, $settings, $modSettings, $sourcedir, $smcFunc;
if (empty($_GET['th']) && empty($_GET['id'])) {
return ThemeAdmin();
}
$_GET['th'] = isset($_GET['th']) ? (int) $_GET['th'] : (int) $_GET['id'];
// Select the best fitting tab.
$context[$context['admin_menu_name']]['current_subsection'] = 'list';
loadLanguage('Admin');
isAllowedTo('admin_forum');
// Validate inputs/user.
if (empty($_GET['th'])) {
fatal_lang_error('no_theme', false);
}
// Fetch the smiley sets...
$sets = explode(',', 'none,' . $modSettings['smiley_sets_known']);
$set_names = explode("\n", $txt['smileys_none'] . "\n" . $modSettings['smiley_sets_names']);
$context['smiley_sets'] = array('' => $txt['smileys_no_default']);
foreach ($sets as $i => $set) {
$context['smiley_sets'][$set] = htmlspecialchars($set_names[$i]);
}
$old_id = $settings['theme_id'];
$old_settings = $settings;
loadTheme($_GET['th'], false);
// Sadly we really do need to init the template.
loadSubTemplate('init', 'ignore');
// Also load the actual themes language file - in case of special settings.
loadLanguage('Settings', '', true, true);
// Let the theme take care of the settings.
loadTemplate('Settings');
loadSubTemplate('settings');
// Submitting!
if (isset($_POST['submit'])) {
checkSession();
if (empty($_POST['options'])) {
$_POST['options'] = array();
}
if (empty($_POST['default_options'])) {
$_POST['default_options'] = array();
}
// Make sure items are cast correctly.
foreach ($context['theme_settings'] as $item) {
// Disregard this item if this is just a separator.
if (!is_array($item)) {
continue;
}
foreach (array('options', 'default_options') as $option) {
if (!isset($_POST[$option][$item['id']])) {
continue;
} elseif (empty($item['type'])) {
$_POST[$option][$item['id']] = $_POST[$option][$item['id']] ? 1 : 0;
} elseif ($item['type'] == 'number') {
$_POST[$option][$item['id']] = (int) $_POST[$option][$item['id']];
}
}
}
// Set up the sql query.
$inserts = array();
foreach ($_POST['options'] as $opt => $val) {
$inserts[] = array(0, $_GET['th'], $opt, is_array($val) ? implode(',', $val) : $val);
}
foreach ($_POST['default_options'] as $opt => $val) {
$inserts[] = array(0, 1, $opt, is_array($val) ? implode(',', $val) : $val);
}
// If we're actually inserting something..
if (!empty($inserts)) {
$smcFunc['db_insert']('replace', '{db_prefix}themes', array('id_member' => 'int', 'id_theme' => 'int', 'variable' => 'string-255', 'value' => 'string-65534'), $inserts, array('id_member', 'id_theme', 'variable'));
}
cache_put_data('theme_settings-' . $_GET['th'], null, 90);
cache_put_data('theme_settings-1', null, 90);
// Invalidate the cache.
updateSettings(array('settings_updated' => time()));
redirectexit('action=admin;area=theme;sa=settings;th=' . $_GET['th'] . ';' . $context['session_var'] . '=' . $context['session_id']);
}
$context['sub_template'] = 'set_settings';
$context['page_title'] = $txt['theme_settings'];
foreach ($settings as $setting => $dummy) {
if (!in_array($setting, array('theme_url', 'theme_dir', 'images_url', 'template_dirs'))) {
$settings[$setting] = htmlspecialchars__recursive($settings[$setting]);
}
}
$context['settings'] = $context['theme_settings'];
$context['theme_settings'] = $settings;
foreach ($context['settings'] as $i => $setting) {
// Separators are dummies, so leave them alone.
if (!is_array($setting)) {
continue;
}
if (!isset($setting['type']) || $setting['type'] == 'bool') {
$context['settings'][$i]['type'] = 'checkbox';
} elseif ($setting['type'] == 'int' || $setting['type'] == 'integer') {
$context['settings'][$i]['type'] = 'number';
} elseif ($setting['type'] == 'string') {
$context['settings'][$i]['type'] = 'text';
}
if (isset($setting['options'])) {
$context['settings'][$i]['type'] = 'list';
}
$context['settings'][$i]['value'] = !isset($settings[$setting['id']]) ? '' : $settings[$setting['id']];
//.........这里部分代码省略.........
示例8: setup_fatal_error_context
function setup_fatal_error_context($error_message)
{
global $context, $txt, $ssi_on_error_method;
static $level = 0;
// Attempt to prevent a recursive loop.
++$level;
if ($level > 1) {
return false;
}
// Maybe they came from dlattach or similar?
if (SMF != 'SSI' && empty($context['theme_loaded'])) {
loadTheme();
}
// Don't bother indexing errors mate...
$context['robot_no_index'] = true;
if (!isset($context['error_title'])) {
$context['error_title'] = $txt['error_occured'];
}
$context['error_message'] = isset($context['error_message']) ? $context['error_message'] : $error_message;
if (empty($context['page_title'])) {
$context['page_title'] = $context['error_title'];
}
EoS_Smarty::resetTemplates();
// discard all templates loaded so far. We don't need them any longer
EoS_Smarty::loadTemplate('errors');
// If this is SSI, what do they want us to do?
if (SMF == 'SSI') {
if (!empty($ssi_on_error_method) && $ssi_on_error_method !== true && is_callable($ssi_on_error_method)) {
call_user_func($ssi_on_error_method);
} elseif (empty($ssi_on_error_method) || $ssi_on_error_method !== true) {
loadSubTemplate('fatal_error');
}
// No layers?
if (empty($ssi_on_error_method) || $ssi_on_error_method !== true) {
exit;
}
}
// We want whatever for the header, and a footer. (footer includes sub template!)
obExit(null, true, false, true);
/* DO NOT IGNORE:
If you are creating a bridge to SMF or modifying this function, you MUST
make ABSOLUTELY SURE that this function quits and DOES NOT RETURN TO NORMAL
PROGRAM FLOW. Otherwise, security error messages will not be shown, and
your forum will be in a very easily hackable state.
*/
trigger_error('Hacking attempt...', E_USER_ERROR);
}
示例9: setup_fatal_error_context
/**
* It is called by fatal_error() and fatal_lang_error().
*
* @uses Errors template, fatal_error sub template
* @param string $error_message
* @param string $error_code string or int code
*/
function setup_fatal_error_context($error_message, $error_code)
{
global $context, $txt, $ssi_on_error_method;
static $level = 0;
// Attempt to prevent a recursive loop.
++$level;
if ($level > 1) {
return false;
}
// Maybe they came from dlattach or similar?
if (ELK != 'SSI' && empty($context['theme_loaded'])) {
loadTheme();
}
// Don't bother indexing errors mate...
$context['robot_no_index'] = true;
if (!isset($context['error_title'])) {
$context['error_title'] = $txt['error_occurred'];
}
$context['error_message'] = isset($context['error_message']) ? $context['error_message'] : $error_message;
$context['error_code'] = isset($error_code) ? 'id="' . htmlspecialchars($error_code) . '" ' : '';
if (empty($context['page_title'])) {
$context['page_title'] = $context['error_title'];
}
// Load the template and set the sub template.
loadTemplate('Errors');
$context['sub_template'] = 'fatal_error';
// If this is SSI, what do they want us to do?
if (ELK == 'SSI') {
if (!empty($ssi_on_error_method) && $ssi_on_error_method !== true && is_callable($ssi_on_error_method)) {
$ssi_on_error_method();
} elseif (empty($ssi_on_error_method) || $ssi_on_error_method !== true) {
loadSubTemplate('fatal_error');
}
// No layers?
if (empty($ssi_on_error_method) || $ssi_on_error_method !== true) {
exit;
}
}
// We want whatever for the header, and a footer. (footer includes sub template!)
obExit(null, true, false, true);
/* DO NOT IGNORE:
If you are creating a bridge or modifying this function, you MUST
make ABSOLUTELY SURE that this function quits and DOES NOT RETURN TO NORMAL
PROGRAM FLOW. Otherwise, security error messages will not be shown, and
your forum will be in a very easily hackable state.
*/
trigger_error('Hacking attempt...', E_USER_ERROR);
}
示例10: action_setthemesettings
/**
* Administrative global settings.
*
* What it does:
* - Saves and requests global theme settings. ($settings)
* - Loads the Admin language file.
* - Calls action_admin() if no theme is specified. (the theme center.)
* - Requires admin_forum permission.
* - Accessed with ?action=admin;area=theme;sa=list&th=xx.
*/
public function action_setthemesettings()
{
global $txt, $context, $settings, $modSettings;
require_once SUBSDIR . '/Themes.subs.php';
// Nothing chosen, back to the start you go
if (empty($_GET['th']) && empty($_GET['id'])) {
return $this->action_admin();
}
// The theme's ID is needed
$theme = isset($_GET['th']) ? (int) $_GET['th'] : (int) $_GET['id'];
// Validate inputs/user.
if (empty($theme)) {
fatal_lang_error('no_theme', false);
}
// Select the best fitting tab.
$context[$context['admin_menu_name']]['current_subsection'] = 'list';
loadLanguage('Admin');
// Fetch the smiley sets...
$sets = explode(',', 'none,' . $modSettings['smiley_sets_known']);
$set_names = explode("\n", $txt['smileys_none'] . "\n" . $modSettings['smiley_sets_names']);
$context['smiley_sets'] = array('' => $txt['smileys_no_default']);
foreach ($sets as $i => $set) {
$context['smiley_sets'][$set] = htmlspecialchars($set_names[$i], ENT_COMPAT, 'UTF-8');
}
$old_id = $settings['theme_id'];
$old_settings = $settings;
loadTheme($theme, false);
// Also load the actual themes language file - in case of special settings.
loadLanguage('Settings', '', true, true);
// And the custom language strings...
loadLanguage('ThemeStrings', '', false, true);
// Let the theme take care of the settings.
loadTemplate('Settings');
loadSubTemplate('settings');
// Load the variants separately...
$settings['theme_variants'] = array();
if (file_exists($settings['theme_dir'] . '/index.template.php')) {
$file_contents = implode("\n", file($settings['theme_dir'] . '/index.template.php'));
if (preg_match('~\'theme_variants\'\\s*=>(.+?\\)),$~sm', $file_contents, $matches)) {
eval('global $settings; $settings[\'theme_variants\'] = ' . $matches[1] . ';');
}
call_integration_hook('integrate_init_theme', array($theme, &$settings));
}
// Submitting!
if (isset($_POST['save'])) {
// Allowed?
checkSession();
validateToken('admin-sts');
if (empty($_POST['options'])) {
$_POST['options'] = array();
}
if (empty($_POST['default_options'])) {
$_POST['default_options'] = array();
}
// Make sure items are cast correctly.
foreach ($context['theme_settings'] as $item) {
// Unwatch this item if this is just a separator.
if (!is_array($item)) {
continue;
}
// Clean them up for the database
foreach (array('options', 'default_options') as $option) {
if (!isset($_POST[$option][$item['id']])) {
continue;
} elseif (empty($item['type'])) {
$_POST[$option][$item['id']] = $_POST[$option][$item['id']] ? 1 : 0;
} elseif ($item['type'] == 'number') {
$_POST[$option][$item['id']] = (int) $_POST[$option][$item['id']];
}
}
}
// Set up the sql query.
$inserts = array();
foreach ($_POST['options'] as $opt => $val) {
$inserts[] = array($theme, 0, $opt, is_array($val) ? implode(',', $val) : $val);
}
foreach ($_POST['default_options'] as $opt => $val) {
$inserts[] = array(1, 0, $opt, is_array($val) ? implode(',', $val) : $val);
}
// If we're actually inserting something..
if (!empty($inserts)) {
updateThemeOptions($inserts);
}
// Clear and Invalidate the cache.
cache_put_data('theme_settings-' . $theme, null, 90);
cache_put_data('theme_settings-1', null, 90);
updateSettings(array('settings_updated' => time()));
redirectexit('action=admin;area=theme;sa=list;th=' . $theme . ';' . $context['session_var'] . '=' . $context['session_id']);
}
$context['sub_template'] = 'set_settings';
//.........这里部分代码省略.........
示例11: SetThemeSettings
function SetThemeSettings()
{
global $txt, $sc, $context, $settings, $db_prefix, $modSettings;
if (empty($_GET['th']) && empty($_GET['id'])) {
return ThemeAdmin();
}
$_GET['th'] = isset($_GET['th']) ? (int) $_GET['th'] : (int) $_GET['id'];
// Select the best fitting tab.
$context['admin_tabs']['tabs']['list']['is_selected'] = true;
loadLanguage('Admin');
isAllowedTo('admin_forum');
// Just for navigation, show some nice bar on the left.
adminIndex($settings['theme_id'] == $_GET['th'] ? 'edit_theme_settings' : 'manage_themes');
// Validate inputs/user.
if (empty($_GET['th'])) {
fatal_lang_error('theme3', false);
}
// Submitting!
if (isset($_POST['submit'])) {
checkSession();
if (empty($_POST['options'])) {
$_POST['options'] = array();
}
if (empty($_POST['default_options'])) {
$_POST['default_options'] = array();
}
// Set up the sql query.
$setString = '';
foreach ($_POST['options'] as $opt => $val) {
$setString .= "\n\t\t\t\t(0, {$_GET['th']}, SUBSTRING('{$opt}', 1, 255), SUBSTRING('" . (is_array($val) ? implode(',', $val) : $val) . "', 1, 65534)),";
}
foreach ($_POST['default_options'] as $opt => $val) {
$setString .= "\n\t\t\t\t(0, 1, SUBSTRING('{$opt}', 1, 255), SUBSTRING('" . (is_array($val) ? implode(',', $val) : $val) . "', 1, 65534)),";
}
// If we're actually inserting something..
if ($setString != '') {
// Get rid of the last comma.
$setString = substr($setString, 0, -1);
db_query("\n\t\t\t\tREPLACE INTO {$db_prefix}themes\n\t\t\t\t\t(ID_MEMBER, ID_THEME, variable, value)\n\t\t\t\tVALUES {$setString}", __FILE__, __LINE__);
}
cache_put_data('theme_settings-' . $_GET['th'], null, 90);
cache_put_data('theme_settings-1', null, 90);
redirectexit('action=theme;sa=settings;th=' . $_GET['th'] . ';sesc=' . $sc);
}
checkSession('get');
// Fetch the smiley sets...
$sets = explode(',', 'none,' . $modSettings['smiley_sets_known']);
$set_names = explode("\n", $txt['smileys_none'] . "\n" . $modSettings['smiley_sets_names']);
$context['smiley_sets'] = array('' => $txt['smileys_no_default']);
foreach ($sets as $i => $set) {
$context['smiley_sets'][$set] = $set_names[$i];
}
$old_id = $settings['theme_id'];
$old_settings = $settings;
loadTheme($_GET['th'], false);
// Let the theme take care of the settings.
loadTemplate('Settings');
loadSubTemplate('settings');
$context['sub_template'] = 'set_settings';
$context['page_title'] = $txt['theme4'];
foreach ($settings as $setting => $dummy) {
if (!in_array($setting, array('theme_url', 'theme_dir', 'images_url'))) {
$settings[$setting] = htmlspecialchars($settings[$setting]);
}
}
$context['settings'] = $context['theme_settings'];
$context['theme_settings'] = $settings;
foreach ($context['settings'] as $i => $setting) {
if (!isset($setting['type']) || $setting['type'] == 'bool') {
$context['settings'][$i]['type'] = 'checkbox';
} elseif ($setting['type'] == 'int' || $setting['type'] == 'integer') {
$context['settings'][$i]['type'] = 'number';
} elseif ($setting['type'] == 'string') {
$context['settings'][$i]['type'] = 'text';
}
if (isset($setting['options'])) {
$context['settings'][$i]['type'] = 'list';
}
$context['settings'][$i]['value'] = !isset($settings[$setting['id']]) ? '' : $settings[$setting['id']];
}
// Restore the current theme.
loadTheme($old_id, false);
$settings = $old_settings;
loadTemplate('Themes');
}
示例12: template_footer
function template_footer()
{
global $context, $settings, $modSettings, $time_start, $db_count;
// Show the load time? (only makes sense for the footer.)
$context['show_load_time'] = !empty($modSettings['timeLoadPageEnable']);
$context['load_time'] = round(array_sum(explode(' ', microtime())) - array_sum(explode(' ', $time_start)), 3);
$context['load_queries'] = $db_count;
if (isset($settings['use_default_images']) && $settings['use_default_images'] == 'defaults' && isset($settings['default_template'])) {
$settings['theme_url'] = $settings['actual_theme_url'];
$settings['images_url'] = $settings['actual_images_url'];
$settings['theme_dir'] = $settings['actual_theme_dir'];
}
foreach (array_reverse($context['template_layers']) as $layer) {
//-- SMFHacks.com; Global Headers and Footers
if ($layer == 'body' && (empty($context['uninstalling']) && (!isset($_GET['package']) || !stripos($_GET['package'], 'Global-Headers-and-Footers')))) {
global $sourcedir;
require_once $sourcedir . '/smfhacks_source/global-hf.php';
retrieveGlobalHFContent('_below');
}
// End SMFHacks.com; Global Headers and Footers --//
loadSubTemplate($layer . '_below', true);
}
}
示例13: template_footer
/**
* The template footer
*/
function template_footer()
{
global $context, $settings, $modSettings, $time_start, $db_count;
// Show the load time? (only makes sense for the footer.)
$context['show_load_time'] = !empty($modSettings['timeLoadPageEnable']);
$context['load_time'] = round(microtime(true) - $time_start, 3);
$context['load_queries'] = $db_count;
if (isset($settings['use_default_images']) && $settings['use_default_images'] == 'defaults' && isset($settings['default_template'])) {
$settings['theme_url'] = $settings['actual_theme_url'];
$settings['images_url'] = $settings['actual_images_url'];
$settings['theme_dir'] = $settings['actual_theme_dir'];
}
foreach (Template_Layers::getInstance()->reverseLayers() as $layer) {
loadSubTemplate($layer . '_below', 'ignore');
}
}
示例14: template_footer
function template_footer()
{
global $context, $settings, $modSettings;
// Show the load time? (only makes sense for the footer.)
$context['show_load_time'] = !empty($modSettings['timeLoadPageEnable']);
if (isset($settings['use_default_images']) && $settings['use_default_images'] == 'defaults' && isset($settings['default_template'])) {
$settings['theme_url'] = $settings['actual_theme_url'];
$settings['images_url'] = $settings['actual_images_url'];
$settings['theme_dir'] = $settings['actual_theme_dir'];
}
foreach (array_reverse($context['template_layers']) as $layer) {
loadSubTemplate($layer . '_below', true);
}
}