. * */ 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; $data=self::getPluginData($id); if($data){ if(isset($data['info']['require'])){ $minVersion=explode('.',$data['info']['require']); $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;$i'.' 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); } } /** ( Load data from the plugin.xml of a plugin, either identified by the plugin or the path of the plugin.xml file * @param string id *( @return array */ public static function getPluginData($id){ global $SERVERROOT; if(is_file($id)){ $file=$id; } if(!is_dir($SERVERROOT.'/plugins/'.$id) or !is_file($SERVERROOT.'/plugins/'.$id.'/plugin.xml')){ return false; }else{ $file=$SERVERROOT.'/plugins/'.$id.'/plugin.xml'; } $data=array(); $plugin=new DOMDocument(); $plugin->load($file); $data['version']=$plugin->documentElement->getAttribute('version'); $info=$plugin->getElementsByTagName('info'); if($info->length>0){ $info=$info->item(0); $data['info']=array(); foreach($info->childNodes as $child){ if($child->nodeType==XML_ELEMENT_NODE){ $data['info'][$child->tagName]=$child->textContent; } } } $runtime=$plugin->getElementsByTagName('runtime'); if($runtime->length>0){ $runtime=$runtime->item(0); $data['runtime']=array(); foreach($runtime->childNodes as $child){ if($child->nodeType==XML_ELEMENT_NODE and $child->tagName=='include'){ $data['runtime'][]=$child->textContent; } } } $install=$plugin->getElementsByTagName('install'); if($install->length>0){ $install=$install->item(0); $data['install']=array(); foreach($install->childNodes as $child){ if($child->nodeType==XML_ELEMENT_NODE){ $data['install']['include']=array(); $data['install']['dialog']=array(); $data['install']['database']=array(); switch($child->tagName){ case 'include': $data['install']['include'][]=$child->textContent; break; case 'dialog': $data['install']['dialog'][]=$child->textContent; break; case 'database': $data['install']['database'][]=$child->textContent; break; } } } } $uninstall=$plugin->getElementsByTagName('uninstall'); if($uninstall->length>0){ $uninstall=$uninstall->item(0); $data['uninstall']=array(); foreach($uninstall->childNodes as $child){ if($child->nodeType==XML_ELEMENT_NODE){ $data['uninstall']['include']=array(); $data['uninstall']['dialog']=array(); switch($child->tagName){ case 'include': $data['uninstall']['include'][]=$child->textContent; break; case 'dialog': $data['uninstall']['dialog'][]=$child->textContent; break; } } } } return $data; } } ?>