type, ['comment', 'reply'])) {
return;
}
$task = Task::findOrFail($comment->task_id);
if ( ! $task) {
return;
}
$board = $task->board;
$page_url = site_url('/') . '?redirect=to_task&taskId='.$task->id;
$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 = ''.htmlspecialchars($user->display_name)
.'';
$taskLinkTag = ''
.htmlspecialchars($task->title).'';
$boardLinkTag = ''
.htmlspecialchars($board->title).'';
// Consolidated translation with placeholders
// translators: %1$s is the task link, %2$s is the board link
$preparedBody = sprintf(__('commented on %1$s on %2$s board.', 'fluent-boards'), $taskLinkTag, $boardLinkTag);
$preHeader = __('New comment has been added on task','fluent-boards');
$mailSubject = __('New comment has been added on task','fluent-boards');
if ($comment->type == 'reply')
{
// translators: %1$s is the task link, %2$s is the board link
$preparedBody = sprintf(__('replied on your comment on %1$s on %2$s board.', 'fluent-boards'), $taskLinkTag, $boardLinkTag);
$preHeader = __('A reply has been added to your comment on a task.','fluent-boards');
$mailSubject = __('New Reply on Your Task Comment','fluent-boards');
}
$data = [
'body' => $preparedBody,
'comment_link' => $page_url,
'pre_header' => $preHeader,
'show_footer' => true,
'comment' => $comment->description,
'userData' => $userData,
'site_url' => site_url(),
'site_title' => get_bloginfo('name'),
'site_logo' => fluent_boards_site_logo(),
];
$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 sendEmailForMention($commentId, $usersToSendEmail, $current_user_id)
{
try {
$comment = Comment::find($commentId) ?? null;
if ( ! $comment) {
return;
}
if (!in_array($comment->type, ['comment', 'reply'])) {
return;
}
$task = Task::findOrFail($comment->task_id);
if ( ! $task) {
return;
}
// $assignees = $task->assignees;
$board = $task->board;
$page_url = site_url('/') . '?redirect=to_task&taskId='.$task->id;
$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 = ''.htmlspecialchars($user->display_name)
.'';
$taskLinkTag = ''
.htmlspecialchars($task->title).'';
$boardLinkTag = ''
.htmlspecialchars($board->title).'';
$commentLink = $taskUrl . '?comment='.$comment->id;
// translators: %1$s is the task link, %2$s is the board link
$bodyText = sprintf(__('mentioned you in a comment on %1$s on %2$s board.', 'fluent-boards'), $taskLinkTag, $boardLinkTag);
$data = [
'body' => $bodyText,
'comment_link' => $page_url,
'pre_header' => __('You are mentioned in a comment','fluent-boards'),
'show_footer' => true,
'comment' => $comment->description,
'userData' => $userData,
'site_url' => site_url(),
'site_title' => get_bloginfo('name'),
'site_logo' => fluent_boards_site_logo(),
];
$mailSubject = __('You are mentioned in a comment','fluent-boards');
$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 = ''
.htmlspecialchars($board->title).'';
if (null == $task->parent_id) {
// this is a task
$taskUrl = $page_url.'boards/'.$board->id.'/tasks/'
.$task->id.'-'.substr($task->title, 0, 10);
$taskLinkTag = ''
.htmlspecialchars($task->title).'';
// translators: %1$s is the task link, %2$s is the board link
$bodyText = sprintf(__('has assigned you to task %1$s on %2$s board.', 'fluent-boards'), $taskLinkTag, $boardLinkTag);
$data = [
'body' => $bodyText,
'pre_header' => __('you have been assigned to task','fluent-boards'),
'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 = ''
.htmlspecialchars($task->title).'';
// translators: %1$s is the subtask title, %2$s is the task link, %3$s is the board link
$bodyText = sprintf(__('has assigned you to subtask %1$s of task %2$s on the board %3$s', 'fluent-boards'), $task->title, $taskLinkTag, $boardLinkTag);
$data = [
'body' => $bodyText,
'pre_header' => __('you have been assigned to subtask','fluent-boards'),
'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','fluent-boards');
$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(esc_html__('Error in sending mail to new assignees', 'fluent-boards'), 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 = ''
.htmlspecialchars($board->title).'';
if (null == $task->parent_id) {
// this is a task
$taskUrl = $page_url.'boards/'.$board->id.'/tasks/'
.$task->id.'-'.substr($task->title, 0, 10);
$taskLinkTag = ''
.htmlspecialchars($task->title).'';
// translators: %1$s is the task link, %2$s is the board link
$bodyText = sprintf(__('has removed you from task %1$s on the board %2$s', 'fluent-boards'), $taskLinkTag, $boardLinkTag);
$data = [
'body' => $bodyText,
'pre_header' => __('you have been removed from task','fluent-boards'),
'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 = ''
.htmlspecialchars($task->title).'';
// translators: %1$s is the subtask title, %2$s is the task link, %3$s is the board link
$bodyText = sprintf(__('has removed you from subtask %1$s of task %2$s on the board %3$s', 'fluent-boards'), $task->title, $taskLinkTag, $boardLinkTag);
$data = [
'body' => $bodyText,
'pre_header' => __('you have been removed from subtask','fluent-boards'),
'show_footer' => true,
'userData' => $userData,
];
}
$mailSubject = __('You have been removed from task','fluent-boards');
$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(esc_html__('Error in sending mail to new assignees', 'fluent-boards'), 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 = ''
.htmlspecialchars($board->title).'';
$taskUrl = $page_url.'boards/'.$board->id.'/tasks/'.$task->id
.'-'.substr($task->title, 0, 10);
$taskLinkTag = ''
.htmlspecialchars($task->title).'';
// translators: %1$s is the task link, %2$s is the stage title, %3$s is the board link
$bodyText = sprintf(__('has moved %1$s task to %2$s stage of board %3$s', 'fluent-boards'), $taskLinkTag, $task->stage->title, $boardLinkTag);
$data = [
'body' => $bodyText,
'pre_header' => __('Task stage has been changed','fluent-boards'),
'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','fluent-boards');
$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) {
// Silent fail for email sending
}
}
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 = ''
.htmlspecialchars($board->title).'';
$taskUrl = $page_url.'boards/'.$board->id.'/tasks/'.$task->id
.'-'.substr($task->title, 0, 10);
$taskLinkTag = ''
.htmlspecialchars($task->title).'';
// translators: %1$s is the task link, %2$s is the due date, %3$s is the board link
$bodyText = sprintf(__('has updated due date of %1$s task to %2$s of board %3$s', 'fluent-boards'), $taskLinkTag, $task->due_at, $boardLinkTag);
$data = [
'body' => $bodyText,
'pre_header' => __('Task due date has been changed','fluent-boards'),
'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','fluent-boards');
$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(esc_html__('Error in sending mail to new assignees', 'fluent-boards'), 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 = ''
.htmlspecialchars($board->title).'';
$taskUrl = $page_url.'boards/'.$board->id.'/tasks/'.$task->id
.'-'.substr($task->title, 0, 10);
$taskLinkTag = ''
.htmlspecialchars($task->title).'';
// translators: %1$s is the task link, %2$s is the board link
$bodyText = sprintf(__('has archived %1$s task of board %2$s', 'fluent-boards'), $taskLinkTag, $boardLinkTag);
$data = [
'body' => $bodyText,
'pre_header' => __('Task has been archived','fluent-boards'),
'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','fluent-boards');
$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(esc_html__('Error in sending mail to new assignees', 'fluent-boards'), 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,
];
}
}