diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/plugin.php | 381 |
1 files changed, 0 insertions, 381 deletions
diff --git a/lib/plugin.php b/lib/plugin.php deleted file mode 100644 index d8291a8a758..00000000000 --- a/lib/plugin.php +++ /dev/null @@ -1,381 +0,0 @@ -<?php - -/** -* ownCloud -* -* @author Frank Karlitschek -* @copyright 2010 Frank Karlitschek karlitschek@kde.org -* -* This library is free software; you can redistribute it and/or -* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE -* License as published by the Free Software Foundation; either -* version 3 of the License, or any later version. -* -* This library is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU AFFERO GENERAL PUBLIC LICENSE for more details. -* -* You should have received a copy of the GNU Affero General Public -* License along with this library. If not, see <http://www.gnu.org/licenses/>. -* -*/ - -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<count($minVersion);$i++){ - if($version[$i]<$minVersion[$i]){ - return false; - } - } - } - //check for uninstalled db's - if(isset($data['install']) and isset($data['install']['database'])){ - foreach($data['install']['database'] as $db){ - $installed=OC_APPCONFIG::getValue('plugin_installer','database_installed_'.$id.'_'.$db,'false'); - if($installed!='true'){ - self::installDB($id); - break; - } - } - } - - if(isset($data['runtime'])){ - foreach($data['runtime'] as $include){ - include($SERVERROOT.'/plugins/'.$id.'/'.$include); - } - } - } - return false; - } - - /** - * Get a list of all installed plugins - */ - public static function listPlugins() { - global $SERVERROOT; - $plugins = array(); - $fd = opendir($SERVERROOT . '/plugins'); - while ( false !== ($filename = readdir($fd)) ) { - if ( $filename<>'.' AND $filename<>'..' AND ('.' != substr($filename, 0, 1))) { - if(file_exists($SERVERROOT . '/plugins/'.$filename.'/plugin.xml')){ - $plugins[]=$filename; - } - } - } - closedir($fd); - return $plugins; - } - - /** - * Load all plugins that aren't blacklisted - */ - public static function loadPlugins() { - $CONFIG_INSTALLED = OC_CONFIG::getValue( "installed", false ); - if($CONFIG_INSTALLED){ - global $SERVERROOT; - $plugins = self::listPlugins(); - $blacklist=self::loadBlacklist(); - foreach($plugins as $plugin){ - if (array_search($plugin,$blacklist)===false) { - self::load($plugin); - } - } - } - } - - /** - * load the blacklist from blacklist.txt - * @return array - */ - public 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; - }else{ - 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; - $data['install']['database_installed'][$child->textContent]=($child->hasAttribute('installed') and $child->getAttribute('installed')=='true')?true:false; - 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; - } - - - /** - * Save data to the plugin.xml of a plugin, either identified by the plugin or the path of the plugin.xml file - * @param string id - * @param array data the plugin data in the same structure as returned by getPluginData - * @return bool - */ - public static function savePluginData($id,$data){ - 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'; - } - $plugin=new DOMDocument(); - $pluginNode=$plugin->createElement('plugin'); - $pluginNode->setAttribute('version',$data['version']); - $plugin->appendChild($pluginNode); - $info=$plugin->createElement('info'); - foreach($data['info'] as $name=>$value){ - $node=$plugin->createElement($name); - $node->appendChild($plugin->createTextNode($value)); - $info->appendChild($node); - } - $pluginNode->appendChild($info); - if(isset($data['runtime'])){ - $runtime=$plugin->createElement('runtime'); - foreach($data['runtime'] as $include){ - $node=$plugin->createElement('include'); - $node->appendChild($plugin->createTextNode($include)); - $runtime->appendChild($node); - } - $pluginNode->appendChild($runtime); - } - if(isset($data['install'])){ - $install=$plugin->createElement('install'); - foreach($data['install']['include'] as $include){ - $node=$plugin->createElement('include'); - $node->appendChild($plugin->createTextNode($include)); - $install->appendChild($node); - } - foreach($data['install']['dialog'] as $dialog){ - $node=$plugin->createElement('dialog'); - $node->appendChild($plugin->createTextNode($dialog)); - $install->appendChild($node); - } - foreach($data['install']['database'] as $database){ - $node=$plugin->createElement('database'); - $node->appendChild($plugin->createTextNode($database)); - if($data['install']['database_installed'][$database]){ - $node->setAttribute('installed','true'); - } - $install->appendChild($node); - } - $pluginNode->appendChild($install); - } - if(isset($data['uninstall'])){ - $uninstall=$plugin->createElement('uninstall'); - foreach($data['uninstall']['include'] as $include){ - $node=$plugin->createElement('include'); - $node->appendChild($plugin->createTextNode($include)); - $uninstall->appendChild($node); - } - foreach($data['uninstall']['dialog'] as $dialog){ - $node=$plugin->createElement('dialog'); - $node->appendChild($plugin->createTextNode($dialog)); - $uninstall->appendChild($node); - } - $pluginNode->appendChild($uninstall); - } - $plugin->save($file); - } - - /** - * install the databases of a plugin - * @param string id - * @return bool - */ - public static function installDB($id){ - global $SERVERROOT; - $data=OC_PLUGIN::getPluginData($id); - foreach($data['install']['database'] as $db){ - $installed=OC_APPCONFIG::getValue('plugin_installer','database_installed_'.$id.'_'.$db,'false'); - if ($installed!='true'){ - $file=$SERVERROOT.'/plugins/'.$id.'/'.$db; - OC_DB::createDbFromStructure($file); - OC_APPCONFIG::setValue('plugin_installer','database_installed_'.$id.'_'.$db,'true'); - } - } - return true; - } - - public static function installPlugin($path){ - global $SERVERROOT; - if(is_file($path)){ - $zip = new ZipArchive; - if($zip->open($path)===TRUE){ - $folder=sys_get_temp_dir().'/OC_PLUGIN_INSTALL/'; - mkdir($folder); - $zip->extractTo($folder); - if(is_file($folder.'/plugin.xml')){ - $pluginData=self::getPluginData($folder.'/plugin.xml'); - if(array_search($pluginData['info']['id'],self::listPlugins())===false){ - if(isset($pluginData['install'])){ - foreach($pluginData['install']['database'] as $db){ - OC_DB::createDbFromStructure($folder.'/'.$db); - OC_APPCONFIG::setValue('plugin_installer','database_installed_'.$id.'_'.$db,'true'); - } - foreach($pluginData['install']['include'] as $include){ - include($folder.'/'.$include); - } - } - recursive_copy($folder,$SERVERROOT.'/plugins/'.$pluginData['info']['id']); - } - } - delTree($folder); - } - } - } -} -?> |