diff --git a/app/Jobs/Emails/PresentationSubmissions/PresentationModeratorNotificationEmail.php b/app/Jobs/Emails/PresentationSubmissions/PresentationModeratorNotificationEmail.php new file mode 100644 index 00000000..26190ffa --- /dev/null +++ b/app/Jobs/Emails/PresentationSubmissions/PresentationModeratorNotificationEmail.php @@ -0,0 +1,90 @@ +getSummit(); + $creator = $presentation->getCreator(); + $selection_plan = $presentation->getSelectionPlan(); + + if(is_null($selection_plan)) + throw new \InvalidArgumentException('Presentation selection plan is null.'); + + $speaker_management_base_url = Config::get('cfp.base_url'); + $idp_base_url = Config::get('idp.base_url'); + $support_email = $summit->getSupportEmail(); + $support_email = !empty($support_email) ? $support_email: Config::get("cfp.support_email", null); + + + if(empty($speaker_management_base_url)) + throw new \InvalidArgumentException('cfp.base_url is null.'); + + if(empty($idp_base_url)) + throw new \InvalidArgumentException('idp.base_url is null.'); + + if(empty($support_email)) + throw new \InvalidArgumentException('cfp.support_email is null.'); + + $payload = []; + $payload['summit_name'] = $summit->getName(); + $payload['summit_logo'] = $summit->getLogoUrl(); + $payload['speaker_full_name'] = $moderator->getFullName(" "); + $payload['speaker_email'] = $moderator->getEmail(); + $payload['creator_full_name'] = $creator->getFullName(); + $payload['creator_email'] = $creator->getEmail(); + $payload['selection_plan_name'] = $selection_plan->getName(); + $payload['presentation_edit_link'] = $presentation->getEditLink(); + + $summitBeginDate = $summit->getLocalBeginDate(); + $payload['summit_date'] = !is_null($summitBeginDate)? $summitBeginDate->format("F d, Y") : ""; + $submissionEndDateLocal = $selection_plan->getSubmissionEndDateLocal(); + $payload['until_date'] = !is_null($submissionEndDateLocal) ? $submissionEndDateLocal->format('F d, Y') : ""; + + $payload['selection_process_link'] = sprintf("%s/app/%s", $speaker_management_base_url, $summit->getRawSlug()); + $payload['speaker_management_link'] = sprintf("%s/app/%s", $speaker_management_base_url, $summit->getRawSlug()); + $payload['bio_edit_link'] = sprintf("%s/app/%s/profile", $speaker_management_base_url, $summit->getRawSlug()); + $payload['reset_password_link'] = sprintf("%s/auth/password/reset", $idp_base_url); + $payload['support_email'] = $support_email; + + $template_identifier = $this->getEmailTemplateIdentifierFromEmailEvent($summit); + + parent::__construct($payload, $template_identifier, $payload['speaker_email']); + } + +} \ No newline at end of file diff --git a/app/Models/Foundation/Summit/Summit.php b/app/Models/Foundation/Summit/Summit.php index 5fe92a8f..773f9295 100644 --- a/app/Models/Foundation/Summit/Summit.php +++ b/app/Models/Foundation/Summit/Summit.php @@ -4626,6 +4626,7 @@ SQL; ->select('distinct ft') ->from('App\Models\Foundation\Summit\EmailFlows\SummitEmailFlowType', 'ft') ->orderBy("ft.id"); + $res = $builder->getQuery()->getResult(); $list = []; foreach($res as $flow_type){ diff --git a/app/Services/Model/Imp/SummitService.php b/app/Services/Model/Imp/SummitService.php index 8080bf49..de84aba5 100644 --- a/app/Services/Model/Imp/SummitService.php +++ b/app/Services/Model/Imp/SummitService.php @@ -23,6 +23,7 @@ use App\Events\SummitUpdated; use App\Facades\ResourceServerContext; use App\Http\Utils\IFileUploader; use App\Jobs\Emails\PresentationSubmissions\ImportEventSpeakerEmail; +use App\Jobs\Emails\PresentationSubmissions\PresentationModeratorNotificationEmail; use App\Jobs\Emails\PresentationSubmissions\PresentationSpeakerNotificationEmail; use App\Jobs\Emails\Schedule\ShareEventEmail; use App\Jobs\ProcessEventDataImport; @@ -1829,6 +1830,9 @@ final class SummitService extends AbstractService implements ISummitService $presentation->setModerator($speaker); + if($speaker->getMemberId() != $presentation->getCreatedById()) + PresentationModeratorNotificationEmail::dispatch($speaker, $presentation); + return $presentation; }); } diff --git a/database/migrations/model/Version20210707172103.php b/database/migrations/model/Version20210707172103.php new file mode 100644 index 00000000..709180e4 --- /dev/null +++ b/database/migrations/model/Version20210707172103.php @@ -0,0 +1,63 @@ +getRepository(SummitEmailFlowType::class); + $flow = $repository->findOneBy([ + "name" => "Presentation Submissions" + ]); + + SummitEmailFlowTypeSeeder::createEventsTypes( + [ + [ + 'name' => PresentationModeratorNotificationEmail::EVENT_NAME, + 'slug' => PresentationModeratorNotificationEmail::EVENT_SLUG, + 'default_email_template' => PresentationModeratorNotificationEmail::DEFAULT_TEMPLATE + ] + ], + $flow + ); + + $em->persist($flow); + $em->flush(); + } + + /** + * @param Schema $schema + */ + public function down(Schema $schema):void + { + + } +} diff --git a/database/migrations/model/Version20210707172106.php b/database/migrations/model/Version20210707172106.php new file mode 100644 index 00000000..61e3c110 --- /dev/null +++ b/database/migrations/model/Version20210707172106.php @@ -0,0 +1,47 @@ +getRepository(Summit::class); + $summits = $repository->findAll(); + foreach($summits as $summit){ + $summit->seedDefaultEmailFlowEvents(); + $em->persist($summit); + } + $em->flush(); + } + + /** + * @param Schema $schema + */ + public function down(Schema $schema):void + { + + } +} diff --git a/database/seeds/SummitEmailFlowTypeSeeder.php b/database/seeds/SummitEmailFlowTypeSeeder.php index a414573f..e8f45ca5 100644 --- a/database/seeds/SummitEmailFlowTypeSeeder.php +++ b/database/seeds/SummitEmailFlowTypeSeeder.php @@ -57,6 +57,7 @@ use App\Jobs\Emails\PresentationSubmissions\SelectionProcess\PresentationSpeaker use App\Jobs\Emails\PresentationSubmissions\SelectionProcess\PresentationSpeakerSelectionProcessAlternateRejectedEmail; use App\Jobs\Emails\PresentationSubmissions\SelectionProcess\PresentationSpeakerSelectionProcessRejectedEmail; use App\Jobs\Emails\PresentationSubmissions\ImportEventSpeakerEmail; +use App\Jobs\Emails\PresentationSubmissions\PresentationModeratorNotificationEmail; // Presentation Selections use App\Jobs\Emails\PresentationSelections\PresentationCategoryChangeRequestCreatedEmail; use App\Jobs\Emails\PresentationSelections\PresentationCategoryChangeRequestResolvedEmail; @@ -261,6 +262,11 @@ final class SummitEmailFlowTypeSeeder extends Seeder 'slug' => PresentationSpeakerNotificationEmail::EVENT_SLUG, 'default_email_template' => PresentationSpeakerNotificationEmail::DEFAULT_TEMPLATE ], + [ + 'name' => PresentationModeratorNotificationEmail::EVENT_NAME, + 'slug' => PresentationModeratorNotificationEmail::EVENT_SLUG, + 'default_email_template' => PresentationModeratorNotificationEmail::DEFAULT_TEMPLATE + ], [ 'name' => PresentationSpeakerSelectionProcessAcceptedAlternateEmail::EVENT_NAME, 'slug' => PresentationSpeakerSelectionProcessAcceptedAlternateEmail::EVENT_SLUG,