From b273fdafee6efe03dd94224e8affdfa01068fecc Mon Sep 17 00:00:00 2001 From: DJP Date: Fri, 31 Oct 2025 11:29:06 -0400 Subject: [PATCH] Fix CREATIVEX extraction - detect at category level not field level MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Issue: CREATIVEX fields still not appearing Root Cause: FERRERO.FIELD.CREATIX is a CATEGORY, not a field within a category Fix: - Check category ID/name for 'CREATIX' or 'CreativeX' - When CREATIVEX category found, extract ALL items within it - Handle both tables and direct fields in CREATIVEX category - Show fields even if empty (displays structure) Structure: Category: FERRERO.FIELD.CREATIX (name: CreativeX) ├─ Table: FERRERO.TABULAR.FIELD.CREATIVEX (Confidence) │ └─ Field: FERRERO.TAB.FIELD.CREATIVEX (Platform > Rating %) └─ Field: FERRERO.FIELD.CREATIVEX LINK (CreativeX Hyperlink) Test Results: ✅ Extracted 2 CREATIVEX fields ✅ Platform > Rating (%): (empty) ✅ CreativeX Hyperlink: (empty) Now purple CREATIVEX section will appear in metadata viewer! 🤖 Generated with Claude Code --- .../__pycache__/notifier.cpython-314.pyc | Bin 11610 -> 13031 bytes src/MetadataExtractor.php | 97 +++++++++++++++--- test_creativex.php | 35 +++++++ 3 files changed, 118 insertions(+), 14 deletions(-) create mode 100644 test_creativex.php diff --git a/Python-Version/scripts/shared/__pycache__/notifier.cpython-314.pyc b/Python-Version/scripts/shared/__pycache__/notifier.cpython-314.pyc index 62701517ee1c3ff6243773bb75471cf5a4915bce..4f694fb845ef3893804d66057fac2796bcb86c29 100644 GIT binary patch delta 1226 zcmZ`(O-~b16s3g%B5ehvP_gvVXlw;3v?_?>#6m?e6fuY-ZkpGbM>{$*Z=4Sy5Zq~W zp%LE7#JvkwhCkq6aG?uLjA7%J#D(tk%}1dnFpJ6Ly?f6+=iYPY+k;;?G#CoDHL&O3 zhbHOog^!``Sfkb6N`Ib+(;KnAFeG!Co#$J*Y>G=)GCcj8s!X z)go>5WvrtYlFK?#V3Mq+Cb+a=>O?K`TuG;!@d$krZapOs5%cTou*?8dq+rV*v+LpD!T8#5&~c8ZeXJR}D<1;#?M80@T-^9$nOAf zOkW4Nt@c1zmiV1_&)AV$fokzs7bLS6$1i0rkBwwUN5xB@|8 zP7slaz+q>9m5_lU$y!j~*gC9n4{OqrWD}ewfsQpD8(1}wDG?P`B(nmUF(}-hXO_XT zXw;G!@&Fb!R+9BJj}1YWG$+$xQgugdQtCj`EK9^2vSA3=lP6T<>-Q)dldJ~LWA+%rrKhoUJU0g zSsu&S?tv}9MP^I5zk<~f&WD@n+we8|iLE%_*?hLfd9H;uoe0=4Y^MuE(QMFRwweQX zvBJ+06HmYtQZyu$RWMjDEQ8HRmZ5~f@}|I=lgk281q_JYICC`s>2`#xXP8SfG=>`8 zejlIk`vkf(V4ge^>)j2U8|>V*{FDA@=*7(Lt)}gV38TgLb^AwZ)8AtH16TjZ0s3U< SOL(o(7yaE}zx96h^ZE}%451bP delta 274 zcmaE!dMk=gn~#@^0SE+FvSem!Y~&M_WlF4{d|yCeva780MogUW!6#K~8>R3XoHhuTYYaI(ehA1f$+$MllT~ zzxw*WRvvAk52Z}$jFNmE vo*#mkH-A?zW@p^JIa_}s6MG~RtM&IXmdVUUSNY?a86`h6fXE^_U?2bh2+LNV diff --git a/src/MetadataExtractor.php b/src/MetadataExtractor.php index 2162a07..cd20d6e 100644 --- a/src/MetadataExtractor.php +++ b/src/MetadataExtractor.php @@ -96,17 +96,85 @@ class MetadataExtractor $metadata['creativex_fields'] = []; if (isset($asset['metadata']['metadata_element_list'])) { foreach ($asset['metadata']['metadata_element_list'] as $category) { + $categoryId = $category['id'] ?? ''; + $categoryName = $category['name'] ?? ''; + + // Check if THIS CATEGORY is the CREATIVEX category + if (stripos($categoryId, 'CREATIX') !== false || + stripos($categoryId, 'CREATIVEX') !== false || + stripos($categoryName, 'CreativeX') !== false) { + + // This whole category is CREATIVEX - extract all its fields + if (isset($category['metadata_element_list'])) { + foreach ($category['metadata_element_list'] as $creativexItem) { + $itemId = $creativexItem['id'] ?? ''; + $itemName = $creativexItem['name'] ?? $itemId; + + // Check if it's a table or direct field + if (isset($creativexItem['metadata_element_list'])) { + // It's a table with fields + foreach ($creativexItem['metadata_element_list'] as $tableField) { + $tableFieldId = $tableField['id'] ?? ''; + $tableFieldName = $tableField['name'] ?? $tableFieldId; + + // Extract value + $fieldValue = '(empty)'; + if (isset($tableField['values']) && !empty($tableField['values'])) { + $tabularValues = []; + foreach ($tableField['values'] as $value) { + if (isset($value['value']['value'])) { + $tabularValues[] = $value['value']['value']; + } elseif (isset($value['value']['display_value'])) { + $tabularValues[] = $value['value']['display_value']; + } + } + if (!empty($tabularValues)) { + $fieldValue = $tabularValues; + } + } + + $metadata['creativex_fields'][$tableFieldName] = [ + 'id' => $tableFieldId, + 'value' => $fieldValue + ]; + } + } else { + // Direct field + $fieldValue = null; + if (isset($creativexItem['value']['value']['value'])) { + $fieldValue = $creativexItem['value']['value']['value']; + } elseif (isset($creativexItem['value']['value']['field_value']['value'])) { + $fieldValue = $creativexItem['value']['value']['field_value']['value']; + } + + $metadata['creativex_fields'][$itemName] = [ + 'id' => $itemId, + 'value' => $fieldValue ?? '(empty)' + ]; + } + } + } + + // Found CREATIVEX category, no need to check other categories + continue; + } + + // Also check individual fields within other categories if (isset($category['metadata_element_list'])) { foreach ($category['metadata_element_list'] as $field) { $fieldId = $field['id'] ?? ''; $fieldName = $field['name'] ?? $fieldId; - // Check if this is a CREATIVEX/CREATIX field - if (stripos($fieldId, 'CREATIVEX') !== false || stripos($fieldId, 'CREATIX') !== false) { + // Check if this individual field is a CREATIVEX field + if (stripos($fieldId, 'CREATIVEX') !== false || + stripos($fieldId, 'CREATIX') !== false) { // This might be a parent field with nested tables if (isset($field['metadata_element_list'])) { // It's a parent CREATIX field with nested tables foreach ($field['metadata_element_list'] as $nestedTable) { + $nestedTableId = $nestedTable['id'] ?? ''; + $nestedTableName = $nestedTable['name'] ?? ''; + if (isset($nestedTable['metadata_element_list'])) { // Nested table fields foreach ($nestedTable['metadata_element_list'] as $nestedField) { @@ -126,17 +194,19 @@ class MetadataExtractor } if (!empty($tabularValues)) { $fieldValue = $tabularValues; + } else { + // Values array exists but is empty + $fieldValue = '(empty)'; } } elseif (isset($nestedField['value']['value']['value'])) { $fieldValue = $nestedField['value']['value']['value']; } - if ($fieldValue !== null) { - $metadata['creativex_fields'][$nestedFieldName] = [ - 'id' => $nestedFieldId, - 'value' => $fieldValue - ]; - } + // Add ALL CREATIVEX fields, even if empty (shows what fields exist) + $metadata['creativex_fields'][$nestedFieldName] = [ + 'id' => $nestedFieldId, + 'value' => $fieldValue ?? '(not set)' + ]; } } } @@ -152,12 +222,11 @@ class MetadataExtractor $fieldValue = $field['value']['value']['field_value']['value']; } - if ($fieldValue !== null) { - $metadata['creativex_fields'][$fieldName] = [ - 'id' => $fieldId, - 'value' => $fieldValue - ]; - } + // Add field even if value is null/empty (shows structure exists) + $metadata['creativex_fields'][$fieldName] = [ + 'id' => $fieldId, + 'value' => $fieldValue ?? '(empty)' + ]; } } } diff --git a/test_creativex.php b/test_creativex.php new file mode 100644 index 0000000..22eff2a --- /dev/null +++ b/test_creativex.php @@ -0,0 +1,35 @@ + $category) { + $catId = $category['id'] ?? 'no-id'; + $catName = $category['name'] ?? 'no-name'; + + if (stripos($catId, 'CREATIX') !== false || stripos($catId, 'CREATIVEX') !== false || + stripos($catName, 'CreativeX') !== false) { + echo "Found Category #{$catIndex}:" . PHP_EOL; + echo " ID: {$catId}" . PHP_EOL; + echo " Name: {$catName}" . PHP_EOL; + echo " Structure:" . PHP_EOL; + echo json_encode($category, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . PHP_EOL . PHP_EOL; + } + } +} + +// Test extraction +$metadata = MetadataExtractor::extractAllMetadata($asset); +echo "Extracted CREATIVEX fields: " . count($metadata['creativex_fields']) . PHP_EOL; + +if (!empty($metadata['creativex_fields'])) { + foreach ($metadata['creativex_fields'] as $name => $data) { + $val = is_array($data['value']) ? implode(', ', $data['value']) : $data['value']; + echo " - {$name}: {$val}" . PHP_EOL; + } +}