Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/Cli/Command/Designer/TouchTemplate.php
<?php

namespace XF\Cli\Command\Designer;

use
Symfony\Component\Console\Command\Command;
use
Symfony\Component\Console\Input\InputArgument;
use
Symfony\Component\Console\Input\InputInterface;
use
Symfony\Component\Console\Input\InputOption;
use
Symfony\Component\Console\Output\OutputInterface;
use
XF\Cli\Command\StyleArchiveTrait;

class
TouchTemplate extends Command
{
    use
RequiresDesignerModeTrait, StyleArchiveTrait;

    protected function
configure()
    {
       
$this
           
->setName('xf-designer:touch-template')
            ->
setDescription('Marks the specified template as modified in the specified style and exports it.')
            ->
addArgument(
               
'designer-mode',
               
InputArgument::REQUIRED,
               
'Designer mode ID'
           
)
            ->
addArgument(
               
'template',
               
InputArgument::REQUIRED,
               
'Template to mark as modified. Must include the type prefix, e.g. \'public:template_name\''
           
)
            ->
addOption(
               
'custom',
               
'c',
               
InputOption::VALUE_NONE,
               
'If specified, allows the creation of a custom template.'
           
);
    }

    protected function
execute(InputInterface $input, OutputInterface $output)
    {
       
$em = \XF::em();

       
$style = $this->getStyleByDesignerModeInput($input, $output);

       
$templater = \XF::app()->templater();

       
$title = $input->getArgument('template');
        list (
$type, $title) = $templater->getTemplateTypeAndName($title);

        if (!
$type)
        {
           
$type = 'public';
        }

        if (!
$input->getOption('custom'))
        {
           
$templateFinder = $em->getFinder('XF:Template')
                ->
where([
                   
'type' => $type,
                   
'title' => $title
               
]);

            if (!
$templateFinder->total())
            {
               
$output->writeln("The template '$type:$title' does not exist in any style. Pass the --custom option to create it.");
                return
1;
            }
        }

       
$templateMap = $em->getFinder('XF:TemplateMap')
            ->
where([
               
'style_id' => $style->style_id,
               
'type' => $type,
               
'title' => $title
           
])
            ->
with('Template', true)
            ->
fetchOne();

        if (!
$templateMap)
        {
           
// entirely custom template
           
$newTemplate = $em->create('XF:Template');
           
$newTemplate->style_id = $style->style_id;
           
$newTemplate->type = $type;
           
$newTemplate->title = $title;
           
$newTemplate->template = '';
           
$newTemplate->addon_id = '';

            if (!
$newTemplate->preSave())
            {
               
$output->writeln($newTemplate->getErrors());
                return
1;
            }
           
$newTemplate->save();
        }
        else
        {
           
$baseTemplate = $templateMap->Template;

            if (
$baseTemplate->style_id == $style->style_id)
            {
               
// template already exists in this style
               
$output->writeln(["", "The template '$type:$title' has already been modified. Run the 'xf-designer:export-templates' command to export."]);
                return
1;
            }
            else
            {
               
// template only exists in a parent; duplicate it here
               
$newTemplate = $em->create('XF:Template');
               
$newTemplate->style_id = $style->style_id;
               
$newTemplate->type = $baseTemplate->type;
               
$newTemplate->title = $baseTemplate->title;
               
$newTemplate->template = $baseTemplate->template;
               
$newTemplate->addon_id = $baseTemplate->addon_id;

                if (!
$newTemplate->preSave())
                {
                   
$output->writeln($newTemplate->getErrors());
                    return
1;
                }
               
$newTemplate->save();
            }
        }

       
$output->writeln(["", "Template '{$newTemplate->type}:{$newTemplate->title}' modified in style '$style->title'", ""]);

        return
0;
    }
}