]> source.dussan.org Git - nextcloud-server.git/commitdiff
OC_App: Cache list of enabled apps
authorMarkus Goetz <markus@woboq.com>
Sat, 5 Oct 2013 17:18:18 +0000 (19:18 +0200)
committerMarkus Goetz <markus@woboq.com>
Sat, 5 Oct 2013 17:18:18 +0000 (19:18 +0200)
In my test here 1 SELECT instead of 5 (when doing a DAV request,
probably similar for other requests)

lib/private/app.php

index 0ab1ee57f631654cffcde66de4040b78ac23550e..b4a719921788689d6bc32e2c489620d25edcdb82 100644 (file)
@@ -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' );