[ Index ] |
PHP Cross Reference of WordPress Trunk (Updated Daily) |
[Summary view] [Print] [Text view]
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');
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated : Sat Dec 21 08:20:01 2024 | Cross-referenced by PHPXref |