]> source.dussan.org Git - nextcloud-server.git/commitdiff
Allow multiple names and description
authorJoas Schilling <coding@schilljs.com>
Fri, 30 Sep 2016 09:00:58 +0000 (11:00 +0200)
committerJoas Schilling <coding@schilljs.com>
Tue, 11 Oct 2016 07:52:06 +0000 (09:52 +0200)
Signed-off-by: Joas Schilling <coding@schilljs.com>
lib/private/legacy/app.php

index 49e85d4226e631a84a3e6716398d1ba01d08b95b..a029fdf7ebc47f9a2861863d7662b027387d9e7b 100644 (file)
@@ -664,15 +664,16 @@ class OC_App {
         * Read all app metadata from the info.xml file
         *
         * @param string $appId id of the app or the path of the info.xml file
-        * @param boolean $path (optional)
+        * @param bool $path
+        * @param string $lang
         * @return array|null
         * @note all data is read from info.xml, not just pre-defined fields
         */
-       public static function getAppInfo($appId, $path = false) {
+       public static function getAppInfo($appId, $path = false, $lang = null) {
                if ($path) {
                        $file = $appId;
                } else {
-                       if (isset(self::$appInfo[$appId])) {
+                       if ($lang === null && isset(self::$appInfo[$appId])) {
                                return self::$appInfo[$appId];
                        }
                        $appPath = self::getAppPath($appId);
@@ -686,7 +687,7 @@ class OC_App {
                $data = $parser->parse($file);
 
                if (is_array($data)) {
-                       $data = OC_App::parseAppInfo($data);
+                       $data = OC_App::parseAppInfo($data, $lang);
                }
                if(isset($data['ocsid'])) {
                        $storedId = \OC::$server->getConfig()->getAppValue($appId, 'ocsid');
@@ -695,7 +696,9 @@ class OC_App {
                        }
                }
 
-               self::$appInfo[$appId] = $data;
+               if ($lang === null) {
+                       self::$appInfo[$appId] = $data;
+               }
 
                return $data;
        }
@@ -845,11 +848,12 @@ class OC_App {
                //we don't want to show configuration for these
                $blacklist = \OC::$server->getAppManager()->getAlwaysEnabledApps();
                $appList = array();
+               $langCode = \OC::$server->getL10N('core')->getLanguageCode();
 
                foreach ($installedApps as $app) {
                        if (array_search($app, $blacklist) === false) {
 
-                               $info = OC_App::getAppInfo($app);
+                               $info = OC_App::getAppInfo($app, false, $langCode);
                                if (!is_array($info)) {
                                        \OCP\Util::writeLog('core', 'Could not read app info file for app "' . $app . '"', \OCP\Util::ERROR);
                                        continue;
@@ -1329,13 +1333,42 @@ class OC_App {
                }
        }
 
+       protected static function findBestL10NOption($options, $lang) {
+               $fallback = $englishFallback = false;
+               foreach ($options as $option) {
+                       if (is_array($option)) {
+                               if ($fallback === false) {
+                                       $fallback = $option['@value'];
+                               }
+
+                               if (isset($option['@attributes']['lang']) && $option['@attributes']['lang'] === $lang) {
+                                       return $option['@value'];
+                               }
+                       } else {
+                               $englishFallback = $option;
+                       }
+               }
+               return $englishFallback !== false ? $englishFallback : (string) $fallback;
+       }
+
        /**
         * parses the app data array and enhanced the 'description' value
         *
         * @param array $data the app data
+        * @param string $lang
         * @return array improved app data
         */
-       public static function parseAppInfo(array $data) {
+       public static function parseAppInfo(array $data, $lang = null) {
+
+               if ($lang && isset($data['name']) && is_array($data['name'])) {
+                       $data['name'] = self::findBestL10NOption($data['name'], $lang);
+               }
+               if ($lang && isset($data['summary']) && is_array($data['summary'])) {
+                       $data['summary'] = self::findBestL10NOption($data['summary'], $lang);
+               }
+               if ($lang && isset($data['description']) && is_array($data['description'])) {
+                       $data['description'] = self::findBestL10NOption($data['description'], $lang);
+               }
 
                // just modify the description if it is available
                // otherwise this will create a $data element with an empty 'description'