[ Index ]

PHP Cross Reference of WordPress Trunk (Updated Daily)

Search

title

Body

[close]

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

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


Generated : Thu Oct 24 08:20:01 2024 Cross-referenced by PHPXref