MDL-52808 calendar: Do not return events for hidden activities
This commit is contained in:
committed by
Eloy Lafuente (stronk7)
parent
a5fae3b0d2
commit
39b8513763
@@ -227,21 +227,21 @@ class core_calendar_external extends external_api {
|
||||
$params['options']['timeend'] = PHP_INT_MAX;
|
||||
}
|
||||
|
||||
// Event list does not check visibility and permissions, we'll check that later.
|
||||
$eventlist = calendar_get_events($params['options']['timestart'], $params['options']['timeend'], $funcparam['users'], $funcparam['groups'],
|
||||
$funcparam['courses'], true, $params['options']['ignorehidden']);
|
||||
|
||||
// WS expects arrays.
|
||||
$events = array();
|
||||
foreach ($eventlist as $id => $event) {
|
||||
$events[$id] = (array) $event;
|
||||
}
|
||||
|
||||
// We need to get events asked for eventids.
|
||||
$eventsbyid = calendar_get_events_by_id($params['events']['eventids']);
|
||||
foreach ($eventsbyid as $eventid => $eventobj) {
|
||||
if ($eventsbyid = calendar_get_events_by_id($params['events']['eventids'])) {
|
||||
$eventlist += $eventsbyid;
|
||||
}
|
||||
|
||||
foreach ($eventlist as $eventid => $eventobj) {
|
||||
$event = (array) $eventobj;
|
||||
if (isset($events[$eventid])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($hassystemcap) {
|
||||
// User can see everything, no further check is needed.
|
||||
$events[$eventid] = $event;
|
||||
|
||||
@@ -370,6 +370,30 @@ class core_calendar_externallib_testcase extends externallib_advanced_testcase {
|
||||
$events = external_api::clean_returnvalue(core_calendar_external::get_calendar_events_returns(), $events);
|
||||
$this->assertEquals(1, count($events['events']));
|
||||
$this->assertEquals(0, count($events['warnings']));
|
||||
|
||||
// Now, create an activity event.
|
||||
$this->setAdminUser();
|
||||
$nexttime = time() + DAYSECS;
|
||||
$assign = $this->getDataGenerator()->create_module('assign', array('course' => $course->id, 'duedate' => $nexttime));
|
||||
|
||||
$this->setUser($user);
|
||||
$paramevents = array ('courseids' => array($course->id));
|
||||
$options = array ('siteevents' => true, 'userevents' => true, 'timeend' => time() + WEEKSECS);
|
||||
$events = core_calendar_external::get_calendar_events($paramevents, $options);
|
||||
$events = external_api::clean_returnvalue(core_calendar_external::get_calendar_events_returns(), $events);
|
||||
|
||||
$this->assertCount(5, $events['events']);
|
||||
|
||||
// Hide the assignment.
|
||||
set_coursemodule_visible($assign->cmid, 0);
|
||||
// Empty all the caches that may be affected by this change.
|
||||
accesslib_clear_all_caches_for_unit_testing();
|
||||
course_modinfo::clear_instance_cache();
|
||||
|
||||
$events = core_calendar_external::get_calendar_events($paramevents, $options);
|
||||
$events = external_api::clean_returnvalue(core_calendar_external::get_calendar_events_returns(), $events);
|
||||
// Expect one less.
|
||||
$this->assertCount(4, $events['events']);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user