Permalink
Browse files

Merge branch 'MDL-62944-m35' of https://github.com/NeillM/moodle into…

… MOODLE_35_STABLE
  • Loading branch information...
dmonllao committed Sep 4, 2018
2 parents e7dc32a + d6cbf8b commit 1d16496ee624260f3bbaa0678d0b3944ec4ef7b6
Showing with 737 additions and 35 deletions.
  1. +3 −0 calendar/classes/external/event_exporter_base.php
  2. +5 −3 calendar/templates/event_item.mustache
  3. +2 −2 completion/classes/api.php
  4. +44 −0 completion/tests/behat/completion_no_calendar_capabilities.feature
  5. +57 −0 completion/tests/capabilities_test.php
  6. +1 −1 mod/assign/lib.php
  7. +4 −4 mod/assign/locallib.php
  8. +58 −0 mod/assign/tests/behat/assign_no_calendar_capabilities.feature
  9. +25 −0 mod/assign/tests/lib_test.php
  10. +5 −5 mod/chat/lib.php
  11. +43 −0 mod/chat/tests/behat/chat_no_calendar_capabilities.feature
  12. +21 −0 mod/chat/tests/lib_test.php
  13. +4 −4 mod/choice/locallib.php
  14. +50 −0 mod/choice/tests/behat/choice_no_calendar_capabilities.feature
  15. +23 −0 mod/choice/tests/lib_test.php
  16. +1 −0 mod/data/edit.php
  17. +1 −0 mod/data/export.php
  18. +1 −0 mod/data/field.php
  19. +4 −4 mod/data/locallib.php
  20. +1 −0 mod/data/preset.php
  21. +1 −0 mod/data/templates.php
  22. +58 −0 mod/data/tests/behat/data_no_calendar_capabilities.feature
  23. +25 −0 mod/data/tests/lib_test.php
  24. +4 −4 mod/feedback/lib.php
  25. +48 −0 mod/feedback/tests/behat/feedback_no_calendar_capabilities.feature
  26. +23 −0 mod/feedback/tests/lib_test.php
  27. +2 −2 mod/lesson/lib.php
  28. +48 −0 mod/lesson/tests/behat/lesson_no_calendar_capabilities.feature
  29. +23 −0 mod/lesson/tests/lib_test.php
  30. +2 −2 mod/quiz/lib.php
  31. +48 −0 mod/quiz/tests/behat/quiz_no_calendar_capabilities.feature
  32. +23 −0 mod/quiz/tests/lib_test.php
  33. +4 −4 mod/scorm/locallib.php
  34. +52 −0 mod/scorm/tests/behat/scorm_no_calendar_capabilities.feature
  35. +23 −0 mod/scorm/tests/lib_test.php
