NotifyBehavior.php 2.43 KB
<?php
    
    namespace common\behaviors;
    
    use common\models\Articles;
    use common\modules\comment\models\CommentModel;
    use common\modules\product\models\Product;
    use common\widgets\Mailer;
    use yii\base\Behavior;
    use yii\base\Event;
    use yii\db\ActiveRecord;
    use yii\helpers\Url;
    
    /**
     * Class NotifyBehavior
     * @property CommentModel $owner
     * @package common\behaviors
     */
    class NotifyBehavior extends Behavior
    {
        
        public function events()
        {
            return [
                ActiveRecord::EVENT_AFTER_UPDATE => 'afterUpdate',
            ];
        }
        
        public function afterUpdate($event)
        {
            /**
             * @var Event        $event
             * @var CommentModel $owner
             */
            $owner = $this->owner;
            if($owner->status == $owner::STATUS_ACTIVE) {
                $entity = $owner->entity;
                $model = $entity::findOne($owner->entity_id);
                if($model != NULL) {
                    if(!empty( $owner->user )) {
                        $customer = $owner->user;
                    }
                    $url = '';
                    if($model::className() == Product::className()) {
                        $url = Url::to([
                            'catalog/product',
                            'product' => $model,
                            '#'       => 'artbox-comment',
                        ], true);
                    } elseif($model::className() == Articles::className()) {
                        $url = Url::to([
                            'articles/show',
                            'translit' => $model->translit,
                            'id'       => $model->id,
                            '#'        => 'artbox-comment',
                        ], true);
                    }
                    $mailer = Mailer::widget([
                        'type'    => 'comment_notify',
                        'params'  => [
                            'model' => $model,
                            'url'   => $url,
                        ],
                        'subject' => 'Ваш комментарий опубликован',
                        'email'   => ( !empty( $customer ) ? $customer->email : $owner->email ),
                    ]);
                    return $mailer;
                }
            }
            return false;
        }
    }