. * */ namespace Vvveb\Controller\Editor; use function Vvveb\__; use Vvveb\Controller\Base; use function Vvveb\humanReadable; use function Vvveb\sanitizeFileName; use function Vvveb\slugify; use Vvveb\System\Sites; class Reusable extends Base { private $sectionTemplate = <<request->get['theme'] ?? Sites::getTheme(SITE_ID) ?? 'default'); } private function regenerate($type) { $themeFolder = $this->getThemeFolder(); $folder = $themeFolder . DS . $type . 's' . DS; $htmlFolder = $folder . 'reusable' . DS; $template = ($type == 'section') ? $this->sectionTemplate : $this->blockTemplate; $js = ''; foreach (scandir($htmlFolder) as $file) { if (strpos($file, '.html') === false) { continue; } $name = str_replace('.html','', $file); $title = humanReadable($name); $content = file_get_contents($htmlFolder . DS . $file); $data = compact('name', 'title', 'content'); $reusable = $template; foreach ($data as $key => $value) { $reusable = str_replace('{' . $key . '}', $value, $reusable); } $js .= $reusable; } $jsFile = $folder . $type . 's.js'; $typeName = ucfirst($type); $jsContent = ''; if (file_exists($jsFile)) { $jsContent = file_get_contents($jsFile); //remove old reusable $regex = '\s*Vvveb\.\w+?\.add\([\'"]reusable.+?`\s*\}\);?|' . '\s*Vvveb\.\w+?Group\[["\']Reusable["\']\]\s*\.push\([^\)]+\);?\s*|' . '\s*Vvveb\.\w+?Group\[["\']Reusable["\']\]\s*=\s*\[[^\]]*?\];?\s*'; $jsContent = preg_replace("/$regex/ms", '', $jsContent); } //append new reusable $jsContent = $jsContent . "\n\nVvveb." . $typeName . "sGroup[\"Reusable\"] = [];\n" . $js; return file_put_contents($jsFile, $jsContent); } function save() { $name = slugify(sanitizeFileName($this->request->post['name'])); $type = $this->request->post['type']; $html = $this->request->post['html']; $message = ['success' => false, 'message' => __('Error saving!')]; if (($type == 'section' || $type == 'block') && $html) { $themeFolder = $this->getThemeFolder(); $folder = $themeFolder . DS . $type . 's' . DS . 'reusable' . DS; $file = "$name.html"; @mkdir($folder, 0755 & ~umask(), true); if (file_put_contents($folder . $file, $html)) { if ($this->regenerate($type)) { $message = ['success' => true, 'message' => __('Element saved!')]; } } else { } } $this->response->setType('json'); $this->response->output($message); } }