diff options
Diffstat (limited to 'lib/videolist.php')
| -rw-r--r-- | lib/videolist.php | 65 | 
1 files changed, 41 insertions, 24 deletions
diff --git a/lib/videolist.php b/lib/videolist.php index 2dfc7d8fc..b86db99cf 100644 --- a/lib/videolist.php +++ b/lib/videolist.php @@ -1,29 +1,46 @@  <?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"); -} - -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(); +/** + * @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;  } -function videolist_get_data($parsed) { -	$videotype = $parsed['videotype']; -	$video_id = $parsed['video_id']; -	 -	if(is_callable("videolist_get_data_$videotype")){ -		return array_merge($parsed, call_user_func("videolist_get_data_$videotype", $parsed)); -	} else { -		return $parsed; -	} +/** + * @param string $url + * @return array [parsed, platform] + */ +function videolist_parse_url($url) { +    $params = array( +        '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;  }  | 
