From: garvinhicking Date: Sun, 29 Jan 2006 14:10:22 +0000 (+0000) Subject: Allow to shortcircuit template $leftSideBarElements contents for plugins X-Git-Tag: 1.0~133 X-Git-Url: http://git.mjollnir.org/gw?a=commitdiff_plain;h=32c6527fc105cc4c357d7df28a3a127add9e6095;p=s9y.git Allow to shortcircuit template $leftSideBarElements contents for plugins --- diff --git a/include/plugin_api.inc.php b/include/plugin_api.inc.php index a598541..c8dee12 100644 --- a/include/plugin_api.inc.php +++ b/include/plugin_api.inc.php @@ -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;