/** * Converts the given exhibition PDO to a bean object. * This includes the conversion from nested lists * of PDO objects to usable lists of oids/names to be used * by the page renderer. * * @access private * @param pdo $pdo Program * @return bean Program */ private function exhibitionPdoToBean($pdo) { global $logger; $logger->debug(get_class($this) . "::exhibitionPdoToBean({$pdo})"); $bean = new Exhibition($pdo->epGetVars()); // pubState to a string $ps = ''; if ($pdo->getPubState() != null) { $ps = $pdo->getPubState()->getValue(); } $bean->setPubState($ps); // eventStatus to a string $es = ''; if ($pdo->getEventStatus() != null) { $es = $pdo->getEventStatus()->getValue(); } $bean->setEventStatus($es); // schedule $schedule = $pdo->getSchedule(); if ($schedule) { $bean->setSchedule(new Schedule($schedule->epGetVars())); } else { $bean->setSchedule(new Schedule()); } // venues from array of pdos to array of venue bean $vens = array(); if ($pdo->getVenues() != null) { foreach ($pdo->getVenues() as $ven) { $vens[] = new Venue($ven->epGetVars()); } } $bean->setVenues($vens); // categories from array of pdos to keyed array of oids $cats = array(); if ($pdo->getCategories() != null) { foreach ($pdo->getCategories() as $cat) { $scope = $cat->getScope(); $cats[$scope][] = new $scope($cat->epGetVars()); } } $bean->setCategories($cats); // related programs from array of pdos to keyed array of oids $programs = $pdo->getPrograms(); if ($programs != null) { $related = array(); foreach ($programs as $event) { $rp = new Program($event->epGetVars()); $ps = $event->getPubState()->getValue(); $rp->setPubState($ps); // primary genre if ($event->getPrimaryGenre()) { $pg = $event->getPrimaryGenre(); $prpg = new Category(array("oid" => $pg->getOid(), "name" => $pg->getName())); $rp->setPrimaryGenre($prpg); } $acts = array(); foreach ($event->getChildren() as $perf) { $sch = new Performance($perf->epGetVars()); $sch->setSchedule(new Schedule($perf->schedule->epGetVars())); $acts[] = $sch; } usort($acts, array(&$this, "orderPerformances")); $rp->setChildren($acts); // Using "Nextevent" so we can use orderProgramsByNextevent; really is firstEvent $rp->setNextevent($acts[0]->schedule->getStartTime()); $related[] = $rp; } usort($related, array(&$this, "orderProgramsByNextevent")); $bean->setPrograms($related); } // related courses from array of pdos to keyed array of oids $courses = $pdo->getCourses(); if ($courses != null) { $related = array(); foreach ($courses as $event) { $related[] = new Course($event->epGetVars()); } $bean->setCourses($related); } // related artists $artists = $pdo->getArtists(); if ($artists != null) { $related = array(); foreach ($artists as $person) { $related[] = new Artist($person->epGetVars()); } $bean->setArtists($related); } return $bean; }