aboutsummaryrefslogtreecommitdiff
path: root/lib/videolist.php
diff options
context:
space:
mode:
authorSteve Clay <steve@mrclay.org>2012-04-09 17:05:57 -0400
committerSteve Clay <steve@mrclay.org>2012-04-09 17:05:57 -0400
commitf399afdd2e3cc072efaca069b7a874c7801b31f6 (patch)
treea2f5d4fb13f5d2b142953451f37294d4b8981598 /lib/videolist.php
parente80bb29671b7887d5749a9eb147be38e6f0401f4 (diff)
downloadelgg-f399afdd2e3cc072efaca069b7a874c7801b31f6.tar.gz
elgg-f399afdd2e3cc072efaca069b7a874c7801b31f6.tar.bz2
switched to platform classes. see https://github.com/Elgg/videolist/issues/4
Diffstat (limited to 'lib/videolist.php')
-rw-r--r--lib/videolist.php61
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;
}