- Extract the complete import logic (label-scan reading, page find-or-create, slot filling, content-idempotent image attach) from ImportSubmarketWorkbooksCommand into the shared service SubmarketWorkbookImporter; the CLI command and the new controller are thin shells around importFile(), so both entry points cannot drift. CLI regression verified: identical dry-run report for the reference workbook (12 elements, page 443) - New "Sub-Markets" tab in the VITEC Import module (SubmarketImportController + Import/Submarkets.html): upload multiple filled workbooks into the SAME inbox the CLI uses (migrations/submarkets_xlsx_in/), per-file checkboxes, dry-run and apply buttons, result cards with the familiar report and a direct link into the page module; backend dry-run verified against the CLI - Submitted filenames are whitelisted against the actual directory listing (no path traversal); uploads restricted to sanitized .xlsx basenames - Routes submarkets/submarket_upload/submarket_process in Modules.php, Sub-Markets tab link in the sibling module views, ok/danger badge colors in backend-import.css - Docs section 5y (incl. operations note: apply in small batches in the module, mass runs via CLI - image downloads run inside the web request)
114 lines
2.9 KiB
CSS
114 lines
2.9 KiB
CSS
/**
|
|
* VITEC Import module - look & feel aligned with the frontend button
|
|
* palette (Resources/Public/SCSS/_vitec.scss):
|
|
* orange #f47937 (hover #db6324) - primary actions
|
|
* navy #26358c (hover #1e2a70) - secondary actions / structure
|
|
* graphite #313131 - neutral emphasis
|
|
* light #cccccc / #eeeeee - muted
|
|
* Loaded only by the import module (ImportController), scoped to
|
|
* .vitec-administration so other modules stay untouched.
|
|
*/
|
|
|
|
.vitec-administration h2 {
|
|
color: #26358c;
|
|
}
|
|
|
|
/* --- buttons ------------------------------------------------------- */
|
|
|
|
.vitec-administration .btn-primary {
|
|
background-color: #f47937;
|
|
border-color: #f47937;
|
|
color: #ffffff;
|
|
}
|
|
.vitec-administration .btn-primary:hover,
|
|
.vitec-administration .btn-primary:focus,
|
|
.vitec-administration .btn-primary:active {
|
|
background-color: #db6324;
|
|
border-color: #db6324;
|
|
color: #ffffff;
|
|
}
|
|
|
|
.vitec-administration .btn-default {
|
|
background-color: #ffffff;
|
|
border: 1px solid #26358c;
|
|
color: #26358c;
|
|
}
|
|
.vitec-administration .btn-default:hover,
|
|
.vitec-administration .btn-default:focus {
|
|
background-color: #26358c;
|
|
border-color: #26358c;
|
|
color: #ffffff;
|
|
}
|
|
|
|
/* --- model tabs ---------------------------------------------------- */
|
|
|
|
.vitec-administration .nav-tabs .nav-link {
|
|
color: #26358c;
|
|
}
|
|
.vitec-administration .nav-tabs .nav-link.active {
|
|
color: #0d0d0d;
|
|
font-weight: 600;
|
|
border-bottom: 3px solid #f47937;
|
|
}
|
|
|
|
/* --- cards & tables ------------------------------------------------ */
|
|
|
|
.vitec-administration .card {
|
|
border: 1px solid #d8dbe6;
|
|
}
|
|
.vitec-administration .card-header {
|
|
background-color: #26358c;
|
|
color: #ffffff;
|
|
}
|
|
.vitec-administration thead th {
|
|
border-bottom: 2px solid #26358c;
|
|
}
|
|
|
|
/* --- status badges -------------------------------------------------- */
|
|
|
|
.vitec-administration .vitec-badge {
|
|
display: inline-block;
|
|
padding: 2px 9px;
|
|
border-radius: 3px;
|
|
font-size: 11px;
|
|
font-weight: 600;
|
|
line-height: 1.6;
|
|
}
|
|
.vitec-administration .vitec-badge-new {
|
|
background-color: #f47937;
|
|
color: #ffffff;
|
|
}
|
|
.vitec-administration .vitec-badge-update {
|
|
background-color: #26358c;
|
|
color: #ffffff;
|
|
}
|
|
.vitec-administration .vitec-badge-unchanged {
|
|
background-color: #cccccc;
|
|
color: #0d0d0d;
|
|
}
|
|
.vitec-administration .vitec-badge-dbonly {
|
|
background-color: #eeeeee;
|
|
color: #313131;
|
|
border: 1px solid #cccccc;
|
|
}
|
|
.vitec-administration .vitec-badge-info {
|
|
background-color: #313131;
|
|
color: #ffffff;
|
|
}
|
|
.vitec-administration .vitec-badge-ok {
|
|
background-color: #2f9e44;
|
|
color: #ffffff;
|
|
}
|
|
.vitec-administration .vitec-badge-danger {
|
|
background-color: #c0392b;
|
|
color: #ffffff;
|
|
}
|
|
|
|
/* --- form focus (frontend uses a 3px orange outline) ---------------- */
|
|
|
|
.vitec-administration .form-control:focus,
|
|
.vitec-administration .form-select:focus {
|
|
border-color: #f47937;
|
|
box-shadow: 0 0 0 3px rgba(244, 121, 55, 0.35);
|
|
}
|