[ Index ]

PHP Cross Reference of WordPress

title

Body

[close]

/wp-includes/SimplePie/ -> Enclosure.php (source)

   1  <?php
   2  /**
   3   * SimplePie
   4   *
   5   * A PHP-Based RSS and Atom Feed Framework.
   6   * Takes the hard work out of managing a complete RSS/Atom solution.
   7   *
   8   * Copyright (c) 2004-2012, Ryan Parman, Geoffrey Sneddon, Ryan McCue, and contributors
   9   * All rights reserved.
  10   *
  11   * Redistribution and use in source and binary forms, with or without modification, are
  12   * permitted provided that the following conditions are met:
  13   *
  14   *     * Redistributions of source code must retain the above copyright notice, this list of
  15   *       conditions and the following disclaimer.
  16   *
  17   *     * Redistributions in binary form must reproduce the above copyright notice, this list
  18   *       of conditions and the following disclaimer in the documentation and/or other materials
  19   *       provided with the distribution.
  20   *
  21   *     * Neither the name of the SimplePie Team nor the names of its contributors may be used
  22   *       to endorse or promote products derived from this software without specific prior
  23   *       written permission.
  24   *
  25   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
  26   * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
  27   * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS
  28   * AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  29   * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  30   * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  31   * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
  32   * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  33   * POSSIBILITY OF SUCH DAMAGE.
  34   *
  35   * @package SimplePie
  36   * @version 1.3.1
  37   * @copyright 2004-2012 Ryan Parman, Geoffrey Sneddon, Ryan McCue
  38   * @author Ryan Parman
  39   * @author Geoffrey Sneddon
  40   * @author Ryan McCue
  41   * @link http://simplepie.org/ SimplePie
  42   * @license http://www.opensource.org/licenses/bsd-license.php BSD License
  43   */
  44  
  45  /**
  46   * Handles everything related to enclosures (including Media RSS and iTunes RSS)
  47   *
  48   * Used by {@see SimplePie_Item::get_enclosure()} and {@see SimplePie_Item::get_enclosures()}
  49   *
  50   * This class can be overloaded with {@see SimplePie::set_enclosure_class()}
  51   *
  52   * @package SimplePie
  53   * @subpackage API
  54   */
  55  class SimplePie_Enclosure
  56  {
  57      /**
  58       * @var string
  59       * @see get_bitrate()
  60       */
  61      var $bitrate;
  62  
  63      /**
  64       * @var array
  65       * @see get_captions()
  66       */
  67      var $captions;
  68  
  69      /**
  70       * @var array
  71       * @see get_categories()
  72       */
  73      var $categories;
  74  
  75      /**
  76       * @var int
  77       * @see get_channels()
  78       */
  79      var $channels;
  80  
  81      /**
  82       * @var SimplePie_Copyright
  83       * @see get_copyright()
  84       */
  85      var $copyright;
  86  
  87      /**
  88       * @var array
  89       * @see get_credits()
  90       */
  91      var $credits;
  92  
  93      /**
  94       * @var string
  95       * @see get_description()
  96       */
  97      var $description;
  98  
  99      /**
 100       * @var int
 101       * @see get_duration()
 102       */
 103      var $duration;
 104  
 105      /**
 106       * @var string
 107       * @see get_expression()
 108       */
 109      var $expression;
 110  
 111      /**
 112       * @var string
 113       * @see get_framerate()
 114       */
 115      var $framerate;
 116  
 117      /**
 118       * @var string
 119       * @see get_handler()
 120       */
 121      var $handler;
 122  
 123      /**
 124       * @var array
 125       * @see get_hashes()
 126       */
 127      var $hashes;
 128  
 129      /**
 130       * @var string
 131       * @see get_height()
 132       */
 133      var $height;
 134  
 135      /**
 136       * @deprecated
 137       * @var null
 138       */
 139      var $javascript;
 140  
 141      /**
 142       * @var array
 143       * @see get_keywords()
 144       */
 145      var $keywords;
 146  
 147      /**
 148       * @var string
 149       * @see get_language()
 150       */
 151      var $lang;
 152  
 153      /**
 154       * @var string
 155       * @see get_length()
 156       */
 157      var $length;
 158  
 159      /**
 160       * @var string
 161       * @see get_link()
 162       */
 163      var $link;
 164  
 165      /**
 166       * @var string
 167       * @see get_medium()
 168       */
 169      var $medium;
 170  
 171      /**
 172       * @var string
 173       * @see get_player()
 174       */
 175      var $player;
 176  
 177      /**
 178       * @var array
 179       * @see get_ratings()
 180       */
 181      var $ratings;
 182  
 183      /**
 184       * @var array
 185       * @see get_restrictions()
 186       */
 187      var $restrictions;
 188  
 189      /**
 190       * @var string
 191       * @see get_sampling_rate()
 192       */
 193      var $samplingrate;
 194  
 195      /**
 196       * @var array
 197       * @see get_thumbnails()
 198       */
 199      var $thumbnails;
 200  
 201      /**
 202       * @var string
 203       * @see get_title()
 204       */
 205      var $title;
 206  
 207      /**
 208       * @var string
 209       * @see get_type()
 210       */
 211      var $type;
 212  
 213      /**
 214       * @var string
 215       * @see get_width()
 216       */
 217      var $width;
 218  
 219      /**
 220       * Constructor, used to input the data
 221       *
 222       * For documentation on all the parameters, see the corresponding
 223       * properties and their accessors
 224       *
 225       * @uses idna_convert If available, this will convert an IDN
 226       */
 227  	public function __construct($link = null, $type = null, $length = null, $javascript = null, $bitrate = null, $captions = null, $categories = null, $channels = null, $copyright = null, $credits = null, $description = null, $duration = null, $expression = null, $framerate = null, $hashes = null, $height = null, $keywords = null, $lang = null, $medium = null, $player = null, $ratings = null, $restrictions = null, $samplingrate = null, $thumbnails = null, $title = null, $width = null)
 228      {
 229          $this->bitrate = $bitrate;
 230          $this->captions = $captions;
 231          $this->categories = $categories;
 232          $this->channels = $channels;
 233          $this->copyright = $copyright;
 234          $this->credits = $credits;
 235          $this->description = $description;
 236          $this->duration = $duration;
 237          $this->expression = $expression;
 238          $this->framerate = $framerate;
 239          $this->hashes = $hashes;
 240          $this->height = $height;
 241          $this->keywords = $keywords;
 242          $this->lang = $lang;
 243          $this->length = $length;
 244          $this->link = $link;
 245          $this->medium = $medium;
 246          $this->player = $player;
 247          $this->ratings = $ratings;
 248          $this->restrictions = $restrictions;
 249          $this->samplingrate = $samplingrate;
 250          $this->thumbnails = $thumbnails;
 251          $this->title = $title;
 252          $this->type = $type;
 253          $this->width = $width;
 254  
 255          if (class_exists('idna_convert'))
 256          {
 257              $idn = new idna_convert();
 258              $parsed = SimplePie_Misc::parse_url($link);
 259              $this->link = SimplePie_Misc::compress_parse_url($parsed['scheme'], $idn->encode($parsed['authority']), $parsed['path'], $parsed['query'], $parsed['fragment']);
 260          }
 261          $this->handler = $this->get_handler(); // Needs to load last
 262      }
 263  
 264      /**
 265       * String-ified version
 266       *
 267       * @return string
 268       */
 269  	public function __toString()
 270      {
 271          // There is no $this->data here
 272          return md5(serialize($this));
 273      }
 274  
 275      /**
 276       * Get the bitrate
 277       *
 278       * @return string|null
 279       */
 280  	public function get_bitrate()
 281      {
 282          if ($this->bitrate !== null)
 283          {
 284              return $this->bitrate;
 285          }
 286          else
 287          {
 288              return null;
 289          }
 290      }
 291  
 292      /**
 293       * Get a single caption
 294       *
 295       * @param int $key
 296       * @return SimplePie_Caption|null
 297       */
 298  	public function get_caption($key = 0)
 299      {
 300          $captions = $this->get_captions();
 301          if (isset($captions[$key]))
 302          {
 303              return $captions[$key];
 304          }
 305          else
 306          {
 307              return null;
 308          }
 309      }
 310  
 311      /**
 312       * Get all captions
 313       *
 314       * @return array|null Array of {@see SimplePie_Caption} objects
 315       */
 316  	public function get_captions()
 317      {
 318          if ($this->captions !== null)
 319          {
 320              return $this->captions;
 321          }
 322          else
 323          {
 324              return null;
 325          }
 326      }
 327  
 328      /**
 329       * Get a single category
 330       *
 331       * @param int $key
 332       * @return SimplePie_Category|null
 333       */
 334  	public function get_category($key = 0)
 335      {
 336          $categories = $this->get_categories();
 337          if (isset($categories[$key]))
 338          {
 339              return $categories[$key];
 340          }
 341          else
 342          {
 343              return null;
 344          }
 345      }
 346  
 347      /**
 348       * Get all categories
 349       *
 350       * @return array|null Array of {@see SimplePie_Category} objects
 351       */
 352  	public function get_categories()
 353      {
 354          if ($this->categories !== null)
 355          {
 356              return $this->categories;
 357          }
 358          else
 359          {
 360              return null;
 361          }
 362      }
 363  
 364      /**
 365       * Get the number of audio channels
 366       *
 367       * @return int|null
 368       */
 369  	public function get_channels()
 370      {
 371          if ($this->channels !== null)
 372          {
 373              return $this->channels;
 374          }
 375          else
 376          {
 377              return null;
 378          }
 379      }
 380  
 381      /**
 382       * Get the copyright information
 383       *
 384       * @return SimplePie_Copyright|null
 385       */
 386  	public function get_copyright()
 387      {
 388          if ($this->copyright !== null)
 389          {
 390              return $this->copyright;
 391          }
 392          else
 393          {
 394              return null;
 395          }
 396      }
 397  
 398      /**
 399       * Get a single credit
 400       *
 401       * @param int $key
 402       * @return SimplePie_Credit|null
 403       */
 404  	public function get_credit($key = 0)
 405      {
 406          $credits = $this->get_credits();
 407          if (isset($credits[$key]))
 408          {
 409              return $credits[$key];
 410          }
 411          else
 412          {
 413              return null;
 414          }
 415      }
 416  
 417      /**
 418       * Get all credits
 419       *
 420       * @return array|null Array of {@see SimplePie_Credit} objects
 421       */
 422  	public function get_credits()
 423      {
 424          if ($this->credits !== null)
 425          {
 426              return $this->credits;
 427          }
 428          else
 429          {
 430              return null;
 431          }
 432      }
 433  
 434      /**
 435       * Get the description of the enclosure
 436       *
 437       * @return string|null
 438       */
 439  	public function get_description()
 440      {
 441          if ($this->description !== null)
 442          {
 443              return $this->description;
 444          }
 445          else
 446          {
 447              return null;
 448          }
 449      }
 450  
 451      /**
 452       * Get the duration of the enclosure
 453       *
 454       * @param string $convert Convert seconds into hh:mm:ss
 455       * @return string|int|null 'hh:mm:ss' string if `$convert` was specified, otherwise integer (or null if none found)
 456       */
 457  	public function get_duration($convert = false)
 458      {
 459          if ($this->duration !== null)
 460          {
 461              if ($convert)
 462              {
 463                  $time = SimplePie_Misc::time_hms($this->duration);
 464                  return $time;
 465              }
 466              else
 467              {
 468                  return $this->duration;
 469              }
 470          }
 471          else
 472          {
 473              return null;
 474          }
 475      }
 476  
 477      /**
 478       * Get the expression
 479       *
 480       * @return string Probably one of 'sample', 'full', 'nonstop', 'clip'. Defaults to 'full'
 481       */
 482  	public function get_expression()
 483      {
 484          if ($this->expression !== null)
 485          {
 486              return $this->expression;
 487          }
 488          else
 489          {
 490              return 'full';
 491          }
 492      }
 493  
 494      /**
 495       * Get the file extension
 496       *
 497       * @return string|null
 498       */
 499  	public function get_extension()
 500      {
 501          if ($this->link !== null)
 502          {
 503              $url = SimplePie_Misc::parse_url($this->link);
 504              if ($url['path'] !== '')
 505              {
 506                  return pathinfo($url['path'], PATHINFO_EXTENSION);
 507              }
 508          }
 509          return null;
 510      }
 511  
 512      /**
 513       * Get the framerate (in frames-per-second)
 514       *
 515       * @return string|null
 516       */
 517  	public function get_framerate()
 518      {
 519          if ($this->framerate !== null)
 520          {
 521              return $this->framerate;
 522          }
 523          else
 524          {
 525              return null;
 526          }
 527      }
 528  
 529      /**
 530       * Get the preferred handler
 531       *
 532       * @return string|null One of 'flash', 'fmedia', 'quicktime', 'wmedia', 'mp3'
 533       */
 534  	public function get_handler()
 535      {
 536          return $this->get_real_type(true);
 537      }
 538  
 539      /**
 540       * Get a single hash
 541       *
 542       * @link http://www.rssboard.org/media-rss#media-hash
 543       * @param int $key
 544       * @return string|null Hash as per `media:hash`, prefixed with "$algo:"
 545       */
 546  	public function get_hash($key = 0)
 547      {
 548          $hashes = $this->get_hashes();
 549          if (isset($hashes[$key]))
 550          {
 551              return $hashes[$key];
 552          }
 553          else
 554          {
 555              return null;
 556          }
 557      }
 558  
 559      /**
 560       * Get all credits
 561       *
 562       * @return array|null Array of strings, see {@see get_hash()}
 563       */
 564  	public function get_hashes()
 565      {
 566          if ($this->hashes !== null)
 567          {
 568              return $this->hashes;
 569          }
 570          else
 571          {
 572              return null;
 573          }
 574      }
 575  
 576      /**
 577       * Get the height
 578       *
 579       * @return string|null
 580       */
 581  	public function get_height()
 582      {
 583          if ($this->height !== null)
 584          {
 585              return $this->height;
 586          }
 587          else
 588          {
 589              return null;
 590          }
 591      }
 592  
 593      /**
 594       * Get the language
 595       *
 596       * @link http://tools.ietf.org/html/rfc3066
 597       * @return string|null Language code as per RFC 3066
 598       */
 599  	public function get_language()
 600      {
 601          if ($this->lang !== null)
 602          {
 603              return $this->lang;
 604          }
 605          else
 606          {
 607              return null;
 608          }
 609      }
 610  
 611      /**
 612       * Get a single keyword
 613       *
 614       * @param int $key
 615       * @return string|null
 616       */
 617  	public function get_keyword($key = 0)
 618      {
 619          $keywords = $this->get_keywords();
 620          if (isset($keywords[$key]))
 621          {
 622              return $keywords[$key];
 623          }
 624          else
 625          {
 626              return null;
 627          }
 628      }
 629  
 630      /**
 631       * Get all keywords
 632       *
 633       * @return array|null Array of strings
 634       */
 635  	public function get_keywords()
 636      {
 637          if ($this->keywords !== null)
 638          {
 639              return $this->keywords;
 640          }
 641          else
 642          {
 643              return null;
 644          }
 645      }
 646  
 647      /**
 648       * Get length
 649       *
 650       * @return float Length in bytes
 651       */
 652  	public function get_length()
 653      {
 654          if ($this->length !== null)
 655          {
 656              return $this->length;
 657          }
 658          else
 659          {
 660              return null;
 661          }
 662      }
 663  
 664      /**
 665       * Get the URL
 666       *
 667       * @return string|null
 668       */
 669  	public function get_link()
 670      {
 671          if ($this->link !== null)
 672          {
 673              return urldecode($this->link);
 674          }
 675          else
 676          {
 677              return null;
 678          }
 679      }
 680  
 681      /**
 682       * Get the medium
 683       *
 684       * @link http://www.rssboard.org/media-rss#media-content
 685       * @return string|null Should be one of 'image', 'audio', 'video', 'document', 'executable'
 686       */
 687  	public function get_medium()
 688      {
 689          if ($this->medium !== null)
 690          {
 691              return $this->medium;
 692          }
 693          else
 694          {
 695              return null;
 696          }
 697      }
 698  
 699      /**
 700       * Get the player URL
 701       *
 702       * Typically the same as {@see get_permalink()}
 703       * @return string|null Player URL
 704       */
 705  	public function get_player()
 706      {
 707          if ($this->player !== null)
 708          {
 709              return $this->player;
 710          }
 711          else
 712          {
 713              return null;
 714          }
 715      }
 716  
 717      /**
 718       * Get a single rating
 719       *
 720       * @param int $key
 721       * @return SimplePie_Rating|null
 722       */
 723  	public function get_rating($key = 0)
 724      {
 725          $ratings = $this->get_ratings();
 726          if (isset($ratings[$key]))
 727          {
 728              return $ratings[$key];
 729          }
 730          else
 731          {
 732              return null;
 733          }
 734      }
 735  
 736      /**
 737       * Get all ratings
 738       *
 739       * @return array|null Array of {@see SimplePie_Rating} objects
 740       */
 741  	public function get_ratings()
 742      {
 743          if ($this->ratings !== null)
 744          {
 745              return $this->ratings;
 746          }
 747          else
 748          {
 749              return null;
 750          }
 751      }
 752  
 753      /**
 754       * Get a single restriction
 755       *
 756       * @param int $key
 757       * @return SimplePie_Restriction|null
 758       */
 759  	public function get_restriction($key = 0)
 760      {
 761          $restrictions = $this->get_restrictions();
 762          if (isset($restrictions[$key]))
 763          {
 764              return $restrictions[$key];
 765          }
 766          else
 767          {
 768              return null;
 769          }
 770      }
 771  
 772      /**
 773       * Get all restrictions
 774       *
 775       * @return array|null Array of {@see SimplePie_Restriction} objects
 776       */
 777  	public function get_restrictions()
 778      {
 779          if ($this->restrictions !== null)
 780          {
 781              return $this->restrictions;
 782          }
 783          else
 784          {
 785              return null;
 786          }
 787      }
 788  
 789      /**
 790       * Get the sampling rate (in kHz)
 791       *
 792       * @return string|null
 793       */
 794  	public function get_sampling_rate()
 795      {
 796          if ($this->samplingrate !== null)
 797          {
 798              return $this->samplingrate;
 799          }
 800          else
 801          {
 802              return null;
 803          }
 804      }
 805  
 806      /**
 807       * Get the file size (in MiB)
 808       *
 809       * @return float|null File size in mebibytes (1048 bytes)
 810       */
 811  	public function get_size()
 812      {
 813          $length = $this->get_length();
 814          if ($length !== null)
 815          {
 816              return round($length/1048576, 2);
 817          }
 818          else
 819          {
 820              return null;
 821          }
 822      }
 823  
 824      /**
 825       * Get a single thumbnail
 826       *
 827       * @param int $key
 828       * @return string|null Thumbnail URL
 829       */
 830  	public function get_thumbnail($key = 0)
 831      {
 832          $thumbnails = $this->get_thumbnails();
 833          if (isset($thumbnails[$key]))
 834          {
 835              return $thumbnails[$key];
 836          }
 837          else
 838          {
 839              return null;
 840          }
 841      }
 842  
 843      /**
 844       * Get all thumbnails
 845       *
 846       * @return array|null Array of thumbnail URLs
 847       */
 848  	public function get_thumbnails()
 849      {
 850          if ($this->thumbnails !== null)
 851          {
 852              return $this->thumbnails;
 853          }
 854          else
 855          {
 856              return null;
 857          }
 858      }
 859  
 860      /**
 861       * Get the title
 862       *
 863       * @return string|null
 864       */
 865  	public function get_title()
 866      {
 867          if ($this->title !== null)
 868          {
 869              return $this->title;
 870          }
 871          else
 872          {
 873              return null;
 874          }
 875      }
 876  
 877      /**
 878       * Get mimetype of the enclosure
 879       *
 880       * @see get_real_type()
 881       * @return string|null MIME type
 882       */
 883  	public function get_type()
 884      {
 885          if ($this->type !== null)
 886          {
 887              return $this->type;
 888          }
 889          else
 890          {
 891              return null;
 892          }
 893      }
 894  
 895      /**
 896       * Get the width
 897       *
 898       * @return string|null
 899       */
 900  	public function get_width()
 901      {
 902          if ($this->width !== null)
 903          {
 904              return $this->width;
 905          }
 906          else
 907          {
 908              return null;
 909          }
 910      }
 911  
 912      /**
 913       * Embed the enclosure using `<embed>`
 914       *
 915       * @deprecated Use the second parameter to {@see embed} instead
 916       *
 917       * @param array|string $options See first paramter to {@see embed}
 918       * @return string HTML string to output
 919       */
 920  	public function native_embed($options='')
 921      {
 922          return $this->embed($options, true);
 923      }
 924  
 925      /**
 926       * Embed the enclosure using Javascript
 927       *
 928       * `$options` is an array or comma-separated key:value string, with the
 929       * following properties:
 930       *
 931       * - `alt` (string): Alternate content for when an end-user does not have
 932       *    the appropriate handler installed or when a file type is
 933       *    unsupported. Can be any text or HTML. Defaults to blank.
 934       * - `altclass` (string): If a file type is unsupported, the end-user will
 935       *    see the alt text (above) linked directly to the content. That link
 936       *    will have this value as its class name. Defaults to blank.
 937       * - `audio` (string): This is an image that should be used as a
 938       *    placeholder for audio files before they're loaded (QuickTime-only).
 939       *    Can be any relative or absolute URL. Defaults to blank.
 940       * - `bgcolor` (string): The background color for the media, if not
 941       *    already transparent. Defaults to `#ffffff`.
 942       * - `height` (integer): The height of the embedded media. Accepts any
 943       *    numeric pixel value (such as `360`) or `auto`. Defaults to `auto`,
 944       *    and it is recommended that you use this default.
 945       * - `loop` (boolean): Do you want the media to loop when its done?
 946       *    Defaults to `false`.
 947       * - `mediaplayer` (string): The location of the included
 948       *    `mediaplayer.swf` file. This allows for the playback of Flash Video
 949       *    (`.flv`) files, and is the default handler for non-Odeo MP3's.
 950       *    Defaults to blank.
 951       * - `video` (string): This is an image that should be used as a
 952       *    placeholder for video files before they're loaded (QuickTime-only).
 953       *    Can be any relative or absolute URL. Defaults to blank.
 954       * - `width` (integer): The width of the embedded media. Accepts any
 955       *    numeric pixel value (such as `480`) or `auto`. Defaults to `auto`,
 956       *    and it is recommended that you use this default.
 957       * - `widescreen` (boolean): Is the enclosure widescreen or standard?
 958       *    This applies only to video enclosures, and will automatically resize
 959       *    the content appropriately.  Defaults to `false`, implying 4:3 mode.
 960       *
 961       * Note: Non-widescreen (4:3) mode with `width` and `height` set to `auto`
 962       * will default to 480x360 video resolution.  Widescreen (16:9) mode with
 963       * `width` and `height` set to `auto` will default to 480x270 video resolution.
 964       *
 965       * @todo If the dimensions for media:content are defined, use them when width/height are set to 'auto'.
 966       * @param array|string $options Comma-separated key:value list, or array
 967       * @param bool $native Use `<embed>`
 968       * @return string HTML string to output
 969       */
 970  	public function embed($options = '', $native = false)
 971      {
 972          // Set up defaults
 973          $audio = '';
 974          $video = '';
 975          $alt = '';
 976          $altclass = '';
 977          $loop = 'false';
 978          $width = 'auto';
 979          $height = 'auto';
 980          $bgcolor = '#ffffff';
 981          $mediaplayer = '';
 982          $widescreen = false;
 983          $handler = $this->get_handler();
 984          $type = $this->get_real_type();
 985  
 986          // Process options and reassign values as necessary
 987          if (is_array($options))
 988          {
 989              extract($options);
 990          }
 991          else
 992          {
 993              $options = explode(',', $options);
 994              foreach($options as $option)
 995              {
 996                  $opt = explode(':', $option, 2);
 997                  if (isset($opt[0], $opt[1]))
 998                  {
 999                      $opt[0] = trim($opt[0]);
1000                      $opt[1] = trim($opt[1]);
1001                      switch ($opt[0])
1002                      {
1003                          case 'audio':
1004                              $audio = $opt[1];
1005                              break;
1006  
1007                          case 'video':
1008                              $video = $opt[1];
1009                              break;
1010  
1011                          case 'alt':
1012                              $alt = $opt[1];
1013                              break;
1014  
1015                          case 'altclass':
1016                              $altclass = $opt[1];
1017                              break;
1018  
1019                          case 'loop':
1020                              $loop = $opt[1];
1021                              break;
1022  
1023                          case 'width':
1024                              $width = $opt[1];
1025                              break;
1026  
1027                          case 'height':
1028                              $height = $opt[1];
1029                              break;
1030  
1031                          case 'bgcolor':
1032                              $bgcolor = $opt[1];
1033                              break;
1034  
1035                          case 'mediaplayer':
1036                              $mediaplayer = $opt[1];
1037                              break;
1038  
1039                          case 'widescreen':
1040                              $widescreen = $opt[1];
1041                              break;
1042                      }
1043                  }
1044              }
1045          }
1046  
1047          $mime = explode('/', $type, 2);
1048          $mime = $mime[0];
1049  
1050          // Process values for 'auto'
1051          if ($width === 'auto')
1052          {
1053              if ($mime === 'video')
1054              {
1055                  if ($height === 'auto')
1056                  {
1057                      $width = 480;
1058                  }
1059                  elseif ($widescreen)
1060                  {
1061                      $width = round((intval($height)/9)*16);
1062                  }
1063                  else
1064                  {
1065                      $width = round((intval($height)/3)*4);
1066                  }
1067              }
1068              else
1069              {
1070                  $width = '100%';
1071              }
1072          }
1073  
1074          if ($height === 'auto')
1075          {
1076              if ($mime === 'audio')
1077              {
1078                  $height = 0;
1079              }
1080              elseif ($mime === 'video')
1081              {
1082                  if ($width === 'auto')
1083                  {
1084                      if ($widescreen)
1085                      {
1086                          $height = 270;
1087                      }
1088                      else
1089                      {
1090                          $height = 360;
1091                      }
1092                  }
1093                  elseif ($widescreen)
1094                  {
1095                      $height = round((intval($width)/16)*9);
1096                  }
1097                  else
1098                  {
1099                      $height = round((intval($width)/4)*3);
1100                  }
1101              }
1102              else
1103              {
1104                  $height = 376;
1105              }
1106          }
1107          elseif ($mime === 'audio')
1108          {
1109              $height = 0;
1110          }
1111  
1112          // Set proper placeholder value
1113          if ($mime === 'audio')
1114          {
1115              $placeholder = $audio;
1116          }
1117          elseif ($mime === 'video')
1118          {
1119              $placeholder = $video;
1120          }
1121  
1122          $embed = '';
1123  
1124          // Flash
1125          if ($handler === 'flash')
1126          {
1127              if ($native)
1128              {
1129                  $embed .= "<embed src=\"" . $this->get_link() . "\" pluginspage=\"http://adobe.com/go/getflashplayer\" type=\"$type\" quality=\"high\" width=\"$width\" height=\"$height\" bgcolor=\"$bgcolor\" loop=\"$loop\"></embed>";
1130              }
1131              else
1132              {
1133                  $embed .= "<script type='text/javascript'>embed_flash('$bgcolor', '$width', '$height', '" . $this->get_link() . "', '$loop', '$type');</script>";
1134              }
1135          }
1136  
1137          // Flash Media Player file types.
1138          // Preferred handler for MP3 file types.
1139          elseif ($handler === 'fmedia' || ($handler === 'mp3' && $mediaplayer !== ''))
1140          {
1141              $height += 20;
1142              if ($native)
1143              {
1144                  $embed .= "<embed src=\"$mediaplayer\" pluginspage=\"http://adobe.com/go/getflashplayer\" type=\"application/x-shockwave-flash\" quality=\"high\" width=\"$width\" height=\"$height\" wmode=\"transparent\" flashvars=\"file=" . rawurlencode($this->get_link().'?file_extension=.'.$this->get_extension()) . "&autostart=false&repeat=$loop&showdigits=true&showfsbutton=false\"></embed>";
1145              }
1146              else
1147              {
1148                  $embed .= "<script type='text/javascript'>embed_flv('$width', '$height', '" . rawurlencode($this->get_link().'?file_extension=.'.$this->get_extension()) . "', '$placeholder', '$loop', '$mediaplayer');</script>";
1149              }
1150          }
1151  
1152          // QuickTime 7 file types.  Need to test with QuickTime 6.
1153          // Only handle MP3's if the Flash Media Player is not present.
1154          elseif ($handler === 'quicktime' || ($handler === 'mp3' && $mediaplayer === ''))
1155          {
1156              $height += 16;
1157              if ($native)
1158              {
1159                  if ($placeholder !== '')
1160                  {
1161                      $embed .= "<embed type=\"$type\" style=\"cursor:hand; cursor:pointer;\" href=\"" . $this->get_link() . "\" src=\"$placeholder\" width=\"$width\" height=\"$height\" autoplay=\"false\" target=\"myself\" controller=\"false\" loop=\"$loop\" scale=\"aspect\" bgcolor=\"$bgcolor\" pluginspage=\"http://apple.com/quicktime/download/\"></embed>";
1162                  }
1163                  else
1164                  {
1165                      $embed .= "<embed type=\"$type\" style=\"cursor:hand; cursor:pointer;\" src=\"" . $this->get_link() . "\" width=\"$width\" height=\"$height\" autoplay=\"false\" target=\"myself\" controller=\"true\" loop=\"$loop\" scale=\"aspect\" bgcolor=\"$bgcolor\" pluginspage=\"http://apple.com/quicktime/download/\"></embed>";
1166                  }
1167              }
1168              else
1169              {
1170                  $embed .= "<script type='text/javascript'>embed_quicktime('$type', '$bgcolor', '$width', '$height', '" . $this->get_link() . "', '$placeholder', '$loop');</script>";
1171              }
1172          }
1173  
1174          // Windows Media
1175          elseif ($handler === 'wmedia')
1176          {
1177              $height += 45;
1178              if ($native)
1179              {
1180                  $embed .= "<embed type=\"application/x-mplayer2\" src=\"" . $this->get_link() . "\" autosize=\"1\" width=\"$width\" height=\"$height\" showcontrols=\"1\" showstatusbar=\"0\" showdisplay=\"0\" autostart=\"0\"></embed>";
1181              }
1182              else
1183              {
1184                  $embed .= "<script type='text/javascript'>embed_wmedia('$width', '$height', '" . $this->get_link() . "');</script>";
1185              }
1186          }
1187  
1188          // Everything else
1189          else $embed .= '<a href="' . $this->get_link() . '" class="' . $altclass . '">' . $alt . '</a>';
1190  
1191          return $embed;
1192      }
1193  
1194      /**
1195       * Get the real media type
1196       *
1197       * Often, feeds lie to us, necessitating a bit of deeper inspection. This
1198       * converts types to their canonical representations based on the file
1199       * extension
1200       *
1201       * @see get_type()
1202       * @param bool $find_handler Internal use only, use {@see get_handler()} instead
1203       * @return string MIME type
1204       */
1205  	public function get_real_type($find_handler = false)
1206      {
1207          // Mime-types by handler.
1208          $types_flash = array('application/x-shockwave-flash', 'application/futuresplash'); // Flash
1209          $types_fmedia = array('video/flv', 'video/x-flv','flv-application/octet-stream'); // Flash Media Player
1210          $types_quicktime = array('audio/3gpp', 'audio/3gpp2', 'audio/aac', 'audio/x-aac', 'audio/aiff', 'audio/x-aiff', 'audio/mid', 'audio/midi', 'audio/x-midi', 'audio/mp4', 'audio/m4a', 'audio/x-m4a', 'audio/wav', 'audio/x-wav', 'video/3gpp', 'video/3gpp2', 'video/m4v', 'video/x-m4v', 'video/mp4', 'video/mpeg', 'video/x-mpeg', 'video/quicktime', 'video/sd-video'); // QuickTime
1211          $types_wmedia = array('application/asx', 'application/x-mplayer2', 'audio/x-ms-wma', 'audio/x-ms-wax', 'video/x-ms-asf-plugin', 'video/x-ms-asf', 'video/x-ms-wm', 'video/x-ms-wmv', 'video/x-ms-wvx'); // Windows Media
1212          $types_mp3 = array('audio/mp3', 'audio/x-mp3', 'audio/mpeg', 'audio/x-mpeg'); // MP3
1213  
1214          if ($this->get_type() !== null)
1215          {
1216              $type = strtolower($this->type);
1217          }
1218          else
1219          {
1220              $type = null;
1221          }
1222  
1223          // If we encounter an unsupported mime-type, check the file extension and guess intelligently.
1224          if (!in_array($type, array_merge($types_flash, $types_fmedia, $types_quicktime, $types_wmedia, $types_mp3)))
1225          {
1226              switch (strtolower($this->get_extension()))
1227              {
1228                  // Audio mime-types
1229                  case 'aac':
1230                  case 'adts':
1231                      $type = 'audio/acc';
1232                      break;
1233  
1234                  case 'aif':
1235                  case 'aifc':
1236                  case 'aiff':
1237                  case 'cdda':
1238                      $type = 'audio/aiff';
1239                      break;
1240  
1241                  case 'bwf':
1242                      $type = 'audio/wav';
1243                      break;
1244  
1245                  case 'kar':
1246                  case 'mid':
1247                  case 'midi':
1248                  case 'smf':
1249                      $type = 'audio/midi';
1250                      break;
1251  
1252                  case 'm4a':
1253                      $type = 'audio/x-m4a';
1254                      break;
1255  
1256                  case 'mp3':
1257                  case 'swa':
1258                      $type = 'audio/mp3';
1259                      break;
1260  
1261                  case 'wav':
1262                      $type = 'audio/wav';
1263                      break;
1264  
1265                  case 'wax':
1266                      $type = 'audio/x-ms-wax';
1267                      break;
1268  
1269                  case 'wma':
1270                      $type = 'audio/x-ms-wma';
1271                      break;
1272  
1273                  // Video mime-types
1274                  case '3gp':
1275                  case '3gpp':
1276                      $type = 'video/3gpp';
1277                      break;
1278  
1279                  case '3g2':
1280                  case '3gp2':
1281                      $type = 'video/3gpp2';
1282                      break;
1283  
1284                  case 'asf':
1285                      $type = 'video/x-ms-asf';
1286                      break;
1287  
1288                  case 'flv':
1289                      $type = 'video/x-flv';
1290                      break;
1291  
1292                  case 'm1a':
1293                  case 'm1s':
1294                  case 'm1v':
1295                  case 'm15':
1296                  case 'm75':
1297                  case 'mp2':
1298                  case 'mpa':
1299                  case 'mpeg':
1300                  case 'mpg':
1301                  case 'mpm':
1302                  case 'mpv':
1303                      $type = 'video/mpeg';
1304                      break;
1305  
1306                  case 'm4v':
1307                      $type = 'video/x-m4v';
1308                      break;
1309  
1310                  case 'mov':
1311                  case 'qt':
1312                      $type = 'video/quicktime';
1313                      break;
1314  
1315                  case 'mp4':
1316                  case 'mpg4':
1317                      $type = 'video/mp4';
1318                      break;
1319  
1320                  case 'sdv':
1321                      $type = 'video/sd-video';
1322                      break;
1323  
1324                  case 'wm':
1325                      $type = 'video/x-ms-wm';
1326                      break;
1327  
1328                  case 'wmv':
1329                      $type = 'video/x-ms-wmv';
1330                      break;
1331  
1332                  case 'wvx':
1333                      $type = 'video/x-ms-wvx';
1334                      break;
1335  
1336                  // Flash mime-types
1337                  case 'spl':
1338                      $type = 'application/futuresplash';
1339                      break;
1340  
1341                  case 'swf':
1342                      $type = 'application/x-shockwave-flash';
1343                      break;
1344              }
1345          }
1346  
1347          if ($find_handler)
1348          {
1349              if (in_array($type, $types_flash))
1350              {
1351                  return 'flash';
1352              }
1353              elseif (in_array($type, $types_fmedia))
1354              {
1355                  return 'fmedia';
1356              }
1357              elseif (in_array($type, $types_quicktime))
1358              {
1359                  return 'quicktime';
1360              }
1361              elseif (in_array($type, $types_wmedia))
1362              {
1363                  return 'wmedia';
1364              }
1365              elseif (in_array($type, $types_mp3))
1366              {
1367                  return 'mp3';
1368              }
1369              else
1370              {
1371                  return null;
1372              }
1373          }
1374          else
1375          {
1376              return $type;
1377          }
1378      }
1379  }
1380  


Generated: Thu Dec 12 01:00:04 2019 Cross-referenced by PHPXref 0.7.1