add the option to only load apps of a specific type

This commit is contained in:
Robin Appelman 2012-03-30 14:39:07 +02:00
parent a07c6b1a2e
commit 523fdda399
10 changed files with 76 additions and 6 deletions

View File

@ -7,4 +7,7 @@
<licence>AGPL</licence>
<author>Robin Appelman</author>
<require>3</require>
<types>
<filesystem/>
</types>
</info>

View File

@ -7,4 +7,7 @@
<licence>AGPL</licence>
<author>Robin Appelman</author>
<require>3</require>
<types>
<filesystem/>
</types>
</info>

View File

@ -7,4 +7,7 @@
<licence>AGPL</licence>
<author>Robin Appelman</author>
<require>3</require>
<types>
<filesystem/>
</types>
</info>

View File

@ -8,4 +8,7 @@
<author>Michael Gapczynski</author>
<require>2</require>
<default_enable/>
<types>
<filesystem/>
</types>
</info>

View File

@ -21,6 +21,9 @@
*
*/
// only need filesystem apps
$RUNTIME_APPTYPES=array('filesystem');
// Init owncloud
require_once('../../lib/base.php');

View File

@ -1,5 +1,8 @@
<?php
// only need filesystem apps
$RUNTIME_APPTYPES=array('filesystem');
// Init owncloud
require_once('../../lib/base.php');

View File

@ -1,5 +1,8 @@
<?php
// no need for apps
$RUNTIME_NOAPPS=false;
// Init owncloud
require_once('../../lib/base.php');

View File

@ -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

View File

@ -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' );
}
}
}
@ -68,6 +76,28 @@ class OC_App{
return true;
}
/**
* 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
*/
@ -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;
}

View File

@ -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