action = $action; $this->locales = $locales; $this->context = $context; $this->addGroup([ 'id' => self::GROUP_EMAIL_TEMPLATES, 'label' => __('manager.manageEmails'), 'description' => __('manager.manageEmails.description'), ]) ->addEmailTemplatesField() ->addSignatureField() ->addGroup([ 'id' => self::GROUP_NEW_SUBMISSION, 'label' => __('manager.newSubmission'), 'description' => __('manager.newSubmission.description'), ]) ->addSubmissionAcknowledgementField() ->addCopySubmissionAckPrimaryContactField() ->addCopySubmissionAckAddress() ->addGroup([ 'id' => self::GROUP_EDITORIAL_DECISIONS, 'label' => __('manager.editorialDecisions'), 'description' => __('manager.editorialDecisions.description'), ]) ->addNotifyAllAuthorsField() ->addGroup([ 'id' => self::GROUP_EDITORS, 'label' => __('manager.forEditors'), 'description' => __('manager.forEditors.description') ]) ->addStatisticsReportField() ->addGroup([ 'id' => self::GROUP_ADVANCED, 'label' => __('manager.setup.advanced'), ]) ->addEnveloperSenderField(); } protected function addEmailTemplatesField(): self { $manageEmailsUrl = Application::get()->getRequest()->getDispatcher()->url( Application::get()->getRequest(), Application::ROUTE_PAGE, $this->context->getPath(), 'management', 'settings', 'manageEmails' ); return $this->addField(new FieldHTML('emailTemplates', [ 'label' => __('manager.emails.emailTemplates'), 'description' => __('manager.manageEmailTemplates.description', ['url' => $manageEmailsUrl]), 'groupId' => self::GROUP_EMAIL_TEMPLATES, ])); } protected function addSignatureField(): self { return $this->addField(new FieldPreparedContent('emailSignature', [ 'label' => __('manager.setup.emailSignature'), 'description' => __('manager.setup.emailSignature.description'), 'value' => $this->context->getData('emailSignature'), 'preparedContent' => array_values( Arr::sort( Arr::map( Arr::except(ContextEmailVariable::descriptions(), ContextEmailVariable::CONTEXT_SIGNATURE), function ($description, $key) { return [ 'key' => $key, 'description' => $description, 'value' => '{$' . $key . '}' ]; } ) ) ), 'groupId' => self::GROUP_EMAIL_TEMPLATES, ])); } /** * Add the submission ack field */ protected function addSubmissionAcknowledgementField(): self { return $this->addField(new FieldOptions(self::FIELD_SUBMISSION_ACK, [ 'label' => __('mailable.submissionAck.name'), 'description' => __('manager.submissionAck.description'), 'type' => 'radio', 'options' => [ ['value' => Context::SUBMISSION_ACKNOWLEDGEMENT_ALL_AUTHORS, 'label' => __('manager.submissionAck.allAuthors')], ['value' => Context::SUBMISSION_ACKNOWLEDGEMENT_SUBMITTING_AUTHOR, 'label' => __('manager.submissionAck.submittingAuthor')], ['value' => Context::SUBMISSION_ACKNOWLEDGEMENT_OFF, 'label' => __('manager.submissionAck.off')], ], 'value' => $this->context->getData(self::FIELD_SUBMISSION_ACK), 'groupId' => self::GROUP_NEW_SUBMISSION, ])); } /** * Add the copy submission ack primary contact field */ protected function addCopySubmissionAckPrimaryContactField(): self { $contactEmail = $this->context->getData('contactEmail'); if (!empty($contactEmail)) { return $this->addField(new FieldRadioInput('copySubmissionAckPrimaryContact', [ 'label' => __('manager.setup.notifications.copySubmissionAckPrimaryContact'), 'description' => __('manager.setup.notifications.copySubmissionAckPrimaryContact.description'), 'options' => [ ['value' => true, 'label' => __('manager.setup.notifications.copySubmissionAckPrimaryContact.enabled', ['email' => $contactEmail])], ['value' => false, 'label' => __('manager.setup.notifications.copySubmissionAckPrimaryContact.disabled')], ], 'value' => $this->context->getData('copySubmissionAckPrimaryContact'), 'groupId' => self::GROUP_NEW_SUBMISSION, 'showWhen' => self::FIELD_SUBMISSION_ACK, ])); } $request = Application::get()->getRequest(); $pageUrl = $request->getDispatcher() ->url($request, Application::ROUTE_PAGE, null, 'management', 'settings', 'context', null, 'contact'); return $this->addField(new FieldHTML('copySubmissionAckPrimaryContact', [ 'label' => __('manager.setup.notifications.copySubmissionAckPrimaryContact'), 'description' => __('manager.setup.notifications.copySubmissionAckPrimaryContact.disabled.description', ['url' => $pageUrl]), 'groupId' => self::GROUP_NEW_SUBMISSION, 'showWhen' => self::FIELD_SUBMISSION_ACK, ])); } /** * Add the field to copy any email address on the submission acknowledgement */ protected function addCopySubmissionAckAddress(): self { return $this->addField(new FieldText('copySubmissionAckAddress', [ 'label' => __('manager.setup.notifications.copySubmissionAckAddress'), 'description' => __('manager.setup.notifications.copySubmissionAckAddress.description'), 'size' => 'large', 'value' => $this->context->getData('copySubmissionAckAddress'), 'groupId' => self::GROUP_NEW_SUBMISSION, 'showWhen' => self::FIELD_SUBMISSION_ACK, ])); } /** * Add the field to notify all authors when an editorial decision is recorded */ protected function addNotifyAllAuthorsField(): self { return $this->addField(new FieldOptions('notifyAllAuthors', [ 'label' => __('manager.setup.notifyAllAuthors'), 'description' => __('manager.setup.notifyAllAuthors.description'), 'type' => 'radio', 'options' => [ ['value' => true, 'label' => __('manager.setup.notifyAllAuthors.allAuthors')], ['value' => false, 'label' => __('manager.setup.notifyAllAuthors.assignedAuthors')], ], 'value' => $this->context->getData('notifyAllAuthors'), 'groupId' => self::GROUP_EDITORIAL_DECISIONS, ])); } /** * Add the field to enable/disable the editorial statistics report email */ protected function addStatisticsReportField(): self { return $this->addField(new FieldOptions('editorialStatsEmail', [ 'label' => __('manager.editorialStatistics'), 'description' => __('manager.editorialStatistics.description'), 'type' => 'radio', 'options' => [ ['value' => true, 'label' => __('manager.editorialStatistics.on')], ['value' => false, 'label' => __('manager.editorialStatistics.off')], ], 'value' => $this->context->getData('editorialStatsEmail'), 'groupId' => self::GROUP_EDITORS, ])); } protected function addEnveloperSenderField(): self { $canEnvelopeSender = Config::getVar('email', 'allow_envelope_sender'); if ($canEnvelopeSender) { return $this->addField(new FieldText('envelopeSender', [ 'label' => __('manager.setup.emailBounceAddress'), 'tooltip' => __('manager.setup.emailBounceAddress.description'), 'value' => $this->context->getData('envelopeSender'), 'groupId' => self::GROUP_ADVANCED, ])); } return $this->addField(new FieldHTML('envelopeSender', [ 'label' => __('manager.setup.emailBounceAddress'), 'description' => __('manager.setup.emailBounceAddress.disabled'), 'groupId' => self::GROUP_ADVANCED, ])); } }