]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Restructure theme.php to define a class Theme
authorEvan Prodromou <evan@status.net>
Sun, 8 Nov 2009 22:04:46 +0000 (17:04 -0500)
committerEvan Prodromou <evan@status.net>
Sun, 8 Nov 2009 22:04:46 +0000 (17:04 -0500)
For various reasons, it's nicer to have a class for theme-file paths
and such. So, I've rewritten the code for determining the locations of
theme files to be more OOPy.

I changed all the uses of the two functions in the module (theme_file
and theme_path) to use Theme::file and Theme::path respectively.

I've also removed the code in common.php that require's the module;
using a class means we can autoload it instead.

actions/opensearch.php
classes/Avatar.php
classes/User_group.php
lib/action.php
lib/common.php
lib/htmloutputter.php
lib/noticesection.php
lib/theme.php

index d5e6698f3880a07b43110058abd934f680d01b4d..861b53d7d83176a21b776c30718b58e8fe43a7ea 100644 (file)
@@ -75,7 +75,7 @@ class OpensearchAction extends Action
         $this->element('Url', array('type' => 'text/html', 'method' => 'get',
                        'template' => str_replace('---', '{searchTerms}', common_local_url($type, array('q' => '---')))));
         $this->element('Image', array('height' => 16, 'width' => 16, 'type' => 'image/vnd.microsoft.icon'), common_path('favicon.ico'));
-        $this->element('Image', array('height' => 50, 'width' => 50, 'type' => 'image/png'), theme_path('logo.png'));
+        $this->element('Image', array('height' => 50, 'width' => 50, 'type' => 'image/png'), Theme::path('logo.png'));
         $this->element('AdultContent', null, 'false');
         $this->element('Language', null, common_language());
         $this->element('OutputEncoding', null, 'UTF-8');
index 64f105179c85c24358c9e83f19dcdce6e9676a00..cc7a6b64717ac5534c9aeeb9a473ad26dcf0f222 100644 (file)
@@ -102,6 +102,6 @@ class Avatar extends Memcached_DataObject
         static $sizenames = array(AVATAR_PROFILE_SIZE => 'profile',
                                   AVATAR_STREAM_SIZE => 'stream',
                                   AVATAR_MINI_SIZE => 'mini');
-        return theme_path('default-avatar-'.$sizenames[$size].'.png');
+        return Theme::path('default-avatar-'.$sizenames[$size].'.png');
     }
 }
index 310ecff1ef766726197eaa06457b6a3c5cfcc405..b92638f7aa4615668a2f368b359432c2d96b8893 100644 (file)
@@ -34,7 +34,7 @@ class User_group extends Memcached_DataObject
         static $sizenames = array(AVATAR_PROFILE_SIZE => 'profile',
                                   AVATAR_STREAM_SIZE => 'stream',
                                   AVATAR_MINI_SIZE => 'mini');
-        return theme_path('default-avatar-'.$sizenames[$size].'.png');
+        return Theme::path('default-avatar-'.$sizenames[$size].'.png');
     }
 
     function homeUrl()
index 78ca9137a5ec336552bb1734d8bede4a8d3669d0..80f398fbd77e25b8736af0a5c7cb33cae06cb5fd 100644 (file)
@@ -168,7 +168,7 @@ class Action extends HTMLOutputter // lawsuit
     {
         if (is_readable(INSTALLDIR . '/theme/' . common_config('site', 'theme') . '/favicon.ico')) {
             $this->element('link', array('rel' => 'shortcut icon',
-                                         'href' => theme_path('favicon.ico')));
+                                         'href' => Theme::path('favicon.ico')));
         } else {
             $this->element('link', array('rel' => 'shortcut icon',
                                          'href' => common_path('favicon.ico')));
@@ -177,7 +177,7 @@ class Action extends HTMLOutputter // lawsuit
         if (common_config('site', 'mobile')) {
             if (is_readable(INSTALLDIR . '/theme/' . common_config('site', 'theme') . '/apple-touch-icon.png')) {
                 $this->element('link', array('rel' => 'apple-touch-icon',
-                                             'href' => theme_path('apple-touch-icon.png')));
+                                             'href' => Theme::path('apple-touch-icon.png')));
             } else {
                 $this->element('link', array('rel' => 'apple-touch-icon',
                                              'href' => common_path('apple-touch-icon.png')));
@@ -210,16 +210,16 @@ class Action extends HTMLOutputter // lawsuit
 
             if (Event::handle('StartShowUAStyles', array($this))) {
                 $this->comment('[if IE]><link rel="stylesheet" type="text/css" '.
-                               'href="'.theme_path('css/ie.css', 'base').'?version='.STATUSNET_VERSION.'" /><![endif]');
+                               'href="'.Theme::path('css/ie.css', 'base').'?version='.STATUSNET_VERSION.'" /><![endif]');
                 foreach (array(6,7) as $ver) {
-                    if (file_exists(theme_file('css/ie'.$ver.'.css', 'base'))) {
+                    if (file_exists(Theme::file('css/ie'.$ver.'.css', 'base'))) {
                         // Yes, IE people should be put in jail.
                         $this->comment('[if lte IE '.$ver.']><link rel="stylesheet" type="text/css" '.
-                                       'href="'.theme_path('css/ie'.$ver.'.css', 'base').'?version='.STATUSNET_VERSION.'" /><![endif]');
+                                       'href="'.Theme::path('css/ie'.$ver.'.css', 'base').'?version='.STATUSNET_VERSION.'" /><![endif]');
                     }
                 }
                 $this->comment('[if IE]><link rel="stylesheet" type="text/css" '.
-                               'href="'.theme_path('css/ie.css', null).'?version='.STATUSNET_VERSION.'" /><![endif]');
+                               'href="'.Theme::path('css/ie.css', null).'?version='.STATUSNET_VERSION.'" /><![endif]');
                 Event::handle('EndShowUAStyles', array($this));
             }
 
