nextcloud-pride-flags/lib/Controller/SettingsController.php

56 lines
1.7 KiB
PHP

<?php
declare(strict_types=1);
namespace OCA\PrideFlags\Controller;
use OCA\PrideFlags\Settings\AppSettings;
use Closure;
use OCP\IRequest;
use OCP\IConfig;
use OCP\AppFramework\Controller;
use OCP\AppFramework\Http;
use OCP\AppFramework\Http\JSONResponse;
use OCP\AppFramework\Http\Attribute\NoAdminRequired;
use OCP\AppFramework\Http\Attribute\NoCSRFRequired;
use OCP\AppFramework\Http\Attribute\AuthorizedAdminSetting;
class SettingsController extends Controller {
public function __construct($appName, IRequest $request, private AppSettings $appSettings, private $userId) {
parent::__construct($appName, $request);
}
#[NoAdminRequired]
#[NoCSRFRequired]
public function get(): JSONResponse {
return $this->makeJSONResponse(fn () => $this->appSettings->getAll($this->userId));
}
#[NoAdminRequired]
public function set(string $folderVariant, string $buttonVariant): JSONResponse {
$this->appSettings->set($this->userId, $folderVariant, $buttonVariant);
return $this->makeJSONResponse(fn () => $this->appSettings->getAll($this->userId));
}
#[AuthorizedAdminSetting]
public function setGlobal(string $folderVariant, string $buttonVariant): JSONResponse {
$this->appSettings->setGlobal($folderVariant, $buttonVariant);
return $this->makeJSONResponse(fn () => $this->appSettings->getGlobal());
}
#[NoCSRFRequired]
public function getGlobal(): JSONResponse {
return $this->makeJSONResponse(fn () => $this->appSettings->getGlobal());
}
protected function makeJSONResponse(Closure $closure): JSONResponse {
try {
return new JSONResponse($closure(), HTTP::STATUS_OK);
} catch (Exception $e) {
return new JSONResponse(['message' => $e->getMessage()], HTTP::INTERNAL_SERVER_ERROR);
}
}
}