diff --git a/lib/Routes/Config/ConfigAddEdit.php b/lib/Routes/Config/ConfigAddEdit.php index 75f0db9a1..7a3aded32 100644 --- a/lib/Routes/Config/ConfigAddEdit.php +++ b/lib/Routes/Config/ConfigAddEdit.php @@ -29,16 +29,39 @@ public function __invoke(Request $request, Response $response, $args) $json = $this->getRequestData($request); $config_checked = false; + $dublicate_url = false; + // check, if a config with the same data already exists: + $config = reset(Config::findBySql('service_url = ?', [$json['config']['service_url']])); if ($args['id']) { - $config = Config::find($args['id']); - } else { - $config = reset(Config::findBySql('service_url = ?', [$json['config']['service_url']])); - - if (!$config) { + // PUT request - edit config + if ($config && $config->id !== (int)$args['id']) { + $dublicate_url = true; + } + else { + $config = Config::find($args['id']); + } + } + else { + // POST request - create config + if ($config) { + $dublicate_url = true; + } else { $config = new Config; } } + // Throw error if the url is already used + if ($dublicate_url) { + return $this->createResponse([ + 'message'=> [ + 'type' => 'error', + 'text' => sprintf( + _('Eine Konfiguration mit der angegebenen URL ist bereits vorhanden: "%s"'), + $json['config']['service_url'] + ) + ], + ], $response); + } $new_settings = []; $stored_config = $config->toArray(); diff --git a/migrations/074_update_config_key.php b/migrations/074_update_config_key.php new file mode 100644 index 000000000..befebb2c6 --- /dev/null +++ b/migrations/074_update_config_key.php @@ -0,0 +1,33 @@ +exec("ALTER TABLE `oc_config` + DROP INDEX service_url, + ADD UNIQUE KEY(service_url) + "); + + SimpleOrMap::expireTableScheme(); + } + + public function down() + { + $db = DBManager::get(); + + $db->exec("ALTER TABLE `oc_config` + DROP INDEX service_url, + ADD UNIQUE KEY(service_url,service_user,service_password) + "); + + SimpleOrMap::expireTableScheme(); + } +} \ No newline at end of file