Files
f7support/lib/Controller/PageController.php
T
root 1685488c50 Передавать email пользователя F7cloud в API поддержки.
Email из Nextcloud (getEMailAddress) уходит в data-user-email, заголовок
X-F7cloud-Email и поле client_email при создании тикета — для привязки
контакта CRM в Bitrix24.
2026-05-22 09:58:34 +00:00

94 lines
3.8 KiB
PHP

<?php
declare(strict_types=1);
namespace OCA\F7Support\Controller;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http\TemplateResponse;
use OCP\IConfig;
use OCP\IRequest;
use OCP\IURLGenerator;
use OCP\IUserSession;
use OCP\Util;
class PageController extends Controller {
public function __construct(
string $AppName,
IRequest $request,
private IUserSession $userSession,
private IURLGenerator $urlGenerator,
private IConfig $config,
) {
parent::__construct($AppName, $request);
}
/**
* @NoAdminRequired
* @NoCSRFRequired
*/
public function index(): TemplateResponse {
$user = $this->userSession->getUser();
$baseUrl = $this->urlGenerator->getBaseUrl();
$serverHost = parse_url($baseUrl, PHP_URL_HOST) ?: 'localhost';
// База REST API поддержки (без завершающего слэша). Переопределение: occ config:app:set f7support support_api_base --value=https://...
$supportApiBase = trim($this->config->getAppValue('f7support', 'support_api_base', 'https://support.f7cloud.ru'));
if ($supportApiBase === '') {
$supportApiBase = 'https://support.f7cloud.ru';
}
$supportParts = parse_url($supportApiBase);
$supportApiOrigin = ($supportParts['scheme'] ?? 'https') . '://' . ($supportParts['host'] ?? '');
// Optional full WebSocket URL prefix, e.g. wss://support.f7cloud.ru/api/ws (path before /tickets/{id})
$supportWsBase = $this->config->getAppValue('f7support', 'support_ws_base', '');
// Метки «прочитано» (POST …/read на API поддержки).
// Порядок деплоя: (1) выкатить бэкенд с маршрутами POST /api/client/tickets/{id}/read и POST /api/operator/tickets/{id}/read;
// (2) на Nextcloud: occ config:app:set f7support client_read_receipts --value=1 — тогда приложение f7support начнёт слать client /read;
// панель оператора вызывает operator /read независимо от этого флага. При client_read_receipts=0 клиент не дергает client /read (нет 404 на старом API).
// Отключить вызовы с клиента: occ config:app:set f7support client_read_receipts --value=0
$clientReadReceipts = $this->config->getAppValue('f7support', 'client_read_receipts', '0');
// Периодический GET /api/client/tickets (мс): has_unread и отпечаток карточки; WebSocket только у открытого тикета.
// По умолчанию 3000 (3 с). Пустая строка в конфиге трактуется как 3000. Явное «0» отключает опрос. Иначе 3000…120000. occ: f7support tickets_poll_ms
$rawPoll = trim((string) $this->config->getAppValue('f7support', 'tickets_poll_ms', '3000'));
if ($rawPoll === '') {
$rawPoll = '3000';
}
$ticketsPollMs = (int) $rawPoll;
if ($ticketsPollMs < 0) {
$ticketsPollMs = 0;
} elseif ($ticketsPollMs > 0) {
if ($ticketsPollMs < 3000) {
$ticketsPollMs = 3000;
}
if ($ticketsPollMs > 120000) {
$ticketsPollMs = 120000;
}
}
Util::addStyle('f7support', 'fonts');
Util::addStyle('f7support', 'f7support');
Util::addScript('f7support', 'main');
$userEmail = '';
if ($user !== null) {
$mail = $user->getEMailAddress();
$userEmail = is_string($mail) ? trim($mail) : '';
}
return new TemplateResponse('f7support', 'main', [
'username' => $user ? $user->getUID() : '',
'userEmail' => $userEmail,
'serverAddress' => $serverHost,
'supportApiBase' => $supportApiBase,
'supportApiOrigin' => $supportApiOrigin,
'supportWsBase' => $supportWsBase,
'clientReadReceipts' => $clientReadReceipts,
'ticketsPollMs' => (string) $ticketsPollMs,
]);
}
}