diff --git a/e107_admin/db.php b/e107_admin/db.php index ebf9a5d55..ec0460827 100644 --- a/e107_admin/db.php +++ b/e107_admin/db.php @@ -936,6 +936,10 @@ class system_tools { $ret_code = $ep->checkAddon($row['plugin_path'], $this_addon); // See whether spaces before opening tag or after closing tag } + elseif(strpos($this_addon, 'sc_') === 0) + { + $this_addon = substr($this_addon, 3). ' (sc)'; + } $text .= "
"; $text .= "".$error_messages[$ret_code].""; $text .= trim($this_addon); // $ret_code - 0=OK, 1=content error, 2=access error diff --git a/e107_admin/update_routines.php b/e107_admin/update_routines.php index c0128d75c..f461262b0 100644 --- a/e107_admin/update_routines.php +++ b/e107_admin/update_routines.php @@ -1429,6 +1429,15 @@ function update_70x_to_706($type='') $sql->db_Select_gen("ALTER TABLE `".MPREFIX."generic` ADD INDEX `gen_type` (`gen_type`);"); } } + + if (!isset($pref['shortcode_legacy_list'])) + { + if ($just_check) return update_needed(); + // Reset, legacy and new shortcode list will be generated in plugin update routine + $pref['shortcode_legacy_list'] = array(); + $pref['shortcode_list'] = array(); + save_prefs(); + } if (!$just_check) { @@ -1446,6 +1455,7 @@ function update_70x_to_706($type='') save_prefs(); } + // If we get to here, in checking mode no updates are required. In update mode, all done. if ($just_check) return TRUE; $admin_log->log_event('UPDATE_02',LAN_UPDATE_14.$e107info['e107_version'],E_LOG_INFORMATIVE,''); // Log result of actual update diff --git a/e107_core/xml/default_install.xml b/e107_core/xml/default_install.xml index eb3f73210..4aac0df83 100644 --- a/e107_core/xml/default_install.xml +++ b/e107_core/xml/default_install.xml @@ -75,6 +75,7 @@ 'siteinfo', )]]> + 'news', 'page' => 'page', diff --git a/e107_handlers/plugin_class.php b/e107_handlers/plugin_class.php index 628d4bac2..269895cd8 100644 --- a/e107_handlers/plugin_class.php +++ b/e107_handlers/plugin_class.php @@ -290,7 +290,7 @@ class e107plugin $plug_info = $this->plug_vars; $eplug_addons = $this->getAddons($plugin_path); - + //Ensure the plugin path lives in the same folder as is configured in the plugin.php/plugin.xml - no longer relevant. if ($plugin_path == $plug_info['folder']) { @@ -1630,7 +1630,7 @@ class e107plugin } $currentPref = $core->getPref($prefName.'/'.$plugin); - echo 'Path: '.$plugin.' Pref: '.$prefName.' Current: '.$currentPref.' New: '.$pathEntry.'
'; + //echo 'Path: '.$plugin.' Pref: '.$prefName.' Current: '.$currentPref.' New: '.$pathEntry.'
'; switch ($when) { case 'install': @@ -2378,7 +2378,12 @@ class e107plugin { $core->update($var.'_list', ""); } - + + // reset + $core->set('bbcode_list', array()) + ->set('shortcode_legacy_list', array()) + ->set('shortcode_list', array()); + $query = "SELECT * FROM #plugin WHERE plugin_addons !='' ORDER BY plugin_path ASC"; if ($sql->db_Select_gen($query)) @@ -2388,7 +2393,7 @@ class e107plugin $is_installed = ($row['plugin_installflag'] == 1); $tmp = explode(",", $row['plugin_addons']); $path = $row['plugin_path']; - + if ($is_installed) { foreach ($tmp as $val) @@ -2402,19 +2407,35 @@ class e107plugin } // search for .bb and .sc files. + $scl_array = array(); $sc_array = array(); $bb_array = array(); $sql_array = array(); foreach ($tmp as $adds) { - if (substr($adds, -3) == ".sc") + // legacy shortcodes - plugin root *.sc files + if (substr($adds, -3) === ".sc") { $sc_name = substr($adds, 0, -3); // remove the .sc + if ($is_installed) + { + $scl_array[$sc_name] = "0"; // default userclass = e_UC_PUBLIC + } + else + { + $scl_array[$sc_name] = e_UC_NOBODY; // register shortcode, but disable it + } + } + // new shortcodes location - shortcodes/single/*.php + elseif (substr($adds, 0, 3) === "sc_") + { + $sc_name = substr(substr($adds, 3), 0, -4); // remove the sc_ and .php + if ($is_installed) { $sc_array[$sc_name] = "0"; // default userclass = e_UC_PUBLIC - } + } else { $sc_array[$sc_name] = e_UC_NOBODY; // register shortcode, but disable it @@ -2443,7 +2464,7 @@ class e107plugin $core->setPref('e_sql_list/'.$path, $adds); } } - + // Build Bbcode list (will be empty if plugin not installed) if (count($bb_array) > 0) { @@ -2452,6 +2473,12 @@ class e107plugin } // Build shortcode list - do if uninstalled as well + if (count($scl_array) > 0) + { + ksort($scl_array); + $core->setPref('shortcode_legacy_list/'.$path, $scl_array); + } + if (count($sc_array) > 0) { ksort($sc_array); @@ -2512,7 +2539,8 @@ class e107plugin } // Grab List of Shortcodes & BBcodes - $shortcodeList = $fl->get_files(e_PLUGIN.$plugin_path, '\.sc$', "standard", 1); + $shortcodeLegacyList = $fl->get_files(e_PLUGIN.$plugin_path, '\.sc$', "standard", 1); + $shortcodeList = $fl->get_files(e_PLUGIN.$plugin_path.'/shortcodes/single', '\.php$', "standard", 1); $bbcodeList = $fl->get_files(e_PLUGIN.$plugin_path, '\.bb$', "standard", 1); $bbcodeClassList= $fl->get_files(e_PLUGIN.$plugin_path, '^bb_(.*)\.php$', "standard", 1); @@ -2520,17 +2548,21 @@ class e107plugin $sqlList = $fl->get_files(e_PLUGIN.$plugin_path, '_sql\.php$', "standard", 1); - - - // Search Shortcodes - foreach ($shortcodeList as $sc) + foreach ($shortcodeLegacyList as $sc) { if (is_readable(e_PLUGIN.$plugin_path."/".$sc['fname'])) { $p_addons[] = $sc['fname']; } } + foreach ($shortcodeList as $sc) + { + if (is_readable(e_PLUGIN.$plugin_path."/shortcodes/single/".$sc['fname'])) + { + $p_addons[] = 'sc_'.$sc['fname']; + } + } // Search Bbcodes. foreach ($bbcodeList as $bb) diff --git a/e107_handlers/shortcode_handler.php b/e107_handlers/shortcode_handler.php index dd985a080..127bb1e26 100644 --- a/e107_handlers/shortcode_handler.php +++ b/e107_handlers/shortcode_handler.php @@ -446,30 +446,61 @@ class e_parse_shortcode protected function loadPluginSCFiles() { $pref = e107::getPref('shortcode_list'); + $prefl = e107::getPref('shortcode_legacy_list'); + // new shortcodes - functions, shortcode/single/*.php if ($pref) { foreach ($pref as $path => $namearray) { foreach ($namearray as $code => $uclass) { + $code = strtoupper($code); + if (!$this->isRegistered($code)) + { + if($this->isOverride($code)) + { + $this->registered_codes[$code]['type'] = 'override'; + $this->registered_codes[$code]['function'] = 'override_'.strtolower($code).'_shortcode'; + $this->registered_codes[$code]['path'] = e_CORE.'override/shortcodes/single/'; + $this->registered_codes[$code]['perms'] = $uclass; + continue; + } + $this->registered_codes[$code]['type'] = 'plugin'; + $this->registered_codes[$code]['function'] = strtolower($code).'_shortcode'; + $this->registered_codes[$code]['path'] = e_PLUGIN.$path.'/shortcodes/single/'; + $this->registered_codes[$code]['perms'] = $uclass; + } + } + } + } + + // legacy .sc - plugin root + if ($prefl) + { + foreach ($prefl as $path => $namearray) + { + foreach ($namearray as $code => $uclass) + { + // XXX old? investigate if ($code == 'shortcode_config') { include_once(e_PLUGIN.$path.'/shortcode_config.php'); } else { - $code = strtoupper($code); + $code = strtoupper($code); if (!$this->isRegistered($code)) { - $this->registered_codes[$code]['type'] = 'plugin'; + $this->registered_codes[$code]['type'] = 'plugin_legacy'; $this->registered_codes[$code]['path'] = $path; - $this->registered_codes[$code]['perms'] = $uclass; // XXX how we get this? + $this->registered_codes[$code]['perms'] = $uclass; } } } } } + return $this; } @@ -578,7 +609,7 @@ class e_parse_shortcode function isRegistered($code) { - return in_array($code, $this->registered_codes); + return array_key_exists($code, $this->registered_codes); } public function resetScClass($className, $object) @@ -804,6 +835,7 @@ class e_parse_shortcode case 'override': case 'func': + case 'plugin': //It is a function, so include the file and call the function $_function = $this->registered_codes[$code]['function']; if (!function_exists($_function) && $this->registered_codes[$code]['path']) @@ -811,13 +843,14 @@ class e_parse_shortcode include_once($this->registered_codes[$code]['path'].strtolower($code).'.php'); } + if (function_exists($_function)) { $ret = call_user_func($_function, $parm, $sc_mode); } break; - case 'plugin': + case 'plugin_legacy': $scFile = e_PLUGIN.strtolower($this->registered_codes[$code]['path']).'/'.strtolower($code).'.sc'; break;