Skip to content
Snippets Groups Projects
AMailBuilder.php 9.6 KiB
Newer Older
  • Learn to ignore specific revisions
  • Marcello Pivanti's avatar
    Marcello Pivanti committed
    <?php
    
    Marcello Pivanti's avatar
    Marcello Pivanti committed
    /**
    
     * Lombardia Informatica S.p.A.
     * OPEN 2.0
    
    Marcello Pivanti's avatar
    Marcello Pivanti committed
     *
    
     * @see http://example.com Developers'community
    
     * @license GPLv3
     * @license https://opensource.org/licenses/gpl-3.0.html GNU General Public License version 3
    
    Marcello Pivanti's avatar
    Marcello Pivanti committed
     *
    
     * @package    elitedivision\amos\notificationmanager\base\builder
    
    Marcello Pivanti's avatar
    Marcello Pivanti committed
     * @category   CategoryName
    
     * @author     Lombardia Informatica S.p.A.
    
    Marcello Pivanti's avatar
    Marcello Pivanti committed
     */
    
    
    namespace elitedivision\amos\notificationmanager\base\builder;
    
    Marcello Pivanti's avatar
    Marcello Pivanti committed
    
    
    use elitedivision\amos\core\user\User;
    use elitedivision\amos\core\utilities\Email;
    use elitedivision\amos\notificationmanager\AmosNotify;
    use elitedivision\amos\emailmanager\AmosEmail;
    use elitedivision\amos\notificationmanager\base\Builder;
    use elitedivision\amos\notificationmanager\models\NotificationConf;
    
    Marcello Pivanti's avatar
    Marcello Pivanti committed
    use Yii;
    use yii\base\BaseObject;
    
    use yii\helpers\Console;
    
    Marcello Pivanti's avatar
    Marcello Pivanti committed
    
    /**
     * Class AMailBuilder
    
     * @package elitedivision\amos\notificationmanager\base\builder
    
    Marcello Pivanti's avatar
    Marcello Pivanti committed
     */
    abstract class AMailBuilder extends BaseObject implements Builder
    {
    
        protected $isCli = null;    // settata da logOn
    
    
    Marcello Pivanti's avatar
    Marcello Pivanti committed
        /**
         * @var AmosNotify $notifyModule
         */
        public $notifyModule = null;
    
        /**
         * @inheritdoc
         */
        public function init()
        {
            $this->notifyModule = AmosNotify::instance();
            parent::init();
        }
    
    
        protected function logOn($msg) {
    
            if(is_null($this->isCli)) {
                $this->isCli = (php_sapi_name() == 'cli');
            }
    
            if($this->isCli) {
                Console::stdout($msg . PHP_EOL);
            } elseif (false) {
                print $msg.'<br />'."\n";
            }
    
        }
    
    
    Marcello Pivanti's avatar
    Marcello Pivanti committed
        /**
         * @param array $userIds
         * @param array $resultset
         * @param bool $checkContentPubblication
         * @return bool
         */
        public function sendEmail(array $userIds, array $resultset, $checkContentPubblication = true)
        {
            $allOk = true;
            try {
                foreach ($userIds as $id) {
                    $user = User::findOne($id);
                    if (!is_null($user)) {
                        /** @var NotificationConf $notificationConfModel */
                        $notificationConfModel = $this->notifyModule->createModel('NotificationConf');
                        $notificationconf = $notificationConfModel::find()->andWhere(['user_id' => $id])->one();
                        $contentNotificationEnabled = $notificationconf->notify_content_pubblication;
                        $this->setUserLanguage($id);
    
    Marcello Pivanti's avatar
    Marcello Pivanti committed
                        $subject = $this->getSubject($resultset);
                        $message = $this->renderEmail($resultset, $user);
                        $email = new Email();
                        $from = '';
                        if (isset(Yii::$app->params['email-assistenza'])) {
                            // Use default platform email assistance
                            $from = Yii::$app->params['email-assistenza'];
                        }
    
                        $ok = false;
                        if($contentNotificationEnabled || $checkContentPubblication == false){
                            $ok = $email->sendMail($from, [$user->email], $subject, $message);
                        }
    
                        if (!$ok) {
                            Yii::getLogger()->log("Errore invio mail da '$from' a '$user->email'", \yii\log\Logger::LEVEL_ERROR);
                            $allOk = false;
                        }
                    }
                }
            } catch (\Exception $ex) {
                Yii::getLogger()->log($ex->getTraceAsString(), \yii\log\Logger::LEVEL_ERROR);
                $allOk = false;
            }
            return $allOk;
        }
    
        
        /**
         * @param array $userIds
         * @param array $resultset
         * @param bool $checkContentPubblication
         * @return bool
         */
        public function sendEmailLegacy(array $userIds, array $resultset, $checkContentPubblication = true)
        {
            $allOk = true;
            try {
                foreach ($userIds as $id) {
                    $user = User::findOne($id);
                    if (!is_null($user)) {
                        /** @var NotificationConf $notificationConfModel */
                        $notificationConfModel = $this->notifyModule->createModel('NotificationConf');
                        $notificationconf = $notificationConfModel::find()->andWhere(['user_id' => $id])->one();
                        $contentNotificationEnabled = $notificationconf->notify_content_pubblication;
                        $this->setUserLanguage($id);
                        $subject = $this->getSubject($resultset);
                        $message = $this->renderEmailLegacy($resultset, $user);
                        $email = new Email();
                        $from = '';
                        if (isset(Yii::$app->params['email-assistenza'])) {
                            // Use default platform email assistance
                            $from = Yii::$app->params['email-assistenza'];
                        }
                        
                        $ok = false;
                        if($contentNotificationEnabled || $checkContentPubblication == false){
                            $ok = $email->sendMail($from, [$user->email], $subject, $message);
                        }
                        
                        if (!$ok) {
                            Yii::getLogger()->log("Errore invio mail da '$from' a '$user->email'", \yii\log\Logger::LEVEL_ERROR);
                            $allOk = false;
                        }
                    }
                }
            } catch (\Exception $ex) {
                Yii::getLogger()->log($ex->getTraceAsString(), \yii\log\Logger::LEVEL_ERROR);
                $allOk = false;
            }
            return $allOk;
        }
        
        /**
         * @param array $userIds
         * @param array $resultset
         * @param array $resultsetNetwork
         * @param array $resultsetComments
         * @return bool
         */
        public function sendEmailMultipleSections($userIds, $resultset, $resultsetNetwork, $resultsetComments)
        {
            $allOk = true;
    
            try {
                foreach ($userIds as $id) {
                    $user = User::findOne($id);
                    if (!is_null($user)) {
                        $this->setUserLanguage($id);
                        $subject = $this->getSubject($resultset);
                        $message = $this->renderEmailMultipleSections($resultset, $resultsetNetwork, $resultsetComments, $user);
    
                        $mailModule = Yii::$app->getModule("email");
                        $mailModule->defaultLayout = 'layout_summary_notify';
    
                        $email = new Email();
    
                        $from = '';
                        if (isset(Yii::$app->params['email-assistenza'])) {
                            // Use default platform email assistance
                            $from = Yii::$app->params['email-assistenza'];
                        }
                        $ok = $email->sendMail($from, [$user->email], $subject, $message);
                        if (!$ok) {
                            Yii::getLogger()->log("Errore invio mail da '$from' a '$user->email'", \yii\log\Logger::LEVEL_ERROR);
                            $allOk = false;
                        }
                    }
                }
            } catch (\Exception $ex) {
                Yii::getLogger()->log($ex->getTraceAsString(), \yii\log\Logger::LEVEL_ERROR);
                $allOk = false;
            }
            return $allOk;
        }
    
        /**
         * @param array $userIds
         * @param array $resultset
         * @return bool
         */
        public function sendEmailUserNotify($userIds, $resultset)
        {
            $allOk = true;
            $this->logOn('AMailBuilder - inizio ');
    
    //        try {
                foreach ($userIds as $id) {
                    $user = User::findOne($id);
                    if (!is_null($user)) {
                        $this->setUserLanguage($id);
                        $subject = $this->getSubject($resultset);
    
                        $message = $this->renderEmailUserNotify($resultset, $user);
    
                        $mailModule = Yii::$app->getModule("email");
                        $mailModule->defaultLayout = 'layout_summary_notify';
    
                        $email = new Email();
    
                        $from = '';
                        if (isset(Yii::$app->params['email-assistenza'])) {
                            // Use default platform email assistance
                            $from = Yii::$app->params['email-assistenza'];
                        }
                        $this->logOn('AMailBuilder - prima della mail ' . $user->email);
                        //$this->logOn('AMailBuilder - prima della mail ' . $user->email . PHP_EOL . $message);//die();
                        $ok = $email->sendMail($from, [$user->email], $subject, $message);
                        if (!$ok) {
                            //$this->logOn("Errore invio mail da '$from' a '$user->email'");
                            Yii::getLogger()->log("Errore invio mail da '$from' a '$user->email'", \yii\log\Logger::LEVEL_ERROR);
                            $allOk = false;
                        }
                    }
                }
    //        } catch (\Exception $ex) {
    //            Yii::getLogger()->log($ex->getTraceAsString(), \yii\log\Logger::LEVEL_ERROR);
    //            $allOk = false;
    //        }
            return $allOk;
        }
    
    Marcello Pivanti's avatar
    Marcello Pivanti committed
    
        /**
         * @param int $userId
         */
        protected function setUserLanguage($userId)
        {
            $module = \Yii::$app->getModule('translation');
            if ($module && !empty($module->enableUserLanguage) && $module->enableUserLanguage == true) {
    
                /** @var \elitedivision\amos\translation\AmosTranslation $module */
    
    Marcello Pivanti's avatar
    Marcello Pivanti committed
                $lang = $module->getUserLanguage($userId);
                $module->setAppLanguage($lang);
            }
        }
    
        
        /**
         * @param bool $module
         * @param bool $view
         * @param bool $params
         * @return string
         */
        public function renderView($module = false, $view = false, $params = false) {
            $mailManager = AmosEmail::getInstance() ?: new AmosEmail('email', Yii::$app);
    
            return $mailManager->render($module, $view, $params);
        }
    
    Marcello Pivanti's avatar
    Marcello Pivanti committed
    }