cache app types in the db

This commit is contained in:
Robin Appelman 2012-04-14 17:53:02 +02:00
parent 5608867edc
commit dec139716e
2 changed files with 62 additions and 5 deletions

View File

@ -35,6 +35,7 @@ class OC_App{
static private $adminForms = array();
static private $personalForms = array();
static private $appInfo = array();
static private $appTypes = array();
/**
* @brief loads all apps
@ -85,11 +86,7 @@ class OC_App{
if(is_string($types)){
$types=array($types);
}
$appData=self::getAppInfo($app);
if(!isset($appData['types'])){
return false;
}
$appTypes=$appData['types'];
$appTypes=self::getAppTypes($app);
foreach($types as $type){
if(array_search($type,$appTypes)!==false){
return true;
@ -97,6 +94,32 @@ class OC_App{
}
return false;
}
/**
* get the types of an app
* @param string $app
* @return array
*/
private static function getAppTypes($app){
//load the cache
if(count(self::$appTypes)==0){
self::$appTypes=OC_Appconfig::getValues(false,'types');
}
//get it from info.xml if we haven't cached it
if(!isset(self::$appTypes[$app])){
$appData=self::getAppInfo($app);
if(isset($appData['types'])){
self::$appTypes[$app]=$appData['types'];
}else{
self::$appTypes[$app]=array();
}
OC_Appconfig::setValue($app,'types',implode(',',self::$appTypes[$app]));
}
return explode(',',self::$appTypes[$app]);
}
/**
* get all enabled apps

View File

@ -163,4 +163,38 @@ class OC_Appconfig{
return true;
}
/**
* get multiply values, either the app or key can be used as wildcard by setting it to false
* @param app
* @param key
* @return array
*/
public static function getValues($app,$key){
if($app!==false and $key!==false){
return false;
}
$where='WHERE';
$fields='configvalue';
$params=array();
if($app!==false){
$where.=' appid = ?';
$fields.=', configkey';
$params[]=$app;
$key='configkey';
}else{
$fields.=', appid';
$where.=' configkey = ?';
$params[]=$key;
$key='appid';
}
$queryString='SELECT '.$fields.' FROM *PREFIX*appconfig '.$where;
$query=OC_DB::prepare($queryString);
$result=$query->execute($params);
$values=array();
while($row=$result->fetchRow()){
$values[$row[$key]]=$row['configvalue'];
}
return $values;
}
}