metadata = $metadata; $this->acl = $acl; $this->user = $user; $this->container = $container; } // TODO use proxy protected function getDefaultLanguage() { return $this->container->get('defaultLanguage'); } protected function getLanguage() { return $this->container->get('language'); } public function getDataForFrontend(bool $default = false) { if ($default) { $languageObj = $this->getDefaultLanguage(); } else { $languageObj = $this->getLanguage(); } $data = $languageObj->getAll(); if ($this->user->isSystem()) { unset($data['Global']['scopeNames']); unset($data['Global']['scopeNamesPlural']); unset($data['Global']['dashlets']); unset($data['Global']['links']); unset($data['Global']['fields']); unset($data['Global']['options']); foreach ($data as $k => $item) { if (in_array($k, ['Global', 'User', 'Campaign'])) { continue; } unset($data[$k]); } unset($data['User']['fields']); unset($data['User']['links']); unset($data['User']['options']); unset($data['User']['filters']); unset($data['User']['presetFilters']); unset($data['User']['boolFilters']); unset($data['User']['tooltips']); unset($data['Campaign']['fields']); unset($data['Campaign']['links']); unset($data['Campaign']['options']); unset($data['Campaign']['tooltips']); unset($data['Campaign']['presetFilters']); } else { $scopeList = array_keys($this->metadata->get(['scopes'], [])); foreach ($scopeList as $scope) { if (!$this->metadata->get(['scopes', $scope, 'entity'])) { continue; } if ($this->metadata->get(['entityAcl', $scope, 'languageAclDisabled'])) { continue; } if (!$this->acl->check($scope)) { unset($data[$scope]); unset($data['Global']['scopeNames'][$scope]); unset($data['Global']['scopeNamesPlural'][$scope]); } else { if (in_array($scope, ['EmailAccount', 'InboundEmail'])) { continue; } foreach ($this->acl->getScopeForbiddenFieldList($scope) as $field) { if (isset($data[$scope]['fields'])) { unset($data[$scope]['fields'][$field]); } if (isset($data[$scope]['options'])) { unset($data[$scope]['options'][$field]); } if (isset($data[$scope]['links'])) { unset($data[$scope]['links'][$field]); } } } } if (!$this->user->isAdmin()) { unset($data['Admin']); unset($data['LayoutManager']); unset($data['EntityManager']); unset($data['FieldManager']); unset($data['Settings']); unset($data['ApiUser']); unset($data['DynamicLogic']); $data['Settings'] = [ 'options' => [ 'weekStart' => $languageObj->get(['Settings', 'options', 'weekStart']), ], ]; $data['Admin'] = [ 'messages' => [ 'userHasNoEmailAddress' => $languageObj ->translate('userHasNoEmailAddress', 'messages', 'Admin'), ], ]; foreach (($this->metadata->get(['app', 'language', 'aclDependencies']) ?? []) as $target => $item) { $targetArr = explode('.', $target); $aclScope = $item['scope'] ?? null;; $aclField = $item['field'] ?? null; if (!$aclScope) { continue; } if (!$this->acl->check($aclScope)) { continue; } if ($aclField && in_array($aclField, $this->acl->getScopeForbiddenFieldList($aclScope))) { continue; } $pointer =& $data; foreach ($targetArr as $i => $k) { if ($i === count($targetArr) - 1) { $pointer[$k] = $languageObj->get($targetArr); break; } if (!isset($pointer[$k])) { $pointer[$k] = []; } $pointer =& $pointer[$k]; } } } } $data['User']['fields'] = $data['User']['fields'] ?? []; $data['User']['fields']['password'] = $languageObj->translate('password', 'fields', 'User'); $data['User']['fields']['passwordConfirm'] = $languageObj->translate('passwordConfirm', 'fields', 'User'); $data['User']['fields']['newPassword'] = $languageObj->translate('newPassword', 'fields', 'User'); $data['User']['fields']['newPasswordConfirm'] = $languageObj->translate('newPasswordConfirm', 'fields', 'User'); return $data; } }