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 = [];
/**
* Notify users that always want notifications
*/
foreach (Users::find(['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 = ['users_id = ?0 AND posts_id = ?1', 'bind' => [$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()->getShared('queue')->put($toNotify);
}
}