From 8e684f76e5d599917b52ddfd0ea1d58e31222487 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 29 Nov 2017 09:50:40 +0100 Subject: [PATCH] Allow `{lang}` as a placeholder in the skeleton directory Signed-off-by: Joas Schilling --- config/config.sample.php | 3 +++ lib/private/legacy/util.php | 15 ++++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/config/config.sample.php b/config/config.sample.php index 022b807a88..59fb1d1361 100644 --- a/config/config.sample.php +++ b/config/config.sample.php @@ -242,6 +242,9 @@ $CONFIG = array( * The directory where the skeleton files are located. These files will be * copied to the data directory of new users. Leave empty to not copy any * skeleton files. + * ``{lang}`` can be used as a placeholder for the language of the user. + * If the directory does not exist, it falls back to non dialect (from ``de_DE`` + * to ``de``). If that does not exist either, it falls back to ``en`` * * Defaults to ``core/skeleton`` in the Nextcloud directory. */ diff --git a/lib/private/legacy/util.php b/lib/private/legacy/util.php index 3ce1174667..b9a7706eaf 100644 --- a/lib/private/legacy/util.php +++ b/lib/private/legacy/util.php @@ -379,7 +379,20 @@ class OC_Util { */ public static function copySkeleton($userId, \OCP\Files\Folder $userDirectory) { - $skeletonDirectory = \OC::$server->getConfig()->getSystemValue('skeletondirectory', \OC::$SERVERROOT . '/core/skeleton'); + $plainSkeletonDirectory = \OC::$server->getConfig()->getSystemValue('skeletondirectory', \OC::$SERVERROOT . '/core/skeleton'); + $userLang = \OC::$server->getL10NFactory()->findLanguage(); + $skeletonDirectory = str_replace('{lang}', $userLang, $plainSkeletonDirectory); + + if (!file_exists($skeletonDirectory)) { + $dialectStart = strpos($userLang, '_'); + if ($dialectStart !== false) { + $skeletonDirectory = str_replace('{lang}', substr($userLang, 0, $dialectStart), $plainSkeletonDirectory); + } + if ($dialectStart === false || !file_exists($skeletonDirectory)) { + $skeletonDirectory = str_replace('{lang}', 'en', $plainSkeletonDirectory); + } + } + $instanceId = \OC::$server->getConfig()->getSystemValue('instanceid', ''); if ($instanceId === null) {