MDL-30787 fix use of module and section edit capabilities

This commit is contained in:
Petr Skoda
2011-12-18 13:55:31 +01:00
parent acb3bf8ac1
commit 4d199d6b33
9 changed files with 173 additions and 152 deletions
+30 -26
View File
@@ -3062,13 +3062,13 @@ function moveto_module($mod, $section, $beforemod=NULL) {
* @global core_renderer $OUTPUT
* @staticvar type $str
* @param stdClass $mod The module to produce editing buttons for
* @param bool $absolute If true an absolute link is produced (default true)
* @param bool $absolute_ignored ignored - all links are absolute
* @param bool $moveselect If true a move seleciton process is used (default true)
* @param int $indent The current indenting
* @param int $section The section to link back to
* @return string XHTML for the editing buttons
*/
function make_editing_buttons(stdClass $mod, $absolute = true, $moveselect = true, $indent=-1, $section=-1) {
function make_editing_buttons(stdClass $mod, $absolute_ignored = true, $moveselect = true, $indent=-1, $section=-1) {
global $CFG, $OUTPUT;
static $str;
@@ -3076,11 +3076,16 @@ function make_editing_buttons(stdClass $mod, $absolute = true, $moveselect = tru
$coursecontext = get_context_instance(CONTEXT_COURSE, $mod->course);
$modcontext = get_context_instance(CONTEXT_MODULE, $mod->id);
// no permission to edit
if (!has_capability('moodle/course:manageactivities', $modcontext)) {
$editcaps = array('moodle/course:manageactivities', 'moodle/course:activityvisibility', 'moodle/role:assign');
$dupecaps = array('moodle/backup:backuptargetimport', 'moodle/restore:restoretargetimport');
// no permission to edit anything
if (!has_any_capability($editcaps, $modcontext) and !has_all_capabilities($dupecaps, $coursecontext)) {
return false;
}
$hasmanageactivities = has_capability('moodle/course:manageactivities', $modcontext);
if (!isset($str)) {
$str = new stdClass;
$str->assign = get_string("assignroles", 'role');
@@ -3101,11 +3106,7 @@ function make_editing_buttons(stdClass $mod, $absolute = true, $moveselect = tru
$str->groupsvisible = get_string("groupsvisible");
}
if ($absolute) {
$baseurl = new moodle_url('/course/mod.php', array('sesskey' => sesskey()));
} else {
$baseurl = new moodle_url('mod.php', array('sesskey' => sesskey()));
}
$baseurl = new moodle_url('/course/mod.php', array('sesskey' => sesskey()));
if ($section >= 0) {
$baseurl->param('sr', $section);
@@ -3113,7 +3114,7 @@ function make_editing_buttons(stdClass $mod, $absolute = true, $moveselect = tru
$actions = array();
// leftright
if (has_capability('moodle/course:update', $coursecontext)) {
if ($hasmanageactivities) {
if (right_to_left()) { // Exchange arrows on RTL
$rightarrow = 't/left';
$leftarrow = 't/right';
@@ -3141,7 +3142,7 @@ function make_editing_buttons(stdClass $mod, $absolute = true, $moveselect = tru
}
// move
if (has_capability('moodle/course:update', $coursecontext)) {
if ($hasmanageactivities) {
if ($moveselect) {
$actions[] = new action_link(
new moodle_url($baseurl, array('copy' => $mod->id)),
@@ -3166,15 +3167,16 @@ function make_editing_buttons(stdClass $mod, $absolute = true, $moveselect = tru
}
// Update
$actions[] = new action_link(
new moodle_url($baseurl, array('update' => $mod->id)),
new pix_icon('t/edit', $str->update, 'moodle', array('class' => 'iconsmall')),
null,
array('class' => 'editing_update', 'title' => $str->update)
);
if ($hasmanageactivities) {
$actions[] = new action_link(
new moodle_url($baseurl, array('update' => $mod->id)),
new pix_icon('t/edit', $str->update, 'moodle', array('class' => 'iconsmall')),
null,
array('class' => 'editing_update', 'title' => $str->update)
);
}
// Duplicate (require both target import caps to be able to duplicate, see modduplicate.php)
$dupecaps = array('moodle/backup:backuptargetimport', 'moodle/restore:restoretargetimport');
if (has_all_capabilities($dupecaps, $coursecontext)) {
$actions[] = new action_link(
new moodle_url($baseurl, array('duplicate' => $mod->id)),
@@ -3185,12 +3187,14 @@ function make_editing_buttons(stdClass $mod, $absolute = true, $moveselect = tru
}
// Delete
$actions[] = new action_link(
new moodle_url($baseurl, array('delete' => $mod->id)),
new pix_icon('t/delete', $str->delete, 'moodle', array('class' => 'iconsmall')),
null,
array('class' => 'editing_delete', 'title' => $str->delete)
);
if ($hasmanageactivities) {
$actions[] = new action_link(
new moodle_url($baseurl, array('delete' => $mod->id)),
new pix_icon('t/delete', $str->delete, 'moodle', array('class' => 'iconsmall')),
null,
array('class' => 'editing_delete', 'title' => $str->delete)
);
}
// hideshow
if (has_capability('moodle/course:activityvisibility', $modcontext)) {
@@ -3212,7 +3216,7 @@ function make_editing_buttons(stdClass $mod, $absolute = true, $moveselect = tru
}
// groupmode
if ($mod->groupmode !== false) {
if ($hasmanageactivities and $mod->groupmode !== false) {
if ($mod->groupmode == SEPARATEGROUPS) {
$groupmode = 0;
$grouptitle = $str->groupsseparate;
@@ -3242,7 +3246,7 @@ function make_editing_buttons(stdClass $mod, $absolute = true, $moveselect = tru
}
// Assign
if (has_capability('moodle/course:managegroups', $modcontext)){
if (has_capability('moodle/role:assign', $modcontext)){
$actions[] = new action_link(
new moodle_url('/'.$CFG->admin.'/roles/assign.php', array('contextid' => $modcontext->id)),
new pix_icon('i/roles', $str->assign, 'moodle', array('class' => 'iconsmall')),
+51 -61
View File
@@ -26,8 +26,6 @@
require("../config.php");
require_once("lib.php");
require_login();
$sectionreturn = optional_param('sr', '', PARAM_INT);
$add = optional_param('add', '', PARAM_ALPHA);
$type = optional_param('type', '', PARAM_ALPHA);
@@ -66,6 +64,8 @@ if ($groupmode !== '') {
}
$PAGE->set_url($url);
require_login();
//check if we are adding / editing a module that has new forms using formslib
if (!empty($add)) {
$id = required_param('id', PARAM_INT);
@@ -76,9 +76,7 @@ if (!empty($add)) {
redirect("$CFG->wwwroot/course/modedit.php?add=$add&type=$type&course=$id&section=$section&return=$returntomod");
} else if (!empty($update)) {
if (!$cm = get_coursemodule_from_id('', $update, 0, true)) {
print_error('invalidcoursemodule');
}
$cm = get_coursemodule_from_id('', $update, 0, true, MUST_EXIST);
$returntomod = optional_param('return', 0, PARAM_BOOL);
redirect("$CFG->wwwroot/course/modedit.php?update=$update&return=$returntomod");
@@ -86,7 +84,7 @@ if (!empty($add)) {
$cm = get_coursemodule_from_id('', $duplicate, 0, true, MUST_EXIST);
$course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST);
require_login($course->id);
require_login($course, false, $cm);
$coursecontext = get_context_instance(CONTEXT_COURSE, $course->id);
$modcontext = get_context_instance(CONTEXT_MODULE, $cm->id);
require_capability('moodle/course:manageactivities', $coursecontext);
@@ -119,17 +117,13 @@ if (!empty($add)) {
}
} else if (!empty($delete)) {
if (!$cm = get_coursemodule_from_id('', $delete, 0, true)) {
print_error('invalidcoursemodule');
}
$cm = get_coursemodule_from_id('', $delete, 0, true, MUST_EXIST);
$course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST);
if (!$course = $DB->get_record('course', array('id'=>$cm->course))) {
print_error('invalidcourseid');
}
require_login($course->id); // needed to setup proper $COURSE
$context = get_context_instance(CONTEXT_COURSE, $course->id);
require_login($course, false, $cm);
$coursecontext = get_context_instance(CONTEXT_COURSE, $course->id);
$modcontext = get_context_instance(CONTEXT_MODULE, $cm->id);
require_capability('moodle/course:manageactivities', $context);
require_capability('moodle/course:manageactivities', $modcontext);
$return = "$CFG->wwwroot/course/view.php?id=$cm->course#section-$cm->sectionnum";
@@ -203,9 +197,13 @@ if (!empty($add)) {
if ((!empty($movetosection) or !empty($moveto)) and confirm_sesskey()) {
if (!$cm = get_coursemodule_from_id('', $USER->activitycopy, 0, true)) {
print_error('invalidcoursemodule');
}
$cm = get_coursemodule_from_id('', $USER->activitycopy, 0, true, MUST_EXIST);
$course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST);
require_login($course, false, $cm);
$coursecontext = get_context_instance(CONTEXT_COURSE, $course->id);
$modcontext = get_context_instance(CONTEXT_MODULE, $cm->id);
require_capability('moodle/course:manageactivities', $modcontext);
if (!empty($movetosection)) {
if (!$section = $DB->get_record('course_sections', array('id'=>$movetosection, 'course'=>$cm->course))) {
@@ -222,10 +220,6 @@ if ((!empty($movetosection) or !empty($moveto)) and confirm_sesskey()) {
}
}
require_login($section->course); // needed to setup proper $COURSE
$context = get_context_instance(CONTEXT_COURSE, $section->course);
require_capability('moodle/course:manageactivities', $context);
if (!ismoving($section->course)) {
print_error('needcopy', '', "view.php?id=$section->course");
}
@@ -246,13 +240,14 @@ if ((!empty($movetosection) or !empty($moveto)) and confirm_sesskey()) {
} else if (!empty($indent) and confirm_sesskey()) {
$id = required_param('id', PARAM_INT);
if (!$cm = get_coursemodule_from_id('', $id, 0, true)) {
print_error('invalidcoursemodule');
}
require_login($cm->course); // needed to setup proper $COURSE
$context = get_context_instance(CONTEXT_COURSE, $cm->course);
require_capability('moodle/course:manageactivities', $context);
$cm = get_coursemodule_from_id('', $id, 0, true, MUST_EXIST);
$course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST);
require_login($course, false, $cm);
$coursecontext = get_context_instance(CONTEXT_COURSE, $course->id);
$modcontext = get_context_instance(CONTEXT_MODULE, $cm->id);
require_capability('moodle/course:manageactivities', $modcontext);
$cm->indent += $indent;
@@ -271,13 +266,13 @@ if ((!empty($movetosection) or !empty($moveto)) and confirm_sesskey()) {
}
} else if (!empty($hide) and confirm_sesskey()) {
if (!$cm = get_coursemodule_from_id('', $hide, 0, true)) {
print_error('invalidcoursemodule');
}
$cm = get_coursemodule_from_id('', $hide, 0, true, MUST_EXIST);
$course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST);
require_login($cm->course); // needed to setup proper $COURSE
$context = get_context_instance(CONTEXT_MODULE, $cm->id);
require_capability('moodle/course:activityvisibility', $context);
require_login($course, false, $cm);
$coursecontext = get_context_instance(CONTEXT_COURSE, $course->id);
$modcontext = get_context_instance(CONTEXT_MODULE, $cm->id);
require_capability('moodle/course:activityvisibility', $modcontext);
set_coursemodule_visible($cm->id, 0);
@@ -290,21 +285,17 @@ if ((!empty($movetosection) or !empty($moveto)) and confirm_sesskey()) {
}
} else if (!empty($show) and confirm_sesskey()) {
if (!$cm = get_coursemodule_from_id('', $show, 0, true)) {
print_error('invalidcoursemodule');
}
$cm = get_coursemodule_from_id('', $show, 0, true, MUST_EXIST);
$course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST);
require_login($cm->course); // needed to setup proper $COURSE
$context = get_context_instance(CONTEXT_COURSE, $cm->course);
require_capability('moodle/course:activityvisibility', $context);
require_login($course, false, $cm);
$coursecontext = get_context_instance(CONTEXT_COURSE, $course->id);
$modcontext = get_context_instance(CONTEXT_MODULE, $cm->id);
require_capability('moodle/course:activityvisibility', $modcontext);
if (!$section = $DB->get_record('course_sections', array('id'=>$cm->section))) {
print_error('sectionnotexist');
}
$section = $DB->get_record('course_sections', array('id'=>$cm->section), '*', MUST_EXIST);
if (!$module = $DB->get_record('modules', array('id'=>$cm->module))) {
print_error('moduledoesnotexist');
}
$module = $DB->get_record('modules', array('id'=>$cm->module), '*', MUST_EXIST);
if ($module->visible and ($section->visible or (SITEID == $cm->course))) {
set_coursemodule_visible($cm->id, 1);
@@ -319,13 +310,14 @@ if ((!empty($movetosection) or !empty($moveto)) and confirm_sesskey()) {
} else if ($groupmode > -1 and confirm_sesskey()) {
$id = required_param('id', PARAM_INT);
if (!$cm = get_coursemodule_from_id('', $id, 0, true)) {
print_error('invalidcoursemodule');
}
require_login($cm->course); // needed to setup proper $COURSE
$context = get_context_instance(CONTEXT_MODULE, $cm->id);
require_capability('moodle/course:manageactivities', $context);
$cm = get_coursemodule_from_id('', $id, 0, true, MUST_EXIST);
$course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST);
require_login($course, false, $cm);
$coursecontext = get_context_instance(CONTEXT_COURSE, $course->id);
$modcontext = get_context_instance(CONTEXT_MODULE, $cm->id);
require_capability('moodle/course:manageactivities', $modcontext);
set_coursemodule_groupmode($cm->id, $groupmode);
@@ -338,17 +330,15 @@ if ((!empty($movetosection) or !empty($moveto)) and confirm_sesskey()) {
}
} else if (!empty($copy) and confirm_sesskey()) { // value = course module
if (!$cm = get_coursemodule_from_id('', $copy, 0, true)) {
print_error('invalidcoursemodule');
}
$cm = get_coursemodule_from_id('', $copy, 0, true, MUST_EXIST);
$course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST);
require_login($cm->course); // needed to setup proper $COURSE
$context = get_context_instance(CONTEXT_COURSE, $cm->course);
require_capability('moodle/course:manageactivities', $context);
require_login($course, false, $cm);
$coursecontext = get_context_instance(CONTEXT_COURSE, $course->id);
$modcontext = get_context_instance(CONTEXT_MODULE, $cm->id);
require_capability('moodle/course:manageactivities', $modcontext);
if (!$section = $DB->get_record('course_sections', array('id'=>$cm->section))) {
print_error('sectionnotexist');
}
$section = $DB->get_record('course_sections', array('id'=>$cm->section), '*', MUST_EXIST);
$USER->activitycopy = $copy;
$USER->activitycopycourse = $cm->course;
+4 -1
View File
@@ -365,7 +365,9 @@ if ($mform->is_cancelled()) {
}
// make sure visibility is set correctly (in particular in calendar)
set_coursemodule_visible($fromform->coursemodule, $fromform->visible);
if (has_capability('moodle/course:activityvisibility', $modcontext)) {
set_coursemodule_visible($fromform->coursemodule, $fromform->visible);
}
if (isset($fromform->cmidnumber)) { //label
// set cm idnumber - uniqueness is already verified by form validation
@@ -477,6 +479,7 @@ if ($mform->is_cancelled()) {
$DB->set_field('course_modules', 'section', $sectionid, array('id'=>$fromform->coursemodule));
// make sure visibility is set correctly (in particular in calendar)
// note: allow them to set it even without moodle/course:activityvisibility
set_coursemodule_visible($fromform->coursemodule, $fromform->visible);
if (isset($fromform->cmidnumber)) { //label
+6
View File
@@ -422,6 +422,12 @@ abstract class moodleform_mod extends moodleform {
}
$mform->addElement('modvisible', 'visible', get_string('visible'));
if (!empty($this->_cm)) {
$context = get_context_instance(CONTEXT_MODULE, $this->_cm->id);
if (!has_capability('moodle/course:activityvisibility', $context)) {
$mform->hardFreeze('visible');
}
}
if ($this->_features->idnumber) {
$mform->addElement('text', 'cmidnumber', get_string('idnumbermod'));
+22 -20
View File
@@ -43,16 +43,16 @@ $pageaction = optional_param('action', '', PARAM_ALPHA); // Used to simulate a D
$PAGE->set_url('/course/rest.php', array('courseId'=>$courseid,'class'=>$class));
//NOTE: when making any changes here please make sure it is using the same access control as course/mod.php !!
require_login();
// Authorise the user and verify some incoming data
if (!$course = $DB->get_record('course', array('id'=>$courseid))) {
error_log('AJAX commands.php: Course does not exist');
die;
}
$context = get_context_instance(CONTEXT_COURSE, $course->id);
require_login($course);
require_capability('moodle/course:update', $context);
if (empty($CFG->enablecourseajax)) {
error_log('Course AJAX not allowed');
die;
@@ -72,22 +72,13 @@ switch($requestmethod) {
switch ($class) {
case 'block':
switch ($field) {
case 'visible':
blocks_execute_action($PAGE, $pageblocks, 'toggle', $blockinstance);
break;
case 'position': // Misleading case. Should probably call it 'move'.
// We want to move the block around. This means changing
// the column (position field) and/or block sort order
// (weight field).
blocks_move_block($PAGE, $blockinstance, $column, $value);
break;
}
// not used any more
break;
case 'section':
require_login($course);
$coursecontext = get_context_instance(CONTEXT_COURSE, $course->id);
require_capability('moodle/course:update', $coursecontext);
if (!$DB->record_exists('course_sections', array('course'=>$course->id, 'section'=>$id))) {
error_log('AJAX commands.php: Bad Section ID '.$id);
@@ -111,16 +102,21 @@ switch($requestmethod) {
error_log('AJAX commands.php: Bad course module ID '.$id);
die;
}
require_login($course, false, $cm);
$modcontext = get_context_instance(CONTEXT_MODULE, $cm->id);
switch ($field) {
case 'visible':
require_capability('moodle/course:activityvisibility', $modcontext);
set_coursemodule_visible($cm->id, $value);
break;
case 'groupmode':
require_capability('moodle/course:manageactivities', $modcontext);
set_coursemodule_groupmode($cm->id, $value);
break;
case 'indentleft':
require_capability('moodle/course:manageactivities', $modcontext);
if ($cm->indent > 0) {
$cm->indent--;
$DB->update_record('course_modules', $cm);
@@ -128,11 +124,13 @@ switch($requestmethod) {
break;
case 'indentright':
require_capability('moodle/course:manageactivities', $modcontext);
$cm->indent++;
$DB->update_record('course_modules', $cm);
break;
case 'move':
require_capability('moodle/course:manageactivities', $modcontext);
if (!$section = $DB->get_record('course_sections', array('course'=>$course->id, 'section'=>$sectionid))) {
error_log('AJAX commands.php: Bad section ID '.$sectionid);
die;
@@ -158,6 +156,9 @@ switch($requestmethod) {
case 'course':
switch($field) {
case 'marker':
require_login($course);
$coursecontext = get_context_instance(CONTEXT_COURSE, $course->id);
require_capability('moodle/course:update', $coursecontext);
$newcourse = new stdClass();
$newcourse->id = $course->id;
$newcourse->marker = $value;
@@ -171,7 +172,7 @@ switch($requestmethod) {
case 'DELETE':
switch ($class) {
case 'block':
blocks_execute_action($PAGE, $pageblocks, 'delete', $blockinstance);
// not used any more
break;
case 'resource':
@@ -179,6 +180,9 @@ switch($requestmethod) {
error_log('AJAX rest.php: Bad course module ID '.$id);
die;
}
require_login($course, false, $cm);
$modcontext = get_context_instance(CONTEXT_MODULE, $cm->id);
require_capability('moodle/course:manageactivities', $modcontext);
$modlib = "$CFG->dirroot/mod/$cm->modname/lib.php";
if (file_exists($modlib)) {
@@ -195,8 +199,6 @@ switch($requestmethod) {
die;
}
$modcontext = get_context_instance(CONTEXT_MODULE, $cm->id);
// remove all module files in case modules forget to do that
$fs = get_file_storage();
$fs->delete_area_files($modcontext->id);
+15 -13
View File
@@ -117,22 +117,24 @@
redirect($PAGE->url);
}
if ($hide && confirm_sesskey()) {
set_section_visible($course->id, $hide, '0');
}
if (has_capability('moodle/course:update', $context)) {
if ($hide && confirm_sesskey()) {
set_section_visible($course->id, $hide, '0');
}
if ($show && confirm_sesskey()) {
set_section_visible($course->id, $show, '1');
}
if ($show && confirm_sesskey()) {
set_section_visible($course->id, $show, '1');
}
if (!empty($section)) {
if (!empty($move) and confirm_sesskey()) {
if (!move_section($course, $section, $move)) {
echo $OUTPUT->notification('An error occurred while moving a section');
if (!empty($section)) {
if (!empty($move) and confirm_sesskey()) {
if (!move_section($course, $section, $move)) {
echo $OUTPUT->notification('An error occurred while moving a section');
}
// Clear the navigation cache at this point so that the affects
// are seen immediately on the navigation.
$PAGE->navigation->clear_cache();
}
// Clear the navigation cache at this point so that the affects
// are seen immediately on the navigation.
$PAGE->navigation->clear_cache();
}
}
} else {
+1 -5
View File
@@ -6396,10 +6396,6 @@ class context_module extends context {
$extracaps = array_merge($subcaps, $extracaps);
// All modules allow viewhiddenactivities. This is so you can hide
// the module then override to allow specific roles to see it.
// The actual check is in course page so not module-specific
$extracaps[] = "moodle/course:viewhiddenactivities";
list($extra, $params) = $DB->get_in_or_equal(
$extracaps, SQL_PARAMS_NAMED, 'cap0');
$extra = "OR name $extra";
@@ -6407,7 +6403,7 @@ class context_module extends context {
$sql = "SELECT *
FROM {capabilities}
WHERE (contextlevel = ".CONTEXT_MODULE."
AND component = :component)
AND (component = :component OR component = 'moodle'))
$extra";
$params['component'] = "mod_$module->name";
+41 -23
View File
@@ -628,6 +628,9 @@ resource_class.prototype.init_buttons = function() {
var buttons = commandContainer.getElementsByTagName('a');
// Buttons that we might need to add back in.
var deletePresent = false;
var hideshow = false;
var movehandle = false;
var moveLeft = false;
var moveRight = false;
var updateButton = null;
@@ -654,25 +657,34 @@ resource_class.prototype.init_buttons = function() {
this.groupmode = this.SEPARATEGROUPS;
} else if (buttons[x].className == 'editing_groupsvisible') {
this.groupmode = this.VISIBLEGROUPS;
} else if (buttons[x].className == 'editing_delete') {
deletePresent = true;
} else if (buttons[x].className == 'editing_hide') {
hideshow = true;
} else if (buttons[x].className == 'editing_show') {
hideshow = true;
} else if (buttons[x].className == 'editing_moveup') {
movehandle = true;
} else if (buttons[x].className == 'editing_movedown') {
movehandle = true;
} else if (buttons[x].className == 'editing_move') {
movehandle = true;
}
}
if (updateButton == null) {
// Update button must always be present.
YAHOO.log('Cannot find updateButton for '+this.getEl().id, 'error');
}
// Clear all the buttons.
commandContainer.innerHTML = '';
// Add move-handle for drag and drop.
var handleRef = main.mk_button('a', main.portal.icons['move_2d'], main.portal.strings['move'],
[['style', 'cursor:move']], [['class', 'iconsmall']]);
if (movehandle) {
var handleRef = main.mk_button('a', main.portal.icons['move_2d'], main.portal.strings['move'],
[['style', 'cursor:move']], [['class', 'iconsmall']]);
YAHOO.util.Dom.generateId(handleRef, 'sectionHandle');
this.handle = handleRef;
commandContainer.appendChild(handleRef);
this.setHandleElId(this.handle.id);
YAHOO.util.Dom.generateId(handleRef, 'sectionHandle');
this.handle = handleRef;
commandContainer.appendChild(handleRef);
this.setHandleElId(this.handle.id);
}
// Add indentation buttons if needed (move left, move right).
if (moveLeft) {
@@ -691,27 +703,33 @@ resource_class.prototype.init_buttons = function() {
this.indentRightButton = button;
}
// Add edit button back in.
commandContainer.appendChild(updateButton);
if (updateButton) {
// Add edit button back in.
commandContainer.appendChild(updateButton);
}
if (duplicateButton) {
commandContainer.appendChild(duplicateButton);
}
// Add the delete button.
var button = main.mk_button('a', main.portal.icons['delete'], main.portal.strings['delete'], null, [['class', 'iconsmall']]);
YAHOO.util.Event.addListener(button, 'click', this.delete_button, this, true);
commandContainer.appendChild(button);
if (deletePresent) {
var button = main.mk_button('a', main.portal.icons['delete'], main.portal.strings['delete'], null, [['class', 'iconsmall']]);
YAHOO.util.Event.addListener(button, 'click', this.delete_button, this, true);
commandContainer.appendChild(button);
}
// Add the hide or show button.
if (this.hidden) {
var button = main.mk_button('a', main.portal.icons['show'], main.portal.strings['show'], null, [['class', 'iconsmall']]);
} else {
var button = main.mk_button('a', main.portal.icons['hide'], main.portal.strings['hide'], null, [['class', 'iconsmall']]);
if (hideshow) {
if (this.hidden) {
var button = main.mk_button('a', main.portal.icons['show'], main.portal.strings['show'], null, [['class', 'iconsmall']]);
} else {
var button = main.mk_button('a', main.portal.icons['hide'], main.portal.strings['hide'], null, [['class', 'iconsmall']]);
}
YAHOO.util.Event.addListener(button, 'click', this.toggle_hide, this, true);
commandContainer.appendChild(button);
this.viewButton = button;
}
YAHOO.util.Event.addListener(button, 'click', this.toggle_hide, this, true);
commandContainer.appendChild(button);
this.viewButton = button;
// Add the groupmode button if needed.
if (this.groupmode != null) {
+3 -3
View File
@@ -856,7 +856,7 @@ $capabilities = array(
'riskbitmask' => RISK_XSS,
'captype' => 'write',
'contextlevel' => CONTEXT_COURSE,
'contextlevel' => CONTEXT_MODULE,
'archetypes' => array(
'editingteacher' => CAP_ALLOW,
'manager' => CAP_ALLOW
@@ -866,7 +866,7 @@ $capabilities = array(
'moodle/course:activityvisibility' => array(
'captype' => 'write',
'contextlevel' => CONTEXT_COURSE,
'contextlevel' => CONTEXT_MODULE,
'archetypes' => array(
'editingteacher' => CAP_ALLOW,
'manager' => CAP_ALLOW
@@ -876,7 +876,7 @@ $capabilities = array(
'moodle/course:viewhiddenactivities' => array(
'captype' => 'write',
'contextlevel' => CONTEXT_COURSE,
'contextlevel' => CONTEXT_MODULE,
'archetypes' => array(
'teacher' => CAP_ALLOW,
'editingteacher' => CAP_ALLOW,