ILIAS  trunk Revision v11.0_alpha-1843-g9e1fad99175
All Data Structures Namespaces Files Functions Variables Enumerations Enumerator Modules Pages
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;
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) {
180  case self::PRESENTATION_MODE_EDITING:
181 
182  $pageObjectGui = $this->buildEditingPageObjectGUI(self::DEFAULT_LANGUAGE);
183  return (string) $this->ctrl->forwardCommand($pageObjectGui);
184 
185  case self::PRESENTATION_MODE_PRESENTATION:
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 
196  case self::PRESENTATION_MODE_EMBEDDED_PRESENTATION:
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 }
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.
$http
Definition: deliver.php:30
setStyleId(int $a_styleid)
getPageObjectGUI(string $language, bool $isEmbedded=false)
static http()
Fetches the global http state from ILIAS.
__construct(protected GlobalHttpState $http, protected ilCtrlInterface $ctrl, protected ilTabsGUI $tabs, protected ilLanguage $lng, protected ilObjForum $parentObject, protected ilObjUser $actor, protected ObjectFacade $content_style_domain)
static _exists(string $a_parent_type, int $a_id, string $a_lang="", bool $a_no_cache=false)
Checks whether page exists.
global $lng
Definition: privfeed.php:31
const PRESENTATION_MODE_PRESENTATION
presentation mode for requesting
const PRESENTATION_MODE_EMBEDDED_PRESENTATION
presentation mode for embedded presentation, e.g.
ilForumPageGUI: ilPageEditorGUI, ilEditClipboardGUI, ilMDEditorGUI ilForumPageGUI: ilPublicUserProfi...