ferrero-opentext/fetch_lookupdomains.php
DJP 3a95076726 Add Upload from Box workflow - Phase 1 Complete
Core Components Implemented:
- FilenameParser: V2 naming convention parser with strict validation
- MetadataMerger: Merge master + filename metadata (filename priority)
- BoxFileRetriever: List/download files from Box folders
- DAM Lookup Domains: Complete documentation (182 domains)

Features:
- Parse V2 filenames: OMG_JOB_BRAND_COUNTRY_LANG_TITLE_TYPE_VER_SEC_RATIO_TRACKING
- Strip upload components (Job Number & Tracking ID)
- Extract tracking IDs and load master metadata from PostgreSQL
- Merge metadata with filename always winning
- Identify editable vs locked fields
- Build proper asset representation for DAM upload

Files Added:
- src/FilenameParser.php (tested - 8/8 passing)
- src/MetadataMerger.php
- src/BoxFileRetriever.php
- ECOMMERCE_ALLOWED_FIELDS.md (182 lookup domains)
- DAM_LOOKUPDOMAINS_RAW.json (15MB raw data)
- test_filename_parser.php
- fetch_lookupdomains.php
- UPLOAD_FROM_BOX_STATUS.md (complete documentation)

Next Phase: UI integration - Add "Upload from Box" tab to workflow_v3.php

🤖 Generated with Claude Code
2025-10-29 15:47:30 -04:00

165 lines
5 KiB
PHP

<?php
/**
* Fetch Lookupdomains Data for ECOMMERCE Model
* This script retrieves all allowed fields for the ECOMMERCE metadata model
*/
// Increase memory limit for large responses
ini_set('memory_limit', '512M');
require_once 'src/TestRunner.php';
require_once 'config_v3.php';
echo "=== Fetching DAM Lookup Domains ===\n\n";
// Setup configuration
$config = new ConfigV3();
$baseUrl = $config->getBaseUrl();
$collectionPath = $config->get('postman_collection');
echo "Base URL: $baseUrl\n";
echo "Collection: $collectionPath\n\n";
// Create TestRunner to handle authentication
$testRunner = new TestRunner($collectionPath, [
'baseUrl' => $baseUrl,
'timeout' => 60
]);
// Manual API call to lookupdomains endpoint
echo "Step 1: Getting OAuth token...\n";
// Access the OAuth handler through TestRunner
$reflection = new ReflectionClass($testRunner);
$property = $reflection->getProperty('oauth2Handler');
$property->setAccessible(true);
$oauth2Handler = $property->getValue($testRunner);
if (!$oauth2Handler) {
die("ERROR: Could not get OAuth handler\n");
}
try {
$accessToken = $oauth2Handler->getAccessToken();
echo "✓ Token obtained\n\n";
} catch (Exception $e) {
die("ERROR: Failed to get access token: " . $e->getMessage() . "\n");
}
// First, list all available lookup domains
echo "Step 2: Listing all available lookup domains...\n";
$url = $baseUrl . '/v6/lookupdomains';
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . $accessToken,
'Content-Type: application/json'
],
CURLOPT_TIMEOUT => 60
]);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$error = curl_error($ch);
curl_close($ch);
if ($error) {
die("ERROR: cURL error: $error\n");
}
if ($httpCode !== 200) {
die("ERROR: HTTP $httpCode - Response: " . substr($response, 0, 500) . "\n");
}
echo "✓ Response received (HTTP $httpCode)\n\n";
// Save raw response first (without parsing to save memory)
$jsonFile = 'DAM_LOOKUPDOMAINS_RAW.json';
file_put_contents($jsonFile, $response);
echo "✓ Raw JSON saved to: $jsonFile (" . strlen($response) . " bytes)\n\n";
// Parse response
$data = json_decode($response, true);
if (!$data) {
die("ERROR: Failed to parse JSON response\n");
}
// Generate Markdown documentation
echo "Step 3: Generating Markdown documentation...\n";
$md = "# DAM Lookup Domains - All Available Fields\n\n";
$md .= "**Generated:** " . date('Y-m-d H:i:s') . "\n";
$md .= "**Endpoint:** `GET /v6/lookupdomains`\n";
$md .= "**Base URL:** $baseUrl\n\n";
$md .= "---\n\n";
// Check structure and create summary only
if (isset($data['lookup_domains_resource']['lookup_domains'])) {
$lookups = $data['lookup_domains_resource']['lookup_domains'];
$md .= "## Overview\n\n";
$md .= "Total lookup domains: " . count($lookups) . "\n\n";
$md .= "---\n\n";
$md .= "## Lookup Domains Summary\n\n";
$md .= "| Domain ID | Datatype | Values Count | Example Value |\n";
$md .= "|-----------|----------|--------------|---------------|\n";
foreach ($lookups as $lookup) {
$domainId = $lookup['domainId'] ?? 'N/A';
$datatype = $lookup['datatype'] ?? 'N/A';
$domainValues = $lookup['domainValues'] ?? [];
$valueCount = count($domainValues);
// Get first value as example
$exampleValue = 'N/A';
if ($valueCount > 0 && isset($domainValues[0]['field_value']['value'])) {
$exampleValue = $domainValues[0]['field_value']['value'];
if (strlen($exampleValue) > 30) {
$exampleValue = substr($exampleValue, 0, 27) . '...';
}
}
$md .= "| `$domainId` | $datatype | $valueCount | `$exampleValue` |\n";
}
$md .= "\n";
$md .= "> **Note:** Full details and all allowed values are available in `DAM_LOOKUPDOMAINS_RAW.json`\n\n";
$md .= "---\n\n";
} else {
$md .= "## No lookup domains found\n\n";
$md .= "See `DAM_LOOKUPDOMAINS_RAW.json` for raw response.\n\n";
}
$md .= "---\n\n";
$md .= "## Usage in Asset Upload\n\n";
$md .= "These lookup domains define the allowed values for metadata fields in the ECOMMERCE model.\n\n";
$md .= "When uploading an asset, you must use field IDs and values from these domains.\n\n";
$md .= "### Example Usage\n\n";
$md .= "```json\n";
$md .= "{\n";
$md .= ' "id": "FERRERO.FIELD.MKTG.ASSET TYPE",\n';
$md .= ' "value": {\n';
$md .= ' "domain_value": true,\n';
$md .= ' "value": {\n';
$md .= ' "type": "string",\n';
$md .= ' "value": "heroimage" // Must be from allowed values\n';
$md .= " }\n";
$md .= " }\n";
$md .= "}\n";
$md .= "```\n\n";
$mdFile = 'ECOMMERCE_ALLOWED_FIELDS.md';
file_put_contents($mdFile, $md);
echo "✓ Markdown documentation saved to: $mdFile\n\n";
// Summary
echo "=== SUMMARY ===\n";
echo "✓ Successfully fetched ECOMMERCE lookupdomains\n";
echo "✓ Files created:\n";
echo " - $jsonFile (raw JSON data)\n";
echo " - $mdFile (formatted documentation)\n";
echo "\nDone!\n";