externalvideo: Added support for various media sources
[mahara:mahara.git] / htdocs / blocktype / externalvideo / media_sources / youtube / mediasource.php
1 <?php
2
3 require_once(dirname(__FILE__) . '/../Media_base.php');
4
5 class Media_youtube implements MediaBase {
6
7     private static $base_url = 'http://youtube.com/';
8
9     private static $default_width  = 560;
10     private static $default_height = 349;
11
12     private static $iframe_sources = array(
13         array(
14             'match' => '#.*youtube\.com.*(v|(cp))(=|\/)([a-zA-Z0-9_=-]+).*#',
15             'url'   => 'http://www.youtube.com/embed/$4'
16         ),
17         array(
18             'match' => '#.*https?://(www\.)?youtube\.com/embed/([a-zA-Z0-9\-_+]*).*#',
19             'url'   => 'http://www.youtube.com/embed/$2',
20         ),
21         array(
22             'match' => '#https?://(www\.)?youtu\.be/([a-zA-Z0-9\-_+]*)#',
23             'url'   => 'http://www.youtube.com/embed/$2',
24         ),
25     );
26
27     public function process_url($input, $width=0, $height=0) {
28         $width  = $width  ? (int)$width  : self::$default_width;
29         $height = $height ? (int)$height : self::$default_height;
30
31         foreach (self::$iframe_sources as $source) {
32             if (preg_match($source['match'], $input)) {
33                 $output = preg_replace($source['match'], $source['url'], $input);
34                 $result = array(
35                     'videoid' => $output,
36                     'type'    => 'iframe',
37                     'width'   => $width,
38                     'height'  => $height,
39                 );
40                 return $result;
41             }
42         }
43         return false;
44     }
45
46     public function validate_url($input) {
47         foreach (self::$iframe_sources as $source) {
48             if (preg_match($source['match'], $input)) {
49                 return true;
50             }
51         }
52         return false;
53     }
54
55     public function get_base_url() {
56         return self::$base_url;
57     }
58 }