ILIAS  release_7 Revision v7.30-3-g800a261c036
class.ilContentPagePageCommandForwarder.php
Go to the documentation of this file.
1<?php
2/* Copyright (c) 1998-2018 ILIAS open source, Extended GPL, see docs/LICENSE */
3
4use Psr\Http\Message\ServerRequestInterface;
6
11{
15 const PRESENTATION_MODE_EDITING = 'PRESENTATION_MODE_EDITING';
16
20 const PRESENTATION_MODE_PRESENTATION = 'PRESENTATION_MODE_PRESENTATION';
21
25 const PRESENTATION_MODE_EMBEDDED_PRESENTATION = 'PRESENTATION_MODE_EMBEDDED_PRESENTATION';
26 public const PRESENTATION_MODE_PREVIEW = 'PRESENTATION_MODE_PREVIEW';
27
31 protected $ctrl;
33 protected $lng;
35 protected $tabs;
37 protected $parentObject;
39 protected $backUrl = '';
41 protected $actor;
43 protected $updateListeners = [];
44 protected $isMediaRequest = false;
45
55 public function __construct(
56 ServerRequestInterface $request,
62 ) {
63 $this->ctrl = $ctrl;
64 $this->tabs = $tabs;
65 $this->lng = $lng;
66 $this->parentObject = $parentObject;
67 $this->actor = $actor;
68
69 $this->lng->loadLanguageModule('content');
70
71 $this->backUrl = $request->getQueryParams()['backurl'] ?? '';
72
73 if (strlen($this->backUrl) > 0) {
74 $this->ctrl->setParameterByClass('ilcontentpagepagegui', 'backurl', rawurlencode($this->backUrl));
75 }
76 }
77
78 public function setIsMediaRequest(bool $isMediaRequest) : void
79 {
80 $this->isMediaRequest = $isMediaRequest;
81 }
82
86 public function onPageUpdate(array $parameters) : void
87 {
88 foreach ($this->updateListeners as $listener) {
89 call_user_func_array(
90 $listener,
91 [
92 new PageUpdatedEvent($parameters['page'])
93 ]
94 );
95 }
96 }
97
98 public function addPageTabs() : void
99 {
100 $this->ctrl->setParameterByClass(ilObjContentPageGUI::class, self::HTTP_PARAM_PAGE_EDITOR_STYLE_CONTEXT, '1');
101 $this->tabs->addTarget(
102 'obj_sty',
103 $this->ctrl->getLinkTargetByClass([
104 ilRepositoryGUI::class,
105 ilObjContentPageGUI::class
106 ], self::UI_CMD_STYLES_EDIT),
107 self::UI_CMD_STYLES_EDIT
108 );
109 $this->ctrl->setParameterByClass(ilObjContentPageGUI::class, self::HTTP_PARAM_PAGE_EDITOR_STYLE_CONTEXT, null);
110 }
111
115 public function addUpdateListener(callable $updateListener) : void
116 {
117 $this->updateListeners[] = $updateListener;
118 }
119
125 protected function getPageObjectGUI(string $language, bool $isEmbedded = false) : ilContentPagePageGUI
126 {
127 $pageObjectGUI = new ilContentPagePageGUI($this->parentObject->getId(), 0, $isEmbedded, $language);
128 $pageObjectGUI->setStyleId(
130 $this->parentObject->getStyleSheetId(),
131 $this->parentObject->getType()
132 )
133 );
134
135 $pageObjectGUI->obj->addUpdateListener($this->parentObject, 'update');
136
137 return $pageObjectGUI;
138 }
139
144 protected function doesPageExistsForLanguage(string $language) : bool
145 {
146 return ilContentPagePage::_exists($this->parentObject->getType(), $this->parentObject->getId(), $language);
147 }
148
152 protected function ensurePageObjectExists(string $language)
153 {
154 if (!$this->doesPageExistsForLanguage($language)) {
155 $pageObject = new ilContentPagePage();
156 $pageObject->setParentId($this->parentObject->getId());
157 $pageObject->setId($this->parentObject->getId());
158 $pageObject->setLanguage($language);
159 $pageObject->createFromXML();
160 }
161 }
162
166 protected function setBackLinkTab() : void
167 {
168 $backUrl = $this->ctrl->getLinkTargetByClass(ilContentPagePageGUI::class, self::UI_CMD_COPAGE_EDIT);
169 if (strlen($this->backUrl) > 0) {
170 $backUrlParts = parse_url(ilUtil::stripSlashes($this->backUrl));
171
172 $script = basename($backUrlParts['path']);
173
174 $backUrl = './' . implode('?', [
175 $script, $backUrlParts['query']
176 ]);
177 }
178
179 $this->tabs->setBackTarget($this->lng->txt('back'), $backUrl);
180 }
181
186 protected function buildEditingPageObjectGUI(string $language) : ilContentPagePageGUI
187 {
188 $this->tabs->clearTargets();
189
190 $this->setBackLinkTab();
191
192 $this->ensurePageObjectExists($language);
193
194 $pageObjectGUI = $this->getPageObjectGUI($language);
195 $pageObjectGUI->setEnabledTabs(true);
196
197 $page = $pageObjectGUI->getPageObject();
198 $page->addUpdateListener($this, 'onPageUpdate', ['page' => $page]);
199
200 $pageObjectGUI->setTabHook($this, 'addPageTabs');
201
202 return $pageObjectGUI;
203 }
204
209 protected function buildPresentationPageObjectGUI(string $language) : ilContentPagePageGUI
210 {
211 $this->ensurePageObjectExists($language);
212
213 $pageObjectGUI = $this->getPageObjectGUI($language);
214 $pageObjectGUI->setEnabledTabs(false);
215
216 $pageObjectGUI->setStyleId(
218 $this->parentObject->getStyleSheetId(),
219 $this->parentObject->getType()
220 )
221 );
222
223 return $pageObjectGUI;
224 }
225
226 protected function buildPreviewPageObjectGUI(string $language) : ilContentPagePageGUI
227 {
228 $this->ensurePageObjectExists($language);
229
230 $pageObjectGUI = $this->getPageObjectGUI($language);
231
232 $pageObjectGUI->setStyleId(
234 $this->parentObject->getStyleSheetId(),
235 $this->parentObject->getType()
236 )
237 );
238
239 $pageObjectGUI->setTabHook($this, 'addPageTabs');
240
241 return $pageObjectGUI;
242 }
243
249 {
250 $this->ensurePageObjectExists($language);
251
252 $pageObjectGUI = $this->getPageObjectGUI($language, true);
253 $pageObjectGUI->setEnabledTabs(false);
254
255 $pageObjectGUI->setStyleId(
257 $this->parentObject->getStyleSheetId(),
258 $this->parentObject->getType()
259 )
260 );
261
262 return $pageObjectGUI;
263 }
264
268 public function setPresentationMode(string $presentationMode) : void
269 {
270 $this->presentationMode = $presentationMode;
271 }
272
279 public function forward(string $ctrlLink = '') : string
280 {
281 $ot = ilObjectTranslation::getInstance($this->parentObject->getId());
282 $language = $ot->getEffectiveContentLang($this->actor->getCurrentLanguage(), $this->parentObject->getType());
283
284 switch ($this->presentationMode) {
286
287 $pageObjectGui = $this->buildEditingPageObjectGUI($this->isMediaRequest ? $language : '');
288 return (string) $this->ctrl->forwardCommand($pageObjectGui);
289
291 $pageObjectGui = $this->buildPreviewPageObjectGUI($this->isMediaRequest ? $language : '');
292 return (string) $this->ctrl->getHTML($pageObjectGui);
293
295 $pageObjectGUI = $this->buildPresentationPageObjectGUI($language);
296
297 if (is_string($ctrlLink) && strlen($ctrlLink) > 0) {
298 $pageObjectGUI->setFileDownloadLink($ctrlLink . '&cmd=' . self::UI_CMD_COPAGE_DOWNLOAD_FILE);
299 $pageObjectGUI->setFullscreenLink($ctrlLink . '&cmd=' . self::UI_CMD_COPAGE_DISPLAY_FULLSCREEN);
300 $pageObjectGUI->setSourcecodeDownloadScript($ctrlLink . '&cmd=' . self::UI_CMD_COPAGE_DOWNLOAD_PARAGRAPH);
301 }
302
303 return $this->ctrl->getHTML($pageObjectGUI);
304
306 $pageObjectGUI = $this->buildEmbeddedPresentationPageObjectGUI($language);
307
308 if (is_string($ctrlLink) && strlen($ctrlLink) > 0) {
309 $pageObjectGUI->setFileDownloadLink($ctrlLink . '&cmd=' . self::UI_CMD_COPAGE_DOWNLOAD_FILE);
310 $pageObjectGUI->setFullscreenLink($ctrlLink . '&cmd=' . self::UI_CMD_COPAGE_DISPLAY_FULLSCREEN);
311 $pageObjectGUI->setSourcecodeDownloadScript($ctrlLink . '&cmd=' . self::UI_CMD_COPAGE_DOWNLOAD_PARAGRAPH);
312 }
313
314 return $pageObjectGUI->getHTML();
315
316 default:
317 throw new ilException('Unknown presentation mode given');
318 }
319 }
320}
An exception for terminatinating execution or to throw for unit testing.
const PRESENTATION_MODE_EDITING
presentation mode for authoring
__construct(ServerRequestInterface $request, ilCtrl $ctrl, ilTabsGUI $tabs, ilLanguage $lng, ilObjContentPage $parentObject, ilObjUser $actor)
ilContentPagePageCommandForwarder constructor.
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)
Class ilContentPagePageGUI @ilCtrl_Calls ilContentPagePageGUI: ilPageEditorGUI, ilEditClipboardGUI,...
Class ilContentPagePage.
This class provides processing control methods.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
language handling
Class ilObjContentPage.
static getEffectiveContentStyleId($a_style_id, $a_type="")
Get effective Style Id.
static getInstance($a_obj_id)
Get instance.
static _exists($a_parent_type, $a_id, $a_lang="", $a_no_cache=false)
Checks whether page exists.
Tabs GUI.
static stripSlashes($a_str, $a_strip_html=true, $a_allow="")
strip slashes if magic qoutes is enabled
Interface ilContentPageObjectConstants.