From e4e96115702bb6bc43f6cbb5e306cafdb54f2efe Mon Sep 17 00:00:00 2001 From: Rossiani Wijaya Date: Fri, 11 Mar 2011 10:03:14 +0800 Subject: [PATCH] MDL-26464: remove 'add entry' link on setting block when it reachs the max number of records. Link removal does not apply to user who has data:manageentries capability (eg: teacher). --- mod/data/edit.php | 4 ++-- mod/data/lib.php | 22 ++++++++++++++++------ mod/data/tabs.php | 2 +- 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/mod/data/edit.php b/mod/data/edit.php index c1acdb5cc75..4ad9c58c361 100644 --- a/mod/data/edit.php +++ b/mod/data/edit.php @@ -190,7 +190,7 @@ if ($datarecord = data_submitted() and confirm_sesskey()) { } else { /// Add some new records - if (!data_user_can_add_entry($data, $currentgroup, $groupmode)) { + if (!data_user_can_add_entry($data, $currentgroup, $groupmode, $context)) { print_error('cannotadd', 'data'); } @@ -317,7 +317,7 @@ echo '
'; } else { - if ( (!$data->maxentries) || (data_numentries($data)<($data->maxentries-1)) ) { + if ((!$data->maxentries) || has_capability('mod/data:manageentries', $context) || (data_numentries($data) < ($data->maxentries - 1))) { echo ' '; } } diff --git a/mod/data/lib.php b/mod/data/lib.php index 6c02c047fa2..998e5f0b327 100644 --- a/mod/data/lib.php +++ b/mod/data/lib.php @@ -1933,15 +1933,25 @@ function data_print_header($course, $cm, $data, $currenttab='') { * @param int $groupmode * @return bool */ -function data_user_can_add_entry($data, $currentgroup, $groupmode) { +function data_user_can_add_entry($data, $currentgroup, $groupmode, $context = null) { global $USER; - if (!$cm = get_coursemodule_from_instance('data', $data->id)) { - print_error('invalidcoursemodule'); + if (empty($context)) { + if (!$cm = get_coursemodule_from_instance('data', $data->id)) { + print_error('invalidcoursemodule'); + } + $context = get_context_instance(CONTEXT_MODULE, $cm->id); } - $context = get_context_instance(CONTEXT_MODULE, $cm->id); - if (!has_capability('mod/data:writeentry', $context) and !has_capability('mod/data:manageentries',$context)) { + $haswritecapability = has_capability('mod/data:writeentry', $context); + $hasmanagecapability = has_capability('mod/data:manageentries', $context); + + if (!$haswritecapability && !$hasmanagecapability) { + return false; + } + + //check for maximum number of entries + if ($haswritecapability && !$hasmanagecapability && data_atmaxentries($data)) { return false; } @@ -2836,7 +2846,7 @@ function data_extend_settings_navigation(settings_navigation $settings, navigati $currentgroup = groups_get_activity_group($PAGE->cm); $groupmode = groups_get_activity_groupmode($PAGE->cm); - if (data_user_can_add_entry($data, $currentgroup, $groupmode)) { // took out participation list here! + if (data_user_can_add_entry($data, $currentgroup, $groupmode, $PAGE->cm->context)) { // took out participation list here! if (empty($editentry)) { //TODO: undefined $addstring = get_string('add', 'data'); } else { diff --git a/mod/data/tabs.php b/mod/data/tabs.php index 65e21ca0ad4..214aca6f824 100644 --- a/mod/data/tabs.php +++ b/mod/data/tabs.php @@ -49,7 +49,7 @@ $row[] = new tabobject('asearch', $CFG->wwwroot.'/mod/data/view.php?d='.$data->id.'&mode=asearch', get_string('search', 'data')); if (isloggedin()) { // just a perf shortcut - if (data_user_can_add_entry($data, $currentgroup, $groupmode) && !data_atmaxentries($data)) { // took out participation list here! + if (data_user_can_add_entry($data, $currentgroup, $groupmode, $context)) { // took out participation list here! $addstring = empty($editentry) ? get_string('add', 'data') : get_string('editentry', 'data'); $row[] = new tabobject('add', $CFG->wwwroot.'/mod/data/edit.php?d='.$data->id, $addstring); }