[ Mini Kiebo ]
Server: Windows NT DESKTOP-5B8S0D4 6.2 build 9200 (Windows 8 Professional Edition) i586
Path:
D:
/
Backup
/
14082024
/
Data
/
htdocs
/
htdocs
/
jurnal-kesmas
/
v1
/
lib
/
pkp
/
classes
/
decision
/
steps
/
[
Home
]
File: Email.php
<?php /** * @file classes/decision/steps/Email.php * * Copyright (c) 2014-2022 Simon Fraser University * Copyright (c) 2000-2022 John Willinsky * Distributed under the GNU GPL v3. For full terms see the file docs/COPYING. * * @class Email * * @brief A step in an editorial decision workflow that shows an email composer. */ namespace PKP\decision\steps; use APP\core\Application; use APP\facades\Repo; use PKP\components\fileAttachers\BaseAttacher; use PKP\decision\Step; use PKP\emailTemplate\EmailTemplate; use PKP\facades\Locale; use PKP\mail\Mailable; use PKP\user\User; use stdClass; class Email extends Step { /** @var array<BaseAttacher> */ public array $attachers; public bool $canChangeRecipients = false; public bool $canSkip = true; public bool $anonymousRecipients = false; public array $locales; public Mailable $mailable; /** @var array<User> */ public array $recipients; public string $type = 'email'; /** * @param array<User> $recipients One or more User objects who are the recipients of this email * @param Mailable $mailable The mailable that will be used to send this email * @param array<BaseAttacher> $attachers */ public function __construct(string $id, string $name, string $description, array $recipients, Mailable $mailable, array $locales, ?array $attachers = []) { parent::__construct($id, $name, $description); $this->attachers = $attachers; $this->locales = $locales; $this->mailable = $mailable; $this->recipients = $recipients; } /** * Can the editor change the recipients of this email */ public function canChangeRecipients(bool $value): self { $this->canChangeRecipients = $value; return $this; } /** * Should the recipient names be shown in the * email body and subject when writing the email */ public function anonymizeRecipients(bool $value): self { $this->anonymousRecipients = $value; return $this; } /** * Can the editor skip this email */ public function canSkip(bool $value): self { $this->canSkip = $value; return $this; } public function getState(): stdClass { $config = parent::getState(); $config->attachers = $this->getAttachers(); $config->canChangeRecipients = $this->canChangeRecipients; $config->canSkip = $this->canSkip; $config->emailTemplates = $this->getEmailTemplates(); $config->initialTemplateKey = $this->mailable::getEmailTemplateKey(); $config->recipientOptions = $this->getRecipientOptions(); $config->anonymousRecipients = $this->anonymousRecipients; $config->variables = []; $config->locale = Locale::getLocale(); $config->locales = []; foreach ($this->locales as $locale) { $config->variables[$locale] = $this->getVariables($locale); $config->locales[] = [ 'locale' => $locale, 'name' => Locale::getMetadata($locale)->getDisplayName(), ]; } return $config; } protected function getRecipientOptions(): array { $recipientOptions = []; foreach ($this->recipients as $user) { $names = []; foreach ($this->locales as $locale) { $names[$locale] = $user->getFullName(true, false, $locale); } $recipientOptions[] = [ 'value' => $user->getId(), 'label' => $names, ]; } return $recipientOptions; } protected function getEmailTemplates(): array { $request = Application::get()->getRequest(); $context = $request->getContext(); $emailTemplates = collect(); if ($this->mailable::getEmailTemplateKey()) { $emailTemplate = Repo::emailTemplate()->getByKey($context->getId(), $this->mailable::getEmailTemplateKey()); if ($emailTemplate) { $emailTemplates->add($emailTemplate); } Repo::emailTemplate() ->getCollector($context->getId()) ->alternateTo([$this->mailable::getEmailTemplateKey()]) ->getMany() ->each(fn (EmailTemplate $e) => $emailTemplates->add($e)); } return Repo::emailTemplate()->getSchemaMap()->mapMany($emailTemplates)->toArray(); } protected function getAttachers(): array { $attachers = []; foreach ($this->attachers as $attacher) { $attachers[] = $attacher->getState(); } return $attachers; } /** * Format the mailable variables into an array to * pass to the Composer component */ protected function getVariables(string $locale): array { $data = $this->mailable->getData($locale); $descriptions = $this->mailable::getDataDescriptions(); $variables = []; foreach ($data as $key => $value) { $variables[] = [ 'key' => $key, 'value' => $value, 'description' => $descriptions[$key] ?? '', ]; } return $variables; } }