]> git.immae.eu Git - github/wallabag/wallabag.git/commitdiff
some fix to courgette theme
authorNicolas Lœuillet <nicolas.loeuillet@gmail.com>
Tue, 28 Jan 2014 10:19:06 +0000 (11:19 +0100)
committerNicolas Lœuillet <nicolas.loeuillet@gmail.com>
Tue, 28 Jan 2014 10:19:06 +0000 (11:19 +0100)
inc/poche/Poche.class.php
themes/courgette/_top.twig
themes/courgette/config.twig
themes/courgette/img/logo.svg [new file with mode: 0644]
themes/courgette/theme.ini [new file with mode: 0644]
themes/dark/theme.ini [new file with mode: 0644]
themes/default/config.twig
themes/default/theme.ini [new file with mode: 0644]
themes/dmagenta/theme.ini [new file with mode: 0644]
themes/solarized-dark/theme.ini [new file with mode: 0644]
themes/solarized/theme.ini [new file with mode: 0644]

index 0be1668d08f1649401cdcb89a606b1fdc20cfcb4..e9b14121631130647b9fae84b3222130cab6dc6d 100644 (file)
@@ -22,16 +22,6 @@ class Poche
     private $currentTheme = '';
     private $currentLanguage = '';
     private $notInstalledMessage = array();
-    
-    # @todo make this dynamic (actually install themes and save them in the database including author information et cetera)
-    private $installedThemes = array(
-        'default' => array('requires' => array()),
-        'dark' => array('requires' => array('default')),
-        'dmagenta' => array('requires' => array('default')),
-        'solarized' => array('requires' => array('default')),
-        'solarized-dark' => array('requires' => array('default')),
-        'courgette' => array('requires' => array())
-    );
 
     public function __construct()
     {
@@ -124,21 +114,26 @@ class Poche
         } 
         
         # Check if the selected theme and its requirements are present
