/** * Validate the theme if being in use in default, website, or store. * * @param string[] $themePaths * @return array */ public function validateIsThemeInUse($themePaths) { $messages = []; $themesById = []; foreach ($themePaths as $themePath) { $theme = $this->themeProvider->getThemeByFullPath($themePath); $themesById[$theme->getId()] = $themePath; } $configData = $this->configData->getCollection()->addFieldToFilter('path', DesignInterface::XML_PATH_THEME_ID)->addFieldToFilter('value', ['in' => array_keys($themesById)]); foreach ($configData as $row) { switch ($row['scope']) { case 'default': $messages[] = '<error>' . $themesById[$row['value']] . ' is in use in default config' . '</error>'; break; case ScopeInterface::SCOPE_WEBSITES: $messages[] = '<error>' . $themesById[$row['value']] . ' is in use in website ' . $this->storeManager->getWebsite($row['scope_id'])->getName() . '</error>'; break; case ScopeInterface::SCOPE_STORES: $messages[] = '<error>' . $themesById[$row['value']] . ' is in use in store ' . $this->storeManager->getStore($row['scope_id'])->getName() . '</error>'; break; } } return $messages; }
/** * Get assigned scopes collection of a theme * * @param string $scope * @param string $configPath * @return \Magento\Core\Model\Resource\Config\Data\Collection */ protected function _getAssignedScopesCollection($scope, $configPath) { return $this->_configData->getCollection()->addFieldToFilter('scope', $scope)->addFieldToFilter('path', $configPath); }