ILIAS  trunk Revision v11.0_alpha-1715-g7fc467680fb
All Data Structures Namespaces Files Functions Variables Enumerations Enumerator Modules Pages
class.ilContentPagePageCommandForwarder.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
25 
27 {
31  final public const PRESENTATION_MODE_EDITING = 'PRESENTATION_MODE_EDITING';
32 
36  final public const PRESENTATION_MODE_PRESENTATION = 'PRESENTATION_MODE_PRESENTATION';
37 
41  final public const PRESENTATION_MODE_EMBEDDED_PRESENTATION = 'PRESENTATION_MODE_EMBEDDED_PRESENTATION';
42  final public const PRESENTATION_MODE_PREVIEW = 'PRESENTATION_MODE_PREVIEW';
43 
44  protected string $presentationMode = self::PRESENTATION_MODE_EDITING;
45  protected string $backUrl = '';
47  protected array $updateListeners = [];
48  protected bool $isMediaRequest = false;
49 
50  public function __construct(
51  protected GlobalHttpState $http,
52  protected ilCtrlInterface $ctrl,
53  protected ilTabsGUI $tabs,
54  protected ilLanguage $lng,
55  protected ilObjContentPage $parentObject,
56  protected ilObjUser $actor,
57  protected Refinery $refinery,
58  protected ObjectFacade $content_style_domain
59  ) {
60  $this->lng->loadLanguageModule('content');
61 
62  $this->backUrl = '';
63  if ($this->http->wrapper()->query()->has('backurl')) {
64  $this->backUrl = $this->http->wrapper()->query()->retrieve(
65  'backurl',
66  $this->refinery->kindlyTo()->string()
67  );
68  }
69 
70  if ($this->backUrl !== '') {
71  $this->ctrl->setParameterByClass(ilContentPagePageGUI::class, 'backurl', rawurlencode($this->backUrl));
72  }
73  }
74 
75  public function setIsMediaRequest(bool $isMediaRequest): void
76  {
77  $this->isMediaRequest = $isMediaRequest;
78  }
79 
83  public function onPageUpdate(array $parameters): void
84  {
85  foreach ($this->updateListeners as $listener) {
86  $listener(new PageUpdatedEvent($parameters['page']));
87  }
88  }
89 
90  public function addPageTabs(): void
91  {
92  $this->ctrl->setParameterByClass(ilObjectContentStyleSettingsGUI::class, self::HTTP_PARAM_PAGE_EDITOR_STYLE_CONTEXT, '1');
93  $this->tabs->addTarget(
94  'obj_sty',
95  $this->ctrl->getLinkTargetByClass(ilObjectContentStyleSettingsGUI::class),
96  'editStyleProperties',
97  strtolower(ilObjectContentStyleSettingsGUI::class)
98  );
99  $this->ctrl->setParameterByClass(ilObjContentPageGUI::class, self::HTTP_PARAM_PAGE_EDITOR_STYLE_CONTEXT, null);
100  }
101 
105  public function updateContentPageOnPageUpdate(array $parameters): void
106  {
107  $this->parentObject->update();
108  }
109 
110  public function addUpdateListener(callable $updateListener): void
111  {
112  $this->updateListeners[] = $updateListener;
113  }
114 
115  protected function getPageObjectGUI(string $language, bool $isEmbedded = false): ilContentPagePageGUI
116  {
117  $pageObjectGUI = new ilContentPagePageGUI($this->parentObject->getId(), 0, $isEmbedded, $language);
118  $pageObjectGUI->setStyleId(
119  $this->content_style_domain->getEffectiveStyleId()
120  );
121 
122  $pageObjectGUI->obj->addUpdateListener($this, 'updateContentPageOnPageUpdate', []);
123 
124  return $pageObjectGUI;
125  }
126 
127  protected function doesPageExistsForLanguage(string $language): bool
128  {
129  return ilContentPagePage::_exists($this->parentObject->getType(), $this->parentObject->getId(), $language);
130  }
131 
132  protected function ensurePageObjectExists(string $language): void
133  {
134  if (!$this->doesPageExistsForLanguage($language)) {
135  $pageObject = new ilContentPagePage();
136  $pageObject->setParentId($this->parentObject->getId());
137  $pageObject->setId($this->parentObject->getId());
138  $pageObject->setLanguage($language);
139  $pageObject->createFromXML();
140  }
141  }
142 
143  protected function setBackLinkTab(): void
144  {
145  $backUrl = $this->ctrl->getLinkTargetByClass(ilContentPagePageGUI::class, self::UI_CMD_COPAGE_EDIT);
146  if ($this->backUrl !== '') {
147  $backUrlParts = parse_url(ilUtil::stripSlashes($this->backUrl));
148 
149  $script = basename($backUrlParts['path']);
150 
151  $backUrl = './' . implode('?', [
152  $script, $backUrlParts['query']
153  ]);
154  }
155 
156  $this->tabs->setBackTarget($this->lng->txt('back'), $backUrl);
157  }
158 
159  protected function buildEditingPageObjectGUI(string $language): ilContentPagePageGUI
160  {
161  $this->tabs->clearTargets();
162 
163  $this->setBackLinkTab();
164 
165  $this->ensurePageObjectExists($language);
166 
167  $pageObjectGUI = $this->getPageObjectGUI($language);
168  $pageObjectGUI->setEnabledTabs(true);
169 
170  $page = $pageObjectGUI->getPageObject();
171  $page->addUpdateListener($this, 'onPageUpdate', ['page' => $page]);
172 
173  $pageObjectGUI->setTabHook($this, 'addPageTabs');
174 
175  return $pageObjectGUI;
176  }
177 
178  protected function buildPresentationPageObjectGUI(string $language): ilContentPagePageGUI
179  {
180  $this->ensurePageObjectExists($language);
181 
182  $pageObjectGUI = $this->getPageObjectGUI($language);
183  $pageObjectGUI->setEnabledTabs(false);
184 
185  $pageObjectGUI->setStyleId(
186  $this->content_style_domain->getEffectiveStyleId()
187  );
188 
189  return $pageObjectGUI;
190  }
191 
192  protected function buildPreviewPageObjectGUI(string $language): ilContentPagePageGUI
193  {
194  $this->ensurePageObjectExists($language);
195 
196  $pageObjectGUI = $this->getPageObjectGUI($language);
197 
198  $pageObjectGUI->setStyleId(
199  $this->content_style_domain->getEffectiveStyleId()
200  );
201 
202  $pageObjectGUI->setTabHook($this, 'addPageTabs');
203 
204  return $pageObjectGUI;
205  }
206 
207  protected function buildEmbeddedPresentationPageObjectGUI(string $language): ilContentPagePageGUI
208  {
209  $this->ensurePageObjectExists($language);
210 
211  $pageObjectGUI = $this->getPageObjectGUI($language, true);
212  $pageObjectGUI->setEnabledTabs(false);
213 
214  $pageObjectGUI->setStyleId(
215  $this->content_style_domain->getEffectiveStyleId()
216  );
217 
218  return $pageObjectGUI;
219  }
220 
221  public function setPresentationMode(string $presentationMode): void
222  {
223  $this->presentationMode = $presentationMode;
224  }
225 
230  public function forward(string $ctrlLink = ''): string
231  {
232  $ot = ilObjectTranslation::getInstance($this->parentObject->getId());
233  $language = $ot->getEffectiveContentLang($this->actor->getCurrentLanguage(), $this->parentObject->getType());
234 
235  switch ($this->presentationMode) {
236  case self::PRESENTATION_MODE_EDITING:
237 
238  $pageObjectGui = $this->buildEditingPageObjectGUI($this->isMediaRequest ? $language : '');
239  return (string) $this->ctrl->forwardCommand($pageObjectGui);
240 
241  case self::PRESENTATION_MODE_PREVIEW:
242  $pageObjectGui = $this->buildPreviewPageObjectGUI($this->isMediaRequest ? $language : '');
243  return $this->ctrl->getHTML($pageObjectGui);
244 
245  case self::PRESENTATION_MODE_PRESENTATION:
246  $pageObjectGUI = $this->buildPresentationPageObjectGUI($language);
247 
248  if (is_string($ctrlLink) && $ctrlLink !== '') {
249  $pageObjectGUI->setFileDownloadLink($ctrlLink . '&cmd=' . self::UI_CMD_COPAGE_DOWNLOAD_FILE);
250  $pageObjectGUI->setFullscreenLink($ctrlLink . '&cmd=' . self::UI_CMD_COPAGE_DISPLAY_FULLSCREEN);
251  $pageObjectGUI->setSourcecodeDownloadScript($ctrlLink . '&cmd=' . self::UI_CMD_COPAGE_DOWNLOAD_PARAGRAPH);
252  }
253 
254  return $this->ctrl->getHTML($pageObjectGUI);
255 
256  case self::PRESENTATION_MODE_EMBEDDED_PRESENTATION:
257  $pageObjectGUI = $this->buildEmbeddedPresentationPageObjectGUI($language);
258 
259  if (is_string($ctrlLink) && $ctrlLink !== '') {
260  $pageObjectGUI->setFileDownloadLink($ctrlLink . '&cmd=' . self::UI_CMD_COPAGE_DOWNLOAD_FILE);
261  $pageObjectGUI->setFullscreenLink($ctrlLink . '&cmd=' . self::UI_CMD_COPAGE_DISPLAY_FULLSCREEN);
262  $pageObjectGUI->setSourcecodeDownloadScript($ctrlLink . '&cmd=' . self::UI_CMD_COPAGE_DOWNLOAD_PARAGRAPH);
263  }
264 
265  return $pageObjectGUI->getHTML();
266 
267  default:
268  throw new ilException('Unknown presentation mode given');
269  }
270  }
271 }
getPageObjectGUI(string $language, bool $isEmbedded=false)
__construct(protected GlobalHttpState $http, protected ilCtrlInterface $ctrl, protected ilTabsGUI $tabs, protected ilLanguage $lng, protected ilObjContentPage $parentObject, protected ilObjUser $actor, protected Refinery $refinery, protected ObjectFacade $content_style_domain)
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="")
final const PRESENTATION_MODE_EMBEDDED_PRESENTATION
presentation mode for embedded presentation, e.g.
External facade for object content styles.
$http
Definition: deliver.php:30
while($session_entry=$r->fetchRow(ilDBConstants::FETCHMODE_ASSOC)) return null
static http()
Fetches the global http state from ILIAS.
static _exists(string $a_parent_type, int $a_id, string $a_lang="", bool $a_no_cache=false)
Checks whether page exists.
static getInstance(int $obj_id)
final const PRESENTATION_MODE_EDITING
presentation mode for authoring
global $lng
Definition: privfeed.php:31
final const PRESENTATION_MODE_PRESENTATION
presentation mode for requesting