-        if ($this->getTheme() != '' && ! is_dir(THEME . '/' . $this->getTheme())) {
-            $this->notInstalledMessage[] = 'The currently selected theme (' . $this->getTheme() . ') does not seem to be properly installed (Missing directory: ' . THEME . '/' . $this->getTheme() . ')';
+        $theme = $this->getTheme();
+
+        if ($theme != '' && ! is_dir(THEME . '/' . $theme)) {
+            $this->notInstalledMessage[] = 'The currently selected theme (' . $theme . ') does not seem to be properly installed (Missing directory: ' . THEME . '/' . $theme . ')';
             
             self::$canRenderTemplates = false;
             
             $passTheme = FALSE;
         }
         
-        foreach ($this->installedThemes[$this->getTheme()]['requires'] as $requiredTheme) {
-            if (! is_dir(THEME . '/' . $requiredTheme)) {
-                $this->notInstalledMessage[] = 'The required "' . $requiredTheme . '" theme is missing for the current theme (' . $this->getTheme() . ')';
+        $themeInfo = $this->getThemeInfo($theme);
+        if (isset($themeInfo['requirements']) && is_array($themeInfo['requirements'])) {
+            foreach ($themeInfo['requirements'] as $requiredTheme) {
+                if (! is_dir(THEME . '/' . $requiredTheme)) {
+                    $this->notInstalledMessage[] = 'The required "' . $requiredTheme . '" theme is missing for the current theme (' . $theme . ')';
                 
-                self::$canRenderTemplates = false;
+                    self::$canRenderTemplates = false;
                 
-                $passTheme = FALSE;
+                    $passTheme = FALSE;
+                }
             }
         }
 
@@ -194,32 +189,36 @@ class Poche
     private function initTpl()
     {
         $loaderChain = new Twig_Loader_Chain();
+        $theme = $this->getTheme();
        
         # add the current theme as first to the loader chain so Twig will look there first for overridden template files
         try {
-            $loaderChain->addLoader(new Twig_Loader_Filesystem(THEME . '/' . $this->getTheme()));
+            $loaderChain->addLoader(new Twig_Loader_Filesystem(THEME . '/' . $theme));
         } catch (Twig_Error_Loader $e) {
             # @todo isInstalled() should catch this, inject Twig later
-            die('The currently selected theme (' . $this->getTheme() . ') does not seem to be properly installed (' . THEME . '/' . $this->getTheme() .' is missing)');
+            die('The currently selected theme (' . $theme . ') does not seem to be properly installed (' . THEME . '/' . $theme .' is missing)');
         }
         
         # add all required themes to the loader chain
-        foreach ($this->installedThemes[$this->getTheme()]['requires'] as $requiredTheme) {
-            try {
-                $loaderChain->addLoader(new Twig_Loader_Filesystem(THEME . '/' . DEFAULT_THEME));
-            } catch (Twig_Error_Loader $e) {
-                # @todo isInstalled() should catch this, inject Twig later
-                die('The required "' . $requiredTheme . '" theme is missing for the current theme (' . $this->getTheme() . ')');
+        $themeInfo = $this->getThemeInfo($theme);
+        if (isset($themeInfo['requirements']) && is_array($themeInfo['requirements'])) {
+            foreach ($themeInfo['requirements'] as $requiredTheme) {
+                try {
+                    $loaderChain->addLoader(new Twig_Loader_Filesystem(THEME . '/' . $requiredTheme));
+                } catch (Twig_Error_Loader $e) {
+                    # @todo isInstalled() should catch this, inject Twig later
+                    die('The required "' . $requiredTheme . '" theme is missing for the current theme (' . $theme . ')');
+                }
             }
         }
         
         if (DEBUG_POCHE) {
-            $twig_params = array();
+            $twigParams = array();
         } else {
-            $twig_params = array('cache' => CACHE);
+            $twigParams = array('cache' => CACHE);
         }
         
-        $this->tpl = new Twig_Environment($loaderChain, $twig_params);
+        $this->tpl = new Twig_Environment($loaderChain, $twigParams);
         $this->tpl->addExtension(new Twig_Extensions_Extension_I18n());
         
         # filter to display domain name of an url
@@ -235,7 +234,7 @@ class Poche
         $this->tpl->addFilter($filter);
     }
 
-    private function install() 
+    private function install()
     {
         Tools::logm('poche still not installed');
         echo $this->tpl->render('install.twig', array(
@@ -266,34 +265,59 @@ class Poche
         return $this->currentTheme;
     }
 
-    public function getLanguage() {
-        return $this->currentLanguage;
+    /**
+     * Provides theme information by parsing theme.ini file if present in the theme's root directory.
+     * In all cases, the following data will be returned:
+     * - name: theme's name, or key if the theme is unnamed,
+     * - current: boolean informing if the theme is the current user theme.
+     *
+     * @param string $theme Theme key (directory name)
+     * @return array|boolean Theme information, or false if the theme doesn't exist.
+     */
+    public function getThemeInfo($theme) {
+        if (!is_dir(THEME . '/' . $theme)) {
+            return false;
+        }
+
+        $themeIniFile = THEME . '/' . $theme . '/theme.ini';
+        $themeInfo = array();
+
+        if (is_file($themeIniFile) && is_readable($themeIniFile)) {
+            $themeInfo = parse_ini_file($themeIniFile);
+        }
+        
+        if ($themeInfo === false) {
+            $themeInfo = array();
+        }
+        if (!isset($themeInfo['name'])) {
+            $themeInfo['name'] = $theme;
+        }
+        $themeInfo['current'] = ($theme === $this->getTheme());
+
+        return $themeInfo;
     }
     
     public function getInstalledThemes() {
         $handle = opendir(THEME);
         $themes = array();
-        
+
         while (($theme = readdir($handle)) !== false) {
             # Themes are stored in a directory, so all directory names are themes
             # @todo move theme installation data to database
-            if (! is_dir(THEME . '/' . $theme) || in_array($theme, array('..', '.'))) {
+            if (!is_dir(THEME . '/' . $theme) || in_array($theme, array('.', '..'))) {
                 continue;
             }
-            
-            $current = false;
-            
-            if ($theme === $this->getTheme()) {
-                $current = true;
-            }
-            
-            $themes[] = array('name' => $theme, 'current' => $current);
+
+            $themes[$theme] = $this->getThemeInfo($theme);
         }
-        
-        sort($themes);
+
         return $themes;
     }
 
+    public function getLanguage() {
+        return $this->currentLanguage;
+    }
+
     public function getInstalledLanguages() {
         $handle = opendir(LOCALE);
         $languages = array();
@@ -600,8 +624,8 @@ class Poche
         $themes = $this->getInstalledThemes();
         $actualTheme = false;
         
-        foreach ($themes as $theme) {
-            if ($theme['name'] == $_POST['theme']) {
+        foreach (array_keys($themes) as $theme) {
+            if ($theme == $_POST['theme']) {
                 $actualTheme = true;
                 break;
             }
index a2a4b28dc8dff78fbf6eee7bd99cd88ecfbcbb4f..792687c064728ade1e600adfd9653d9508440e64 100755 (executable)
@@ -1,6 +1,6 @@
         <header>
             <h1>
-                {% if view == 'home' %}{% block logo %}<img src="{{ poche_url }}/themes/{{ constant('DEFAULT_THEME') }}/img/logo.png" alt="logo poche" />{% endblock %}
+                {% if view == 'home' %}{% block logo %}<img src="{{ poche_url }}/themes/{{ constant('DEFAULT_THEME') }}/img/logo.svg" alt="logo poche" />{% endblock %}
                 {% elseif view == 'fav' %}<a href="./" title="{% trans "back to home" %}" >{{ block('logo') }} <span>Favoris</span></a>
                 {% elseif view == 'archive' %}<a href="./" title="{% trans "back to home" %}" >{{ block('logo') }} <span>Archive</span></a>
                 {% else %}<a href="./" title="{% trans "back to home" %}" >{{ block('logo') }}</a>
index fdeb464baef5b519b2d4cff8cc909287a50cd19f..3ab1d92f4a250006e837fd670ac2e851b5157a78 100755 (executable)
@@ -35,8 +35,8 @@
                     <div class="row">
                         <label class="col w150p" for="theme">{% trans "Theme:" %}</label>
                         <select class="col" id="theme" name="theme">
-                            {% for theme in themes %}
-                            <option value="{{ theme.name }}" {{ theme.current ? 'selected' : '' }}>{{ theme.name }}</option>
+                            {% for key, theme in themes %}
+                            <option value="{{ key }}" {{ theme.current ? 'selected' : '' }}>{{ theme.name }}</option>
                             {% endfor %}
                         </select>
                     </div>
diff --git a/themes/courgette/img/logo.svg b/themes/courgette/img/logo.svg
new file mode 100644 (file)
index 0000000..865da44
--- /dev/null
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="64" height="64">
+    <circle cx="32" cy="32" r="29.5" style="fill:#000" />
+    <path d="m 16,18 33,0 0,26 -16.5,6 -16.5,-6 z" fill="#fff" />
+    <rect width="9" height="2.5" x="17.5" y="24.5" fill="#000" />
+    <rect width="9" height="2.5" x="28" y="24.5" fill="#000" />
+    <rect width="9" height="2.5" x="38.5" y="24.5" fill="#000" />
+</svg>
diff --git a/themes/courgette/theme.ini b/themes/courgette/theme.ini
new file mode 100644 (file)
index 0000000..996d171
--- /dev/null
@@ -0,0 +1,3 @@
+name = Courgette
+description = Responsive black and white theme especially adapted to smartphones.
+requirements[] = default
diff --git a/themes/dark/theme.ini b/themes/dark/theme.ini
new file mode 100644 (file)
index 0000000..4b020d3
--- /dev/null
@@ -0,0 +1,2 @@
+name = Dark
+requirements[] = default
index ada238d64a2efa7500ffcfb5ff85386c10ebe160..df62520a706ab7d0c2c1601e2be90445427235ac 100644 (file)
@@ -49,8 +49,8 @@
                     <div class="row">
                         <label class="col w150p" for="theme">{% trans "Theme:" %}</label>
                         <select class="col" id="theme" name="theme">
-                            {% for theme in themes %}
-                            <option value="{{ theme.name }}" {{ theme.current ? 'selected' : '' }}>{{ theme.name }}</option>
+                            {% for key, theme in themes %}
+                            <option value="{{ key }}" {{ theme.current ? 'selected' : '' }}>{{ theme.name }}</option>
                             {% endfor %}
                         </select>
                     </div>
diff --git a/themes/default/theme.ini b/themes/default/theme.ini
new file mode 100644 (file)
index 0000000..9f3cfb6
--- /dev/null
@@ -0,0 +1 @@
+name = Default
\ No newline at end of file
diff --git a/themes/dmagenta/theme.ini b/themes/dmagenta/theme.ini
new file mode 100644 (file)
index 0000000..24ff3c4
--- /dev/null
@@ -0,0 +1,2 @@
+name = Dark Magenta
+requirements[] = default
diff --git a/themes/solarized-dark/theme.ini b/themes/solarized-dark/theme.ini
new file mode 100644 (file)
index 0000000..7b6b341
--- /dev/null
@@ -0,0 +1,2 @@
+name = Dark Solarized
+requirements[] = default
diff --git a/themes/solarized/theme.ini b/themes/solarized/theme.ini
new file mode 100644 (file)
index 0000000..703997b
--- /dev/null
@@ -0,0 +1,2 @@
+name = Solarized
+requirements[] = default