/** * Save the library settings which have been done on the overview page * @param \Cx\Core\View\Model\Entity\Theme $theme the template object */ protected function saveLibrarySettings($theme) { global $_ARRAYLANG; $libraries = \JS::getConfigurableLibraries(); // create dependencies array with provided data from form $dependencies = array(); foreach ($_POST['libraryVersion'] as $libraryName => $version) { if (empty($version)) { continue; } $dependencies[$libraryName] = array('name' => $libraryName, 'type' => 'lib', 'minimumVersionNumber' => $version, 'maximumVersionNumber' => $version); } $automaticallyModifiedDependencySettings = array(); // check for dependencies of configured libraries foreach ($dependencies as $dependency) { $dependencyIssue = false; $libraryInfo = $libraries[$dependency['name']]['versions'][$dependency['minimumVersionNumber']]; if (isset($libraryInfo['dependencies'])) { // loop through dependencies which are required for the activated library foreach ($libraryInfo['dependencies'] as $dependencyName => $dependencyVersionRegex) { // dependency not configured or needed version not matching regex if (!isset($dependencies[$dependencyName]) || !preg_match('/' . $dependencyVersionRegex . '/', $dependencies[$dependencyName]['minimumVersionNumber'])) { $dependencyIssue = true; } if ($dependencyIssue) { // find matching library version foreach ($libraries[$dependencyName]['versions'] as $version => $files) { if (preg_match('/' . $dependencyVersionRegex . '/', $version)) { $dependencies[$dependencyName] = array('name' => $dependencyName, 'type' => 'lib', 'minimumVersionNumber' => $version, 'maximumVersionNumber' => $version); $automaticallyModifiedDependencySettings[] = $dependencyName; break; } } } } } } if (!empty($automaticallyModifiedDependencySettings)) { \Message::add(sprintf($_ARRAYLANG['TXT_THEME_LIBRARY_AUTOMATICALLY_ADJUSTED'], implode(', ', $automaticallyModifiedDependencySettings)), \Message::CLASS_ERROR); } // save component.yaml file $theme->setDependencies($dependencies); try { $this->themeRepository->saveComponentData($theme); } catch (\Cx\Lib\FileSystem\FileSystemException $e) { \Message::add($_ARRAYLANG['TXT_COULD_NOT_WRITE_TO_FILE'] . ': ' . '/' . $theme->getFoldername() . '/component.yml', \Message::CLASS_ERROR); } }