diff --git a/lib/private/Template/JSConfigHelper.php b/lib/private/Template/JSConfigHelper.php index 70d6f73628..49cf5f46d8 100644 --- a/lib/private/Template/JSConfigHelper.php +++ b/lib/private/Template/JSConfigHelper.php @@ -37,6 +37,7 @@ use OCP\App\IAppManager; use OCP\Defaults; use OCP\IConfig; use OCP\IGroupManager; +use OCP\IInitialStateService; use OCP\IL10N; use OCP\ISession; use OCP\IURLGenerator; @@ -75,6 +76,9 @@ class JSConfigHelper { /** @var CapabilitiesManager */ private $capabilitiesManager; + /** @var IInitialStateService */ + private $initialStateService; + /** @var array user back-ends excluded from password verification */ private $excludedUserBackEnds = ['user_saml' => true, 'user_globalsiteselector' => true]; @@ -99,7 +103,8 @@ class JSConfigHelper { IGroupManager $groupManager, IniGetWrapper $iniWrapper, IURLGenerator $urlGenerator, - CapabilitiesManager $capabilitiesManager) { + CapabilitiesManager $capabilitiesManager, + IInitialStateService $initialStateService) { $this->l = $l; $this->defaults = $defaults; $this->appManager = $appManager; @@ -110,6 +115,7 @@ class JSConfigHelper { $this->iniWrapper = $iniWrapper; $this->urlGenerator = $urlGenerator; $this->capabilitiesManager = $capabilitiesManager; + $this->initialStateService = $initialStateService; } public function getConfig() { @@ -146,7 +152,7 @@ class JSConfigHelper { $defaultExpireDateEnabled = $this->config->getAppValue('core', 'shareapi_default_expire_date', 'no') === 'yes'; $defaultExpireDate = $enforceDefaultExpireDate = null; if ($defaultExpireDateEnabled) { - $defaultExpireDate = (int) $this->config->getAppValue('core', 'shareapi_expire_after_n_days', '7'); + $defaultExpireDate = (int)$this->config->getAppValue('core', 'shareapi_expire_after_n_days', '7'); $enforceDefaultExpireDate = $this->config->getAppValue('core', 'shareapi_enforce_expire_date', 'no') === 'yes'; } $outgoingServer2serverShareEnabled = $this->config->getAppValue('files_sharing', 'outgoing_server2server_share_enabled', 'yes') === 'yes'; @@ -154,12 +160,12 @@ class JSConfigHelper { $defaultInternalExpireDateEnabled = $this->config->getAppValue('core', 'shareapi_default_internal_expire_date', 'no') === 'yes'; $defaultInternalExpireDate = $defaultInternalExpireDateEnforced = null; if ($defaultInternalExpireDateEnabled) { - $defaultInternalExpireDate = (int) $this->config->getAppValue('core', 'shareapi_internal_expire_after_n_days', '7'); + $defaultInternalExpireDate = (int)$this->config->getAppValue('core', 'shareapi_internal_expire_after_n_days', '7'); $defaultInternalExpireDateEnforced = $this->config->getAppValue('core', 'shareapi_internal_enforce_expire_date', 'no') === 'yes'; } $countOfDataLocation = 0; - $dataLocation = str_replace(\OC::$SERVERROOT .'/', '', $this->config->getSystemValue('datadirectory', ''), $countOfDataLocation); + $dataLocation = str_replace(\OC::$SERVERROOT . '/', '', $this->config->getSystemValue('datadirectory', ''), $countOfDataLocation); if ($countOfDataLocation !== 1 || !$this->groupManager->isAdmin($uid)) { $dataLocation = false; } @@ -175,17 +181,31 @@ class JSConfigHelper { $capabilities = $this->capabilitiesManager->getCapabilities(); + $config = [ + 'session_lifetime' => min($this->config->getSystemValue('session_lifetime', $this->iniWrapper->getNumeric('session.gc_maxlifetime')), $this->iniWrapper->getNumeric('session.gc_maxlifetime')), + 'session_keepalive' => $this->config->getSystemValue('session_keepalive', true), + 'auto_logout' => $this->config->getSystemValue('auto_logout', false), + 'version' => implode('.', \OCP\Util::getVersion()), + 'versionstring' => \OC_Util::getVersionString(), + 'enable_avatars' => true, // here for legacy reasons - to not crash existing code that relies on this value + 'lost_password_link' => $this->config->getSystemValue('lost_password_link', null), + 'modRewriteWorking' => $this->config->getSystemValue('htaccess.IgnoreFrontController', false) === true || getenv('front_controller_active') === 'true', + 'sharing.maxAutocompleteResults' => (int)$this->config->getSystemValue('sharing.maxAutocompleteResults', 0), + 'sharing.minSearchStringLength' => (int)$this->config->getSystemValue('sharing.minSearchStringLength', 0), + 'blacklist_files_regex' => \OCP\Files\FileInfo::BLACKLIST_FILES_REGEX, + ]; + $array = [ "_oc_debug" => $this->config->getSystemValue('debug', false) ? 'true' : 'false', "_oc_isadmin" => $this->groupManager->isAdmin($uid) ? 'true' : 'false', "backendAllowsPasswordConfirmation" => $userBackendAllowsPasswordConfirmation ? 'true' : 'false', - "oc_dataURL" => is_string($dataLocation) ? "\"".$dataLocation."\"" : 'false', - "_oc_webroot" => "\"".\OC::$WEBROOT."\"", - "_oc_appswebroots" => str_replace('\\/', '/', json_encode($apps_paths)), // Ugly unescape slashes waiting for better solution + "oc_dataURL" => is_string($dataLocation) ? "\"" . $dataLocation . "\"" : 'false', + "_oc_webroot" => "\"" . \OC::$WEBROOT . "\"", + "_oc_appswebroots" => str_replace('\\/', '/', json_encode($apps_paths)), // Ugly unescape slashes waiting for better solution "datepickerFormatDate" => json_encode($this->l->l('jsdate', null)), 'nc_lastLogin' => $lastConfirmTimestamp, 'nc_pageLoad' => time(), - "dayNames" => json_encode([ + "dayNames" => json_encode([ (string)$this->l->t('Sunday'), (string)$this->l->t('Monday'), (string)$this->l->t('Tuesday'), @@ -194,7 +214,7 @@ class JSConfigHelper { (string)$this->l->t('Friday'), (string)$this->l->t('Saturday') ]), - "dayNamesShort" => json_encode([ + "dayNamesShort" => json_encode([ (string)$this->l->t('Sun.'), (string)$this->l->t('Mon.'), (string)$this->l->t('Tue.'), @@ -203,7 +223,7 @@ class JSConfigHelper { (string)$this->l->t('Fri.'), (string)$this->l->t('Sat.') ]), - "dayNamesMin" => json_encode([ + "dayNamesMin" => json_encode([ (string)$this->l->t('Su'), (string)$this->l->t('Mo'), (string)$this->l->t('Tu'), @@ -240,19 +260,8 @@ class JSConfigHelper { (string)$this->l->t('Nov.'), (string)$this->l->t('Dec.') ]), - "firstDay" => json_encode($this->l->l('firstday', null)) , - "_oc_config" => json_encode([ - 'session_lifetime' => min($this->config->getSystemValue('session_lifetime', $this->iniWrapper->getNumeric('session.gc_maxlifetime')), $this->iniWrapper->getNumeric('session.gc_maxlifetime')), - 'session_keepalive' => $this->config->getSystemValue('session_keepalive', true), - 'version' => implode('.', \OCP\Util::getVersion()), - 'versionstring' => \OC_Util::getVersionString(), - 'enable_avatars' => true, // here for legacy reasons - to not crash existing code that relies on this value - 'lost_password_link'=> $this->config->getSystemValue('lost_password_link', null), - 'modRewriteWorking' => $this->config->getSystemValue('htaccess.IgnoreFrontController', false) === true || getenv('front_controller_active') === 'true', - 'sharing.maxAutocompleteResults' => (int)$this->config->getSystemValue('sharing.maxAutocompleteResults', 0), - 'sharing.minSearchStringLength' => (int)$this->config->getSystemValue('sharing.minSearchStringLength', 0), - 'blacklist_files_regex' => \OCP\Files\FileInfo::BLACKLIST_FILES_REGEX, - ]), + "firstDay" => json_encode($this->l->l('firstday', null)), + "_oc_config" => json_encode($config), "oc_appconfig" => json_encode([ 'core' => [ 'defaultExpireDateEnabled' => $defaultExpireDateEnabled, @@ -296,6 +305,8 @@ class JSConfigHelper { ]); } + $this->initialStateService->provideInitialState('core', 'config', $config); + // Allow hooks to modify the output values \OC_Hook::emit('\OCP\Config', 'js', ['array' => &$array]); diff --git a/lib/private/TemplateLayout.php b/lib/private/TemplateLayout.php index ddddb8704c..1fbf0acb99 100644 --- a/lib/private/TemplateLayout.php +++ b/lib/private/TemplateLayout.php @@ -49,6 +49,7 @@ use OC\Template\JSCombiner; use OC\Template\JSConfigHelper; use OC\Template\SCSSCacher; use OCP\Defaults; +use OCP\IInitialStateService; use OCP\Support\Subscription\IRegistry; class TemplateLayout extends \OC_Template { @@ -183,7 +184,8 @@ class TemplateLayout extends \OC_Template { \OC::$server->getGroupManager(), \OC::$server->getIniWrapper(), \OC::$server->getURLGenerator(), - \OC::$server->getCapabilitiesManager() + \OC::$server->getCapabilitiesManager(), + \OC::$server->query(IInitialStateService::class) ); $this->assign('inline_ocjs', $jsConfigHelper->getConfig()); } else {