ILIAS  trunk Revision v12.0_alpha-377-g3641b37b9db
class.ilMediaCastManageTableGUI.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
27
28class ilMediaCastManageTableGUI implements Table\DataRetrieval
29{
30 protected object $parent_obj;
31 protected ilTemplate $tpl;
33 protected \ILIAS\HTTP\Services $http;
34 protected \ILIAS\Data\Factory $df;
35 protected string $parent_cmd;
36 protected ilLanguage $lng;
38 protected bool $preview;
39 protected bool $playtime;
43
45 protected \ILIAS\MediaObjects\MediaType\MediaTypeManager $media_type;
46 protected bool $presentation_mode;
49 protected bool $downloadable = false;
50 protected bool $edit_order;
51 protected \ILIAS\DI\UIServices $ui;
52
53 public function __construct(
55 string $parent_cmd = "",
56 bool $a_edit_order = false,
57 bool $a_presentation_mode = false
58 ) {
59 global $DIC;
60
61 $this->ctrl = $DIC->ctrl();
62 $this->lng = $DIC->language();
63 $this->access = $DIC->access();
64 $this->request = $DIC->mediaCast()
65 ->internal()
66 ->gui()
67 ->standardRequest();
68 $this->ui = $DIC->ui();
69 $this->edit_order = $a_edit_order;
70 $this->presentation_mode = $a_presentation_mode;
71 $this->mediacast = $parent_gui->getObject();
72 $this->downloadable = $this->mediacast->getDownloadable();
73
74 $this->parent_gui = $parent_gui;
75 $this->parent_cmd = $parent_cmd;
76 $this->media_type = $DIC->mediaObjects()->internal()->domain()->mediaType();
77 $this->df = new \ILIAS\Data\Factory();
78 $this->http = $DIC->http();
79
80 $this->playtime = ($this->mediacast->getViewMode() !== ilObjMediaCast::VIEW_IMG_GALLERY);
81 $this->preview = ($this->mediacast->getViewMode() !== ilObjMediaCast::VIEW_PODCAST);
82
83 $form_action = $this->df->uri(
84 ILIAS_HTTP_PATH . '/' .
85 $this->ctrl->getLinkTarget($this->parent_gui, $this->parent_cmd)
86 );
87 $this->url_builder = new URLBuilder($form_action);
89 $this->url_builder->acquireParameters(
90 ["mcst"], // namespace
91 "table_action", //this is the actions's parameter name
92 "ids" //this is the parameter name to be used for row-ids
93 );
94 }
95
96 protected function getColumns(): array
97 {
98 $f = $this->ui->factory();
99 $c = $f->table()->column();
100 $columns = [
101 'title' => $c->text($this->lng->txt("title"))->withIsSortable(false),
102 'type' => $c->text($this->lng->txt("type"))->withIsSortable(false),
103 'size' => $c->text($this->lng->txt("size"))->withIsSortable(false)
104 ];
105 if ($this->playtime) {
106 $columns['playtime'] = $c->text($this->lng->txt("mcst_play_time"))->withIsSortable(false);
107 }
108 $columns['creation_date'] = $c->text($this->lng->txt("created"))->withIsSortable(false);
109 $columns['update_date'] = $c->text($this->lng->txt("last_update"))->withIsSortable(false);
110 if ($this->preview) {
111 $columns['preview'] = $c->text($this->lng->txt("preview"))->withIsSortable(false);
112 }
113
114 return $columns;
115 }
116
117 public function getRows(
118 Table\DataRowBuilder $row_builder,
119 array $visible_column_ids,
121 Order $order,
122 mixed $additional_viewcontrol_data,
123 mixed $filter_data,
124 mixed $additional_parameters
125 ): \Generator {
126 $cnt = 0;
127 foreach ($this->mediacast->getSortedItemsArray() as $item) {
128 $cnt++;
129 if ($cnt < $range->getStart() || $cnt > $range->getEnd()) {
130 continue;
131 }
132
133 $row_id = (string) $item['id'];
134 $mob = new ilObjMediaObject($item["mob_id"]);
135 $med = $mob->getMediaItem("Standard");
136
137
138 $data['title'] = $item["title"];
139 $data['creation_date'] = ilDatePresentation::formatDate(new ilDateTime($item["creation_date"], IL_CAL_DATETIME));
140 if ($item["update_date"] !== $item["creation_date"]) {
141 $data['update_date'] =
143 } else {
144 $data['update_date'] = "-";
145 }
146 if ($item["playtime"] !== "00:00:00") {
147 $data['playtime'] = $item["playtime"];
148 } else {
149 $data['playtime'] = "-";
150 }
151
152 $file = ilObjMediaObject::_lookupItemPath($med->getMobId(), false, false, "Standard");
153 if (is_file($file)) {
154 $size = filesize($file);
155 $size = sprintf("%.1f MB", $size / 1024 / 1024);
156 $data['size'] = $size;
157 } else {
158 $data['size'] = "-";
159 }
160 $data['type'] = $med->getFormat();
161 if ($mob->getVideoPreviewPic() !== "") {
162 // workaround since we dont have image columns yet
163 $image = $this->ui->factory()->image()->responsive($mob->getVideoPreviewPic(), $item["title"]);
164 $html = $this->ui->renderer()->render($image);
165 $html = str_replace("<img ", "<img style='max-width:150px;' ", $html);
166 $data['preview'] = $html;
167 } else {
168 $data['preview'] = "";
169 }
170
171
172 yield $row_builder->buildDataRow($row_id, $data);
173 }
174 }
175
176 public function getTotalRowCount(
177 mixed $additional_viewcontrol_data,
178 mixed $filter_data,
179 mixed $additional_parameters
180 ): ?int {
181 return count($this->mediacast->getSortedItemsArray());
182 }
183
184 public function handleCommand(): void
185 {
186 $action = $this->request->getTableAction($this->action_parameter_token->getName());
187 if ($action !== "") {
188 $action .= "Object";
189 // currently done in request wrapper
190 //$ids = $this->request->getTableIds($this->row_id_token->getName());
191 $this->parent_gui->$action();
192 }
193 }
194
195 public function get(): Table\Data
196 {
197 $f = $this->ui->factory();
198 $a = $f->table()->action();
199
200 $form_action = $this->df->uri(
201 ILIAS_HTTP_PATH . '/' .
202 $this->ctrl->getLinkTarget($this->parent_gui, $this->parent_cmd)
203 );
204
205 $url_builder = $this->url_builder;
206 $action_parameter_token = $this->action_parameter_token;
207 $row_id_token = $this->row_id_token;
208
209 $actions["editCastItem"] = $a->single(
210 $this->lng->txt("edit"),
211 $url_builder->withParameter($action_parameter_token, "editCastItem"),
212 $row_id_token
213 );
214
215 $actions["showCastItem"] = $a->single(
216 $this->lng->txt("show"),
217 $url_builder->withParameter($action_parameter_token, "showCastItem"),
218 $row_id_token
219 )->withAsync();
220
221 if ($this->playtime) {
222 $actions["determinePlaytime"] = $a->single(
223 $this->lng->txt("mcst_det_playtime"),
224 $url_builder->withParameter($action_parameter_token, "determinePlaytime"),
225 $row_id_token
226 );
227 }
228
229 if ($this->downloadable) {
230 $actions["downloadItem"] = $a->single(
231 $this->lng->txt("download"),
232 $url_builder->withParameter($action_parameter_token, "downloadItem"),
233 $row_id_token
234 );
235 }
236
237 $actions["confirmItemDeletion"] = $a->standard(
238 $this->lng->txt("delete"),
239 $url_builder->withParameter($action_parameter_token, "confirmItemDeletion"),
240 $row_id_token
241 )->withAsync();
242
243 $table = $f->table()
244 ->data($this, $this->lng->txt("mcst_items"), $this->getColumns())
245 ->withActions($actions)
246 ->withRequest($this->http->request());
247 return $table;
248 }
249
250 protected function fillRow(array $a_set): void
251 {
253 $ilCtrl = $this->ctrl;
254 $ilAccess = $this->access;
255 $size = 0;
256 $ui = $this->ui;
257
258 $news_set = new ilSetting("news");
259 $enable_internal_rss = $news_set->get("enable_rss_for_internal");
260
261 if ($this->presentation_mode) {
262 $ilCtrl->setParameterByClass("ilobjmediacastgui", "presentation", "1");
263 }
264
265 // access
266 if ($enable_internal_rss && !$this->presentation_mode) {
267 $this->tpl->setCurrentBlock("access");
268 $this->tpl->setVariable("TXT_ACCESS", $lng->txt("news_news_item_visibility"));
269 if ($a_set["visibility"] == NEWS_PUBLIC) {
270 $this->tpl->setVariable("VAL_ACCESS", $lng->txt("news_visibility_public"));
271 } else {
272 $this->tpl->setVariable("VAL_ACCESS", $lng->txt("news_visibility_users"));
273 }
274 $this->tpl->parseCurrentBlock();
275 }
276
277 $ilCtrl->setParameterByClass("ilobjmediacastgui", "item_id", "");
278
279 if (ilObject::_exists($a_set["mob_id"])) {
280
281 $mob = new ilObjMediaObject($a_set["mob_id"]);
282 $med = $mob->getMediaItem("Standard");
283
284 $this->tpl->setVariable(
285 "VAL_DESCRIPTION",
286 $a_set["content"]
287 );
288
289 $this->tpl->setVariable(
290 "TXT_DURATION",
291 $lng->txt("mcst_play_time")
292 );
293
294 if (!$this->edit_order) {
295 if ($this->downloadable) {
296 $ilCtrl->setParameterByClass("ilobjmediacastgui", "item_id", $a_set["id"]);
297 // to keep always the order of the purposes
298 // iterate through purposes and display the according mediaitems
299 foreach (ilObjMediaCast::$purposes as $purpose) {
300 $a_mob = $mob->getMediaItem($purpose);
301 if (!is_object($a_mob)) {
302 continue;
303 }
304 $ilCtrl->setParameterByClass("ilobjmediacastgui", "purpose", $a_mob->getPurpose());
305 $file = ilObjMediaObject::_lookupItemPath($a_mob->getMobId(), false, false, $a_mob->getPurpose());
306 $this->tpl->setCurrentBlock("downloadable");
307 $this->tpl->setVariable("TXT_DOWNLOAD", $lng->txt("mcst_download_" . strtolower($a_mob->getPurpose())));
308 $this->tpl->setVariable("CMD_DOWNLOAD", $ilCtrl->getLinkTargetByClass("ilobjmediacastgui", "downloadItem"));
309 $this->tpl->parseCurrentBlock();
310 }
311 }
312
313 // the news id will be used as player id, see also ilObjMediaCastGUI
314 $event_url = ($this->presentation_mode)
315 ? $ilCtrl->getLinkTarget($this->parent_obj, "handlePlayerEvent", "", true, false)
316 : "";
317 if (!is_null($med)) {
318 $file = $mob->getStandardSrc();
319 $comp = null;
320 if ($this->media_type->isAudio($med->getFormat())) {
321 $comp = $ui->factory()->player()->audio(
322 $file,
323 ""
324 );
325 } elseif ($this->media_type->isVideo($med->getFormat())) {
326 $comp = $ui->factory()->player()->video(
327 $file
328 );
329 } elseif ($this->media_type->isImage($med->getFormat())) {
330 $comp = $ui->factory()->image()->responsive($file, "");
331 }
332 if (!is_null($comp)) {
333 $this->tpl->setVariable("PLAYER", $ui->renderer()->render($comp));
334 }
335 }
336
337 // edit link
338 $ilCtrl->setParameterByClass("ilobjmediacastgui", "item_id", $a_set["id"]);
339 if ($ilAccess->checkAccess("write", "", $this->request->getRefId()) &&
340 !$this->presentation_mode) {
341
342 if (!is_int(strpos($med->getFormat(), "image/"))) {
343 $this->tpl->setVariable("TXT_DET_PLAYTIME", $lng->txt("mcst_det_playtime"));
344 $this->tpl->setVariable(
345 "CMD_DET_PLAYTIME",
346 $ilCtrl->getLinkTargetByClass("ilobjmediacastgui", "determinePlaytime")
347 );
348 }
349 $this->tpl->parseCurrentBlock();
350
351 $this->tpl->setCurrentBlock("edit_checkbox");
352 $this->tpl->setVariable("VAL_ID", $a_set["id"]);
353 $this->tpl->parseCurrentBlock();
354 // $this->tpl->touchBlock("contrl_col");
355 }
356 } else {
357 $this->tpl->setCurrentBlock("edit_order");
358 $this->tpl->setVariable("VAL_ID", $a_set["id"]);
359 $this->tpl->setVariable("VAL_ORDER", $a_set["order"]);
360 $this->tpl->parseCurrentBlock();
361 // $this->tpl->touchBlock("contrl_col");
362 }
363
364 // download and play counter
365 if (!$this->presentation_mode) {
366 if ($a_set["mob_cnt_download"] > 0) {
367 $this->tpl->setCurrentBlock("prop");
368 $this->tpl->setVariable("TXT_PROP", $lng->txt("mcst_download_cnt"));
369 $this->tpl->setVariable("VAL_PROP", $a_set["mob_cnt_download"]);
370 $this->tpl->parseCurrentBlock();
371 }
372 if ($a_set["mob_cnt_play"] > 0) {
373 $this->tpl->setCurrentBlock("prop");
374 $this->tpl->setVariable("TXT_PROP", $lng->txt("mcst_play_cnt"));
375 $this->tpl->setVariable("VAL_PROP", $a_set["mob_cnt_play"]);
376 $this->tpl->parseCurrentBlock();
377 }
378 }
379 }
380 }
381}
Both the subject and the direction need to be specified when expressing an order.
Definition: Order.php:29
A simple class to express a naive range of whole positive numbers.
Definition: Range.php:29
withParameter(URLBuilderToken $token, string|array $value)
Change an acquired parameter's value if the supplied token is valid.
Definition: URLBuilder.php:166
const IL_CAL_DATETIME
const NEWS_PUBLIC
static formatDate(ilDateTime $date, bool $a_skip_day=false, bool $a_include_wd=false, bool $include_seconds=false, ?ilObjUser $user=null,)
@classDescription Date and time handling
language handling
__construct(ilObjMediaCastGUI $parent_gui, string $parent_cmd="", bool $a_edit_order=false, bool $a_presentation_mode=false)
getTotalRowCount(mixed $additional_viewcontrol_data, mixed $filter_data, mixed $additional_parameters)
getRows(Table\DataRowBuilder $row_builder, array $visible_column_ids, Range $range, Order $order, mixed $additional_viewcontrol_data, mixed $filter_data, mixed $additional_parameters)
ILIAS MediaObjects MediaType MediaTypeManager $media_type
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static array $purposes
static _lookupItemPath(int $a_mob_id, bool $a_url_encode=false, bool $a_web=true, string $a_purpose="")
Get path for item with specific purpose.
static _exists(int $id, bool $reference=false, ?string $type=null)
checks if an object exists in object_data
ILIAS Setting Class.
special template class to simplify handling of ITX/PEAR
$c
Definition: deliver.php:25
return['delivery_method'=> 'php',]
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This describes a Data Table.
Definition: Data.php:33
Interface ilAccessHandler This interface combines all available interfaces which can be called via gl...
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.
$a
thx to https://mlocati.github.io/php-cs-fixer-configurator for the examples
global $lng
Definition: privfeed.php:31
global $DIC
Definition: shib_login.php:26