/** * Unsubscribe from a post of receiving e-mail notifications * * @param string $id * @return Response */ public function unsubscribeAction($id) { if (!$this->checkTokenGet()) { return $this->response->redirect(); } $usersId = $this->session->get('identity'); if (!$usersId) { $this->flashSession->error('You must be logged first'); return $this->response->redirect(); } $post = Posts::findFirstById($id); if (!$post) { $this->flashSession->error('The discussion does not exist'); return $this->response->redirect(); } $subscription = PostsSubscribers::findFirst(['posts_id = ?0 AND users_id = ?1', 'bind' => [$post->id, $usersId]]); if ($subscription) { $this->flashSession->notice('You were successfully unsubscribed from this post'); $subscription->delete(); } return $this->response->redirect('discussion/' . $post->id . '/' . $post->slug); }
public function afterCreate() { if ($this->id > 0) { $activity = new Activities(); $activity->users_id = $this->users_id; $activity->posts_id = $this->posts_id; $activity->type = Activities::NEW_REPLY; $activity->save(); $toNotify = array(); /** * Notify users that always want notifications */ foreach (Users::find(array('notifications = "Y"', 'columns' => 'id')) as $user) { if ($this->users_id != $user->id) { $notification = new Notifications(); $notification->users_id = $user->id; $notification->posts_id = $this->posts_id; $notification->posts_replies_id = $this->id; $notification->type = 'C'; $notification->save(); $activity = new ActivityNotifications(); $activity->users_id = $user->id; $activity->posts_id = $this->posts_id; $activity->posts_replies_id = $this->id; $activity->users_origin_id = $this->users_id; $activity->type = 'C'; $activity->save(); $toNotify[$user->id] = $notification->id; } } /** * Register users subscribed to the post */ foreach (PostsSubscribers::findByPostsId($this->posts_id) as $subscriber) { if (!isset($toNotify[$subscriber->users_id])) { $notification = new Notifications(); $notification->users_id = $subscriber->users_id; $notification->posts_id = $this->posts_id; $notification->posts_replies_id = $this->id; $notification->type = 'C'; $notification->save(); $activity = new ActivityNotifications(); $activity->users_id = $subscriber->users_id; $activity->posts_id = $this->posts_id; $activity->posts_replies_id = $this->id; $activity->users_origin_id = $this->users_id; $activity->type = 'C'; $activity->save(); $toNotify[$subscriber->users_id] = $notification->id; } } /** * Register the user in the post's notifications */ if (!isset($toNotify[$this->users_id])) { $parameters = array('users_id = ?0 AND posts_id = ?1', 'bind' => array($this->users_id, $this->posts_id)); $hasNotifications = PostsNotifications::count($parameters); if (!$hasNotifications) { $notification = new PostsNotifications(); $notification->users_id = $this->users_id; $notification->posts_id = $this->posts_id; $notification->save(); } } /** * Notify users that have commented in the same post */ $postsNotifications = PostsNotifications::findByPostsId($this->posts_id); foreach ($postsNotifications as $postNotification) { if (!isset($toNotify[$postNotification->users_id])) { if ($postNotification->users_id != $this->users_id) { /** * Generate an e-mail notification */ $notification = new Notifications(); $notification->users_id = $postNotification->users_id; $notification->posts_id = $this->posts_id; $notification->posts_replies_id = $this->id; $notification->type = 'C'; $notification->save(); $activity = new ActivityNotifications(); $activity->users_id = $postNotification->users_id; $activity->posts_id = $this->posts_id; $activity->posts_replies_id = $this->id; $activity->users_origin_id = $this->users_id; $activity->type = 'C'; $activity->save(); $toNotify[$postNotification->users_id] = $notification->id; } } } /** * Queue notifications to be sent */ $this->getDI()->getQueue()->put($toNotify); } }