@@ -391,9 +391,9 @@ class Action extends HTMLOutputter // lawsuit
         if (Event::handle('StartAddressData', array($this))) {
             $this->elementStart('a', array('class' => 'url home bookmark',
                                            'href' => common_local_url('public')));
-            if (common_config('site', 'logo') || file_exists(theme_file('logo.png'))) {
+            if (common_config('site', 'logo') || file_exists(Theme::file('logo.png'))) {
                 $this->element('img', array('class' => 'logo photo',
-                                            'src' => (common_config('site', 'logo')) ? common_config('site', 'logo') : theme_path('logo.png'),
+                                            'src' => (common_config('site', 'logo')) ? common_config('site', 'logo') : Theme::path('logo.png'),
                                             'alt' => common_config('site', 'name')));
             }
             $this->element('span', array('class' => 'fn org'), common_config('site', 'name'));
index 68bdbf22934bc596b612a08386ad8903e7c2b310..6aac468075f301dd3fce0702b80b3b70b5553d49 100644 (file)
@@ -227,7 +227,6 @@ require_once 'markdown.php';
 
 require_once INSTALLDIR.'/lib/util.php';
 require_once INSTALLDIR.'/lib/action.php';
-require_once INSTALLDIR.'/lib/theme.php';
 require_once INSTALLDIR.'/lib/mail.php';
 require_once INSTALLDIR.'/lib/subs.php';
 require_once INSTALLDIR.'/lib/Shorturl_api.php';
index ce83295fb33783f1ddeac61da5ce19a3a2fe69e1..c2ec83c284568d9f76d473e941ca29511bc3d019 100644 (file)
@@ -375,8 +375,8 @@ class HTMLOutputter extends XMLOutputter
         $url = parse_url($src);
         if( empty($url->scheme) && empty($url->host) && empty($url->query) && empty($url->fragment))
         {
-            if(file_exists(theme_file($src,$theme))){
-               $src = theme_path($src, $theme) . '?version=' . STATUSNET_VERSION;
+            if(file_exists(Theme::file($src,$theme))){
+               $src = Theme::path($src, $theme) . '?version=' . STATUSNET_VERSION;
             }else{
                $src = common_path($src);
             }
index b223932efe2c4a5b683cef20188f8a9606601b27..24465f8baf1f835ff87f46ce0c19667213e61c51 100644 (file)
@@ -114,7 +114,7 @@ class NoticeSection extends Section
                     $att_class = 'attachments';
                 }
 
-                $clip = theme_path('images/icons/clip.png', 'base');
+                $clip = Theme::path('images/icons/clip.png', 'base');
                 $this->out->elementStart('a', array('class' => $att_class, 'style' => "font-style: italic;", 'href' => $href, 'title' => "# of attachments: $count"));
                 $this->out->raw(" ($count&nbsp");
                 $this->out->element('img', array('style' => 'display: inline', 'align' => 'top', 'width' => 20, 'height' => 20, 'src' => $clip, 'alt' => 'alt'));
index 08e3e85383b18fc92d5241891d1acb1dff8f57b0..c658058ffcc134841e50174c75ee4fc711c1776f 100644 (file)
@@ -23,7 +23,7 @@
  * @package   StatusNet
  * @author    Evan Prodromou <evan@status.net>
  * @author    Sarven Capadisli <csarven@status.net>
- * @copyright 2008 StatusNet, Inc.
+ * @copyright 2008-2009 StatusNet, Inc.
  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
  * @link      http://status.net/
  */
@@ -33,62 +33,146 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
 }
 
 /**
- * Gets the full path of a file in a theme dir based on its relative name
+ * Class for querying and manipulating a theme
  *
- * @param string $relative relative path within the theme directory
- * @param string $theme    name of the theme; defaults to current theme
+ * Themes are directories with some expected sub-directories and files
+ * in them. They're found in either local/theme (for locally-installed themes)
+ * or theme/ subdir of installation dir.
  *
- * @return string File path to the theme file
+ * This used to be a couple of functions, but for various reasons it's nice
+ * to have a class instead.
+ *
+ * @category Output
+ * @package  StatusNet
+ * @author   Evan Prodromou <evan@status.net>
+ * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link     http://status.net/
  */
 
-function theme_file($relative, $theme=null)
+class Theme
 {
-    if (empty($theme)) {
-        $theme = common_config('site', 'theme');
-    }
-    $dir = common_config('theme', 'dir');
-    if (empty($dir)) {
-        $dir = INSTALLDIR.'/theme';
-    }
-    return $dir.'/'.$theme.'/'.$relative;
-}
+    var $dir  = null;
+    var $path = null;
 
-/**
- * Gets the full URL of a file in a theme dir based on its relative name
- *
- * @param string $relative relative path within the theme directory
- * @param string $theme    name of the theme; defaults to current theme
- *
- * @return string URL of the file
- */
+    /**
+     * Constructor
+     *
+     * Determines the proper directory and path for this theme.
+     *
+     * @param string $name Name of the theme; defaults to config value
+     */
 
-function theme_path($relative, $theme=null)
-{
-    if (empty($theme)) {
-        $theme = common_config('site', 'theme');
-    }
+    function __construct($name=null)
+    {
+        if (empty($name)) {
+            $name = common_config('site', 'theme');
+        }
+
+        // Check to see if it's in the local dir
+
+        $localroot = INSTALLDIR.'/local/theme';
+
+        $fulldir = $localroot.'/'.$name;
+
+        if (file_exists($fulldir) && is_dir($fulldir)) {
+            $this->dir  = $fulldir;
+            $this->path = common_path('local/theme/'.$name.'/');
+            return;
+        }
+
+        // Check to see if it's in the distribution dir
 
-    $path = common_config('theme', 'path');
+        $instroot = common_config('theme', 'dir');
 
-    if (empty($path)) {
-        $path = common_config('site', 'path') . '/theme/';
+        if (empty($instroot)) {
+            $instroot = INSTALLDIR.'/theme';
+        }
+
+        $fulldir = $instroot.'/'.$name;
+
+        if (file_exists($fulldir) && is_dir($fulldir)) {
+
+            $this->dir = $fulldir;
+
+            $path = common_config('theme', 'path');
+
+            if (empty($path)) {
+                $path = common_config('site', 'path') . '/theme/';
+            }
+
+            if ($path[strlen($path)-1] != '/') {
+                $path .= '/';
+            }
+
+            if ($path[0] != '/') {
+                $path = '/'.$path;
+            }
+
+            $server = common_config('theme', 'server');
+
+            if (empty($server)) {
+                $server = common_config('site', 'server');
+            }
+
+            // XXX: protocol
+
+            $this->path = 'http://'.$server.$path.$name;
+        }
     }
 
-    if ($path[strlen($path)-1] != '/') {
-        $path .= '/';
+    /**
+     * Gets the full local filename of a file in this theme.
+     *
+     * @param string $relative relative name, like 'logo.png'
+     *
+     * @return string full pathname, like /var/www/mublog/theme/default/logo.png
+     */
+
+    function getFile($relative)
+    {
+        return $this->dir.'/'.$relative;
     }
 
-    if ($path[0] != '/') {
-        $path = '/'.$path;
+    /**
+     * Gets the full HTTP url of a file in this theme
+     *
+     * @param string $relative relative name, like 'logo.png'
+     *
+     * @return string full URL, like 'http://example.com/theme/default/logo.png'
+     */
+
+    function getPath($relative)
+    {
+        return $this->path.'/'.$relative;
     }
 
-    $server = common_config('theme', 'server');
+    /**
+     * Gets the full path of a file in a theme dir based on its relative name
+     *
+     * @param string $relative relative path within the theme directory
+     * @param string $name     name of the theme; defaults to current theme
+     *
+     * @return string File path to the theme file
+     */
 
-    if (empty($server)) {
-        $server = common_config('site', 'server');
+    static function file($relative, $name=null)
+    {
+        $theme = new Theme($name);
+        return $theme->getFile($relative);
     }
 
-    // XXX: protocol
+    /**
+     * Gets the full URL of a file in a theme dir based on its relative name
+     *
+     * @param string $relative relative path within the theme directory
+     * @param string $name     name of the theme; defaults to current theme
+     *
+     * @return string URL of the file
+     */
 
-    return 'http://'.$server.$path.$theme.'/'.$relative;
+    static function path($relative, $name=null)
+    {
+        $theme = new Theme($name);
+        return $theme->getPath($relative);
+    }
 }