From b3fa3aef20a5bdf4807dcdfaa42accf652ec729a Mon Sep 17 00:00:00 2001 From: DJP Date: Sun, 9 Nov 2025 14:44:18 -0500 Subject: [PATCH] Fix HTTP 500 error - use existing helper functions instead of createAssetManager MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixed: - Replaced non-existent createAssetManager() with existing helper functions - Added findMasterAssetsFolder() helper function (mirrors findUploadFolder logic) - Added extractStatusFromAsset() helper to extract status from asset metadata - Uses existing getAssetsFromFolder() function to retrieve assets Now properly: - Finds Master Assets folder using findMasterAssetsFolder() - Finds Final Assets folder using findUploadFolder() - Gets assets using getAssetsFromFolder() - Extracts status from asset metadata structure No more 500 errors - folder viewing should work now! 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- workflow_v3.php | 112 +++++++++++++++++++++++++++++++++++++----------- 1 file changed, 87 insertions(+), 25 deletions(-) diff --git a/workflow_v3.php b/workflow_v3.php index a4bf5ef..41f3aa9 100644 --- a/workflow_v3.php +++ b/workflow_v3.php @@ -1156,32 +1156,34 @@ if ($_POST && $testRunner) { $folderName = ($folderType === 'master') ? '01. Master Assets' : '01. Final Assets'; $results['debug_folder_view_type'] = $folderName; - // Find folder within campaign - $assetManager = createAssetManager($testRunner); - - // First get campaign folders - $searchResult = $assetManager->searchForFolder($folderName); - - if ($searchResult['success'] && count($searchResult['folders']) > 0) { - // Find folders that are children of this campaign - foreach ($searchResult['folders'] as $folder) { - // Check if this folder belongs to our campaign by searching its children - $folderId = $folder['id']; - $contentsResult = $assetManager->getFolderContents($folderId); - - if ($contentsResult['success']) { - $results['debug_folder_contents'] = [ - 'folder_name' => $folderName, - 'folder_type' => ucfirst($folderType) . ' Assets', - 'folder_id' => $folderId, - 'items' => $contentsResult['items'] - ]; - $success = "Found " . count($contentsResult['items']) . " items in {$folderName}"; - break; - } - } + // Use existing helper function to find folder + if ($folderType === 'master') { + $folderId = findMasterAssetsFolder($testRunner, $campaignId); } else { - $results['debug_folder_error'] = "Folder '{$folderName}' not found"; + $folderId = findUploadFolder($testRunner, $campaignId, $configV3); + } + + if ($folderId) { + // Get assets from folder using existing helper + $assets = getAssetsFromFolder($testRunner, $folderId); + + $results['debug_folder_contents'] = [ + 'folder_name' => $folderName, + 'folder_type' => ucfirst($folderType) . ' Assets', + 'folder_id' => $folderId, + 'items' => array_map(function($asset) { + return [ + 'type' => 'asset', + 'name' => $asset['name'] ?? 'Unknown', + 'id' => $asset['asset_id'] ?? '', + 'size' => $asset['file_size'] ?? 0, + 'status' => extractStatusFromAsset($asset) + ]; + }, $assets) + ]; + $success = "Found " . count($assets) . " assets in {$folderName} for campaign"; + } else { + $results['debug_folder_error'] = "Folder '{$folderName}' not found in campaign"; $error = $results['debug_folder_error']; } } else { @@ -1256,6 +1258,66 @@ function extractStatus($folder) return null; } +function extractStatusFromAsset($asset) +{ + if (isset($asset['metadata']) && isset($asset['metadata']['metadata_element_list'])) { + foreach ($asset['metadata']['metadata_element_list'] as $category) { + if (isset($category['metadata_element_list'])) { + foreach ($category['metadata_element_list'] as $field) { + if ($field['id'] === 'CONTENT.SCALING.STATUS') { + return $field['value']['value']['value'] ?? null; + } + } + } + } + } + return null; +} + +function findMasterAssetsFolder($testRunner, $campaignId) +{ + // Similar to findUploadFolder but looks for Master Assets instead + $requests = $testRunner->getAvailableRequests(); + + foreach ($requests as $index => $request) { + $name = strtolower($request['name']); + if (strpos($name, 'retrieve master asset folder') !== false || + strpos($name, 'master asset folder and final') !== false) { + + $modifiedRequest = $request; + $url = is_array($request['request']['url']) ? $request['request']['url']['raw'] : $request['request']['url']; + $url = preg_replace('/folders\/[a-f0-9]+\//', "folders/{$campaignId}/", $url); + + $configV3 = new ConfigV3(); + $url = str_replace('{{baseUrl}}', $configV3->getBaseUrl(), $url); + + if (is_array($modifiedRequest['request']['url'])) { + $modifiedRequest['request']['url']['raw'] = $url; + } else { + $modifiedRequest['request']['url'] = $url; + } + + $result = $testRunner->runSingleTest($modifiedRequest, $index); + + if ($result['status'] === 'PASS') { + $data = json_decode($result['response']['body'], true); + $folders = $data['folder_children']['asset_list'] ?? []; + + foreach ($folders as $folder) { + $folderName = extractFolderName($folder); + // Look for Master Assets folder + if (strpos($folderName, 'Master') !== false) { + return $folder['asset_id']; + } + } + } + break; + } + } + + return null; +} + function loadCampaignsByStatus($testRunner, $status) { // Search for ALL Local Adaptation campaigns (without status filter in API)