mirror of https://github.com/nextcloud/bookmarks
107 lines
2.4 KiB
PHP
107 lines
2.4 KiB
PHP
<?php
|
|
/*
|
|
* Copyright (c) 2024. The Nextcloud Bookmarks contributors.
|
|
*
|
|
* This file is licensed under the Affero General Public License version 3 or later. See the COPYING file.
|
|
*/
|
|
|
|
namespace OCA\Bookmarks\Service;
|
|
|
|
use OCP\IConfig;
|
|
use OCP\IL10N;
|
|
|
|
class UserSettingsService {
|
|
|
|
public const KEYS = ['hasSeenWhatsnew', 'viewMode', 'archive.enabled', 'archive.filePath', 'backup.enabled', 'backup.filePath', 'sorting'];
|
|
|
|
public function __construct(
|
|
private ?string $userId,
|
|
private string $appName,
|
|
private IConfig $config,
|
|
private IL10N $l,
|
|
) {
|
|
|
|
}
|
|
|
|
public function setUserId(?string $userId): void {
|
|
$this->userId = $userId;
|
|
}
|
|
|
|
/**
|
|
* @param string $key
|
|
* @return string
|
|
*/
|
|
public function get(string $key): string {
|
|
if ($key === 'sorting') {
|
|
$default = 'lastmodified';
|
|
}
|
|
if ($key === 'hasSeenWhatsnew') {
|
|
$default = '0';
|
|
}
|
|
if ($key === 'viewMode') {
|
|
$default = 'grid';
|
|
}
|
|
if ($key === 'limit') {
|
|
return $this->config->getAppValue('bookmarks', 'performance.maxBookmarksperAccount', 0);
|
|
}
|
|
if ($key === 'archive.enabled') {
|
|
$default = (string) true;
|
|
}
|
|
if ($key === 'privacy.enableScraping') {
|
|
return $this->config->getAppValue($this->appName, 'privacy.enableScraping', 'false');
|
|
}
|
|
if ($key === 'archive.filePath') {
|
|
$default = $this->l->t('Bookmarks');
|
|
}
|
|
if ($key === 'backup.enabled') {
|
|
$default = (string) false;
|
|
}
|
|
if ($key === 'backup.filePath') {
|
|
$default = $this->l->t('Bookmarks Backups');
|
|
}
|
|
return $this->config->getUserValue(
|
|
$this->userId,
|
|
$this->appName,
|
|
$key,
|
|
$default
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @param string $key
|
|
* @param string $value
|
|
* @return void
|
|
* @throws \ValueError|\UnexpectedValueException
|
|
*/
|
|
public function set(string $key, string $value): void {
|
|
if (!in_array($key, self::KEYS)) {
|
|
throw new \UnexpectedValueException();
|
|
}
|
|
if ($key === 'viewMode' && !in_array($value, ['grid', 'list'], true)) {
|
|
throw new \ValueError();
|
|
}
|
|
if ($key === 'sorting' && !in_array($value, ['title', 'added', 'clickcount', 'lastmodified', 'index', 'url'], true)) {
|
|
throw new \ValueError();
|
|
}
|
|
$this->config->setUserValue(
|
|
$this->userId,
|
|
$this->appName,
|
|
$key,
|
|
$value
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @return array
|
|
*/
|
|
public function toArray(): array {
|
|
$array = [];
|
|
foreach(self::KEYS as $key) {
|
|
$array[$key] = $this->get($key);
|
|
}
|
|
$array['limit'] = $this->get('limit');
|
|
$array['privacy.enableScraping'] = $this->get('privacy.enableScraping');
|
|
return $array;
|
|
}
|
|
}
|