Skip to content
Snippets Groups Projects
ContentMailBuilder.php 4.75 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\ModelLabelsInterface;
    use arter\amos\core\models\ModelsClassname;
    use arter\amos\core\record\Record;
    use arter\amos\core\user\User;
    use arter\amos\notificationmanager\AmosNotify;
    use arter\amos\notificationmanager\models\Notification;
    use arter\amos\notificationmanager\record\NotifyRecord;
    
    Marcello Pivanti's avatar
    Marcello Pivanti committed
    use Yii;
    use yii\helpers\Console;
    
    /**
     * Class ContentMailBuilder
    
    waltermazza's avatar
    waltermazza committed
     * @package arter\amos\notificationmanager\base\builder
    
    Marcello Pivanti's avatar
    Marcello Pivanti committed
     */
    class ContentMailBuilder extends AMailBuilder
    {
        /**
         * @return string
         */
        public function getSubject(array $resultset)
        {
            return Yii::t('amosnotify', "#Content_Change_Subject_Notify");
        }
    
        /**
         * @inheritdoc
         */
        public function renderEmail(array $resultset, User $user)
        {
            $mail = '';
            $class_content = '';
            try {
                $mail .= $this->renderContentHeader($resultset);
                foreach ($resultset as $notify) {
                    /** @var Notification $notify */
                    $cls_name = $notify->class_name;
                    $modelClassname = ModelsClassname::find()->andWhere(['classname' => $cls_name])->one();
    
                    /** @var NotifyRecord|ModelLabelsInterface $model */
                    $model = $cls_name::find()->andWhere(['id' => $notify->content_id])->one();
                    if (!is_null($model) && $model->sendCommunication()) {
                        if (strcmp($class_content, $notify->class_name)) {
                            $mail .= $this->renderContentTitle($model);
                            $class_content = $notify->class_name;
    
                            if($modelClassname) {
                                $module = \Yii::$app->getModule($modelClassname->module);
                                if (!empty($module->viewPathEmailContentSubtitle[$cls_name])) {
                                    $mail .= $this->renderPersonalizedContentSubtitle($model, $user, $module->viewPathEmailContentSubtitle[$cls_name]);
                                }
                            }
                        }
                        // render list of content of default
                        $mail .= $this->renderContent($model, $user);
                    }
                }
                $mail .= $this->renderContentFooter($resultset, $user);
            } catch (\Exception $ex) {
                Yii::getLogger()->log($ex->getTraceAsString(), \yii\log\Logger::LEVEL_ERROR);
            }
    
            return $mail;
        }
    
        /**
         * @param Record $model
         * @param User $user
         * @return string
         */
        protected function renderContent(Record $model, $user)
        {
            $controller = \Yii::$app->controller;
    
    waltermazza's avatar
    waltermazza committed
            $ris = $controller->renderPartial("@vendor/arter/amos-" . AmosNotify::getModuleName() . "/src/views/email/content", [
    
    Marcello Pivanti's avatar
    Marcello Pivanti committed
                'model' => $model,
                'profile' => $user->userProfile
            ]);
            return $ris;
        }
    
        /**
         * @param ModelLabelsInterface $model
         * @return string
         */
        protected function renderContentTitle(ModelLabelsInterface $model)
        {
            $controller = \Yii::$app->controller;
    
    waltermazza's avatar
    waltermazza committed
            $ris = $controller->renderPartial("@vendor/arter/amos-" . AmosNotify::getModuleName() . "/src/views/email/content_title", [
    
    Marcello Pivanti's avatar
    Marcello Pivanti committed
                'title' => $model->getGrammar()->getModelLabel(),
            ]);
            return $ris;
        }
    
        /**
         * @param array $resultset
         * @return string
         */
        protected function renderContentHeader(array $resultset)
        {
            $controller = \Yii::$app->controller;
            $contents_number = count($resultset);
    
    waltermazza's avatar
    waltermazza committed
            $ris = $controller->renderPartial("@vendor/arter/amos-" . AmosNotify::getModuleName() . "/src/views/email/content_header", [
    
    Marcello Pivanti's avatar
    Marcello Pivanti committed
                'contents_number' => $contents_number
            ]);
            return $ris;
        }
    
        /**
         * @param array $resultset
         * @return string
         */
        protected function renderContentFooter(array $resultset, User $user)
        {
            $controller = \Yii::$app->controller;
    
    waltermazza's avatar
    waltermazza committed
            $ris = $controller->renderPartial("@vendor/arter/amos-" . AmosNotify::getModuleName() . "/src/views/email/content_footer", ['user' => $user]);
    
    Marcello Pivanti's avatar
    Marcello Pivanti committed
            return $ris;
        }
    
        /**
         * @param Record[] $model
         * @param User $user
         * @return string
         */
        protected function renderPersonalizedContentSubtitle($model, $user, $viewPath)
        {
            Console::stdout($user->userProfile->id. PHP_EOL);
    
            $controller = \Yii::$app->controller;
            $ris = $controller->renderPartial($viewPath, [
                'model' => $model,
                'profile' => $user->userProfile,
            ]);
            return $ris;
        }
    }