X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=lib%2Ftheme.php;h=b5f2b58cf2401ba142f8cbdbc242a831b63d8944;hb=f79d59a081923e935b4c74880ebd8d53484221e0;hp=95b7c1de4b584982ea4f4841962e27299a3581f9;hpb=4c3aebd39644d913df4abdb69b848413ca65c298;p=quix0rs-gnu-social.git diff --git a/lib/theme.php b/lib/theme.php index 95b7c1de4b..b5f2b58cf2 100644 --- a/lib/theme.php +++ b/lib/theme.php @@ -51,12 +51,14 @@ if (!defined('STATUSNET') && !defined('LACONICA')) { * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 * @link http://status.net/ */ - class Theme { var $name = null; var $dir = null; var $path = null; + protected $metadata = null; // access via getMetadata() lazy-loader + protected $externals = null; + protected $deps = null; /** * Constructor @@ -65,14 +67,14 @@ class Theme * * @param string $name Name of the theme; defaults to config value */ - function __construct($name=null) { if (empty($name)) { $name = common_config('site', 'theme'); } if (!self::validName($name)) { - throw new ServerException("Invalid theme name."); + // TRANS: Server exception displayed if a theme name was invalid. + throw new ServerException(_('Invalid theme name.')); } $this->name = $name; @@ -95,7 +97,6 @@ class Theme $fulldir = $instroot.'/'.$name; if (file_exists($fulldir) && is_dir($fulldir)) { - $this->dir = $fulldir; $this->path = $this->relativeThemePath('theme', 'theme', $name); } @@ -113,11 +114,9 @@ class Theme * * @todo consolidate code with that for other customizable paths */ - protected function relativeThemePath($group, $fallbackSubdir, $name) { if (StatusNet::isHTTPS()) { - $sslserver = common_config($group, 'sslserver'); if (empty($sslserver)) { @@ -140,9 +139,7 @@ class Theme } $protocol = 'https'; - } else { - $path = common_config($group, 'path'); if (empty($path)) { @@ -179,7 +176,6 @@ class Theme * * @return string full pathname, like /var/www/mublog/theme/default/logo.png */ - function getFile($relative) { return $this->dir.'/'.$relative; @@ -192,7 +188,6 @@ class Theme * * @return string full URL, like 'http://example.com/theme/default/logo.png' */ - function getPath($relative) { return $this->path.'/'.$relative; @@ -207,9 +202,12 @@ class Theme */ function getDeps() { - $chain = $this->doGetDeps(array($this->name)); - array_pop($chain); // Drop us back off - return $chain; + if ($this->deps === null) { + $chain = $this->doGetDeps(array($this->name)); + array_pop($chain); // Drop us back off + $this->deps = $chain; + } + return $this->deps; } protected function doGetDeps($chain) @@ -241,6 +239,20 @@ class Theme * @return associative array of strings */ function getMetadata() + { + if ($this->metadata == null) { + $this->metadata = $this->doGetMetadata(); + } + return $this->metadata; + } + + /** + * Pull data from the theme's theme.ini file. + * @fixme calling getFile will fall back to default theme, this may be unsafe. + * + * @return associative array of strings + */ + private function doGetMetadata() { $iniFile = $this->getFile('theme.ini'); if (file_exists($iniFile)) { @@ -250,6 +262,32 @@ class Theme } } + /** + * Get list of any external URLs required by this theme and any + * dependencies. These are lazy-loaded from theme.ini. + * + * @return array of URL strings + */ + function getExternals() + { + if ($this->externals == null) { + $data = $this->getMetadata(); + if (!empty($data['external'])) { + $ext = (array)$data['external']; + } else { + $ext = array(); + } + + if (!empty($data['include'])) { + $theme = new Theme($data['include']); + $ext = array_merge($ext, $theme->getExternals()); + } + + $this->externals = array_unique($ext); + } + return $this->externals; + } + /** * Gets the full path of a file in a theme dir based on its relative name * @@ -258,7 +296,6 @@ class Theme * * @return string File path to the theme file */ - static function file($relative, $name=null) { $theme = new Theme($name); @@ -273,7 +310,6 @@ class Theme * * @return string URL of the file */ - static function path($relative, $name=null) { $theme = new Theme($name); @@ -285,7 +321,6 @@ class Theme * * @return array list of available theme names */ - static function listAvailable() { $local = self::subdirsOf(self::localRoot()); @@ -305,7 +340,6 @@ class Theme * * @return array relative filenames of subdirs, or empty array */ - protected static function subdirsOf($dir) { $subdirs = array(); @@ -330,7 +364,6 @@ class Theme * * @return string local root dir for themes */ - protected static function localRoot() { $basedir = common_config('local', 'dir'); @@ -347,7 +380,6 @@ class Theme * * @return string root dir for StatusNet themes */ - protected static function installRoot() { $instroot = common_config('theme', 'dir');