ILIAS  release_8 Revision v8.25
class.ilForumPageCommandForwarder.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
23
25{
29 public const PRESENTATION_MODE_EDITING = 'PRESENTATION_MODE_EDITING';
30
34 public const PRESENTATION_MODE_PRESENTATION = 'PRESENTATION_MODE_PRESENTATION';
35
39 public const PRESENTATION_MODE_EMBEDDED_PRESENTATION = 'PRESENTATION_MODE_EMBEDDED_PRESENTATION';
40 public const DEFAULT_LANGUAGE = '-';
41
44 protected ilLanguage $lng;
45 protected ilTabsGUI $tabs;
47 protected string $backUrl = '';
48 protected ilObjUser $actor;
51
52 public function __construct(
60 ) {
61 $this->http = $http;
62 $this->ctrl = $ctrl;
63 $this->tabs = $tabs;
64 $this->lng = $lng;
65 $this->parentObject = $parentObject;
66 $this->actor = $actor;
67 $this->content_style_domain = $content_style_domain;
68
69 $this->lng->loadLanguageModule('content');
70
71 $this->backUrl = '';
72 if (isset($this->http->request()->getQueryParams()['backurl'])) {
73 $this->backUrl = $this->http->request()->getQueryParams()['backurl'];
74 }
75
76 if ($this->backUrl !== '') {
77 $this->ctrl->setParameterByClass(ilForumPageGUI::class, 'backurl', rawurlencode($this->backUrl));
78 }
79 }
80
84 public function onPageUpdate(array $parameters): void
85 {
86 }
87
91 public function updateForumOnPageUpdate(array $parameters): void
92 {
93 $this->parentObject->update();
94 }
95
96 protected function getPageObjectGUI(string $language, bool $isEmbedded = false): ilForumPageGUI
97 {
98 $pageObjectGUI = new ilForumPageGUI($this->parentObject->getId(), 0, $isEmbedded, $language);
99 $pageObjectGUI->setStyleId(
100 $this->content_style_domain->getEffectiveStyleId()
101 );
102
103 $pageObjectGUI->obj->addUpdateListener($this, 'updateForumOnPageUpdate', []);
104
105 return $pageObjectGUI;
106 }
107
108 protected function doesPageExistsForLanguage(string $language): bool
109 {
110 return ilForumPage::_exists($this->parentObject->getType(), $this->parentObject->getId(), $language);
111 }
112
113 protected function ensurePageObjectExists(string $language): void
114 {
115 if (!$this->doesPageExistsForLanguage($language)) {
116 $pageObject = new ilForumPage();
117 $pageObject->setParentId($this->parentObject->getId());
118 $pageObject->setId($this->parentObject->getId());
119 $pageObject->setLanguage($language);
120 $pageObject->createFromXML();
121 }
122 }
123
124 protected function setBackLinkTab(): void
125 {
126 $backUrl = $this->ctrl->getLinkTargetByClass(ilObjForumGUI::class, 'showThreads');
127 if ($this->backUrl !== '') {
128 $backUrlParts = parse_url(ilUtil::stripSlashes($this->backUrl));
129
130 $script = basename($backUrlParts['path']);
131
132 $backUrl = './' . implode('?', [
133 $script, $backUrlParts['query']
134 ]);
135 }
136
137 $this->tabs->setBackTarget($this->lng->txt('back'), $backUrl);
138 }
139
140 protected function buildEditingPageObjectGUI(string $language): ilForumPageGUI
141 {
142 $this->tabs->clearTargets();
143
144 $this->setBackLinkTab();
145
146 $this->ensurePageObjectExists($language);
147
148 $pageObjectGUI = $this->getPageObjectGUI($language);
149 $pageObjectGUI->setEnabledTabs(true);
150
151 $page = $pageObjectGUI->getPageObject();
152 $page->addUpdateListener($this, 'onPageUpdate', ['page' => $page]);
153
154 return $pageObjectGUI;
155 }
156
157 protected function buildPresentationPageObjectGUI(string $language): ilForumPageGUI
158 {
159 $this->ensurePageObjectExists($language);
160
161 $pageObjectGUI = $this->getPageObjectGUI($language);
162 $pageObjectGUI->setEnabledTabs(false);
163 $pageObjectGUI->setStyleId(
164 $this->content_style_domain->getEffectiveStyleId()
165 );
166
167 return $pageObjectGUI;
168 }
169
170 protected function buildEmbeddedPresentationPageObjectGUI(string $language): ilForumPageGUI
171 {
172 $this->ensurePageObjectExists($language);
173
174 $pageObjectGUI = $this->getPageObjectGUI($language, true);
175 $pageObjectGUI->setEnabledTabs(false);
176 $pageObjectGUI->setStyleId(
177 $this->content_style_domain->getEffectiveStyleId()
178 );
179
180 return $pageObjectGUI;
181 }
182
183 public function setPresentationMode(string $presentationMode): void
184 {
185 $this->presentationMode = $presentationMode;
186 }
187
194 public function forward(string $ctrlLink = ''): string
195 {
196 switch ($this->presentationMode) {
198
199 $pageObjectGui = $this->buildEditingPageObjectGUI(self::DEFAULT_LANGUAGE);
200 return (string) $this->ctrl->forwardCommand($pageObjectGui);
201
203 $pageObjectGUI = $this->buildPresentationPageObjectGUI(self::DEFAULT_LANGUAGE);
204
205 if (is_string($ctrlLink) && $ctrlLink !== '') {
206 $pageObjectGUI->setFileDownloadLink($ctrlLink . '&cmd=' . self::UI_CMD_COPAGE_DOWNLOAD_FILE);
207 $pageObjectGUI->setFullscreenLink($ctrlLink . '&cmd=' . self::UI_CMD_COPAGE_DISPLAY_FULLSCREEN);
208 $pageObjectGUI->setSourcecodeDownloadScript($ctrlLink . '&cmd=' . self::UI_CMD_COPAGE_DOWNLOAD_PARAGRAPH);
209 }
210
211 return $this->ctrl->getHTML($pageObjectGUI);
212
214 $pageObjectGUI = $this->buildEmbeddedPresentationPageObjectGUI(self::DEFAULT_LANGUAGE);
215
216 if (is_string($ctrlLink) && $ctrlLink !== '') {
217 $pageObjectGUI->setFileDownloadLink($ctrlLink . '&cmd=' . self::UI_CMD_COPAGE_DOWNLOAD_FILE);
218 $pageObjectGUI->setFullscreenLink($ctrlLink . '&cmd=' . self::UI_CMD_COPAGE_DISPLAY_FULLSCREEN);
219 $pageObjectGUI->setSourcecodeDownloadScript($ctrlLink . '&cmd=' . self::UI_CMD_COPAGE_DOWNLOAD_PARAGRAPH);
220 }
221
222 return $pageObjectGUI->getHTML();
223
224 default:
225 throw new ilException('Unknown presentation mode given');
226 }
227 }
228}
External facade for object content styles.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
getPageObjectGUI(string $language, bool $isEmbedded=false)
const PRESENTATION_MODE_PRESENTATION
presentation mode for requesting
__construct(GlobalHttpState $http, ilCtrlInterface $ctrl, ilTabsGUI $tabs, ilLanguage $lng, ilObjForum $parentObject, ilObjUser $actor, ObjectFacade $content_style_domain)
const PRESENTATION_MODE_EDITING
presentation mode for authoring
const PRESENTATION_MODE_EMBEDDED_PRESENTATION
presentation mode for embedded presentation, e.g.
@ilCtrl_Calls ilForumPageGUI: ilPageEditorGUI, ilEditClipboardGUI, ilMDEditorGUI @ilCtrl_Calls ilForu...
language handling
Class ilObjForum.
User class.
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.
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.