ILIAS  release_8 Revision v8.19
All Data Structures Namespaces Files Functions Variables Modules Pages
class.ilMediaCastTableGUI.php
Go to the documentation of this file.
1 <?php
2 
20 
26 {
27  protected \ILIAS\MediaObjects\MediaType\MediaTypeManager $media_type;
28  protected bool $presentation_mode;
31  protected bool $downloadable = false;
32  protected bool $edit_order;
33  protected \ILIAS\DI\UIServices $ui;
34 
35  public function __construct(
36  ilObjMediaCastGUI $a_parent_obj,
37  string $a_parent_cmd = "",
38  bool $a_edit_order = false,
39  bool $a_presentation_mode = false
40  ) {
41  global $DIC;
42 
43  $this->ctrl = $DIC->ctrl();
44  $this->lng = $DIC->language();
45  $this->access = $DIC->access();
46  $ilCtrl = $DIC->ctrl();
47  $lng = $DIC->language();
48  $this->request = $DIC->mediaCast()
49  ->internal()
50  ->gui()
51  ->standardRequest();
52  $this->ui = $DIC->ui();
53  $this->edit_order = $a_edit_order;
54  $this->presentation_mode = $a_presentation_mode;
55 
56  parent::__construct($a_parent_obj, $a_parent_cmd);
57 
58  // Check whether download-buttons will be displayed
59  $mediacast = new ilObjMediaCast($a_parent_obj->getObject()->getRefId());
60  $this->downloadable = $mediacast->getDownloadable();
61 
62  if (!$this->presentation_mode) {
63  $this->addColumn("", "", "1");
64  }
65  $this->addColumn($lng->txt("title"));
66  $this->addColumn($lng->txt("properties"));
67  if (!$this->edit_order) {
68  $this->addColumn($lng->txt("mcst_play"), "", "320px");
69  }
70 
71  $this->setFormAction($ilCtrl->getFormAction($a_parent_obj));
72  $this->setRowTemplate(
73  "tpl.table_media_cast_row.html",
74  "Modules/MediaCast"
75  );
76 
77  $this->media_type = $DIC->mediaObjects()->internal()->domain()->mediaType();
78 
79  $this->setShowRowsSelector(true);
80  }
81 
82  protected function fillRow(array $a_set): void
83  {
84  $lng = $this->lng;
85  $ilCtrl = $this->ctrl;
86  $ilAccess = $this->access;
87  $size = 0;
88  $ui = $this->ui;
89 
90  $news_set = new ilSetting("news");
91  $enable_internal_rss = $news_set->get("enable_rss_for_internal");
92 
93  if ($this->presentation_mode) {
94  $ilCtrl->setParameterByClass("ilobjmediacastgui", "presentation", "1");
95  }
96 
97  // access
98  if ($enable_internal_rss && !$this->presentation_mode) {
99  $this->tpl->setCurrentBlock("access");
100  $this->tpl->setVariable("TXT_ACCESS", $lng->txt("news_news_item_visibility"));
101  if ($a_set["visibility"] == NEWS_PUBLIC) {
102  $this->tpl->setVariable("VAL_ACCESS", $lng->txt("news_visibility_public"));
103  } else {
104  $this->tpl->setVariable("VAL_ACCESS", $lng->txt("news_visibility_users"));
105  }
106  $this->tpl->parseCurrentBlock();
107  }
108 
109  $ilCtrl->setParameterByClass("ilobjmediacastgui", "item_id", "");
110 
111  if (ilObject::_exists($a_set["mob_id"])) {
112  if ($a_set["update_date"] != "") {
113  $this->tpl->setCurrentBlock("last_update");
114  $this->tpl->setVariable(
115  "TXT_LAST_UPDATE",
116  $lng->txt("last_update")
117  );
118  $this->tpl->setVariable(
119  "VAL_LAST_UPDATE",
120  ilDatePresentation::formatDate(new ilDateTime($a_set["update_date"], IL_CAL_DATETIME))
121  );
122  $this->tpl->parseCurrentBlock();
123  }
124 
125  $mob = new ilObjMediaObject($a_set["mob_id"]);
126  $med = $mob->getMediaItem("Standard");
127 
128  $this->tpl->setVariable(
129  "VAL_TITLE",
130  $a_set["title"]
131  );
132  $this->tpl->setVariable(
133  "VAL_DESCRIPTION",
134  $a_set["content"]
135  );
136  $this->tpl->setVariable(
137  "TXT_CREATED",
138  $lng->txt("created")
139  );
140  $this->tpl->setVariable(
141  "VAL_CREATED",
142  ilDatePresentation::formatDate(new ilDateTime($a_set["creation_date"], IL_CAL_DATETIME))
143  );
144 
145  $this->tpl->setVariable(
146  "TXT_DURATION",
147  $lng->txt("mcst_play_time")
148  );
149 
150  if ($a_set["playtime"] != "00:00:00") {
151  $this->tpl->setVariable(
152  "VAL_DURATION",
153  $a_set["playtime"]
154  );
155  } else {
156  $this->tpl->setVariable("VAL_DURATION", "-");
157  }
158 
159  if (!$this->edit_order) {
160  if ($this->downloadable) {
161  $ilCtrl->setParameterByClass("ilobjmediacastgui", "item_id", $a_set["id"]);
162  // to keep always the order of the purposes
163  // iterate through purposes and display the according mediaitems
164  foreach (ilObjMediaCast::$purposes as $purpose) {
165  $a_mob = $mob->getMediaItem($purpose);
166  if (!is_object($a_mob)) {
167  continue;
168  }
169  $ilCtrl->setParameterByClass("ilobjmediacastgui", "purpose", $a_mob->getPurpose());
170  $file = ilObjMediaObject::_lookupItemPath($a_mob->getMobId(), false, false, $a_mob->getPurpose());
171  if (is_file($file)) {
172  $size = filesize($file);
173  $size = ", " . sprintf("%.1f MB", $size / 1024 / 1024);
174  }
175  $format = ($a_mob->getFormat() != "") ? $a_mob->getFormat() : "audio/mpeg";
176  $this->tpl->setCurrentBlock("downloadable");
177  $this->tpl->setVariable("TXT_DOWNLOAD", $lng->txt("mcst_download_" . strtolower($a_mob->getPurpose())));
178  $this->tpl->setVariable("CMD_DOWNLOAD", $ilCtrl->getLinkTargetByClass("ilobjmediacastgui", "downloadItem"));
179  $this->tpl->setVariable("TITLE_DOWNLOAD", "(" . $format . $size . ")");
180  $this->tpl->parseCurrentBlock();
181  }
182  }
183 
184  // the news id will be used as player id, see also ilObjMediaCastGUI
185  $event_url = ($this->presentation_mode)
186  ? $ilCtrl->getLinkTarget($this->parent_obj, "handlePlayerEvent", "", true, false)
187  : "";
188  if (!is_null($med)) {
189  if ($med->getLocationType() === "Reference") {
190  $file = $med->getLocation();
191  if (in_array($med->getFormat(), ["video/vimeo", "video/youtube"])) {
192  if (!is_int(strpos($file, "?"))) {
193  $file .= "?controls=0";
194  } else {
195  $file .= "&controls=0";
196  }
197  }
198  } else {
200  ilObjMediaObject::_getURL($mob->getId()) . "/" . $med->getLocation()
201  );
202  }
203  $comp = null;
204  if ($this->media_type->isAudio($med->getFormat())) {
205  $comp = $ui->factory()->player()->audio(
206  $file,
207  ""
208  );
209  } elseif ($this->media_type->isVideo($med->getFormat())) {
210  $comp = $ui->factory()->player()->video(
211  $file
212  );
213  } elseif ($this->media_type->isImage($med->getFormat())) {
214  $comp = $ui->factory()->image()->responsive($file, "");
215  }
216  if (!is_null($comp)) {
217  $this->tpl->setVariable("PLAYER", $ui->renderer()->render($comp));
218  }
219  }
220 
221  // edit link
222  $ilCtrl->setParameterByClass("ilobjmediacastgui", "item_id", $a_set["id"]);
223  if ($ilAccess->checkAccess("write", "", $this->request->getRefId()) &&
224  !$this->presentation_mode) {
225  $this->tpl->setCurrentBlock("edit");
226  $this->tpl->setVariable("TXT_EDIT", $lng->txt("edit"));
227  $this->tpl->setVariable(
228  "CMD_EDIT",
229  $ilCtrl->getLinkTargetByClass("ilobjmediacastgui", "editCastItem")
230  );
231 
232  if (!is_int(strpos($med->getFormat(), "image/"))) {
233  $this->tpl->setVariable("TXT_DET_PLAYTIME", $lng->txt("mcst_det_playtime"));
234  $this->tpl->setVariable(
235  "CMD_DET_PLAYTIME",
236  $ilCtrl->getLinkTargetByClass("ilobjmediacastgui", "determinePlaytime")
237  );
238  }
239  $this->tpl->parseCurrentBlock();
240 
241  $this->tpl->setCurrentBlock("edit_checkbox");
242  $this->tpl->setVariable("VAL_ID", $a_set["id"]);
243  $this->tpl->parseCurrentBlock();
244  // $this->tpl->touchBlock("contrl_col");
245  }
246  } else {
247  $this->tpl->setCurrentBlock("edit_order");
248  $this->tpl->setVariable("VAL_ID", $a_set["id"]);
249  $this->tpl->setVariable("VAL_ORDER", $a_set["order"]);
250  $this->tpl->parseCurrentBlock();
251  // $this->tpl->touchBlock("contrl_col");
252  }
253 
254  // download and play counter
255  if (!$this->presentation_mode) {
256  if ($a_set["mob_cnt_download"] > 0) {
257  $this->tpl->setCurrentBlock("prop");
258  $this->tpl->setVariable("TXT_PROP", $lng->txt("mcst_download_cnt"));
259  $this->tpl->setVariable("VAL_PROP", $a_set["mob_cnt_download"]);
260  $this->tpl->parseCurrentBlock();
261  }
262  if ($a_set["mob_cnt_play"] > 0) {
263  $this->tpl->setCurrentBlock("prop");
264  $this->tpl->setVariable("TXT_PROP", $lng->txt("mcst_play_cnt"));
265  $this->tpl->setVariable("VAL_PROP", $a_set["mob_cnt_play"]);
266  $this->tpl->parseCurrentBlock();
267  }
268  }
269  }
270  }
271 }
ILIAS MediaObjects MediaType MediaTypeManager $media_type
const IL_CAL_DATETIME
txt(string $a_topic, string $a_default_lang_fallback_mod="")
gets the text for a given topic if the topic is not in the list, the topic itself with "-" will be re...
setFormAction(string $a_form_action, bool $a_multipart=false)
static formatDate(ilDateTime $date, bool $a_skip_day=false, bool $a_include_wd=false, bool $include_seconds=false)
__construct(ilObjMediaCastGUI $a_parent_obj, string $a_parent_cmd="", bool $a_edit_order=false, bool $a_presentation_mode=false)
ilLanguage $lng
global $DIC
Definition: feed.php:28
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
static _exists(int $id, bool $reference=false, ?string $type=null)
checks if an object exists in object_data
setShowRowsSelector(bool $a_value)
Toggle rows-per-page selector.
const NEWS_PUBLIC
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
setRowTemplate(string $a_template, string $a_template_dir="")
Set row template.
$format
Definition: metadata.php:235
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.
__construct(Container $dic, ilPlugin $plugin)
static signFile(string $path_to_file)
addColumn(string $a_text, string $a_sort_field="", string $a_width="", bool $a_is_checkbox_action_column=false, string $a_class="", string $a_tooltip="", bool $a_tooltip_with_html=false)
TableGUI class for table NewsForContext.
static _getURL(int $a_mob_id)
get directory for files of media object