60 $texts = $this->texts();
63 $defaultUser = is_array(
$config) ? (string)(
$config[
'default_design_user'] ??
'') :
'';
65 foreach ($this->designService->listDesigns() as $name =>
$design) {
67 if ($name === $defaultUser) {
68 $badges .=
'<span class="badge text-bg-primary">' . $this->h($texts->get_fd_message(
'badge_frontend_default')) .
'</span>';
71 $badges .=
'<span class="badge text-bg-dark">' . $this->h($texts->get_fd_message(
'badge_admin_default')) .
'</span>';
73 if (!empty(
$design[
'managed'])) {
74 $badges .=
'<span class="badge text-bg-success">' . $this->h($texts->get_fd_message(
'badge_wizard')) .
'</span>';
77 $badges .=
'<span class="badge text-bg-warning">' . $this->h($texts->get_fd_message(
'badge_check')) .
'</span>';
79 $cards .=
dbx()->get_system_obj(
'dbxTPL')->get_tpl(
'dbxDesign_admin|design-card', array(
80 'name' => $this->h($name),
81 'title' => $this->h(
$design[
'title']),
82 'description' => $this->h(
$design[
'description'] !==
'' ?
$design[
'description'] : $texts->get_fd_message(
'description_fallback')),
83 'layout' => $this->h(
$design[
'layout']),
85 'preview_url' => $this->h(
'?dbx_design=' . rawurlencode($name)),
86 'wizard_url' => $this->h($this->url(
'wizard', array(
'source_design' => $name))),
87 'ki_url' => $this->h(
'?dbx_modul=dbxKi&dbx_run1=briefing_design&design=' . rawurlencode($name)),
88 'download_url' => $this->h($this->url(
'download', array(
'design' => $name))),
89 'action_personalize' => $this->h($texts->get_fd_message(
'action_personalize')),
90 'action_ai' => $this->h($texts->get_fd_message(
'action_ai')),
91 'action_preview' => $this->h($texts->get_fd_message(
'action_preview')),
92 'action_backup' => $this->h($texts->get_fd_message(
'action_backup')),
96 return dbx()->get_system_obj(
'dbxTPL')->get_tpl(
'dbxDesign_admin|design-list', array(
98 'wizard_url' => $this->h($this->url(
'wizard')),
99 'ki_url' => $this->h(
'?dbx_modul=dbxKi&dbx_run1=briefing_design'),
100 'bar_title' =>
$texts->get_fd_message(
'list_title'),
101 'bar_subtitle' =>
$texts->get_fd_message(
'list_subtitle'),
102 'bar_icon' =>
'bi-palette',
103 'bar_actions' =>
'<a class="btn btn-outline-primary btn-sm" href="' . $this->h(
'?dbx_modul=dbxKi&dbx_run1=briefing_design') .
'"><i class="bi bi-stars"></i> ' . $this->h(
$texts->get_fd_message(
'action_ai_design')) .
'</a> '
104 .
'<a class="btn btn-primary btn-sm" href="' . $this->h($this->url(
'wizard')) .
'"><i class="bi bi-magic"></i> ' . $this->h(
$texts->get_fd_message(
'action_wizard')) .
'</a>',
105 'bar_class' =>
'dbx-module-bar',
106 'bar_title_class' =>
'dbx-module-bar-titleblock',
107 'bar_title_pre' =>
'',
108 'bar_title_heading_attrs' =>
'',
111 'bar_actions_class' =>
'dbx-module-bar-actions',
119 $texts = $this->texts();
120 $source = $this->designService->normalizeName((
string)
dbx()->get_request_var(
'source_design',
'dbxapp',
'parameter'));
121 if (!isset($this->designService->listDesigns()[
$source])) {
124 $defaults = $this->designService->defaults(
$source);
125 $form =
dbx()->get_system_obj(
'dbxForm');
126 $form->init(
'design-admin-wizard',
'design-wizard');
127 $form->_fd =
'dbxDesign_admin|design-admin';
128 $form->load_fd_messages();
129 $form->set_form_help_enabled(
false);
130 $form->_action = $this->url(
'wizard');
131 $form->_msg_info = $texts->get_fd_message(
'wizard_info');
132 $form->_data = array_merge(
$form->_data, $defaults);
134 $form->add_rep(
'list_url', $this->h($this->url(
'list')));
135 $form->add_rep(
'ki_url', $this->h(
'?dbx_modul=dbxKi&dbx_run1=briefing_design&design=' . rawurlencode(
$source)));
136 $form->add_rep(
'bar_title', $texts->get_fd_message(
'wizard_title'));
137 $form->add_rep(
'bar_subtitle', $texts->get_fd_message(
'wizard_subtitle'));
138 $form->add_rep(
'bar_icon',
'bi-magic');
139 $form->add_rep(
'bar_actions',
'<a class="btn btn-outline-primary btn-sm" href="' . $this->h(
'?dbx_modul=dbxKi&dbx_run1=briefing_design&design=' . rawurlencode(
$source)) .
'"><i class="bi bi-stars"></i> ' . $this->h($texts->get_fd_message(
'action_with_ai')) .
'</a> '
140 .
'<a class="btn btn-outline-secondary btn-sm" href="' . $this->h($this->url(
'list')) .
'"><i class="bi bi-arrow-left"></i> ' . $this->h($texts->get_fd_message(
'action_designs')) .
'</a>');
142 'bar_class' =>
'dbx-module-bar',
143 'bar_title_class' =>
'dbx-module-bar-titleblock',
144 'bar_title_pre' =>
'',
145 'bar_title_heading_attrs' =>
'',
148 'bar_actions_class' =>
'dbx-module-bar-actions',
152 $form->add_fld(
'source_design',
'select-single-label', label:
$texts->get_fd_message(
'label_source_design'), rules:
'parameter|max=63', options: $this->designOptions(), dd:
'');
153 $form->add_fld(
'target_design',
'text-label', label:
$texts->get_fd_message(
'label_target_design'), rules:
'parameter+_-|min=2|max=63', placeholder:
$texts->get_fd_message(
'placeholder_target_design'), tooltip:
$texts->get_fd_message(
'tooltip_target_design'), dd:
'');
154 $form->add_fld(
'title',
'text-label', label:
$texts->get_fd_message(
'label_title'), rules:
'varchar|max=120', placeholder:
$texts->get_fd_message(
'placeholder_title'), dd:
'');
155 $form->add_fld(
'description',
'textarea-label', label:
$texts->get_fd_message(
'label_description'), rules:
'varchar|max=500', data:
'rows=2', dd:
'');
156 $form->add_fld(
'layout',
'select-single-label', label:
$texts->get_fd_message(
'label_layout'), rules:
'parameter', options: array(
157 'top' =>
$texts->get_fd_message(
'layout_top'),
158 'sidebar' =>
$texts->get_fd_message(
'layout_sidebar'),
159 'hybrid' =>
$texts->get_fd_message(
'layout_hybrid'),
161 $form->add_fld(
'menu_style',
'select-single-label', label:
$texts->get_fd_message(
'label_menu_style'), rules:
'parameter', options: array(
162 'tabs' =>
$texts->get_fd_message(
'menu_tabs'),
163 'pills' =>
$texts->get_fd_message(
'menu_pills'),
164 'compact' =>
$texts->get_fd_message(
'menu_compact'),
166 $form->add_fld(
'content_width',
'select-single-label', label:
$texts->get_fd_message(
'label_content_width'), rules:
'parameter', options: array(
167 'compact' =>
$texts->get_fd_message(
'width_compact'),
168 'wide' =>
$texts->get_fd_message(
'width_wide'),
169 'full' =>
$texts->get_fd_message(
'width_full'),
171 $form->add_fld(
'footer_mode',
'select-single-label', label:
$texts->get_fd_message(
'label_footer_mode'), rules:
'parameter', options: array(
172 'full' =>
$texts->get_fd_message(
'footer_full'),
173 'minimal' =>
$texts->get_fd_message(
'footer_minimal'),
174 'none' =>
$texts->get_fd_message(
'footer_none'),
176 $form->add_fld(
'brand_name',
'text-label', label:
$texts->get_fd_message(
'label_brand_name'), rules:
'varchar|min=1|max=120', dd:
'');
177 $form->add_fld(
'tagline',
'text-label', label:
$texts->get_fd_message(
'label_tagline'), rules:
'varchar|max=160', dd:
'');
178 $form->add_fld(
'logo_mode',
'select-single-label', label:
$texts->get_fd_message(
'label_logo_mode'), rules:
'parameter', options: array(
179 'icon' =>
$texts->get_fd_message(
'logo_icon'),
180 'none' =>
$texts->get_fd_message(
'logo_none'),
182 $form->add_fld(
'logo_icon',
'text-label', label:
$texts->get_fd_message(
'label_logo_icon'), rules:
'parameter|max=50', placeholder:
'bi-stars', dd:
'');
183 $form->add_fld(
'primary_color',
'text-label', label:
$texts->get_fd_message(
'label_primary_color'), rules:
'varchar|max=7', dd:
'');
184 $form->add_fld(
'secondary_color',
'text-label', label:
$texts->get_fd_message(
'label_secondary_color'), rules:
'varchar|max=7', dd:
'');
185 $form->add_fld(
'accent_color',
'text-label', label:
$texts->get_fd_message(
'label_accent_color'), rules:
'varchar|max=7', dd:
'');
186 $form->add_fld(
'background_color',
'text-label', label:
$texts->get_fd_message(
'label_background_color'), rules:
'varchar|max=7', dd:
'');
187 $form->add_fld(
'surface_color',
'text-label', label:
$texts->get_fd_message(
'label_surface_color'), rules:
'varchar|max=7', dd:
'');
188 $form->add_fld(
'text_color',
'text-label', label:
$texts->get_fd_message(
'label_text_color'), rules:
'varchar|max=7', dd:
'');
189 $form->add_fld(
'font_family',
'select-single-label', label:
$texts->get_fd_message(
'label_font_family'), rules:
'parameter', options: array(
190 'system' =>
$texts->get_fd_message(
'font_system'),
191 'modern' =>
$texts->get_fd_message(
'font_modern'),
192 'editorial' =>
$texts->get_fd_message(
'font_editorial'),
193 'rounded' =>
$texts->get_fd_message(
'font_rounded'),
195 $form->add_fld(
'radius',
'select-single-label', label:
$texts->get_fd_message(
'label_radius'), rules:
'parameter', options: array(
196 'square' =>
$texts->get_fd_message(
'radius_square'),
197 'soft' =>
$texts->get_fd_message(
'radius_soft'),
198 'round' =>
$texts->get_fd_message(
'radius_round'),
200 $form->add_fld(
'footer_text',
'text-label', label:
$texts->get_fd_message(
'label_footer_text'), rules:
'varchar|max=180', dd:
'');
201 $form->add_fld(
'legal_links',
'checkbox-label', label:
$texts->get_fd_message(
'label_legal_links'), rules:
'int', dd:
'');
202 $form->add_fld(
'set_default',
'checkbox-label', label:
$texts->get_fd_message(
'label_set_default'), rules:
'int', dd:
'');
205 $hasPost = (
$_SERVER[
'REQUEST_METHOD'] ??
'') ===
'POST';
206 if (
$form->submit()) {
209 $result = $this->designService->createFromWizard(
$input, is_array($_FILES[
'logo_file'] ??
null) ? $_FILES[
'logo_file'] : array());
210 $form->_msg_success =
$texts->get_fd_message(
'wizard_created');
211 $resultHtml =
dbx()->get_system_obj(
'dbxTPL')->get_tpl(
'dbxDesign_admin|design-result', array(
213 'name' => $this->h(
$result[
'name']),
214 'preview_url' => $this->h(
'?dbx_design=' . rawurlencode(
$result[
'name'])),
215 'list_url' => $this->h($this->url(
'list')),
216 'ki_url' => $this->h(
'?dbx_modul=dbxKi&dbx_run1=briefing_design&design=' . rawurlencode(
$result[
'name']) .
'&mode=update'),
217 'default_note' => !empty(
$result[
'default_changed']) ?
'<span class="badge text-bg-primary">' . $this->h(
$texts->get_fd_message(
'wizard_default_set')) .
'</span>' :
'',
219 }
catch (\Throwable $e) {
220 $form->_msg_error = $e->getMessage();
222 } elseif ($hasPost) {
223 $form->_msg_error =
$texts->get_fd_message(
'wizard_validation_error');
226 return $form->run() . $resultHtml;