diff --git a/admin/roles/assign.php b/admin/roles/assign.php
index 0b330cc4596..e001c9c3648 100755
--- a/admin/roles/assign.php
+++ b/admin/roles/assign.php
@@ -31,41 +31,35 @@ define("MAX_USERS_TO_LIST_PER_ROLE", 10);
$contextid = required_param('contextid',PARAM_INT);
$roleid = optional_param('roleid', 0, PARAM_INT);
-$courseid = optional_param('courseid', 0, PARAM_INT); // needed for user tabs
$extendperiod = optional_param('extendperiod', 0, PARAM_INT);
$extendbase = optional_param('extendbase', 3, PARAM_INT);
list($context, $course, $cm) = get_context_info_array($contextid);
-$PAGE->set_url('/admin/roles/assign.php', array('contextid' => $contextid));
-$PAGE->set_context($context);
+$url = new moodle_url('/admin/roles/assign.php', array('contextid' => $contextid));
-$userid = 0;
-$tabfile = null;
-
-if ($course) {
- $isfrontpage = ($context->contextlevel == CONTEXT_COURSE and $context->instanceid == SITEID);
-
-} else {
- $isfrontpage = false;
+if (!$course) {
if ($context->contextlevel == CONTEXT_USER) {
- $courseid = optional_param('courseid', SITEID, PARAM_INT); // needed for user/tabs.php
- $course = $DB->get_record('course', array('id'=>$courseid), '*', MUST_EXIST);
- $PAGE->url->param('courseid', $courseid);
- $userid = $context->instanceid;
+ $course = $DB->get_record('course', array('id'=>optional_param('courseid', SITEID, PARAM_INT)), '*', MUST_EXIST);
+ $user = $DB->get_record('user', array('id'=>$context->instanceid), '*', MUST_EXIST);
+ $url->param('courseid', $course->id);
+ $url->param('userid', $user->id);
} else {
$course = $SITE;
}
}
+
// security
require_login($course, false, $cm);
require_capability('moodle/role:assign', $context);
+$PAGE->set_url($url);
$PAGE->set_context($context);
$contextname = print_context_name($context);
$courseid = $course->id;
$inmeta = $course->metacourse;
+$isfrontpage = ($course->id == SITEID);
// These are needed early because of tabs.php
list($assignableroles, $assigncounts, $nameswithcounts) = get_assignable_roles($context, ROLENAME_BOTH, true);
@@ -79,9 +73,6 @@ if ($roleid && !isset($assignableroles[$roleid])) {
print_error('cannotassignrolehere', '', get_context_url($context), $a);
}
-// Get some language strings
-$straction = get_string('assignroles', 'role'); // Used by tabs.php
-
// Work out an appropriate page title.
if ($roleid) {
$a = new stdClass;
@@ -231,50 +222,49 @@ if ($roleid) {
}
}
-// Print the header and tabs
-if ($context->contextlevel == CONTEXT_USER) {
- $user = $DB->get_record('user', array('id'=>$userid));
- $fullname = fullname($user, has_capability('moodle/site:viewfullnames', $context));
+$PAGE->set_pagelayout('admin');
+$PAGE->set_title($title);
+$tabfile = $CFG->dirroot.'/'.$CFG->admin.'/roles/tabs.php';
- /// course header
- $PAGE->set_title($title);
- if ($courseid != SITEID) {
- if (has_capability('moodle/course:viewparticipants', get_context_instance(CONTEXT_COURSE, $courseid))) {
- $PAGE->navbar->add(get_string('participants'), new moodle_url('/user/index.php', array('id'=>$courseid)));
+switch ($context->contextlevel) {
+ case CONTEXT_SYSTEM:
+ admin_externalpage_setup('assignroles', '', array('contextid' => $contextid, 'roleid' => $roleid));
+ break;
+ case CONTEXT_USER:
+ $tabfile = $CFG->dirroot.'/user/tabs.php';
+ if ($isfrontpage) {
+ $fullname = fullname($user, has_capability('moodle/site:viewfullnames', $context));
+ $PAGE->set_heading($fullname);
+ } else {
+ $PAGE->set_heading($course->fullname);
}
- $PAGE->set_heading($fullname);
- } else {
- $PAGE->set_heading($course->fullname);
- }
- $PAGE->navbar->add($fullname, new moodle_url("$CFG->wwwroot/user/view.php", array('id'=>$userid,'course'=>$courseid)));
- $PAGE->navbar->add($straction);
- echo $OUTPUT->header();
-
- $showroles = 1;
- $currenttab = 'assign';
- echo $OUTPUT->header();
- include($CFG->dirroot.'/user/tabs.php');
-
-} else if ($context->contextlevel == CONTEXT_SYSTEM) {
- admin_externalpage_setup('assignroles', '', array('contextid' => $contextid, 'roleid' => $roleid));
- echo $OUTPUT->header();
-
-} else if ($isfrontpage) {
- admin_externalpage_setup('frontpageroles', '', array('contextid' => $contextid, 'roleid' => $roleid));
- echo $OUTPUT->header();
- $currenttab = 'assign';
- include('tabs.php');
-
-} else {
- $PAGE->set_title($title);
- $PAGE->set_heading(print_context_name($context, false));
- echo $OUTPUT->header();
- $currenttab = 'assign';
- include('tabs.php');
+ $showroles = 1;
+ break;
+ case CONTEXT_COURSECAT:
+ $PAGE->set_heading("$SITE->fullname: ".get_string("categories"));
+ break;
+ case CONTEXT_COURSE:
+ if ($isfrontpage) {
+ admin_externalpage_setup('frontpageroles', '', array('contextid' => $contextid, 'roleid' => $roleid));
+ } else {
+ $PAGE->set_heading($course->fullname);
+ }
+ break;
+ case CONTEXT_MODULE:
+ $PAGE->set_heading(print_context_name($context, false));
+ $PAGE->set_cacheable(false);
+ break;
+ case CONTEXT_BLOCK:
+ $PAGE->set_heading($PAGE->course->fullname);
+ break;
}
+$currenttab = 'assign';
+echo $OUTPUT->header();
+include($tabfile);
+
// Print heading.
-echo $OUTPUT->heading_with_help($title, 'assignroles');
+echo $OUTPUT->heading_with_help($title, 'assignroles', 'role');
if ($roleid) {
// Show UI for assigning a particular role to users.
@@ -417,7 +407,9 @@ $assignurl = new moodle_url($PAGE->url, array('roleid'=>$roleid));
echo html_writer::table($table);
if ($context->contextlevel > CONTEXT_USER) {
- echo '
';
+ echo html_writer::start_tag('div', array('class'=>'backlink'));
+ echo html_writer::tag('a', get_string('backto', '', $contextname), array('href'=>get_context_url($context)));
+ echo html_writer::end_tag('div');
}
}
diff --git a/admin/roles/check.php b/admin/roles/check.php
index e12c4cd9fea..435e9cb9e74 100755
--- a/admin/roles/check.php
+++ b/admin/roles/check.php
@@ -30,19 +30,15 @@ require_once($CFG->dirroot . '/' . $CFG->admin . '/roles/lib.php');
$contextid = required_param('contextid',PARAM_INT);
list($context, $course, $cm) = get_context_info_array($contextid);
-$PAGE->set_url('/admin/roles/check.php', array('contextid' => $contextid));
-$PAGE->set_context($context);
-if ($course) {
- $isfrontpage = ($context->contextlevel == CONTEXT_COURSE and $context->instanceid == SITEID);
+$url = new moodle_url('/admin/roles/check.php', array('contextid' => $contextid));
-} else {
- $isfrontpage = false;
+if (!$course) {
if ($context->contextlevel == CONTEXT_USER) {
- $courseid = optional_param('courseid', SITEID, PARAM_INT); // needed for user/tabs.php
- $course = $DB->get_record('course', array('id'=>$courseid), '*', MUST_EXIST);
- $PAGE->url->param('courseid', $courseid);
- $userid = $context->instanceid;
+ $course = $DB->get_record('course', array('id'=>optional_param('courseid', SITEID, PARAM_INT)), '*', MUST_EXIST);
+ $user = $DB->get_record('user', array('id'=>$context->instanceid), '*', MUST_EXIST);
+ $url->param('courseid', $course->id);
+ $url->param('userid', $user->id);
} else {
$course = $SITE;
}
@@ -50,18 +46,15 @@ if ($course) {
// security first
require_login($course, false, $cm);
-$canview = has_any_capability(array('moodle/role:assign', 'moodle/role:safeoverride',
- 'moodle/role:override', 'moodle/role:manage'), $context);
-if (!$canview) {
+if (!has_any_capability(array('moodle/role:assign', 'moodle/role:safeoverride', 'moodle/role:override', 'moodle/role:manage'), $context)) {
print_error('nopermissions', 'error', '', get_string('checkpermissions', 'role'));
}
+$PAGE->set_url($url);
+$PAGE->set_context($context);
$courseid = $course->id;
$contextname = print_context_name($context);
-
-// These are needed early because of tabs.php
-$assignableroles = get_assignable_roles($context, ROLENAME_BOTH);
-$overridableroles = get_overridable_roles($context, ROLENAME_BOTH);
+$isfrontpage = ($course->id == SITEID);
// Get the user_selector we will need.
// Teachers within a course just get to see the same list of people they can
@@ -77,48 +70,53 @@ $userselector->set_rows(10);
// Work out an appropriate page title.
$title = get_string('checkpermissionsin', 'role', $contextname);
-$straction = get_string('checkpermissions', 'role'); // Used by tabs.php
-// Print the header and tabs
-if ($context->contextlevel == CONTEXT_USER) {
- $user = $DB->get_record('user', array('id' => $userid));
- $fullname = fullname($user, has_capability('moodle/site:viewfullnames', $context));
+$PAGE->set_pagelayout('admin');
+$PAGE->set_title($title);
+$tabfile = $CFG->dirroot.'/'.$CFG->admin.'/roles/tabs.php';
- $PAGE->set_title($title);
- if ($courseid != SITEID) {
- if (has_capability('moodle/course:viewparticipants', get_context_instance(CONTEXT_COURSE, $courseid))) {
- $PAGE->navbar->add(get_string('participants'), new moodle_url('/user/index.php', array('id'=>$courseid)));
+switch ($context->contextlevel) {
+ case CONTEXT_SYSTEM:
+ admin_externalpage_setup('assignroles', '', array('contextid' => $contextid, 'roleid' => $roleid));
+ break;
+ case CONTEXT_USER:
+ $tabfile = $CFG->dirroot.'/user/tabs.php';
+ if ($isfrontpage) {
+ $fullname = fullname($user, has_capability('moodle/site:viewfullnames', $context));
+ $PAGE->set_heading($fullname);
+ } else {
+ $PAGE->set_heading($course->fullname);
}
- $PAGE->set_heading($fullname);
- } else {
- $PAGE->set_heading($course->fullname);
- }
- $PAGE->navbar->add($fullname, new moodle_url("$CFG->wwwroot/user/view.php", array('id'=>$userid,'course'=>$courseid)));
- $PAGE->navbar->add($straction);
- echo $OUTPUT->header();
-
- $showroles = 1;
- $currenttab = 'check';
- include($CFG->dirroot.'/user/tabs.php');
-
-} else if ($context->contextlevel == CONTEXT_SYSTEM) {
- admin_externalpage_setup('checkpermissions', '', array('contextid' => $contextid));
- echo $OUTPUT->header();
-
-} else if ($context->contextlevel == CONTEXT_COURSE and $context->instanceid == SITEID) {
- admin_externalpage_setup('frontpageroles', '', array('contextid' => $contextid), $CFG->wwwroot . '/' . $CFG->admin . '/roles/check.php');
- echo $OUTPUT->header();
- $currenttab = 'check';
- include('tabs.php');
-
-} else {
- echo $OUTPUT->header();
- $currenttab = 'check';
- include('tabs.php');
+ $showroles = 1;
+ break;
+ case CONTEXT_COURSECAT:
+ $PAGE->set_heading("$SITE->fullname: ".get_string("categories"));
+ break;
+ case CONTEXT_COURSE:
+ if ($isfrontpage) {
+ admin_externalpage_setup('frontpageroles', '', array('contextid' => $contextid), $CFG->wwwroot . '/' . $CFG->admin . '/roles/check.php');
+ } else {
+ $PAGE->set_heading($course->fullname);
+ }
+ break;
+ case CONTEXT_MODULE:
+ $PAGE->set_heading(print_context_name($context, false));
+ $PAGE->set_cacheable(false);
+ break;
+ case CONTEXT_BLOCK:
+ $PAGE->set_heading($PAGE->course->fullname);
+ break;
}
+$currenttab = 'check';
+echo $OUTPUT->header();
+// These are needed early because of tabs.php
+$assignableroles = get_assignable_roles($context, ROLENAME_BOTH);
+$overridableroles = get_overridable_roles($context, ROLENAME_BOTH);
+include($tabfile);
+
// Print heading.
-echo $OUTPUT->heading_with_help($title, 'checkpermissions');
+echo $OUTPUT->heading_with_help($title, 'checkpermissions', 'role');
// If a user has been chosen, show all the permissions for this user.
$reportuser = $userselector->get_selected_user();
@@ -141,10 +139,10 @@ echo '';
-if (!empty($userid)) {
- echo '';
+if (!empty($user->id)) {
+ echo '';
}
-if ($courseid && $courseid != SITEID) {
+if ($isfrontpage) {
echo '';
}
@@ -159,7 +157,9 @@ echo $OUTPUT->box_end();
// Appropriate back link.
if ($context->contextlevel > CONTEXT_USER) {
- echo '';
+ echo html_writer::start_tag('div', array('class'=>'backlink'));
+ echo html_writer::tag('a', get_string('backto', '', $contextname), array('href'=>get_context_url($context)));
+ echo html_writer::end_tag('div');
}
echo $OUTPUT->footer();
diff --git a/admin/roles/override.php b/admin/roles/override.php
index 3a58eda58f4..da6e181cc09 100755
--- a/admin/roles/override.php
+++ b/admin/roles/override.php
@@ -32,22 +32,14 @@ $roleid = required_param('roleid', PARAM_INT); // requested role id
list($context, $course, $cm) = get_context_info_array($contextid);
-$PAGE->set_url('/admin/roles/override.php', array('contextid' => $contextid, 'roleid' => $roleid));
-$PAGE->set_context($context);
+$url = new moodle_url('/admin/roles/override.php', array('contextid' => $contextid, 'roleid' => $roleid));
-$userid = 0;
-$tabfile = null;
-
-if ($course) {
- $isfrontpage = ($context->contextlevel == CONTEXT_COURSE and $context->instanceid == SITEID);
-
-} else {
- $isfrontpage = false;
+if (!$course) {
if ($context->contextlevel == CONTEXT_USER) {
- $courseid = optional_param('courseid', SITEID, PARAM_INT); // needed for user/tabs.php
- $course = $DB->get_record('course', array('id'=>$courseid), '*', MUST_EXIST);
- $PAGE->url->param('courseid', $courseid);
- $userid = $context->instanceid;
+ $course = $DB->get_record('course', array('id'=>optional_param('courseid', SITEID, PARAM_INT)), '*', MUST_EXIST);
+ $user = $DB->get_record('user', array('id'=>$context->instanceid), '*', MUST_EXIST);
+ $url->param('courseid', $course->id);
+ $url->param('userid', $user->id);
} else {
$course = $SITE;
}
@@ -55,16 +47,22 @@ if ($course) {
// security first
require_login($course, false, $cm);
-$safeoverridesonly = !has_capability('moodle/role:override', $context);
-if ($safeoverridesonly) {
+if (!has_capability('moodle/role:override', $context)) {
require_capability('moodle/role:safeoverride', $context);
}
+$PAGE->set_url($url);
+$PAGE->set_context($context);
$courseid = $course->id;
+$isfrontpage = ($course->id == SITEID);
-$baseurl = $PAGE->url->out();
$returnurl = new moodle_url('/admin/roles/permissions.php', array('contextid' => $context->id));
+// Handle the cancel button.
+if (optional_param('cancel', false, PARAM_BOOL)) {
+ redirect($returnurl);
+}
+
$role = $DB->get_record('role', array('id'=>$roleid), '*', MUST_EXIST);
// These are needed early because of tabs.php
@@ -77,46 +75,43 @@ $straction = get_string('overrideroles', 'role'); // Used by tabs.php
$a = (object)array('context' => $contextname, 'role' => $overridableroles[$roleid]);
$title = get_string('overridepermissionsforrole', 'role', $a);
-// Print the header and tabs
-if ($context->contextlevel == CONTEXT_SYSTEM) {
- print_error('cannotoverridebaserole', 'error');
+$tabfile = $CFG->dirroot.'/'.$CFG->admin.'/roles/tabs.php';
+$currenttab = 'permissions';
-} else if ($context->contextlevel == CONTEXT_USER) {
- // NOTE: this is not linked from UI for now
- $userid = $context->instanceid;
- $user = $DB->get_record('user', array('id'=>$userid, 'deleted'=>0), '*', MUST_EXIST);
- $fullname = fullname($user, has_capability('moodle/site:viewfullnames', $context));
-
- // course header
- if ($isfrontpage) {
- $PAGE->set_heading($course->fullname);
- } else {
- if (has_capability('moodle/course:viewparticipants', get_context_instance(CONTEXT_COURSE, $courseid))) {
- $PAGE->navbar->add(get_string('participants'), new moodle_url('/user/index.php', array('id'=>$courseid)));
+$PAGE->set_pagelayout('admin');
+$PAGE->set_title($title);
+$PAGE->navbar->add($straction);
+switch ($context->contextlevel) {
+ case CONTEXT_SYSTEM:
+ print_error('cannotoverridebaserole', 'error');
+ break;
+ case CONTEXT_USER:
+ $tabfile = $CFG->dirroot.'/user/tabs.php';
+ if ($isfrontpage) {
+ $fullname = fullname($user, has_capability('moodle/site:viewfullnames', $context));
+ $PAGE->set_heading($fullname);
+ } else {
+ $PAGE->set_heading($course->fullname);
}
- $PAGE->set_heading($fullname);
- }
- $PAGE->navbar->add($fullname, new moodle_url("$CFG->wwwroot/user/view.php", array('id'=>$userid,'course'=>$courseid)));
- $PAGE->navbar->add($straction);
-
- $showroles = 1;
- $currenttab = 'permissions';
- $tabfile = $CFG->dirroot.'/user/tabs.php';
-
-} else if ($isfrontpage) {
- admin_externalpage_setup('frontpageroles', '', array(), $PAGE->url);
- $currenttab = 'permissions';
- $tabfile = 'tabs.php';
-
-} else {
- $currenttab = 'permissions';
- $tabfile = 'tabs.php';
-}
-
-
-// Handle the cancel button.
-if (optional_param('cancel', false, PARAM_BOOL)) {
- redirect($returnurl);
+ $showroles = 1;
+ break;
+ case CONTEXT_COURSECAT:
+ $PAGE->set_heading("$SITE->fullname: ".get_string("categories"));
+ break;
+ case CONTEXT_COURSE:
+ if ($isfrontpage) {
+ admin_externalpage_setup('frontpageroles', '', array(), $PAGE->url);
+ } else {
+ $PAGE->set_heading($course->fullname);
+ }
+ break;
+ case CONTEXT_MODULE:
+ $PAGE->set_heading(print_context_name($context, false));
+ $PAGE->set_cacheable(false);
+ break;
+ case CONTEXT_BLOCK:
+ $PAGE->set_heading($PAGE->course->fullname);
+ break;
}
// Make sure this user can override that role
@@ -128,7 +123,7 @@ if (empty($overridableroles[$roleid])) {
}
// If we are actually overriding a role, create the table object, and save changes if appropriate.
-$overridestable = new override_permissions_table_advanced($context, $roleid, $safeoverridesonly);
+$overridestable = new override_permissions_table_advanced($context, $roleid, false);
$overridestable->read_submitted_permissions();
if (optional_param('savechanges', false, PARAM_BOOL) && confirm_sesskey()) {
@@ -140,10 +135,8 @@ if (optional_param('savechanges', false, PARAM_BOOL) && confirm_sesskey()) {
// Finally start page output
echo $OUTPUT->header();
-if ($tabfile) {
- include($tabfile);
-}
-echo $OUTPUT->heading_with_help($title, 'overrides');
+include($tabfile);
+echo $OUTPUT->heading_with_help($title, 'overrides', 'role');
// Show UI for overriding roles.
if (!empty($capabilities)) {
@@ -152,37 +145,32 @@ if (!empty($capabilities)) {
} else {
// Print the capabilities overrideable in this context
echo $OUTPUT->box_start('generalbox capbox');
+ echo html_writer::start_tag('form', array('id'=>'overrideform', 'action'=>$PAGE->url->out(), 'method'=>'post'));
+ echo html_writer::start_tag('div');
+ echo html_writer::empty_tag('input', array('type'=>'hidden', 'name'=>'sesskey', 'value'=>sesskey()));
+ echo html_writer::empty_tag('input', array('type'=>'hidden', 'name'=>'roleid', 'value'=>$roleid));
+ echo html_writer::tag('p', get_string('highlightedcellsshowinherit', 'role'), array('class'=>'overridenotice'));
+
+ $overridestable->display();
+ if ($overridestable->has_locked_capabiltites()) {
+ echo '' . get_string('safeoverridenotice', 'role') . "
\n";
+ }
- ?>
-
- 'submit_buttons'));
+ echo html_writer::empty_tag('input', array('type'=>'submit', 'name'=>'savechanges', 'value'=>get_string('savechanges')));
+ echo html_writer::empty_tag('input', array('type'=>'submit', 'name'=>'cancel', 'value'=>get_string('cancel')));
+ echo html_writer::end_tag('div');
+ echo html_writer::end_tag('div');
+ echo html_writer::end_tag('form');
echo $OUTPUT->box_end();
-
}
// Print a form to swap roles, and a link back to the all roles list.
-echo '';
-$select = new single_select(new moodle_url($baseurl), 'roleid', $nameswithcounts, $roleid, null);
+echo html_writer::start_tag('div', array('class'=>'backlink'));
+$select = new single_select($PAGE->url, 'roleid', $nameswithcounts, $roleid, null);
$select->label = get_string('overrideanotherrole', 'role');
echo $OUTPUT->render($select);
-echo '
' . get_string('backtoallroles', 'role') . '
';
-echo '
';
+echo html_writer::tag('p', html_writer::tag('a', get_string('backtoallroles', 'role'), array('href'=>$returnurl)));
+echo html_writer::end_tag('div');
echo $OUTPUT->footer();
diff --git a/admin/roles/permissions.php b/admin/roles/permissions.php
index 062a164c7c6..4d131b188bf 100644
--- a/admin/roles/permissions.php
+++ b/admin/roles/permissions.php
@@ -40,22 +40,14 @@ $prohibit = optional_param('prohibit', 0, PARAM_BOOL);
list($context, $course, $cm) = get_context_info_array($contextid);
-$PAGE->set_url('/admin/roles/permissions.php', array('contextid' => $contextid));
-$PAGE->set_context($context);
+$url = new moodle_url('/admin/roles/permissions.php', array('contextid' => $contextid));
-$userid = 0;
-$tabfile = null;
-
-if ($course) {
- $isfrontpage = ($context->contextlevel == CONTEXT_COURSE and $context->instanceid == SITEID);
-
-} else {
- $isfrontpage = false;
+if (!$course) {
if ($context->contextlevel == CONTEXT_USER) {
- $courseid = optional_param('courseid', SITEID, PARAM_INT); // needed for user/tabs.php
- $course = $DB->get_record('course', array('id'=>$courseid), '*', MUST_EXIST);
- $PAGE->url->param('courseid', $courseid);
- $userid = $context->instanceid;
+ $course = $DB->get_record('course', array('id'=>optional_param('courseid', SITEID, PARAM_INT)), '*', MUST_EXIST);
+ $user = $DB->get_record('user', array('id'=>$context->instanceid), '*', MUST_EXIST);
+ $url->param('courseid', $course->id);
+ $url->param('userid', $user->id);
} else {
$course = $SITE;
}
@@ -64,14 +56,15 @@ if ($course) {
// security first
require_login($course, false, $cm);
require_capability('moodle/role:review', $context);
-
+$PAGE->set_url($url);
+$PAGE->set_context($context);
$courseid = $course->id;
+$isfrontpage = ($course->id == SITEID);
// These are needed early because of tabs.php
$assignableroles = get_assignable_roles($context, ROLENAME_BOTH);
list($overridableroles, $overridecounts, $nameswithcounts) = get_overridable_roles($context, ROLENAME_BOTH, true);
-
if ($capability) {
$capability = $DB->get_record('capabilities', array('name'=>$capability), '*', MUST_EXIST);
}
@@ -82,154 +75,124 @@ $allowsafeoverrides = has_capability('moodle/role:safeoverride', $context);
$contextname = print_context_name($context);
$title = get_string('permissionsincontext', 'role', $contextname);
$straction = get_string('permissions', 'role'); // Used by tabs.php
+$tabfile = $CFG->dirroot.'/'.$CFG->admin.'/roles/tabs.php';
+$currenttab = 'permissions';
+
+$PAGE->set_pagelayout('admin');
$PAGE->set_title($title);
-
-// Print the header and tabs
-if ($context->contextlevel == CONTEXT_SYSTEM) {
- print_error('cannotoverridebaserole', 'error');
-
-} else if ($context->contextlevel == CONTEXT_USER) {
- // NOTE: this is not linked from UI for now
- $userid = $context->instanceid;
- $user = $DB->get_record('user', array('id'=>$userid, 'deleted'=>0), '*', MUST_EXIST);
- $fullname = fullname($user, has_capability('moodle/site:viewfullnames', $context));
-
- // course header
- if ($isfrontpage) {
- $PAGE->set_heading($course->fullname);
- } else {
- if (has_capability('moodle/course:viewparticipants', get_context_instance(CONTEXT_COURSE, $courseid))) {
- $PAGE->navbar->add(get_string('participants'), new moodle_url('/user/index.php', array('id'=>$courseid)));
+switch ($context->contextlevel) {
+ case CONTEXT_SYSTEM:
+ print_error('cannotoverridebaserole', 'error');
+ break;
+ case CONTEXT_USER:
+ $tabfile = $CFG->dirroot.'/user/tabs.php';
+ if ($isfrontpage) {
+ $fullname = fullname($user, has_capability('moodle/site:viewfullnames', $context));
+ $PAGE->set_heading($fullname);
+ } else {
+ $PAGE->set_heading($course->fullname);
}
- $PAGE->set_heading($fullname);
- }
- $PAGE->navbar->add($fullname, new moodle_url("$CFG->wwwroot/user/view.php", array('id'=>$userid,'course'=>$courseid)));
- $PAGE->navbar->add($straction);
-
- $showroles = 1;
- $currenttab = 'permissions';
- $tabfile = $CFG->dirroot.'/user/tabs.php';
-
-} else if ($isfrontpage) {
- admin_externalpage_setup('frontpageroles', '', array(), $PAGE->url);
- $currenttab = 'permissions';
- $tabfile = 'tabs.php';
-
-} else {
- $currenttab = 'permissions';
- $tabfile = 'tabs.php';
+ $showroles = 1;
+ break;
+ case CONTEXT_COURSECAT:
+ $PAGE->set_heading("$SITE->fullname: ".get_string("categories"));
+ break;
+ case CONTEXT_COURSE:
+ if ($isfrontpage) {
+ admin_externalpage_setup('frontpageroles', '', array(), $PAGE->url);
+ } else {
+ $PAGE->set_heading($course->fullname);
+ }
+ break;
+ case CONTEXT_MODULE:
+ $PAGE->set_heading(print_context_name($context, false));
+ $PAGE->set_cacheable(false);
+ break;
+ case CONTEXT_BLOCK:
+ $PAGE->set_heading($PAGE->course->fullname);
+ break;
}
// handle confirmations and actions
-if ($prevent and isset($overridableroles[$roleid]) and $capability) {
- if ($allowoverrides or ($allowsafeoverrides and is_safe_capability($capability))) {
- if ($confirm and data_submitted() and confirm_sesskey()) {
- role_change_permission($roleid, $context, $capability->name, CAP_PREVENT);
- redirect($PAGE->url);
+// We have a capability and overrides are allowed or safe overrides are allowed and this is safe
+if ($capability && ($allowoverrides || ($allowsafeoverrides && is_safe_capability($capability)))) {
+ // If we already know the the role ID, it is overrideable, and we are setting prevent or unprohibit
+ if (isset($overridableroles[$roleid]) && ($prevent || $unprohibit)) {
+ // We are preventing
+ if ($prevent) {
+ if ($confirm && data_submitted() && confirm_sesskey()) {
+ role_change_permission($roleid, $context, $capability->name, CAP_PREVENT);
+ redirect($PAGE->url);
- } else {
- $a = (object)array('cap'=>get_capability_docs_link($capability)." ($capability->name)", 'role'=>$overridableroles[$roleid], 'context'=>$contextname);
- $message = get_string('confirmroleprevent', 'role', $a);
- $continueurl = new moodle_url($PAGE->url, array('contextid'=>$context->id, 'roleid'=>$roleid, 'capability'=>$capability->name, 'prevent'=>1, 'sesskey'=>sesskey(), 'confirm'=>1));
-
- echo $OUTPUT->header();
- if ($tabfile) {
- include($tabfile);
+ } else {
+ $a = (object)array('cap'=>get_capability_docs_link($capability)." ($capability->name)", 'role'=>$overridableroles[$roleid], 'context'=>$contextname);
+ $message = get_string('confirmroleprevent', 'role', $a);
+ $continueurl = new moodle_url($PAGE->url, array('contextid'=>$context->id, 'roleid'=>$roleid, 'capability'=>$capability->name, 'prevent'=>1, 'sesskey'=>sesskey(), 'confirm'=>1));
}
- echo $OUTPUT->heading($title);
- echo $OUTPUT->confirm($message, $continueurl, $PAGE->url);
- echo $OUTPUT->footer();
- die;
}
+ // We are unprohibiting
+ if ($unprohibit) {
+ if ($confirm && data_submitted() && confirm_sesskey()) {
+ role_change_permission($roleid, $context, $capability->name, CAP_INHERIT);
+ redirect($PAGE->url);
+ } else {
+ $a = (object)array('cap'=>get_capability_docs_link($capability)." ($capability->name)", 'role'=>$overridableroles[$roleid], 'context'=>$contextname);
+ $message = get_string('confirmroleunprohibit', 'role', $a);
+ $continueurl = new moodle_url($PAGE->url, array('contextid'=>$context->id, 'roleid'=>$roleid, 'capability'=>$capability->name, 'unprohibit'=>1, 'sesskey'=>sesskey(), 'confirm'=>1));
+ }
+ }
+ // Display and print
+ echo $OUTPUT->header();
+ include($tabfile);
+ echo $OUTPUT->heading($title);
+ echo $OUTPUT->confirm($message, $continueurl, $PAGE->url);
+ echo $OUTPUT->footer();
+ die;
}
-}
-if ($unprohibit and isset($overridableroles[$roleid]) and $capability) {
- if ($allowoverrides or ($allowsafeoverrides and is_safe_capability($capability))) {
- if ($confirm and data_submitted() and confirm_sesskey()) {
- role_change_permission($roleid, $context, $capability->name, CAP_INHERIT);
- redirect($PAGE->url);
-
- } else {
- $a = (object)array('cap'=>get_capability_docs_link($capability)." ($capability->name)", 'role'=>$overridableroles[$roleid], 'context'=>$contextname);
- $message = get_string('confirmroleunprohibit', 'role', $a);
- $continueurl = new moodle_url($PAGE->url, array('contextid'=>$context->id, 'roleid'=>$roleid, 'capability'=>$capability->name, 'unprohibit'=>1, 'sesskey'=>sesskey(), 'confirm'=>1));
-
- echo $OUTPUT->header();
- if ($tabfile) {
- include($tabfile);
+ if ($allow || $prohibit) {
+ if ($allow) {
+ $mform = new role_allow_form(null, array($context, $capability, $overridableroles));
+ if ($mform->is_cancelled()) {
+ redirect($PAGE->url);
+ } else if ($data = $mform->get_data() and !empty($data->roleid)) {
+ $roleid = $data->roleid;
+ if (isset($overridableroles[$roleid])) {
+ role_change_permission($roleid, $context, $capability->name, CAP_ALLOW);
+ }
+ redirect($PAGE->url);
+ } else {
+ $a = (object)array('cap'=>get_capability_docs_link($capability)." ($capability->name)", 'context'=>$contextname);
+ $message = get_string('roleallowinfo', 'role', $a);
}
- echo $OUTPUT->heading($title);
- echo $OUTPUT->confirm($message, $continueurl, $PAGE->url);
- echo $OUTPUT->footer();
- die;
}
- }
-}
-
-if ($allow and $capability) {
- if ($allowoverrides or ($allowsafeoverrides and is_safe_capability($capability))) {
- $mform = new role_allow_form(null, array($context, $capability, $overridableroles));
- if ($mform->is_cancelled()) {
- redirect($PAGE->url);
-
- } else if ($data = $mform->get_data() and !empty($data->roleid)) {
- $roleid = $data->roleid;
- if (isset($overridableroles[$roleid])) {
- role_change_permission($roleid, $context, $capability->name, CAP_ALLOW);
+ if ($prohibit) {
+ $mform = new role_prohibit_form(null, array($context, $capability, $overridableroles));
+ if ($mform->is_cancelled()) {
+ redirect($PAGE->url);
+ } else if ($data = $mform->get_data() and !empty($data->roleid)) {
+ $roleid = $data->roleid;
+ if (isset($overridableroles[$roleid])) {
+ role_change_permission($roleid, $context, $capability->name, CAP_PROHIBIT);
+ }
+ redirect($PAGE->url);
+ } else {
+ $a = (object)array('cap'=>get_capability_docs_link($capability)." ($capability->name)", 'context'=>$contextname);
+ $message = get_string('roleprohibitinfo', 'role', $a);
}
- redirect($PAGE->url);
-
- } else {
- $a = (object)array('cap'=>get_capability_docs_link($capability)." ($capability->name)", 'context'=>$contextname);
- $message = get_string('roleallowinfo', 'role', $a);
-
- echo $OUTPUT->header();
- if ($tabfile) {
- include($tabfile);
- }
- echo $OUTPUT->heading($title);
- echo $OUTPUT->box($message);
- $mform->display();
- echo $OUTPUT->footer();
- die;
- }
- }
-}
-
-if ($prohibit and $capability) {
- if ($allowoverrides or ($allowsafeoverrides and is_safe_capability($capability))) {
- $mform = new role_prohibit_form(null, array($context, $capability, $overridableroles));
- if ($mform->is_cancelled()) {
- redirect($PAGE->url);
-
- } else if ($data = $mform->get_data() and !empty($data->roleid)) {
- $roleid = $data->roleid;
- if (isset($overridableroles[$roleid])) {
- role_change_permission($roleid, $context, $capability->name, CAP_PROHIBIT);
- }
- redirect($PAGE->url);
-
- } else {
- $a = (object)array('cap'=>get_capability_docs_link($capability)." ($capability->name)", 'context'=>$contextname);
- $message = get_string('roleprohibitinfo', 'role', $a);
-
- echo $OUTPUT->header();
- if ($tabfile) {
- include($tabfile);
- }
- echo $OUTPUT->box($message);
- $mform->display();
- echo $OUTPUT->footer();
- die;
}
+ echo $OUTPUT->header();
+ include($tabfile);
+ echo $OUTPUT->heading($title);
+ echo $OUTPUT->box($message);
+ $mform->display();
+ echo $OUTPUT->footer();
+ die;
}
}
echo $OUTPUT->header();
-if ($tabfile) {
- include($tabfile);
-}
+include($tabfile);
echo $OUTPUT->heading($title);
$table = new permissions_table($context, $contextname, $allowoverrides, $allowsafeoverrides, $overridableroles);
@@ -239,14 +202,16 @@ if ($overridableroles) {
$overrideurl = new moodle_url('/admin/roles/override.php', array('contextid' => $context->id));
$select = new single_select($overrideurl, 'roleid', $nameswithcounts);
$select->label = get_string('advancedoverride', 'role');
- echo ''.$OUTPUT->render($select).'
';
+ echo html_writer::tag('div', $OUTPUT->render($select), array('class'=>'advancedoverride'));
}
$table->display();
echo $OUTPUT->box_end();
if ($context->contextlevel > CONTEXT_USER) {
- echo '';
+ echo html_writer::start_tag('div', array('class'=>'backlink'));
+ echo html_writer::tag('a', get_string('backto', '', $contextname), array('href'=>get_context_url($context)));
+ echo html_writer::end_tag('div');
}
echo $OUTPUT->footer($course);
diff --git a/admin/roles/tabs.php b/admin/roles/tabs.php
index 6dac7bdd6e1..6c69a06efb9 100755
--- a/admin/roles/tabs.php
+++ b/admin/roles/tabs.php
@@ -38,90 +38,6 @@ if (!isset($availablefilters)) {
}
}
-if ($currenttab != 'update') {
- switch ($context->contextlevel) {
-
- case CONTEXT_SYSTEM:
- $stradministration = get_string('administration');
- if (empty($title)) {
- $title = $SITE->fullname;
- }
- $PAGE->navbar->add($stradministration, new moodle_url('/admin/'), navigation_node::TYPE_SETTING);
- $PAGE->navbar->add($straction);
- $PAGE->set_title($title);
- $PAGE->set_heading($SITE->fullname);
- break;
-
- case CONTEXT_USER:
- break;
-
- case CONTEXT_COURSECAT:
- $category = $DB->get_record('course_categories', array('id'=>$context->instanceid));
- $strcategories = get_string("categories");
- $strcategory = get_string("category");
- $strcourses = get_string("courses");
-
- if (empty($title)) {
- $title = "$SITE->shortname: $category->name";
- }
-
- $PAGE->navbar->add($strcategories, new moodle_url('/course/index.php'), navigation_node::TYPE_SETTING);
- $PAGE->navbar->add($category->name, new moodle_url('/course/category.php', array('id'=>$category->id)), navigation_node::TYPE_SETTING);
- $PAGE->navbar->add(get_string("roles"));
- $PAGE->set_title($title);
- $PAGE->set_heading("$SITE->fullname: $strcourses");
- break;
-
- case CONTEXT_COURSE:
- if ($context->instanceid != SITEID) {
- $course = $DB->get_record('course', array('id'=>$context->instanceid));
-
- if (empty($title)) {
- $title = get_string("editcoursesettings");
- }
- $roleslink = new moodle_url("$CFG->wwwroot/$CFG->admin/roles/assign.php", array('contextid'=>$context->id));
- $PAGE->navbar->add(get_string('roles'), $roleslink, navigation_node::TYPE_SETTING);
- $PAGE->set_title($title);
- $PAGE->set_heading($course->fullname);
- }
- break;
-
- case CONTEXT_MODULE:
- if (!$cm = get_coursemodule_from_id('', $context->instanceid)) {
- print_error('invalidcoursemodule', 'error');
- }
- if (!$course = $DB->get_record('course', array('id' => $cm->course))) {
- print_error('invalidcourse');
- }
-
- $PAGE->navigation->add(get_string('roles'));
-
- if (empty($title)) {
- $title = get_string("editinga", "moodle", $fullmodulename);
- }
- $PAGE->set_title($title);
- $PAGE->set_cacheable(false);
- break;
-
- case CONTEXT_BLOCK:
- if ($blockinstance = $DB->get_record('block_instances', array('id' => $context->instanceid))) {
- $blockname = print_context_name($context);
-
- $PAGE->navbar->add($blockname);
- $PAGE->navbar->add($straction);
- $PAGE->set_title("$straction: $blockname");
- $PAGE->set_heading($PAGE->course->fullname);
- }
- break;
-
- default:
- print_error('unknowncontext');
- return false;
-
- }
-}
-
-
$toprow = array();
$inactive = array();
$activetwo = array();
@@ -132,27 +48,23 @@ $permissionsrow = array();
if ($context->contextlevel != CONTEXT_SYSTEM) { // Print tabs for anything except SYSTEM context
if ($context->contextlevel == CONTEXT_MODULE) { // Only show update button if module
- $toprow[] = new tabobject('update', $CFG->wwwroot.'/course/mod.php?update='.
- $context->instanceid.'&return=true&sesskey='.sesskey(), get_string('settings'));
+ $url = new moodle_url('/course/mod.php', array('update'=>$context->instanceid, 'return'=>'true', 'sesskey'=>sesskey()));
+ $toprow[] = new tabobject('update', $url, get_string('settings'));
}
if (!empty($assignableroles) || $currenttab=='assign') {
- $toprow[] = new tabobject('assign',
- new moodle_url('/admin/roles/assign.php', array('contextid'=>$context->id)),
- get_string('localroles', 'role'), '', true);
+ $url = new moodle_url('/admin/roles/assign.php', array('contextid'=>$context->id));
+ $toprow[] = new tabobject('assign', $url, get_string('localroles', 'role'), '', true);
}
if (has_capability('moodle/role:review', $context) or !empty($overridableroles)) {
- $permissionsrow['permissions'] = new tabobject('permissions',
- new moodle_url('/admin/roles/permissions.php', array('contextid'=>$context->id)),
- get_string('permissions', 'role'), '', true);
+ $url = new moodle_url('/admin/roles/permissions.php', array('contextid'=>$context->id));
+ $permissionsrow['permissions'] = new tabobject('permissions', $url, get_string('permissions', 'role'), '', true);
}
- if (has_any_capability(array('moodle/role:assign', 'moodle/role:safeoverride',
- 'moodle/role:override', 'moodle/role:assign'), $context)) {
- $permissionsrow['check'] = new tabobject('check',
- new moodle_url('/admin/roles/check.php', array('contextid'=>$context->id)),
- get_string('checkpermissions', 'role'));
+ if (has_any_capability(array('moodle/role:assign', 'moodle/role:safeoverride', 'moodle/role:override', 'moodle/role:assign'), $context)) {
+ $url = new moodle_url('/admin/roles/check.php', array('contextid'=>$context->id));
+ $permissionsrow['check'] = new tabobject('check', $url, get_string('checkpermissions', 'role'));
}
if ($permissionsrow) {
@@ -166,9 +78,8 @@ if ($context->contextlevel != CONTEXT_SYSTEM) { // Print tabs for anything ex
}
if (!empty($availablefilters)) {
- $toprow[] = new tabobject('filters',
- new moodle_url('/filter/manage.php', array('contextid'=>$context->id)),
- get_string('filters', 'admin'));
+ $url = new moodle_url('/filter/manage.php', array('contextid'=>$context->id));
+ $toprow[] = new tabobject('filters', $url, get_string('filters', 'admin'));
}
}
unset($permissionsrow);
diff --git a/course/modedit.php b/course/modedit.php
index 2d8b97660ed..cf6109c27a1 100644
--- a/course/modedit.php
+++ b/course/modedit.php
@@ -16,623 +16,584 @@
// along with Moodle. If not, see .
/**
- * Adds or updates modules in a course using new formslib
- *
- * @package moodlecore
- * @copyright 1999 onwards Martin Dougiamas (http://dougiamas.com)
- * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
- */
+* Adds or updates modules in a course using new formslib
+*
+* @package moodlecore
+* @copyright 1999 onwards Martin Dougiamas (http://dougiamas.com)
+* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+*/
- require_once("../config.php");
- require_once("lib.php");
- require_once($CFG->libdir.'/filelib.php');
- require_once($CFG->libdir.'/gradelib.php');
- require_once($CFG->libdir.'/completionlib.php');
- require_once($CFG->libdir.'/conditionlib.php');
+require_once("../config.php");
+require_once("lib.php");
+require_once($CFG->libdir.'/filelib.php');
+require_once($CFG->libdir.'/gradelib.php');
+require_once($CFG->libdir.'/completionlib.php');
+require_once($CFG->libdir.'/conditionlib.php');
- $add = optional_param('add', '', PARAM_ALPHA); // module name
- $update = optional_param('update', 0, PARAM_INT);
- $return = optional_param('return', 0, PARAM_BOOL); //return to course/view.php if false or mod/modname/view.php if true
- $type = optional_param('type', '', PARAM_ALPHANUM); //TODO: hopefully will be removed in 2.0
+$add = optional_param('add', '', PARAM_ALPHA); // module name
+$update = optional_param('update', 0, PARAM_INT);
+$return = optional_param('return', 0, PARAM_BOOL); //return to course/view.php if false or mod/modname/view.php if true
+$type = optional_param('type', '', PARAM_ALPHANUM); //TODO: hopefully will be removed in 2.0
- $url = new moodle_url('/course/modedit.php');
- if (!empty($add)) {
- $url->param('add', $add);
- } else if (!empty($update)) {
- $url->param('update', $update);
+$url = new moodle_url('/course/modedit.php');
+if (!empty($return)) {
+ $url->param('return', $return);
+}
+
+if (!empty($add)) {
+ $url->param('add', $add);
+ $PAGE->set_url($url);
+
+ $section = required_param('section', PARAM_INT);
+ $course = required_param('course', PARAM_INT);
+
+ $course = $DB->get_record('course', array('id'=>$course), '*', MUST_EXIST);
+ $module = $DB->get_record('modules', array('name'=>$add), '*', MUST_EXIST);
+
+ require_login($course);
+ $context = get_context_instance(CONTEXT_COURSE, $course->id);
+ require_capability('moodle/course:manageactivities', $context);
+
+ $cw = get_course_section($section, $course->id);
+
+ if (!course_allowed_module($course, $module->id)) {
+ print_error('moduledisable');
+ }
+
+ $cm = null;
+
+ $data = new object();
+ $data->section = $section; // The section number itself - relative!!! (section column in course_sections)
+ $data->visible = $cw->visible;
+ $data->course = $course->id;
+ $data->module = $module->id;
+ $data->modulename = $module->name;
+ $data->groupmode = $course->groupmode;
+ $data->groupingid = $course->defaultgroupingid;
+ $data->groupmembersonly = 0;
+ $data->id = '';
+ $data->instance = '';
+ $data->coursemodule = '';
+ $data->add = $add;
+ $data->return = 0; //must be false if this is an add, go back to course view on cancel
+
+ if (plugin_supports('mod', $data->modulename, FEATURE_MOD_INTRO, true)) {
+ $draftid_editor = file_get_submitted_draft_itemid('introeditor');
+ file_prepare_draft_area($draftid_editor, null, null, null);
+ $data->introeditor = array('text'=>'', 'format'=>FORMAT_HTML, 'itemid'=>$draftid_editor); // TODO: add better default
+ }
+
+ if (!empty($type)) { //TODO: hopefully will be removed in 2.0
+ $data->type = $type;
+ }
+
+ $sectionname = get_section_name($course->format);
+ $fullmodulename = get_string('modulename', $module->name);
+
+ if ($data->section && $course->format != 'site') {
+ $heading = new object();
+ $heading->what = $fullmodulename;
+ $heading->to = "$sectionname $data->section";
+ $pageheading = get_string('addinganewto', 'moodle', $heading);
} else {
- debugging('Neither add nor update arguments were provided, PAGE->set_url needs to be checked', DEBUG_DEVELOPER);
- }
- if (!empty($return)) {
- $url->param('return', $return);
- }
- if (!empty($type)) {
- $url->param('type', $type);
+ $pageheading = get_string('addinganew', 'moodle', $fullmodulename);
}
+
+} else if (!empty($update)) {
+
+ $url->param('update', $update);
$PAGE->set_url($url);
- if (!empty($add)) {
- $section = required_param('section', PARAM_INT);
- $course = required_param('course', PARAM_INT);
+ $cm = get_coursemodule_from_id('', $update, 0, false, MUST_EXIST);
+ $course = $DB->get_record('course', array('id'=>$cm->course), '*', MUST_EXIST);
- if (!$course = $DB->get_record('course', array('id'=>$course))) {
- print_error('invalidcourseid');
+ require_login($course, false, $cm); // needed to setup proper $COURSE
+ $context = get_context_instance(CONTEXT_MODULE, $cm->id);
+ require_capability('moodle/course:manageactivities', $context);
+
+ $module = $DB->get_record('modules', array('id'=>$cm->module), '*', MUST_EXIST);
+ $data = $data = $DB->get_record($module->name, array('id'=>$cm->instance), '*', MUST_EXIST);
+ $cw = $DB->get_record('course_sections', array('id'=>$cm->section), '*', MUST_EXIST);
+
+ $data->coursemodule = $cm->id;
+ $data->section = $cw->section; // The section number itself - relative!!! (section column in course_sections)
+ $data->visible = $cm->visible; //?? $cw->visible ? $cm->visible : 0; // section hiding overrides
+ $data->cmidnumber = $cm->idnumber; // The cm IDnumber
+ $data->groupmode = groups_get_activity_groupmode($cm); // locked later if forced
+ $data->groupingid = $cm->groupingid;
+ $data->groupmembersonly = $cm->groupmembersonly;
+ $data->course = $course->id;
+ $data->module = $module->id;
+ $data->modulename = $module->name;
+ $data->instance = $cm->instance;
+ $data->return = $return;
+ $data->update = $update;
+ $data->completion = $cm->completion;
+ $data->completionview = $cm->completionview;
+ $data->completionexpected = $cm->completionexpected;
+ $data->completionusegrade = is_null($cm->completiongradeitemnumber) ? 0 : 1;
+ if (!empty($CFG->enableavailability)) {
+ $data->availablefrom = $cm->availablefrom;
+ $data->availableuntil = $cm->availableuntil;
+ $data->showavailability = $cm->showavailability;
+ }
+
+ if (plugin_supports('mod', $data->modulename, FEATURE_MOD_INTRO, true)) {
+ $draftid_editor = file_get_submitted_draft_itemid('introeditor');
+ $currentintro = file_prepare_draft_area($draftid_editor, $context->id, $data->modulename.'_intro', 0, array('subdirs'=>true), $data->intro);
+ $data->introeditor = array('text'=>$currentintro, 'format'=>$data->introformat, 'itemid'=>$draftid_editor);
+ }
+
+ if ($items = grade_item::fetch_all(array('itemtype'=>'mod', 'itemmodule'=>$data->modulename,
+ 'iteminstance'=>$data->instance, 'courseid'=>$course->id))) {
+ // add existing outcomes
+ foreach ($items as $item) {
+ if (!empty($item->outcomeid)) {
+ $data->{'outcome_'.$item->outcomeid} = 1;
+ }
}
- require_login($course);
- $context = get_context_instance(CONTEXT_COURSE, $course->id);
- require_capability('moodle/course:manageactivities', $context);
-
- if (!$module = $DB->get_record('modules', array('name'=>$add))) {
- print_error('moduledoesnotexist');
+ // set category if present
+ $gradecat = false;
+ foreach ($items as $item) {
+ if ($gradecat === false) {
+ $gradecat = $item->categoryid;
+ continue;
+ }
+ if ($gradecat != $item->categoryid) {
+ //mixed categories
+ $gradecat = false;
+ break;
+ }
}
-
- $cw = get_course_section($section, $course->id);
-
- if (!course_allowed_module($course, $module->id)) {
- print_error('moduledisable');
+ if ($gradecat !== false) {
+ // do not set if mixed categories present
+ $data->gradecat = $gradecat;
}
+ }
+ $sectionname = get_section_name($course->format);
+ $fullmodulename = get_string('modulename', $module->name);
+
+ if ($data->section && $course->format != 'site') {
+ $heading = new object();
+ $heading->what = $fullmodulename;
+ $heading->in = "$sectionname $cw->section";
+ $pageheading = get_string('updatingain', 'moodle', $heading);
+ } else {
+ $pageheading = get_string('updatinga', 'moodle', $fullmodulename);
+ }
+
+} else {
+ require_login();
+ print_error('invalidaction');
+}
+
+$pagepath = 'mod-' . $module->name . '-';
+if (!empty($type)) { //TODO: hopefully will be removed in 2.0
+ $pagepath .= $type;
+} else {
+ $pagepath .= 'mod';
+}
+$PAGE->set_pagetype($pagepath);
+
+$modmoodleform = "$CFG->dirroot/mod/$module->name/mod_form.php";
+if (file_exists($modmoodleform)) {
+ require_once($modmoodleform);
+} else {
+ print_error('noformdesc');
+}
+
+$modlib = "$CFG->dirroot/mod/$module->name/lib.php";
+if (file_exists($modlib)) {
+ include_once($modlib);
+} else {
+ print_error('modulemissingcode', '', '', $modlib);
+}
+
+$mformclassname = 'mod_'.$module->name.'_mod_form';
+$mform = new $mformclassname($data, $cw->section, $cm, $course);
+$mform->set_data($data);
+
+if ($mform->is_cancelled()) {
+ if ($return && !empty($cm->id)) {
+ redirect("$CFG->wwwroot/mod/$module->name/view.php?id=$cm->id");
+ } else {
+ redirect("$CFG->wwwroot/course/view.php?id=$course->id#section-".$cw->section);
+ }
+} else if ($fromform = $mform->get_data()) {
+ if (empty($fromform->coursemodule)) {
+ // Add
$cm = null;
+ $course = $DB->get_record('course', array('id'=>$fromform->course), '*', MUST_EXIST);
+ $fromform->instance = '';
+ $fromform->coursemodule = '';
+ } else {
+ // Update
+ $cm = get_coursemodule_from_id('', $fromform->coursemodule, 0, false, MUST_EXIST);
+ $course = $DB->get_record('course', array('id'=>$cm->course), '*', MUST_EXIST);
+ $fromform->instance = $cm->instance;
+ $fromform->coursemodule = $cm->id;
+ }
- $data = new object();
- $data->section = $section; // The section number itself - relative!!! (section column in course_sections)
- $data->visible = $cw->visible;
- $data->course = $course->id;
- $data->module = $module->id;
- $data->modulename = $module->name;
- $data->groupmode = $course->groupmode;
- $data->groupingid = $course->defaultgroupingid;
- $data->groupmembersonly = 0;
- $data->id = '';
- $data->instance = '';
- $data->coursemodule = '';
- $data->add = $add;
- $data->return = 0; //must be false if this is an add, go back to course view on cancel
+ if (!empty($fromform->coursemodule)) {
+ $context = get_context_instance(CONTEXT_MODULE, $fromform->coursemodule);
+ } else {
+ $context = get_context_instance(CONTEXT_COURSE, $course->id);
+ }
- if (plugin_supports('mod', $data->modulename, FEATURE_MOD_INTRO, true)) {
- $draftid_editor = file_get_submitted_draft_itemid('introeditor');
- file_prepare_draft_area($draftid_editor, null, null, null);
- $data->introeditor = array('text'=>'', 'format'=>FORMAT_HTML, 'itemid'=>$draftid_editor); // TODO: add better default
+ $fromform->course = $course->id;
+ $fromform->modulename = clean_param($fromform->modulename, PARAM_SAFEDIR); // For safety
+
+ $addinstancefunction = $fromform->modulename."_add_instance";
+ $updateinstancefunction = $fromform->modulename."_update_instance";
+
+ if (!isset($fromform->groupingid)) {
+ $fromform->groupingid = 0;
+ }
+
+ if (!isset($fromform->groupmembersonly)) {
+ $fromform->groupmembersonly = 0;
+ }
+
+ if (!isset($fromform->name)) { //label
+ $fromform->name = $fromform->modulename;
+ }
+
+ if (!isset($fromform->completion)) {
+ $fromform->completion = COMPLETION_DISABLED;
+ }
+ if (!isset($fromform->completionview)) {
+ $fromform->completionview = COMPLETION_VIEW_NOT_REQUIRED;
+ }
+
+ // Convert the 'use grade' checkbox into a grade-item number: 0 if
+ // checked, null if not
+ if (isset($fromform->completionusegrade) && $fromform->completionusegrade) {
+ $fromform->completiongradeitemnumber = 0;
+ } else {
+ $fromform->completiongradeitemnumber = null;
+ }
+
+ if (!empty($fromform->update)) {
+
+ if (!empty($course->groupmodeforce) or !isset($fromform->groupmode)) {
+ $fromform->groupmode = $cm->groupmode; // keep original
}
- if (!empty($type)) { //TODO: hopefully will be removed in 2.0
- $data->type = $type;
+ // update course module first
+ $cm->groupmode = $fromform->groupmode;
+ $cm->groupingid = $fromform->groupingid;
+ $cm->groupmembersonly = $fromform->groupmembersonly;
+
+ $completion = new completion_info($course);
+ if ($completion->is_enabled()) {
+ // Handle completion settings. If necessary, wipe existing completion
+ // data first.
+ if (!empty($fromform->completionunlocked)) {
+ $completion = new completion_info($course);
+ $completion->reset_all_state($cm);
+ }
+
+ $cm->completion = $fromform->completion;
+ $cm->completiongradeitemnumber = $fromform->completiongradeitemnumber;
+ $cm->completionview = $fromform->completionview;
+ $cm->completionexpected = $fromform->completionexpected;
}
-
- $sectionname = get_section_name($course->format);
- $fullmodulename = get_string('modulename', $module->name);
-
- if ($data->section && $course->format != 'site') {
- $heading = new object();
- $heading->what = $fullmodulename;
- $heading->to = "$sectionname $data->section";
- $pageheading = get_string('addinganewto', 'moodle', $heading);
- } else {
- $pageheading = get_string('addinganew', 'moodle', $fullmodulename);
- }
-
- $pagepath = 'mod-' . $module->name . '-';
- if (!empty($type)) { //TODO: hopefully will be removed in 2.0
- $pagepath .= $type;
- } else {
- $pagepath .= 'mod';
- }
- $PAGE->set_pagetype($pagepath);
-
- $navlinksinstancename = '';
-
- } else if (!empty($update)) {
- if (!$cm = get_coursemodule_from_id('', $update, 0)) {
- print_error('invalidcoursemodule');
- }
-
- if (!$course = $DB->get_record('course', array('id'=>$cm->course))) {
- print_error('invalidcourseid');
- }
-
- require_login($course, false, $cm); // needed to setup proper $COURSE
- $context = get_context_instance(CONTEXT_MODULE, $cm->id);
- require_capability('moodle/course:manageactivities', $context);
-
- if (!$module = $DB->get_record('modules', array('id'=>$cm->module))) {
- print_error('moduledoesnotexist');
- }
-
- if (!$data = $DB->get_record($module->name, array('id'=>$cm->instance))) {
- print_error('moduleinstancedoesnotexist');
- }
-
- if (!$cw = $DB->get_record('course_sections', array('id'=>$cm->section))) {
- print_error('sectionnotexist');
- }
-
- $data->coursemodule = $cm->id;
- $data->section = $cw->section; // The section number itself - relative!!! (section column in course_sections)
- $data->visible = $cm->visible; //?? $cw->visible ? $cm->visible : 0; // section hiding overrides
- $data->cmidnumber = $cm->idnumber; // The cm IDnumber
- $data->groupmode = groups_get_activity_groupmode($cm); // locked later if forced
- $data->groupingid = $cm->groupingid;
- $data->groupmembersonly = $cm->groupmembersonly;
- $data->course = $course->id;
- $data->module = $module->id;
- $data->modulename = $module->name;
- $data->instance = $cm->instance;
- $data->return = $return;
- $data->update = $update;
- $data->completion = $cm->completion;
- $data->completionview = $cm->completionview;
- $data->completionexpected = $cm->completionexpected;
- $data->completionusegrade = is_null($cm->completiongradeitemnumber) ? 0 : 1;
if (!empty($CFG->enableavailability)) {
- $data->availablefrom = $cm->availablefrom;
- $data->availableuntil = $cm->availableuntil;
- $data->showavailability = $cm->showavailability;
- }
-
- if (plugin_supports('mod', $data->modulename, FEATURE_MOD_INTRO, true)) {
- $draftid_editor = file_get_submitted_draft_itemid('introeditor');
- $currentintro = file_prepare_draft_area($draftid_editor, $context->id, $data->modulename.'_intro', 0, array('subdirs'=>true), $data->intro);
- $data->introeditor = array('text'=>$currentintro, 'format'=>$data->introformat, 'itemid'=>$draftid_editor);
- }
-
- if ($items = grade_item::fetch_all(array('itemtype'=>'mod', 'itemmodule'=>$data->modulename,
- 'iteminstance'=>$data->instance, 'courseid'=>$course->id))) {
- // add existing outcomes
- foreach ($items as $item) {
- if (!empty($item->outcomeid)) {
- $data->{'outcome_'.$item->outcomeid} = 1;
- }
+ $cm->availablefrom = $fromform->availablefrom;
+ $cm->availableuntil = $fromform->availableuntil;
+ // The form time is midnight, but because we want it to be
+ // inclusive, set it to 23:59:59 on that day.
+ if ($cm->availableuntil) {
+ $cm->availableuntil = strtotime('23:59:59',
+ $cm->availableuntil);
}
+ $cm->showavailability = $fromform->showavailability;
+ condition_info::update_cm_from_form($cm,$fromform,true);
+ }
- // set category if present
- $gradecat = false;
- foreach ($items as $item) {
- if ($gradecat === false) {
- $gradecat = $item->categoryid;
- continue;
- }
- if ($gradecat != $item->categoryid) {
- //mixed categories
- $gradecat = false;
- break;
- }
- }
- if ($gradecat !== false) {
- // do not set if mixed categories present
- $data->gradecat = $gradecat;
+ $DB->update_record('course_modules', $cm);
+
+ $modcontext = get_context_instance(CONTEXT_MODULE, $fromform->coursemodule);
+
+ // update embedded links and save files
+ if (plugin_supports('mod', $fromform->modulename, FEATURE_MOD_INTRO, true)) {
+ $fromform->intro = file_save_draft_area_files($fromform->introeditor['itemid'], $modcontext->id,
+ $fromform->modulename.'_intro', 0,
+ array('subdirs'=>true), $fromform->introeditor['text']);
+ $fromform->introformat = $fromform->introeditor['format'];
+ unset($fromform->introeditor);
+ }
+
+ if (!$updateinstancefunction($fromform, $mform)) {
+ print_error('cannotupdatemod', '', 'view.php?id=$course->id', $fromform->modulename);
+ }
+
+ // make sure visibility is set correctly (in particular in calendar)
+ set_coursemodule_visible($fromform->coursemodule, $fromform->visible);
+
+ if (isset($fromform->cmidnumber)) { //label
+ // set cm idnumber - uniqueness is already verified by form validation
+ set_coursemodule_idnumber($fromform->coursemodule, $fromform->cmidnumber);
+ }
+ //trigger event with information about this module.
+ $eventdata = new object();
+ $eventdata->component = 'mod/'.$fromform->modulename;
+ $eventdata->course = $course->id;
+ $eventdata->cm = $fromform->coursemodule;
+ events_trigger($fromform->modulename.'_mod_updated', $eventdata);
+
+ add_to_log($course->id, "course", "update mod",
+ "../mod/$fromform->modulename/view.php?id=$fromform->coursemodule",
+ "$fromform->modulename $fromform->instance");
+ add_to_log($course->id, $fromform->modulename, "update",
+ "view.php?id=$fromform->coursemodule",
+ "$fromform->instance", $fromform->coursemodule);
+
+ } else if (!empty($fromform->add)) {
+
+ if (!empty($course->groupmodeforce) or !isset($fromform->groupmode)) {
+ $fromform->groupmode = 0; // do not set groupmode
+ }
+
+ if (!course_allowed_module($course, $fromform->modulename)) {
+ print_error('moduledisable', '', '', $fromform->modulename);
+ }
+
+ // first add course_module record because we need the context
+ $newcm = new object();
+ $newcm->course = $course->id;
+ $newcm->module = $fromform->module;
+ $newcm->instance = 0; // not known yet, will be updated later (this is similar to restore code)
+ $newcm->visible = $fromform->visible;
+ $newcm->groupmode = $fromform->groupmode;
+ $newcm->groupingid = $fromform->groupingid;
+ $newcm->groupmembersonly = $fromform->groupmembersonly;
+ $completion = new completion_info($course);
+ if ($completion->is_enabled()) {
+ $newcm->completion = $fromform->completion;
+ $newcm->completiongradeitemnumber = $fromform->completiongradeitemnumber;
+ $newcm->completionview = $fromform->completionview;
+ $newcm->completionexpected = $fromform->completionexpected;
+ }
+ if(!empty($CFG->enableavailability)) {
+ $newcm->availablefrom = $fromform->availablefrom;
+ $newcm->availableuntil = $fromform->availableuntil;
+ // The form time is midnight, but because we want it to be
+ // inclusive, set it to 23:59:59 on that day.
+ if ($newcm->availableuntil) {
+ $newcm->availableuntil = strtotime('23:59:59',
+ $newcm->availableuntil);
}
+ $newcm->showavailability = $fromform->showavailability;
}
- $sectionname = get_section_name($course->format);
- $fullmodulename = get_string('modulename', $module->name);
-
- if ($data->section && $course->format != 'site') {
- $heading = new object();
- $heading->what = $fullmodulename;
- $heading->in = "$sectionname $cw->section";
- $pageheading = get_string('updatingain', 'moodle', $heading);
- } else {
- $pageheading = get_string('updatinga', 'moodle', $fullmodulename);
+ if (!$fromform->coursemodule = add_course_module($newcm)) {
+ print_error('cannotaddcoursemodule');
}
- $navlinksinstancename = array('name' => format_string($data->name, true), 'link' => "$CFG->wwwroot/mod/$module->name/view.php?id=$cm->id", 'type' => 'activityinstance');
-
- $pagetype = 'mod-' . $module->name . '-';
- if (!empty($type)) {
- $pagetype .= $type;
- } else {
- $pagetype .= 'mod';
- }
- $PAGE->set_pagetype($pagetype);
- } else {
- require_login();
- print_error('invalidaction');
- }
-
- $modmoodleform = "$CFG->dirroot/mod/$module->name/mod_form.php";
- if (file_exists($modmoodleform)) {
- require_once($modmoodleform);
-
- } else {
- print_error('noformdesc');
- }
-
- $modlib = "$CFG->dirroot/mod/$module->name/lib.php";
- if (file_exists($modlib)) {
- include_once($modlib);
- } else {
- print_error('modulemissingcode', '', '', $modlib);
- }
-
- $mformclassname = 'mod_'.$module->name.'_mod_form';
- $mform = new $mformclassname($data, $cw->section, $cm, $course);
- $mform->set_data($data);
-
- if ($mform->is_cancelled()) {
- if ($return && !empty($cm->id)) {
- redirect("$CFG->wwwroot/mod/$module->name/view.php?id=$cm->id");
- } else {
- redirect("$CFG->wwwroot/course/view.php?id=$course->id#section-".$cw->section);
+ if (plugin_supports('mod', $fromform->modulename, FEATURE_MOD_INTRO, false)) {
+ $introeditor = $fromform->introeditor;
+ unset($fromform->introeditor);
+ $fromform->intro = $introeditor['text'];
+ $fromform->introformat = $introeditor['format'];
}
- } else if ($fromform = $mform->get_data()) {
- if (empty($fromform->coursemodule)) { //add
- $cm = null;
- if (!$course = $DB->get_record('course', array('id'=>$fromform->course))) {
- print_error('invalidcourseid');
- }
- $fromform->instance = '';
- $fromform->coursemodule = '';
- } else { //update
- if (!$cm = get_coursemodule_from_id('', $fromform->coursemodule, 0)) {
- print_error('invalidcoursemodule');
- }
-
- if (!$course = $DB->get_record('course', array('id'=>$cm->course))) {
- print_error('invalidcourseid');
- }
- $fromform->instance = $cm->instance;
- $fromform->coursemodule = $cm->id;
- }
-
-
- if (!empty($fromform->coursemodule)) {
- $context = get_context_instance(CONTEXT_MODULE, $fromform->coursemodule);
- } else {
- $context = get_context_instance(CONTEXT_COURSE, $course->id);
- }
-
- $fromform->course = $course->id;
- $fromform->modulename = clean_param($fromform->modulename, PARAM_SAFEDIR); // For safety
-
- $addinstancefunction = $fromform->modulename."_add_instance";
- $updateinstancefunction = $fromform->modulename."_update_instance";
-
- if (!isset($fromform->groupingid)) {
- $fromform->groupingid = 0;
- }
-
- if (!isset($fromform->groupmembersonly)) {
- $fromform->groupmembersonly = 0;
- }
-
- if (!isset($fromform->name)) { //label
- $fromform->name = $fromform->modulename;
- }
-
- if (!isset($fromform->completion)) {
- $fromform->completion = COMPLETION_DISABLED;
- }
- if (!isset($fromform->completionview)) {
- $fromform->completionview = COMPLETION_VIEW_NOT_REQUIRED;
- }
-
- // Convert the 'use grade' checkbox into a grade-item number: 0 if
- // checked, null if not
- $fromform->completiongradeitemnumber =
- isset($fromform->completionusegrade) && $fromform->completionusegrade
- ? 0 : null;
-
- if (!empty($fromform->update)) {
-
- if (!empty($course->groupmodeforce) or !isset($fromform->groupmode)) {
- $fromform->groupmode = $cm->groupmode; // keep original
- }
-
- // update course module first
- $cm->groupmode = $fromform->groupmode;
- $cm->groupingid = $fromform->groupingid;
- $cm->groupmembersonly = $fromform->groupmembersonly;
-
- $completion = new completion_info($course);
- if ($completion->is_enabled()) {
- // Handle completion settings. If necessary, wipe existing completion
- // data first.
- if (!empty($fromform->completionunlocked)) {
- $completion = new completion_info($course);
- $completion->reset_all_state($cm);
- }
-
- $cm->completion = $fromform->completion;
- $cm->completiongradeitemnumber = $fromform->completiongradeitemnumber;
- $cm->completionview = $fromform->completionview;
- $cm->completionexpected = $fromform->completionexpected;
- }
- if (!empty($CFG->enableavailability)) {
- $cm->availablefrom = $fromform->availablefrom;
- $cm->availableuntil = $fromform->availableuntil;
- // The form time is midnight, but because we want it to be
- // inclusive, set it to 23:59:59 on that day.
- if ($cm->availableuntil) {
- $cm->availableuntil = strtotime('23:59:59',
- $cm->availableuntil);
- }
- $cm->showavailability = $fromform->showavailability;
- condition_info::update_cm_from_form($cm,$fromform,true);
- }
-
- $DB->update_record('course_modules', $cm);
+ $returnfromfunc = $addinstancefunction($fromform, $mform);
+ if (!$returnfromfunc or !is_number($returnfromfunc)) {
+ // undo everything we can
$modcontext = get_context_instance(CONTEXT_MODULE, $fromform->coursemodule);
+ delete_context(CONTEXT_MODULE, $fromform->coursemodule);
+ $DB->delete_records('course_modules', array('id'=>$fromform->coursemodule));
- // update embedded links and save files
- if (plugin_supports('mod', $fromform->modulename, FEATURE_MOD_INTRO, true)) {
- $fromform->intro = file_save_draft_area_files($fromform->introeditor['itemid'], $modcontext->id,
- $fromform->modulename.'_intro', 0,
- array('subdirs'=>true), $fromform->introeditor['text']);
- $fromform->introformat = $fromform->introeditor['format'];
- unset($fromform->introeditor);
- }
-
- if (!$updateinstancefunction($fromform, $mform)) {
- print_error('cannotupdatemod', '', 'view.php?id=$course->id', $fromform->modulename);
- }
-
- // make sure visibility is set correctly (in particular in calendar)
- set_coursemodule_visible($fromform->coursemodule, $fromform->visible);
-
- if (isset($fromform->cmidnumber)) { //label
- // set cm idnumber - uniqueness is already verified by form validation
- set_coursemodule_idnumber($fromform->coursemodule, $fromform->cmidnumber);
- }
- //trigger event with information about this module.
- $eventdata = new object();
- $eventdata->component = 'mod/'.$fromform->modulename;
- $eventdata->course = $course->id;
- $eventdata->cm = $fromform->coursemodule;
- events_trigger($fromform->modulename.'_mod_updated', $eventdata);
-
- add_to_log($course->id, "course", "update mod",
- "../mod/$fromform->modulename/view.php?id=$fromform->coursemodule",
- "$fromform->modulename $fromform->instance");
- add_to_log($course->id, $fromform->modulename, "update",
- "view.php?id=$fromform->coursemodule",
- "$fromform->instance", $fromform->coursemodule);
-
- } else if (!empty($fromform->add)) {
-
- if (!empty($course->groupmodeforce) or !isset($fromform->groupmode)) {
- $fromform->groupmode = 0; // do not set groupmode
- }
-
- if (!course_allowed_module($course, $fromform->modulename)) {
- print_error('moduledisable', '', '', $fromform->modulename);
- }
-
- // first add course_module record because we need the context
- $newcm = new object();
- $newcm->course = $course->id;
- $newcm->module = $fromform->module;
- $newcm->instance = 0; // not known yet, will be updated later (this is similar to restore code)
- $newcm->visible = $fromform->visible;
- $newcm->groupmode = $fromform->groupmode;
- $newcm->groupingid = $fromform->groupingid;
- $newcm->groupmembersonly = $fromform->groupmembersonly;
- $completion = new completion_info($course);
- if ($completion->is_enabled()) {
- $newcm->completion = $fromform->completion;
- $newcm->completiongradeitemnumber = $fromform->completiongradeitemnumber;
- $newcm->completionview = $fromform->completionview;
- $newcm->completionexpected = $fromform->completionexpected;
- }
- if(!empty($CFG->enableavailability)) {
- $newcm->availablefrom = $fromform->availablefrom;
- $newcm->availableuntil = $fromform->availableuntil;
- // The form time is midnight, but because we want it to be
- // inclusive, set it to 23:59:59 on that day.
- if ($newcm->availableuntil) {
- $newcm->availableuntil = strtotime('23:59:59',
- $newcm->availableuntil);
- }
- $newcm->showavailability = $fromform->showavailability;
- }
-
- if (!$fromform->coursemodule = add_course_module($newcm)) {
- print_error('cannotaddcoursemodule');
- }
-
- if (plugin_supports('mod', $fromform->modulename, FEATURE_MOD_INTRO, false)) {
- $introeditor = $fromform->introeditor;
- unset($fromform->introeditor);
- $fromform->intro = $introeditor['text'];
- $fromform->introformat = $introeditor['format'];
- }
-
- $returnfromfunc = $addinstancefunction($fromform, $mform);
-
- if (!$returnfromfunc or !is_number($returnfromfunc)) {
- // undo everything we can
- $modcontext = get_context_instance(CONTEXT_MODULE, $fromform->coursemodule);
- delete_context(CONTEXT_MODULE, $fromform->coursemodule);
- $DB->delete_records('course_modules', array('id'=>$fromform->coursemodule));
-
- if (!is_number($returnfromfunc)) {
- print_error('invalidfunction', '', 'view.php?id=$course->id');
- } else {
- print_error('cannotaddnewmodule', '', "view.php?id=$course->id", $fromform->modulename);
- }
- }
-
- $fromform->instance = $returnfromfunc;
-
- $DB->set_field('course_modules', 'instance', $returnfromfunc, array('id'=>$fromform->coursemodule));
-
- // update embedded links and save files
- $modcontext = get_context_instance(CONTEXT_MODULE, $fromform->coursemodule);
- if (plugin_supports('mod', $fromform->modulename, FEATURE_MOD_INTRO, true)) {
- $fromform->intro = file_save_draft_area_files($introeditor['itemid'], $modcontext->id,
- $fromform->modulename.'_intro', 0,
- array('subdirs'=>true), $introeditor['text']);
- $DB->set_field($fromform->modulename, 'intro', $fromform->intro, array('id'=>$fromform->instance));
- }
-
- // course_modules and course_sections each contain a reference
- // to each other, so we have to update one of them twice.
- $sectionid = add_mod_to_section($fromform);
-
- $DB->set_field('course_modules', 'section', $sectionid, array('id'=>$fromform->coursemodule));
-
- // make sure visibility is set correctly (in particular in calendar)
- set_coursemodule_visible($fromform->coursemodule, $fromform->visible);
-
- if (isset($fromform->cmidnumber)) { //label
- // set cm idnumber - uniqueness is already verified by form validation
- set_coursemodule_idnumber($fromform->coursemodule, $fromform->cmidnumber);
- }
-
- // Set up conditions
- if ($CFG->enableavailability) {
- condition_info::update_cm_from_form((object)array('id'=>$fromform->coursemodule), $fromform, false);
- }
- //trigger event with information about this module.
- $eventdata = new object();
- $eventdata->component = 'mod/'.$fromform->modulename;
- $eventdata->course = $course->id;
- $eventdata->cm = $fromform->coursemodule;
- events_trigger($fromform->modulename.'_mod_created', $eventdata);
-
- add_to_log($course->id, "course", "add mod",
- "../mod/$fromform->modulename/view.php?id=$fromform->coursemodule",
- "$fromform->modulename $fromform->instance");
- add_to_log($course->id, $fromform->modulename, "add",
- "view.php?id=$fromform->coursemodule",
- "$fromform->instance", $fromform->coursemodule);
- } else {
- print_error('invaliddata');
- }
-
- // sync idnumber with grade_item
- if ($grade_item = grade_item::fetch(array('itemtype'=>'mod', 'itemmodule'=>$fromform->modulename,
- 'iteminstance'=>$fromform->instance, 'itemnumber'=>0, 'courseid'=>$course->id))) {
- if ($grade_item->idnumber != $fromform->cmidnumber) {
- $grade_item->idnumber = $fromform->cmidnumber;
- $grade_item->update();
+ if (!is_number($returnfromfunc)) {
+ print_error('invalidfunction', '', 'view.php?id=$course->id');
+ } else {
+ print_error('cannotaddnewmodule', '', "view.php?id=$course->id", $fromform->modulename);
}
}
- $items = grade_item::fetch_all(array('itemtype'=>'mod', 'itemmodule'=>$fromform->modulename,
- 'iteminstance'=>$fromform->instance, 'courseid'=>$course->id));
+ $fromform->instance = $returnfromfunc;
- // create parent category if requested and move to correct parent category
- if ($items and isset($fromform->gradecat)) {
- if ($fromform->gradecat == -1) {
- $grade_category = new grade_category();
- $grade_category->courseid = $course->id;
- $grade_category->fullname = $fromform->name;
- $grade_category->insert();
- if ($grade_item) {
- $parent = $grade_item->get_parent_category();
- $grade_category->set_parent($parent->id);
- }
- $fromform->gradecat = $grade_category->id;
+ $DB->set_field('course_modules', 'instance', $returnfromfunc, array('id'=>$fromform->coursemodule));
+
+ // update embedded links and save files
+ $modcontext = get_context_instance(CONTEXT_MODULE, $fromform->coursemodule);
+ if (plugin_supports('mod', $fromform->modulename, FEATURE_MOD_INTRO, true)) {
+ $fromform->intro = file_save_draft_area_files($introeditor['itemid'], $modcontext->id,
+ $fromform->modulename.'_intro', 0,
+ array('subdirs'=>true), $introeditor['text']);
+ $DB->set_field($fromform->modulename, 'intro', $fromform->intro, array('id'=>$fromform->instance));
+ }
+
+ // course_modules and course_sections each contain a reference
+ // to each other, so we have to update one of them twice.
+ $sectionid = add_mod_to_section($fromform);
+
+ $DB->set_field('course_modules', 'section', $sectionid, array('id'=>$fromform->coursemodule));
+
+ // make sure visibility is set correctly (in particular in calendar)
+ set_coursemodule_visible($fromform->coursemodule, $fromform->visible);
+
+ if (isset($fromform->cmidnumber)) { //label
+ // set cm idnumber - uniqueness is already verified by form validation
+ set_coursemodule_idnumber($fromform->coursemodule, $fromform->cmidnumber);
+ }
+
+ // Set up conditions
+ if ($CFG->enableavailability) {
+ condition_info::update_cm_from_form((object)array('id'=>$fromform->coursemodule), $fromform, false);
+ }
+ //trigger event with information about this module.
+ $eventdata = new object();
+ $eventdata->component = 'mod/'.$fromform->modulename;
+ $eventdata->course = $course->id;
+ $eventdata->cm = $fromform->coursemodule;
+ events_trigger($fromform->modulename.'_mod_created', $eventdata);
+
+ add_to_log($course->id, "course", "add mod",
+ "../mod/$fromform->modulename/view.php?id=$fromform->coursemodule",
+ "$fromform->modulename $fromform->instance");
+ add_to_log($course->id, $fromform->modulename, "add",
+ "view.php?id=$fromform->coursemodule",
+ "$fromform->instance", $fromform->coursemodule);
+ } else {
+ print_error('invaliddata');
+ }
+
+ // sync idnumber with grade_item
+ if ($grade_item = grade_item::fetch(array('itemtype'=>'mod', 'itemmodule'=>$fromform->modulename,
+ 'iteminstance'=>$fromform->instance, 'itemnumber'=>0, 'courseid'=>$course->id))) {
+ if ($grade_item->idnumber != $fromform->cmidnumber) {
+ $grade_item->idnumber = $fromform->cmidnumber;
+ $grade_item->update();
+ }
+ }
+
+ $items = grade_item::fetch_all(array('itemtype'=>'mod', 'itemmodule'=>$fromform->modulename,
+ 'iteminstance'=>$fromform->instance, 'courseid'=>$course->id));
+
+ // create parent category if requested and move to correct parent category
+ if ($items and isset($fromform->gradecat)) {
+ if ($fromform->gradecat == -1) {
+ $grade_category = new grade_category();
+ $grade_category->courseid = $course->id;
+ $grade_category->fullname = $fromform->name;
+ $grade_category->insert();
+ if ($grade_item) {
+ $parent = $grade_item->get_parent_category();
+ $grade_category->set_parent($parent->id);
}
- foreach ($items as $itemid=>$unused) {
- $items[$itemid]->set_parent($fromform->gradecat);
- if ($itemid == $grade_item->id) {
- // use updated grade_item
- $grade_item = $items[$itemid];
+ $fromform->gradecat = $grade_category->id;
+ }
+ foreach ($items as $itemid=>$unused) {
+ $items[$itemid]->set_parent($fromform->gradecat);
+ if ($itemid == $grade_item->id) {
+ // use updated grade_item
+ $grade_item = $items[$itemid];
+ }
+ }
+ }
+
+ // add outcomes if requested
+ if ($outcomes = grade_outcome::fetch_all_available($course->id)) {
+ $grade_items = array();
+
+ // Outcome grade_item.itemnumber start at 1000, there is nothing above outcomes
+ $max_itemnumber = 999;
+ if ($items) {
+ foreach($items as $item) {
+ if ($item->itemnumber > $max_itemnumber) {
+ $max_itemnumber = $item->itemnumber;
}
}
}
- // add outcomes if requested
- if ($outcomes = grade_outcome::fetch_all_available($course->id)) {
- $grade_items = array();
+ foreach($outcomes as $outcome) {
+ $elname = 'outcome_'.$outcome->id;
- // Outcome grade_item.itemnumber start at 1000, there is nothing above outcomes
- $max_itemnumber = 999;
- if ($items) {
- foreach($items as $item) {
- if ($item->itemnumber > $max_itemnumber) {
- $max_itemnumber = $item->itemnumber;
- }
- }
- }
-
- foreach($outcomes as $outcome) {
- $elname = 'outcome_'.$outcome->id;
-
- if (array_key_exists($elname, $fromform) and $fromform->$elname) {
- // so we have a request for new outcome grade item?
- if ($items) {
- foreach($items as $item) {
- if ($item->outcomeid == $outcome->id) {
- //outcome aready exists
- continue 2;
- }
+ if (array_key_exists($elname, $fromform) and $fromform->$elname) {
+ // so we have a request for new outcome grade item?
+ if ($items) {
+ foreach($items as $item) {
+ if ($item->outcomeid == $outcome->id) {
+ //outcome aready exists
+ continue 2;
}
}
+ }
- $max_itemnumber++;
+ $max_itemnumber++;
- $outcome_item = new grade_item();
- $outcome_item->courseid = $course->id;
- $outcome_item->itemtype = 'mod';
- $outcome_item->itemmodule = $fromform->modulename;
- $outcome_item->iteminstance = $fromform->instance;
- $outcome_item->itemnumber = $max_itemnumber;
- $outcome_item->itemname = $outcome->fullname;
- $outcome_item->outcomeid = $outcome->id;
- $outcome_item->gradetype = GRADE_TYPE_SCALE;
- $outcome_item->scaleid = $outcome->scaleid;
- $outcome_item->insert();
+ $outcome_item = new grade_item();
+ $outcome_item->courseid = $course->id;
+ $outcome_item->itemtype = 'mod';
+ $outcome_item->itemmodule = $fromform->modulename;
+ $outcome_item->iteminstance = $fromform->instance;
+ $outcome_item->itemnumber = $max_itemnumber;
+ $outcome_item->itemname = $outcome->fullname;
+ $outcome_item->outcomeid = $outcome->id;
+ $outcome_item->gradetype = GRADE_TYPE_SCALE;
+ $outcome_item->scaleid = $outcome->scaleid;
+ $outcome_item->insert();
- // move the new outcome into correct category and fix sortorder if needed
- if ($grade_item) {
- $outcome_item->set_parent($grade_item->categoryid);
- $outcome_item->move_after_sortorder($grade_item->sortorder);
+ // move the new outcome into correct category and fix sortorder if needed
+ if ($grade_item) {
+ $outcome_item->set_parent($grade_item->categoryid);
+ $outcome_item->move_after_sortorder($grade_item->sortorder);
- } else if (isset($fromform->gradecat)) {
- $outcome_item->set_parent($fromform->gradecat);
- }
+ } else if (isset($fromform->gradecat)) {
+ $outcome_item->set_parent($fromform->gradecat);
}
}
}
-
- rebuild_course_cache($course->id);
- grade_regrade_final_grades($course->id);
-
- if (isset($fromform->submitbutton)) {
- redirect("$CFG->wwwroot/mod/$module->name/view.php?id=$fromform->coursemodule");
- } else {
- redirect("$CFG->wwwroot/course/view.php?id=$course->id");
- }
- exit;
-
- } else {
- if (!empty($cm->id)) {
- $context = get_context_instance(CONTEXT_MODULE, $cm->id);
- } else {
- $context = get_context_instance(CONTEXT_COURSE, $course->id);
- }
-
- $streditinga = get_string('editinga', 'moodle', $fullmodulename);
- $strmodulenameplural = get_string('modulenameplural', $module->name);
-
- $PAGE->navbar->add($streditinga);
- $PAGE->set_heading($course->fullname);
- $PAGE->set_title($streditinga);
- $PAGE->set_focuscontrol($mform->focus());
- $PAGE->set_cacheable(false);
- $PAGE->set_pagelayout('admin');
- echo $OUTPUT->header();
-
- if (!empty($cm->id)) {
- $context = get_context_instance(CONTEXT_MODULE, $cm->id);
- $overridableroles = get_overridable_roles($context);
- $assignableroles = get_assignable_roles($context);
- $currenttab = 'update';
- require($CFG->dirroot.'/'.$CFG->admin.'/roles/tabs.php');
- }
-
- if (get_string_manager()->string_exists('modulename_hlp', $module->name)) {
- echo $OUTPUT->heading_with_help($pageheading, 'modulename', $module->name, 'icon');
- } else {
- echo $OUTPUT->heading_with_help($pageheading, '', '', 'icon');
- }
-
- $mform->display();
-
- echo $OUTPUT->footer();
}
+
+ rebuild_course_cache($course->id);
+ grade_regrade_final_grades($course->id);
+
+ if (isset($fromform->submitbutton)) {
+ redirect("$CFG->wwwroot/mod/$module->name/view.php?id=$fromform->coursemodule");
+ } else {
+ redirect("$CFG->wwwroot/course/view.php?id=$course->id");
+ }
+ exit;
+
+} else {
+
+ $streditinga = get_string('editinga', 'moodle', $fullmodulename);
+ $strmodulenameplural = get_string('modulenameplural', $module->name);
+
+ if (!empty($cm->id)) {
+ $context = get_context_instance(CONTEXT_MODULE, $cm->id);
+ } else {
+ $context = get_context_instance(CONTEXT_COURSE, $course->id);
+ }
+
+ $PAGE->set_heading($course->fullname);
+ $PAGE->set_title($streditinga);
+ $PAGE->set_focuscontrol($mform->focus());
+ $PAGE->set_cacheable(false);
+ $PAGE->set_pagelayout('admin');
+ echo $OUTPUT->header();
+
+ if (!empty($cm->id)) {
+ $context = get_context_instance(CONTEXT_MODULE, $cm->id);
+ $overridableroles = get_overridable_roles($context);
+ $assignableroles = get_assignable_roles($context);
+ $currenttab = 'update';
+ require($CFG->dirroot.'/'.$CFG->admin.'/roles/tabs.php');
+ }
+
+ if (get_string_manager()->string_exists('modulename_hlp', $module->name)) {
+ echo $OUTPUT->heading_with_help($pageheading, 'modulename', $module->name, 'icon');
+ } else {
+ echo $OUTPUT->heading_with_help($pageheading, '', '', 'icon');
+ }
+
+ $mform->display();
+
+ echo $OUTPUT->footer();
+}
\ No newline at end of file
diff --git a/filter/manage.php b/filter/manage.php
index 0699e66c555..bf9ec2321d3 100644
--- a/filter/manage.php
+++ b/filter/manage.php
@@ -36,9 +36,7 @@ require_once($CFG->libdir . '/adminlib.php');
$contextid = required_param('contextid',PARAM_INT);
$forfilter = optional_param('filter', '', PARAM_SAFEPATH);
-if (!$context = get_context_instance_by_id($contextid)) {
- print_error('wrongcontextid', 'error');
-}
+$context = get_context_instance_by_id($contextid, MUST_EXIST);
$args = array('contextid'=>$contextid);
$baseurl = new moodle_url('/filter/manage.php', $args);
@@ -52,26 +50,34 @@ if (!in_array($context->contextlevel, array(CONTEXT_COURSECAT, CONTEXT_COURSE, C
print_error('cannotcustomisefiltersblockuser', 'error');
}
-$isfrontpage = $context->contextlevel == CONTEXT_COURSE && $context->instanceid == SITEID;
+$isfrontpage = ($context->contextlevel == CONTEXT_COURSE && $context->instanceid == SITEID);
$contextname = print_context_name($context);
+$cm = null;
if ($context->contextlevel == CONTEXT_COURSECAT) {
$course = clone($SITE);
+ $heading = "$SITE->fullname: ".get_string("categories");
+ $PAGE->set_heading();
} else if ($context->contextlevel == CONTEXT_COURSE) {
- $course = $DB->get_record('course', array('id' => $context->instanceid));
+ $course = $DB->get_record('course', array('id' => $context->instanceid), '*', MUST_EXIST);
+ $heading = $course->fullname;
} else {
// Must be module context.
- $course = $DB->get_record_sql('SELECT c.* FROM {course} c JOIN {context} ctx ON c.id = ctx.instanceid WHERE ctx.id = ?',
- array(get_parent_contextid($context)));
-}
-if (!$course) {
- print_error('invalidcourse', 'error');
+ $cm = get_coursemodule_from_id(null, $context->instanceid, false, 0, MUST_EXIST);
+ $course = $DB->get_record('course', array('id'=>$cm->course), '*', MUST_EXIST);
}
/// Check login and permissions.
-require_login($course);
+require_login($course, false, $cm);
require_capability('moodle/filter:manage', $context);
+if ($cm) {
+ $heading = $PAGE->activityrecord->name;
+}
+
+$PAGE->set_context($context);
+$PAGE->set_heading($heading);
+
/// Get the list of available filters.
$availablefilters = filter_get_available_in_context($context);
if (!$isfrontpage && empty($availablefilters)) {
@@ -106,10 +112,6 @@ if ($forfilter == '' && optional_param('savechanges', false, PARAM_BOOL) && conf
redirect($CFG->wwwroot . '/filter/manage.php?contextid=' . $context->id, get_string('changessaved'), 1);
}
-/// These are needed early because of tabs.php
-$assignableroles = get_assignable_roles($context, ROLENAME_BOTH);
-$overridableroles = get_overridable_roles($context, ROLENAME_BOTH);
-
/// Work out an appropriate page title.
if ($forfilter) {
$a = new stdClass;
@@ -122,16 +124,24 @@ if ($forfilter) {
$straction = get_string('filters', 'admin'); // Used by tabs.php
/// Print the header and tabs
-if ($context->contextlevel == CONTEXT_COURSE and $context->instanceid == SITEID) {
+if ($isfrontpage) {
admin_externalpage_setup('frontpagefilters');
echo $OUTPUT->header();
} else {
+ $PAGE->set_cacheable(false);
+ $PAGE->set_title($title);
+ $PAGE->set_pagelayout('admin');
+ echo $OUTPUT->header();
+
+ // These are because of /roles/tabs.php
$currenttab = 'filters';
- include_once($CFG->dirroot . '/' . $CFG->admin . '/roles/tabs.php');
+ $assignableroles = get_assignable_roles($context, ROLENAME_BOTH);
+ $overridableroles = get_overridable_roles($context, ROLENAME_BOTH);
+ include($CFG->dirroot . '/' . $CFG->admin . '/roles/tabs.php');
}
/// Print heading.
-echo $OUTPUT->heading_with_help($title, 'localfiltersettings');
+echo $OUTPUT->heading_with_help($title, 'localfiltersettings', 'filters');
if (empty($availablefilters)) {
echo '' . get_string('nofiltersenabled', 'filters') . "
\n";
@@ -158,9 +168,9 @@ if (empty($availablefilters)) {
TEXTFILTER_ON => $stron,
);
- echo '\n";
-
+ echo html_writer::start_tag('div', array('class'=>'buttons'));
+ echo html_writer::empty_tag('input', array('type'=>'submit', 'name'=>'savechanges', 'value'=>get_string('savechanges')));
+ echo html_writer::end_tag('div');
+ echo html_writer::end_tag('div');
+ echo html_writer::end_tag('form');
}
/// Appropriate back link.
-if (!$isfrontpage && ($url = get_context_url($context))) {
- echo '';
+if (!$isfrontpage) {
+ echo html_writer::start_tag('div', array('class'=>'backlink'));
+ echo html_writer::tag('a', get_string('backto', '', $contextname), array('href'=>get_context_url($context)));
+ echo html_writer::end_tag('div');
}
echo $OUTPUT->footer();
diff --git a/lib/navigationlib.php b/lib/navigationlib.php
index 1858e593016..6de4a2b3dd0 100644
--- a/lib/navigationlib.php
+++ b/lib/navigationlib.php
@@ -2733,30 +2733,35 @@ class settings_navigation extends navigation_node {
protected function load_category_settings() {
global $CFG;
- $blocknode = $this->add(print_context_name($this->context));
- $blocknode->force_open();
+ $categorynode = $this->add(print_context_name($this->context));
+ $categorynode->force_open();
if ($this->page->user_is_editing() && has_capability('moodle/category:manage', $this->context)) {
- $blocknode->add(get_string('editcategorythis'), new moodle_url('/course/editcategory.php', array('id' => $this->context->instanceid)));
- $blocknode->add(get_string('addsubcategory'), new moodle_url('/course/editcategory.php', array('parent' => $this->context->instanceid)));
+ $categorynode->add(get_string('editcategorythis'), new moodle_url('/course/editcategory.php', array('id' => $this->context->instanceid)));
+ $categorynode->add(get_string('addsubcategory'), new moodle_url('/course/editcategory.php', array('parent' => $this->context->instanceid)));
}
// Assign local roles
$assignurl = new moodle_url('/'.$CFG->admin.'/roles/assign.php', array('contextid'=>$this->context->id));
- $blocknode->add(get_string('assignroles', 'role'), $assignurl, self::TYPE_SETTING);
+ $categorynode->add(get_string('assignroles', 'role'), $assignurl, self::TYPE_SETTING);
// Override roles
if (has_capability('moodle/role:review', $this->context) or count(get_overridable_roles($this->context))>0) {
$url = new moodle_url('/'.$CFG->admin.'/roles/permissions.php', array('contextid'=>$this->context->id));
- $blocknode->add(get_string('permissions', 'role'), $url, self::TYPE_SETTING);
+ $categorynode->add(get_string('permissions', 'role'), $url, self::TYPE_SETTING);
}
// Check role permissions
if (has_any_capability(array('moodle/role:assign', 'moodle/role:safeoverride','moodle/role:override', 'moodle/role:assign'), $this->context)) {
$url = new moodle_url('/'.$CFG->admin.'/roles/check.php', array('contextid'=>$this->context->id));
- $blocknode->add(get_string('checkpermissions', 'role'), $url, self::TYPE_SETTING);
+ $categorynode->add(get_string('checkpermissions', 'role'), $url, self::TYPE_SETTING);
+ }
+ // Manage filters
+ if (has_capability('moodle/filter:manage', $this->context) && count(filter_get_available_in_context($this->context))>0) {
+ $url = new moodle_url('/filter/manage.php', array('contextid'=>$this->context->id));
+ $categorynode->add(get_string('filters', 'admin'), $url, self::TYPE_SETTING);
}
- return $blocknode;
+ return $categorynode;
}
/**