X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=lib%2Ftheme.php;h=ef7290de2398ea2cdb973f3dea636f3831424a34;hb=2c5460eb0e140655c30639c5bc909ddb80732a91;hp=5caa046c208c05d13f6b4b6d37e913042608d545;hpb=9df856e667a12cd217576263efbc72fff12692d9;p=quix0rs-gnu-social.git diff --git a/lib/theme.php b/lib/theme.php index 5caa046c20..ef7290de23 100644 --- a/lib/theme.php +++ b/lib/theme.php @@ -53,9 +53,14 @@ if (!defined('STATUSNET') && !defined('LACONICA')) { */ class Theme { + const FALLBACK = 'neo'; + var $name = null; var $dir = null; var $path = null; + protected $metadata = null; // access via getMetadata() lazy-loader + protected $externals = null; + protected $deps = null; /** * Constructor @@ -96,7 +101,19 @@ class Theme if (file_exists($fulldir) && is_dir($fulldir)) { $this->dir = $fulldir; $this->path = $this->relativeThemePath('theme', 'theme', $name); + return; } + + // Ruh roh. Fall back to default, then. + + common_log(LOG_WARNING, sprintf("Unable to find theme '%s', falling back to default theme '%s'", + $name, + Theme::FALLBACK)); + + $this->name = Theme::FALLBACK; + $this->dir = $instroot.'/'.Theme::FALLBACK; + $this->path = $this->relativeThemePath('theme', 'theme', Theme::FALLBACK); + } /** @@ -113,7 +130,7 @@ class Theme */ protected function relativeThemePath($group, $fallbackSubdir, $name) { - if (StatusNet::isHTTPS()) { + if (GNUsocial::isHTTPS()) { $sslserver = common_config($group, 'sslserver'); if (empty($sslserver)) { @@ -199,9 +216,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) @@ -233,6 +253,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)) { @@ -242,6 +276,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 *