]> source.dussan.org Git - nextcloud-server.git/commitdiff
provide a function to load the data from a plugin.xml file
authorRobin Appelman <icewind1991@gmail.com>
Thu, 5 Aug 2010 00:44:54 +0000 (02:44 +0200)
committerRobin Appelman <icewind1991@gmail.com>
Thu, 5 Aug 2010 00:47:34 +0000 (02:47 +0200)
inc/lib_base.php
inc/lib_plugin.php
inc/lib_user.php
plugins/music/plugin.xml
plugins/test/plugin.xml

index d11137da30755df3b59c5bddf405d4675b555c91..32d5f17a41a92b09b341ea09df8351006d7ffa2f 100644 (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)){
index 6c63139b747adf7a723845b2366577e691ad4a88..c846fe25603857cbcc2832c2b8dcf4d51394f768 100644 (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;
+       }
 }
 
 ?>
index 0d9b1c5dda614eed553fa6cef195307cbaa5b473..73faf77a166c281de80d923a9be92a97b9615349 100644 (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);
 
 
 
index bac4f5e8e223949c7e0971264ea1d27d812a60b2..2ef3c08343cd9d34ce1c911007722e2fb30afd56 100644 (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>
index b666b5bc53c1095606648d216f3d15ab006f1d1a..b9207c27637a15244f7ed9032bb3341f4bc509af 100644 (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>