diff options
Diffstat (limited to 'lib/videolist.php')
-rw-r--r-- | lib/videolist.php | 61 |
1 files changed, 35 insertions, 26 deletions
diff --git a/lib/videolist.php b/lib/videolist.php index ae2441847..93b27b51c 100644 --- a/lib/videolist.php +++ b/lib/videolist.php @@ -1,36 +1,45 @@ <?php -define('VIDEOLIST_SUPPORTED_PLATFORMS', 'youtube, vimeo, metacafe, bliptv, gisstv'); - -foreach(explode(', ', VIDEOLIST_SUPPORTED_PLATFORMS) as $videotype){ - include(elgg_get_plugins_path()."videolist/lib/$videotype.php"); -} - /** - * @param string $url * @return array */ -function videolist_parseurl($url){ - foreach(explode(', ', VIDEOLIST_SUPPORTED_PLATFORMS) as $videotype){ - if (is_callable("videolist_parseurl_$videotype")){ - if ($parsed = call_user_func("videolist_parseurl_$videotype", $url)) { - return $parsed; - } - } - } - return array(); +function videolist_get_default_platforms() { + static $platforms = array(); + if (! $platforms) { + require dirname(__FILE__) . '/Videolist/PlatformInterface.php'; + $path = dirname(__FILE__) . '/Videolist/Platform'; + foreach (scandir($path) as $filename) { + if (preg_match('/^(\\w+)\\.php$/', $filename, $m)) { + require "$path/$filename"; + $class = 'Videolist_Platform_' . $m[1]; + $platform = new $class(); + if ($platform instanceof Videolist_PlatformInterface) { + /* @var Videolist_PlatformInterface $platform */ + $platforms[$platform->getType()][] = $platform; + } + } + } + } + return $platforms; } /** - * @param array $parsed - * @return array + * @param string $url + * @return array [parsed, platform] */ -function videolist_get_data($parsed) { - $videotype = $parsed['videotype']; - - if(is_callable("videolist_get_data_$videotype")){ - return array_merge($parsed, call_user_func("videolist_get_data_$videotype", $parsed)); - } else { - return $parsed; - } +function videolist_parse_url($url) { + $parsed = parse_url($url); + $params['url'] = $url; + $platforms = videolist_get_default_platforms(); + $platforms = elgg_trigger_plugin_hook('videolist:prepare', 'platforms', $params, $platforms); + foreach ($platforms as $list) { + foreach ($list as $platform) { + /* @var Videolist_PlatformInterface $platform */ + $parsed = $platform->parseUrl($url); + if ($parsed) { + return array($parsed, $platform); + } + } + } + return false; } |