mirror of
https://github.com/openvk/openvk
synced 2025-07-07 08:19:49 +03:00
Compare commits
7 commits
533879b729
...
b492f0830e
Author | SHA1 | Date | |
---|---|---|---|
|
b492f0830e | ||
|
c25fd84c11 | ||
|
0a73a40f5f | ||
|
bf65910730 | ||
|
425e148ee5 | ||
|
756dcf68e3 | ||
|
153206f9ba |
3 changed files with 111 additions and 6 deletions
|
@ -169,6 +169,13 @@ final class SupportPresenter extends OpenVKPresenter
|
|||
$_redirect = "/support?act=list";
|
||||
}
|
||||
|
||||
$helpdeskChat = OPENVK_ROOT_CONF["openvk"]["credentials"]["telegram"]["helpdeskChat"];
|
||||
if ($helpdeskChat) {
|
||||
$serverUrl = ovk_scheme(true) . $_SERVER["SERVER_NAME"];
|
||||
$telegramText = "❌ <b>Тикет под названием</b> "{$ticket->getName()}" от <a href='$serverUrl{$ticket->getUser()->getURL()}'>{$ticket->getUser()->getCanonicalName()}</a> ({$ticket->getUser()->getRegistrationIP()}) <b>был удалён.</b>\n";
|
||||
Telegram::send($helpdeskChat, $telegramText);
|
||||
}
|
||||
|
||||
$ticket->delete();
|
||||
$this->redirect($_redirect);
|
||||
}
|
||||
|
@ -200,6 +207,16 @@ final class SupportPresenter extends OpenVKPresenter
|
|||
$comment->setCreated(time());
|
||||
$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'>"{$ticket->getName()}"</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);
|
||||
} else {
|
||||
$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);
|
||||
|
||||
$support_names = new SupportAgents();
|
||||
$agent = $support_names->get($this->user->id);
|
||||
$ticket = $this->tickets->get($id);
|
||||
|
||||
if ($_SERVER["REQUEST_METHOD"] === "POST") {
|
||||
$this->willExecuteWriteAction();
|
||||
|
||||
$helpdeskChat = OPENVK_ROOT_CONF["openvk"]["credentials"]["telegram"]["helpdeskChat"];
|
||||
|
||||
if (!empty($this->postParam("text")) && !empty($this->postParam("status"))) {
|
||||
$ticket->setType($this->postParam("status"));
|
||||
$status = $this->postParam("status");
|
||||
$ticket->setType($status);
|
||||
$ticket->save();
|
||||
|
||||
switch ($status) {
|
||||
default:
|
||||
# NOTICE falling through
|
||||
case 0:
|
||||
$state = "Вопрос на рассмотрении";
|
||||
break;
|
||||
case 1:
|
||||
$state = "Есть ответ";
|
||||
break;
|
||||
case 2:
|
||||
$state = "Закрыто";
|
||||
}
|
||||
|
||||
$comment = new TicketComment();
|
||||
$comment->setUser_id($this->user->id);
|
||||
$comment->setUser_type(1);
|
||||
|
@ -243,9 +278,42 @@ final class SupportPresenter extends OpenVKPresenter
|
|||
$comment->setTicket_Id($id);
|
||||
$comment->setCreated(time());
|
||||
$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'>"{$ticket->getName()}"</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"))) {
|
||||
$ticket->setType($this->postParam("status"));
|
||||
$status = $this->postParam("status");
|
||||
$ticket->setType($status);
|
||||
$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'>"{$ticket->getName()}"</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"));
|
||||
|
@ -442,6 +510,13 @@ final class SupportPresenter extends OpenVKPresenter
|
|||
$ticket->setType(2);
|
||||
$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()}'>"{$ticket->getName()}"</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"));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -458,8 +458,11 @@
|
|||
</tr>
|
||||
<tr n:if="!is_null($user->getBirthday())">
|
||||
<td class="label"><span class="nobold">{_birth_date}:</span></td>
|
||||
<td n:if="$user->getBirthdayPrivacy() == 0" class="data">{$user->getBirthday()->format('%e %B %Y')},
|
||||
{if $user->onlineStatus() != 2 && $user->getBirthdayPrivacy() == 0}
|
||||
<td class="data">{$user->getBirthday()->format('%e %B %Y')},
|
||||
{tr("years", $user->getAge())}</td>
|
||||
{/if}
|
||||
<td n:if="$user->onlineStatus() == 2" class="data">{$user->getBirthday()->format('%e %B %Y')}</td>
|
||||
<td n:if="$user->getBirthdayPrivacy() == 1" class="data">{$user->getBirthday()->format('%e %B')}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
|
|
@ -597,6 +597,8 @@
|
|||
"my_feedback" = "Мої Відповіді";
|
||||
"my_apps" = "Застосунки";
|
||||
"my_settings" = "Мої Налаштування";
|
||||
"bookmarks" = "Вподобані";
|
||||
"bookmarks_tab" = "Вподобане";
|
||||
"bug_tracker" = "Баг-трекер";
|
||||
|
||||
"menu_settings" = "Налаштування";
|
||||
|
@ -647,6 +649,7 @@
|
|||
"cut" = "Квадратні";
|
||||
"round avatars" = "Круглі";
|
||||
"apply_style_for_this_device" = "Застосувати стиль лише для цього пристрою";
|
||||
"ui_settings_window" = "Додаткові налаштування";
|
||||
"search_for_groups" = "Пошук спільнот";
|
||||
"search_for_users" = "Пошук користувачів";
|
||||
"search_for_posts" = "Пошук дописів";
|
||||
|
@ -853,7 +856,8 @@
|
|||
"audio_embed_deleted" = "Аудіозапис видалено";
|
||||
"audio_embed_withdrawn" = "Аудіозапис було вилучено на вимогу правовласника";
|
||||
"audio_embed_forbidden" = "Налаштування конфіденційності користувача не дозволяють вбудовувати цей аудіозапис";
|
||||
"audio_embed_processing" = "Аудіозапис ще обробляється або було оброблено неправильно.";
|
||||
"audio_embed_processing" = "Аудіозапис ще обробляється або був неправильно оброблений.";
|
||||
"audio_embed_processing_bait" = "Все одно відтворити";
|
||||
|
||||
"audios_count_zero" = "Немає аудіозаписів";
|
||||
"audios_count_one" = "Один аудіозапис";
|
||||
|
@ -872,6 +876,7 @@
|
|||
"audio_search" = "Пошук";
|
||||
|
||||
"my_audios_small" = "Мої аудіозаписи";
|
||||
"my_audios_small_uploaded" = "Завантажене";
|
||||
"my_playlists" = "Мій список відтворення";
|
||||
"playlists" = "Списки відтворення";
|
||||
"audios_explicit" = "Має нецензурну лексику";
|
||||
|
@ -962,6 +967,12 @@
|
|||
"audio_ctx_play_next" = "Відтворити наступним";
|
||||
"audio_ctx_clear_context" = "Очистити список аудіозаписів";
|
||||
|
||||
"is_x_audio_zero" = "Немає аудіозаписів";
|
||||
"is_x_audio_one" = "Один аудіозапис.";
|
||||
"is_x_audio_few" = "Всього $1 аудіозаписа.";
|
||||
"is_x_audio_many" = "Всього $1 аудіозаписів.";
|
||||
"is_x_audio_other" = "Всього $1 аудіозаписів.";
|
||||
|
||||
/* Notifications */
|
||||
|
||||
"feedback" = "Відповіді";
|
||||
|
@ -1977,6 +1988,7 @@
|
|||
"s_apps" = "Застосунки";
|
||||
"s_posts" = "Дописи";
|
||||
"s_comments" = "Коментарі";
|
||||
"s_photos" = "Фотографії";
|
||||
"s_videos" = "Відео";
|
||||
"s_audios" = "Музика";
|
||||
"s_audios_playlists" = "Списки відтворення";
|
||||
|
@ -2087,7 +2099,8 @@
|
|||
"mobile_menu" = "Меню";
|
||||
"mobile_like" = "Подобається";
|
||||
"mobile_user_info_hide" = "Приховувати";
|
||||
"mobile_user_info_show_details" = "Показати докладніше";
|
||||
"mobile_user_info_show_details" = "Відобразити докладніше";
|
||||
"mobile_attachment_only_for_pc" = "Вкладення недоступне в PDA версії, його перегляд можливий тільки з іншого пристрою";
|
||||
"my" = "Мої";
|
||||
"enter_a_name_or_artist" = "Введіть назву або виконавця...";
|
||||
|
||||
|
@ -2237,4 +2250,18 @@
|
|||
"documents_sort_size" = "За розміром";
|
||||
"select_doc" = "Вибір документа";
|
||||
"no_documents" = "Документів немає";
|
||||
"go_to_my_documents" = "Перейти до моїх документів";
|
||||
"go_to_my_documents" = "Перейти до Моїх документів";
|
||||
|
||||
/* Fave */
|
||||
|
||||
"faves" = "Закладки";
|
||||
"faves_empty_tip" = "Тут відображатиметься вподобаний Вами контент...";
|
||||
"faves_posts_empty_tip" = "Тут відображатимуться вподобані Вами дописи.";
|
||||
"faves_comments_empty_tip" = "Тут відображатимуться вподобані Вами коментарі.";
|
||||
"faves_photos_empty_tip" = "Тут відображатимуться вподобані Вами фотографії.";
|
||||
"faves_videos_empty_tip" = "Тут відображатимуться вподобані Вами відеозаписи.";
|
||||
"faves_zero" = "Жодного вподобання";
|
||||
"faves_one" = "Одна вподобання";
|
||||
"faves_few" = "$1 вподобання";
|
||||
"faves_many" = "$1 вподобань";
|
||||
"faves_other" = "$1 вподобань";
|
||||
|
|
Loading…
Reference in a new issue