@@ -248,6 +248,9 @@ protected function get_other_values(renderer_base $output) {
$values['iscourseevent'] = false;
$values['iscategoryevent'] = false;
if ($moduleproxy = $event->get_course_module()) {
// We need a separate property to flag if an event is action event.
// That's required because canedit return true but action action events cannot be edited on the calendar UI.
// But they are considered editable because you can drag and drop the event on the month view.
$values['isactionevent'] = true;
} else if ($event->get_type() == 'course') {
$values['iscourseevent'] = true;
@@ -49,9 +49,11 @@
{{#pix}}t/delete, core, {{#str}}delete{{/str}}{{/pix}}
</a>
{{/candelete}}
<a href="{{editurl}}" data-action="edit">
{{#pix}}t/edit, core, {{#str}}edit{{/str}}{{/pix}}
</a>
{{^isactionevent}}
<a href="{{editurl}}" data-action="edit">
{{#pix}}t/edit, core, {{#str}}edit{{/str}}{{/pix}}
</a>
{{/isactionevent}}
{{/canedit}}
</div>
{{#icon}}{{#pix}} {{key}}, {{component}}, {{alttext}} {{/pix}}{{/icon}}
@@ -94,7 +94,7 @@ public static function update_completion_date_event($cmid, $modulename, $instanc
$event->timeduration = 0;
$calendarevent = \calendar_event::load($event->id);
$calendarevent->update($event);
$calendarevent->update($event, false);
} else {
// Calendar event is no longer needed.
$calendarevent = \calendar_event::load($event->id);
@@ -115,7 +115,7 @@ public static function update_completion_date_event($cmid, $modulename, $instanc
$event->visible = instance_is_visible($modulename, $instance);
$event->timeduration = 0;
\calendar_event::create($event);
\calendar_event::create($event, false);
}
}
@@ -0,0 +1,44 @@
@core @core_completion
Feature: Completion with no calendar capabilites
In order to allow work effectively
As a teacher
I need to be able to create activities with completion enabled without calendar capabilities
Background:
Given the following "courses" exist:
| fullname | shortname | category | groupmode | enablecompletion |
| Course 1 | C1 | 0 | 1 | 1 |
And the following "users" exist:
| username | firstname | lastname | email |
| teacher1 | Teacher | 1 | teacher1@example.com |
And the following "course enrolments" exist:
| user | course | role |
| teacher1 | C1 | editingteacher |
And I log in as "admin"
And I am on "Course 1" course homepage
And I navigate to "Users > Permissions" in current page administration
And I override the system permissions of "Teacher" role with:
| capability | permission |
| moodle/calendar:manageentries | Prohibit |
And I log out
Scenario: Editing completion date
Given I log in as "admin"
And I am on "Course 1" course homepage with editing mode on
When I add a "Forum" to section "1" and I fill the form with:
| Forum name | Test forum name |
| Description | Test forum description |
| Completion tracking | Show activity as complete when conditions are met |
| id_completionexpected_enabled | 1 |
| id_completionexpected_day | 1 |
| id_completionexpected_month | 1 |
| id_completionexpected_year | 2017 |
And I log out
When I log in as "teacher1"
And I am on "Course 1" course homepage with editing mode on
And I follow "Test forum name"
And I navigate to "Edit settings" in current page administration
And I set the following fields to these values:
| id_completionexpected_year | 2018 |
And I press "Save and return to course"
Then I should see "Test forum name"
@@ -0,0 +1,57 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Tests that completion works without requiring unnecessary capabilities.
*
* @package core_completion
* @copyright 2018 University of Nottingham
* @author Neill Magill <neill.magill@nottingham.ac.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
/**
* Tests that completion works without requiring unnecessary capabilities.
*
* @package core_completion
* @copyright 2018 University of Nottingham
* @author Neill Magill <neill.magill@nottingham.ac.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class core_completion_capabilities_testcase extends advanced_testcase {
/**
* A user who does not have capabilities to add events to the calendar should be able to create activities.
*/
public function test_creation_with_no_calendar_capabilities() {
$this->resetAfterTest();
$course = self::getDataGenerator()->create_course(['enablecompletion' => 1]);
$context = context_course::instance($course->id);
$user = self::getDataGenerator()->create_and_enrol($course, 'editingteacher');
$roleid = self::getDataGenerator()->create_role();
self::getDataGenerator()->role_assign($roleid, $user->id, $context->id);
assign_capability('moodle/calendar:manageentries', CAP_PROHIBIT, $roleid, $context, true);
$generator = self::getDataGenerator()->get_plugin_generator('mod_forum');
// Create an instance as a user without the calendar capabilities.
$this->setUser($user);
$params = array(
'course' => $course->id,
'completionexpected' => time() + 2000,
);
$generator->create_instance($params);
}
}
@@ -345,7 +345,7 @@ function assign_update_events($assign, $override = null) {
unset($event->id);
}
$event->name = $eventname.' ('.get_string('duedate', 'assign').')';
calendar_event::create($event);
calendar_event::create($event, false);
}
}
@@ -1332,9 +1332,9 @@ public function update_calendar($coursemoduleid) {
// Now process the event.
if ($event->id) {
$calendarevent = calendar_event::load($event->id);
$calendarevent->update($event);
$calendarevent->update($event, false);
} else {
calendar_event::create($event);
calendar_event::create($event, false);
}
} else {
$DB->delete_records('event', array('modulename' => 'assign', 'instance' => $instance->id,
@@ -1353,9 +1353,9 @@ public function update_calendar($coursemoduleid) {
// Now process the event.
if ($event->id) {
$calendarevent = calendar_event::load($event->id);
$calendarevent->update($event);
$calendarevent->update($event, false);
} else {
calendar_event::create($event);
calendar_event::create($event, false);
}
} else {
$DB->delete_records('event', array('modulename' => 'assign', 'instance' => $instance->id,
@@ -0,0 +1,58 @@
@mod @mod_assign
Feature: Assignment with no calendar capabilites
In order to allow work effectively
As a teacher
I need to be able to create assignments even when I cannot edit calendar events
Background:
Given the following "courses" exist:
| fullname | shortname | category | groupmode |
| Course 1 | C1 | 0 | 1 |
And the following "users" exist:
| username | firstname | lastname | email |
| teacher1 | Teacher | 1 | teacher1@example.com |
And the following "course enrolments" exist:
| user | course | role |
| teacher1 | C1 | editingteacher |
And I log in as "admin"
And I am on "Course 1" course homepage
And I navigate to "Users > Permissions" in current page administration
And I override the system permissions of "Teacher" role with:
| capability | permission |
| moodle/calendar:manageentries | Prohibit |
And I log out
Scenario: Editing an assignment
Given I log in as "admin"
And I am on "Course 1" course homepage with editing mode on
When I add a "Assignment" to section "1" and I fill the form with:
| Assignment name | Test assignment name |
| Description | Test assignment description |
| id_allowsubmissionsfromdate_enabled | 1 |
| id_allowsubmissionsfromdate_day | 1 |
| id_allowsubmissionsfromdate_month | 1 |
| id_allowsubmissionsfromdate_year | 2017 |
| id_duedate_enabled | 1 |
| id_duedate_day | 1 |
| id_duedate_month | 2 |
| id_duedate_year | 2017 |
| id_cutoffdate_enabled | 1 |
| id_cutoffdate_day | 2 |
| id_cutoffdate_month | 2 |
| id_cutoffdate_year | 2017 |
| id_gradingduedate_enabled | 1 |
| id_gradingduedate_day | 1 |
| id_gradingduedate_month | 3 |
| id_gradingduedate_year | 2017 |
And I log out
When I log in as "teacher1"
And I am on "Course 1" course homepage with editing mode on
And I follow "Test assignment name"
And I navigate to "Edit settings" in current page administration
And I set the following fields to these values:
| id_allowsubmissionsfromdate_year | 2018 |
| id_duedate_year | 2018 |
| id_cutoffdate_year | 2018 |
| id_gradingduedate_year | 2018 |
And I press "Save and return to course"
Then I should see "Test assignment name"
@@ -1472,4 +1472,29 @@ public function test_teacher_role_can_update_due_event() {
// is changed.
$this->assertNotEmpty($moduleupdatedevents);
}
/**
* A user who does not have capabilities to add events to the calendar should be able to create an assignment.
*/
public function test_creation_with_no_calendar_capabilities() {
$this->resetAfterTest();
$course = self::getDataGenerator()->create_course();
$context = context_course::instance($course->id);
$user = self::getDataGenerator()->create_and_enrol($course, 'editingteacher');
$roleid = self::getDataGenerator()->create_role();
self::getDataGenerator()->role_assign($roleid, $user->id, $context->id);
assign_capability('moodle/calendar:manageentries', CAP_PROHIBIT, $roleid, $context, true);
$generator = self::getDataGenerator()->get_plugin_generator('mod_assign');
// Create an instance as a user without the calendar capabilities.
$this->setUser($user);
$time = time();
$params = array(
'course' => $course->id,
'allowsubmissionsfromdate' => $time,
'duedate' => $time + 500,
'cutoffdate' => $time + 600,
'gradingduedate' => $time + 700,
);
$generator->create_instance($params);
}
}
@@ -134,7 +134,7 @@ function chat_add_instance($chat) {
$event->timesort = $chat->chattime;
$event->timeduration = 0;
calendar_event::create($event);
calendar_event::create($event, false);
}
if (!empty($chat->completionexpected)) {
@@ -174,7 +174,7 @@ function chat_update_instance($chat) {
$event->timesort = $chat->chattime;
$calendarevent = calendar_event::load($event->id);
$calendarevent->update($event);
$calendarevent->update($event, false);
} else {
// Do not publish this event, so delete it.
$calendarevent = calendar_event::load($event->id);
@@ -197,7 +197,7 @@ function chat_update_instance($chat) {
$event->timesort = $chat->chattime;
$event->timeduration = 0;
calendar_event::create($event);
calendar_event::create($event, false);
}
}
@@ -501,7 +501,7 @@ function chat_prepare_update_events($chat, $cm = null) {
if ($event->id = $DB->get_field('event', 'id', array('modulename' => 'chat', 'instance' => $chat->id,
'eventtype' => CHAT_EVENT_TYPE_CHATTIME))) {
$calendarevent = calendar_event::load($event->id);
$calendarevent->update($event);
$calendarevent->update($event, false);
} else if ($chat->schedule > 0) {
// The chat is scheduled and the event should be published.
$event->courseid = $chat->course;
@@ -512,7 +512,7 @@ function chat_prepare_update_events($chat, $cm = null) {
$event->eventtype = CHAT_EVENT_TYPE_CHATTIME;
$event->timeduration = 0;
$event->visible = $cm->visible;
calendar_event::create($event);
calendar_event::create($event, false);
}
}
@@ -0,0 +1,43 @@
@mod @mod_chat
Feature: Chat with no calendar capabilites
In order to allow work effectively
As a teacher
I need to be able to create chats even when I cannot edit calendar events
Background:
Given the following "courses" exist:
| fullname | shortname | category | groupmode |
| Course 1 | C1 | 0 | 1 |
And the following "users" exist:
| username | firstname | lastname | email |
| teacher1 | Teacher | 1 | teacher1@example.com |
And the following "course enrolments" exist:
| user | course | role |
| teacher1 | C1 | editingteacher |
And I log in as "admin"
And I am on "Course 1" course homepage
And I navigate to "Users > Permissions" in current page administration
And I override the system permissions of "Teacher" role with:
| capability | permission |
| moodle/calendar:manageentries | Prohibit |
And I log out
Scenario: Editing a chat
Given I log in as "admin"
And I am on "Course 1" course homepage with editing mode on
When I add a "Chat" to section "1" and I fill the form with:
| Name of this chat room | Test chat name |
| Description | Test chat description |
| Repeat/publish session times | No repeats - publish the specified time only |
| id_chattime_day | 1 |
| id_chattime_month | 1 |
| id_chattime_year | 2017 |
And I log out
When I log in as "teacher1"
And I am on "Course 1" course homepage with editing mode on
And I follow "Test chat name"
And I navigate to "Edit settings" in current page administration
And I set the following fields to these values:
| id_chattime_year | 2018 |
And I press "Save and return to course"
Then I should see "Test chat name"
@@ -363,4 +363,25 @@ private function create_action_event($courseid, $instanceid, $eventtype) {
return calendar_event::create($event);
}
/**
* A user who does not have capabilities to add events to the calendar should be able to create an chat.
*/
public function test_creation_with_no_calendar_capabilities() {
$this->resetAfterTest();
$course = self::getDataGenerator()->create_course();
$context = context_course::instance($course->id);
$user = self::getDataGenerator()->create_and_enrol($course, 'editingteacher');
$roleid = self::getDataGenerator()->create_role();
self::getDataGenerator()->role_assign($roleid, $user->id, $context->id);
assign_capability('moodle/calendar:manageentries', CAP_PROHIBIT, $roleid, $context, true);
$generator = self::getDataGenerator()->get_plugin_generator('mod_chat');
// Create an instance as a user without the calendar capabilities.
$this->setUser($user);
$params = array(
'course' => $course->id,
'chattime' => time() + 500,
);
$generator->create_instance($params);
}
}
Oops, something went wrong.

0 comments on commit 1d16496

Please sign in to comment.