]> git.mxchange.org Git - friendica.git/commitdiff
allow themes to use plugin hooks
authorZach Prezkuta <fermion@gmx.com>
Tue, 5 Feb 2013 03:53:53 +0000 (20:53 -0700)
committerZach Prezkuta <fermion@gmx.com>
Tue, 5 Feb 2013 03:53:53 +0000 (20:53 -0700)
include/plugin.php
mod/admin.php

index db3224f29658ff2a1fe1ca8e302388ab77e353b3..ef0ddd05ef108c41c482b2b365ac970cd79c85fb 100644 (file)
@@ -162,6 +162,10 @@ function call_hooks($name, &$data = null) {
 
        if((is_array($a->hooks)) && (array_key_exists($name,$a->hooks))) {
                foreach($a->hooks[$name] as $hook) {
+                       // Don't run a theme's hook if the user isn't using the theme
+                       if(strpos($hook[0], 'view/theme/') !== false && strpos($hook[0], 'view/theme/'.current_theme()) === false)
+                               continue;
+
                        @include_once($hook[0]);
                        if(function_exists($hook[1])) {
                                $func = $hook[1];
@@ -318,6 +322,42 @@ function get_theme_screenshot($theme) {
        return($a->get_baseurl() . '/images/blank.png');
 }
 
+// install and uninstall theme
+if (! function_exists('uninstall_theme')){
+function uninstall_theme($theme){
+       logger("Addons: uninstalling theme " . $theme);
+    
+       @include_once("view/theme/$theme/theme.php");
+       if(function_exists("{$theme}_uninstall")) {
+               $func = "{$theme}_uninstall";
+               $func();
+       }
+}}
+
+if (! function_exists('install_theme')){
+function install_theme($theme) {
+       // silently fail if theme was removed
+
+       if(! file_exists("view/theme/$theme/theme.php"))
+               return false;
+
+       logger("Addons: installing theme $theme");
+
+       @include_once("view/theme/$theme/theme.php");
+
+       if(function_exists("{$theme}_install")) {
+               $func = "{$theme}_install";
+               $func();
+               return true;
+       }
+       else {
+               logger("Addons: FAILED installing theme $theme");
+               return false;
+       }
+
+}}
+
+
 
 // check service_class restrictions. If there are no service_classes defined, everything is allowed.
 // if $usage is supplied, we check against a maximum count and return true if the current usage is 
index 89363541ca8154a2c8223f32d1e0ea2dc9542378..8a79fb108cc408d6265419a85ebc3a7aa7535d30 100644 (file)
@@ -980,10 +980,14 @@ function admin_page_themes(&$a){
 
                        toggle_theme($themes,$theme,$result);
                        $s = rebuild_theme_table($themes);
-                       if($result)
+                       if($result) {
+                               install_theme($theme);
                                info( sprintf('Theme %s enabled.',$theme));
-                       else
+                       }
+                       else {
+                               uninstall_theme($theme);
                                info( sprintf('Theme %s disabled.',$theme));
+                       }
 
                        set_config('system','allowed_themes',$s);
                        goaway($a->get_baseurl(true) . '/admin/themes' );