* @param int|null $aftereventid Only return events after this one
* @param int $limitnum Limit results to this amount (between 1 and 50)
* @param bool $lmittononsuspendedevents Limit course events to courses the user is active in (not suspended).
+ * @param \stdClass|null $user The user id or false for $USER
* @return array A list of action_event_interface objects
* @throws \moodle_exception
*/
$timesortto = null,
$aftereventid = null,
$limitnum = 20,
- $limittononsuspendedevents = false
+ $limittononsuspendedevents = false,
+ ?\stdClass $user = null
) {
global $USER;
+ if (!$user) {
+ $user = $USER;
+ }
+
if (is_null($timesortfrom) && is_null($timesortto)) {
throw new \moodle_exception("Must provide a timesort to and/or from value");
}
throw new \moodle_exception("Limit must be between 1 and 50 (inclusive)");
}
+ \core_calendar\local\event\container::set_requesting_user($user->id);
$vault = \core_calendar\local\event\container::get_event_vault();
$afterevent = null;
$afterevent = $event;
}
- return $vault->get_action_events_by_timesort($USER, $timesortfrom, $timesortto, $afterevent, $limitnum,
+ return $vault->get_action_events_by_timesort($user, $timesortfrom, $timesortto, $afterevent, $limitnum,
$limittononsuspendedevents);
}
'aftereventid' => new external_value(PARAM_INT, 'The last seen event id', VALUE_DEFAULT, 0),
'limitnum' => new external_value(PARAM_INT, 'Limit number', VALUE_DEFAULT, 20),
'limittononsuspendedevents' => new external_value(PARAM_BOOL,
- 'Limit the events to courses the user is not suspended in', VALUE_DEFAULT, false)
+ 'Limit the events to courses the user is not suspended in', VALUE_DEFAULT, false),
+ 'userid' => new external_value(PARAM_INT, 'The user id', VALUE_DEFAULT, null),
)
);
}
* @param null|int $timesortto Events before this time (inclusive)
* @param null|int $aftereventid Get events with ids greater than this one
* @param int $limitnum Limit the number of results to this value
+ * @param null|int $userid The user id
* @return array
*/
public static function get_calendar_action_events_by_timesort($timesortfrom = 0, $timesortto = null,
- $aftereventid = 0, $limitnum = 20, $limittononsuspendedevents = false) {
+ $aftereventid = 0, $limitnum = 20, $limittononsuspendedevents = false,
+ $userid = null) {
global $CFG, $PAGE, $USER;
require_once($CFG->dirroot . '/calendar/lib.php');
- $user = null;
$params = self::validate_parameters(
self::get_calendar_action_events_by_timesort_parameters(),
[
'timesortto' => $timesortto,
'aftereventid' => $aftereventid,
'limitnum' => $limitnum,
- 'limittononsuspendedevents' => $limittononsuspendedevents
+ 'limittononsuspendedevents' => $limittononsuspendedevents,
+ 'userid' => $userid,
]
);
- $context = \context_user::instance($USER->id);
+ if ($params['userid']) {
+ $user = \core_user::get_user($params['userid']);
+ } else {
+ $user = $USER;
+ }
+
+ $context = \context_user::instance($user->id);
self::validate_context($context);
if (empty($params['aftereventid'])) {
$params['timesortto'],
$params['aftereventid'],
$params['limitnum'],
- $params['limittononsuspendedevents']
+ $params['limittononsuspendedevents'],
+ $user
);
$exportercache = new events_related_objects_cache($events);
$this->assertEmpty($result['events']);
$this->assertNull($result['firstid']);
$this->assertNull($result['lastid']);
+
+ // Requesting action events on behalf of another user.
+ $this->setAdminUser();
+ $result = core_calendar_external::get_calendar_action_events_by_timesort(5, null, 0, 20, false, $user->id);
+ $result = external_api::clean_returnvalue(
+ core_calendar_external::get_calendar_action_events_by_timesort_returns(),
+ $result
+ );
+ $events = $result['events'];
+
+ $this->assertCount(4, $events);
+ $this->assertEquals('Event 5', $events[0]['name']);
+ $this->assertEquals('Event 6', $events[1]['name']);
+ $this->assertEquals('Event 7', $events[2]['name']);
+ $this->assertEquals('Event 8', $events[3]['name']);
+ $this->assertEquals($event5->id, $result['firstid']);
+ $this->assertEquals($event8->id, $result['lastid']);
}
/**
$this->assertEmpty($result['events']);
$this->assertNull($result['firstid']);
$this->assertNull($result['lastid']);
+
+ // Requesting action events on behalf of another user.
+ $this->setAdminUser();
+
+ $result = core_calendar_external::get_calendar_action_events_by_timesort(null, 5, 0, 20, false, $user->id);
+ $result = external_api::clean_returnvalue(
+ core_calendar_external::get_calendar_action_events_by_timesort_returns(),
+ $result
+ );
+ $events = $result['events'];
+
+ $this->assertCount(4, $events);
+ $this->assertEquals('Event 1', $events[0]['name']);
+ $this->assertEquals('Event 2', $events[1]['name']);
+ $this->assertEquals('Event 3', $events[2]['name']);
+ $this->assertEquals('Event 4', $events[3]['name']);
+ $this->assertEquals($event1->id, $result['firstid']);
+ $this->assertEquals($event4->id, $result['lastid']);
}
/**
$result = \core_calendar\local\api::get_action_events_by_timesort(9);
$this->assertEmpty($result);
+
+ $this->setAdminUser();
+ $result = \core_calendar\local\api::get_action_events_by_timesort(5, null, null, 20, false, $user);
+ $this->assertCount(4, $result);
}
/**