ILIAS  release_6 Revision v6.24-5-g0c8bfefb3b8
class.ilMediaPlayerGUI.php
Go to the documentation of this file.
1<?php
2
3/* Copyright (c) 1998-2012 ILIAS open source, GPL, see docs/LICENSE */
4
14{
18 protected $tpl;
19
23 protected $lng;
24
25 protected $file;
26 protected $displayHeight = "";
27 protected $displayWidth = "";
28 protected $mimeType;
29 protected static $nr = 1;
30 protected static $lightbox_initialized = false;
31 protected $current_nr;
32 protected $title;
33 protected $description;
34 protected $event_callback_url = "";
35 protected $download_link = "";
36
37 public function __construct($a_id = "", $a_event_callback_url = "")
38 {
39 global $DIC;
40
41 $this->tpl = $DIC["tpl"];
42 $this->lng = $DIC->language();
43 $this->id = $a_id;
44 $this->event_callback_url = $a_event_callback_url;
45 $this->current_nr = self::$nr;
46 self::$nr++;
47 }
48
54 public function setFile($a_file)
55 {
56 $this->file = $a_file;
57 }
58
64 public function getFile()
65 {
66 return $this->file;
67 }
68
74 public function setAlternativeVideoFile($a_val)
75 {
76 $this->alt_video_file = $a_val;
77 }
78
84 public function getAlternativeVideoFile()
85 {
86 return $this->alt_video_file;
87 }
88
94 public function setAlternativeVideoMimeType($a_val)
95 {
96 $this->alt_video_mime = $a_val;
97 }
98
105 {
106 return $this->alt_video_mime;
107 }
108
114 public function setDisplayHeight($dHeight)
115 {
116 $this->displayHeight = $dHeight;
117 }
118
124 public function getDisplayHeight()
125 {
127 }
128
134 public function setDisplayWidth($a_val)
135 {
136 $this->displayWidth = $a_val;
137 }
138
144 public function getDisplayWidth()
145 {
146 return $this->displayWidth;
147 }
148
149 public function setMimeType($value)
150 {
151 $this->mimeType = $value;
152 }
153
159 public function setVideoPreviewPic($a_val, $a_alt = "")
160 {
161 $this->video_preview_pic = $a_val;
162 $this->video_preview_pic_alt = $a_alt;
163 }
164
170 public function getVideoPreviewPic()
171 {
172 return $this->video_preview_pic;
173 }
174
180 public function setTitle($a_val)
181 {
182 $this->title = $a_val;
183 }
184
190 public function getTitle()
191 {
192 return $this->title;
193 }
194
200 public function setDescription($a_val)
201 {
202 $this->description = $a_val;
203 }
204
210 public function getDescription()
211 {
212 return $this->description;
213 }
214
220 public function setForceAudioPreview($a_val)
221 {
222 $this->force_audio_preview = $a_val;
223 }
224
230 public function getForceAudioPreview()
231 {
232 return $this->force_audio_preview;
233 }
234
240 public function setDownloadLink($a_val)
241 {
242 $this->download_link = $a_val;
243 }
244
250 public function getDownloadLink()
251 {
253 }
254
259 public static function initJavascript($a_tpl = null)
260 {
261 global $DIC;
262
263 $tpl = $DIC["tpl"];
264
265 if ($a_tpl == null) {
266 $a_tpl = $tpl;
267 }
268
269 include_once("./Services/YUI/classes/class.ilYuiUtil.php");
271
272 $a_tpl->addJavascript("./Services/MediaObjects/js/MediaObjects.js?1");
273
274 include_once("./Services/MediaObjects/classes/class.ilPlayerUtil.php");
276 }
277
278
282 public function getMp3PlayerHtml($a_preview = false)
283 {
286
288
289 if (!self::$lightbox_initialized && $a_preview) {
290 include_once("./Services/UIComponent/Lightbox/classes/class.ilLightboxGUI.php");
291 $lb = new ilLightboxGUI("media_lightbox");
292 $lb->setWidth("660px");
293 $lb->addLightbox();
294 self::$lightbox_initialized = true;
295 }
296
297 require_once 'Services/MediaObjects/classes/class.ilObjMediaObject.php';
298 include_once("./Services/MediaObjects/classes/class.ilExternalMediaAnalyzer.php");
299
300 // youtube
303 /*
304 $html = '<object width="320" height="240">'.
305 '<param name="movie" value="http://www.youtube.com/v/'.$p["v"].'?fs=1">'.
306 '</param><param name="allowFullScreen" value="true"></param>'.
307 '<param name="allowscriptaccess" value="always">'.
308 '</param><embed src="http://www.youtube.com/v/'.$p["v"].'?fs=1" '.
309 'type="application/x-shockwave-flash" allowscriptaccess="always" '.
310 'allowfullscreen="true" width="320" height="240"></embed></object>';
311 return $html;*/
312 $mp_tpl = new ilTemplate("tpl.flv_player.html", true, true, "Services/MediaObjects");
313 if ($a_preview) {
314 if ($this->getDownloadLink() != "") {
315 $mp_tpl->setCurrentBlock("ytdownload");
316 $mp_tpl->setVariable("TXT_DOWNLOAD", $lng->txt("download"));
317 $mp_tpl->setVariable("HREF_DOWNLOAD", $this->getDownloadLink());
318 $mp_tpl->parseCurrentBlock();
319 }
320
321 $mp_tpl->setCurrentBlock("ytpreview");
322 if ($this->getVideoPreviewPic() != "") {
323 $mp_tpl->setVariable("IMG_SRC", $this->getVideoPreviewPic());
324 } else {
325 $mp_tpl->setVariable("IMG_SRC", ilUtil::getImagePath("mcst_preview.svg"));
326 }
327 $height = $this->getDisplayHeight();
328 $width = $this->getDisplayWidth();
329 $mp_tpl->setVariable("DISPLAY_HEIGHT", $height);
330 $mp_tpl->setVariable("DISPLAY_WIDTH", $width);
331 $mp_tpl->setVariable("IMG_ALT", $this->video_preview_pic_alt);
332 $mp_tpl->setVariable("PTITLE", $this->getTitle());
333 $mp_tpl->parseCurrentBlock();
334 }
335 $mp_tpl->setCurrentBlock("youtube");
336 if ($a_preview) {
337 $mp_tpl->setVariable("CLASS", "ilNoDisplay");
338 }
339 $mp_tpl->setVariable("PV", $p["v"]);
340 $mp_tpl->setVariable("PLAYER_NR", $this->id . "_" . $this->current_nr);
341 $mp_tpl->setVariable("TXT_PLAY", $lng->txt("mob_play"));
342 $mp_tpl->setVariable("TITLE", $this->getTitle());
343 $mp_tpl->setVariable("DESCRIPTION", $this->getDescription());
344 include_once("./Services/UIComponent/Glyph/classes/class.ilGlyphGUI.php");
345 if ($a_preview) {
346 $mp_tpl->setVariable("CLOSE", ilGlyphGUI::get(ilGlyphGUI::CLOSE));
347 }
348 $mp_tpl->parseCurrentBlock();
349 return $mp_tpl->get();
350 }
351
352 // vimeo
355 $html = '<iframe src="//player.vimeo.com/video/' . $p["id"] . '" width="320" height="240" ' .
356 'frameborder="0"></iframe>';
357
358 return $html;
359 }
360
361 $mimeType = $this->mimeType == "" ? ilObjMediaObject::getMimeType(basename($this->getFile())) : $this->mimeType;
362 include_once("./Services/MediaObjects/classes/class.ilPlayerUtil.php");
363
364 // video tag
365 if (in_array($mimeType, array("video/mp4", "video/m4v", "video/rtmp",
366 "video/x-flv", "video/webm", "video/youtube", "video/vimeo", "video/ogg"))) {
367 if ($mimeType == "video/quicktime") {
368 $mimeType = "video/mov";
369 }
370
371 $mp_tpl = new ilTemplate("tpl.flv_player.html", true, true, "Services/MediaObjects");
372
373 // preview
374 if ($a_preview) {
375 if ($this->getDownloadLink() != "") {
376 $mp_tpl->setCurrentBlock("download");
377 $mp_tpl->setVariable("TXT_DOWNLOAD", $lng->txt("download"));
378 $mp_tpl->setVariable("HREF_DOWNLOAD", $this->getDownloadLink());
379 $mp_tpl->parseCurrentBlock();
380 }
381
382 $mp_tpl->setCurrentBlock("preview");
383 if ($this->getVideoPreviewPic() != "") {
384 $mp_tpl->setVariable("IMG_SRC", $this->getVideoPreviewPic());
385 } else {
386 $mp_tpl->setVariable("IMG_SRC", ilUtil::getImagePath("mcst_preview.svg"));
387 }
388 $mp_tpl->setVariable("IMG_ALT", $this->video_preview_pic_alt);
389 $mp_tpl->setVariable("PTITLE", $this->getTitle());
390 $mp_tpl->parseCurrentBlock();
391 }
392
393 // sources
394 $mp_tpl->setCurrentBlock("source");
395 $mp_tpl->setVariable("FILE", $this->getFile());
396 $mp_tpl->setVariable("MIME", $mimeType);
397 $mp_tpl->parseCurrentBlock();
398
399 if (in_array($this->getAlternativeVideoMimeType(), array("video/mp4", "video/webm"))) {
400 $mp_tpl->setCurrentBlock("source");
401 $mp_tpl->setVariable("FILE", $this->getAlternativeVideoFile());
402 $mp_tpl->setVariable("MIME", $this->getAlternativeVideoMimeType());
403 $mp_tpl->parseCurrentBlock();
404 }
405
406 $mp_tpl->setCurrentBlock("mejs_video");
407
408 if ($a_preview) {
409 $mp_tpl->setVariable("WRAP_CLASS", "ilNoDisplay");
410 $mp_tpl->setVariable("CLASS", "mejs__player ilNoDisplay");
411 } else {
412 //$mp_tpl->setVariable("CLASS", "mejs__player");
413 }
414
415 $mp_tpl->setVariable("PLAYER_NR", $this->id . "_" . $this->current_nr);
416 $mp_tpl->setVariable("TXT_PLAY", $lng->txt("mob_play"));
417 $mp_tpl->setVariable("EVENT_URL", $this->event_callback_url);
418 $height = $this->getDisplayHeight();
419 $width = $this->getDisplayWidth();
420 if (is_int(strpos($mimeType, "audio/mpeg"))) {
421 //$height = "30px";
422 }
423
424 if ($height != "") {
425 $style = "height: ".$height."; ";
426 }
427 if ($width != "") {
428 $style.= "width: ".$width."; ";
429 }
430 if ($style != "") {
431 $mp_tpl->setVariable("STYLE", "style='$style'");
432 }
433 //$mp_tpl->setVariable("DISPLAY_HEIGHT", $height);
434 //$mp_tpl->setVariable("DISPLAY_WIDTH", $width);
435 $mp_tpl->setVariable("PREVIEW_PIC", $this->getVideoPreviewPic());
436 $mp_tpl->setVariable("SWF_FILE", ilPlayerUtil::getFlashVideoPlayerFilename(true));
437 $mp_tpl->setVariable("FFILE", $this->getFile());
438 $mp_tpl->setVariable("TITLE", $this->getTitle());
439 $mp_tpl->setVariable("DESCRIPTION", $this->getDescription());
440 include_once("./Services/UIComponent/Glyph/classes/class.ilGlyphGUI.php");
441 if ($a_preview) {
442 $mp_tpl->setVariable("CLOSE", ilGlyphGUI::get(ilGlyphGUI::CLOSE));
443 }
444 $mp_tpl->parseCurrentBlock();
445 $r = $mp_tpl->get();
446
447 if (!$a_preview) {
448 $tpl->addOnLoadCode("new MediaElementPlayer('player_" . $this->id . "_" . $this->current_nr . "');");
449 }
450
451 //echo htmlentities($r); exit;
452 return $r;
453 }
454
455 // audio/mpeg
456 if (is_int(strpos($mimeType, "audio/mpeg")) ||
457 in_array($mimeType, array("application/ogg", "audio/ogg"))) {
459 $mp_tpl = new ilTemplate("tpl.flv_player.html", true, true, "Services/MediaObjects");
460 $preview_output = false;
461 if ($this->getVideoPreviewPic() != "" || $this->getForceAudioPreview()) {
462 if ($this->getDownloadLink() != "") {
463 $mp_tpl->setCurrentBlock("adownload");
464 $mp_tpl->setVariable("TXT_DOWNLOAD", $lng->txt("download"));
465 $mp_tpl->setVariable("HREF_DOWNLOAD", $this->getDownloadLink());
466 $mp_tpl->parseCurrentBlock();
467 }
468
469 $mp_tpl->setCurrentBlock("apreview");
470 if ($this->getVideoPreviewPic() != "") {
471 $mp_tpl->setVariable("IMG_SRC", $this->getVideoPreviewPic());
472 } else {
473 $mp_tpl->setVariable("IMG_SRC", ilUtil::getImagePath("mcst_preview.svg"));
474 }
475 $mp_tpl->setVariable("PTITLE", $this->getTitle());
476 $mp_tpl->parseCurrentBlock();
477 $preview_output = true;
478 }
479 $mp_tpl->setCurrentBlock("audio");
480 if ($preview_output) {
481 $mp_tpl->setVariable("ASTYLE", "margin-top:-40px");
482 }
483 $mp_tpl->setVariable("AFILE", $this->getFile());
484 $mp_tpl->setVariable("APLAYER_NR", $this->id . "_" . $this->current_nr);
485 $mp_tpl->setVariable("AEVENT_URL", $this->event_callback_url);
486 $mp_tpl->setVariable("AHEIGHT", "40");
487 $mp_tpl->setVariable("AWIDTH", "320");
488 $mp_tpl->parseCurrentBlock();
489 return $mp_tpl->get();
490 }
491
492 // images
493 if (is_int(strpos($mimeType, "image/"))) {
494 $mp_tpl = new ilTemplate("tpl.flv_player.html", true, true, "Services/MediaObjects");
495
496 if ($this->getDownloadLink() != "") {
497 $mp_tpl->setCurrentBlock("idownload");
498 $mp_tpl->setVariable("TXT_DOWNLOAD", $lng->txt("download"));
499 $mp_tpl->setVariable("HREF_DOWNLOAD", $this->getDownloadLink());
500 $mp_tpl->parseCurrentBlock();
501 }
502
503 $mp_tpl->setCurrentBlock("ipreview");
504 if ($this->getVideoPreviewPic() != "") {
505 $mp_tpl->setVariable("IMG_SRC", $this->getVideoPreviewPic());
506 } else {
507 $mp_tpl->setVariable("IMG_SRC", $this->getFile());
508 }
509 $mp_tpl->setVariable("PTITLE", $this->getTitle());
510 $mp_tpl->parseCurrentBlock();
511
512 $mp_tpl->setCurrentBlock("image");
513 $mp_tpl->setVariable("IFILE", $this->getFile());
514 $mp_tpl->setVariable("IPLAYER_NR", $this->id . "_" . $this->current_nr);
515 $mp_tpl->setVariable("ITITLE", $this->getTitle());
516 $mp_tpl->setVariable("IDESCRIPTION", $this->getDescription());
517 include_once("./Services/UIComponent/Glyph/classes/class.ilGlyphGUI.php");
518 $mp_tpl->setVariable("ICLOSE", ilGlyphGUI::get(ilGlyphGUI::CLOSE));
519
520 if ($this->event_callback_url) {
521 $mp_tpl->setVariable("IMG_CALLBACK_URL", $this->event_callback_url);
522 $mp_tpl->setVariable("IMG_CALLBACK_PLAYER_NR", $this->id . "_" . $this->current_nr);
523 }
524
525 $mp_tpl->setVariable("IHEIGHT", $this->getDisplayHeight());
526 $mp_tpl->setVariable("IWIDTH", $this->getDisplayWidth());
527 $mp_tpl->parseCurrentBlock();
528
529 return $mp_tpl->get();
530 }
531
532 // fallback, no preview mode
533 $mimeType = $this->mimeType == "" ? ilObjMediaObject::getMimeType(basename($this->getFile())) : $this->mimeType;
534 if (strpos($mimeType, "flv") === false
535 && strpos($mimeType, "audio/mpeg") === false
536 && strpos($mimeType, "image/png") === false
537 && strpos($mimeType, "image/gif") === false) {
538 $html = '<embed src="' . $this->getFile() . '" ' .
539 'type="' . $mimeType . '" ' .
540 'ShowControls="1" ' .
541 'autoplay="false" autostart="false" ' .
542 'width="320" height="240" scale="aspect" ></embed>';
543 return $html;
544 }
545
546 return;
547 }
548
554 public function getPreviewHtml()
555 {
556 return $this->getMp3PlayerHtml(true);
557 }
558
564 public function getMediaPlayerHtml()
565 {
566 return $this->getMp3PlayerHtml(false);
567 }
568}
An exception for terminatinating execution or to throw for unit testing.
static extractYouTubeParameters($a_location)
Extract YouTube Parameter.
static isVimeo($a_location)
Identify Vimeo links.
static extractVimeoParameters($a_location)
Extract Vimeo Parameter.
static isYouTube($a_location)
Identify YouTube links.
static get($a_glyph, $a_text="")
Get glyph html.
Lighbox handling.
User interface for media player.
setDisplayWidth($a_val)
Set display width.
getForceAudioPreview()
Get force audio preview.
setDisplayHeight($dHeight)
set display height
getDisplayWidth()
Get display width.
static initJavascript($a_tpl=null)
Init Javascript.
getAlternativeVideoFile()
Get alternative video file.
setTitle($a_val)
Set Title.
setDescription($a_val)
Set description.
getPreviewHtml()
Get preview html.
getDescription()
Get description.
setVideoPreviewPic($a_val, $a_alt="")
Set video preview picture.
getMediaPlayerHtml()
Get HTML (no preview) for media player integration.
setFile($a_file)
Set File.
getAlternativeVideoMimeType()
Get alternative video mime type.
setDownloadLink($a_val)
Set download link.
__construct($a_id="", $a_event_callback_url="")
setAlternativeVideoFile($a_val)
Set alternative video file.
getVideoPreviewPic()
Get video preview picture.
setAlternativeVideoMimeType($a_val)
Set alternative video mime type.
getDisplayHeight()
return display height of player.
setForceAudioPreview($a_val)
Set force audio preview.
getMp3PlayerHtml($a_preview=false)
Get Html for MP3 Player.
getDownloadLink()
Get download link.
static getMimeType($a_file, $a_external=null)
get mime type for file
static getFlashVideoPlayerFilename($a_fullpath=false)
Get flash video player file name.
static initMediaElementJs($a_tpl=null)
Init mediaelement.js scripts.
special template class to simplify handling of ITX/PEAR
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
static initConnection(ilGlobalTemplateInterface $a_main_tpl=null)
Init YUI Connection module.
$DIC
Definition: xapitoken.php:46