# fluent-boards/1.12/app/Hooks/Handlers/ScheduleHandler.php

FluentBoards – Project Management, Task Management, Goal Tracking, Kanban Board, and, Team Collaboration, version 1.12. 371 lines.

- Page: https://pluginprobe.com/plugins/fluent-boards/1.12/code/app/Hooks/Handlers/ScheduleHandler.php
- Raw: https://pluginprobe.com/plugins/fluent-boards/1.12/raw/app/Hooks/Handlers/ScheduleHandler.php
- Modified: 2024-05-31T06:41:46+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/fluent-boards/1.12/code/app/Hooks/Handlers/ScheduleHandler.php#L10-L20`.

```php
<?php

namespace FluentBoards\App\Hooks\Handlers;

use FluentBoards\App\Models\Comment;
use FluentBoards\App\Models\Task;
use FluentBoards\App\Models\User;
use FluentBoards\App\Services\Helper;

class ScheduleHandler
{
    public function sendEmailForComment(
        $commentId,
        $usersToSendEmail,
        $current_user_id
    ) {
        try {
            $comment = Comment::find($commentId) ?? null;
            if ( ! $comment) {
                return;
            }
            if ('comment' != $comment->type) {
                return;
            }

            $task = Task::findOrFail($comment->task_id);
            if ( ! $task) {
                return;
            }
//            $assignees = $task->assignees;
            $board    = $task->board;
            $page_url = fluent_boards_page_url();

            $user = $task->user($comment->created_by);

            $userData = $this->getUserData($current_user_id);

            $boardUrl = $page_url.'boards/'.$board->id;
            $taskUrl  = $page_url.'boards/'.$board->id.'/tasks/'.$task->id.'-'
                        .substr($task->title, 0, 10);

            $userLinkTag  = '<strong>'.htmlspecialchars($user->display_name)
                            .'</strong>';
            $taskLinkTag  = '<a target="_blank" href="'
                            .htmlspecialchars($taskUrl).'">'
                            .htmlspecialchars($task->title).'</a>';
            $boardLinkTag = '<a target="_blank" href="'
                            .htmlspecialchars($boardUrl).'">'
                            .htmlspecialchars($board->title).'</a>';

            $data = [
                'body'        => 'commented on '.$taskLinkTag.' on '
                                 .$boardLinkTag.' board.',
                'pre_header'  => 'comment added in fluent task',
                'show_footer' => true,
                'comment'     => $comment->description,
                'userData'    => $userData,
                'site_url'    => site_url(),
                'site_title'  => get_bloginfo('name'),
                'site_logo'   => fluent_boards_site_logo(),
            ];

            $mailSubject = 'new comment added on task';
            $message     = Helper::loadView('emails.comment2', $data);
            $headers     = ['Content-Type: text/html; charset=UTF-8'];

            foreach ($usersToSendEmail as $email) {
                \wp_mail($email, $mailSubject, $message, $headers);
            }
        } catch (\Exception $e) {
            // do nothing // better to log here
        }
    }

    public function sendEmailForAddAssignee(
        $taskId,
        $newAssigneeId,
        $current_user_id
    ) {
        try {
            $task     = Task::findOrFail($taskId);
            $board    = $task->board;
            $assignee = User::findOrFail($newAssigneeId);

            $userData = $this->getUserData($current_user_id);

            $page_url     = fluent_boards_page_url();
            $boardUrl     = $page_url.'boards/'.$board->id;
            $boardLinkTag = '<a target="_blank" href="'
                            .htmlspecialchars($boardUrl).'">'
                            .htmlspecialchars($board->title).'</a>';

            if (null == $task->parent_id) {
                // this is a task
                $taskUrl     = $page_url.'boards/'.$board->id.'/tasks/'
                               .$task->id.'-'.substr($task->title, 0, 10);
                $taskLinkTag = '<a target="_blank" href="'
                               .htmlspecialchars($taskUrl).'">'
                               .htmlspecialchars($task->title).'</a>';
                $data        = [
                    'body'        => 'has assigned you to task '.$taskLinkTag
                                     .' on the board '.$boardLinkTag,
                    'pre_header'  => 'you have been assigned to task',
                    'show_footer' => true,
                    'userData'    => $userData,
                    'site_url'    => site_url(),
                    'site_title'  => get_bloginfo('name'),
                    'site_logo'   => fluent_boards_site_logo(),
                ];
            } else {
                // this is a subtask
                $task = $task->parentTask($task->parent_id);

                $taskUrl     = $page_url.'boards/'.$board->id.'/tasks/'
                               .$task->id.'-'.substr($task->title, 0, 10);
                $taskLinkTag = '<a target="_blank" href="'
                               .htmlspecialchars($taskUrl).'">'
                               .htmlspecialchars($task->title).'</a>';

                $data = [
                    'body'        => 'has assigned you to subtask <strong>'
                                     .$task->title.'</strong> of task '
                                     .$taskLinkTag.' on the board '
                                     .$boardLinkTag,
                    'pre_header'  => 'you have been assigned to subtask',
                    'show_footer' => true, 'user' => $assignee,
                    'userData'    => $userData,
                    'site_url'    => site_url(),
                    'site_title'  => get_bloginfo('name'),
                    'site_logo'   => fluent_boards_site_logo(),
                ];
            }

            $mailSubject = 'You have been assigned to task';
            $message     = Helper::loadView('emails.assignee2', $data);
            $headers     = ['Content-Type: text/html; charset=UTF-8'];


            \wp_mail($assignee->user_email, $mailSubject, $message, $headers);

        } catch (\Exception $e) {
            throw new \Exception('Error in sending mail to new assignees', 1);
        }
    }

    public function sendEmailForRemoveAssignee(
        $taskId,
        $newAssigneeId,
        $current_user_id
    ) {
        try {
            $task     = Task::findOrFail($taskId);
            $board    = $task->board;
            $assignee = User::findOrFail($newAssigneeId);

            $userData = $this->getUserData($current_user_id);

            $page_url = fluent_boards_page_url();

            $boardUrl     = $page_url.'boards/'.$board->id;
            $boardLinkTag = '<a target="_blank" href="'
                            .htmlspecialchars($boardUrl).'">'
                            .htmlspecialchars($board->title).'</a>';

            if (null == $task->parent_id) {
                // this is a task
                $taskUrl     = $page_url.'boards/'.$board->id.'/tasks/'
                               .$task->id.'-'.substr($task->title, 0, 10);
                $taskLinkTag = '<a target="_blank" href="'
                               .htmlspecialchars($taskUrl).'">'
                               .htmlspecialchars($task->title).'</a>';
                $data        = [
                    'body'        => 'has removed you from task '.$taskLinkTag
                                     .' on the board '.$boardLinkTag,
                    'pre_header'  => 'you have been removed from task',
                    'show_footer' => true,
                    'userData'    => $userData,
                    'site_url'    => site_url(),
                    'site_title'  => get_bloginfo('name'),
                    'site_logo'   => fluent_boards_site_logo(),
                ];
            } else {
                // this is a subtask
                $task = $task->parentTask($task->parent_id);

                $taskUrl     = $page_url.'boards/'.$board->id.'/tasks/'
                               .$task->id.'-'.substr($task->title, 0, 10);
                $taskLinkTag = '<a target="_blank" href="'
                               .htmlspecialchars($taskUrl).'">'
                               .htmlspecialchars($task->title).'</a>';

                $data = [
                    'body'        => 'has removed you from subtask <strong>'
                                     .$task->title.'</strong> of task '
                                     .$taskLinkTag.' on the board '
                                     .$boardLinkTag,
                    'pre_header'  => 'you have been removed from subtask',
                    'show_footer' => true,
                    'userData'    => $userData,
                ];
            }

            $mailSubject = 'You have been removed from task';
            $message     = Helper::loadView('emails.assignee2', $data);
            $headers     = ['Content-Type: text/html; charset=UTF-8'];

            \wp_mail($assignee->user_email, $mailSubject, $message, $headers);

        } catch (\Exception $e) {
            throw new \Exception('Error in sending mail to new assignees', 1);
        }
    }


    public function sendEmailForChangeStage(
        $taskId,
        $newAssigneeEmails,
        $current_user_id
    ) {
        try {
            $task  = Task::findOrFail($taskId);
            $board = $task->board;

            $userData = $this->getUserData($current_user_id);

            $page_url     = fluent_boards_page_url();
            $boardUrl     = $page_url.'boards/'.$board->id;
            $boardLinkTag = '<a target="_blank" href="'
                            .htmlspecialchars($boardUrl).'">'
                            .htmlspecialchars($board->title).'</a>';

            $taskUrl     = $page_url.'boards/'.$board->id.'/tasks/'.$task->id
                           .'-'.substr($task->title, 0, 10);
            $taskLinkTag = '<a target="_blank" href="'
                           .htmlspecialchars($taskUrl).'">'
                           .htmlspecialchars($task->title).'</a>';

            $data = [
                'body'        => 'has moved '.$taskLinkTag.' task to <strong>'
                                 .$task->stage->title
                                 .'</strong> stage of board '.$boardLinkTag,
                'pre_header'  => 'Task stage has been changed',
                'show_footer' => true,
                'userData'    => $userData,
                'site_url'    => site_url(),
                'site_title'  => get_bloginfo('name'),
                'site_logo'   => fluent_boards_site_logo(),
            ];


            $mailSubject = 'Task stage has been changed';
            $message     = Helper::loadView('emails.assignee2', $data);
            $headers     = ['Content-Type: text/html; charset=UTF-8'];

            foreach ($newAssigneeEmails as $assignee_email) {
                \wp_mail($assignee_email, $mailSubject, $message, $headers);
            }
        } catch (\Exception $e) {
            throw new \Exception('Error in sending mail to new assignees', 1);
        }
    }

    public function sendEmailForDueDateUpdate(
        $taskId,
        $newAssigneeEmails,
        $current_user_id
    ) {
        try {
            $task  = Task::findOrFail($taskId);
            $board = $task->board;

            $userData = $this->getUserData($current_user_id);

            $page_url     = fluent_boards_page_url();
            $boardUrl     = $page_url.'boards/'.$board->id;
            $boardLinkTag = '<a target="_blank" href="'
                            .htmlspecialchars($boardUrl).'">'
                            .htmlspecialchars($board->title).'</a>';

            $taskUrl     = $page_url.'boards/'.$board->id.'/tasks/'.$task->id
                           .'-'.substr($task->title, 0, 10);
            $taskLinkTag = '<a target="_blank" href="'
                           .htmlspecialchars($taskUrl).'">'
                           .htmlspecialchars($task->title).'</a>';

            $data = [
                'body'        => 'has updated due date of '.$taskLinkTag
                                 .' task to <strong>'.$task->due_at
                                 .'</strong> of board '.$boardLinkTag,
                'pre_header'  => 'Task due date has been changed',
                'show_footer' => true,
                'userData'    => $userData,
                'site_url'    => site_url(),
                'site_title'  => get_bloginfo('name'),
                'site_logo'   => fluent_boards_site_logo(),
            ];


            $mailSubject = 'Task due date has been changed';
            $message     = Helper::loadView('emails.assignee2', $data);
            $headers     = ['Content-Type: text/html; charset=UTF-8'];

            foreach ($newAssigneeEmails as $assignee_email) {
                \wp_mail($assignee_email, $mailSubject, $message, $headers);
            }
        } catch (\Exception $e) {
            throw new \Exception('Error in sending mail to new assignees', 1);
        }
    }

    public function sendEmailForArchivedTask(
        $taskId,
        $newAssigneeEmails,
        $current_user_id
    ) {
        try {
            $task  = Task::findOrFail($taskId);
            $board = $task->board;

            $userData = $this->getUserData($current_user_id);

            $page_url     = fluent_boards_page_url();
            $boardUrl     = $page_url.'boards/'.$board->id;
            $boardLinkTag = '<a target="_blank" href="'
                            .htmlspecialchars($boardUrl).'">'
                            .htmlspecialchars($board->title).'</a>';

            $taskUrl     = $page_url.'boards/'.$board->id.'/tasks/'.$task->id
                           .'-'.substr($task->title, 0, 10);
            $taskLinkTag = '<a target="_blank" href="'
                           .htmlspecialchars($taskUrl).'">'
                           .htmlspecialchars($task->title).'</a>';

            $data = [
                'body'        => 'has archived '.$taskLinkTag.' task of board '
                                 .$boardLinkTag,
                'pre_header'  => 'Task has been archived',
                'show_footer' => true,
                'userData'    => $userData,
                'site_url'    => site_url(),
                'site_title'  => get_bloginfo('name'),
                'site_logo'   => fluent_boards_site_logo(),
            ];


            $mailSubject = 'Task has been archived';
            $message     = Helper::loadView('emails.assignee2', $data);
            $headers     = ['Content-Type: text/html; charset=UTF-8'];

            foreach ($newAssigneeEmails as $assignee_email) {
                \wp_mail($assignee_email, $mailSubject, $message, $headers);
            }
        } catch (\Exception $e) {
            throw new \Exception('Error in sending mail to new assignees', 1);
        }
    }

    private function getUserData($userId)
    {
        $currentUser   = User::findOrFail($userId);
        $gravaterPhoto = fluent_boards_user_avatar($currentUser->user_email,
            $currentUser->display_name);

        return [
            'display_name' => $currentUser->display_name,
            'photo'        => $gravaterPhoto,
        ];
    }

}

```
