Merge branch 'MDL-64641-master' of git://github.com/jleyva/moodle

This commit is contained in:
Eloy Lafuente (stronk7) 2019-04-23 13:43:56 +02:00
commit 735122c33f
6 changed files with 311 additions and 26 deletions

View File

@ -280,6 +280,15 @@ class api {
$settings->tool_mobile_apppolicy = get_config('tool_mobile', 'apppolicy');
}
if (empty($section) or $section == 'calendar') {
$settings->calendartype = $CFG->calendartype;
$settings->calendar_site_timeformat = $CFG->calendar_site_timeformat;
$settings->calendar_startwday = $CFG->calendar_startwday;
$settings->calendar_adminseesall = $CFG->calendar_adminseesall;
$settings->calendar_lookahead = $CFG->calendar_lookahead;
$settings->calendar_maxevents = $CFG->calendar_maxevents;
}
return $settings;
}

View File

@ -177,6 +177,12 @@ class tool_mobile_external_testcase extends externallib_advanced_testcase {
array('name' => 'tool_mobile_disabledfeatures', 'value' => ''),
array('name' => 'tool_mobile_custommenuitems', 'value' => ''),
array('name' => 'tool_mobile_apppolicy', 'value' => ''),
array('name' => 'calendartype', 'value' => $CFG->calendartype),
array('name' => 'calendar_site_timeformat', 'value' => $CFG->calendar_site_timeformat),
array('name' => 'calendar_startwday', 'value' => $CFG->calendar_startwday),
array('name' => 'calendar_adminseesall', 'value' => $CFG->calendar_adminseesall),
array('name' => 'calendar_lookahead', 'value' => $CFG->calendar_lookahead),
array('name' => 'calendar_maxevents', 'value' => $CFG->calendar_maxevents),
);
$this->assertCount(0, $result['warnings']);
$this->assertEquals($expected, $result['settings']);

View File

