From: Markus Goetz Date: Sat, 5 Oct 2013 17:18:18 +0000 (+0200) Subject: OC_App: Cache list of enabled apps X-Git-Tag: v6.0.0alpha2~59^2 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=e564a3a26627230951d86347fcf47aec40d1ca39;p=nextcloud-server.git OC_App: Cache list of enabled apps In my test here 1 SELECT instead of 5 (when doing a DAV request, probably similar for other requests) --- diff --git a/lib/private/app.php b/lib/private/app.php index 0ab1ee57f63..b4a71992178 100644 --- a/lib/private/app.php +++ b/lib/private/app.php @@ -165,10 +165,14 @@ class OC_App{ /** * get all enabled apps */ + private static $enabledAppsCache = array(); public static function getEnabledApps() { if(!OC_Config::getValue('installed', false)) { return array(); } + if(!empty(self::$enabledAppsCache)) { + return self::$enabledAppsCache; + } $apps=array('files'); $sql = 'SELECT `appid` FROM `*PREFIX*appconfig`' .' WHERE `configkey` = \'enabled\' AND `configvalue`=\'yes\''; @@ -187,6 +191,7 @@ class OC_App{ $apps[]=$row['appid']; } } + self::$enabledAppsCache = $apps; return $apps; } @@ -198,11 +203,11 @@ class OC_App{ * This function checks whether or not an app is enabled. */ public static function isEnabled( $app ) { - if( 'files'==$app or ('yes' == OC_Appconfig::getValue( $app, 'enabled' ))) { + if('files' == $app) { return true; } - - return false; + $enabledApps = self::getEnabledApps(); + return in_array($app, $enabledApps); } /** @@ -214,6 +219,7 @@ class OC_App{ * This function set an app as enabled in appconfig. */ public static function enable( $app ) { + self::$enabledAppsCache = array(); // flush if(!OC_Installer::isInstalled($app)) { // check if app is a shipped app or not. OCS apps have an integer as id, shipped apps use a string if(!is_numeric($app)) { @@ -257,6 +263,7 @@ class OC_App{ * This function set an app as disabled in appconfig. */ public static function disable( $app ) { + self::$enabledAppsCache = array(); // flush // check if app is a shipped app or not. if not delete \OC_Hook::emit('OC_App', 'pre_disable', array('app' => $app)); OC_Appconfig::setValue( $app, 'enabled', 'no' );