. * */ class OC_PLUGIN{ static private $blacklist=array(); /** * load the plugin with the given id * @param string id * @return bool */ static public function load($id){ global $SERVERROOT; if(is_dir($SERVERROOT.'/plugins/'.$id) and is_file($SERVERROOT.'/plugins/'.$id.'/plugin.xml')){ $plugin=new DOMDocument(); $plugin->load($SERVERROOT.'/plugins/'.$id.'/plugin.xml'); if($plugin->documentElement->getAttribute('version')!=='1.0'){ //we only support this for now return false; } $minVersion=$plugin->getElementsByTagName('require'); if($minVersion->length>0){ $minVersion=$minVersion->item(0)->textContent; $minVersion=explode('.',$minVersion); $version=OC_UTIL::getVersion(); $roundTo=count($minVersion); while(count($version)>$roundTo){ if($version[count($version)-1]>=50){ $version[count($version)-2]++; } unset($version[count($version)-1]); } for($i=0;$igetElementsByTagName('id')->item(0)->textContent; if($pluginId==$id){//sanity check for plugins installed in the wrong folder $childs=$plugin->getElementsByTagName('runtime')->item(0)->childNodes; foreach($childs as $child){ if($child->nodeType==XML_ELEMENT_NODE and $child->tagName=='include'){ $file=$SERVERROOT.'/plugins/'.$id.'/'.$child->textContent; include($file); } } return true; } } return false; } /** * Load all plugins that aren't blacklisted */ public static function loadPlugins() { global $SERVERROOT; $plugins = array(); $blacklist=self::loadBlacklist(); $fd = opendir($SERVERROOT . '/plugins'); while ( false !== ($filename = readdir($fd)) ) { if ( $filename<>'.' AND $filename<>'..' AND ('.' != substr($filename, 0, 1)) AND array_search($filename,$blacklist)===false) { self::load($filename); } } closedir($fd); } /** * load the blacklist from blacklist.txt * @return array */ private static function loadBlacklist(){ global $SERVERROOT; if(count(self::$blacklist)>0){ return self::$blacklist; } $blacklist=array(); if(is_file($SERVERROOT.'/plugins/blacklist.txt')){ $file=file_get_contents($SERVERROOT.'/plugins/blacklist.txt'); $lines=explode("\n",$file); foreach($lines as $line){ $id=trim($line); if($id!='' and is_dir($SERVERROOT.'/plugins/'.$id)){ $blacklist[]=$id; } } } self::$blacklist=$blacklist; return $blacklist; } /** * save a blacklist to blacklist.txt * @param array blacklist */ private static function saveBlacklist($blacklist){ global $SERVERROOT; $file=''; foreach($blacklist as $item){ $file.="$item\n"; } self::$blacklist=$blacklist; file_put_contents($SERVERROOT.'/plugins/blacklist.txt',$file); } /** * add a plugin to the blacklist * @param string id */ public static function addToBlacklist($id){ $blacklist=self::loadBlacklist(); if(array_search($id,$blacklist)===false){ $blacklist[]=$id; self::$blacklist=$blacklist; self::saveBlacklist($blacklist); } } /** * remove a plugin to the blacklist * @param string id */ public static function removeFromBlacklist($id){ $blacklist=self::loadBlacklist(); $index=array_search($id,$blacklist); if($index!==false){ unset($blacklist[$index]); self::$blacklist=$blacklist; self::saveBlacklist($blacklist); } } } ?>