ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
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
43 protected string $backUrl = '';
44
45 public function __construct(
46 protected GlobalHttpState $http,
47 protected ilCtrlInterface $ctrl,
48 protected ilTabsGUI $tabs,
49 protected ilLanguage $lng,
50 protected ilObjForum $parentObject,
51 protected ilObjUser $actor,
52 protected ObjectFacade $content_style_domain
53 ) {
54 $this->lng->loadLanguageModule('content');
55
56 $this->backUrl = '';
57 if (isset($this->http->request()->getQueryParams()['backurl'])) {
58 $this->backUrl = $this->http->request()->getQueryParams()['backurl'];
59 }
60
61 if ($this->backUrl !== '') {
62 $this->ctrl->setParameterByClass(ilForumPageGUI::class, 'backurl', rawurlencode($this->backUrl));
63 }
64 }
65
69 public function onPageUpdate(array $parameters): void
70 {
71 }
72
76 public function updateForumOnPageUpdate(array $parameters): void
77 {
78 $this->parentObject->update();
79 }
80
81 protected function getPageObjectGUI(string $language, bool $isEmbedded = false): ilForumPageGUI
82 {
83 $pageObjectGUI = new ilForumPageGUI($this->parentObject->getId(), 0, $isEmbedded, $language);
84 $pageObjectGUI->setStyleId(
85 $this->content_style_domain->getEffectiveStyleId()
86 );
87
88 $pageObjectGUI->obj->addUpdateListener($this, 'updateForumOnPageUpdate', []);
89
90 return $pageObjectGUI;
91 }
92
93 protected function doesPageExistsForLanguage(string $language): bool
94 {
95 return ilForumPage::_exists($this->parentObject->getType(), $this->parentObject->getId(), $language);
96 }
97
98 protected function ensurePageObjectExists(string $language): void
99 {
100 if (!$this->doesPageExistsForLanguage($language)) {
101 $pageObject = new ilForumPage();
102 $pageObject->setParentId($this->parentObject->getId());
103 $pageObject->setId($this->parentObject->getId());
104 $pageObject->setLanguage($language);
105 $pageObject->createFromXML();
106 }
107 }
108
109 protected function setBackLinkTab(): void
110 {
111 $backUrl = $this->ctrl->getLinkTargetByClass(ilObjForumGUI::class, 'showThreads');
112 if ($this->backUrl !== '') {
113 $backUrlParts = parse_url(ilUtil::stripSlashes($this->backUrl));
114
115 $script = basename($backUrlParts['path']);
116
117 $backUrl = './' . implode('?', [
118 $script, $backUrlParts['query']
119 ]);
120 }
121
122 $this->tabs->setBackTarget($this->lng->txt('back'), $backUrl);
123 }
124
125 protected function buildEditingPageObjectGUI(string $language): ilForumPageGUI
126 {
127 $this->tabs->clearTargets();
128
129 $this->setBackLinkTab();
130
131 $this->ensurePageObjectExists($language);
132
133 $pageObjectGUI = $this->getPageObjectGUI($language);
134 $pageObjectGUI->setEnabledTabs(true);
135
136 $page = $pageObjectGUI->getPageObject();
137 $page->addUpdateListener($this, 'onPageUpdate', ['page' => $page]);
138
139 return $pageObjectGUI;
140 }
141
142 protected function buildPresentationPageObjectGUI(string $language): ilForumPageGUI
143 {
144 $this->ensurePageObjectExists($language);
145
146 $pageObjectGUI = $this->getPageObjectGUI($language);
147 $pageObjectGUI->setEnabledTabs(false);
148 $pageObjectGUI->setStyleId(
149 $this->content_style_domain->getEffectiveStyleId()
150 );
151
152 return $pageObjectGUI;
153 }
154
155 protected function buildEmbeddedPresentationPageObjectGUI(string $language): ilForumPageGUI
156 {
157 $this->ensurePageObjectExists($language);
158
159 $pageObjectGUI = $this->getPageObjectGUI($language, true);
160 $pageObjectGUI->setEnabledTabs(false);
161 $pageObjectGUI->setStyleId(
162 $this->content_style_domain->getEffectiveStyleId()
163 );
164
165 return $pageObjectGUI;
166 }
167
168 public function setPresentationMode(string $presentationMode): void
169 {
170 $this->presentationMode = $presentationMode;
171 }
172
177 public function forward(string $ctrlLink = ''): string
178 {
179 switch ($this->presentationMode) {
181
182 $pageObjectGui = $this->buildEditingPageObjectGUI(self::DEFAULT_LANGUAGE);
183 return (string) $this->ctrl->forwardCommand($pageObjectGui);
184
186 $pageObjectGUI = $this->buildPresentationPageObjectGUI(self::DEFAULT_LANGUAGE);
187
188 if (is_string($ctrlLink) && $ctrlLink !== '') {
189 $pageObjectGUI->setFileDownloadLink($ctrlLink . '&cmd=' . self::UI_CMD_COPAGE_DOWNLOAD_FILE);
190 $pageObjectGUI->setFullscreenLink($ctrlLink . '&cmd=' . self::UI_CMD_COPAGE_DISPLAY_FULLSCREEN);
191 $pageObjectGUI->setSourcecodeDownloadScript($ctrlLink . '&cmd=' . self::UI_CMD_COPAGE_DOWNLOAD_PARAGRAPH);
192 }
193
194 return $this->ctrl->getHTML($pageObjectGUI);
195
197 $pageObjectGUI = $this->buildEmbeddedPresentationPageObjectGUI(self::DEFAULT_LANGUAGE);
198
199 if (is_string($ctrlLink) && $ctrlLink !== '') {
200 $pageObjectGUI->setFileDownloadLink($ctrlLink . '&cmd=' . self::UI_CMD_COPAGE_DOWNLOAD_FILE);
201 $pageObjectGUI->setFullscreenLink($ctrlLink . '&cmd=' . self::UI_CMD_COPAGE_DISPLAY_FULLSCREEN);
202 $pageObjectGUI->setSourcecodeDownloadScript($ctrlLink . '&cmd=' . self::UI_CMD_COPAGE_DOWNLOAD_PARAGRAPH);
203 }
204
205 return $pageObjectGUI->getHTML();
206
207 default:
208 throw new ilException('Unknown presentation mode given');
209 }
210 }
211}
External facade for object content styles.
Base class for ILIAS Exception handling.
getPageObjectGUI(string $language, bool $isEmbedded=false)
__construct(protected GlobalHttpState $http, protected ilCtrlInterface $ctrl, protected ilTabsGUI $tabs, protected ilLanguage $lng, protected ilObjForum $parentObject, protected ilObjUser $actor, protected ObjectFacade $content_style_domain)
const PRESENTATION_MODE_PRESENTATION
presentation mode for requesting
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="")
$http
Definition: deliver.php:30
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.
global $lng
Definition: privfeed.php:31