/** * Проверяет подписку авторизованного пользователя на событие * @return $this */ public function checkSubscribe() { if (\Yii::$app->user->isGuest) { return $this; } $onCondition = 'event_subscriber.event_id = event.id and event_subscriber.user_id = :user_id'; $onParams = ['user_id' => \Yii::$app->user->identity->id]; $this->select('event.*, event_subscriber.user_id AS subscribe'); $this->leftJoin(EventSubscriber::tableName(), $onCondition, $onParams); return $this; }
/** * Уведомление при подуписке на событие */ public function actionSubscriptionEventNotification() { $date_minus_two_hours = new \DateTime(); $date_minus_two_hours = $date_minus_two_hours->modify('-2 hours'); $email_queue = []; $wall_events = EventSubscriber::find()->where('created >= ' . $date_minus_two_hours->getTimestamp() . ' AND created <= ' . time())->with(['user', 'event'])->all(); $events = []; foreach ($wall_events as $sunscriberLink) { $user = $sunscriberLink->user; $event = $sunscriberLink->event; $eventOwmner = $event->user; $events[$eventOwmner->email][] = ['username' => $user->username, 'avatar' => \Yii::getAlias('@frontend') . '/web/images/users/' . $user->avatar . '/60x.jpeg', 'link' => 'http://findspree.ru/user' . $user->id]; } foreach ($events as $email => $ev) { $messages[] = \Yii::$app->mailer->compose('user-event-subscribe', ['subscribers' => $ev])->setFrom('*****@*****.**')->setTo($email)->setSubject('Для Вас есть новые уведомления на сайте http://findspree.ru'); } if (isset($messages) && !empty($messages)) { \Yii::$app->mailer->sendMultiple($messages); } }
/** * @param $event_id * @return array Вывод подписчиков на страницу события * Вывод подписчиков на страницу события * @throws \yii\web\NotFoundHttpException */ public function actionEventSubscribers($event_id) { if (!\Yii::$app->request->isAjax) { throw new NotFoundHttpException(); } \Yii::$app->response->format = Response::FORMAT_JSON; $dp = new ActiveDataProvider(); $dp->query = EventSubscriber::find()->with('user')->where(['event_id' => $event_id])->orderBy(['id' => SORT_DESC]); $dp->pagination->pageSize = 12; return ['items' => $dp->getModels(), 'pageCount' => $dp->getPagination()->getPageCount(), 'totalCount' => $dp->getTotalCount(), 'page' => $dp->pagination->page, 'count' => $dp->getCount()]; }
/** * @return EventQuery */ public function getSubscribers() { return $this->hasMany(User::className(), ['id' => 'user_id'])->viaTable(EventSubscriber::tableName(), ['event_id' => 'id']); }
/** * @param $event_id * Уведомлеие всех подписчиков мероприятия по емайл при отмеченной галке "Оповестить всех подписчиков" при * отправке коммента * @todo это наверное лучше перенести именно в метод добавления коммента? В модель создания комментария, в * afterInsert */ public static function commenatAllNotification($event_id, $message) { $Subscribers = EventSubscriber::find()->with('user')->where(['event_id' => $event_id])->all(); $Event = Event::findOne(['id' => $event_id]); foreach ($Subscribers as $User) { $messages[] = \Yii::$app->mailer->compose('message-all-notify', ['msg' => htmlspecialchars($message), 'notifier' => \Yii::$app->user->identity])->setFrom('*****@*****.**')->setTo($User->user->email)->setSubject('Оповещение от владельца мероприятия "' . $Event->name . '"'); } if (isset($messages) && !empty($messages)) { \Yii::$app->mailer->sendMultiple($messages); } }