ILIAS  trunk Revision v11.0_alpha-2638-g80c1d007f79
class.InteractiveImageCommandActionHandler.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
22 
25 
29 class InteractiveImageCommandActionHandler implements Server\CommandActionHandler
30 {
31  protected \ILIAS\DI\UIServices $ui;
32  protected \ilLanguage $lng;
33  protected \ilPageObjectGUI $page_gui;
34  protected \ilObjUser $user;
35  protected Server\UIWrapper $ui_wrapper;
36 
37  public function __construct(\ilPageObjectGUI $page_gui)
38  {
39  global $DIC;
40 
41  $this->ui = $DIC->ui();
42  $this->lng = $DIC->language();
43  $this->page_gui = $page_gui;
44  $this->user = $DIC->user();
45 
46  $this->ui_wrapper = new Server\UIWrapper($this->ui, $this->lng);
47  }
48 
49  public function handle(array $query, array $body): Server\Response
50  {
51  switch ($body["action"]) {
52  case "insert":
53  return $this->insertCommand($body);
54 
55  case "save.trigger.properties":
56  return $this->saveTriggerProperties($query['pc_id'], $body);
57 
58  case "save.trigger.overlay":
59  return $this->saveTriggerOverlay($query['pc_id'], $body);
60 
61  case "save.trigger.popup":
62  return $this->saveTriggerPopup($query['pc_id'], $body);
63 
64  case "upload.overlay":
65  return $this->uploadOverlay($query['pc_id'], $body);
66 
67  case "delete.overlay":
68  return $this->deleteOverlay($query['pc_id'], $body);
69 
70  case "save.popup":
71  return $this->savePopup($query['pc_id'], $body);
72 
73  case "delete.popup":
74  return $this->deletePopup($query['pc_id'], $body);
75 
76  case "delete.trigger":
77  return $this->deleteTrigger($query['pc_id'], $body);
78 
79  case "save.settings":
80  return $this->saveSettings($query['pc_id'], $body);
81 
82  default:
83  throw new Exception("Unknown action " . $body["action"]);
84  }
85  }
86 
87  protected function insertCommand(array $body): Server\Response
88  {
89  $page = $this->page_gui->getPageObject();
90 
91  $hier_id = "pg";
92  $pc_id = "";
93  if (!in_array($body["after_pcid"], ["", "pg"])) {
94  $hier_ids = $page->getHierIdsForPCIds([$body["after_pcid"]]);
95  $hier_id = $hier_ids[$body["after_pcid"]];
96  $pc_id = $body["after_pcid"];
97  }
98 
99  $iim = new \ilPCInteractiveImage($page);
100  $iim->create();
101  $iim_gui = new \ilPCInteractiveImageGUI($page, $iim, "", "");
102  $iim_gui->setPageConfig($page->getPageConfig());
103  $form = $iim_gui->getImportFormAdapter();
104  if ($form->isValid()) {
105  $iim->createFromMobId(
106  $page,
107  (int) $form->getData("input_file"),
108  $hier_id,
109  $pc_id
110  );
111  if (($body["pcid"] ?? "") !== "") {
112  $iim->writePCId($body["pcid"]);
113  }
114  $updated = $page->update();
115  return $this->ui_wrapper->sendPage($this->page_gui, $updated);
116  } else {
117  $html = $this->ui_wrapper->getRenderedAdapterForm(
118  $form,
119  [["Page", "component.save", $this->lng->txt("insert")],
120  ["Page", "component.cancel", $this->lng->txt("cancel")]
121  ]
122  );
123  return $this->ui_wrapper->sendFormError($html);
124  }
125  }
126  protected function saveTriggerProperties(string $pc_id, array $body): Server\Response
127  {
128  $page = $this->page_gui->getPageObject();
130  $pc = $this->page_gui->getPageObject()->getContentObjectForPcId($pc_id);
131  $pc->setTriggerProperties((string) $body["data"]["trigger_nr"], $body["data"]["title"], $body["data"]["shape_type"], $body["data"]["coords"], $body["data"]["hl_mode"], $body["data"]["hl_class"]);
132  $updated = $page->update();
133 
134  return $this->getStandardResponse($updated, $pc);
135  }
136 
137  protected function saveTriggerOverlay(string $pc_id, array $body): Server\Response
138  {
139  $page = $this->page_gui->getPageObject();
141  $pc = $this->page_gui->getPageObject()->getContentObjectForPcId($pc_id);
142  $pc->setTriggerOverlay((string) $body["data"]["trigger_nr"], (string) $body["data"]["overlay"], (string) $body["data"]["coords"]);
143  $updated = $page->update();
144 
145  return $this->getStandardResponse($updated, $pc);
146  }
147 
148  protected function saveTriggerPopup(string $pc_id, array $body): Server\Response
149  {
150  $page = $this->page_gui->getPageObject();
152  $pc = $this->page_gui->getPageObject()->getContentObjectForPcId($pc_id);
153  $pc->setTriggerPopup((string) $body["data"]["trigger_nr"], (string) $body["data"]["popup"], (string) $body["data"]["position"], (string) $body["data"]["size"]);
154  $updated = $page->update();
155 
156  return $this->getStandardResponse($updated, $pc);
157  }
158 
159  protected function getStandardResponse($updated, \ilPCInteractiveImage $pc): Server\Response
160  {
161  $error = false;
162  if ($updated !== true) {
163  if (is_array($updated)) {
164  $error = implode("<br />", $updated);
165  } elseif (is_string($updated)) {
166  $error = $updated;
167  } else {
168  $error = print_r($updated, true);
169  }
170  }
171 
172  $data = new \stdClass();
173  $data->error = $error;
174  $data->model = $pc->getIIMModel();
175  $data->backgroundImage = $pc->getBackgroundImage();
176  return new Server\Response($data);
177  }
178 
179  protected function uploadOverlay(string $pc_id, array $body): Server\Response
180  {
181  $page = $this->page_gui->getPageObject();
183  $pc = $this->page_gui->getPageObject()->getContentObjectForPcId($pc_id);
184 
185  $updated = $page->update();
186 
187  return $this->getStandardResponse($updated, $pc);
188  }
189 
190  protected function deleteOverlay(string $pc_id, array $body): Server\Response
191  {
192  $page = $this->page_gui->getPageObject();
193  $pc = $this->getPCInteractiveImage($pc_id);
194  $pc->deleteOverlay($body["data"]["overlay"]);
195  $updated = $page->update();
196 
197  return $this->getStandardResponse($updated, $pc);
198  }
199 
200  protected function getPCInteractiveImage(string $pc_id): \ilPCInteractiveImage
201  {
202  $pg = $this->page_gui->getPageObject();
203  return $this->page_gui->getPageObject()->getContentObjectForPcId($pc_id);
204  }
205 
206  protected function getPCInteractiveImageGUI(string $pc_id): \ilPCInteractiveImageGUI
207  {
208  $pg = $this->page_gui->getPageObject();
209  $iim = $this->page_gui->getPageObject()->getContentObjectForPcId($pc_id);
210  $iim_gui = new \ilPCInteractiveImageGUI($pg, $iim, "", $pc_id);
211  $iim_gui->setPageConfig($pg->getPageConfig());
212  return $iim_gui;
213  }
214 
215  protected function savePopup(string $pc_id, array $body): Server\Response
216  {
217  $page = $this->page_gui->getPageObject();
218  $form_adapter = $this->getPCInteractiveImageGUI($pc_id)
219  ->getPopupFormAdapter();
220  $pc = $this->getPCInteractiveImage($pc_id);
221  if ($form_adapter->isValid()) {
222  $title = $form_adapter->getData("title");
223  if ($body['nr'] == "") {
224  $pc->addContentPopup($title);
225  } else {
226  $pc->saveContentPopupTitle($body['nr'], $title);
227  }
228  }
229  $updated = $page->update();
230 
231  return $this->getStandardResponse($updated, $pc);
232  }
233 
234  protected function deletePopup(string $pc_id, array $body): Server\Response
235  {
236  $page = $this->page_gui->getPageObject();
237  $pc = $this->getPCInteractiveImage($pc_id);
238  $pc->deletePopupByNr($body["data"]["nr"]);
239  $updated = $page->update();
240 
241  return $this->getStandardResponse($updated, $pc);
242  }
243 
244  protected function deleteTrigger(string $pc_id, array $body): Server\Response
245  {
246  $page = $this->page_gui->getPageObject();
247  $pc = $this->getPCInteractiveImage($pc_id);
248  $std_alias_item = $pc->getStandardAliasItem();
249  $pc->deleteTrigger($std_alias_item, (int) $body["data"]["nr"]);
250  $updated = $page->update();
251  return $this->getStandardResponse($updated, $pc);
252  }
253 
254  protected function saveSettings(string $pc_id, array $body): Server\Response
255  {
256  $page = $this->page_gui->getPageObject();
258  $pc = $this->page_gui->getPageObject()->getContentObjectForPcId($pc_id);
259  $form_adapter = $this->getPCInteractiveImageGUI($pc_id)
260  ->getBackgroundPropertiesFormAdapter();
261 
262  if ($form_adapter->isValid()) {
263  $caption = $form_adapter->getData("caption");
264  $std_alias_item = $pc->getStandardAliasItem();
265  $std_alias_item->setCaption($caption);
266  }
267 
268  $updated = $page->update();
269 
270  return $this->getStandardResponse($updated, $pc);
271  }
272 
273 
274 }
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Class ilPageObjectGUI.
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Page editor json server.
global $DIC
Definition: shib_login.php:26
ilErrorHandling $error
Definition: class.ilias.php:69
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
User interface class for interactive images.