File manager - Edit - /home/opticamezl/www/newok/builder-templates.tar
Back
config/customizer.json 0000644 00000003205 15175150125 0011112 0 ustar 00 { "sections": { "builder-templates": { "title": "Templates", "priority": 25, "views": "${theme.views}", "fieldset": { "default": { "fields": { "name": { "label": "Name", "description": "Define a name to easily identify the template.", "attrs": { "required": true, "autofocus": true } }, "status": { "label": "Status", "description": "Disable the template and publish it later.", "type": "checkbox", "text": "Disable template", "attrs": { "true-value": "disabled", "false-value": "" } }, "type": { "label": "Page", "description": "Choose the page to which the template is assigned.", "type": "select", "default": "", "options": [ { "text": "None", "value": "" }, { "evaluate": "yootheme.builder.templateOptions" } ] } } } } } } } bootstrap.php 0000644 00000001203 15175150125 0007270 0 ustar 00 <?php namespace YOOtheme\Builder\Templates; use YOOtheme\Builder\BuilderConfig; return [ 'routes' => [ ['get', '/builder/template', [TemplateController::class, 'index']], ['post', '/builder/template', [TemplateController::class, 'saveTemplate']], ['delete', '/builder/template', [TemplateController::class, 'deleteTemplate']], ['post', '/builder/template/reorder', [TemplateController::class, 'reorderTemplates']], ], 'events' => [ BuilderConfig::class => [Listener\LoadBuilderConfig::class => ['handle', -20]], ], 'services' => [ TemplateHelper::class => '', ], ]; src/TemplateHelper.php 0000644 00000003222 15175150125 0010760 0 ustar 00 <?php namespace YOOtheme\Builder\Templates; use YOOtheme\Storage; class TemplateHelper { /** * @var array */ public $templates; /** * Constructor. */ public function __construct(Storage $storage) { $this->templates = $storage('templates', []); } public function match(array $template) { foreach ($this->templates as $id => $templ) { if (($templ['status'] ?? '') === 'disabled') { continue; } if (empty($templ['type']) || $templ['type'] !== $template['type']) { continue; } if (isset($template['query'])) { if (is_callable($template['query']) && !$template['query']($templ, $template)) { continue; } if ( is_array($template['query']) && !static::matchQuery($templ, $template['query']) ) { continue; } } return ['id' => $id] + $templ; } } protected static function matchQuery(array $templ, array $query) { foreach ($query as $key => $value) { if (empty($templ['query'][$key])) { continue; } if (is_callable($value)) { if (!$value($templ['query'][$key], $templ['query'])) { return false; } continue; } if (!array_intersect((array) $value, (array) $templ['query'][$key])) { return false; } } return true; } } src/Listener/LoadBuilderConfig.php 0000644 00000001505 15175150125 0013150 0 ustar 00 <?php namespace YOOtheme\Builder\Templates\Listener; use YOOtheme\Builder\BuilderConfig; class LoadBuilderConfig { /** * @param BuilderConfig $config */ public static function handle($config): void { $groups = []; $singles = []; $templates = []; foreach ($config['templates'] ?? [] as $name => $template) { if (isset($template['group'])) { $groups[$template['group']][] = ['value' => $name, 'text' => $template['label']]; } else { $singles[] = ['value' => $name, 'text' => $template['label']]; } } foreach ($groups as $name => $group) { $templates[] = ['label' => $name, 'options' => $group]; } $config->push('templateOptions', ...$singles, ...$templates); } } src/TemplateController.php 0000644 00000005046 15175150125 0011672 0 ustar 00 <?php namespace YOOtheme\Builder\Templates; use YOOtheme\Arr; use YOOtheme\Builder; use YOOtheme\Event; use YOOtheme\Http\Request; use YOOtheme\Http\Response; use YOOtheme\Storage; class TemplateController { public static function index( Request $request, Response $response, Storage $storage, Builder $builder ) { $templates = []; foreach (array_filter($storage('templates', [])) as $id => $template) { if (isset($template['query']) && !$template['query']) { $template['query'] = []; } if (isset($template['layout'])) { $template['layout'] = $builder->load(json_encode($template['layout'])); } $template = Event::emit('builder.template.load|filter', ['id' => $id] + $template); // Ensures query to be an object, when json encoded if (empty($template['query'])) { $template['query'] = new \ArrayObject(); } $templates[] = $template; } return $response->withJson($templates); } public static function saveTemplate( Request $request, Response $response, Storage $storage, Builder $builder ) { // Can't name 'tpl' request param 'template' because of conflict when PECL extension "json_post" is enabled $request->abortIf(!($template = $request->getParam('tpl')) || empty($template['id']), 400); if (isset($template['layout'])) { $template['layout'] = $builder ->withParams(['context' => 'save']) ->load(json_encode($template['layout'])); } $storage->set("templates.{$template['id']}", Arr::omit($template, ['id', 'url'])); return $response->withJson(['message' => 'success']); } public static function deleteTemplate(Request $request, Response $response, Storage $storage) { $request->abortIf(!($id = $request->getParam('id')), 400); $storage->del("templates.{$id}"); return $response->withJson(['message' => 'success']); } public static function reorderTemplates(Request $request, Response $response, Storage $storage) { $request->abortIf(!($sorting = $request->getParam('templates')), 400); $templates = $storage->get('templates'); $storage->set( 'templates', array_merge(array_intersect_key(array_flip($sorting), $templates), $templates), ); return $response->withJson(['message' => 'success']); } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.23 | Generation time: 0 |
proxy
|
phpinfo
|
Settings