← Back
Editing: Collector.php
<?php /** * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors * SPDX-FileCopyrightText: 2016 ownCloud, Inc. * SPDX-License-Identifier: AGPL-3.0-only */ namespace OCA\Survey_Client; use bantu\IniGetWrapper\IniGetWrapper; use OCA\Survey_Client\Categories\Apps; use OCA\Survey_Client\Categories\Database; use OCA\Survey_Client\Categories\Encryption; use OCA\Survey_Client\Categories\FilesSharing; use OCA\Survey_Client\Categories\ICategory; use OCA\Survey_Client\Categories\Php; use OCA\Survey_Client\Categories\Server; use OCA\Survey_Client\Categories\Stats; use OCP\AppFramework\Http; use OCP\AppFramework\Http\DataResponse; use OCP\AppFramework\Services\IAppConfig; use OCP\AppFramework\Utility\ITimeFactory; use OCP\Http\Client\IClientService; use OCP\IConfig; use OCP\IDBConnection; use OCP\IL10N; class Collector { public const SURVEY_SERVER_URL = 'https://surveyserver.nextcloud.com/'; /** @var ICategory[] */ protected array $categories; public function __construct( protected IClientService $clientService, protected IConfig $config, protected IAppConfig $appConfig, protected IDBConnection $connection, protected IniGetWrapper $phpIni, protected IL10N $l, protected ITimeFactory $timeFactory, ) { } protected function registerCategories(): void { $this->categories[] = new Server( $this->config, $this->l ); $this->categories[] = new Php( $this->phpIni, $this->l ); $this->categories[] = new Database( $this->config, $this->connection, $this->l ); $this->categories[] = new Apps( $this->connection, $this->l ); $this->categories[] = new Stats( $this->connection, $this->l ); $this->categories[] = new FilesSharing( $this->connection, $this->l ); $this->categories[] = new Encryption( $this->config, $this->l ); } /** * @return array<string, array{displayName: string, enabled: bool}> */ public function getCategories(): array { $this->registerCategories(); $categories = []; foreach ($this->categories as $category) { $categories[$category->getCategory()] = [ 'displayName' => $category->getDisplayName(), 'enabled' => $this->appConfig->getAppValueBool($category->getCategory(), true), ]; } return $categories; } /** * @return array{id: string, items: array} */ public function getReport() { $this->registerCategories(); $tuples = []; foreach ($this->categories as $category) { if ($this->appConfig->getAppValueBool($category->getCategory(), true)) { foreach ($category->getData() as $key => $value) { $tuples[] = [ $category->getCategory(), $key, $value ]; } } } return [ 'id' => $this->config->getSystemValue('instanceid'), 'items' => $tuples, ]; } /** * @return DataResponse */ public function sendReport(): DataResponse { $report = $this->getReport(); $client = $this->clientService->newClient(); try { $response = $client->post(self::SURVEY_SERVER_URL . 'ocs/v2.php/apps/survey_server/api/v1/survey', [ 'timeout' => 5, 'query' => [ 'data' => json_encode($report), ], ]); } catch (\Exception $e) { return new DataResponse( $report, Http::STATUS_INTERNAL_SERVER_ERROR ); } if ($response->getStatusCode() === Http::STATUS_OK) { $this->appConfig->setAppValueInt('last_sent', $this->timeFactory->getTime()); $this->appConfig->setAppValueString('last_report', json_encode($report), true); return new DataResponse( $report ); } return new DataResponse( $report, Http::STATUS_INTERNAL_SERVER_ERROR ); } }
Save File
Cancel