From: <pdo...@us...> - 2007-02-14 05:26:00
|
Revision: 12262 http://squirrelmail.svn.sourceforge.net/squirrelmail/?rev=12262&view=rev Author: pdontthink Date: 2007-02-13 21:25:59 -0800 (Tue, 13 Feb 2007) Log Message: ----------- Readjust location of code that massages plugin versions to more handy spot Modified Paths: -------------- trunk/squirrelmail/functions/plugin.php Modified: trunk/squirrelmail/functions/plugin.php =================================================================== --- trunk/squirrelmail/functions/plugin.php 2007-02-14 04:35:23 UTC (rev 12261) +++ trunk/squirrelmail/functions/plugin.php 2007-02-14 05:25:59 UTC (rev 12262) @@ -286,6 +286,27 @@ * plugins directory). Use with care - some plugins * might break SquirrelMail when this is used. * + * By turning on the $do_parse argument, the version + * string will be parsed by SquirrelMail into a + * SquirrelMail-compatible version string (such as + * "1.2.3") if it is not already. + * + * Note that this assumes plugin versioning is + * consistently applied in the same fashion that + * SquirrelMail versions are, with the exception that + * an applicable SquirrelMail version may be appended + * to the version number (which will be ignored herein). + * That is, plugin version number schemes are expected + * in the following format: 1.2.3, or 1.2.3-1.4.0. + * + * Any characters after the third version number + * indicating things such as beta or release candidate + * versions are discarded, so formats such as the + * following will also work, although extra information + * about beta versions can possibly confuse the desired + * results of the version check: 1.2.3-beta4, 1.2.3.RC2, + * and so forth. + * * @since 1.5.2 * * @param string plugin_name name of the plugin to @@ -295,13 +316,16 @@ * @param bool force_inclusion try to get version info * for plugins not activated? * (default FALSE) + * @param bool do_parse return the plugin version + * in SquirrelMail-compatible + * format (default FALSE) * * @return mixed The plugin version string if found, otherwise, * boolean FALSE is returned indicating that no * version information could be found for the plugin. * */ -function get_plugin_version($plugin_name, $force_inclusion = FALSE) +function get_plugin_version($plugin_name, $force_inclusion = FALSE, $do_parse = FALSE) { $info_function = $plugin_name . '_info'; @@ -332,6 +356,30 @@ $plugin_version = $version_function(); + if ($plugin_version && $do_parse) + { + + // massage version number into something we understand + // + // the first regexp strips everything and anything that follows + // the first occurance of a non-digit (or non decimal point), so + // beware that putting letters in the middle of a version string + // will effectively truncate the version string right there (but + // this also just helps remove the SquirrelMail version part off + // of versions such as "1.2.3-1.4.4") + // + // the second regexp just strips out non-digits/non-decimal points + // (and might be redundant(?)) + // + // the regexps are wrapped in a trim that makes sure the version + // does not start or end with a decimal point + // + $plugin_version = trim(preg_replace(array('/[^0-9.]+.*$/', '/[^0-9.]/'), + '', $plugin_version), + '.'); + + } + return $plugin_version; } @@ -348,7 +396,7 @@ * By overriding the default value of $force_inclusion, * this function will attempt to grab versioning * information from the given plugin even if it - * is not activated (plugin still has to be + * is not activated (the plugin still has to be * unpackaged and set in place in the plugins * directory). Use with care - some plugins * might break SquirrelMail when this is used. @@ -362,11 +410,12 @@ * version number schemes are expected in the following * format: 1.2.3, or 1.2.3-1.4.0. * - * Any characters after the third number are discarded, - * so formats such as the following will also work, - * although extra information about beta versions can - * possibly confuse the desired results of the version - * check: 1.2.3-beta4, 1.2.3.RC2, and so forth. + * Any characters after the third number indicating + * things such as beta or release candidate versions + * are discarded, so formats such as the following + * will also work, although extra information about + * beta versions can possibly confuse the desired results + * of the version check: 1.2.3-beta4, 1.2.3.RC2, and so forth. * * @since 1.5.2 * @@ -389,15 +438,13 @@ $force_inclusion = FALSE) { - $plugin_version = get_plugin_version($plugin_name, $force_inclusion); + $plugin_version = get_plugin_version($plugin_name, $force_inclusion, TRUE); if (!$plugin_version) return FALSE; - // now massage version number into something we understand + // split the version string into sections delimited by + // decimal points, and make sure we have three sections // - $plugin_version = trim(preg_replace(array('/[^0-9.]+.*$/', '/[^0-9.]/'), - '', $plugin_version), - '.'); $plugin_version = explode('.', $plugin_version); if (!isset($plugin_version[0])) $plugin_version[0] = 0; if (!isset($plugin_version[1])) $plugin_version[1] = 0; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pdo...@us...> - 2007-03-20 23:17:15
|
Revision: 12343 http://squirrelmail.svn.sourceforge.net/squirrelmail/?rev=12343&view=rev Author: pdontthink Date: 2007-03-20 16:17:14 -0700 (Tue, 20 Mar 2007) Log Message: ----------- Fix loss of Modified Paths: -------------- trunk/squirrelmail/functions/plugin.php Modified: trunk/squirrelmail/functions/plugin.php =================================================================== --- trunk/squirrelmail/functions/plugin.php 2007-03-19 22:44:58 UTC (rev 12342) +++ trunk/squirrelmail/functions/plugin.php 2007-03-20 23:17:14 UTC (rev 12343) @@ -81,6 +81,12 @@ use_plugin($plugin_name); if (function_exists($function)) { $ret = $function($args, $ret); + + // each plugin can call additional hooks, so need + // to make sure the current hook name is accurate + // again after each plugin has finished + // + $currentHookName = $name; } } } @@ -148,6 +154,12 @@ if (!empty($plugin_ret)) { $ret = sqm_array_merge($ret, $plugin_ret); } + + // each plugin can call additional hooks, so need + // to make sure the current hook name is accurate + // again after each plugin has finished + // + $currentHookName = $name; } } } @@ -208,6 +220,12 @@ } else { $nay++; } + + // each plugin can call additional hooks, so need + // to make sure the current hook name is accurate + // again after each plugin has finished + // + $currentHookName = $name; } } $currentHookName = ''; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pdo...@us...> - 2008-03-11 04:13:36
|
Revision: 13027 http://squirrelmail.svn.sourceforge.net/squirrelmail/?rev=13027&view=rev Author: pdontthink Date: 2008-03-10 21:13:34 -0700 (Mon, 10 Mar 2008) Log Message: ----------- Allow plugins to require CORE plugins Modified Paths: -------------- trunk/squirrelmail/functions/plugin.php Modified: trunk/squirrelmail/functions/plugin.php =================================================================== --- trunk/squirrelmail/functions/plugin.php 2008-03-11 02:45:32 UTC (rev 13026) +++ trunk/squirrelmail/functions/plugin.php 2008-03-11 04:13:34 UTC (rev 13027) @@ -756,13 +756,16 @@ * corresponding values) will be available: * 'version' - value is the minimum version * required for that plugin (the format of - * which might vary per the value of $do_parse), - * 'activate' - value is boolean: TRUE indicates - * that the plugin must also be activated, FALSE - * means that it only needs to be present, but - * does not need to be activated. Note that - * the return value might be an empty array, - * indicating that the plugin has no dependencies. + * which might vary per the value of $do_parse + * as well as if the plugin requires a SquirrelMail + * core plugin, in which case it is "CORE" or + * "CORE:1.5.2" or similar), 'activate' - value is + * boolean: TRUE indicates that the plugin must + * also be activated, FALSE means that it only + * needs to be present, but does not need to be + * activated. Note that the return value might + * be an empty array, indicating that the plugin + * has no dependencies. * */ function get_plugin_dependencies($plugin_name, $force_inclusion = FALSE, @@ -832,10 +835,21 @@ // the regexps are wrapped in a trim that makes sure the version // does not start or end with a decimal point // - $plugin_requirements['version'] - = trim(preg_replace(array('/[^0-9.]+.*$/', '/[^0-9.]/'), - '', $plugin_requirements['version']), - '.'); + if (strpos(strtoupper($plugin_requirements['version']), 'CORE') === 0) + { + if (strpos($plugin_requirements['version'], ':') === FALSE) + $plugin_requirements['version'] = 'CORE'; + else + $plugin_requirements['version'] + = 'CORE:' . trim(preg_replace(array('/[^0-9.]+.*$/', '/[^0-9.]/'), + '', substr($plugin_requirements['version'], strpos($plugin_requirements['version'], ':') + 1)), + '.'); + } + else + $plugin_requirements['version'] + = trim(preg_replace(array('/[^0-9.]+.*$/', '/[^0-9.]/'), + '', $plugin_requirements['version']), + '.'); } @@ -913,6 +927,46 @@ foreach ($dependencies as $depend_name => $depend_requirements) { + + // check for core plugins first + // + if (strpos(strtoupper($depend_requirements['version']), 'CORE') === 0) + { + + // see if the plugin is in the core (just check if the directory exists) + // + if (!file_exists(SM_PATH . 'plugins/' . $depend_name)) + $missing_or_bad[$depend_name] = $depend_requirements; + + + // check if it is activated if need be + // + else if ($depend_requirements['activate'] && !is_plugin_enabled($depend_name)) + $missing_or_bad[$depend_name] = $depend_requirements; + + + // check if this is the right core version if one is given + // (note this is pretty useless - a plugin should specify + // whether or not it itself is compatible with this version + // of SM in the first place) + // + else if (strpos($depend_requirements['version'], ':') !== FALSE) + { + $version = explode('.', substr($depend_requirements['version'], strpos($depend_requirements['version'], ':') + 1), 3); + $version[0] = intval($version[0]); + $version[1] = intval($version[1]); + $version[2] = intval($version[2]); + + if (!check_sm_version($version[0], $version[1], $version[2])) + $missing_or_bad[$depend_name] = $depend_requirements; + } + + continue; + + } + + // check for normal plugins + // $version = explode('.', $depend_requirements['version'], 3); $version[0] = intval($version[0]); $version[1] = intval($version[1]); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |