provide a function to load the data from a plugin.xml file

This commit is contained in:
Robin Appelman 2010-08-05 02:44:54 +02:00
parent 8b2ff8dcad
commit 5f53165efb
5 changed files with 97 additions and 26 deletions

View File

@ -89,6 +89,9 @@ oc_require_once('lib_plugin.php');
OC_PLUGIN::loadPlugins();
if(!isset($CONFIG_BACKEND)){
$CONFIG_BACKEND='database';
}
OC_USER::setBackend($CONFIG_BACKEND);
if(!is_dir($CONFIG_DATADIRECTORY_ROOT)){

View File

@ -31,16 +31,10 @@ class OC_PLUGIN{
*/
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);
$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){
@ -55,16 +49,8 @@ class OC_PLUGIN{
}
}
}
$pluginId=$plugin->getElementsByTagName('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;
foreach($data['runtime'] as $include){
include($SERVERROOT.'/plugins/'.$id.'/'.$include);
}
}
return false;
@ -150,6 +136,90 @@ class OC_PLUGIN{
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;
}
}
?>

View File

@ -21,7 +21,6 @@
*
*/
global $CONFIG_BACKEND;
@ -39,7 +38,6 @@ if ( !isset($_SESSION['group_id_cache']) ) {
$_SESSION['group_id_cache'] = array();
}
OC_USER::setBackend($CONFIG_BACKEND);

View File

@ -1,13 +1,13 @@
<?xml version="1.0"?>
<plugin version='1.0'>
<meta>
<info>
<id>music</id>
<name>Music player for ownCloud</name>
<version>0.1</version>
<licence>AGPL</licence>
<author>2010 Frank Karlitschek karlitschek@kde.org</author>
<require>1.1</require>
</meta>
</info>
<runtime>
<include>lib_music.php</include>
</runtime>

View File

@ -1,13 +1,13 @@
<?xml version="1.0"?>
<plugin version='1.0'>
<meta>
<info>
<id>test</id>
<name>Test plugin</name>
<version>0.1</version>
<licence>AGPL</licence>
<author>2010 Frank Karlitschek karlitschek@kde.org</author>
<require>1.1</require>
</meta>
</info>
<runtime>
<include>lib_test.php</include>
</runtime>