ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
class.InteractiveImageCommandActionHandler.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
22
25
29class 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
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}
Page editor json server.
ilErrorHandling $error
Definition: class.ilias.php:69
User interface class for interactive images.
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...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
global $DIC
Definition: shib_login.php:26