public static function getPkg(PkgNameInterface $pkgName) { $vendor = $pkgName->getVendor(); $factory = self::loadFactory($vendor); $type = $pkgName->getType(); $name = $pkgName->getName(); $pkg = null; if ('layer' === $type) { $data = ResourceTree::getLayer($vendor, $name); if (!isset($data['pkg'])) { $err = "pkg must be defined for layer -({$vendor}, {$name})"; throw new DomainException($err); } if (!isset($data['filename'])) { $err = "filename must be defined for layer -({$vendor}, {$name})"; throw new DomainException($err); } $pkg = $factory->createLayer($name, self::loadVendor($vendor)); $pkg->setFilename($data['filename'])->setPackages($data['pkg']); } else { if (empty($type)) { $pkg = ResourceTree::getPackage($vendor, $name); if (is_array($pkg)) { $pkg = $factory->createPkg($pkg, $vendor); ResourceTree::setPackage($vendor, $name, $pkg); } } else { $pkg = ResourceTree::getPackageByType($vendor, $type, $name); if (is_array($pkg)) { $pkg = $factory->createPkg($pkg, $vendor); ResourceTree::setPackageByType($vendor, $type, $name, $pkg); } } } return $pkg; }
/** * @param ThemePkgInterface $theme * @return null */ protected function buildTheme(PkgNameInterface $themePkgName, FileReaderInterface $reader, FileWriterInterface $writer, FileStackInterface $pageStack) { $themeName = $themePkgName->getName(); $vendorName = $themePkgName->getVendor(); $vendor = ResourceTreeManager::loadVendor($vendorName); $version = $vendor->getVersion(); $pkgPath = $vendor->getPackagePath(); $buildDir = "build/{$vendorName}/{$version}"; $themeDir = "{$buildDir}/theme/{$themeName}/css"; $pkg = ResourceTreeManager::getPkg($themePkgName); $finder = $reader->getFileFinder(); if (!$finder->isDir($themeDir)) { if (!$writer->mkdir($themeDir, 0755, true)) { $path = $finder->getPath($themeDir); $err = "could not create dir at -({$path})"; throw new RunTimeException($err); } } if ($pkg->isCssFiles()) { $list = $pkg->getCssFiles($pkgPath); $result = $this->makeString('css', $list, $reader, $pageStack); $writer->putContent($result, "{$themeDir}/{$themeName}.css"); } if ($pkg->isAssetFiles()) { $list = $pkg->getAssetFiles(); $assetBuildDir = "{$buildDir}/{$pkg->getAssetDir()}"; if (!$finder->isDir($assetBuildDir)) { if (!$writer->mkdir($assetBuildDir, 0755, true)) { $path = $finder->getPath($assetBuildDir); $err = "could not create dir at -({$path})"; throw new RunTimeException($err); } } foreach ($list as $file) { $themeDir = "{$pkgPath}/{$pkg->getPath()}"; $src = "{$pkgPath}/{$file}"; $dest = "{$buildDir}/{$file}"; $result = $writer->copy($src, $dest); } } }