additional_plugins/serendipity_event_oembed/oembed/ProviderManager.class.php
Grischa Brockhaus b1ea56b430 OEmbed:
* Instagr.am added
* Global maxwidth/maxheight setting
*Microblogging:
* Minimal optical changes
2011-12-16 11:44:55 +01:00

38 lines
1.5 KiB
PHP

<?php
class ProviderManager{
private $providers;
private static $_instance;
private function __construct($maxwidth=null, $maxheight=null){
$this->providers=array();
$xml = simplexml_load_file(PLUGIN_OEMBED_PROVIDER_XML_FILE);// PROVIDER_XML comes from config.php
foreach($xml->provider as $provider){
if(!isset($provider->class) && isset($provider->endpoint)){
$onlyJson = isset($provider->jsononly);
$dimensionsSupported = !isset($provider->nodimensionsupport);
$this->register(new OEmbedProvider($provider->url,$provider->endpoint, $onlyJson, $maxwidth, $maxheight, $dimensionsSupported));
} else {
$classname="".$provider->class; // force to be string :)
$reflection = new ReflectionClass($classname);
$this->register($reflection->newInstance($provider));//so we could pass config vars
}
}
}
static function getInstance($maxwidth=null, $maxheight=null){
if(!isset($_instance) || $_instance==null){
$_instance = new ProviderManager($maxwidth, $maxheight);
}
return $_instance;
}
public function register($provider){
$this->providers[]=$provider;
}
public function provide($url,$format){
foreach ($this->providers as $provider){
if ($provider->match($url)){
return $provider->provide($url,$format);
}
}
return null;
}
}