dataLoader = $dataLoader; $this->metadataLoader = $metadataLoader; $this->collection = $configCollectionFactory->create(); $this->meta = array_merge($this->meta, $this->metadataLoader->getData()); } /** * {@inheritdoc} */ public function getData() { if (isset($this->loadedData)) { return $this->loadedData; } $this->loadedData = $this->dataLoader->getData(); return $this->loadedData; } /** * {@inheritdoc} */ public function getMeta() { $meta = parent::getMeta(); if (!isset($meta['other_settings']['children'])) { return $meta; } $request = $this->getRequest()->getParams(); if (!isset($request['scope'])) { return $meta; } $scope = $request['scope']; $scopeCode = $this->getScopeCodeResolver()->resolve( $scope, isset($request['scope_id']) ? $request['scope_id'] : null ); foreach ($meta['other_settings']['children'] as $settingGroupName => &$settingGroup) { foreach ($settingGroup['children'] as $fieldName => &$field) { $path = sprintf( 'design/%s/%s', $settingGroupName, preg_replace('/^' . $settingGroupName . '_/', '', $fieldName) ); $isReadOnly = $this->getSettingChecker()->isReadOnly( $path, $scope, $scopeCode ); if ($isReadOnly) { $field['arguments']['data']['config']['disabled'] = true; $field['arguments']['data']['config']['is_disable_inheritance'] = true; } } } if (isset($meta['other_settings']['children']['search_engine_robots']['children'])) { $meta['other_settings']['children']['search_engine_robots']['children'] = array_merge( $meta['other_settings']['children']['search_engine_robots']['children'], $this->getSearchEngineRobotsMetadata( $scope, $meta['other_settings']['children']['search_engine_robots']['children'] ) ); } return $meta; } /** * Retrieve modified Search Engine Robots metadata * * Disable Search Engine Robots fields in case when current scope is 'stores'. * * @param string $scope * @param array $fields * @return array */ private function getSearchEngineRobotsMetadata($scope, array $fields = []) { if ($scope == \Magento\Store\Model\ScopeInterface::SCOPE_STORES) { $resetToDefaultsData = [ 'arguments' => [ 'data' => [ 'config' => [ 'disabled' => true, 'is_disable_inheritance' => true, ], ], ], ]; $fields = array_merge($fields, ['reset_to_defaults' => $resetToDefaultsData]); foreach ($fields as &$field) { $field['arguments']['data']['config']['disabled'] = true; $field['arguments']['data']['config']['is_disable_inheritance'] = true; } } return $fields; } /** * @deprecated 100.1.3 * @return ScopeCodeResolver */ private function getScopeCodeResolver() { if ($this->scopeCodeResolver === null) { $this->scopeCodeResolver = ObjectManager::getInstance()->get(ScopeCodeResolver::class); } return $this->scopeCodeResolver; } /** * @deprecated 100.1.3 * @return SettingChecker */ private function getSettingChecker() { if ($this->settingChecker === null) { $this->settingChecker = ObjectManager::getInstance()->get(SettingChecker::class); } return $this->settingChecker; } /** * @deprecated 100.1.3 * @return RequestInterface */ private function getRequest() { if ($this->request === null) { $this->request = ObjectManager::getInstance()->get(RequestInterface::class); } return $this->request; } }