/
kev
/
Nextcloud_File-Changes-Tracker
Обзор
Документация
Войти
/
kev
/
Nextcloud_File-Changes-Tracker
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
lib/Controller/StatisticsController.php
93 строки
3 KB
Evgeny Konovalov
first_commit
16 фев 2026, 17:45
16 фев 2026, 17:45
476f06c
Код
Авторство
О чём код?
<?php declare(strict_types=1); namespace OCA\FileChangesTracker\Controller; use OCA\FileChangesTracker\Service\EventLogService; use OCA\FileChangesTracker\Service\FolderConfigService; use OCP\AppFramework\Controller; use OCP\AppFramework\Http; use OCP\AppFramework\Http\JSONResponse; use OCP\IGroupManager; use OCP\IRequest; use OCP\IUserSession; /** * Контроллер для получения статистики */ class StatisticsController extends Controller { private EventLogService $eventLogService; private FolderConfigService $folderConfigService; private IUserSession $userSession; private IGroupManager $groupManager; public function __construct( string $appName, IRequest $request, EventLogService $eventLogService, FolderConfigService $folderConfigService, IUserSession $userSession, IGroupManager $groupManager ) { parent::__construct($appName, $request); $this->eventLogService = $eventLogService; $this->folderConfigService = $folderConfigService; $this->userSession = $userSession; $this->groupManager = $groupManager; } /** * Получить сводную статистику * * @NoAdminRequired */ public function summary(): JSONResponse { try { $user = $this->userSession->getUser(); if (!$user) { return new JSONResponse(['error' => 'Пользователь не авторизован'], Http::STATUS_UNAUTHORIZED); } $userId = $user->getUID(); $isAdmin = $this->groupManager->isAdmin($userId); $dateFrom = $this->request->getParam('dateFrom'); $dateTo = $this->request->getParam('dateTo'); // Определяем конфигурации для статистики $folderConfigIds = null; if (!$isAdmin) { $userConfigs = $this->folderConfigService->findByResponsible($userId, 'user'); $folderConfigIds = array_map(fn($config) => $config->getId(), $userConfigs); if (empty($folderConfigIds)) { return new JSONResponse([ 'totalEvents' => 0, 'eventsByType' => [], 'trackedFolders' => 0 ], Http::STATUS_OK); } } // Получаем статистику по типам событий $eventsByType = $this->eventLogService->getStatistics($folderConfigIds, $dateFrom, $dateTo); // Считаем общее количество событий $totalEvents = array_sum($eventsByType); // Количество отслеживаемых папок $trackedFolders = $isAdmin ? count($this->folderConfigService->findAll()) : count($this->folderConfigService->findByResponsible($userId, 'user')); return new JSONResponse([ 'totalEvents' => $totalEvents, 'eventsByType' => $eventsByType, 'trackedFolders' => $trackedFolders ], Http::STATUS_OK); } catch (\Exception $e) { return new JSONResponse(['error' => $e->getMessage()], Http::STATUS_INTERNAL_SERVER_ERROR); } } }