<?php
/**
* This file is part of TwigView.
*
** (c) 2014 Cees-Jan Kiewiet
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace WyriHaximus\TwigView\Shell;
use Cake\Console\ConsoleIo;
use Cake\Console\Shell;
use Cake\Core\Plugin;
use WyriHaximus\TwigView\Lib\Scanner;
use WyriHaximus\TwigView\View\TwigView;
/**
* Class CompileTemplatesShell
* @package WyriHaximus\TwigView\Console\Command
*/
// @codingStandardsIgnoreStart
class CompileShell extends Shell
// @codingStandardsIgnoreEnd
{
/**
* Instance of TwigView to be used to compile templates.
*
* @var TwigView
*/
protected $twigView;
/**
* Constructor.
*
* @param ConsoleIo $consoleIo An IO instance.
*/
public function __construct(ConsoleIo $consoleIo = null)
{
parent::__construct($consoleIo);
$this->twigView = new TwigView();
}
/**
* Set TwigView.
*
* @param TwigView $twigView TwigView instance.
*
* @return void
*/
public function setTwigview(TwigView $twigView)
{
$this->twigView = $twigView;
}
/**
* Compile all templates.
*
* @return void
*/
// @codingStandardsIgnoreStart
public function all()
{
$this->out('<info>Compiling all templates</info>');
foreach(Scanner::all() as $section => $templates) {
$this->out('<info>Compiling ' . $section . '\'s templates</info>');
$this->walkIterator($templates);
}
}
// @codingStandardsIgnoreEnd
/**
* Compile only this plugin.
*
* @param string $plugin Plugin name.
*
* @return void
*/
public function plugin($plugin)
{
$this->out('<info>Compiling one ' . $plugin . '\'s templates</info>');
$this->walkIterator(Scanner::plugin($plugin));
}
/**
* Only compile one file.
*
* @param string $fileName File to compile.
*
* @return void
*/
public function file($fileName)
{
$this->out('<info>Compiling one template</info>');
$this->compileTemplate($fileName);
}
/**
* Walk over $iterator and compile all templates in it.
*
* @param mixed $iterator Iterator to walk over.
*
* @return void
*/
protected function walkIterator($iterator)
{
foreach ($iterator as $template) {
$this->compileTemplate($template);
}
}
/**
* Compile a template.
*
* @param string $fileName Template to compile.
*
* @return void
*/
protected function compileTemplate($fileName)
{
try {
$this->
twigView->
getTwig()->
loadTemplate($fileName);
$this->out('<success>' . $fileName . '</success>');
} catch (\Exception $exception) {
$this->out('<error>' . $fileName . '</error>');
$this->out('<error>' . $exception->getMessage() . '</error>');
}
}
/**
* Set options for this console.
*
* @return \Cake\Console\ConsoleOptionParser
*/
// @codingStandardsIgnoreStart
public function getOptionParser()
{
// @codingStandardsIgnoreEnd
return parent::getOptionParser()->addSubcommand(
'all',
[
'short' => 'a',
// @codingStandardsIgnoreStart
'help' => __('Searches and precompiles all twig templates it finds.')
// @codingStandardsIgnoreEnd
]
)->addSubcommand(
'plugin',
[
'short' => 'p',
// @codingStandardsIgnoreStart
'help' => __('Searches and precompiles all twig templates for a specific plugin.')
// @codingStandardsIgnoreEnd
]
)->addSubcommand(
'file',
[
'short' => 'f',
// @codingStandardsIgnoreStart
'help' => __('Precompile a specific file.')
// @codingStandardsIgnoreEnd
]
// @codingStandardsIgnoreStart
)->setDescription(__('TwigView templates precompiler'));
// @codingStandardsIgnoreEnd
}
}