return true;
}
+ function get_extra_capabilities() {
+ return array();
+ }
}
/**
function init() {
$this->title = get_string('feedstitle', 'block_rss_client');
- $this->version = 2007101509;
+ $this->version = 2007101511;
$this->cron = 300; /// Set min time between cron executions to 300 secs (5 mins)
}
'block/rss_client:createprivatefeeds' => array(
'captype' => 'write',
- 'contextlevel' => CONTEXT_SYSTEM,
+ 'contextlevel' => CONTEXT_BLOCK,
'legacy' => array(
'teacher' => CAP_ALLOW,
'editingteacher' => CAP_ALLOW,
'riskbitmask' => RISK_SPAM,
'captype' => 'write',
- 'contextlevel' => CONTEXT_SYSTEM,
+ 'contextlevel' => CONTEXT_BLOCK,
'legacy' => array(
'editingteacher' => CAP_ALLOW,
'admin' => CAP_ALLOW
'block/rss_client:manageownfeeds' => array(
'captype' => 'write',
- 'contextlevel' => CONTEXT_SYSTEM,
+ 'contextlevel' => CONTEXT_BLOCK,
'legacy' => array(
'teacher' => CAP_ALLOW,
'editingteacher' => CAP_ALLOW,
'riskbitmask' => RISK_SPAM,
'captype' => 'write',
- 'contextlevel' => CONTEXT_SYSTEM,
+ 'contextlevel' => CONTEXT_BLOCK,
'legacy' => array(
'admin' => CAP_ALLOW
)
'enrol/authorize:uploadcsv' => array(
'riskbitmask' => RISK_XSS,
'captype' => 'write',
- 'contextlevel' => CONTEXT_USER,
+ 'contextlevel' => CONTEXT_SYSTEM,
'legacy' => array(
'admin' => CAP_ALLOW
)
<?php // $Id$
-$plugin->version = 2008020500;
+$plugin->version = 2008020501;
$plugin->requires = 2007101507;
?>
* `component` varchar(100) NOT NULL,
*/
function fetch_context_capabilities($context) {
- global $DB;
+ global $DB, $CFG;
- $sort = 'ORDER BY contextlevel,component,id'; // To group them sensibly for display
- $params = null;
+ $sort = 'ORDER BY contextlevel,component,name'; // To group them sensibly for display
+
+ $params = array();
switch ($context->contextlevel) {
case CONTEXT_SYSTEM: // all
- $sql = "SELECT * FROM {capabilities}";
+ $SQL = "SELECT *
+ FROM {capabilities}";
break;
case CONTEXT_USER:
- $sql = "SELECT *
+ $extracaps = array('moodle/grade:viewall');
+ list($extra, $params) = $DB->get_in_or_equal($extracaps, SQL_PARAMS_NAMED, 'cap0');
+ $SQL = "SELECT *
FROM {capabilities}
- WHERE contextlevel = ".CONTEXT_USER;
+ WHERE contextlevel = ".CONTEXT_USER."
+ OR name $extra";
break;
- case CONTEXT_COURSECAT: // all
- $sql = "SELECT * FROM {capabilities}";
- break;
-
- case CONTEXT_COURSE: // all
- $sql = "SELECT * FROM {capabilities}";
+ case CONTEXT_COURSECAT: // course category context and bellow
+ $SQL = "SELECT *
+ FROM {capabilities}
+ WHERE contextlevel IN (".CONTEXT_COURSECAT.",".CONTEXT_COURSE.",".CONTEXT_MODULE.",".CONTEXT_BLOCK.")";
break;
- case CONTEXT_GROUP: // group caps
+ case CONTEXT_COURSE: // course context and bellow
+ $SQL = "SELECT *
+ FROM {capabilities}
+ WHERE contextlevel IN (".CONTEXT_COURSE.",".CONTEXT_MODULE.",".CONTEXT_BLOCK.")";
break;
case CONTEXT_MODULE: // mod caps
- $cm = $DB->get_record('course_modules', array('id'=>$context->instanceid));
+ $cm = $DB->get_record('course_modules', array('id'=>$context->instanceid));
$module = $DB->get_record('modules', array('id'=>$cm->module));
- $sql = "SELECT *
+ $extra = "";
+ $modfile = "$CFG->dirroot/mod/$module->name/lib.php";
+ if (file_exists($modfile)) {
+ include_once($modfile);
+ $modfunction = $module->name.'_get_extra_capabilities';
+ if (function_exists($modfunction)) {
+ if ($extracaps = $modfunction()) {
+ 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." AND component = ?";
- $params = array("mod/$module->name");
+ WHERE contextlevel = ".CONTEXT_MODULE."
+ AND component = :component
+ $extra";
+ $params['component'] = "mod/$module->name";
break;
case CONTEXT_BLOCK: // block caps
- $cb = $DB->get_record('block_instance', array('id'=>$context->instanceid));
+ $cb = $DB->get_record('block_instance', array('id'=>$context->instanceid));
$block = $DB->get_record('block', array('id'=>$cb->blockid));
- $sql = "SELECT *
+ $extra = "";
+ if ($blockinstance = block_instance($block->name)) {
+ if ($extracaps = $blockinstance->get_extra_capabilities()) {
+ list($extra, $params) = $DB->get_in_or_equal($extracaps, SQL_PARAMS_NAMED, 'cap0');
+ $extra = "OR name $extra";
+ }
+ }
+
+ $SQL = "SELECT *
FROM {capabilities}
- WHERE (contextlevel = ".CONTEXT_BLOCK." AND component = 'moodle') OR (component = ?)";
- $params = array("block/$block->name");
+ WHERE (contextlevel = ".CONTEXT_BLOCK."
+ AND component = :component)
+ $extra";
+ $params['component'] = "block/$block->name";
break;
default:
return false;
}
- $records = $DB->get_records_sql($sql.' '.$sort, $params);
-
-/// the rest of code is a bit hacky, think twice before modifying it :-(
-
- // special sorting of core system capabiltites and enrollments
- if (in_array($context->contextlevel, array(CONTEXT_SYSTEM, CONTEXT_COURSECAT, CONTEXT_COURSE))) {
- $first = array();
- foreach ($records as $key=>$record) {
- if (preg_match('|^moodle/|', $record->name) and $record->contextlevel == CONTEXT_SYSTEM) {
- $first[$key] = $record;
- unset($records[$key]);
- } else if (count($first)){
- break;
- }
- }
- if (count($first)) {
- $records = $first + $records; // merge the two arrays keeping the keys
- }
- } else {
- $contextindependentcaps = fetch_context_independent_capabilities();
- $records = array_merge($contextindependentcaps, $records);
+ if (!$records = $DB->get_records_sql($SQL.' '.$sort, $params)) {
+ $records = array();
}
return $records;
-
-}
-
-
-/**
- * Gets the context-independent capabilities that should be overrridable in
- * any context.
- * @return array of capability records from the capabilities table.
- */
-function fetch_context_independent_capabilities() {
- global $DB;
-
- //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 = $DB->get_record('capabilities', array('name'=>$capname));
- array_push($records, $record);
- }
- return $records;
}
'moodle/site:doanything' => array(
- 'riskbitmask' => RISK_SPAM | RISK_PERSONAL | RISK_XSS | RISK_CONFIG,
+ 'riskbitmask' => RISK_SPAM | RISK_PERSONAL | RISK_XSS | RISK_CONFIG | RISK_DATALOSS,
'captype' => 'admin',
'contextlevel' => CONTEXT_SYSTEM
'moodle/legacy:admin' => array(
- 'riskbitmask' => RISK_SPAM | RISK_PERSONAL | RISK_XSS | RISK_CONFIG,
+ 'riskbitmask' => RISK_SPAM | RISK_PERSONAL | RISK_XSS | RISK_CONFIG | RISK_DATALOSS,
'captype' => 'legacy',
'contextlevel' => CONTEXT_SYSTEM
'moodle/site:config' => array(
- 'riskbitmask' => RISK_SPAM | RISK_PERSONAL | RISK_XSS | RISK_CONFIG,
+ 'riskbitmask' => RISK_SPAM | RISK_PERSONAL | RISK_XSS | RISK_CONFIG | RISK_DATALOSS,
'captype' => 'write',
'contextlevel' => CONTEXT_SYSTEM,
'riskbitmask' => RISK_SPAM | RISK_PERSONAL | RISK_XSS,
'captype' => 'write',
- 'contextlevel' => CONTEXT_SYSTEM,
+ 'contextlevel' => CONTEXT_COURSE,
'legacy' => array(
'editingteacher' => CAP_ALLOW,
'admin' => CAP_ALLOW
'riskbitmask' => RISK_SPAM | RISK_PERSONAL | RISK_XSS,
'captype' => 'write',
- 'contextlevel' => CONTEXT_SYSTEM,
+ 'contextlevel' => CONTEXT_COURSE,
'legacy' => array(
'editingteacher' => CAP_ALLOW,
'admin' => CAP_ALLOW
'riskbitmask' => RISK_SPAM | RISK_PERSONAL | RISK_XSS,
'captype' => 'write',
- 'contextlevel' => CONTEXT_SYSTEM,
+ 'contextlevel' => CONTEXT_COURSE,
'legacy' => array(
'editingteacher' => CAP_ALLOW,
'admin' => CAP_ALLOW
'riskbitmask' => RISK_SPAM | RISK_XSS,
'captype' => 'write',
- 'contextlevel' => CONTEXT_SYSTEM,
+ 'contextlevel' => CONTEXT_BLOCK,
'legacy' => array(
'editingteacher' => CAP_ALLOW,
'admin' => CAP_ALLOW
'moodle/site:accessallgroups' => array(
'captype' => 'read',
- 'contextlevel' => CONTEXT_SYSTEM,
+ 'contextlevel' => CONTEXT_COURSE,
'legacy' => array(
'teacher' => CAP_ALLOW,
'editingteacher' => CAP_ALLOW,
'moodle/site:viewfullnames' => array(
'captype' => 'read',
- 'contextlevel' => CONTEXT_SYSTEM,
+ 'contextlevel' => CONTEXT_COURSE,
'legacy' => array(
'teacher' => CAP_ALLOW,
'editingteacher' => CAP_ALLOW,
'riskbitmask' => RISK_PERSONAL,
'captype' => 'read',
- 'contextlevel' => CONTEXT_SYSTEM,
+ 'contextlevel' => CONTEXT_COURSE,
'legacy' => array(
'teacher' => CAP_ALLOW,
'editingteacher' => CAP_ALLOW,
'riskbitmask' => RISK_XSS,
'captype' => 'write',
- 'contextlevel' => CONTEXT_SYSTEM,
+ 'contextlevel' => CONTEXT_COURSE,
'legacy' => array(
'editingteacher' => CAP_ALLOW,
'admin' => CAP_ALLOW
'moodle/user:viewdetails' => array(
'captype' => 'read',
- 'contextlevel' => CONTEXT_SYSTEM,
+ 'contextlevel' => CONTEXT_COURSE,
'legacy' => array(
'guest' => CAP_ALLOW,
'student' => CAP_ALLOW,
'riskbitmask' => RISK_PERSONAL,
'captype' => 'read',
- 'contextlevel' => CONTEXT_SYSTEM,
+ 'contextlevel' => CONTEXT_COURSE,
'legacy' => array(
'teacher' => CAP_ALLOW,
'editingteacher' => CAP_ALLOW,
'riskbitmask' => RISK_SPAM | RISK_PERSONAL | RISK_XSS,
'captype' => 'write',
- 'contextlevel' => CONTEXT_SYSTEM,
+ 'contextlevel' => CONTEXT_COURSE,
'legacy' => array(
'editingteacher' => CAP_ALLOW,
'admin' => CAP_ALLOW
'riskbitmask' => RISK_SPAM | RISK_PERSONAL | RISK_XSS,
'captype' => 'write',
- 'contextlevel' => CONTEXT_SYSTEM,
+ 'contextlevel' => CONTEXT_COURSE,
'legacy' => array(
'admin' => CAP_ALLOW
)
'riskbitmask' => RISK_SPAM,
'captype' => 'write',
- 'contextlevel' => CONTEXT_SYSTEM,
+ 'contextlevel' => CONTEXT_COURSE,
'legacy' => array(
'editingteacher' => CAP_ALLOW
)
'moodle/role:unassignself' => array(
'captype' => 'write',
- 'contextlevel' => CONTEXT_SYSTEM,
+ 'contextlevel' => CONTEXT_COURSE,
'legacy' => array(
'student' => (empty($CFG->allowunenrol)) ? CAP_INHERIT : CAP_ALLOW,
'teacher' => CAP_ALLOW,
'moodle/role:viewhiddenassigns' => array(
'captype' => 'read',
- 'contextlevel' => CONTEXT_SYSTEM,
+ 'contextlevel' => CONTEXT_COURSE,
'legacy' => array(
'teacher' => CAP_ALLOW,
'editingteacher' => CAP_ALLOW,
'riskbitmask' => RISK_XSS | RISK_PERSONAL,
'captype' => 'read',
- 'contextlevel' => CONTEXT_SYSTEM,
+ 'contextlevel' => CONTEXT_COURSE,
'legacy' => array(
'editingteacher' => CAP_ALLOW,
'admin' => CAP_ALLOW
'moodle/blog:view' => array(
'captype' => 'read',
- 'contextlevel' => CONTEXT_SYSTEM,
+ 'contextlevel' => CONTEXT_COURSE,
'legacy' => array(
'guest' => CAP_ALLOW,
'user' => CAP_ALLOW,
'riskbitmask' => RISK_SPAM,
'captype' => 'write',
- 'contextlevel' => CONTEXT_SYSTEM,
+ 'contextlevel' => CONTEXT_COURSE,
'legacy' => array(
'teacher' => CAP_ALLOW,
'editingteacher' => CAP_ALLOW,
'riskbitmask' => RISK_SPAM,
'captype' => 'write',
- 'contextlevel' => CONTEXT_SYSTEM,
+ 'contextlevel' => CONTEXT_COURSE,
'legacy' => array(
'user' => CAP_ALLOW,
'admin' => CAP_ALLOW
'riskbitmask' => RISK_SPAM,
'captype' => 'write',
- 'contextlevel' => CONTEXT_SYSTEM,
+ 'contextlevel' => CONTEXT_COURSE,
'legacy' => array(
'teacher' => CAP_ALLOW,
'editingteacher' => CAP_ALLOW,
'riskbitmask' => RISK_SPAM,
'captype' => 'write',
- 'contextlevel' => CONTEXT_SYSTEM,
+ 'contextlevel' => CONTEXT_COURSE,
'legacy' => array(
'teacher' => CAP_ALLOW,
'editingteacher' => CAP_ALLOW,
'moodle/notes:view' => array(
'captype' => 'read',
- 'contextlevel' => CONTEXT_SYSTEM,
+ 'contextlevel' => CONTEXT_COURSE,
'legacy' => array(
'teacher' => CAP_ALLOW,
'editingteacher' => CAP_ALLOW,
'riskbitmask' => RISK_SPAM,
'captype' => 'write',
- 'contextlevel' => CONTEXT_SYSTEM,
+ 'contextlevel' => CONTEXT_COURSE,
'legacy' => array(
'teacher' => CAP_ALLOW,
'editingteacher' => CAP_ALLOW,
return array('reset_assignment_submissions'=>1);
}
+/**
+ * Returns all other caps used in module
+ */
+function assignment_get_extra_capabilities() {
+ return array('moodle/site:accessallgroups', 'moodle/site:viewfullnames');
+}
+
?>
return $status;
}
+/**
+ * Returns all other caps used in module
+ */
+function chat_get_extra_capabilities() {
+ return array('moodle/site:accessallgroups', 'moodle/site:viewfullnames');
+}
+
?>
}
return $allresponses;
+}
+/**
+ * Returns all other caps used in module
+ */
+function chice_get_extra_capabilities() {
+ return array('moodle/site:accessallgroups');
}
+
?>
return $status;
}
+
+/**
+ * Returns all other caps used in module
+ */
+function data_get_extra_capabilities() {
+ return array('moodle/site:accessallgroups', 'moodle/site:viewfullnames');
+}
+
?>
'0' => get_string('openmode0', 'forum') );
}
+/**
+ * Returns all other caps used in module
+ */
+function forum_get_extra_capabilities() {
+ return array('moodle/site:accessallgroups', 'moodle/site:viewfullnames', 'moodle/site:trustcontent');
+}
+
?>
return $status;
}
+/**
+ * Returns all other caps used in module
+ */
+function glossary_get_extra_capabilities() {
+ return array('moodle/site:accessallgroups', 'moodle/site:viewfullnames', 'moodle/site:trustcontent');
+}
+
?>
}
}
+/**
+ * Returns all other caps used in module
+ */
+function hotpot_get_extra_capabilities() {
+ return array('moodle/site:accessallgroups');
+}
+
?>
return array();
}
+/**
+ * Returns all other caps used in module
+ */
+function lable_get_extra_capabilities() {
+ return array('moodle/site:accessallgroups');
+}
+
?>
return $status;
}
+/**
+ * Returns all other caps used in module
+ */
+function lesson_get_extra_capabilities() {
+ return array('moodle/site:accessallgroups');
+}
+
?>
}
return '';
}
+
+/**
+ * Returns all other caps used in module
+ */
+function quiz_get_extra_capabilities() {
+ return array(
+ 'moodle/site:accessallgroups',
+ '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',
+ );
+}
+
?>
function resource_reset_userdata($data) {
return array();
}
+
+/**
+ * Returns all other caps used in module
+ */
+function resource_get_extra_capabilities() {
+ return array('moodle/site:accessallgroups');
+}
+
?>
return $status;
}
+/**
+ * Returns all other caps used in module
+ */
+function scorm_get_extra_capabilities() {
+ return array('moodle/site:accessallgroups');
+}
+
?>
return $status;
}
+/**
+ * Returns all other caps used in module
+ */
+function survey_get_extra_capabilities() {
+ return array('moodle/site:accessallgroups');
+}
+
?>
}
}
+/**
+ * Returns all other caps used in module
+ */
+function wiki_get_extra_capabilities() {
+ return array('moodle/site:accessallgroups', 'moodle/site:viewfullnames');
+}
?>
// This is compared against the values stored in the database to determine
// whether upgrades should be performed (see lib/db/*.php)
- $version = 2008072402; // YYYYMMDD = date of the last version bump
+ $version = 2008072403; // YYYYMMDD = date of the last version bump
// XX = daily increments
$release = '2.0 dev (Build: 20080724)'; // Human-friendly version name