]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
add a method to Theme class to list available themes
authorEvan Prodromou <evan@status.net>
Mon, 9 Nov 2009 02:18:57 +0000 (21:18 -0500)
committerEvan Prodromou <evan@status.net>
Mon, 9 Nov 2009 02:18:57 +0000 (21:18 -0500)
lib/theme.php

index e5fad2316bcb82797f9901b29b4b6360e28f0129..020ce1ac40cc77d7a57cd5e486ed3224973b1e5e 100644 (file)
@@ -70,7 +70,7 @@ class Theme
 
         // Check to see if it's in the local dir
 
-        $localroot = Theme::localRoot();
+        $localroot = self::localRoot();
 
         $fulldir = $localroot.'/'.$name;
 
@@ -82,7 +82,7 @@ class Theme
 
         // Check to see if it's in the distribution dir
 
-        $instroot = Theme::installRoot();
+        $instroot = self::installRoot();
 
         $fulldir = $instroot.'/'.$name;
 
@@ -172,6 +172,51 @@ class Theme
         return $theme->getPath($relative);
     }
 
+    /**
+     * list available theme names
+     *
+     * @return array list of available theme names
+     */
+
+    static function listAvailable()
+    {
+        $local   = self::subdirsOf(self::localRoot());
+        $install = self::subdirsOf(self::installRoot());
+
+        $i = array_search('base', $install);
+
+        unset($install[$i]);
+
+        return array_merge($local, $install);
+    }
+
+    /**
+     * Utility for getting subdirs of a directory
+     *
+     * @param string $dir full path to directory to check
+     *
+     * @return array relative filenames of subdirs, or empty array
+     */
+
+    protected static function subdirsOf($dir)
+    {
+        $subdirs = array();
+
+        if (is_dir($dir)) {
+            if ($dh = opendir($dir)) {
+                while (($filename = readdir($dh)) !== false) {
+                    if ($filename != '..' && $filename !== '.' &&
+                        is_dir($dir.'/'.$filename)) {
+                        $subdirs[] = $filename;
+                    }
+                }
+                closedir($dh);
+            }
+        }
+
+        return $subdirs;
+    }
+
     /**
      * Local root dir for themes
      *