feat(support): add more telegram posts (#1282)

Для упрощения слежки над тикетами были добавлены дополнительные посты
при добавлении комментария и изменении статуса тикета, в случае если
существует отдельный чат под это в Телеграме.

---------

Co-authored-by: veselcraft <veselcraft@icloud.com>
This commit is contained in:
Jillian Österreich 2025-05-10 13:55:54 +00:00 committed by GitHub
parent 0a73a40f5f
commit c25fd84c11
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -169,6 +169,13 @@ final class SupportPresenter extends OpenVKPresenter
$_redirect = "/support?act=list"; $_redirect = "/support?act=list";
} }
$helpdeskChat = OPENVK_ROOT_CONF["openvk"]["credentials"]["telegram"]["helpdeskChat"];
if ($helpdeskChat) {
$serverUrl = ovk_scheme(true) . $_SERVER["SERVER_NAME"];
$telegramText = "❌ <b>Тикет под названием</b> &quot;{$ticket->getName()}&quot; от <a href='$serverUrl{$ticket->getUser()->getURL()}'>{$ticket->getUser()->getCanonicalName()}</a> ({$ticket->getUser()->getRegistrationIP()}) <b>был удалён.</b>\n";
Telegram::send($helpdeskChat, $telegramText);
}
$ticket->delete(); $ticket->delete();
$this->redirect($_redirect); $this->redirect($_redirect);
} }
@ -200,6 +207,16 @@ final class SupportPresenter extends OpenVKPresenter
$comment->setCreated(time()); $comment->setCreated(time());
$comment->save(); $comment->save();
$helpdeskChat = OPENVK_ROOT_CONF["openvk"]["credentials"]["telegram"]["helpdeskChat"];
if ($helpdeskChat) {
$serverUrl = ovk_scheme(true) . $_SERVER["SERVER_NAME"];
$commentText = ovk_proc_strtr($this->postParam("text"), 1500);
$telegramText = "💬 <b>Новый комментарий от автора тикета</b> <a href='$serverUrl/support/reply/$id'>&quot;{$ticket->getName()}&quot;</a>\n";
$telegramText .= "$commentText\n\n";
$telegramText .= "Автор: <a href='$serverUrl{$ticket->getUser()->getURL()}'>{$ticket->getUser()->getCanonicalName()}</a> ({$ticket->getUser()->getRegistrationIP()})\n";
Telegram::send($helpdeskChat, $telegramText);
}
$this->redirect("/support/view/" . $id); $this->redirect("/support/view/" . $id);
} else { } else {
$this->flashFail("err", tr("error"), tr("you_have_not_entered_text")); $this->flashFail("err", tr("error"), tr("you_have_not_entered_text"));
@ -227,15 +244,33 @@ final class SupportPresenter extends OpenVKPresenter
{ {
$this->assertPermission('openvk\Web\Models\Entities\TicketReply', 'write', 0); $this->assertPermission('openvk\Web\Models\Entities\TicketReply', 'write', 0);
$support_names = new SupportAgents();
$agent = $support_names->get($this->user->id);
$ticket = $this->tickets->get($id); $ticket = $this->tickets->get($id);
if ($_SERVER["REQUEST_METHOD"] === "POST") { if ($_SERVER["REQUEST_METHOD"] === "POST") {
$this->willExecuteWriteAction(); $this->willExecuteWriteAction();
$helpdeskChat = OPENVK_ROOT_CONF["openvk"]["credentials"]["telegram"]["helpdeskChat"];
if (!empty($this->postParam("text")) && !empty($this->postParam("status"))) { if (!empty($this->postParam("text")) && !empty($this->postParam("status"))) {
$ticket->setType($this->postParam("status")); $status = $this->postParam("status");
$ticket->setType($status);
$ticket->save(); $ticket->save();
switch ($status) {
default:
# NOTICE falling through
case 0:
$state = "Вопрос на рассмотрении";
break;
case 1:
$state = "Есть ответ";
break;
case 2:
$state = "Закрыто";
}
$comment = new TicketComment(); $comment = new TicketComment();
$comment->setUser_id($this->user->id); $comment->setUser_id($this->user->id);
$comment->setUser_type(1); $comment->setUser_type(1);
@ -243,9 +278,42 @@ final class SupportPresenter extends OpenVKPresenter
$comment->setTicket_Id($id); $comment->setTicket_Id($id);
$comment->setCreated(time()); $comment->setCreated(time());
$comment->save(); $comment->save();
if ($helpdeskChat) {
$serverUrl = ovk_scheme(true) . $_SERVER["SERVER_NAME"] . "/support/agent" . $this->user->id;
$ticketUrl = ovk_scheme(true) . $_SERVER["SERVER_NAME"] . "/support/reply/" . $id;
$commentText = ovk_proc_strtr($this->postParam("text"), 1500);
$telegramText = "💬 <b>Новый комментарий от агента к тикету</b> <a href='$ticketUrl'>&quot;{$ticket->getName()}&quot;</a>\n";
$telegramText .= "Статус: {$state}\n\n";
$telegramText .= "$commentText\n\n";
$telegramText .= "Агент: <a href='$serverUrl'>{$this->user->identity->getFullName()}</a>\n";
Telegram::send($helpdeskChat, $telegramText);
}
} elseif (empty($this->postParam("text"))) { } elseif (empty($this->postParam("text"))) {
$ticket->setType($this->postParam("status")); $status = $this->postParam("status");
$ticket->setType($status);
$ticket->save(); $ticket->save();
switch ($status) {
default:
# NOTICE falling through
case 0:
$state = "Вопрос на рассмотрении";
break;
case 1:
$state = "Есть ответ";
break;
case 2:
$state = "Закрыто";
}
if ($helpdeskChat) {
$serverUrl = ovk_scheme(true) . $_SERVER["SERVER_NAME"] . "/support/agent" . $this->user->id;
$ticketUrl = ovk_scheme(true) . $_SERVER["SERVER_NAME"] . "/support/reply/" . $id;
$telegramText = "🔔 <b>Изменён статус тикета</b> <a href='$ticketUrl'>&quot;{$ticket->getName()}&quot;</a>: <b>{$state}</b>\n\n";
$telegramText .= "Агент: <a href='$serverUrl'>{$this->user->identity->getFullName()}</a>\n";
Telegram::send($helpdeskChat, $telegramText);
}
} }
$this->flashFail("succ", tr("ticket_changed"), tr("ticket_changed_comment")); $this->flashFail("succ", tr("ticket_changed"), tr("ticket_changed_comment"));
@ -442,6 +510,13 @@ final class SupportPresenter extends OpenVKPresenter
$ticket->setType(2); $ticket->setType(2);
$ticket->save(); $ticket->save();
$helpdeskChat = OPENVK_ROOT_CONF["openvk"]["credentials"]["telegram"]["helpdeskChat"];
if ($helpdeskChat) {
$serverUrl = ovk_scheme(true) . $_SERVER["SERVER_NAME"];
$telegramText = "🔒 <b>Тикет под названием</b> <a href='$serverUrl/support/reply/{$ticket->getId()}'>&quot;{$ticket->getName()}&quot;</a> от <a href='$serverUrl{$ticket->getUser()->getURL()}'>{$ticket->getUser()->getCanonicalName()}</a> ({$ticket->getUser()->getRegistrationIP()}) <b>был закрыт автором.</b>\n";
Telegram::send($helpdeskChat, $telegramText);
}
$this->flashFail("succ", tr("ticket_changed"), tr("ticket_changed_comment")); $this->flashFail("succ", tr("ticket_changed"), tr("ticket_changed_comment"));
} }
} }