Example #1
0
 /**
  * Get courses
  *
  * @param array $studies
  * @param string $year
  *
  * @return array
  */
 public function getCourses($studies, $year)
 {
     $this->createStudiesMap($studies);
     $groups = $this->extractGroupIds($studies);
     // get all courses
     $courses = [];
     foreach ($groups as $group) {
         $activiteiten1 = $this->client->ZoekActiviteitenOpDoelgroep([$group], 'NL', $year);
         $activiteiten2 = $this->client->ZoekActiviteitenOpDoelgroep([$group], 'EN', $year);
         // turn into nice arrays
         $courses1 = $this->toArray($activiteiten1->ZoekActiviteitenOpDoelgroepResult->Vakken->Activiteit);
         $courses2 = $this->toArray($activiteiten2->ZoekActiviteitenOpDoelgroepResult->Vakken->Activiteit);
         // merge
         $courses = array_merge($courses, $courses1);
         $courses = array_merge($courses, $courses2);
     }
     // WARNING: looks like a simple map, but the mapped function actually
     // gets a LOT of info from OASE per course, hence, this call takes quite long
     $info = array_map([$this, 'getCourseInfo'], $courses);
     // filter null values
     $info = array_filter($info, function ($data) {
         return null !== $data;
     });
     // match children
     $ret = [];
     foreach ($info as $code => $data) {
         $course = $data['course'];
         foreach ($data['children'] as $child) {
             if (isset($info[$child])) {
                 $info[$child]['course']->setParent($course);
             }
         }
         $ret[] = $course;
     }
     return $ret;
 }