Skip to content

Commit

Permalink
Merge branch 'MDL-62944-m35' of https://github.com/NeillM/moodle into…
Browse files Browse the repository at this point in the history
… MOODLE_35_STABLE
  • Loading branch information
David Monllao committed Sep 4, 2018
2 parents e7dc32a + d6cbf8b commit 1d16496
Show file tree
Hide file tree
Showing 35 changed files with 737 additions and 35 deletions.
3 changes: 3 additions & 0 deletions calendar/classes/external/event_exporter_base.php
Expand Up @@ -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;
Expand Down
8 changes: 5 additions & 3 deletions calendar/templates/event_item.mustache
Expand Up @@ -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}}
Expand Down
4 changes: 2 additions & 2 deletions completion/classes/api.php
Expand Up @@ -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);
Expand All @@ -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);
}
}

Expand Down
44 changes: 44 additions & 0 deletions completion/tests/behat/completion_no_calendar_capabilities.feature
@@ -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"
57 changes: 57 additions & 0 deletions completion/tests/capabilities_test.php
@@ -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);
}
}
2 changes: 1 addition & 1 deletion mod/assign/lib.php
Expand Up @@ -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);
}
}

Expand Down
8 changes: 4 additions & 4 deletions mod/assign/locallib.php
Expand Up @@ -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,
Expand All @@ -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,
Expand Down
58 changes: 58 additions & 0 deletions mod/assign/tests/behat/assign_no_calendar_capabilities.feature
@@ -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"
25 changes: 25 additions & 0 deletions mod/assign/tests/lib_test.php
Expand Up @@ -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);
}
}
10 changes: 5 additions & 5 deletions mod/chat/lib.php
Expand Up @@ -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)) {
Expand Down Expand Up @@ -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);
Expand All @@ -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);
}
}

Expand Down Expand Up @@ -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;
Expand All @@ -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);
}
}

Expand Down
43 changes: 43 additions & 0 deletions mod/chat/tests/behat/chat_no_calendar_capabilities.feature
@@ -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"
21 changes: 21 additions & 0 deletions mod/chat/tests/lib_test.php
Expand Up @@ -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);
}
}

0 comments on commit 1d16496

Please sign in to comment.