Source of file EmailWorkflowAction.php
Size: 5,346 Bytes - Last Modified: 2021-12-23T10:49:13+00:00
/var/www/docs.ssmods.com/process/src/src/Actions/EmailWorkflowAction.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 | <?php namespace Symbiote\AdvancedWorkflow\Actions; use Exception; use SilverStripe\Control\Email\Email; use SilverStripe\Forms\DropdownField; use SilverStripe\Forms\EmailField; use SilverStripe\Forms\FieldGroup; use SilverStripe\Forms\LiteralField; use SilverStripe\Forms\TextField; use SilverStripe\Security\Group; use SilverStripe\Security\Member; use Symbiote\AdvancedWorkflow\DataObjects\WorkflowInstance; use Symbiote\UserTemplates\UserTemplate; class EmailWorkflowAction extends SetPropertyWorkflowAction { private static $db = [ 'EmailTarget' => 'Enum("Manual,Field,Member,Group","Manual")', 'EmailManual' => 'Varchar(64)', 'EmailField' => 'Varchar(64)', 'EmailFrom' => 'Varchar(64)', 'EmailSubject' => 'Varchar(256)', ]; private static $has_one = [ 'EmailTemplate' => UserTemplate::class, 'EmailMember' => Member::class, 'EmailGroup' => Group::class, ]; private static $table_name = 'EmailWorkflowAction'; public function getCMSFields() { $fields = parent::getCMSFields(); $newFields = FieldGroup::create('Email config'); $newFields->push(LiteralField::create('CSS', '<style>.form__fieldgroup-item { min-width: 30% !important; }</style>')); // type $types = $this->dbObject('EmailTarget')->enumValues(); $newFields->push(DropdownField::create('EmailTarget', $this->fieldLabel('EmailTarget'), $types)); // from $newFields->push(TextField::create('EmailFrom', $this->fieldLabel('EmailFrom'))); // subject $newFields->push(TextField::create('EmailSubject', $this->fieldLabel('EmailSubject'))); // template $templates = UserTemplate::get()->filter(['Use' => 'Layout']); $newFields->push(DropdownField::create('EmailTemplateID', $this->fieldLabel('EmailTemplateID'), $templates) ->setEmptyString('-- required --')); // to $toTitle = _t('EmailWorkflowAction.EMAILTO', 'Send to'); if ($this->EmailTarget === 'Manual') { $newFields->push(EmailField::create('EmailManual', $toTitle)->setDescription('Normal email address')); } else if ($this->EmailTarget === 'Field') { $newFields->push(TextField::create('EmailField', 'Email field')->setDescription('Name of target field')); } else if ($this->EmailTarget === 'Member') { $newFields->push(DropdownField::create('EmailMemberID', $toTitle, Member::get()->map())); } else if ($this->EmailTarget === 'Group') { $newFields->push(DropdownField::create('EmailGroupID', $toTitle, Group::get()->map())); } $fields->insertBefore('Property', $newFields); $this->extend('updateTargetMethodCMSFields', $fields); return $fields; } public function fieldLabels($relations = true) { return array_merge(parent::fieldLabels($relations), [ 'EmailTarget' => _t('EmailWorkflowAction.EMAILTARGET', 'Target type'), 'EmailFrom' => _t('EmailWorkflowAction.EMAILFROM', 'Send from'), 'EmailSubject' => _t('EmailWorkflowAction.EMAILSUBJECT', 'Email subject'), 'EmailTemplateID' => _t('EmailWorkflowAction.EMAILTEMPLATE', 'Email template'), ]); } public function execute(WorkflowInstance $workflow) { parent::execute($workflow); $target = $workflow->getTarget(); $from = $this->EmailFrom; $subject = $this->EmailSubject; $template = $this->EmailTemplate(); if (!$target || !$from || !$subject || !$template) { return true; } $addys = []; if ($this->EmailTarget === 'Manual') { if (filter_var($this->EmailManual, FILTER_VALIDATE_EMAIL)) { $addys[] = $this->EmailManual; } } else if ($this->EmailTarget === 'Field') { if ($target->hasField($this->EmailField)) { $addy = $target->{$this->EmailField}; if (filter_var($addy, FILTER_VALIDATE_EMAIL)) { $addys[] = $addy; } } } else if ($this->EmailTarget === 'Member') { if ($member = $this->EmailMember()) { if (filter_var($member->Email, FILTER_VALIDATE_EMAIL)) { $addys[] = $member->Email; } } } else if ($this->EmailTarget === 'Group') { if ($group = $this->EmailGroup()) { foreach ($group->Members() as $member) { if (filter_var($member->Email, FILTER_VALIDATE_EMAIL)) { $addys[] = $member->Email; } } } } try { $body = $target->customise(['FromEmail' => $from])->renderWith($template->getTemplateFile()); foreach ($addys as $to) { $email = Email::create(); $email->setTo($to); $email->setFrom($from); $email->setSubject($subject); $email->setBody($body->getValue()); $email->setPlainTemplate($body->Plain()); $email->send(); } } catch (Exception $e) {} return true; } } |