/** * @param ISummit $summit * @param IPresentationSpeaker $speaker * @param string $role * @return PresentationSpeakerAcceptedAnnouncementEmailSender * @throws Exception */ public function build(ISummit $summit, IPresentationSpeaker $speaker, $role = IPresentationSpeaker::RoleSpeaker) { $has_published = $speaker->hasPublishedPresentations($summit->getIdentifier(), $role); $has_rejected = $speaker->hasRejectedPresentations($summit->getIdentifier(), $role); $has_alternate = $speaker->hasAlternatePresentations($summit->getIdentifier(), $role); if ($has_published && !$has_rejected && !$has_alternate) { return new PresentationSpeakerAcceptedAnnouncementEmailSender(); } if (!$has_published && !$has_rejected && $has_alternate) { return new PresentationSpeakerAlternateAnnouncementEmailSender(); } if (!$has_published && $has_rejected && !$has_alternate) { return new PresentationSpeakerRejectedAnnouncementEmailSender(); } if ($has_published && !$has_rejected && $has_alternate) { return new PresentationSpeakerAcceptedAlternateAnnouncementEmailSender(); } if ($has_published && $has_rejected && !$has_alternate) { return new PresentationSpeakerAcceptedRejectedAnnouncementEmailSender(); } if (!$has_published && $has_rejected && $has_alternate) { return new PresentationSpeakerAlternateRejectedAnnouncementEmailSender(); } if ($has_published && $has_rejected && $has_alternate) { return new PresentationSpeakerAcceptedAlternateAnnouncementEmailSender(); } return null; }