ILIAS  release_8 Revision v8.24
class.ilContentPagePageCommandForwarder.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
23use ILIAS\Refinery\Factory as Refinery;
25
27{
31 public const PRESENTATION_MODE_EDITING = 'PRESENTATION_MODE_EDITING';
32
36 public const PRESENTATION_MODE_PRESENTATION = 'PRESENTATION_MODE_PRESENTATION';
37
41 public const PRESENTATION_MODE_EMBEDDED_PRESENTATION = 'PRESENTATION_MODE_EMBEDDED_PRESENTATION';
42 public const PRESENTATION_MODE_PREVIEW = 'PRESENTATION_MODE_PREVIEW';
43
46 protected ilLanguage $lng;
47 protected ilTabsGUI $tabs;
49 protected string $backUrl = '';
50 protected ilObjUser $actor;
52 protected array $updateListeners = [];
54 protected Refinery $refinery;
56 protected bool $isMediaRequest = false;
57
58 public function __construct(
65 Refinery $refinery,
67 ) {
68 $this->http = $http;
69 $this->ctrl = $ctrl;
70 $this->tabs = $tabs;
71 $this->lng = $lng;
72 $this->parentObject = $parentObject;
73 $this->actor = $actor;
74 $this->refinery = $refinery;
75 $this->content_style_domain = $content_style_domain;
76
77 $this->lng->loadLanguageModule('content');
78
79 $this->backUrl = '';
80 if ($this->http->wrapper()->query()->has('backurl')) {
81 $this->backUrl = $this->http->wrapper()->query()->retrieve(
82 'backurl',
83 $this->refinery->kindlyTo()->string()
84 );
85 }
86
87 if ($this->backUrl !== '') {
88 $this->ctrl->setParameterByClass(ilContentPagePageGUI::class, 'backurl', rawurlencode($this->backUrl));
89 }
90 }
91
92 public function setIsMediaRequest(bool $isMediaRequest): void
93 {
94 $this->isMediaRequest = $isMediaRequest;
95 }
96
100 public function onPageUpdate(array $parameters): void
101 {
102 foreach ($this->updateListeners as $listener) {
103 $listener(new PageUpdatedEvent($parameters['page']));
104 }
105 }
106
107 public function addPageTabs(): void
108 {
109 $this->ctrl->setParameterByClass(ilObjectContentStyleSettingsGUI::class, self::HTTP_PARAM_PAGE_EDITOR_STYLE_CONTEXT, '1');
110 $this->tabs->addTarget(
111 'obj_sty',
112 $this->ctrl->getLinkTargetByClass(ilObjectContentStyleSettingsGUI::class),
113 'editStyleProperties',
114 strtolower(ilObjectContentStyleSettingsGUI::class)
115 );
116 $this->ctrl->setParameterByClass(ilObjContentPageGUI::class, self::HTTP_PARAM_PAGE_EDITOR_STYLE_CONTEXT, null);
117 }
118
122 public function updateContentPageOnPageUpdate(array $parameters): void
123 {
124 $this->parentObject->update();
125 }
126
127 public function addUpdateListener(callable $updateListener): void
128 {
129 $this->updateListeners[] = $updateListener;
130 }
131
132 protected function getPageObjectGUI(string $language, bool $isEmbedded = false): ilContentPagePageGUI
133 {
134 $pageObjectGUI = new ilContentPagePageGUI($this->parentObject->getId(), 0, $isEmbedded, $language);
135 $pageObjectGUI->setStyleId(
136 $this->content_style_domain->getEffectiveStyleId()
137 );
138
139 $pageObjectGUI->obj->addUpdateListener($this, 'updateContentPageOnPageUpdate', []);
140
141 return $pageObjectGUI;
142 }
143
144 protected function doesPageExistsForLanguage(string $language): bool
145 {
146 return ilContentPagePage::_exists($this->parentObject->getType(), $this->parentObject->getId(), $language);
147 }
148
149 protected function ensurePageObjectExists(string $language): void
150 {
151 if (!$this->doesPageExistsForLanguage($language)) {
152 $pageObject = new ilContentPagePage();
153 $pageObject->setParentId($this->parentObject->getId());
154 $pageObject->setId($this->parentObject->getId());
155 $pageObject->setLanguage($language);
156 $pageObject->createFromXML();
157 }
158 }
159
160 protected function setBackLinkTab(): void
161 {
162 $backUrl = $this->ctrl->getLinkTargetByClass(ilContentPagePageGUI::class, self::UI_CMD_COPAGE_EDIT);
163 if ($this->backUrl !== '') {
164 $backUrlParts = parse_url(ilUtil::stripSlashes($this->backUrl));
165
166 $script = basename($backUrlParts['path']);
167
168 $backUrl = './' . implode('?', [
169 $script, $backUrlParts['query']
170 ]);
171 }
172
173 $this->tabs->setBackTarget($this->lng->txt('back'), $backUrl);
174 }
175
176 protected function buildEditingPageObjectGUI(string $language): ilContentPagePageGUI
177 {
178 $this->tabs->clearTargets();
179
180 $this->setBackLinkTab();
181
182 $this->ensurePageObjectExists($language);
183
184 $pageObjectGUI = $this->getPageObjectGUI($language);
185 $pageObjectGUI->setEnabledTabs(true);
186
187 $page = $pageObjectGUI->getPageObject();
188 $page->addUpdateListener($this, 'onPageUpdate', ['page' => $page]);
189
190 $pageObjectGUI->setTabHook($this, 'addPageTabs');
191
192 return $pageObjectGUI;
193 }
194
195 protected function buildPresentationPageObjectGUI(string $language): ilContentPagePageGUI
196 {
197 $this->ensurePageObjectExists($language);
198
199 $pageObjectGUI = $this->getPageObjectGUI($language);
200 $pageObjectGUI->setEnabledTabs(false);
201
202 $pageObjectGUI->setStyleId(
203 $this->content_style_domain->getEffectiveStyleId()
204 );
205
206 return $pageObjectGUI;
207 }
208
209 protected function buildPreviewPageObjectGUI(string $language): ilContentPagePageGUI
210 {
211 $this->ensurePageObjectExists($language);
212
213 $pageObjectGUI = $this->getPageObjectGUI($language);
214
215 $pageObjectGUI->setStyleId(
216 $this->content_style_domain->getEffectiveStyleId()
217 );
218
219 $pageObjectGUI->setTabHook($this, 'addPageTabs');
220
221 return $pageObjectGUI;
222 }
223
225 {
226 $this->ensurePageObjectExists($language);
227
228 $pageObjectGUI = $this->getPageObjectGUI($language, true);
229 $pageObjectGUI->setEnabledTabs(false);
230
231 $pageObjectGUI->setStyleId(
232 $this->content_style_domain->getEffectiveStyleId()
233 );
234
235 return $pageObjectGUI;
236 }
237
238 public function setPresentationMode(string $presentationMode): void
239 {
240 $this->presentationMode = $presentationMode;
241 }
242
249 public function forward(string $ctrlLink = ''): string
250 {
251 $ot = ilObjectTranslation::getInstance($this->parentObject->getId());
252 $language = $ot->getEffectiveContentLang($this->actor->getCurrentLanguage(), $this->parentObject->getType());
253
254 switch ($this->presentationMode) {
256
257 $pageObjectGui = $this->buildEditingPageObjectGUI($this->isMediaRequest ? $language : '');
258 return (string) $this->ctrl->forwardCommand($pageObjectGui);
259
261 $pageObjectGui = $this->buildPreviewPageObjectGUI($this->isMediaRequest ? $language : '');
262 return $this->ctrl->getHTML($pageObjectGui);
263
265 $pageObjectGUI = $this->buildPresentationPageObjectGUI($language);
266
267 if (is_string($ctrlLink) && $ctrlLink !== '') {
268 $pageObjectGUI->setFileDownloadLink($ctrlLink . '&cmd=' . self::UI_CMD_COPAGE_DOWNLOAD_FILE);
269 $pageObjectGUI->setFullscreenLink($ctrlLink . '&cmd=' . self::UI_CMD_COPAGE_DISPLAY_FULLSCREEN);
270 $pageObjectGUI->setSourcecodeDownloadScript($ctrlLink . '&cmd=' . self::UI_CMD_COPAGE_DOWNLOAD_PARAGRAPH);
271 }
272
273 return $this->ctrl->getHTML($pageObjectGUI);
274
276 $pageObjectGUI = $this->buildEmbeddedPresentationPageObjectGUI($language);
277
278 if (is_string($ctrlLink) && $ctrlLink !== '') {
279 $pageObjectGUI->setFileDownloadLink($ctrlLink . '&cmd=' . self::UI_CMD_COPAGE_DOWNLOAD_FILE);
280 $pageObjectGUI->setFullscreenLink($ctrlLink . '&cmd=' . self::UI_CMD_COPAGE_DISPLAY_FULLSCREEN);
281 $pageObjectGUI->setSourcecodeDownloadScript($ctrlLink . '&cmd=' . self::UI_CMD_COPAGE_DOWNLOAD_PARAGRAPH);
282 }
283
284 return $pageObjectGUI->getHTML();
285
286 default:
287 throw new ilException('Unknown presentation mode given');
288 }
289 }
290}
Builds data types.
Definition: Factory.php:21
External facade for object content styles.
const PRESENTATION_MODE_EDITING
presentation mode for authoring
__construct(GlobalHttpState $http, ilCtrlInterface $ctrl, ilTabsGUI $tabs, ilLanguage $lng, ilObjContentPage $parentObject, ilObjUser $actor, Refinery $refinery, ObjectFacade $content_style_domain)
const PRESENTATION_MODE_EMBEDDED_PRESENTATION
presentation mode for embedded presentation, e.g.
const PRESENTATION_MODE_PRESENTATION
presentation mode for requesting
getPageObjectGUI(string $language, bool $isEmbedded=false)
@ilCtrl_Calls ilContentPagePageGUI: ilPageEditorGUI, ilEditClipboardGUI, ilMDEditorGUI @ilCtrl_Calls ...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
language handling
User class.
static getInstance(int $obj_id)
static _exists(string $a_parent_type, int $a_id, string $a_lang="", bool $a_no_cache=false)
Checks whether page exists.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static stripSlashes(string $a_str, bool $a_strip_html=true, string $a_allow="")
Interface GlobalHttpState.
Interface ilContentPageObjectConstants.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static http()
Fetches the global http state from ILIAS.