You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
189 lines
4.4 KiB
189 lines
4.4 KiB
<?php |
|
/** |
|
* @author Joas Schilling <coding@schilljs.com> |
|
* |
|
* @copyright Copyright (c) 2016, ownCloud, Inc. |
|
* @license AGPL-3.0 |
|
* |
|
* This code is free software: you can redistribute it and/or modify |
|
* it under the terms of the GNU Affero General Public License, version 3, |
|
* as published by the Free Software Foundation. |
|
* |
|
* This program is distributed in the hope that it will be useful, |
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
* GNU Affero General Public License for more details. |
|
* |
|
* You should have received a copy of the GNU Affero General Public License, version 3, |
|
* along with this program. If not, see <http://www.gnu.org/licenses/> |
|
* |
|
*/ |
|
|
|
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\Http\Client\IClientService; |
|
use OCP\IConfig; |
|
use OCP\IDBConnection; |
|
use OCP\IL10N; |
|
|
|
class Collector { |
|
|
|
const SURVEY_SERVER_URL = 'https://surveyserver.nextcloud.com/'; |
|
|
|
/** @var ICategory[] */ |
|
protected $categories; |
|
|
|
/** @var IClientService */ |
|
protected $clientService; |
|
|
|
/** @var IConfig */ |
|
protected $config; |
|
|
|
/** @var IDBConnection */ |
|
protected $connection; |
|
|
|
/** @var IniGetWrapper */ |
|
protected $phpIni; |
|
|
|
/** @var \OCP\IL10N */ |
|
protected $l; |
|
|
|
/** |
|
* Collector constructor. |
|
* |
|
* @param IClientService $clientService |
|
* @param IConfig $config |
|
* @param IDBConnection $connection |
|
* @param IniGetWrapper $phpIni |
|
* @param IL10N $l |
|
*/ |
|
public function __construct(IClientService $clientService, IConfig $config, IDBConnection $connection, IniGetWrapper $phpIni, IL10N $l) { |
|
$this->clientService = $clientService; |
|
$this->config = $config; |
|
$this->connection = $connection; |
|
$this->phpIni = $phpIni; |
|
$this->l = $l; |
|
} |
|
|
|
protected function registerCategories() { |
|
$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 |
|
*/ |
|
public function getCategories() { |
|
$this->registerCategories(); |
|
|
|
$categories = []; |
|
|
|
foreach ($this->categories as $category) { |
|
$categories[$category->getCategory()] = [ |
|
'displayName' => $category->getDisplayName(), |
|
'enabled' => $this->config->getAppValue('survey_client', $category->getCategory(), 'yes') === 'yes', |
|
]; |
|
} |
|
|
|
return $categories; |
|
} |
|
|
|
/** |
|
* @return array |
|
*/ |
|
public function getReport() { |
|
$this->registerCategories(); |
|
|
|
$tuples = []; |
|
foreach ($this->categories as $category) { |
|
if ($this->config->getAppValue('survey_client', $category->getCategory(), 'yes') === 'yes') { |
|
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->config->setAppValue('survey_client', 'last_sent', time()); |
|
$this->config->setAppValue('survey_client', 'last_report', json_encode($report)); |
|
return new DataResponse( |
|
$report |
|
); |
|
} |
|
|
|
return new DataResponse( |
|
$report, |
|
Http::STATUS_INTERNAL_SERVER_ERROR |
|
); |
|
} |
|
}
|
|
|