repository = $repository; $this->tx_service = $tx_service; } /** * @param Summit $summit * @param array $data * @return PresentationCategory * @throws EntityNotFoundException * @throws ValidationException */ public function addTrack(Summit $summit, array $data) { return $this->tx_service->transaction(function () use ($summit, $data) { $former_track = $summit->getPresentationCategoryByCode($data['code']); if (!is_null($former_track)) throw new ValidationException(sprintf("track id %s already has code %s assigned on summit id %s", $former_track->getId(), $data['code'], $summit->getId())); $former_track = $summit->getPresentationCategoryByTitle($data['title']); if (!is_null($former_track)) throw new ValidationException(sprintf("track id %s already has title %s assigned on summit id %s", $former_track->getId(), $data['title'], $summit->getId())); $track = PresentationCategoryFactory::build($summit, $data); return $track; }); } /** * @param Summit $summit * @param int $track_id * @param array $data * @return PresentationCategory * @throws EntityNotFoundException * @throws ValidationException */ public function updateTrack(Summit $summit, $track_id, array $data) { return $this->tx_service->transaction(function () use ($summit, $track_id, $data) { $track = $summit->getPresentationCategory($track_id); if (is_null($track)) throw new EntityNotFoundException ( sprintf("track id %s does not belong to summit id %s", $track_id, $summit->getId()) ); if (isset($data['code'])) { $former_track = $summit->getPresentationCategoryByCode($data['code']); if (!is_null($former_track) && $former_track->getId() != $track_id) throw new ValidationException(sprintf("track id %s already has code %s assigned on summit id %s", $former_track->getId(), $data['code'], $summit->getId())); } if (isset($data['title'])) { $former_track = $summit->getPresentationCategoryByTitle($data['title']); if (!is_null($former_track) && $former_track->getId() != $track_id) throw new ValidationException(sprintf("track id %s already has title %s assigned on summit id %s", $former_track->getId(), $data['title'], $summit->getId())); } return PresentationCategoryFactory::populate($track, $data); Event::fire(new TrackUpdated($track)); }); } /** * @param Summit $summit * @param int $track_id * @return void * @throws EntityNotFoundException * @throws ValidationException */ public function deleteEventType(Summit $summit, $track_id) { // TODO: Implement deleteEventType() method. } }