ILIAS  release_8 Revision v8.23
class.ilForumPageCommandForwarder.php
Go to the documentation of this file.
1 <?php
2 
19 declare(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 
42  protected string $presentationMode = self::PRESENTATION_MODE_EDITING;
44  protected ilLanguage $lng;
45  protected ilTabsGUI $tabs;
47  protected string $backUrl = '';
48  protected ilObjUser $actor;
51 
52  public function __construct(
53  GlobalHttpState $http,
54  ilCtrlInterface $ctrl,
55  ilTabsGUI $tabs,
56  ilLanguage $lng,
57  ilObjForum $parentObject,
58  ilObjUser $actor,
59  ObjectFacade $content_style_domain
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) {
197  case self::PRESENTATION_MODE_EDITING:
198 
199  $pageObjectGui = $this->buildEditingPageObjectGUI(self::DEFAULT_LANGUAGE);
200  return (string) $this->ctrl->forwardCommand($pageObjectGui);
201 
202  case self::PRESENTATION_MODE_PRESENTATION:
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 
213  case self::PRESENTATION_MODE_EMBEDDED_PRESENTATION:
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 }
Interface GlobalHttpState.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
const PRESENTATION_MODE_EDITING
presentation mode for authoring
static stripSlashes(string $a_str, bool $a_strip_html=true, string $a_allow="")
External facade for object content styles.
__construct(GlobalHttpState $http, ilCtrlInterface $ctrl, ilTabsGUI $tabs, ilLanguage $lng, ilObjForum $parentObject, ilObjUser $actor, ObjectFacade $content_style_domain)
setStyleId(int $a_styleid)
getPageObjectGUI(string $language, bool $isEmbedded=false)
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.
const PRESENTATION_MODE_PRESENTATION
presentation mode for requesting
const PRESENTATION_MODE_EMBEDDED_PRESENTATION
presentation mode for embedded presentation, e.g.
Class ilObjForum.
ilForumPageGUI: ilPageEditorGUI, ilEditClipboardGUI, ilMDEditorGUI ilForumPageGUI: ilPublicUserProfi...