ILIAS  release_8 Revision v8.24
class.ilSystemStyleSettingsGUI.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
24use ILIAS\Refinery\Factory as Refinery;
26use Psr\Http\Message\ServerRequestInterface;
27
29{
30 protected ilCtrl $ctrl;
31 protected ilLanguage $lng;
33 protected ilTabsGUI $tabs;
38 protected Refinery $refinery;
40 protected ilObjUser $user;
41 protected ilTree $tree;
42 protected ServerRequestInterface $request;
43 protected string $style_id;
46
47 public function __construct(
56 Refinery $refinery,
59 ServerRequestInterface $request,
61 string $skin_id,
62 string $style_id
63 ) {
64 $this->ctrl = $ctrl;
65 $this->lng = $lng;
66 $this->tpl = $tpl;
67 $this->tabs = $tabs;
68 $this->ui_factory = $ui_factory;
69 $this->skin_factory = $skin_factory;
70 $this->request_wrapper = $request_wrapper;
71 $this->refinery = $refinery;
72 $this->toolbar = $toolbar;
73 $this->tree = $tree;
74 $this->style_id = $style_id;
75 $this->renderer = $renderer;
76 $this->user = $user;
77 $this->request = $request;
78 $this->message_stack = new ilSystemStyleMessageStack($this->tpl);
79
80 $this->style_container = $this->skin_factory->skinStyleContainerFromId($skin_id, $this->message_stack);
81 }
82
83 public function executeCommand(): void
84 {
85 $cmd = $this->ctrl->getCmd() ? $this->ctrl->getCmd() : 'edit';
86 $style = $this->style_container->getSkin()->getStyle($this->style_id);
87
88 if ($style->isSubstyle()) {
89 if ($cmd == 'edit' || $cmd == 'view') {
90 $this->setSubStyleSubTabs('edit');
91 } else {
92 $this->setSubStyleSubTabs('assignStyle');
93 }
94 }
95
96 $assign_gui = new ilSubStyleAssignmentGUI(
97 $this,
98 $this->ctrl,
99 $this->lng,
100 $this->tpl,
101 $this->toolbar,
102 $this->tree,
103 $this->request_wrapper,
104 $this->refinery,
105 $this->ui_factory
106 );
107
108 switch ($cmd) {
109 case 'deleteAssignments':
110 $assign_gui->deleteAssignments($this->style_container->getSkin(), $style);
111 break;
112 case 'saveAssignment':
113 $assign_gui->saveAssignment($this->style_container->getSkin(), $style);
114 break;
115 case 'addAssignment':
116 $assign_gui->addAssignment();
117 break;
118 case 'assignStyle':
119 $assign_gui->assignStyle($this->style_container->getSkin(), $style);
120 break;
121 case 'save':
122 $this->save();
123 break;
124 case 'edit':
125 default:
126 $this->edit();
127 break;
128 }
129 }
130
131 protected function setSubStyleSubTabs(string $active = ''): void
132 {
133 $this->tabs->addSubTab(
134 'edit',
135 $this->lng->txt('settings'),
136 $this->ctrl->getLinkTargetByClass('ilsystemstylesettingsgui')
137 );
138 $this->tabs->addSubTab(
139 'assignStyle',
140 $this->lng->txt('assignment'),
141 $this->ctrl->getLinkTargetByClass('ilsystemstylesettingsgui', 'assignStyle')
142 );
143
144 $this->tabs->activateSubTab($active);
145 }
146
147 protected function edit(): void
148 {
149 $form = $this->editSystemStyleForm();
150 $this->tpl->setContent($this->renderer->render($form));
151 }
152
153 protected function save(): void
154 {
155 $new_skin = $this->style_container->getSkin();
156 $new_style = $new_skin->getStyle($this->style_id);
157 $old_skin = clone $new_skin;
158 $old_style = clone $new_style;
159
160 $form = $this->editSystemStyleForm();
161 $form = $form->withRequest($this->request);
162 $result = $form->getData();
163
164 if ($result) {
165 try {
166 $new_skin->updateParentStyleOfSubstyles($old_style->getId(), $new_style->getId());
167 $this->style_container->updateSkin($old_skin);
168 $this->style_container->updateStyle($new_style->getId(), $old_style);
169
170 if ($old_style->isSubstyle()) {
171 $new_style->setSubstyleOf($old_style->getSubstyleOf());
173 $old_style->getId(),
174 $new_style->getId()
175 );
176 } else {
178 $old_skin->getId(),
179 $old_style->getId(),
180 $new_skin->getId(),
181 $new_style->getId()
182 );
183
185 $result['activation_section'],
186 $new_skin->getId(),
187 $new_style->getId(),
188 $this->message_stack
189 );
190 }
191
192 $this->ctrl->setParameterByClass('ilSystemStyleSettingsGUI', 'skin_id', $new_skin->getId());
193 $this->ctrl->setParameterByClass('ilSystemStyleSettingsGUI', 'style_id', $new_style->getId());
194 $this->message_stack->prependMessage(new ilSystemStyleMessage($this->lng->txt('msg_sys_style_update')));
195 $this->message_stack->sendMessages();
196 $this->ctrl->redirectByClass('ilSystemStyleSettingsGUI');
197 } catch (ilSystemStyleException $e) {
198 $this->message_stack->prependMessage(new ilSystemStyleMessage(
199 $e->getMessage(),
201 ));
202 }
203 }
204
205 $this->tpl->setContent($this->renderer->render(
206 array_merge($this->message_stack->getUIComponentsMessages($this->ui_factory), [$form])
207 ));
208 }
209
210 protected function handleStyleActivation(
211 ?array $activation_values,
212 string $skin_id,
213 string $style_id,
215 ): void {
216 $active = false;
217 $personal = false;
218 $default = false;
219
220 if (is_array($activation_values)) {
221 $active = true;
222 $personal = (bool) $activation_values['personal'];
223 $default = (bool) $activation_values['default'];
224 }
225 if ($active) {
227 if ($personal) {
229 }
230 if ($default) {
232 }
233 } else {
235 }
236
237 $system_style_conf = new ilSystemStyleConfig();
238
239 //If style has been unset as personal style
240 if (!$personal && $this->user->getPref('skin') == $skin_id) {
241 //Reset to default if possible, else change to delos
242 if (!$default) {
246 );
247 } else {
249 $system_style_conf->getDefaultSkinId(),
250 $system_style_conf->getDefaultStyleId()
251 );
252 }
255 $this->lng->txt('personal_style_set_to') . ' ' .
258 )
259 );
260 }
261 if (!$default && ilSystemStyleSettings::getCurrentDefaultSkin() == $skin_id) {
263 $system_style_conf->getDefaultSkinId(),
264 $system_style_conf->getDefaultStyleId()
265 );
268 $this->lng->txt('default_style_set_to') . ' ' . $system_style_conf->getDefaultSkinId() . ': ' . $system_style_conf->getDefaultStyleId(),
270 )
271 );
272 }
273 }
274
278 protected function editSystemStyleForm(): Form
279 {
280 $f = $this->ui_factory->input();
281 $skin = $this->style_container->getSkin();
282 $style = $skin->getStyle($this->style_id);
283
284 if (!$style->isSubstyle()) {
285 $skin_fields = [];
286 $skin_fields[] = $f->field()->text($this->lng->txt('skin_id'), $this->lng->txt('skin_id_description'))
287 ->withRequired(true)
288 ->withValue($skin->getId())
289 ->withAdditionalTransformation($this->refinery->custom()->transformation(
290 function ($v) use ($skin) {
291 $skin->setId($v);
292 }
293 ));
294
295 $skin_fields[] = $f->field()->text($this->lng->txt('skin_name'), $this->lng->txt('skin_name_description'))
296 ->withRequired(true)
297 ->withValue($skin->getName())
298 ->withAdditionalTransformation($this->refinery->custom()->transformation(
299 function ($v) use ($skin) {
300 $skin->setName($v);
301 }
302 ));
303
304 if ($skin->isVersionChangeable()) {
305 $skin_fields[] = $f->field()->text(
306 $this->lng->txt('skin_version'),
307 $this->lng->txt('skin_version_description')
308 )
309 ->withDisabled(true)
310 ->withValue($skin->getVersion())
311 ->withAdditionalTransformation($this->refinery->custom()->transformation(
312 function ($v) use ($skin) {
313 $skin->getVersionStep($v);
314 }
315 ));
316 }
317 $sections[] = $f->field()->section($skin_fields, $this->lng->txt('skin'));
318 }
319
320 $style_id = $f->field()->text($this->lng->txt('style_id'), $this->lng->txt('style_id_description'))
321 ->withRequired(true)
322 ->withValue($style->getId())
323 ->withAdditionalTransformation($this->refinery->custom()->transformation(
324 function ($v) use ($style) {
325 $style->setId($v);
326 $style->setCssFile($v);
327 }
328 ));
329 $style_name = $f->field()->text($this->lng->txt('style_name'), $this->lng->txt('style_name_description'))
330 ->withRequired(true)
331 ->withValue($style->getName())
332 ->withAdditionalTransformation($this->refinery->custom()->transformation(
333 function ($v) use ($style) {
334 $style->setName($v);
335 }
336 ));
337 $image_dir = $f->field()->text($this->lng->txt('image_dir'), $this->lng->txt('image_dir_description'))
338 ->withValue($style->getImageDirectory())
339 ->withAdditionalTransformation($this->refinery->custom()->transformation(
340 function ($v) use ($style) {
341 $style->setImageDirectory($v);
342 }
343 ));
344 $font_dir = $f->field()->text($this->lng->txt('font_dir'), $this->lng->txt('font_dir_description'))
345 ->withValue($style->getFontDirectory())
346 ->withAdditionalTransformation($this->refinery->custom()->transformation(
347 function ($v) use ($style) {
348 $style->setFontDirectory($v);
349 }
350 ));
351 $sound_dir = $f->field()->text($this->lng->txt('image_dir'), $this->lng->txt('sound_dir_description'))
352 ->withValue($style->getSoundDirectory())
353 ->withAdditionalTransformation($this->refinery->custom()->transformation(
354 function ($v) use ($style) {
355 $style->setSoundDirectory($v);
356 }
357 ));
358 $section_name = $this->lng->txt('style');
359 if ($style->isSubstyle()) {
360 $this->lng->txt('sub_style');
361 }
362 $sections[] = $f->field()->section([$style_id, $style_name, $image_dir, $font_dir, $sound_dir], $section_name);
363
364 if (!$style->isSubstyle()) {
365 $active = ilSystemStyleSettings::_lookupActivatedStyle($skin->getId(), $style->getId());
366 $activation_values = null;
367 if ($active) {
368 $is_personal_style = $this->user->getPref('skin') == $skin->getId()
369 && $this->user->getPref('style') == $style->getId();
370 $is_default_style = ilSystemStyleSettings::getCurrentDefaultSkin() == $skin->getId()
371 && ilSystemStyleSettings::getCurrentDefaultStyle() == $style->getId();
372 $activation_values = ['default' => $is_default_style, 'personal' => $is_personal_style];
373 }
374
375 $default = $f->field()->checkbox(
376 $this->lng->txt('default'),
377 $this->lng->txt('system_style_default_description')
378 );
379
380 $personal = $f->field()->checkbox(
381 $this->lng->txt('personal'),
382 $this->lng->txt('system_style_personal_description')
383 );
384
385 $activation = $f->field()->optionalGroup(
386 ['default' => $default, 'personal' => $personal],
387 $this->lng->txt('system_style_activation'),
388 $this->lng->txt('system_style_activation_description')
389 )->withValue($activation_values);
390 $sections['activation_section'] = $f->field()->section(
391 ['activation' => $activation],
392 $this->lng->txt('system_style_activation')
393 )
394 ->withAdditionalTransformation($this->refinery->custom()->transformation(
395 function ($v) {
396 return $v['activation'];
397 }
398 ));
399 }
400
401 return $f->container()->form()->standard($this->ctrl->getFormActionByClass(
402 'ilsystemstylesettingsgui',
403 'save'
404 ), $sections);
405 }
406}
static return function(ContainerConfigurator $containerConfigurator)
Definition: basic_rector.php:9
Builds data types.
Definition: Factory.php:21
Class ilCtrl provides processing control methods.
language handling
User class.
Factory to create Skin classes holds an manages the basic data of a skin as provide by the template o...
This class is responsible for all file system related actions related actions of a skin such as copyi...
ilSystemStyleConfig wraps all 'constants' to ensure the testability of all classes using those 'const...
Class for advanced editing exception handling in ILIAS.
Used to stack messages to be shown to the user.
addMessage(ilSystemStyleMessage $message)
Add a message to be displayed by the stack.
ilSystemStyleMessageStack $message_stack
__construct(ilCtrl $ctrl, ilLanguage $lng, ilGlobalTemplateInterface $tpl, ilTabsGUI $tabs, Factory $ui_factory, Renderer $renderer, ilSkinFactory $skin_factory, WrapperFactory $request_wrapper, Refinery $refinery, ilToolbarGUI $toolbar, ilObjUser $user, ServerRequestInterface $request, ilTree $tree, string $skin_id, string $style_id)
handleStyleActivation(?array $activation_values, string $skin_id, string $style_id, ilSystemStyleMessageStack $message_stack)
static _activateStyle(string $a_skin, string $a_style)
activate system style
static getCurrentDefaultStyle()
Gets default style of the system.
static updateSubStyleIdfSubStyleCategoryAssignments(string $old_substyle_id, string $new_substyle_id)
Updates an assignment, e.g.
static getCurrentUserPrefSkin()
Gets a users preferred skin by using the user object.
static _lookupActivatedStyle(string $a_skin, string $a_style)
lookup if a style is activated
static _deactivateStyle(string $a_skin, string $a_style)
deactivate system style
static updateSkinIdAndStyleIDOfSubStyleCategoryAssignments(string $old_skin_id, string $old_style_id, string $new_skin_id, string $new_style_id)
Updates an assignment, e.g.
static getCurrentDefaultSkin()
Gets default Skin of the System.
static setCurrentUserPrefStyle(string $skin_id, string $style_id)
Sets a users preferred system skin/style by using the user object.
static setCurrentDefaultStyle(string $skin_id, string $style_id)
Sets the default style of the system.
static getCurrentUserPrefStyle()
Gets a users preferred style by using the user object.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This describes a standard form.
Definition: Standard.php:27
This is how the factory for UI elements looks.
Definition: Factory.php:38
An entity that renders components to a string output.
Definition: Renderer.php:31
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...