]> git.mjollnir.org Git - s9y.git/commitdiff
Allow to shortcircuit template $leftSideBarElements contents for plugins
authorgarvinhicking <garvinhicking>
Sun, 29 Jan 2006 14:10:22 +0000 (14:10 +0000)
committergarvinhicking <garvinhicking>
Sun, 29 Jan 2006 14:10:22 +0000 (14:10 +0000)
include/plugin_api.inc.php

index a5985410a142b3425334114cae1ded4869ae1887..c8dee12f118b757d9dd4b89f7d615d12f2dc79ad 100644 (file)
@@ -52,6 +52,23 @@ class serendipity_plugin_api {
         serendipity_plugin_api::create_plugin_instance('serendipity_event_nl2br', null, 'event');
         serendipity_plugin_api::create_plugin_instance('serendipity_event_browsercompatibility', null, 'event');
         serendipity_plugin_api::create_plugin_instance('serendipity_event_spamblock', null, 'event');
+
+        /* Register additional plugins? */
+        if (file_exists(S9Y_INCLUDE_PATH . 'plugins/preload.txt')) {
+            // Expects this format, one plugin per line:
+            // serendipity_event_xxx:event
+            // serendipity_plugin_xxx:left
+            $plugins = file(S9Y_INCLUDE_PATH . 'plugins/preload.txt');
+            foreach($plugins AS $plugin) {
+                $plugin = trim($plugin);
+                if (empty($plugin)) {
+                    continue;
+                }
+
+                $plugin_info = explode(':', $plugin);
+                serendipity_plugin_api::create_plugin_instance($plugin_info[0], null, $plugin_info[1]);
+            }
+        }
     }
 
 /**
@@ -239,7 +256,7 @@ class serendipity_plugin_api {
                 if ($f{0} == '.' || $f == 'CVS' || !is_dir($ppath . '/' . $f) || !is_readable($ppath . '/' .$f)) {
                     continue;
                 }
-                
+
                 $subd = opendir($ppath . '/' . $f);
                 if (!$subd) {
                     continue;
@@ -248,7 +265,7 @@ class serendipity_plugin_api {
                 // Instead of only looking for directories, search for files within subdirectories
                 $final_loop = false;
                 while (($subf = readdir($subd)) !== false) {
-                    
+
                     if ($subf{0} == '.' || $subf == 'CVS') {
                         continue;
                     }
@@ -338,15 +355,15 @@ class serendipity_plugin_api {
                 $where[] = " placement =  '" . serendipity_db_escape_string($filter) . "' ";
             }
         }
-        
+
         if (!empty($classname)) {
             $where[] = " (name LIKE '@" . serendipity_db_escape_string($classname) . "%' OR name LIKE '" . serendipity_db_escape_string($classname) . "%') ";
         }
-        
+
         if (!empty($id)) {
             $where[] = " name = '" . serendipity_db_escape_string($id) . "' ";
         }
-        
+
         if (count($where) > 0) {
             $sql .= ' WHERE ' . implode(' AND ', $where);
         }
@@ -368,6 +385,12 @@ class serendipity_plugin_api {
     {
         global $serendipity;
 
+        // Can be shortcircuited via a $serendipity['prevent_sidebar_plugins_(left|right|event)'] variable!
+        if (!$negate && $serendipity['prevent_sidebar_plugins_' . $filter] == true) {
+            return 0;
+        }
+
+
         $sql = "SELECT COUNT(placement) AS count from {$serendipity['dbPrefix']}plugins ";
 
         if ($filter !== '*') {
@@ -401,9 +424,9 @@ class serendipity_plugin_api {
         if (empty($pluginPath)) {
             $pluginPath = $name;
         }
-        
+
         $file = false;
-        
+
         // First try the local path, and then (if existing) a shared library repository ...
         // Internal plugins ignored.
         if (!empty($instance_id) && $instance_id{0} == '@') {
@@ -413,7 +436,7 @@ class serendipity_plugin_api {
         } elseif (file_exists(S9Y_INCLUDE_PATH . 'plugins/' . $pluginPath . '/' . $name . '.php')) {
             $file = S9Y_INCLUDE_PATH . 'plugins/' . $pluginPath . '/' . $name . '.php';
         }
-        
+
         return $file;
     }
 
@@ -434,10 +457,10 @@ class serendipity_plugin_api {
         } else {
             $class_name =& $name;
         }
-        
+
         return $class_name;
     }
-    
+
 /**
  * Auto-detect a plugin and see if the file information is given, and if not, detect it.
  *
@@ -453,7 +476,7 @@ class serendipity_plugin_api {
 
         $filename    = false;
         $is_internal = false;
-        
+
         $class_name  = serendipity_plugin_api::getClassByInstanceID($instance_id, $is_internal);
 
         if (!$is_internal) {
@@ -471,7 +494,7 @@ class serendipity_plugin_api {
                 if (empty($pluginPath)) {
                     $pluginPath = $class_name;
                 }
-        
+
                 // $serendipity['debug']['pluginload'][] = "Including plugin(2) $class_name, $pluginPath";
                 $filename = serendipity_plugin_api::includePlugin($class_name, $pluginPath);
             }
@@ -485,7 +508,7 @@ class serendipity_plugin_api {
         // $serendipity['debug']['pluginload'][] = "Found plugin file $filename";
         return $filename;
     }
-    
+
 /**
  * Instantiates a plugin class
  *
@@ -508,7 +531,7 @@ class serendipity_plugin_api {
             // $serendipity['debug']['pluginload'][] = "getClassByInstanceID $instance_id, $is_internal";
             $class_name  = serendipity_plugin_api::getClassByInstanceID($instance_id, $is_internal);
         }
-        
+
         if (!class_exists($class_name) && !empty($pluginFile)) {
             // $serendipity['debug']['pluginload'][] = "Classname does not exist. Including $pluginFile.";
             include_once($pluginFile);
@@ -519,7 +542,7 @@ class serendipity_plugin_api {
             $retval = false;
             return $retval;
         }
-        
+
         // $serendipity['debug']['pluginload'][] = "Returning new $class_name($instance_id)";
         $p =& new $class_name($instance_id);
         if (!is_null($authorid)) {
@@ -548,7 +571,7 @@ class serendipity_plugin_api {
         global $serendipity;
 
         static $pluginlist = null;
-        
+
         if ($pluginlist === null) {
             $data = serendipity_db_query("SELECT p.*,
                                                  pc.category
@@ -567,7 +590,7 @@ class serendipity_plugin_api {
                 }
             }
         }
-        
+
         if (is_array($pluginlist[$pluginFile]) && !preg_match('@plugin_internal\.inc\.php@', $pluginFile)) {
             $data = $pluginlist[$pluginFile];
             if ((int)filemtime($pluginFile) == (int)$data['last_modified']) {
@@ -577,12 +600,12 @@ class serendipity_plugin_api {
                 return $plugin;
             }
         }
-        
+
         $plugin =& serendipity_plugin_api::load_plugin($class_data['name'], null, $class_data['pluginPath'], $pluginFile);
-        
+
         return $plugin;
     }
-    
+
 /**
  * Set cache information about a plugin
  *
@@ -596,7 +619,7 @@ class serendipity_plugin_api {
  */
     function &setPluginInfo(&$plugin, &$pluginFile, &$bag, &$class_data, $pluginlocation = 'local') {
         global $serendipity;
-        
+
         static $dbfields = array(
             'plugin_file',
             'class_name',
@@ -616,9 +639,9 @@ class serendipity_plugin_api {
         );
 
         serendipity_db_query("DELETE FROM {$serendipity['dbPrefix']}pluginlist WHERE plugin_file = '" . serendipity_db_escape_string($pluginFile) . "' AND pluginlocation = '" . serendipity_db_escape_string($pluginlocation) . "'");
-        
+
         if (!empty($pluginFile) && file_exists($pluginFile)) {
-            $lastModified = filemtime($pluginFile); 
+            $lastModified = filemtime($pluginFile);
         } else {
             $lastModified = 0;
         }
@@ -639,7 +662,7 @@ class serendipity_plugin_api {
                 'plugin_file'     => $pluginFile,
                 'pluginlocation'  => $pluginlocation,
                 'plugintype'      => $serendipity['GET']['type'],
-                'last_modified'   => $lastModified 
+                'last_modified'   => $lastModified
             );
             $groups = $bag->get('groups');
         } elseif (is_array($plugin)) {
@@ -655,16 +678,16 @@ class serendipity_plugin_api {
         if (!isset($data['stackable']) || empty($data['stackable'])) {
             $data['stackable'] = '0';
         }
-        
+
         // Only insert data keys that exist in the DB.
         $insertdata = array();
         foreach($dbfields AS $field) {
             $insertdata[$field] = $data[$field];
         }
-        
+
         if ($data['upgradable']) {
-            serendipity_db_query("UPDATE {$serendipity['dbPrefix']}pluginlist 
-                                     SET upgrade_version = '" . serendipity_db_escape_string($data['upgrade_version']) . "' 
+            serendipity_db_query("UPDATE {$serendipity['dbPrefix']}pluginlist
+                                     SET upgrade_version = '" . serendipity_db_escape_string($data['upgrade_version']) . "'
                                    WHERE plugin_class    = '" . serendipity_db_escape_string($data['plugin_class']) . "'");
         }
         serendipity_db_insert('pluginlist', $insertdata);
@@ -681,7 +704,7 @@ class serendipity_plugin_api {
             );
             serendipity_db_insert('plugincategories', $cat);
         }
-        
+
         $data['groups'] = $groups;
 
         return $data;
@@ -767,7 +790,7 @@ class serendipity_plugin_api {
         if (!is_array($plugins)) {
             return;
         }
-        
+
         if (!isset($serendipity['smarty'])) {
             $serendipity['smarty_raw_mode'] = true;
             serendipity_smarty_init();
@@ -777,6 +800,10 @@ class serendipity_plugin_api {
         $addData    = func_get_args();
         serendipity_plugin_api::hook_event('frontend_generate_plugins', $plugins, $addData);
 
+        if (count($plugins) == 0) {
+            $serendipity['prevent_sidebar_plugins_' . $side] = true;
+        }
+
         foreach ($plugins as $plugin_data) {
             $plugin =& serendipity_plugin_api::load_plugin($plugin_data['name'], $plugin_data['authorid'], $plugin_data['path']);
             if (is_object($plugin)) {
@@ -912,7 +939,7 @@ class serendipity_plugin_api {
             }
             return $false;
         }
-        
+
         return $event_plugins;
     }
 
@@ -935,9 +962,9 @@ class serendipity_plugin_api {
         if (isset($serendipity['no_events']) && $serendipity['no_events'] == true) {
             return false;
         }
-        
+
         $plugins = serendipity_plugin_api::get_event_plugins();
-        
+
         if (is_array($plugins)) {
             // foreach() operates on copies of values, but we want to operate on references, so we use while()
             @reset($plugins);
@@ -1018,7 +1045,7 @@ class serendipity_property_bag {
 /**
  * @access private
  * @var    string   Name of the property bag
- */    
+ */
     var $name       = null;
 
 /**
@@ -1199,7 +1226,7 @@ class serendipity_plugin {
                         $valid = false;
                     }
                     break;
-                
+
                 case 'number':
                     if (!preg_match('@^[\d]*$@', $value)) {
                         $valid = false;
@@ -1230,20 +1257,20 @@ class serendipity_plugin {
                     }
                     break;
             }
-            
+
             $error = $cbag->get('validate_error');
             if ($valid) {
                 return true;
             } elseif (!empty($error)) {
                 return $error;
             } else {
-                return sprintf(PLUGIN_API_VALIDATE_ERROR, $config_item, $validate); 
+                return sprintf(PLUGIN_API_VALIDATE_ERROR, $config_item, $validate);
             }
         }
-        
+
         return true;
     }
-    
+
 /**
  * Output plugin's contents (Sidebar plugins)
  *
@@ -1306,7 +1333,7 @@ class serendipity_plugin {
     function set_config($name, $value, $implodekey = '^')
     {
         $name = $this->instance . '/' . $name;
-        
+
         if (is_array($value)) {
             $dbvalue = implode($implodekey, $value);
             $_POST['serendipity']['plugin'][$name] = $dbvalue;