@ -28,6 +28,7 @@
defined('MOODLE_INTERNAL') || die;
require_once("$CFG->libdir/externallib.php");
require_once($CFG->dirroot . '/calendar/lib.php');
use \core_calendar\local\api as local_api;
use \core_calendar\local\event\container as event_container;
@ -79,8 +80,7 @@ class core_calendar_external extends external_api {
* @since Moodle 2.5
*/
public static function delete_calendar_events($events) {
global $CFG, $DB;
require_once($CFG->dirroot."/calendar/lib.php");
global $DB;
// Parameter validation.
$params = self::validate_parameters(self:: delete_calendar_events_parameters(), array('events' => $events));
@ -173,8 +173,7 @@ class core_calendar_external extends external_api {
* @since Moodle 2.5
*/
public static function get_calendar_events($events = array(), $options = array()) {
global $SITE, $DB, $USER, $CFG;
require_once($CFG->dirroot."/calendar/lib.php");
global $SITE, $DB, $USER;
// Parameter validation.
$params = self::validate_parameters(self::get_calendar_events_parameters(), array('events' => $events, 'options' => $options));
@ -426,9 +425,7 @@ class core_calendar_external extends external_api {
public static function get_calendar_action_events_by_timesort($timesortfrom = 0, $timesortto = null,
$aftereventid = 0, $limitnum = 20, $limittononsuspendedevents = false,
$userid = null) {
global $CFG, $PAGE, $USER;
require_once($CFG->dirroot . '/calendar/lib.php');
global $PAGE, $USER;
$params = self::validate_parameters(
self::get_calendar_action_events_by_timesort_parameters(),
@ -511,9 +508,7 @@ class core_calendar_external extends external_api {
public static function get_calendar_action_events_by_course(
$courseid, $timesortfrom = null, $timesortto = null, $aftereventid = 0, $limitnum = 20) {
global $CFG, $PAGE, $USER;
require_once($CFG->dirroot . '/calendar/lib.php');
global $PAGE, $USER;
$user = null;
$params = self::validate_parameters(
@ -596,9 +591,7 @@ class core_calendar_external extends external_api {
public static function get_calendar_action_events_by_courses(
array $courseids, $timesortfrom = null, $timesortto = null, $limitnum = 10) {
global $CFG, $PAGE, $USER;
require_once($CFG->dirroot . '/calendar/lib.php');
global $PAGE, $USER;
$user = null;
$params = self::validate_parameters(
@ -691,8 +684,7 @@ class core_calendar_external extends external_api {
* @throws moodle_exception if user doesnt have the permission to create events.
*/
public static function create_calendar_events($events) {
global $CFG, $DB, $USER;
require_once($CFG->dirroot."/calendar/lib.php");
global $DB, $USER;
// Parameter validation.
$params = self::validate_parameters(self::create_calendar_events_parameters(), array('events' => $events));
@ -797,8 +789,7 @@ class core_calendar_external extends external_api {
* @return array Array of event details
*/
public static function get_calendar_event_by_id($eventid) {
global $CFG, $PAGE, $USER;
require_once($CFG->dirroot."/calendar/lib.php");
global $PAGE, $USER;
$params = self::validate_parameters(self::get_calendar_event_by_id_parameters(), ['eventid' => $eventid]);
$context = \context_user::instance($USER->id);
@ -868,8 +859,7 @@ class core_calendar_external extends external_api {
* @throws moodle_exception
*/
public static function submit_create_update_form($formdata) {
global $CFG, $USER, $PAGE;
require_once($CFG->dirroot."/calendar/lib.php");
global $USER, $PAGE, $CFG;
require_once($CFG->libdir."/filelib.php");
// Parameter validation.
@ -995,8 +985,7 @@ class core_calendar_external extends external_api {
* @return array
*/
public static function get_calendar_monthly_view($year, $month, $courseid, $categoryid, $includenavigation, $mini) {
global $CFG, $DB, $USER, $PAGE;
require_once($CFG->dirroot."/calendar/lib.php");
global $DB, $USER, $PAGE;
// Parameter validation.
$params = self::validate_parameters(self::get_calendar_monthly_view_parameters(), [
@ -1073,8 +1062,7 @@ class core_calendar_external extends external_api {
* @return array
*/
public static function get_calendar_day_view($year, $month, $day, $courseid, $categoryid) {
global $CFG, $DB, $USER, $PAGE;
require_once($CFG->dirroot."/calendar/lib.php");
global $DB, $USER, $PAGE;
// Parameter validation.
$params = self::validate_parameters(self::get_calendar_day_view_parameters(), [
@ -1214,8 +1202,7 @@ class core_calendar_external extends external_api {
* @return array
*/
public static function get_calendar_upcoming_view($courseid, $categoryid) {
global $CFG, $DB, $USER, $PAGE;
require_once($CFG->dirroot."/calendar/lib.php");
global $DB, $USER, $PAGE;
// Parameter validation.
$params = self::validate_parameters(self::get_calendar_upcoming_view_parameters(), [
@ -1257,4 +1244,125 @@ class core_calendar_external extends external_api {
public static function get_calendar_upcoming_view_returns() {
return \core_calendar\external\calendar_upcoming_exporter::get_read_structure();
}
/**
* Returns description of method parameters.
*
* @return external_function_parameters.
* @since Moodle 3.7
*/
public static function get_calendar_access_information_parameters() {
return new external_function_parameters(
[
'courseid' => new external_value(PARAM_INT, 'Course to check, empty for site calendar events.', VALUE_DEFAULT, 0),
]
);
}
/**
* Convenience function to retrieve some permissions information for the given course calendar.
*
* @param int $courseid Course to check, empty for site.
* @return array The access information
* @throws moodle_exception
* @since Moodle 3.7
*/
public static function get_calendar_access_information($courseid = 0) {
$params = self::validate_parameters(self::get_calendar_access_information_parameters(), ['courseid' => $courseid]);
if (empty($params['courseid']) || $params['courseid'] == SITEID) {
$context = \context_system::instance();
} else {
$context = \context_course::instance($params['courseid']);
}
self::validate_context($context);
return [
'canmanageentries' => has_capability('moodle/calendar:manageentries', $context),
'canmanageownentries' => has_capability('moodle/calendar:manageownentries', $context),
'canmanagegroupentries' => has_capability('moodle/calendar:managegroupentries', $context),
'warnings' => [],
];
}
/**
* Returns description of method result value.
*
* @return external_description.
* @since Moodle 3.7
*/
public static function get_calendar_access_information_returns() {
return new external_single_structure(
[
'canmanageentries' => new external_value(PARAM_BOOL, 'Whether the user can manage entries.'),
'canmanageownentries' => new external_value(PARAM_BOOL, 'Whether the user can manage its own entries.'),
'canmanagegroupentries' => new external_value(PARAM_BOOL, 'Whether the user can manage group entries.'),
'warnings' => new external_warnings(),
]
);
}
/**
* Returns description of method parameters.
*
* @return external_function_parameters.
* @since Moodle 3.7
*/
public static function get_allowed_event_types_parameters() {
return new external_function_parameters(
[
'courseid' => new external_value(PARAM_INT, 'Course to check, empty for site.', VALUE_DEFAULT, 0),
]
);
}
/**
* Get the type of events a user can create in the given course.
*
* @param int $courseid Course to check, empty for site.
* @return array The types allowed
* @throws moodle_exception
* @since Moodle 3.7
*/
public static function get_allowed_event_types($courseid = 0) {
$params = self::validate_parameters(self::get_allowed_event_types_parameters(), ['courseid' => $courseid]);
if (empty($params['courseid']) || $params['courseid'] == SITEID) {
$context = \context_system::instance();
} else {
$context = \context_course::instance($params['courseid']);
}
self::validate_context($context);
$allowedeventtypes = array_filter(calendar_get_allowed_event_types($params['courseid']));
return [
'allowedeventtypes' => array_keys($allowedeventtypes),
'warnings' => [],
];
}
/**
* Returns description of method result value.
*
* @return external_description.
* @since Moodle 3.7
*/
public static function get_allowed_event_types_returns() {
return new external_single_structure(
[
'allowedeventtypes' => new external_multiple_structure(
new external_value(PARAM_NOTAGS, 'Allowed event types to be created in the given course.')
),
'warnings' => new external_warnings(),
]
);
}
}

View File

@ -2552,4 +2552,148 @@ class core_calendar_externallib_testcase extends externallib_advanced_testcase {
$this->assertCount(0, $data['events']);
$this->assertEquals('nopermissions', $data['warnings'][0]['warningcode']);
}
/**
* Test get_calendar_access_information for admins.
*/
public function test_get_calendar_access_information_for_admins() {
global $CFG;
$this->resetAfterTest(true);
$this->setAdminUser();
$CFG->calendar_adminseesall = 1;
$data = external_api::clean_returnvalue(
core_calendar_external::get_calendar_access_information_returns(),
core_calendar_external::get_calendar_access_information()
);
$this->assertTrue($data['canmanageownentries']);
$this->assertTrue($data['canmanagegroupentries']);
$this->assertTrue($data['canmanageentries']);
}
/**
* Test get_calendar_access_information for authenticated users.
*/
public function test_get_calendar_access_information_for_authenticated_users() {
$this->resetAfterTest(true);
$this->setUser($this->getDataGenerator()->create_user());
$data = external_api::clean_returnvalue(
core_calendar_external::get_calendar_access_information_returns(),
core_calendar_external::get_calendar_access_information()
);
$this->assertTrue($data['canmanageownentries']);
$this->assertFalse($data['canmanagegroupentries']);
$this->assertFalse($data['canmanageentries']);
}
/**
* Test get_calendar_access_information for student users.
*/
public function test_get_calendar_access_information_for_student_users() {
global $DB;
$this->resetAfterTest(true);
$user = $this->getDataGenerator()->create_user();
$course = $this->getDataGenerator()->create_course();
$role = $DB->get_record('role', array('shortname' => 'student'));
$this->getDataGenerator()->enrol_user($user->id, $course->id, $role->id);
$this->setUser($user);
$data = external_api::clean_returnvalue(
core_calendar_external::get_calendar_access_information_returns(),
core_calendar_external::get_calendar_access_information($course->id)
);
$this->assertTrue($data['canmanageownentries']);
$this->assertFalse($data['canmanagegroupentries']);
$this->assertFalse($data['canmanageentries']);
}
/**
* Test get_calendar_access_information for teacher users.
*/
public function test_get_calendar_access_information_for_teacher_users() {
global $DB;
$this->resetAfterTest(true);
$user = $this->getDataGenerator()->create_user();
$course = $this->getDataGenerator()->create_course(['groupmode' => 1]);
$role = $DB->get_record('role', array('shortname' => 'editingteacher'));
$this->getDataGenerator()->enrol_user($user->id, $course->id, $role->id);
$this->getDataGenerator()->create_group(['courseid' => $course->id]);
$this->setUser($user);
$data = external_api::clean_returnvalue(
core_calendar_external::get_calendar_access_information_returns(),
core_calendar_external::get_calendar_access_information($course->id)
);
$this->assertTrue($data['canmanageownentries']);
$this->assertTrue($data['canmanagegroupentries']);
$this->assertTrue($data['canmanageentries']);
}
/**
* Test get_allowed_event_types for admins.
*/
public function test_get_allowed_event_types_for_admins() {
global $CFG;
$this->resetAfterTest(true);
$this->setAdminUser();
$CFG->calendar_adminseesall = 1;
$data = external_api::clean_returnvalue(
core_calendar_external::get_allowed_event_types_returns(),
core_calendar_external::get_allowed_event_types()
);
$this->assertEquals(['user', 'site', 'course', 'category'], $data['allowedeventtypes']);
}
/**
* Test get_allowed_event_types for authenticated users.
*/
public function test_get_allowed_event_types_for_authenticated_users() {
$this->resetAfterTest(true);
$this->setUser($this->getDataGenerator()->create_user());
$data = external_api::clean_returnvalue(
core_calendar_external::get_allowed_event_types_returns(),
core_calendar_external::get_allowed_event_types()
);
$this->assertEquals(['user'], $data['allowedeventtypes']);
}
/**
* Test get_allowed_event_types for student users.
*/
public function test_get_allowed_event_types_for_student_users() {
global $DB;
$this->resetAfterTest(true);
$user = $this->getDataGenerator()->create_user();
$course = $this->getDataGenerator()->create_course();
$role = $DB->get_record('role', array('shortname' => 'student'));
$this->getDataGenerator()->enrol_user($user->id, $course->id, $role->id);
$this->setUser($user);
$data = external_api::clean_returnvalue(
core_calendar_external::get_allowed_event_types_returns(),
core_calendar_external::get_allowed_event_types($course->id)
);
$this->assertEquals(['user'], $data['allowedeventtypes']);
}
/**
* Test get_allowed_event_types for teacher users.
*/
public function test_get_allowed_event_types_for_teacher_users() {
global $DB;
$this->resetAfterTest(true);
$user = $this->getDataGenerator()->create_user();
$course = $this->getDataGenerator()->create_course(['groupmode' => 1]);
$role = $DB->get_record('role', array('shortname' => 'editingteacher'));
$this->getDataGenerator()->enrol_user($user->id, $course->id, $role->id);
$this->getDataGenerator()->create_group(['courseid' => $course->id]);
$this->setUser($user);
$data = external_api::clean_returnvalue(
core_calendar_external::get_allowed_event_types_returns(),
core_calendar_external::get_allowed_event_types($course->id)
);
$this->assertEquals(['user', 'course', 'group'], $data['allowedeventtypes']);
}
}

View File

@ -165,6 +165,7 @@ $functions = array(
'type' => 'write',
'capabilities' => 'moodle/calendar:manageentries, moodle/calendar:manageownentries, moodle/calendar:managegroupentries',
'ajax' => true,
'services' => array(MOODLE_OFFICIAL_MOBILE_SERVICE),
),
'core_calendar_create_calendar_events' => array(
'classname' => 'core_calendar_external',
@ -242,6 +243,23 @@ $functions = array(
'type' => 'write',
'capabilities' => 'moodle/calendar:manageentries, moodle/calendar:manageownentries, moodle/calendar:managegroupentries',
'ajax' => true,
'services' => array(MOODLE_OFFICIAL_MOBILE_SERVICE),
),
'core_calendar_get_calendar_access_information' => array(
'classname' => 'core_calendar_external',
'methodname' => 'get_calendar_access_information',
'description' => 'Convenience function to retrieve some permissions/access information for the given course calendar.',
'classpath' => 'calendar/externallib.php',
'type' => 'read',
'services' => array(MOODLE_OFFICIAL_MOBILE_SERVICE),
),
'core_calendar_get_allowed_event_types' => array(
'classname' => 'core_calendar_external',
'methodname' => 'get_allowed_event_types',
'description' => 'Get the type of events a user can create in the given course.',
'classpath' => 'calendar/externallib.php',
'type' => 'read',
'services' => array(MOODLE_OFFICIAL_MOBILE_SERVICE),
),
'core_cohort_add_cohort_members' => array(
'classname' => 'core_cohort_external',

View File

@ -29,7 +29,7 @@
defined('MOODLE_INTERNAL') || die();
$version = 2019041800.01; // YYYYMMDD = weekly release date of this DEV branch.
$version = 2019041800.02; // YYYYMMDD = weekly release date of this DEV branch.
// RR = release increments - 00 in DEV branches.
// .XX = incremental changes.