aboutsummaryrefslogtreecommitdiffstats
path: root/core/Command/Config/Preset.php
diff options
context:
space:
mode:
Diffstat (limited to 'core/Command/Config/Preset.php')
-rw-r--r--core/Command/Config/Preset.php71
1 files changed, 71 insertions, 0 deletions
diff --git a/core/Command/Config/Preset.php b/core/Command/Config/Preset.php
new file mode 100644
index 00000000000..4f0278896db
--- /dev/null
+++ b/core/Command/Config/Preset.php
@@ -0,0 +1,71 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+namespace OC\Core\Command\Config;
+
+use OC\Config\ConfigManager;
+use OC\Core\Command\Base;
+use OCP\Config\Lexicon\Preset as ConfigLexiconPreset;
+use OCP\IConfig;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class Preset extends Base {
+ public function __construct(
+ private readonly IConfig $config,
+ private readonly ConfigManager $configManager,
+ ) {
+ parent::__construct();
+ }
+
+ protected function configure() {
+ parent::configure();
+ $this->setName('config:preset')
+ ->setDescription('Select a config preset')
+ ->addArgument('preset', InputArgument::OPTIONAL, 'Preset to use for all unset config values', '')
+ ->addOption('list', '', InputOption::VALUE_NONE, 'display available preset');
+ }
+
+ protected function execute(InputInterface $input, OutputInterface $output): int {
+ if ($input->getOption('list')) {
+ $this->getEnum('', $list);
+ $this->writeArrayInOutputFormat($input, $output, $list);
+ return self::SUCCESS;
+ }
+
+ $presetArg = $input->getArgument('preset');
+ if ($presetArg !== '') {
+ $preset = $this->getEnum($presetArg, $list);
+ if ($preset === null) {
+ $output->writeln('<error>Invalid preset: ' . $presetArg . '</error>');
+ $output->writeln('Available presets: ' . implode(', ', $list));
+ return self::INVALID;
+ }
+
+ $this->configManager->setLexiconPreset($preset);
+ }
+
+ $current = ConfigLexiconPreset::tryFrom($this->config->getSystemValueInt(ConfigManager::PRESET_CONFIGKEY, 0)) ?? ConfigLexiconPreset::NONE;
+ $this->writeArrayInOutputFormat($input, $output, [$current->name], 'current preset: ');
+ return self::SUCCESS;
+ }
+
+ private function getEnum(string $name, ?array &$list = null): ?ConfigLexiconPreset {
+ $list = [];
+ foreach (ConfigLexiconPreset::cases() as $case) {
+ $list[] = $case->name;
+ if (strtolower($case->name) === strtolower($name)) {
+ return $case;
+ }
+ }
+
+ return null;
+ }
+}