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)