From 0f85958dff30f45d7ffce1c7817a580e5497959e Mon Sep 17 00:00:00 2001 From: Terranom674 Date: Wed, 19 Aug 2026 18:27:44 +0200 Subject: [PATCH] 0.9.6.24: WebDAV ohne Migrationspaarung --- include/nc_connector_webdav.inc.php | 134 ++++++---------------------- 1 file changed, 29 insertions(+), 105 deletions(-) diff --git a/include/nc_connector_webdav.inc.php b/include/nc_connector_webdav.inc.php index cbcd48f..92be928 100644 --- a/include/nc_connector_webdav.inc.php +++ b/include/nc_connector_webdav.inc.php @@ -5,57 +5,8 @@ if (!defined('PHPWG_ROOT_PATH')) } /** - * Link a WebDAV successor with the exact legacy connection selected for migration. - * The caller must execute this inside the same transaction that creates the successor. - */ -function bratonien_tools_nc_connector_pair_migration_fallback($legacy_id, $webdav_id, array &$webdav_config, $now) -{ - $legacy_id = (int)$legacy_id; - $webdav_id = (int)$webdav_id; - if ($legacy_id < 1 || $webdav_id < 1 || $legacy_id === $webdav_id) - { - throw new RuntimeException('Die Migrationszuordnung ist ungueltig.'); - } - - $legacy = bratonien_tools_nc_connector_connection($legacy_id, false); - if (!$legacy || (string)$legacy['adapter'] !== 'local') - { - throw new RuntimeException('Die ausgewaehlte Legacy-Verbindung fuer die Migration ist nicht mehr verfuegbar.'); - } - - $legacy_config = isset($legacy['config']) && is_array($legacy['config']) ? $legacy['config'] : array(); - $webdav_config['migration'] = array( - 'role'=>'webdav-primary-candidate', - 'legacy_fallback_connection_id'=>$legacy_id, - 'fallback_policy'=>'keep-running', - 'paired_at'=>(string)$now, - 'cutover_state'=>'parallel', - ); - $legacy_config['migration'] = array( - 'role'=>'legacy-fallback', - 'webdav_successor_connection_id'=>$webdav_id, - 'fallback_policy'=>'keep-running', - 'paired_at'=>(string)$now, - 'cutover_state'=>'parallel', - ); - - $legacy_json = json_encode($legacy_config, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); - if (!is_string($legacy_json)) - { - throw new RuntimeException('Die bestehende Verbindung konnte nicht als Migrations-Fallback markiert werden.'); - } - - $table = bratonien_tools_nc_connector_table(); - pwg_query("UPDATE `$table` SET config_json='".pwg_db_real_escape_string($legacy_json)."', updated='".pwg_db_real_escape_string((string)$now)."' WHERE id=".$legacy_id." AND adapter='local' LIMIT 1"); - - return $legacy_id; -} - -/** - * Create or update a WebDAV-backed connector from the user-facing wizard. - * - * Remote connections are updated in place. A legacy connection is paired only - * when the wizard was explicitly opened in migration mode for that connection. + * Create or update one independent WebDAV connector connection. + * No migration pair, successor or implicit legacy fallback is created. */ function bratonien_tools_nc_connector_create_webdav_placeholder_from_wizard() { @@ -80,13 +31,20 @@ function bratonien_tools_nc_connector_create_webdav_placeholder_from_wizard() $selected_ids = isset($state['directory_selected_fileids']) && is_array($state['directory_selected_fileids']) ? $state['directory_selected_fileids'] : array(); - if (!$selected) throw new RuntimeException('Bitte mindestens ein Nextcloud-Verzeichnis auswaehlen.'); + + if (!$selected) + { + $selected = array(''); + } $roots = array(); foreach ($selected as $path) { $fileid = isset($selected_ids[$path]) ? (int)$selected_ids[$path] : 0; - if ($fileid < 1) throw new RuntimeException('Fuer ein ausgewaehltes Nextcloud-Verzeichnis fehlt die eindeutige Datei-ID.'); + if ($fileid < 1) + { + throw new RuntimeException('Fuer ein ausgewaehltes Nextcloud-Verzeichnis fehlt die eindeutige Datei-ID.'); + } $display_name = $path === '' ? (trim((string)($state['display_name'] ?? '')) !== '' ? trim((string)$state['display_name']) : $username) : basename($path); @@ -115,13 +73,10 @@ function bratonien_tools_nc_connector_create_webdav_placeholder_from_wizard() && (string)$editing_connection['adapter'] === 'remote' && (string)($editing_connection['config']['source_mode'] ?? '') === 'webdav-placeholder' && $editing_mode === 'update'; - $migrating_legacy = $editing_connection - && (string)$editing_connection['adapter'] === 'local' - && $editing_mode === 'migrate'; - if ($editing_mode === 'migrate' && !$migrating_legacy) + if ($editing_mode === 'migrate') { - throw new RuntimeException('Die fuer die Migration ausgewaehlte Legacy-Verbindung ist nicht mehr verfuegbar.'); + throw new RuntimeException('Die Migrationsfunktion wurde entfernt. Bitte eine normale WebDAV-Verbindung anlegen.'); } $config = array( @@ -138,7 +93,6 @@ function bratonien_tools_nc_connector_create_webdav_placeholder_from_wizard() 'quiet_seconds'=>120, 'max_wait_seconds'=>900, 'full_sync_seconds'=>86400, - 'parallel_test'=>true, 'piwigo_auth'=>'connection-scoped', 'api_enabled'=>$api_enabled, ); @@ -146,7 +100,7 @@ function bratonien_tools_nc_connector_create_webdav_placeholder_from_wizard() if ($editing_remote) { $old_config = is_array($editing_connection['config'] ?? null) ? $editing_connection['config'] : array(); - foreach (array('state_dir','status_file','parallel_gallery_root','source_fingerprint','runtime','migration') as $preserve) + foreach (array('state_dir','status_file','parallel_gallery_root','source_fingerprint','runtime') as $preserve) { if (array_key_exists($preserve, $old_config)) $config[$preserve] = $old_config[$preserve]; } @@ -191,7 +145,7 @@ function bratonien_tools_nc_connector_create_webdav_placeholder_from_wizard() return array( 'connection_id'=>$editing_id, - 'message'=>'WebDAV-Verbindung #'.$editing_id.' wurde gespeichert. Der naechste Connector-Lauf verwendet die neuen Einstellungen.', + 'message'=>'WebDAV-Verbindung wurde gespeichert.', ); } @@ -199,55 +153,25 @@ function bratonien_tools_nc_connector_create_webdav_placeholder_from_wizard() if (!is_string($config_json)) throw new RuntimeException('WebDAV-Konfiguration konnte nicht serialisiert werden.'); $connection_key = 'webdav-'.bin2hex(random_bytes(12)); - $legacy_fallback_id = null; - $id = 0; + pwg_query("INSERT INTO `$table` (connection_key,name,adapter,enabled,takeover_state,config_json,secret_blob,created,updated) VALUES ('" + .pwg_db_real_escape_string($connection_key)."','" + .pwg_db_real_escape_string($name)."','remote',0,'disabled','" + .pwg_db_real_escape_string($config_json)."','" + .pwg_db_real_escape_string($secret_blob)."','" + .pwg_db_real_escape_string($now)."','" + .pwg_db_real_escape_string($now)."')"); - pwg_query('START TRANSACTION'); - try - { - pwg_query("INSERT INTO `$table` (connection_key,name,adapter,enabled,takeover_state,config_json,secret_blob,created,updated) VALUES ('" - .pwg_db_real_escape_string($connection_key)."','" - .pwg_db_real_escape_string($name)."','remote',0,'disabled','" - .pwg_db_real_escape_string($config_json)."','" - .pwg_db_real_escape_string($secret_blob)."','" - .pwg_db_real_escape_string($now)."','" - .pwg_db_real_escape_string($now)."')"); + $id = (int)pwg_db_insert_id(); + if ($id < 1) throw new RuntimeException('Die WebDAV-Verbindung konnte nicht eindeutig angelegt werden.'); - $id = (int)pwg_db_insert_id(); - if ($id < 1) throw new RuntimeException('Die WebDAV-Verbindung konnte nicht eindeutig angelegt werden.'); - - $config['state_dir'] = '/var/lib/bratonien-tools/nc-connector/connection-'.$id; - $config['status_file'] = $config['state_dir'].'/connector-status.json'; - if ($migrating_legacy) - { - $legacy_fallback_id = bratonien_tools_nc_connector_pair_migration_fallback($editing_id, $id, $config, $now); - } - - $config_json = json_encode($config, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); - if (!is_string($config_json)) - { - throw new RuntimeException('Die WebDAV-Verbindung konnte nach dem Anlegen nicht serialisiert werden.'); - } - pwg_query("UPDATE `$table` SET config_json='".pwg_db_real_escape_string($config_json)."' WHERE id=".$id." AND adapter='remote' LIMIT 1"); - pwg_query('COMMIT'); - } - catch (Throwable $e) - { - pwg_query('ROLLBACK'); - throw $e; - } + $config['state_dir'] = '/var/lib/bratonien-tools/nc-connector/connection-'.$id; + $config['status_file'] = $config['state_dir'].'/connector-status.json'; + $config_json = json_encode($config, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); + if (!is_string($config_json)) throw new RuntimeException('WebDAV-Konfiguration konnte nach dem Anlegen nicht serialisiert werden.'); + pwg_query("UPDATE `$table` SET config_json='".pwg_db_real_escape_string($config_json)."' WHERE id=".$id." AND adapter='remote' LIMIT 1"); unset($_SESSION['bratonien_nc_wizard']); - if ($legacy_fallback_id !== null) - { - return array( - 'connection_id'=>$id, - 'legacy_fallback_connection_id'=>$legacy_fallback_id, - 'message'=>'WebDAV-Nachfolger wurde angelegt. Die bestehende lokale Verbindung #'.$legacy_fallback_id.' bleibt als Fallback erhalten.', - ); - } - return array( 'connection_id'=>$id, 'message'=>'WebDAV-Verbindung wurde angelegt.',