. */ namespace SP\Modules\Web\Controllers\Resource; use SP\Domain\Http\Services\Request as HttpRequest; use SP\Infrastructure\File\FileHandler; use SP\Infrastructure\File\FileSystem; /** * Class CssController */ final class CssController extends ResourceBase { private const CSS_MIN_FILES = [ 'reset.min.css', 'jquery-ui.min.css', 'jquery-ui.structure.min.css', 'material-icons.min.css', 'toastr.min.css', 'magnific-popup.min.css', ]; /** * Return CSS resources */ public function cssAction(): void { $file = $this->request->analyzeString('f'); $base = $this->request->analyzeString('b'); if ($file && $base) { $files = $this->buildFiles(urldecode($base), explode(',', urldecode($file)), true); $this->minify->builder() ->addFiles($files) ->getMinified(); } else { $files = $this->buildFiles(FileSystem::buildPath(PUBLIC_PATH, 'vendor', 'css'), self::CSS_MIN_FILES); $this->minify->builder() ->addFiles($files, false) ->addFile(new FileHandler(FileSystem::buildPath(PUBLIC_PATH, 'css', 'fonts.min.css')), false) ->getMinified(); } } /** * @param string $base * @param array $files * @param bool $insecure * @return FileHandler[] */ private function buildFiles(string $base, array $files, bool $insecure = false): array { $base = $insecure ? HttpRequest::getSecureAppPath($base) : $base; return array_map( fn(string $file) => new FileHandler(FileSystem::buildPath($base, $file)), $files ); } }