/** * Install assets from all modules. * * @param string $themeDirectory Theme directory. * * @return void */ public function installAssets($themeDirectory = '') { $location = $this->_getLocation(); $less = Less::factory(); $less->setVariables(['baseUrl' => "'" . $this->_config->application->baseUrl . "'"]); /////////////////////////////////// // Check generated directory. /////////////////////////////////// if (!is_dir($location . self::GENERATED_STORAGE_PATH)) { mkdir($location . self::GENERATED_STORAGE_PATH); } /////////////////////////////////// // Compile themes css. /////////////////////////////////// if ($this->_config->installed && !empty($themeDirectory)) { $themeFiles = glob($themeDirectory . '/*.less'); FsUtilities::fsCheckLocation($location . 'css/'); foreach ($themeFiles as $file) { $newFileName = $location . 'css/' . basename($file, '.less') . '.css'; $less->checkedCompile($file, $newFileName); } } /////////////////////////////////// // Collect css/js/img from modules. /////////////////////////////////// $registry = $this->getDI()->get('registry'); foreach ($registry->modules as $module) { // CSS $assetsPath = $registry->directories->modules . ucfirst($module) . '/Assets/'; $path = $location . 'css/' . $module . '/'; FsUtilities::fsCheckLocation($path); $cssFiles = FsUtilities::fsRecursiveGlob($assetsPath . 'css/*'); $less->addImportDir($themeDirectory); foreach ($cssFiles as $file) { if (!is_file($file)) { continue; } $fileName = basename($file); $fileNameWithoutExt = basename($file, '.less'); $additionalPath = str_replace($fileName, '', str_replace($assetsPath . 'css/', '', $file)); if (pathinfo($file, PATHINFO_EXTENSION) == 'less') { FsUtilities::fsCheckLocation($path . $additionalPath); $newFileName = $path . $additionalPath . $fileNameWithoutExt . '.css'; $less->checkedCompile($file, $newFileName); } else { copy($file, $path . $additionalPath . $fileName); } } // JS $path = $location . 'js/' . $module . '/'; FsUtilities::fsCheckLocation($path); FsUtilities::fsCopyRecursive($assetsPath . 'js', $path, true); // IMAGES $path = $location . 'img/' . $module . '/'; FsUtilities::fsCheckLocation($path); FsUtilities::fsCopyRecursive($assetsPath . 'img', $path, true); } }
/** * Export package with data. * * @param AbstractPackage $package Package object. * @param array $params Additional params. * * @return void */ public function exportPackage(AbstractPackage $package, array $params = []) { $location = $this->getPackageLocation($package); $packageName = ucfirst($package->name); if ($package->type == self::PACKAGE_TYPE_THEME) { $location = $location . $package->name; } else { $location = $location . $packageName; } $temporaryDir = $this->getTempDirectory(); $temporaryPackageDir = $temporaryDir . $package->name . DS; $temporaryPackageCopyDir = $temporaryPackageDir . 'package' . DS; if (is_dir($temporaryDir)) { Utilities::fsRmdirRecursive($temporaryDir); } mkdir($temporaryPackageCopyDir, 0755, true); if (is_dir($location)) { Utilities::fsCopyRecursive($location, $temporaryPackageCopyDir); } else { copy($location, $temporaryPackageCopyDir . basename($location)); } $filename = $this->_getPackageFullName($package, true) . '.zip'; $filepath = $temporaryDir . $filename; $this->_createManifest($temporaryPackageDir . self::PACKAGE_MANIFEST_NAME, $package->toJson($params)); $this->_zip($temporaryPackageDir, $filepath); header('Content-type: application/zip'); header('Content-Disposition: attachment; filename="' . $filename . '"'); readfile($filepath); }