<?php
/************************************************************************
- * MXChange v0.2.1 Start: 12/03/2004 *
- * =============== Last change: 12/13/2004 *
+ * Mailer v0.2.1-FINAL Start: 12/03/2004 *
+ * =================== Last change: 12/13/2004 *
* *
* -------------------------------------------------------------------- *
- * File : theme-manager.php *
+ * File : theme manager.php *
* -------------------------------------------------------------------- *
* Short description : Theme manager *
* -------------------------------------------------------------------- *
// Create a selection box with installed and activated themes or all if admin
function generateThemeSelectionBox () {
// Init variables and fill them if set
- $what = '';
+ $what = getWhat();
$mod = getModule();
- if (isWhatSet()) {
- $what = getWhat();
- } // END - if
// Construction URL
- $formAction = "{?URL?}/modules.php?module=" . $mod;
+ $formAction = "{%url=modules.php?module=" . $mod;
if (!empty($what)) $formAction .= "&what=" . $what;
+ $formAction = '%}';
// Initialize array
$themesArray = array(
if (isAdmin()) $add = '';
// Select all themes we want
- $result = SQL_QUERY("SELECT `theme_path`, `theme_name` FROM `{?_MYSQL_PREFIX?}_themes`".$add." ORDER BY `theme_name` ASC", __FILE__, __LINE__);
+ $result = SQL_QUERY("SELECT
+ `theme_path`, `theme_name`
+FROM
+ `{?_MYSQL_PREFIX?}_themes`
+".$add."
+ORDER BY
+ `theme_name` ASC", __FILE__, __LINE__);
// Load all themes
while ($content = SQL_FETCHARRAY($result)) {
// Construct relative include file name
- $inc = sprintf("theme/%s/theme.php", SQL_ESCAPE($content['theme_path']));
+ $inc = sprintf("theme/%s/theme.php", secureString($content['theme_path']));
// Load it's theme.php file if found
if (isIncludeReadable($inc)) {
// Checks wether a theme is found in db
function ifThemeExists ($name) {
// Get theme and is it not nul?
- return (getThemeId($name) > 0);
+ return ((isExtensionActive('theme')) && (getThemeId($name) > 0));
}
// Checks if a theme is active
return $name;
}
-// @TODO Move this code block into a filter and register it with 'init'
-// Check if new theme is selcted
-if ((isPostRequestElementSet('new_theme')) && (postRequestElement('new_theme') != getCurrentTheme())) {
- // Set new theme for guests
- $newTheme = postRequestElement('new_theme');
+// Get current theme name
+function getActualTheme () {
+ // The default theme is 'default'... ;-)
+ $ret = 'default';
+
+ // Load default theme if not empty from configuration
+ if ((isConfigEntrySet('default_theme')) && (getConfig('default_theme') != '')) $ret = getConfig('default_theme');
+
+ if (!isSessionVariableSet('mxchange_theme')) {
+ // Set default theme
+ setTheme($ret);
+ } elseif ((isSessionVariableSet('mxchange_theme')) && (isExtensionInstalledAndNewer('sql_patches', '0.1.4'))) {
+ //die("<pre>".print_r($GLOBALS['cache_array']['themes'], true)."</pre>");
+ // Get theme from cookie
+ $ret = getSession('mxchange_theme');
+
+ // Is it valid?
+ if ((!isExtensionActive('theme')) || (getThemeId($ret) == '0')) {
+ // Fix it to default
+ $ret = 'default';
+ } // END - if
+ } elseif ((!isInstalled()) && ((isInstalling()) || (getOutputMode() == true)) && ((isGetRequestElementSet('theme')) || (isPostRequestElementSet('theme')))) {
+ // Prepare filename for checking
+ $themeFile = sprintf("theme/%s/theme.php", getRequestElement('theme'));
+
+ // Installation mode active
+ if ((isGetRequestElementSet('theme')) && (isIncludeReadable($theme))) {
+ // Set cookie from URL data
+ setTheme(getRequestElement('theme'));
+ } elseif (isIncludeReadable(sprintf("theme/%s/theme.php", secureString(postRequestElement('theme'))))) {
+ // Set cookie from posted data
+ setTheme(secureString(postRequestElement('theme')));
+ }
+
+ // Set return value
+ $ret = getSession('mxchange_theme');
+ } else {
+ // Invalid design, reset cookie
+ setTheme($ret);
+ }
- // Change to new theme
- setTheme($newTheme);
+ // Return theme value
+ return $ret;
+}
- // Remove current from array
- removeIncludeFromPool('theme', sprintf("theme/%s/theme.php", getCurrentTheme()));
+// Setter for theme in session
+function setTheme ($newTheme) {
+ setSession('mxchange_theme', $newTheme);
+}
+
+// Get id from theme
+function getThemeId ($name) {
+ // Default id
+ $id = '0';
+
+ // Is the cache entry there?
+ if (isset($GLOBALS['cache_array']['themes']['id'][$name])) {
+ // Get the version from cache
+ $id = $GLOBALS['cache_array']['themes']['id'][$name];
- // Add new theme
- addIncludeToPool('theme', sprintf("theme/%s/theme.php", $newTheme));
-} // END - if
+ // Count up
+ incrementStatsEntry('cache_hits');
+ } elseif (isExtensionInstalledAndNewer('cache', '0.1.8')) {
+ // Check if current theme is already imported or not
+ $result = SQL_QUERY_ESC("SELECT `id` FROM `{?_MYSQL_PREFIX?}_themes` WHERE `theme_path`='%s' LIMIT 1",
+ array($name), __FUNCTION__, __LINE__);
+
+ // Entry found?
+ if (SQL_NUMROWS($result) == 1) {
+ // Fetch data
+ list($id) = SQL_FETCHROW($result);
+ } // END - if
+
+ // Free result
+ SQL_FREERESULT($result);
+ }
+
+ // Return id
+ return $id;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// Only filter functions
+///////////////////////////////////////////////////////////////////////////////
+
+// Filter for generic handling of theme change
+function FILTER_HANDLE_THEME_CHANGE () {
+ // Check if new theme is selcted
+ if ((isPostRequestElementSet('new_theme')) && (postRequestElement('new_theme') != getCurrentTheme())) {
+ // Set new theme for guests
+ $newTheme = postRequestElement('new_theme');
+
+ // Change to new theme
+ setTheme($newTheme);
+
+ // Remove current from array
+ removeIncludeFromPool('theme', sprintf("theme/%s/theme.php", getCurrentTheme()));
+
+ // Add new theme
+ addIncludeToPool('theme', sprintf("theme/%s/theme.php", $newTheme));
+ } // END - if
+}
+
+// Filter for settings theme from user profile, must be executed only if FILTER_FETCH_USER_DATA() ran before
+function FILTER_SET_USERS_THEME () {
+ // Is the user data valid?
+ if (!isMember()) {
+ // Do only run for logged in members
+ debug_report_bug('Please only run this filter for logged in users.');
+ } // END - if
+
+ // Change to new theme
+ setTheme(getUserData('curr_theme'));
+}
// [EOF]
?>