/** * @param ISummit $summit * @param array $event_data * @return mixed */ public function updateEvent(ISummit $summit, array $event_data) { $event_repository = $this->event_repository; return $this->tx_service->transaction(function () use($summit, $event_data, $event_repository) { if (!isset($event_data['id'])) { throw new EntityValidationException(array('missing required param: id')); } $event_id = intval($event_data['id']); $event = $event_repository->getById($event_id); if (is_null($event)) { throw new NotFoundEntityException('Summit Event', sprintf('id %s', $event_id)); } if (intval($event->SummitID) !== intval($summit->getIdentifier())) { throw new EntityValidationException(array('event doest not belongs to summit')); } $event->Title = $event_data['title']; $event->Description = $event_data['description']; $event->setStartDate($event_data['start_date']); $event->setEndDate($event_data['end_date']); $event->AllowFeedBack = $event_data['allow_feedback']; $event->LocationID = intval($event_data['location_id']); $event->TypeID = intval($event_data['event_type']); $event->AllowedSummitTypes()->setByIDList($event_data['summit_type']); $event->Tags()->setByIDList(explode(',', $event_data['tags'])); $event->Sponsors()->setByIDList(explode(',', $event_data['sponsors'])); // Speakers, if one of the added members is not a speaker, we need to make him one if ($event->isPresentation()) { $presentation = $event_repository->getPresentationById($event_id); $speaker_ids = array(); $member_ids = explode(',', $event_data['speakers']); foreach ($member_ids as $member_id) { $speaker = PresentationSpeaker::get()->filter('MemberID', $member_id)->first(); if (!$speaker) { $member = Member::get()->byID($member_id); $speaker = new PresentationSpeaker(); $speaker->FirstName = $member->FirstName; $speaker->LastName = $member->Surname; $speaker->MemberID = $member->ID; $speaker->write(); } $speaker_ids[] = $speaker->ID; } $event->Speakers()->setByIDList($speaker_ids); } return $event; }); }
/** * @param ISummitEvent $event * @param array $event_data * @return ISummitEvent * @throws NotFoundEntityException * @throws ValidationException * @throws null */ public static function updatePresentation(ISummitEvent $event, array $event_data) { // Speakers, if one of the added members is not a speaker, we need to make him one if ($event instanceof Presentation) { foreach ($event_data['speakers'] as $speaker) { if (!isset($speaker['speaker_id']) || !isset($speaker['member_id'])) { throw new EntityValidationException('missing parameter on speakers collection!'); } $speaker_id = intval($speaker['speaker_id']); $member_id = intval($speaker['member_id']); $speaker = $speaker_id > 0 ? PresentationSpeaker::get()->byID($speaker_id) : null; $speaker = is_null($speaker) && $member_id > 0 ? PresentationSpeaker::get()->filter('MemberID', $member_id)->first() : $speaker; if (is_null($speaker)) { $member = Member::get()->byID($member_id); if (is_null($member)) { throw new NotFoundEntityException('Member', sprintf(' member id %s', $member_id)); } $speaker = new PresentationSpeaker(); $speaker->FirstName = $member->FirstName; $speaker->LastName = $member->Surname; $speaker->MemberID = $member->ID; $speaker->write(); } $speaker_ids[] = $speaker->ID; $event->ModeratorID = 0; } $event->Speakers()->setByIDList($speaker_ids); if ($event->Type()->Type == 'Keynotes' || $event->Type()->Type == 'Panel') { if (!isset($event_data['moderator'])) { throw new EntityValidationException('moderator is required!'); } $moderator = $event_data['moderator']; if (!isset($moderator['member_id']) || !isset($moderator['speaker_id'])) { throw new EntityValidationException('missing parameter on moderator!'); } $speaker_id = intval($moderator['speaker_id']); $member_id = intval($moderator['member_id']); $moderator = $speaker_id > 0 ? PresentationSpeaker::get()->byID($speaker_id) : null; $moderator = is_null($moderator) && $member_id > 0 ? PresentationSpeaker::get()->filter('MemberID', $member_id)->first() : $moderator; if (is_null($moderator)) { $member = Member::get()->byID($member_id); if (is_null($member)) { throw new NotFoundEntityException('Member', sprintf(' member id %s', $member_id)); } $moderator = PresentationSpeaker::create(); $moderator->FirstName = $member->FirstName; $moderator->LastName = $member->Surname; $moderator->MemberID = $member->ID; $moderator->write(); } $event->ModeratorID = $moderator->ID; } $track = PresentationCategory::get()->byID(intval($event_data['track'])); if (is_null($track)) { throw new NotFoundEntityException('Track'); } $event->CategoryID = $track->ID; $event->AttendeesExpectedLearnt = html_entity_decode($event_data['expect_learn']); $event->Level = $event_data['level']; } return $event; }