MDL-31360 Don't use get_in_or_equal if array is empty, tidy up structure of $extracap...
authorDan Marsden <dan@danmarsden.com>
Wed, 25 Jan 2012 02:21:37 +0000 (15:21 +1300)
committerDan Marsden <dan@danmarsden.com>
Fri, 27 Jan 2012 06:35:38 +0000 (19:35 +1300)
lib/accesslib.php

index 88ee394..ed61a9e 100644 (file)
@@ -6380,6 +6380,7 @@ class context_module extends context {
         }
 
         $modfile = "$CFG->dirroot/mod/$module->name/lib.php";
+        $extracaps = array();
         if (file_exists($modfile)) {
             include_once($modfile);
             $modfunction = $module->name.'_get_extra_capabilities';
@@ -6387,16 +6388,15 @@ class context_module extends context {
                 $extracaps = $modfunction();
             }
         }
-        if (empty($extracaps)) {
-            $extracaps = array();
-        }
 
         $extracaps = array_merge($subcaps, $extracaps);
-
-        list($extra, $params) = $DB->get_in_or_equal(
-            $extracaps, SQL_PARAMS_NAMED, 'cap0');
-        $extra = "OR name $extra";
-
+        $extra = '';
+        $params = array();
+        if (!empty($extracaps)) {
+            list($extra, $params) = $DB->get_in_or_equal(
+                $extracaps, SQL_PARAMS_NAMED, 'cap0');
+            $extra = "OR name $extra";
+        }
         $sql = "SELECT *
                   FROM {capabilities}
                  WHERE (contextlevel = ".CONTEXT_MODULE."