* 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\View\Helper; use Cake\View\Helper; use Cake\Utility\Hash; class BakeExtraHelper extends Helper { public $helpers = ['Bake']; public function hello() { return "\n"; } public function hasFilters($controllerName) { if ( ! is_string($controllerName) ) return FALSE; $filters = $this->getFilters($controllerName); return (is_array($filters) && count($filters) > 0); } public function getFilters($controllerName) { if ( ! is_string($controllerName) ) return FALSE; return Hash::get($this->_config, "templateExtra.$controllerName.filters"); } public function getFiltersExtraModels($controllerName, $modelObj) { $extraModels=[]; $filters = $this->getFilters($controllerName); if ( is_array($filters) && is_object($modelObj) ) { $searchFields = []; foreach ($filters as $k => $filter) { $searchFields += array_keys( $this->getFilters($controllerName) ); } foreach ($modelObj->associations()->getByType('BelongsTo') as $model) { if ( in_array($model->getForeignKey(), $searchFields) ) { $extraModels[] = $model; } } } return $extraModels; } public function stringifySearchManagerConfig($filterConfig) { $indent = 2; $tab = ' '; // Do not output Model & Template specific options here unset($filterConfig['mode']); unset($filterConfig['colspan']); unset($filterConfig['hint']); //Bake::stringifyList() has bugs with nested array + option quotes in Cake 3.6.7 $s = var_export($filterConfig, true); $s = str_replace([ 'array (', ')'], ['[', ']'], $s); $s = preg_replace_callback( // for each text line, replace ' ' idents by $tab, adding a $indent offset '/^([ ]+)/m', function($ms) use ($indent, $tab) { return str_repeat($tab, $indent+floor(strlen($ms[1])/2)); }, $s ); $s = trim($s, '[]'); return $s . str_repeat($tab, $indent); } public function hasAction($action, $controllerName) { if ( ! is_string($controllerName) ) return FALSE; return in_array($action, $this->getActions($controllerName)); } public function getActions($controllerName) { if ( ! is_string($controllerName) ) return FALSE; $actions = Hash::get($this->_config, "controllerActions.$controllerName"); if ( ! is_array($actions) ) { $actions = Hash::get($this->_config, "controllerActions.default"); } return $actions; } public function filterFields($fields, $schema, $modelObject = null, $takeFields = [], $filterTypes = ['binary'], $rejectFields = ['id']) { $coll = collection($this->Bake->filterFields($fields, $schema, $modelObject, [], $filterTypes)); $coll = $coll->reject(function ($field, $key) use ($rejectFields) { return in_array($field, $rejectFields); }); return $coll->take($takeFields)->toArray(); } public function filterFieldsOther($fields, $controllerName) { $takeFields = Hash::get($this->_config, "taskParams.$controllerName.index-columns"); if ( $takeFields === NULL ) $takeFields = Hash::get($this->_config, "taskParams.default.index-columns"); //$filterTypes = ['binary']; // TODO $rejectFields = ['id']; $coll = collection($fields); $coll = $coll->reject(function ($field, $key) use ($rejectFields) { return in_array($field, $rejectFields); }); return $coll->take($takeFields)->toArray(); } public function getTitleOpts($controllerName) { if ( ! is_string($controllerName) ) return FALSE; return Hash::get($this->_config, "templateExtra.$controllerName.title"); } public function hasOrderOpts($controllerName) { if ( ! is_string($controllerName) ) return FALSE; $orderOpts = $this->getOrderOpts($controllerName); return (is_array($orderOpts) && count($orderOpts) > 0); } public function getOrderOpts($controllerName) { if ( ! is_string($controllerName) ) return FALSE; return Hash::get($this->_config, "templateExtra.$controllerName.order"); } public function hasOrderContains($controllerName) { if ( ! is_string($controllerName) ) return FALSE; $orderContains = $this->getOrderContains($controllerName); return (is_array($orderContains) && count($orderContains) > 0); } public function getOrderContains($controllerName) { if ( ! is_string($controllerName) ) return FALSE; $orderOpts = $this->getOrderOpts($controllerName); $contains = collection(array_keys($orderOpts)) ->map( function ($item, $key) use ($controllerName) { $alias = substr($item, 0, strpos($item, '.')); return ($alias===$controllerName)?FALSE:$alias; } )->filter( function ($item, $key) { return $item !== FALSE; } )->toArray(); return $contains; } public function hasOrderHooks($controllerName) { if ( ! is_string($controllerName) ) return FALSE; $orderHooks = $this->getOrderHooks($controllerName); return (is_array($orderHooks) && count($orderHooks) > 0); } public function getOrderHooks($controllerName) { if ( ! is_string($controllerName) ) return FALSE; return Hash::get($this->_config, "templateExtra.$controllerName.orderHook"); } }