add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Shared details titlebar with optional back link, menu dropdown and action buttons.
|
|
|
|
|
*
|
|
|
|
|
* @var array $titlebar
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
use MintyPHP\Session;
|
|
|
|
|
|
|
|
|
|
$titlebar = is_array($titlebar ?? null) ? $titlebar : [];
|
|
|
|
|
$title = (string) ($titlebar['title'] ?? '');
|
|
|
|
|
$backHref = (string) ($titlebar['backHref'] ?? '');
|
2026-03-11 23:32:11 +01:00
|
|
|
$backReturn = requestResolveReturnTarget();
|
|
|
|
|
if ($backReturn !== '') {
|
|
|
|
|
$backHref = $backReturn;
|
|
|
|
|
}
|
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
|
|
|
$backTitle = (string) ($titlebar['backTitle'] ?? t('Cancel'));
|
2026-03-04 15:56:58 +01:00
|
|
|
$unsavedMessage = (string) ($titlebar['unsavedMessage'] ?? t('You have unsaved changes. Leave without saving?'));
|
|
|
|
|
$unsavedIndicatorLabel = (string) ($titlebar['unsavedIndicatorLabel'] ?? t('Unsaved changes'));
|
|
|
|
|
$unsavedIndicatorLabelOne = (string) ($titlebar['unsavedIndicatorLabelOne'] ?? t('Unsaved change (%d field)'));
|
|
|
|
|
$unsavedIndicatorLabelMany = (string) ($titlebar['unsavedIndicatorLabelMany'] ?? t('Unsaved changes (%d fields)'));
|
|
|
|
|
$actionPolicyEnabled = !array_key_exists('actionPolicy', $titlebar) ? true : !empty($titlebar['actionPolicy']);
|
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
|
|
|
$actions = is_array($titlebar['actions'] ?? null) ? $titlebar['actions'] : [];
|
|
|
|
|
$menuItems = is_array($titlebar['menuItems'] ?? null) ? $titlebar['menuItems'] : [];
|
2026-03-12 16:47:53 +01:00
|
|
|
$appendCssClass = static function (string $baseClass, string $appendClass): string {
|
|
|
|
|
$combined = trim($baseClass . ' ' . $appendClass);
|
|
|
|
|
return preg_replace('/\s+/', ' ', $combined) ?? $combined;
|
|
|
|
|
};
|
|
|
|
|
$resolveToneClass = static function (string $tone, string $detailActionKind, string $name, string $value): string {
|
|
|
|
|
$normalizedTone = strtolower(trim($tone));
|
|
|
|
|
if ($normalizedTone === 'success') {
|
|
|
|
|
return 'app-action-success';
|
|
|
|
|
}
|
|
|
|
|
if ($normalizedTone === 'danger') {
|
|
|
|
|
return 'app-action-danger';
|
|
|
|
|
}
|
|
|
|
|
if ($normalizedTone === 'neutral') {
|
|
|
|
|
return '';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$normalizedActionKind = strtolower(trim($detailActionKind));
|
|
|
|
|
if (in_array($normalizedActionKind, ['delete', 'danger', 'purge', 'revoke'], true)) {
|
|
|
|
|
return 'app-action-danger';
|
|
|
|
|
}
|
2026-03-22 16:52:23 +01:00
|
|
|
if (in_array($normalizedActionKind, ['save', 'save-close', 'create', 'create-close'], true)) {
|
|
|
|
|
return 'app-action-success';
|
|
|
|
|
}
|
2026-03-12 16:47:53 +01:00
|
|
|
|
|
|
|
|
$normalizedName = strtolower(trim($name));
|
|
|
|
|
$normalizedValue = strtolower(trim($value));
|
|
|
|
|
if (
|
|
|
|
|
$normalizedName === 'action'
|
2026-03-22 16:52:23 +01:00
|
|
|
&& in_array($normalizedValue, ['create', 'create_close', 'save', 'save_close'], true)
|
2026-03-12 16:47:53 +01:00
|
|
|
) {
|
|
|
|
|
return 'app-action-success';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return '';
|
|
|
|
|
};
|
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
|
|
|
|
|
|
|
|
?>
|
2026-03-04 15:56:58 +01:00
|
|
|
<div
|
|
|
|
|
class="app-details-titlebar"
|
|
|
|
|
data-detail-unsaved-message="<?php e($unsavedMessage); ?>"
|
|
|
|
|
data-detail-unsaved-indicator-label="<?php e($unsavedIndicatorLabel); ?>"
|
|
|
|
|
data-detail-unsaved-indicator-label-one="<?php e($unsavedIndicatorLabelOne); ?>"
|
|
|
|
|
data-detail-unsaved-indicator-label-many="<?php e($unsavedIndicatorLabelMany); ?>"
|
|
|
|
|
<?php if ($actionPolicyEnabled): ?>data-detail-action-policy="1"<?php endif; ?>
|
|
|
|
|
>
|
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
|
|
|
<h1>
|
|
|
|
|
<?php if ($backHref !== ''): ?>
|
2026-03-22 22:38:37 +01:00
|
|
|
<a href="<?php e($backHref); ?>" title="<?php e($backTitle); ?>" class="app-icon-button"><i class="bi bi-arrow-left"></i></a>
|
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
|
|
|
<?php endif; ?>
|
|
|
|
|
<?php e($title); ?>
|
|
|
|
|
</h1>
|
|
|
|
|
<div class="app-details-titlebar-actions">
|
|
|
|
|
<?php if ($menuItems): ?>
|
|
|
|
|
<details class="dropdown">
|
|
|
|
|
<summary role="button" class="outline secondary"><i class="bi bi-three-dots"></i></summary>
|
|
|
|
|
<ul dir="rtl">
|
|
|
|
|
<?php foreach ($menuItems as $menuItem): ?>
|
|
|
|
|
<?php
|
|
|
|
|
$item = is_array($menuItem) ? $menuItem : [];
|
|
|
|
|
$itemType = (string) ($item['type'] ?? 'link');
|
|
|
|
|
$itemLabel = (string) ($item['label'] ?? '');
|
|
|
|
|
if ($itemLabel === '') {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
?>
|
|
|
|
|
<li>
|
|
|
|
|
<?php if ($itemType === 'form'): ?>
|
|
|
|
|
<?php
|
|
|
|
|
$itemMethod = strtoupper((string) ($item['method'] ?? 'POST'));
|
|
|
|
|
$itemAction = (string) ($item['action'] ?? '');
|
|
|
|
|
$itemConfirm = (string) ($item['confirm'] ?? '');
|
2026-03-06 00:44:52 +01:00
|
|
|
$itemConfirmTitle = (string) ($item['confirmTitle'] ?? '');
|
|
|
|
|
$itemConfirmConfirmLabel = (string) ($item['confirmConfirmLabel'] ?? '');
|
|
|
|
|
$itemConfirmCancelLabel = (string) ($item['confirmCancelLabel'] ?? '');
|
|
|
|
|
$itemConfirmVariant = strtolower(trim((string) ($item['confirmVariant'] ?? '')));
|
|
|
|
|
$itemConfirmFocus = strtolower(trim((string) ($item['confirmFocus'] ?? '')));
|
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
|
|
|
$itemButtonClass = (string) ($item['class'] ?? 'transparent');
|
|
|
|
|
$itemNeedsCsrf = !array_key_exists('csrf', $item) ? true : !empty($item['csrf']);
|
|
|
|
|
$itemTarget = (string) ($item['target'] ?? '');
|
2026-03-04 15:56:58 +01:00
|
|
|
$itemDetailActionKind = strtolower(trim((string) ($item['detailActionKind'] ?? '')));
|
|
|
|
|
$itemDetailSubmitLock = strtolower(trim((string) ($item['detailSubmitLock'] ?? '')));
|
2026-03-12 16:47:53 +01:00
|
|
|
$itemTone = (string) ($item['tone'] ?? '');
|
|
|
|
|
$itemName = (string) ($item['name'] ?? '');
|
|
|
|
|
$itemValue = (string) ($item['value'] ?? '');
|
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
|
|
|
$itemFields = is_array($item['fields'] ?? null) ? $item['fields'] : [];
|
2026-03-12 16:47:53 +01:00
|
|
|
$itemButtonClass = $appendCssClass(
|
|
|
|
|
$itemButtonClass,
|
|
|
|
|
$resolveToneClass($itemTone, $itemDetailActionKind, $itemName, $itemValue)
|
|
|
|
|
);
|
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
|
|
|
?>
|
|
|
|
|
<?php if ($itemAction !== ''): ?>
|
|
|
|
|
<form
|
|
|
|
|
method="<?php e($itemMethod); ?>"
|
|
|
|
|
action="<?php e($itemAction); ?>"
|
|
|
|
|
<?php if ($itemTarget !== ''): ?>target="<?php e($itemTarget); ?>"<?php endif; ?>
|
2026-03-04 15:56:58 +01:00
|
|
|
<?php if ($itemConfirm !== ''): ?>data-detail-confirm-message="<?php e($itemConfirm); ?>"<?php endif; ?>
|
2026-03-06 00:44:52 +01:00
|
|
|
<?php if ($itemConfirmTitle !== ''): ?>data-detail-confirm-title="<?php e($itemConfirmTitle); ?>"<?php endif; ?>
|
|
|
|
|
<?php if ($itemConfirmConfirmLabel !== ''): ?>data-detail-confirm-confirm-label="<?php e($itemConfirmConfirmLabel); ?>"<?php endif; ?>
|
|
|
|
|
<?php if ($itemConfirmCancelLabel !== ''): ?>data-detail-confirm-cancel-label="<?php e($itemConfirmCancelLabel); ?>"<?php endif; ?>
|
|
|
|
|
<?php if ($itemConfirmVariant !== ''): ?>data-detail-confirm-variant="<?php e($itemConfirmVariant); ?>"<?php endif; ?>
|
|
|
|
|
<?php if ($itemConfirmFocus !== ''): ?>data-detail-confirm-focus="<?php e($itemConfirmFocus); ?>"<?php endif; ?>
|
2026-03-04 15:56:58 +01:00
|
|
|
<?php if ($itemDetailActionKind !== ''): ?>data-detail-action-kind="<?php e($itemDetailActionKind); ?>"<?php endif; ?>
|
|
|
|
|
<?php if ($itemDetailSubmitLock !== ''): ?>data-detail-submit-lock="<?php e($itemDetailSubmitLock); ?>"<?php endif; ?>
|
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
|
|
|
>
|
|
|
|
|
<?php if ($itemNeedsCsrf && $itemMethod !== 'GET'): ?>
|
|
|
|
|
<?php Session::getCsrfInput(); ?>
|
|
|
|
|
<?php endif; ?>
|
|
|
|
|
<?php foreach ($itemFields as $fieldName => $fieldValue): ?>
|
|
|
|
|
<?php if ($fieldName !== ''): ?>
|
|
|
|
|
<input type="hidden" name="<?php e((string) $fieldName); ?>" value="<?php e((string) $fieldValue); ?>">
|
|
|
|
|
<?php endif; ?>
|
|
|
|
|
<?php endforeach; ?>
|
|
|
|
|
<button type="submit" class="<?php e($itemButtonClass); ?>">
|
|
|
|
|
<?php e($itemLabel); ?>
|
|
|
|
|
</button>
|
|
|
|
|
</form>
|
|
|
|
|
<?php endif; ?>
|
|
|
|
|
<?php else: ?>
|
|
|
|
|
<?php
|
|
|
|
|
$itemHref = (string) ($item['href'] ?? '');
|
|
|
|
|
$itemLinkClass = (string) ($item['class'] ?? 'transparent');
|
|
|
|
|
$itemTarget = (string) ($item['target'] ?? '');
|
|
|
|
|
$itemRel = (string) ($item['rel'] ?? '');
|
2026-03-12 16:47:53 +01:00
|
|
|
$itemTone = (string) ($item['tone'] ?? '');
|
|
|
|
|
$itemDetailActionKind = strtolower(trim((string) ($item['detailActionKind'] ?? '')));
|
|
|
|
|
$itemName = (string) ($item['name'] ?? '');
|
|
|
|
|
$itemValue = (string) ($item['value'] ?? '');
|
|
|
|
|
$itemLinkClass = $appendCssClass(
|
|
|
|
|
$itemLinkClass,
|
|
|
|
|
$resolveToneClass($itemTone, $itemDetailActionKind, $itemName, $itemValue)
|
|
|
|
|
);
|
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
|
|
|
?>
|
|
|
|
|
<?php if ($itemHref !== ''): ?>
|
|
|
|
|
<a role="button" class="<?php e($itemLinkClass); ?>" href="<?php e($itemHref); ?>"
|
|
|
|
|
<?php if ($itemTarget !== ''): ?>target="<?php e($itemTarget); ?>"<?php endif; ?>
|
|
|
|
|
<?php if ($itemRel !== ''): ?>rel="<?php e($itemRel); ?>"<?php endif; ?>>
|
|
|
|
|
<?php e($itemLabel); ?>
|
|
|
|
|
</a>
|
|
|
|
|
<?php endif; ?>
|
|
|
|
|
<?php endif; ?>
|
|
|
|
|
</li>
|
|
|
|
|
<?php endforeach; ?>
|
|
|
|
|
</ul>
|
|
|
|
|
</details>
|
|
|
|
|
<?php endif; ?>
|
|
|
|
|
|
|
|
|
|
<?php foreach ($actions as $action): ?>
|
|
|
|
|
<?php
|
|
|
|
|
$item = is_array($action) ? $action : [];
|
|
|
|
|
$itemLabel = (string) ($item['label'] ?? '');
|
|
|
|
|
if ($itemLabel === '') {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
$itemType = (string) ($item['type'] ?? 'submit');
|
|
|
|
|
$itemClass = (string) ($item['class'] ?? 'secondary outline');
|
|
|
|
|
$itemForm = (string) ($item['form'] ?? '');
|
|
|
|
|
$itemName = (string) ($item['name'] ?? '');
|
|
|
|
|
$itemValue = (string) ($item['value'] ?? '');
|
2026-03-04 15:56:58 +01:00
|
|
|
$itemConfirm = (string) ($item['confirm'] ?? '');
|
2026-03-06 00:44:52 +01:00
|
|
|
$itemConfirmTitle = (string) ($item['confirmTitle'] ?? '');
|
|
|
|
|
$itemConfirmConfirmLabel = (string) ($item['confirmConfirmLabel'] ?? '');
|
|
|
|
|
$itemConfirmCancelLabel = (string) ($item['confirmCancelLabel'] ?? '');
|
|
|
|
|
$itemConfirmVariant = strtolower(trim((string) ($item['confirmVariant'] ?? '')));
|
|
|
|
|
$itemConfirmFocus = strtolower(trim((string) ($item['confirmFocus'] ?? '')));
|
2026-03-04 15:56:58 +01:00
|
|
|
$itemDetailActionKind = strtolower(trim((string) ($item['detailActionKind'] ?? '')));
|
|
|
|
|
$itemDetailSubmitLock = strtolower(trim((string) ($item['detailSubmitLock'] ?? '')));
|
2026-03-12 16:47:53 +01:00
|
|
|
$itemTone = (string) ($item['tone'] ?? '');
|
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
|
|
|
$itemDisabled = !empty($item['disabled']);
|
2026-03-04 15:56:58 +01:00
|
|
|
$itemDetailSavePrimary = false;
|
|
|
|
|
if (array_key_exists('detailSavePrimary', $item)) {
|
|
|
|
|
$itemDetailSavePrimary = (bool) $item['detailSavePrimary'];
|
|
|
|
|
} else {
|
|
|
|
|
$itemDetailSavePrimary = strtolower(trim($itemName)) === 'action'
|
|
|
|
|
&& in_array(strtolower(trim($itemValue)), ['save', 'create'], true);
|
|
|
|
|
}
|
|
|
|
|
if ($itemDetailActionKind === '') {
|
|
|
|
|
$normalizedItemName = strtolower(trim($itemName));
|
|
|
|
|
$normalizedItemValue = strtolower(trim($itemValue));
|
|
|
|
|
if ($normalizedItemName === 'action' && in_array($normalizedItemValue, ['save', 'create'], true)) {
|
|
|
|
|
$itemDetailActionKind = 'save';
|
|
|
|
|
} elseif ($normalizedItemName === 'action' && in_array($normalizedItemValue, ['save_close', 'create_close'], true)) {
|
|
|
|
|
$itemDetailActionKind = 'save-close';
|
|
|
|
|
}
|
|
|
|
|
}
|
2026-03-12 16:47:53 +01:00
|
|
|
$itemClass = $appendCssClass(
|
|
|
|
|
$itemClass,
|
|
|
|
|
$resolveToneClass($itemTone, $itemDetailActionKind, $itemName, $itemValue)
|
|
|
|
|
);
|
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
|
|
|
?>
|
|
|
|
|
<button
|
|
|
|
|
type="<?php e($itemType); ?>"
|
|
|
|
|
<?php if ($itemForm !== ''): ?>form="<?php e($itemForm); ?>"<?php endif; ?>
|
|
|
|
|
<?php if ($itemName !== ''): ?>name="<?php e($itemName); ?>"<?php endif; ?>
|
|
|
|
|
<?php if ($itemValue !== ''): ?>value="<?php e($itemValue); ?>"<?php endif; ?>
|
2026-03-04 15:56:58 +01:00
|
|
|
<?php if ($itemConfirm !== ''): ?>data-detail-confirm-message="<?php e($itemConfirm); ?>"<?php endif; ?>
|
2026-03-06 00:44:52 +01:00
|
|
|
<?php if ($itemConfirmTitle !== ''): ?>data-detail-confirm-title="<?php e($itemConfirmTitle); ?>"<?php endif; ?>
|
|
|
|
|
<?php if ($itemConfirmConfirmLabel !== ''): ?>data-detail-confirm-confirm-label="<?php e($itemConfirmConfirmLabel); ?>"<?php endif; ?>
|
|
|
|
|
<?php if ($itemConfirmCancelLabel !== ''): ?>data-detail-confirm-cancel-label="<?php e($itemConfirmCancelLabel); ?>"<?php endif; ?>
|
|
|
|
|
<?php if ($itemConfirmVariant !== ''): ?>data-detail-confirm-variant="<?php e($itemConfirmVariant); ?>"<?php endif; ?>
|
|
|
|
|
<?php if ($itemConfirmFocus !== ''): ?>data-detail-confirm-focus="<?php e($itemConfirmFocus); ?>"<?php endif; ?>
|
2026-03-04 15:56:58 +01:00
|
|
|
<?php if ($itemDetailActionKind !== ''): ?>data-detail-action-kind="<?php e($itemDetailActionKind); ?>"<?php endif; ?>
|
|
|
|
|
<?php if ($itemDetailSubmitLock !== ''): ?>data-detail-submit-lock="<?php e($itemDetailSubmitLock); ?>"<?php endif; ?>
|
|
|
|
|
<?php if ($itemDetailSavePrimary): ?>data-detail-save-primary="1"<?php endif; ?>
|
add composer-unused, comprehensive docs, and project restructure
- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks
- Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists
- Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services
- Add Microsoft OIDC SSO, API token management, and user lifecycle features
- Add swagger-ui vendor integration and OpenAPI spec
- Add production Docker setup and bin/ scripts
- Update composer dependencies, config, templates, and frontend assets throughout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 15:27:35 +01:00
|
|
|
<?php if ($itemDisabled): ?>disabled<?php endif; ?>
|
|
|
|
|
class="<?php e($itemClass); ?>"
|
|
|
|
|
>
|
|
|
|
|
<?php e($itemLabel); ?>
|
|
|
|
|
</button>
|
|
|
|
|
<?php endforeach; ?>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|