From 061da44a9222da869a0c2c6291c8de2bc275ff93 Mon Sep 17 00:00:00 2001 From: Sebastian Mendel Date: Tue, 29 Nov 2005 12:15:42 +0000 Subject: [PATCH] added some functionality --- libraries/Theme.class.php | 112 +++++++++++++++++++++++---- libraries/Theme_Manager.class.php | 124 +++++++++++++++--------------- 2 files changed, 161 insertions(+), 75 deletions(-) diff --git a/libraries/Theme.class.php b/libraries/Theme.class.php index ffa03cd93..1bb289194 100644 --- a/libraries/Theme.class.php +++ b/libraries/Theme.class.php @@ -7,31 +7,36 @@ class PMA_Theme { * @var string version */ var $version = '0.0.0.0'; - + /** * @var string name */ var $name = ''; - + /** * @var string id */ var $id = ''; - + /** * @var string */ var $path = ''; - + /** * @var string */ var $img_path = ''; - + + /** + * @var array valid css types + */ + var $types = array( 'left', 'right', 'print' ); + /** * returns theme object loaded from given folder * or false if theme is invalid - * + * * @static * @param string path to theme * @return object PMA_Theme @@ -40,16 +45,16 @@ class PMA_Theme { if ( ! file_exists( $folder . '/info.inc.php' ) ) { return false; } - + @include( $folder . '/info.inc.php' ); // did it set correctly? if ( ! isset( $theme_name ) ) { return false; } - + $theme = new PMA_Theme(); - + $theme->setPath( $folder ); if ( isset( $theme_full_version ) ) { @@ -58,38 +63,80 @@ class PMA_Theme { $theme->setVersion( $theme_generation . '.' . $theme_version ); } $theme->setName( $theme_name ); - + if ( is_dir( $theme->getPath() . 'img/' ) ) { $theme->setImgPath( $theme->getPath() . 'img/' ); } elseif ( is_dir( $GLOBALS['cfg']['ThemePath'] . '/original/img/' ) ) { $theme->setImgPath( $GLOBALS['cfg']['ThemePath'] . '/original/img/' ); } else { - $GLOBALS['PMA_errors'][] = + $GLOBALS['PMA_errors'][] = sprintf( $GLOBALS['strThemeNoValidImgPath'], $theme_name ); trigger_error( sprintf( $GLOBALS['strThemeNoValidImgPath'], $theme_name ), E_USER_WARNING ); } - + return $theme; } - + + /** + * returns path to theme + * @uses $this->$path as return value + * @return string $path path to theme + */ function getPath() { return $this->path; } - + + /** + * returns layout file + * + * @return string layout file + */ + function getLayoutFile() { + return $this->getPath() . '/layout.inc.php'; + } + + /** + * set path to theme + * @uses $this->$path to set it + * @param string $path path to theme + */ function setPath( $path ) { $this->path = trim( $path ); } /** * sets version + * @uses $this->version * @param string new version */ function setVersion( $version ) { $this->version = trim( $version ); } - + + /** + * returns version + * @uses $this->version + * @return string version + */ + function getVersion() { + return $this->version; + } + + /** + * checks theme version agaisnt $version + * returns true if theme version is equal or higher to $version + * + * @uses version_compare() + * @uses $this->getVersion() + * @param string $version version to compare to + * @return boolean + */ + function checkVersion( $version ) { + return version_compare( $this->getVersion(), $version, 'lt' ); + } + /** * sets name * @param string $name new name @@ -129,6 +176,41 @@ class PMA_Theme { function getImgPath() { return $this->img_path; } + + /** + * load css (send to stdout, normaly the browser) + * + * @uses $this->getPath() + * @uses $this->types + * @uses PMA_SQP_buildCssData() + * @uses file_exists() + * @uses in_array() + * @param string $type left, right or print + */ + function loadCss( &$type ) { + if ( empty( $type ) || ! in_array( $type, $this->types ) ) { + $type = 'left'; + } + + if ( $type == 'right' ) { + echo PMA_SQP_buildCssData(); + } + + $_css_file = $this->getPath() + . '/css/theme_' . $type . '.css.php'; + + if ( file_exists( $_css_file ) ) { + if ( $GLOBALS['text_dir'] === 'ltr' ) { + $right = 'right'; + $left = 'left'; + } else { + $right = 'left'; + $left = 'right'; + } + + include( $_css_file ); + } + } } ?> \ No newline at end of file diff --git a/libraries/Theme_Manager.class.php b/libraries/Theme_Manager.class.php index e8c5c0fc2..e2a92fdea 100644 --- a/libraries/Theme_Manager.class.php +++ b/libraries/Theme_Manager.class.php @@ -5,48 +5,48 @@ require_once('libraries/Theme.class.php'); class PMA_Theme_Manager { - + /** * @var string path to theme folder */ var $themes_path; - + /** * @var array available themes */ var $themes = array(); - + /** * @var string cookie name */ var $cookie_name = 'pma_theme'; - + /** * @var boolean */ var $per_server = false; - + /** * @var string name of active theme */ var $active_theme = ''; - + /** * @var object PMA_Theme active theme */ var $theme = NULL; - + function __construct() { $this->themes_path = trim( $GLOBALS['cfg']['ThemePath'] ) ; $this->per_server = (bool) $GLOBALS['cfg']['ThemePerServer']; $this->theme = new PMA_Theme; - + if ( ! $this->_checkThemeFolder( $this->themes_path ) ) { return; } - + $this->loadThemes( $this->themes_path ); - + if ( ! $this->checkTheme( $GLOBALS['cfg']['ThemeDefault'] ) ) { $GLOBALS['PMA_errors'][] = sprintf( $GLOBALS['strThemeDefaultNotFound'], $GLOBALS['cfg']['ThemeDefault'] ); @@ -56,9 +56,9 @@ class PMA_Theme_Manager { E_USER_WARNING ); $GLOBALS['cfg']['ThemeDefault'] = false; } - + $this->theme_default = $GLOBALS['cfg']['ThemeDefault']; - + // check if user have a theme cookie if ( ! $this->getThemeCookie() || ! $this->setActiveTheme( $this->getThemeCookie() ) ) { @@ -69,7 +69,7 @@ class PMA_Theme_Manager { } } } - + function setActiveTheme( $theme = NULL ) { if ( ! $this->checkTheme( $theme ) ) { $GLOBALS['PMA_errors'][] = sprintf( $GLOBALS['strThemeNotFound'], @@ -79,12 +79,13 @@ class PMA_Theme_Manager { E_USER_WARNING ); return false; } - + $this->active_theme = $theme; $this->theme = $this->themes[$theme]; - - $this->setThemeCookie(); - + + // need to set later + //$this->setThemeCookie(); + return true; } @@ -99,50 +100,49 @@ class PMA_Theme_Manager { return $this->cookie_name; } } - + + /** + * returns name of theme stored in the cookie + * @return string theme name from cookie + */ function getThemeCookie() { if ( isset( $_COOKIE[$this->getThemeCookieName()] ) ) { return $_COOKIE[$this->getThemeCookieName()]; } - + return false; } - + /** * save theme in cookie + * + * @uses PMA_setCookie(); + * @uses PMA_Theme_Manager::getThemeCookieName() + * @uses PMA_Theme_Manager::$theme + * @uses PMA_Theme_Manager::$theme_default + * @uses PMA_Theme::getId() */ function setThemeCookie() { - if ( $this->theme_default === $this->theme->getId() ) { - // remove cookie - setcookie( $this->getThemeCookieName(), $this->theme->getId(), - time() - 3600, $GLOBALS['cookie_path'], '', $GLOBALS['is_https'] ); - return true; - } - - if ( $this->getThemeCookie() === $this->theme->getId() ) { - return true; - } - - setcookie( $this->getThemeCookieName(), $this->theme->getId(), - time() + 60*60*24*30, $GLOBALS['cookie_path'], '', $GLOBALS['is_https'] ); + PMA_setCookie( $this->getThemeCookieName(), $this->theme->id, + $this->theme_default ); return true; } - + /** * old PHP 4 constructor */ function PMA_Theme_Manager() { $this->__construct(); } - + /** * @private * @param string $folder - * @return boolean + * @return boolean */ /*private*/ function _checkThemeFolder( $folder ) { if ( ! is_dir( $folder ) ) { - $GLOBALS['PMA_errors'][] = + $GLOBALS['PMA_errors'][] = sprintf( $GLOBALS['strThemePathNotFound'], $folder ); trigger_error( @@ -151,16 +151,16 @@ class PMA_Theme_Manager { E_USER_WARNING ); return false; } - + return true; } - + /** * read all themes */ function loadThemes( $folder ) { $this->themes = array(); - + if ( $handleThemes = opendir( $folder ) ) { // check for themes directory while (FALSE !== ($PMA_Theme = readdir($handleThemes))) { @@ -174,49 +174,53 @@ class PMA_Theme_Manager { } else { return false; } // end check for themes directory - + ksort( $this->themes ); } - + function checkTheme( $theme ) { if ( ! array_key_exists( $theme, $this->themes ) ) { return false; } - + return true; } - + function getHtmlSelectBox( $form = true ) { + $select_box = ''; + if ( $form ) { - echo '
'; - echo PMA_generate_common_hidden_inputs(); + $select_box .= PMA_generate_common_hidden_inputs(); } - + $theme_selected = FALSE; $theme_preview_path= './themes.php'; $theme_preview_href = ''; - echo $theme_preview_href . $GLOBALS['strTheme'] . ':' . "\n"; - - echo ''; foreach ( $this->themes as $each_theme_id => $each_theme ) { - echo ''; + $select_box .= '>' . htmlspecialchars( $each_theme->getName() ) . ''; } - echo ''; + $select_box .= ''; if ( $form ) { - echo ''; - echo '
'; + $select_box .= ''; + $select_box .= ''; } + + return $select_box; } - + /** * enables backward compatibility */ @@ -224,15 +228,15 @@ class PMA_Theme_Manager { $GLOBALS['theme'] = $this->theme->getId(); $GLOBALS['pmaThemePath'] = $this->theme->getPath(); $GLOBALS['pmaThemeImage'] = $this->theme->getImgPath(); - + /** * load layout file if exists */ if ( @file_exists( $GLOBALS['pmaThemePath'] . 'layout.inc.php' ) ) { include( $GLOBALS['pmaThemePath'] . 'layout.inc.php' ); } - - + + } } ?> \ No newline at end of file