diff --git a/manual-install/update-yaml.sh b/manual-install/update-yaml.sh index 1de5f038..fc8c370d 100644 --- a/manual-install/update-yaml.sh +++ b/manual-install/update-yaml.sh @@ -59,6 +59,7 @@ done sed -i 's|_ENABLED=|_ENABLED=no # Setting this to "yes" enables the option in Nextcloud automatically.|' sample.conf sed -i 's|TALK_ENABLED=no|TALK_ENABLED=yes|' sample.conf sed -i 's|COLLABORA_ENABLED=no|COLLABORA_ENABLED=yes|' sample.conf +sed -i 's|COLLABORA_DICTIONARIES=|COLLABORA_DICTIONARIES=de_DE en_GB en_US es_ES fr_FR it nl pt_BR pt_PT ru # You can change this in order to enable other dictionaries for collabora|' sample.conf sed -i 's|NEXTCLOUD_DATADIR=|NEXTCLOUD_DATADIR=nextcloud_aio_nextcloud_data # You can change this to e.g. "/mnt/ncdata" to map it to a location on your host. It needs to be adjusted before the first startup and never afterwards!|' sample.conf sed -i 's|NEXTCLOUD_MOUNT=|NEXTCLOUD_MOUNT=/mnt/ # This allows the Nextcloud container to access directories on the host. It must never be equal to the value of NEXTCLOUD_DATADIR!|' sample.conf sed -i 's|DAILY_BACKUP_RUNNING=|DAILY_BACKUP_RUNNING=no # When setting to yes, it will automatically update all installed Nextcloud apps upon container startup.|' sample.conf diff --git a/php/containers.json b/php/containers.json index 4b842bc4..39c2fca1 100644 --- a/php/containers.json +++ b/php/containers.json @@ -178,6 +178,7 @@ "environmentVariables": [ "aliasgroup1=https://%NC_DOMAIN%:443", "extra_params=--o:ssl.enable=false --o:ssl.termination=true --o:logging.level=warning", + "dictionaries=%COLLABORA_DICTIONARIES%", "TZ=%TIMEZONE%" ], "volumes": [], diff --git a/php/public/index.php b/php/public/index.php index e553e256..abc1d17f 100644 --- a/php/public/index.php +++ b/php/public/index.php @@ -99,6 +99,7 @@ $app->get('/containers', function ($request, $response, $args) use ($container) 'timezone' => $configurationManager->GetTimezone(), 'skip_domain_validation' => $configurationManager->shouldDomainValidationBeSkipped(), 'talk_port' => $configurationManager->GetTalkPort(), + 'collabora_dictionaries' => $configurationManager->GetCollaboraDictionaries(), ]); })->setName('profile'); $app->get('/login', function ($request, $response, $args) use ($container) { diff --git a/php/src/Controller/ConfigurationController.php b/php/src/Controller/ConfigurationController.php index f19e33ab..cf8c5031 100644 --- a/php/src/Controller/ConfigurationController.php +++ b/php/src/Controller/ConfigurationController.php @@ -87,6 +87,15 @@ class ConfigurationController } } + if (isset($request->getParsedBody()['delete_collabora_dictionaries'])) { + $this->configurationManager->DeleteCollaboraDictionaries(); + } + + if (isset($request->getParsedBody()['collabora_dictionaries'])) { + $collaboraDictionaries = $request->getParsedBody()['collabora_dictionaries'] ?? ''; + $this->configurationManager->SetCollaboraDictionaries($collaboraDictionaries); + } + return $response->withStatus(201)->withHeader('Location', '/'); } catch (InvalidSettingConfigurationException $ex) { $response->getBody()->write($ex->getMessage()); diff --git a/php/src/Data/ConfigurationManager.php b/php/src/Data/ConfigurationManager.php index ad4e4060..5ce5051a 100644 --- a/php/src/Data/ConfigurationManager.php +++ b/php/src/Data/ConfigurationManager.php @@ -568,4 +568,36 @@ class ConfigurationManager } return false; } + + public function GetCollaboraDictionaries() : string { + $config = $this->GetConfig(); + if(!isset($config['collabora_dictionaries'])) { + $config['collabora_dictionaries'] = ''; + } + + return $config['collabora_dictionaries']; + } + + /** + * @throws InvalidSettingConfigurationException + */ + public function SetCollaboraDictionaries(string $CollaboraDictionaries) : void { + if ($CollaboraDictionaries === "") { + throw new InvalidSettingConfigurationException("The dictionaries must not be empty!"); + } + + if (!preg_match("#^[a-zA-Z_ ]+$#", $CollaboraDictionaries)) { + throw new InvalidSettingConfigurationException("The entered dictionaries do not seem to be a valid!"); + } + + $config = $this->GetConfig(); + $config['collabora_dictionaries'] = $CollaboraDictionaries; + $this->WriteConfig($config); + } + + public function DeleteCollaboraDictionaries() : void { + $config = $this->GetConfig(); + $config['collabora_dictionaries'] = ''; + $this->WriteConfig($config); + } } diff --git a/php/src/Docker/DockerActionManager.php b/php/src/Docker/DockerActionManager.php index ac4231ea..cf521a49 100644 --- a/php/src/Docker/DockerActionManager.php +++ b/php/src/Docker/DockerActionManager.php @@ -292,6 +292,12 @@ class DockerActionManager } else { $replacements[1] = $this->configurationManager->GetTimezone(); } + } elseif ($out[1] === 'COLLABORA_DICTIONARIES') { + if ($this->configurationManager->GetCollaboraDictionaries() === '') { + $replacements[1] = 'de_DE en_GB en_US es_ES fr_FR it nl pt_BR pt_PT ru'; + } else { + $replacements[1] = $this->configurationManager->GetCollaboraDictionaries(); + } } else { $replacements[1] = $this->configurationManager->GetSecret($out[1]); } diff --git a/php/templates/containers.twig b/php/templates/containers.twig index 02cc854c..3fe75ff3 100644 --- a/php/templates/containers.twig +++ b/php/templates/containers.twig @@ -459,6 +459,29 @@ {% endif %} + {% if is_collabora_enabled == true and isAnyRunning == false and was_start_button_clicked == true %} +