From 15a8ad6bffcb93a6d2ec3c7049ceb65faabd61e2 Mon Sep 17 00:00:00 2001 From: pdontthink Date: Tue, 11 Mar 2008 04:13:34 +0000 Subject: [PATCH] Allow plugins to require CORE plugins git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@13027 7612ce4b-ef26-0410-bec9-ea0150e637f0 --- functions/plugin.php | 76 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 65 insertions(+), 11 deletions(-) diff --git a/functions/plugin.php b/functions/plugin.php index 45495bc9..7dc3f4b0 100644 --- a/functions/plugin.php +++ b/functions/plugin.php @@ -756,13 +756,16 @@ function get_plugin_requirement($plugin_name, $requirement, * 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 @@ function get_plugin_dependencies($plugin_name, $force_inclusion = FALSE, // 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 @@ function check_plugin_dependencies($plugin_name, $force_inclusion = FALSE) 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]); -- 2.25.1