Skip to content
Snippets Groups Projects
CustomMailBuilder.php 3.86 KiB
Newer Older
  • Learn to ignore specific revisions
  • Marcello Pivanti's avatar
    Marcello Pivanti committed
    <?php
    
    /**
     * Art-ER Attrattività, ricerca e territorio dell’Emilia-Romagna
     * OPEN 2.0
     *
     *
    
    waltermazza's avatar
    waltermazza committed
     * @package    arter\amos\notificationmanager\base\builder
    
    Marcello Pivanti's avatar
    Marcello Pivanti committed
     * @category   CategoryName
     * @author     Elite Division S.r.l.
     */
    
    
    waltermazza's avatar
    waltermazza committed
    namespace arter\amos\notificationmanager\base\builder;
    
    Marcello Pivanti's avatar
    Marcello Pivanti committed
    
    
    waltermazza's avatar
    waltermazza committed
    use arter\amos\core\interfaces\ModelGrammarInterface;
    use arter\amos\core\interfaces\ModelLabelsInterface;
    use arter\amos\core\user\User;
    use arter\amos\notificationmanager\AmosNotify;
    use arter\amos\notificationmanager\models\ChangeStatusEmail;
    
    Marcello Pivanti's avatar
    Marcello Pivanti committed
    use Yii;
    
    /**
     * Class CustomMailBuilder
    
    waltermazza's avatar
    waltermazza committed
     * @package arter\amos\notificationmanager\base\builder
    
    Marcello Pivanti's avatar
    Marcello Pivanti committed
     */
    class CustomMailBuilder extends AMailBuilder
    {
        /**
         * @var ChangeStatusEmail $emailConf
         */
        public $emailConf;
    
        /**
         * @var string $endStatus
         */
        public $endStatus;
    
        /**
         * @var string $template
         */
        private $template;
    
        /**
         * @var array $params
         */
        private $params = [];
    
        /**
         * @return string
         */
        public function getTemplate()
        {
            return $this->template;
        }
    
        /**
         * @param string $template
         */
        public function setTemplate($template)
        {
            $this->template = $template;
        }
    
        /**
         * @return array
         */
        public function getParams()
        {
            return $this->params;
        }
    
        /**
         * @param array $params
         */
        public function setParams($params)
        {
            $this->params = $params;
        }
    
        /**
         * @inheritdoc
         */
        public function init()
        {
            parent::init();
    
            if (!is_null($this->emailConf)) {
                $email = $this->emailConf;
                if ($email->template) {
                    $this->setTemplate($email->template);
                } elseif ($email->toCreator) {
    
    waltermazza's avatar
    waltermazza committed
                    $this->setTemplate("@vendor/arter/amos-" . AmosNotify::getModuleName() . "/src/views/email/validated");
    
    Marcello Pivanti's avatar
    Marcello Pivanti committed
                } else {
    
    waltermazza's avatar
    waltermazza committed
                    $this->setTemplate("@vendor/arter/amos-" . AmosNotify::getModuleName() . "/src/views/email/validator");
    
    Marcello Pivanti's avatar
    Marcello Pivanti committed
                }
                if (count($email->params)) {
                    $this->setParams($email->params);
                }
            }
        }
    
        /**
         * @inheritdoc
         */
        public function getSubject(array $resultset)
        {
            $stdMsg = AmosNotify::t('amosnotify', "Content has been validated");
            $model = reset($resultset);
            //check if customized subject
            if (!is_null($this->emailConf) && !is_null($this->emailConf->subject)) {
                $stdMsg = $this->emailConf->subject;
            } elseif ($model instanceof ModelLabelsInterface) {
                $grammar = $model->getGrammar();
                if (!is_null($grammar) && ($grammar instanceof ModelGrammarInterface)) {
                    $stdMsg = AmosNotify::t('amosnotify', '#publication_email_subject', ['contentName' => $grammar->getModelSingularLabel()]);
                }
            }
            return $stdMsg;
        }
    
        /**
         * @inheritdoc
         */
        public function renderEmail(array $resultset, User $user)
        {
            $ris = "";
            $model = reset($resultset);
    
            try {
    
                $userid = $model->getStatusLastUpdateUser($this->endStatus);
                if (!is_null($userid)) {
                    $user = User::findOne($userid);
                    $comment = $model->getStatusLastUpdateComment($this->endStatus);
                    $controller = \Yii::$app->controller;
    
                    if (!count($this->getParams())) {
                        $this->setParams([
                            'model' => $model,
                            'validator' => $user->getUserProfile()->one(),
                            'comment' => $comment
                        ]);
                    }
                    $ris = $controller->renderPartial($this->getTemplate(), $this->getParams());
                }
            } catch (\Exception $ex) {
                Yii::getLogger()->log($ex->getTraceAsString(), \yii\log\Logger::LEVEL_ERROR);
            }
    
            return $ris;
        }
    }