aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobin Appelman <icewind@owncloud.com>2012-03-30 14:39:07 +0200
committerRobin Appelman <icewind@owncloud.com>2012-03-30 14:39:07 +0200
commit523fdda39915dd49190727ac74458a28f2d00f10 (patch)
treebbf71b0c460074042159b94f9b4771dfd65e8bbe
parenta07c6b1a2ea66f00b3e85d480703ca06a4b241be (diff)
downloadnextcloud-server-523fdda39915dd49190727ac74458a28f2d00f10.tar.gz
nextcloud-server-523fdda39915dd49190727ac74458a28f2d00f10.zip
add the option to only load apps of a specific type
-rw-r--r--apps/files_archive/appinfo/info.xml3
-rw-r--r--apps/files_encryption/appinfo/info.xml3
-rw-r--r--apps/files_remote/appinfo/info.xml3
-rw-r--r--apps/files_sharing/appinfo/info.xml3
-rw-r--r--files/ajax/download.php3
-rw-r--r--files/ajax/list.php3
-rw-r--r--files/ajax/mimeicon.php3
-rw-r--r--files/webdav.php3
-rwxr-xr-xlib/app.php51
-rw-r--r--lib/base.php7
10 files changed, 76 insertions, 6 deletions
diff --git a/apps/files_archive/appinfo/info.xml b/apps/files_archive/appinfo/info.xml
index df767d39f6b..236b5a64b05 100644
--- a/apps/files_archive/appinfo/info.xml
+++ b/apps/files_archive/appinfo/info.xml
@@ -7,4 +7,7 @@
<licence>AGPL</licence>
<author>Robin Appelman</author>
<require>3</require>
+ <types>
+ <filesystem/>
+ </types>
</info>
diff --git a/apps/files_encryption/appinfo/info.xml b/apps/files_encryption/appinfo/info.xml
index 053044aaed2..691b265bf60 100644
--- a/apps/files_encryption/appinfo/info.xml
+++ b/apps/files_encryption/appinfo/info.xml
@@ -7,4 +7,7 @@
<licence>AGPL</licence>
<author>Robin Appelman</author>
<require>3</require>
+ <types>
+ <filesystem/>
+ </types>
</info>
diff --git a/apps/files_remote/appinfo/info.xml b/apps/files_remote/appinfo/info.xml
index 0720b6095b9..8cf66ddbc37 100644
--- a/apps/files_remote/appinfo/info.xml
+++ b/apps/files_remote/appinfo/info.xml
@@ -7,4 +7,7 @@
<licence>AGPL</licence>
<author>Robin Appelman</author>
<require>3</require>
+ <types>
+ <filesystem/>
+ </types>
</info>
diff --git a/apps/files_sharing/appinfo/info.xml b/apps/files_sharing/appinfo/info.xml
index abf847b4483..8fda775520b 100644
--- a/apps/files_sharing/appinfo/info.xml
+++ b/apps/files_sharing/appinfo/info.xml
@@ -8,4 +8,7 @@
<author>Michael Gapczynski</author>
<require>2</require>
<default_enable/>
+ <types>
+ <filesystem/>
+ </types>
</info>
diff --git a/files/ajax/download.php b/files/ajax/download.php
index 198069f3fa1..39852613ab9 100644
--- a/files/ajax/download.php
+++ b/files/ajax/download.php
@@ -21,6 +21,9 @@
*
*/
+// only need filesystem apps
+$RUNTIME_APPTYPES=array('filesystem');
+
// Init owncloud
require_once('../../lib/base.php');
diff --git a/files/ajax/list.php b/files/ajax/list.php
index 8a414827e1c..ec9ab7342dd 100644
--- a/files/ajax/list.php
+++ b/files/ajax/list.php
@@ -1,5 +1,8 @@
<?php
+// only need filesystem apps
+$RUNTIME_APPTYPES=array('filesystem');
+
// Init owncloud
require_once('../../lib/base.php');
diff --git a/files/ajax/mimeicon.php b/files/ajax/mimeicon.php
index 8724016b3a1..ff72ba0f5b7 100644
--- a/files/ajax/mimeicon.php
+++ b/files/ajax/mimeicon.php
@@ -1,5 +1,8 @@
<?php
+// no need for apps
+$RUNTIME_NOAPPS=false;
+
// Init owncloud
require_once('../../lib/base.php');
diff --git a/files/webdav.php b/files/webdav.php
index 6fae33a8f71..1120973787c 100644
--- a/files/webdav.php
+++ b/files/webdav.php
@@ -26,6 +26,9 @@
// Do not load FS ...
$RUNTIME_NOSETUPFS = true;
+// only need filesystem apps
+$RUNTIME_APPTYPES=array('filesystem');
+
require_once('../lib/base.php');
// Backends
diff --git a/lib/app.php b/lib/app.php
index fa0a1d22d15..6c882963a02 100755
--- a/lib/app.php
+++ b/lib/app.php
@@ -34,16 +34,20 @@ class OC_App{
static private $settingsForms = array();
static private $adminForms = array();
static private $personalForms = array();
+ static private $appInfo = array();
/**
* @brief loads all apps
+ * @param array $types
* @returns true/false
*
* This function walks through the owncloud directory and loads all apps
* it can find. A directory contains an app if the file /appinfo/app.php
* exists.
+ *
+ * if $types is set, only apps of those types will be loaded
*/
- public static function loadApps(){
+ public static function loadApps($types=null){
// Did we allready load everything?
if( self::$init ){
return true;
@@ -51,14 +55,18 @@ class OC_App{
// Our very own core apps are hardcoded
foreach( array('files', 'settings') as $app ){
- require( $app.'/appinfo/app.php' );
+ if(is_null($types) or self::isType($app,$types)){
+ require( $app.'/appinfo/app.php' );
+ }
}
// The rest comes here
$apps = self::getEnabledApps();
foreach( $apps as $app ){
- if(is_file(OC::$APPSROOT.'/apps/'.$app.'/appinfo/app.php')){
- require( $app.'/appinfo/app.php' );
+ if(is_null($types) or self::isType($app,$types)){
+ if(is_file(OC::$APPSROOT.'/apps/'.$app.'/appinfo/app.php')){
+ require( $app.'/appinfo/app.php' );
+ }
}
}
@@ -69,6 +77,28 @@ class OC_App{
}
/**
+ * check if an app is of a sepcific type
+ * @param string $app
+ * @param string/array $types
+ */
+ public static function isType($app,$types){
+ if(is_string($types)){
+ $types=array($types);
+ }
+ $appData=self::getAppInfo($app);
+ if(!isset($appData['types'])){
+ return false;
+ }
+ $appTypes=$appData['types'];
+ foreach($types as $type){
+ if(array_search($type,$appTypes)!==false){
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
* get all enabled apps
*/
public static function getEnabledApps(){
@@ -283,6 +313,9 @@ class OC_App{
if($path){
$file=$appid;
}else{
+ if(isset(self::$appInfo[$appid])){
+ return self::$appInfo[$appid];
+ }
$file=OC::$APPSROOT.'/apps/'.$appid.'/appinfo/info.xml';
}
$data=array();
@@ -293,8 +326,16 @@ class OC_App{
$xml = new SimpleXMLElement($content);
$data['info']=array();
foreach($xml->children() as $child){
- $data[$child->getName()]=(string)$child;
+ if($child->getName()=='types'){
+ $data['types']=array();
+ foreach($child->children() as $type){
+ $data['types'][]=$type->getName();
+ }
+ }else{
+ $data[$child->getName()]=(string)$child;
+ }
}
+ self::$appInfo[$appid]=$data;
return $data;
}
diff --git a/lib/base.php b/lib/base.php
index b07ac5af416..b031572f177 100644
--- a/lib/base.php
+++ b/lib/base.php
@@ -333,8 +333,13 @@ class OC{
// Load Apps
// This includes plugins for users and filesystems as well
global $RUNTIME_NOAPPS;
+ global $RUNTIME_APPTYPES;
if(!$RUNTIME_NOAPPS ){
- OC_App::loadApps();
+ if($RUNTIME_APPTYPES){
+ OC_App::loadApps($RUNTIME_APPTYPES);
+ }else{
+ OC_App::loadApps();
+ }
}
//make sure temporary files are cleaned up