ILIAS  release_6 Revision v6.24-5-g0c8bfefb3b8
All Data Structures Namespaces Files Functions Variables Modules Pages
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 
104  public function getAlternativeVideoMimeType()
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  {
126  return $this->displayHeight;
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  {
252  return $this->download_link;
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  {
284  $tpl = $this->tpl;
285  $lng = $this->lng;
286 
287  self::initJavascript($tpl);
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 }
setTitle($a_val)
Set Title.
setDisplayHeight($dHeight)
set display height
setAlternativeVideoFile($a_val)
Set alternative video file.
setForceAudioPreview($a_val)
Set force audio preview.
static getMimeType($a_file, $a_external=null)
get mime type for file
getVideoPreviewPic()
Get video preview picture.
static isYouTube($a_location)
Identify YouTube links.
getDisplayHeight()
return display height of player.
setDescription($a_val)
Set description.
getPreviewHtml()
Get preview html.
getDescription()
Get description.
setFile($a_file)
Set File.
getDownloadLink()
Get download link.
static initJavascript($a_tpl=null)
Init Javascript.
static getFlashVideoPlayerFilename($a_fullpath=false)
Get flash video player file name.
static get($a_glyph, $a_text="")
Get glyph html.
static initConnection(ilGlobalTemplateInterface $a_main_tpl=null)
Init YUI Connection module.
Lighbox handling.
setDownloadLink($a_val)
Set download link.
getMediaPlayerHtml()
Get HTML (no preview) for media player integration.
getAlternativeVideoMimeType()
Get alternative video mime type.
getMp3PlayerHtml($a_preview=false)
Get Html for MP3 Player.
setDisplayWidth($a_val)
Set display width.
getAlternativeVideoFile()
Get alternative video file.
static getImagePath($img, $module_path="", $mode="output", $offline=false)
get image path (for images located in a template directory)
setAlternativeVideoMimeType($a_val)
Set alternative video mime type.
static initMediaElementJs($a_tpl=null)
Init mediaelement.js scripts.
__construct($a_id="", $a_event_callback_url="")
static extractVimeoParameters($a_location)
Extract Vimeo Parameter.
static isVimeo($a_location)
Identify Vimeo links.
static extractYouTubeParameters($a_location)
Extract YouTube Parameter.
setVideoPreviewPic($a_val, $a_alt="")
Set video preview picture.
User interface for media player.
$DIC
Definition: xapitoken.php:46
getDisplayWidth()
Get display width.
getForceAudioPreview()
Get force audio preview.