/**
  * @param IPresentation $presentation
  * @param array $data
  * @return IPresentation
  */
 public function updatePresentationSummary(IPresentation $presentation, array $data)
 {
     return $this->tx_manager->transaction(function () use($presentation, $data) {
         $presentation->Title = trim($data['Title']);
         $presentation->TypeID = intval($data['TypeID']);
         $presentation->Level = trim($data['Level']);
         $presentation->ShortDescription = trim($data['ShortDescription']);
         $presentation->ProblemAddressed = trim($data['ProblemAddressed']);
         $presentation->AttendeesExpectedLearnt = trim($data['AttendeesExpectedLearnt']);
         $presentation->CategoryID = intval(trim($data['CategoryID']));
         $creator = Member::get()->byID($presentation->CreatorID);
         $summit = $presentation->Summit();
         $speaker = $creator->getSpeakerProfile();
         // if the user changed the presentation type from panel to presentation we need to remove the moderator
         if ($presentation->Type()->Type != 'Panel') {
             $presentation->ModeratorID = 0;
         }
         // SANTI: why do we check limit on edition?
         /*if(intval($presentation->CategoryID) > 0)
                     {
                         $category = PresentationCategory::get()->byID($presentation->CategoryID);
                         if(is_null($category)) throw new NotFoundEntityException('category not found!.');
         
                         $limit    = $this->getSubmissionLimitFor($speaker, $category);
                         $count    = $summit->isPublicCategory($category) ?
                             (
                                 intval($speaker->getPublicCategoryPresentationsBySummit($summit)->count()) +
                                 intval($speaker->getPublicCategoryOwnedPresentationsBySummit($summit)->count())
                             ):
                             (
                                 intval($speaker->getPrivateCategoryPresentationsBySummit($summit, $summit->getPrivateGroupFor($category))->count()) +
                                 intval($speaker->getPrivateCategoryOwnedPresentationsBySummit($summit, $summit->getPrivateGroupFor($category))->count())
                             );
         
                         if ($count >= $limit)
                             throw new EntityValidationException(sprintf('You reached the limit (%s) of presentations.', $limit));
                     }*/
         if (isset($data['OtherTopic'])) {
             $presentation->OtherTopic = trim($data['OtherTopic']);
         }
         $old_materials = $presentation->Materials()->filter('ClassName', 'PresentationLink');
         foreach ($old_materials as $o) {
             $o->Delete();
         }
         if (isset($data["PresentationLink"])) {
             foreach ($data["PresentationLink"] as $id => $val) {
                 if (empty($val)) {
                     continue;
                 }
                 $presentation->Materials()->add(PresentationLink::create(array('Link' => trim($val))));
             }
         }
         $extra_questions = $presentation->Category()->Exists() ? $presentation->Category()->ExtraQuestions() : array();
         foreach ($extra_questions as $question) {
             if (!isset($data[$question->Name])) {
                 continue;
             }
             if (!$data[$question->Name]) {
                 continue;
             }
             $answer_value = $data[$question->Name];
             if (empty($answer_value)) {
                 continue;
             }
             if (!($answer = $presentation->findAnswerByQuestion($question))) {
                 $answer = new TrackAnswer();
             }
             if (is_array($answer_value)) {
                 $answer_value = str_replace('{comma}', ',', $answer_value);
                 $answer->Value = implode(',', $answer_value);
             } else {
                 $answer->Value = $answer_value;
             }
             $answer->QuestionID = $question->getIdentifier();
             $answer->write();
             $presentation->ExtraAnswers()->add($answer);
         }
         $presentation->write();
         return $presentation;
     });
 }
 public function saveInto(DataObjectInterface $dataObject, $fieldList = null)
 {
     parent::saveInto($dataObject, $fieldList);
     if (!$dataObject instanceof Presentation) {
         return;
     }
     $presentation = $dataObject;
     $old_materials = $presentation->Materials()->filter('ClassName', 'PresentationLink');
     foreach ($old_materials as $o) {
         $o->Delete();
     }
     for ($i = 1; $i <= 5; $i++) {
         $field = $this->fields->fieldByName("PresentationLink[{$i}]");
         if (is_null($field)) {
             continue;
         }
         $val = $field->Value();
         if (empty($val)) {
             continue;
         }
         $presentation = PresentationLink::create(['Name' => trim($val), 'Link' => trim($val)]);
         $presentation->Materials()->add($presentation);
     }
     $extra_questions = $presentation->Category()->Exists() ? $presentation->Category()->ExtraQuestions() : array();
     foreach ($extra_questions as $question) {
         $field = $this->fields->fieldByName($question->Name);
         if (is_null($field)) {
             continue;
         }
         $answer_value = $field->Value();
         if (empty($answer_value)) {
             continue;
         }
         if (!($answer = $presentation->findAnswerByQuestion($question))) {
             $answer = new TrackAnswer();
         }
         if (is_array($answer_value)) {
             $answer_value = str_replace('{comma}', ',', $answer_value);
             $answer->Value = implode(',', $answer_value);
         } else {
             $answer->Value = $answer_value;
         }
         $answer->QuestionID = $question->getIdentifier();
         $answer->write();
         $presentation->ExtraAnswers()->add($answer);
     }
 }