Index: lib/questionlib.php =================================================================== RCS file: /cvsroot/moodle/moodle/lib/questionlib.php,v retrieving revision 1.119.2.5 diff -u -r1.119.2.5 questionlib.php --- lib/questionlib.php 28 Feb 2008 12:52:59 -0000 1.119.2.5 +++ lib/questionlib.php 6 Mar 2008 21:34:28 -0000 @@ -1954,6 +1954,20 @@ } +function question_all_relevant_capabilities() { + return array( + 'moodle/question:add', + 'moodle/question:editmine', + 'moodle/question:editall', + 'moodle/question:viewmine', + 'moodle/question:viewall', + 'moodle/question:usemine', + 'moodle/question:useall', + 'moodle/question:movemine', + 'moodle/question:moveall', + 'moodle/question:managecategory', + ); +} /** * Check capability on category Index: lib/accesslib.php =================================================================== RCS file: /cvsroot/moodle/moodle/lib/accesslib.php,v retrieving revision 1.421.2.58 diff -u -r1.421.2.58 accesslib.php --- lib/accesslib.php 6 Mar 2008 02:11:53 -0000 1.421.2.58 +++ lib/accesslib.php 6 Mar 2008 21:34:27 -0000 @@ -3626,13 +3626,34 @@ } } else { $contextindependentcaps = fetch_context_independent_capabilities(); - $records = array_merge($contextindependentcaps, $records); + $extracaps = array(); + if ($context->contextlevel = CONTEXT_MODULE) { + $libfile = "$CFG->dirroot/mod/$module->name/lib.php"; + if (file_exists($libfile)) { + include_once($libfile); + $relevantcapabiltiesfunction = $module->name . '_get_relevant_capabilites'; + if (function_exists($relevantcapabiltiesfunction)) { + $extracapnames = $relevantcapabiltiesfunction(); + $extracaps = get_capabilities_by_name($extracapnames); + } + } + } + $records = $contextindependentcaps + $records + $extracaps; } return $records; } +/** + * This function should be considered private to accesslib.php + * @param array a list of capability names. + * @return array an array of capability objects, with index id. + */ +function get_capabilities_by_name($capabilities) { + return get_records_list('capabilities', 'name', + "'" . implode("','", $capabilities) . "'", 'contextlevel,component,id'); +} /** * Gets the context-independent capabilities that should be overrridable in @@ -3640,19 +3661,9 @@ * @return array of capability records from the capabilities table. */ function fetch_context_independent_capabilities() { - //only CONTEXT_SYSTEM capabilities here or it will break the hack in fetch_context_capabilities() - $contextindependentcaps = array( - 'moodle/site:accessallgroups' - ); - - $records = array(); - - foreach ($contextindependentcaps as $capname) { - $record = get_record('capabilities', 'name', $capname); - array_push($records, $record); - } - return $records; + $contextindependentcaps = array('moodle/site:accessallgroups'); + return get_capabilities_by_name($contextindependentcaps); } Index: mod/quiz/lib.php =================================================================== RCS file: /cvsroot/moodle/moodle/mod/quiz/lib.php,v retrieving revision 1.282.2.12 diff -u -r1.282.2.12 lib.php --- mod/quiz/lib.php 21 Feb 2008 12:21:44 -0000 1.282.2.12 +++ mod/quiz/lib.php 6 Mar 2008 21:34:29 -0000 @@ -231,6 +231,10 @@ return true; } +function quiz_get_relevant_capabilites() { + return question_all_relevant_capabilities(); +} + /** * @param integer $quizid the quiz id. * @param integer $userid the userid.