[geeklog-cvs] geeklog: Fixed incorrect handling of database dependencies.

geeklog-cvs at lists.geeklog.net geeklog-cvs at lists.geeklog.net
Tue Mar 15 18:06:28 EDT 2011


changeset 8173:157841c3f210
url:  http://project.geeklog.net/cgi-bin/hgwebdir.cgi/geeklog/rev/157841c3f210
user: Rouslan Placella <rouslan at placella.com>
date: Tue Mar 15 22:06:10 2011 +0000
description:
Fixed incorrect handling of database dependencies.

diffstat:

 system/lib-plugins.php |  64 ++++++++++++++++++++++++++++++++++---------------
 1 files changed, 44 insertions(+), 20 deletions(-)

diffs (116 lines):

diff -r 80b14fded968 -r 157841c3f210 system/lib-plugins.php
--- a/system/lib-plugins.php	Tue Mar 15 17:59:40 2011 -0400
+++ b/system/lib-plugins.php	Tue Mar 15 22:06:10 2011 +0000
@@ -2832,23 +2832,28 @@
 function PLG_printDependencies($pi_name, $pi_gl_version='')
 {
     global $LANG32, $_DB_dbms;
+
     $retval = '';
     $params = PLG_getParams($pi_name);
+
+    $dbAvailable  = array(); // cache the databases that are supported by the plugin
+    $dbSupported = false; // True if we support the database that the plugin is requiring
+
     if (isset($params['requires']) && count($params['requires']) > 0) { // new autoinstall type
-        foreach ($params['requires'] as $key => $value) {
+        foreach ($params['requires'] as $key => $value) { // check every requirement that is imposed by the plugin
             $name = '';
             if (isset($value['plugin'])) {
                 $name = $value['plugin'];
             } elseif (isset($value['core'])) {
-                $name = $value['core'];
+                $name = 'geeklog';
             }
             $op = '>='; // set the default
             if (isset($value['operator'])) { // optional operator included
                 $op = $value['operator']; // override default
             }
-            $ver = '0.0.0';
-            if (isset($value['version'])) {
-                $ver = $value['version'];
+            $ver = '0.0.0'; // set the default version
+            if (isset($value['version'])) { // the plugin is requiring a particular version
+                $ver = $value['version']; // override the default
             }
             if (!empty($name)) { // check for a plugin or a core requirement
                 $op = '>='; // set the default
@@ -2865,15 +2870,27 @@
                 } else if ($status == 'ok') {
                     $retval .= "<b class='status_green'>{$LANG32[51]}</b>";
                 }
-                   $retval .= "</b>";
-            } else if (isset($value['db']) && $_DB_dbms == $value['db']) { // check for a database requirement
-                $name = $value['db'];
-                $retval .= "<b class=\"notbold\" style=\"display: block; padding: 2px; margin: 0;\">$name $op $ver ";
-                if (PLG_checkAvailableDb($name, $pi_name, $ver, $op)) {
-                    $retval .= "<b class='status_green'>{$LANG32[51]}</b>";
-                } else {
-                    $retval .= "<b class='status_red'>{$LANG32[54]}</b>";
+                $retval .= "</b>";
+            } else if (isset($value['db'])){ // check for a database requirement
+                $dbAvailable[] = array($value['db'], $op, $ver); // cache the database types
+                if ($_DB_dbms == $value['db']) { // this db requirement matches the database that the site is run on
+                    $name = $value['db'];
+                    $retval .= "<b class=\"notbold\" style=\"display: block; padding: 2px; margin: 0;\">$name $op $ver ";
+                    if (PLG_checkAvailableDb($name, $pi_name, $ver, $op)) {
+                        $dbSupported = true; // the reuirement for the database is fullfilled
+                        $retval .= "<b class='status_green'>{$LANG32[51]}</b>";
+                    } else { // unsupported version
+                        $retval .= "<b class='status_red'>{$LANG32[54]}</b>";
+                    }
+                    $retval .= "</b>";
                 }
+            }
+        }
+        if (count($dbAvailable) > 0 && !$dbSupported) {
+            // the plugin requires a database, but this requirement is not fullfilled
+            foreach ($dbAvailable as $key => $value) { // print every database that would satisfy this requirement
+                $retval .= "<b class=\"notbold\" style=\"display: block; padding: 2px; margin: 0;\">{$value[0]} {$value[1]} {$value[2]} ";
+                $retval .= "<b class='status_red'>{$LANG32[54]}</b>";
                 $retval .= "</b>";
             }
         }
@@ -2906,6 +2923,9 @@
     $retval = true;
     $params = PLG_getParams($pi_name);
 
+    $dbSupported = false; // True if we support the database that the plugin is requiring
+    $dbRequired  = false; // True if the plugin needs a database
+
     if (isset($params['requires']) && count($params['requires']) > 0) { // plugin exists and uses new installer
         foreach ($params['requires'] as $key => $value) { // check for requirements
             $name = '';
@@ -2918,21 +2938,25 @@
             if (!empty($value['operator'])) { // optional operator included
                 $op = $value['operator']; // override default
             }
-            if (isset($value['version'])) {
-                $ver = $value['version'];
-            } else {
-                $ver = '0.0.0';
+            $ver = '0.0.0'; // set the default version
+            if (isset($value['version'])) { // the plugin is requiring a particular version
+                $ver = $value['version']; // override the default
             }
             if (!empty($name)) { // check for a plugin or a core requirement
                 if (PLG_checkAvailable($name, $ver, $op) != 'ok') {
                     return false;
                 }
-            } elseif (isset($value['db']) && $_DB_dbms == $value['db']) { // check for db requirements
-                if (PLG_checkAvailableDb($value['db'], $pi_name, $ver, $op) != true) {
-                    return false;
+            } elseif (isset($value['db'])) { // check for db requirements
+                $dbRequired = true; // there is at least one database requirement
+                if ($_DB_dbms == $value['db'] && PLG_checkAvailableDb($value['db'], $pi_name, $ver, $op)) {
+                    $dbSupported = true;
                 }
             }
         }
+        if ($dbRequired && !$dbSupported) {
+            // the plugin requires a database, but this requirement is not fullfilled
+            return false;
+        }
     } else { // maybe it's a plugin with a legacy installer
         $q = DB_query("SELECT * FROM {$_TABLES['plugins']} WHERE pi_name = '{$pi_name}'");
         if (DB_numRows($q)) {



More information about the geeklog-cvs mailing list