File Manager

Current Directory: /home/astoriaah/www/templates/yootheme/vendor/yootheme/theme/modules/styler/src
Viewing File: /home/astoriaah/www/templates/yootheme/vendor/yootheme/theme/modules/styler/src/StyleController.php
<?php namespace YOOtheme\Theme; use YOOtheme\ContainerTrait; use YOOtheme\Util\File; class StyleController { use ContainerTrait; public $inject = [ 'locator' => 'app.locator', 'themes' => 'yootheme/styler.themes', ]; public function index($response, $id = '') { $styles = []; $imports = []; $resolve = function ($file, $replace = []) use (&$imports, &$resolve) { if (!file_exists($file)) { return; } $imports[File::normalizePath($this->app->url($file))] = $contents = @file_get_contents($file) ?: ''; if (preg_match_all('/^@import.*"(.*)";/m', $contents, $matches)) { foreach ($matches[1] as $path) { $resolve(dirname($file).'/'.str_replace(array_keys($replace), array_values($replace), $path), $replace); } } }; // add styles foreach ($this->themes as $theme) { $file = $theme['file']; $styles[$theme['id']] = [ 'filename' => $this->app->url($file), 'contents' => file_get_contents($file) ]; // add theme imports if ($theme['id'] == preg_replace('/(.+?)(?:\:.+)?$/', '$1', $id)) { $resolve($file, ['@{internal-theme}' => $theme['id']]); if (isset($theme['styles'])) { foreach (array_keys($theme['styles']) as $style) { $resolve($file, ['@{internal-theme}' => $theme['id'], '@{internal-style}' => $style]); } } } } // add imports if (isset($this->theme->options['styles']['imports'])) { foreach ((array) $this->theme->options['styles']['imports'] as $path) { foreach ($this->locator->findAll("@theme/{$path}") as $file) { $resolve($file); } } } return $response->withJson(compact('styles', 'imports')); } public function save($request, $response) { $upload = $request->getUploadedFile('files'); if (!$upload || $upload->getError()) { $this->app->abort(400, 'Invalid file upload.'); } if (!$contents = (string) $upload->getStream()) { $this->app->abort(400, 'Unable to read contents file.'); } if (!$contents = @base64_decode($contents)) { $this->app->abort(400, 'Base64 Decode failed.'); } if (!$files = @json_decode($contents, true)) { $this->app->abort(400, 'Unable to decode JSON from temporary file.'); } foreach ($files as $file => $data) { $rtl = strpos($file, '.rtl') ? '.rtl' : ''; $path = $this->locator->find('@theme/css'); $font = new StyleFontLoader("{$this->theme->path}/fonts"); // save fonts for theme style if ($matches = $font->parse($data)) { list($import, $url) = $matches; if ($fonts = $font->css($url, $path)) { $data = str_replace($import, $fonts, $data); } } // save css for theme style if (!file_put_contents($file = "{$path}/theme.{$this->theme->id}{$rtl}.css", $data)) { $this->app->abort(400, sprintf('Unable to write file (%s).', $file)); } // save css for theme as default/fallback if ($this->theme->default && !file_put_contents($file = "{$path}/theme{$rtl}.css", $data)) { $this->app->abort(400, sprintf('Unable to write file (%s).', $file)); } } return $response->withJson(['message' => 'success']); } }