diff --git a/webdav-derivative-debug.php b/webdav-derivative-debug.php new file mode 100644 index 0000000..b6da53b --- /dev/null +++ b/webdav-derivative-debug.php @@ -0,0 +1,183 @@ +false, 'stage'=>'auth', 'error'=>'Nur fuer Administratoren/Webmaster.')); +} + +$image_id = (int)($_GET['id'] ?? 0); +if ($image_id < 1) +{ + bratonien_tools_webdav_debug_out(400, array('ok'=>false, 'stage'=>'input', 'error'=>'Bild-ID fehlt.')); +} + +$debug = array( + 'ok'=>false, + 'image_id'=>$image_id, + 'stage'=>'start', +); + +$result = pwg_query('SELECT id, path, coi FROM '.IMAGES_TABLE.' WHERE id='.$image_id.' LIMIT 1'); +if (!pwg_db_num_rows($result)) +{ + $debug['stage'] = 'image-row'; + $debug['error'] = 'Bild nicht gefunden.'; + bratonien_tools_webdav_debug_out(404, $debug); +} +$row = pwg_db_fetch_assoc($result); +$image_path = (string)($row['path'] ?? ''); +$debug['images_path'] = $image_path; + +$absolute = $image_path; +if (strpos($absolute, '/') !== 0) +{ + $absolute = PHPWG_ROOT_PATH.ltrim(preg_replace('#^\./#', '', $absolute), '/'); +} +$debug['absolute_path'] = $absolute; +$debug['absolute_exists'] = file_exists($absolute); +$debug['absolute_is_file'] = is_file($absolute); +$debug['absolute_is_link'] = is_link($absolute); +if (is_link($absolute)) +{ + $debug['link_target'] = readlink($absolute); +} + +$resolved = realpath($absolute); +$debug['realpath'] = $resolved === false ? null : $resolved; +if ($resolved === false) +{ + $debug['stage'] = 'realpath'; + $debug['error'] = 'realpath() konnte images.path nicht aufloesen.'; + bratonien_tools_webdav_debug_out(200, $debug); +} + +$normalized = str_replace('\\', '/', $resolved); +$debug['normalized_realpath'] = $normalized; + +$match = array(); +if (!preg_match('#/nc-webdav-source/connection-([0-9]+)/root-([0-9]+)/(.*)$#', $normalized, $match)) +{ + $debug['stage'] = 'source-regex'; + $debug['error'] = 'realpath passt nicht zum erwarteten nc-webdav-source-Schema.'; + bratonien_tools_webdav_debug_out(200, $debug); +} + +$connection_id = (int)$match[1]; +$root_fileid = (int)$match[2]; +$relative_path = trim((string)$match[3], '/'); +$debug['connection_id'] = $connection_id; +$debug['root_fileid'] = $root_fileid; +$debug['relative_path'] = $relative_path; + +$table = defined('BRATONIEN_TOOLS_NC_CONNECTIONS_TABLE') + ? BRATONIEN_TOOLS_NC_CONNECTIONS_TABLE + : $GLOBALS['prefixeTable'].'bratonien_tools_nc_connections'; +$debug['connections_table'] = $table; + +$connection_result = pwg_query('SELECT id, enabled, adapter, config_json FROM `'.$table.'` WHERE id='.$connection_id.' LIMIT 1'); +if (!pwg_db_num_rows($connection_result)) +{ + $debug['stage'] = 'connection-row'; + $debug['error'] = 'Erkannte WebDAV-Verbindung existiert nicht in der Connector-Tabelle.'; + bratonien_tools_webdav_debug_out(200, $debug); +} +$connection_row = pwg_db_fetch_assoc($connection_result); +$debug['connection_enabled'] = (int)($connection_row['enabled'] ?? 0); +$debug['connection_adapter'] = (string)($connection_row['adapter'] ?? ''); + +$config = json_decode((string)($connection_row['config_json'] ?? ''), true); +if (!is_array($config)) +{ + $debug['stage'] = 'config-json'; + $debug['error'] = 'config_json ist kein gueltiges JSON-Objekt.'; + bratonien_tools_webdav_debug_out(200, $debug); +} + +$debug['source_mode'] = (string)($config['source_mode'] ?? ''); +$debug['state_dir'] = (string)($config['state_dir'] ?? ''); +$debug['parallel_gallery_root'] = (string)($config['parallel_gallery_root'] ?? ''); + +$roots = isset($config['roots']) && is_array($config['roots']) ? $config['roots'] : array(); +$debug['roots'] = array(); +$root_path = ''; +foreach ($roots as $root) +{ + $entry = array( + 'fileid'=>(int)($root['fileid'] ?? 0), + 'webdav_path'=>(string)($root['webdav_path'] ?? ''), + 'display_name'=>(string)($root['display_name'] ?? ''), + ); + $debug['roots'][] = $entry; + if ($entry['fileid'] === $root_fileid) + { + $root_path = trim($entry['webdav_path'], '/'); + } +} +$debug['matched_root_path'] = $root_path; +if ($debug['source_mode'] !== 'webdav-placeholder') +{ + $debug['stage'] = 'source-mode'; + $debug['error'] = 'source_mode ist nicht webdav-placeholder.'; + bratonien_tools_webdav_debug_out(200, $debug); +} +if ($root_path === '') +{ + $debug['stage'] = 'root-match'; + $debug['error'] = 'root_fileid aus dem Dateipfad kommt in config.roots nicht vor.'; + bratonien_tools_webdav_debug_out(200, $debug); +} + +$mapping_file = rtrim((string)($config['state_dir'] ?? ''), '/').'/webdav-map.json'; +$debug['mapping_file'] = $mapping_file; +$debug['mapping_readable'] = is_readable($mapping_file); +$debug['mapping_has_resolved_key'] = false; +$debug['mapping_has_normalized_key'] = false; +$debug['mapping_entry'] = null; + +if (is_readable($mapping_file)) +{ + $mapping = json_decode((string)file_get_contents($mapping_file), true); + if (is_array($mapping) && isset($mapping['files']) && is_array($mapping['files'])) + { + $debug['mapping_has_resolved_key'] = array_key_exists($resolved, $mapping['files']); + $debug['mapping_has_normalized_key'] = array_key_exists($normalized, $mapping['files']); + $entry = $mapping['files'][$resolved] ?? $mapping['files'][$normalized] ?? null; + if (is_array($entry)) + { + $debug['mapping_entry'] = $entry; + } + } + else + { + $debug['mapping_error'] = 'Mapping-Datei ist ungueltig oder enthaelt kein files-Objekt.'; + } +} + +$debug['runtime_source_info'] = bratonien_tools_webdav_image_source_info($image_id); +$debug['stage'] = $debug['runtime_source_info'] ? 'ok' : 'runtime-source-info-null'; +$debug['ok'] = (bool)$debug['runtime_source_info']; +if (!$debug['ok']) +{ + $debug['error'] = 'Die produktive Zuordnungsfunktion liefert trotz der obigen Zwischenergebnisse null.'; +} + +bratonien_tools_webdav_debug_out(200, $debug);