Phosphorum\Models\PostsReplies::afterCreate PHP Method

afterCreate() public method

public afterCreate ( )
    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);
        }
    }