/** * @param IPresentationSpeaker $speaker * @return PresentationSpeakerAcceptedAnnouncementEmailSender * @throws Exception */ public function build(IPresentationSpeaker $speaker) { $has_approved = $speaker->hasApprovedPresentations(); $has_rejected = $speaker->hasRejectedPresentations(); $has_alternate = $speaker->hasAlternatePresentations(); if ($has_approved && !$has_rejected && !$has_alternate) { return new PresentationSpeakerAcceptedAnnouncementEmailSender(); } if (!$has_approved && !$has_rejected && $has_alternate) { return new PresentationSpeakerAlternateAnnouncementEmailSender(); } if (!$has_approved && $has_rejected && !$has_alternate) { return new PresentationSpeakerRejectedAnnouncementEmailSender(); } if ($has_approved && !$has_rejected && $has_alternate) { return new PresentationSpeakerAcceptedAlternateAnnouncementEmailSender(); } if ($has_approved && $has_rejected && !$has_alternate) { return new PresentationSpeakerAcceptedRejectedAnnouncementEmailSender(); } if (!$has_approved && $has_rejected && $has_alternate) { return new PresentationSpeakerAlternateRejectedAnnouncementEmailSender(); } if ($has_approved && $has_rejected && $has_alternate) { return new PresentationSpeakerAcceptedAlternateAnnouncementEmailSender(); } return null; }