Source of file DocumentTemplate.php

Size: 1,948 Bytes - Last Modified: 2019-06-27T09:09:04+00:00

/home/vagrant/www/document-templates/src/DocumentTemplates/DocumentTemplate.php

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
<?php


namespace BWF\DocumentTemplates\DocumentTemplates;

use BWF\DocumentTemplates\Layouts\TwigLayout;
use BWF\DocumentTemplates\Renderers\TwigRenderer;

trait DocumentTemplate
{
    use BaseDocumentTemplate;

    /**
     * @var \BWF\DocumentTemplates\DocumentTemplates\DocumentTemplateModel
     */
    protected $model = null;

    /**
     * @param \BWF\DocumentTemplates\DocumentTemplates\DocumentTemplateModelInterface|null $model
     * @throws \Twig\Error\LoaderError
     * @throws \Twig\Error\RuntimeError
     * @throws \Twig\Error\SyntaxError
     */
    public function init(DocumentTemplateModelInterface $model = null)
    {
        if($model){
            $this->model = $model;
        }
        else{
            $this->model = DocumentTemplateModel::byDocumentClass(get_class($this))->first();
        }

        $this->renderer = new TwigRenderer();
        $this->layout = new TwigLayout();

        if ($this->model) {
            $layoutName = $this->model->getLayoutName();

            if ($layoutName) {
                $this->layout->load($layoutName);
            }
        }
    }

    /**
     * @return \Illuminate\Support\Collection|\BWF\DocumentTemplates\EditableTemplates\EditableTemplate[]
     */
    public function getTemplates()
    {
        $templates = collect();
        $layoutTemplates = $this->layout->getTemplates();
        $layoutTemplateNames = $layoutTemplates->map(function($item){
            return $item->getName();
        });

        if ($this->model) {
            $templates = $this->model->getEditableTemplates($layoutTemplateNames);
        }

        /** @var EditableTemplate $layoutTemplate */
        foreach ($layoutTemplates as $layoutTemplate) {
            $templateName = $layoutTemplate->getName();
            if (!$templates->contains('name', $templateName)) {
                $templates->push($layoutTemplate);
            }
        }

        return $templates;
    }
}