Allow multiple names and description

Signed-off-by: Joas Schilling <coding@schilljs.com>
This commit is contained in:
Joas Schilling 2016-10-11 10:06:56 +02:00
parent 2f546eab71
commit 45d5f7adc2
No known key found for this signature in database
GPG Key ID: E166FD8976B3BAC8
1 changed files with 40 additions and 7 deletions

View File

@ -606,15 +606,16 @@ class OC_App {
* Read all app metadata from the info.xml file * 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 string $appId id of the app or the path of the info.xml file
* @param boolean $path (optional) * @param boolean $path
* @param string $lang
* @return array|null * @return array|null
* @note all data is read from info.xml, not just pre-defined fields * @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) { if ($path) {
$file = $appId; $file = $appId;
} else { } else {
if (isset(self::$appInfo[$appId])) { if ($lang === null && isset(self::$appInfo[$appId])) {
return self::$appInfo[$appId]; return self::$appInfo[$appId];
} }
$appPath = self::getAppPath($appId); $appPath = self::getAppPath($appId);
@ -628,7 +629,7 @@ class OC_App {
$data = $parser->parse($file); $data = $parser->parse($file);
if (is_array($data)) { if (is_array($data)) {
$data = OC_App::parseAppInfo($data); $data = OC_App::parseAppInfo($data, $lang);
} }
if(isset($data['ocsid'])) { if(isset($data['ocsid'])) {
$storedId = \OC::$server->getConfig()->getAppValue($appId, 'ocsid'); $storedId = \OC::$server->getConfig()->getAppValue($appId, 'ocsid');
@ -637,7 +638,9 @@ class OC_App {
} }
} }
if ($lang === null) {
self::$appInfo[$appId] = $data; self::$appInfo[$appId] = $data;
}
return $data; return $data;
} }
@ -787,11 +790,12 @@ class OC_App {
//we don't want to show configuration for these //we don't want to show configuration for these
$blacklist = \OC::$server->getAppManager()->getAlwaysEnabledApps(); $blacklist = \OC::$server->getAppManager()->getAlwaysEnabledApps();
$appList = array(); $appList = array();
$langCode = \OC::$server->getL10N('core')->getLanguageCode();
foreach ($installedApps as $app) { foreach ($installedApps as $app) {
if (array_search($app, $blacklist) === false) { if (array_search($app, $blacklist) === false) {
$info = OC_App::getAppInfo($app); $info = OC_App::getAppInfo($app, false, $langCode);
if (!is_array($info)) { if (!is_array($info)) {
\OCP\Util::writeLog('core', 'Could not read app info file for app "' . $app . '"', \OCP\Util::ERROR); \OCP\Util::writeLog('core', 'Could not read app info file for app "' . $app . '"', \OCP\Util::ERROR);
continue; continue;
@ -1200,13 +1204,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 * parses the app data array and enhanced the 'description' value
* *
* @param array $data the app data * @param array $data the app data
* @param string $lang
* @return array improved app data * @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 // just modify the description if it is available
// otherwise this will create a $data element with an empty 'description' // otherwise this will create a $data element with an empty 'description'