. * */ namespace Vvveb\Controller\Theme; use function Vvveb\__; use Vvveb\Controller\Base; use function Vvveb\humanReadable; use function Vvveb\sanitizeFileName; use Vvveb\System\Import\Theme; use Vvveb\System\Media\Font; use Vvveb\System\Sites; use Vvveb\System\Traits\Media as MediaTrait; class Fonts extends Base { use MediaTrait; protected $dirMedia = DIR_PUBLIC . 'fonts' . DS; protected $fontsPath = '../../../fonts/'; // /public/fonts relative to /themes/theme-slug/css folder private function getTheme() { return $theme = sanitizeFileName($this->request->get['theme'] ?? Sites::getTheme(SITE_ID) ?? 'default'); } function save() { $fonts = $this->request->post['font'] ?? []; if ($fonts) { $theme = $this->getTheme(); $themeFolder = DIR_THEMES . $theme; $cssFile = DS . 'css' . DS . 'fonts.css'; //try to create file if it doesn't exist if ($theme && ! file_exists($themeFolder . $cssFile) && ! touch($themeFolder . $cssFile)) { $this->view->errors[] = sprintf(__('Can not create file %s!'), $theme . $cssFile); return $this->index(); } if ($theme && is_writable($themeFolder . $cssFile)) { //set font src relative to fonts folder path foreach ($fonts as &$font) { if (isset($font['src'])) { $font['src'] = $this->fontsPath . trim($font['src'], '/'); } } $fontsCss = Font::arrayToFontFaces($fonts); if ($fontsCss) { if ($css = file_get_contents($themeFolder . $cssFile)) { $css = trim(Font::removeFontFaces($css)); } $css .= "\n$fontsCss"; if (! file_put_contents($themeFolder . $cssFile, $css)) { $this->view->errors[] = sprintf(__('%s is not writable!'), $theme . $cssFile); } } } else { $this->view->errors[] = sprintf(__('%s is not writable!'), $theme . $cssFile); } } return $this->index(); } function index() { $theme = $this->getTheme(); //var_dump(Font::themeFonts($theme)); if ($theme && is_dir($themeCssDir = DIR_THEMES . $theme . DS . 'css' . DS)) { $styleCss = $themeCssDir . 'style.css'; $fontsCss = $themeCssDir . 'fonts.css'; $builtIn = []; $custom = []; if (file_exists($styleCss) && ($css = file_get_contents($styleCss))) { $builtIn = Font::parseFontFaces($css); } if (file_exists($fontsCss) && ($css = file_get_contents($fontsCss))) { $custom = Font::parseFontFaces($css, true, false); //set font src relative to fonts folder path foreach ($custom as &$font) { if (isset($font['src'])) { $font['src'] = str_replace($this->fontsPath, '/', $font['src']); } } } $this->view->builtin = $builtIn; $this->view->fonts = $custom; //$this->view->theme = $theme; $this->view->themename = humanReadable($theme); } else { $this->notFound(sprintf(__('Theme fonts not found for %s'), $theme)); } $adminPath = \Vvveb\adminPath(); $controllerPath = $adminPath . 'index.php?module=theme/fonts'; $this->setMediaEndpoints($controllerPath); /* $this->view->fonts = [ 0 => [ 'font-family' => 'test1', 'font-weight' => 'normal', 'font-style' => 'normal', 'src' => 'asdasd', 'font-display' => 'auto', ], 3 => [ 'font-family' => 'test 2', 'font-weight' => 'normal', 'font-style' => 'normal', 'src' => 'asdasd', 'font-display' => 'auto', ], 4 => [ 'font-family' => 'test 3', 'font-weight' => 'normal', 'font-style' => 'normal', 'src' => 'asd', 'font-display' => 'auto', ], 5 => [ 'font-family' => 'test 4', 'font-weight' => 'normal', 'font-style' => 'normal', 'src' => 'fef4f', 'font-display' => 'auto', ], 6 => [ 'font-family' => 'test 5', 'font-weight' => 'normal', 'font-style' => 'normal', 'src' => 'fsdf', 'font-display' => 'auto', ], ]; */ //var_dump($builtIn); //var_dump($custom); } }