/** * get Clips * * @param array $filters * * @return bool|stdClass * @throws moodle_exception */ public function getEvents($filters = []) { $url = '/events'; $url .= '?limit=1000'; $url .= '&withpublications=true'; $url .= '&filter=series:' . $this->getExtId(); $events = mod_opencast_apicall::sendRequest($url, 'GET', null, false, true, null, false, true); // dont run-as, we want all events, we'll be filtering later $count_events = count($events); for ($i = 0; $i < $count_events; $i++) { if ($events[$i]->processing_state != OPENCAST_PROCESSING_SUCCEEDED) { // do not dislay unprocessed events as part of the series unset($events[$i]); continue; } // then process filters foreach ($filters as $filter_key => $value) { if (!$value) { // skip empty filters continue; } if (in_array($filter_key, ['title', 'location'])) { // TODO WAIT FOR SWITCH : check if works when "presenter" bug is resolved, cf. https://dokuwiki.toolbox.switch.ch/opencast-api/api_known_issues // direct attributes: easy! if (strpos($events[$i]->{$filter_key}, $value) === false) { unset($events[$i]); continue 2; } } else { if ($filter_key == 'ivt_owner') { // we have to check this event's full ACLs $event = new mod_opencast_event($this, $events[$i]->identifier); $event->fetch(); if ($event->getOwner() != $value) { unset($events[$i]); continue 2; } } else { if ($filter_key == 'withoutowner' && $value == 'true') { $event = new mod_opencast_event($this, $events[$i]->identifier); $event->fetch(); if ($event->getOwner() != '') { unset($events[$i]); continue 2; } } else { if ($filter_key == 'presenter') { $event = new mod_opencast_event($this, $events[$i]->identifier); $event->fetch(); if (strpos($event->getPresenter(), $value) === false) { unset($events[$i]); continue 2; } } } } } } } return $events; }