/** * @param $presentation_id * @param PresentationSpeaker $speaker * @return bool */ public function canEditPresentation($presentation_id, PresentationSpeaker $speaker) { $presentation = Presentation::get()->byID($presentation_id); if (is_null($presentation) || !$presentation->canEdit()) { return false; } $summit = $presentation->Summit(); if (!$summit->Active) { return false; } $category = $presentation->Category(); if ($summit->isCallForSpeakersOpen() && $summit->isPublicCategory($category)) { return true; } // check member private categories groups if ($speaker->Member()->exists() && ($groups = $this->getPrivateCategoryGroupsFor($speaker->Member(), $summit))) { foreach ($groups as $g) { if (!$g->hasCategory($category)) { continue; } if (!$g->isSubmissionOpen()) { continue; } return true; } } //check if we have presentations for the current summit that are private categories foreach ($speaker->Presentations() as $presentation) { $category = $presentation->Category(); if (!$summit->isPrivateCategory($category)) { continue; } $group = $summit->getPrivateGroupFor($category); if (is_null($group)) { continue; } if (!$group->isSubmissionOpen()) { continue; } return true; } return false; }