vitec:generate-submarket-workbooks builds one protected customer workbook
per sub-market (25, grouped by the 9 main markets): VITEC-styled Read me, a Page-layout sheet embedding the Figma design with section markers, DB-live dropdowns, soft character limits, a hidden Meta sheet and named input cells. Names must NOT start with a cell-reference token - Excel silently strips s1_-style names as repairs. vitec:import-submarket-workbooks (dry-run default, idempotent) finds or creates the page below its main market (hidden, layout 21), fills the six colPos slots updating in place and never deleting, links detail_page on the market record, downloads asset URLs into fileadmin/submarket_import/ for editorial review and writes the flexforms as DataHandler arrays. Reading is three-layered after a bruising day of real-world Excel: named ranges first, then a label scan over the locked column A with section tracking - a customer save stripped ALL defined names and shifted rows, so fixed addresses are not a contract. Learned and fixed along the way: DuplicationBehavior moved to Resource\Enum in v14; sys_file_reference rows via DataHandler need pid/tablenames/uid_foreign or are dropped silently; handing DataHandler a fresh NEW reference per run STACKS live references on re-import (caught by a double-run test), so attachments are now content-idempotent - the existing live reference is reused or retargeted and surplus duplicates are deleted via cmdmap; RequestFactory replaces GeneralUtility::getUrl so download failures carry their reason - which surfaced that the dev basic auth blocked the server itself (server IP + loopback now allowlisted, which a future SSR needs anyway) and that the core resource-consistency check rightly rejects HTML masquerading as PNG. Verified end to end on Broadcast & Media from a clean slate, twice in a row: 12 elements in colPos 110-160, layout-21 payload, both images attached exactly once with publicUrl in the JSON; second run reports nothing but unchanged.
This commit is contained in:
1 parent
90ae6803a4
commit
8b175211ea
12 files changed
+1214
-6
No files matched your search
@@ -0,0 +1,50 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* Read-only: did the sub-market import attach its files?
|
||||
* Lists sys_file rows under submarket_import/ and every sys_file_reference
|
||||
* on page 443's content elements, plus the elements' file-field counters.
|
||||
*
|
||||
* Usage: php migrations/check_submarket_refs.php
|
||||
*/
|
||||
|
||||
$root = null;
|
||||
$dir = __DIR__;
|
||||
for ($i = 0; $i < 5; $i++) {
|
||||
if (is_file($dir . '/config/system/settings.php')) { $root = $dir; break; }
|
||||
$dir = dirname($dir);
|
||||
}
|
||||
if ($root === null) { exit("Could not locate project root above " . __DIR__ . "\n"); }
|
||||
|
||||
$settings = require $root . '/config/system/settings.php';
|
||||
$db = $settings['DB']['Connections']['Default'];
|
||||
$pdo = new PDO(
|
||||
sprintf('mysql:host=%s;port=%s;dbname=%s;charset=utf8mb4', $db['host'] ?? 'localhost', $db['port'] ?? 3306, $db['dbname'] ?? ''),
|
||||
$db['user'] ?? '', $db['password'] ?? '',
|
||||
[PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC]
|
||||
);
|
||||
|
||||
echo "=== sys_file unter submarket_import/ ===\n";
|
||||
foreach ($pdo->query("SELECT uid, identifier, name FROM sys_file WHERE identifier LIKE '/submarket_import/%'") as $row) {
|
||||
echo " #{$row['uid']} {$row['identifier']}\n";
|
||||
}
|
||||
|
||||
echo "\n=== tt_content auf Seite 443 (Slots 110-160): Datei-Zaehler ===\n";
|
||||
foreach ($pdo->query("SELECT uid, CType, colPos, vitec_bgimage, vitec_image, vitec_video_cover FROM tt_content WHERE deleted = 0 AND pid = 443 AND colPos >= 110 ORDER BY colPos") as $row) {
|
||||
echo " #{$row['uid']} {$row['CType']} (colPos {$row['colPos']}): bgimage={$row['vitec_bgimage']} image={$row['vitec_image']} video_cover={$row['vitec_video_cover']}\n";
|
||||
}
|
||||
|
||||
echo "\n=== sys_file_reference auf diese Elemente ===\n";
|
||||
$stmt = $pdo->query("SELECT r.uid, r.uid_local, r.uid_foreign, r.fieldname, r.deleted, r.hidden, f.identifier
|
||||
FROM sys_file_reference r LEFT JOIN sys_file f ON f.uid = r.uid_local
|
||||
WHERE r.tablenames = 'tt_content' AND r.uid_foreign IN (SELECT uid FROM tt_content WHERE pid = 443 AND colPos >= 110)");
|
||||
$found = 0;
|
||||
foreach ($stmt as $row) {
|
||||
$found++;
|
||||
echo " ref #{$row['uid']} -> CE #{$row['uid_foreign']} field {$row['fieldname']} file {$row['identifier']} deleted={$row['deleted']} hidden={$row['hidden']}\n";
|
||||
}
|
||||
if ($found === 0) {
|
||||
echo " KEINE Referenzen gefunden.\n";
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Reference in new issue
Block a user