* Copyright 2016 Nicolas Goaziou * * This file is part of FAI Gestion forked from CHD Gestion. * * FAI Gestion is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * FAI Gestion is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with FAI Gestion. If not, see . **/ namespace CustomTheme\Shell; use Cake\Console\Shell; use Cake\Utility\Inflector; use Bake\Shell\BakeShell as BaseShell; class BakeShell extends BaseShell { /** * Assign $this->connection to the active task if a connection param is set. * Add values to $this->Model->skipTables if config/bake_extra.php define it * * @return void */ public function startup() { parent::startup(); $this->extra = include(ROOT . DS . 'config' . DS . 'bake_extra.php'); /* Allow skipping more tables than bake' ModelTask default */ if ( array_key_exists('skipTables', $this->extra) ) { $skipTables = $this->extra['skipTables']; array_walk($skipTables, 'Cake\Utility\Inflector::tableize'); $this->Model->skipTables = array_merge($this->Model->skipTables, $skipTables); } } /** * Quickly bake the MVC * * @param string|null $name Name. * @return bool */ public function all($name = null) { $this->out('CustomTheme Bake All'); $this->hr(); if (!empty($this->params['connection'])) { $this->connection = $this->params['connection']; } if (empty($name) && !$this->param('everything')) { $this->Model->connection = $this->connection; $this->out('Possible model names based on your database:'); foreach ($this->Model->listUnskipped() as $table) { $this->out('- ' . $table); } $this->out('Run `cake bake all [name]` to generate skeleton files.'); return false; } $allTables = collection([$name]); $filteredTables = $allTables; if ($this->param('everything')) { $this->Model->connection = $this->connection; $filteredTables = collection($this->Model->listUnskipped()); } foreach (['Model', 'Controller', 'Template'] as $task) { $filteredTables->each(function ($tableName) use ($task) { $tableName = $this->_camelize($tableName); /* Allow feedding some parameters to each *Task run */ if ( array_key_exists('taskParams', $this->extra) ){ $extra = $this->extra['taskParams']; /* Cake\Console\Shell __get($name) for lazy building of tasks do: * $this->{$task}->params =& $this->params; * We want different params at each use of tasks, so reset it */ $task_params = $this->params; if ( array_key_exists('default', $extra) ) $task_params = array_merge($task_params, $extra['default']); if ( array_key_exists($tableName, $extra) ) $task_params = array_merge($task_params, $extra[$tableName]); $this->{$task}->params = $task_params; } $this->{$task}->connection = $this->connection; $this->{$task}->interactive = $this->interactive; $this->{$task}->main($tableName); }); } $this->out('CustomTheme Bake All complete.', 1, Shell::QUIET); return true; } }