From 488882e392773c30aedaf14248d9a9b37ffb2d7f Mon Sep 17 00:00:00 2001 From: Shem Pasamba Date: Fri, 16 Sep 2016 09:47:34 +0800 Subject: [PATCH 01/15] Add datagrid option --- src/Commands/BaseCommand.php | 1 + src/Common/CommandData.php | 6 ++- src/Common/GeneratorConfig.php | 10 +++++ src/Common/GeneratorField.php | 5 +++ src/Generators/RepositoryGenerator.php | 5 ++- .../Scaffold/ControllerGenerator.php | 12 ++++++ src/Generators/Scaffold/ViewGenerator.php | 37 +++++++++++++++++++ templates/scaffold/controller/controller.stub | 2 + 8 files changed, 75 insertions(+), 3 deletions(-) diff --git a/src/Commands/BaseCommand.php b/src/Commands/BaseCommand.php index c9a72f85c..ecd4790e8 100755 --- a/src/Commands/BaseCommand.php +++ b/src/Commands/BaseCommand.php @@ -234,6 +234,7 @@ public function getOptions() ['paginate', null, InputOption::VALUE_REQUIRED, 'Pagination for index.blade.php'], ['skip', null, InputOption::VALUE_REQUIRED, 'Skip Specific Items to Generate (migration,model,controllers,api_controller,scaffold_controller,repository,requests,api_requests,scaffold_requests,routes,api_routes,scaffold_routes,views,tests,menu,dump-autoload)'], ['datatables', null, InputOption::VALUE_REQUIRED, 'Override datatables settings'], + ['datagrid', null, InputOption::VALUE_NONE, 'Use datagrid for in table.blade.php'], ['views', null, InputOption::VALUE_REQUIRED, 'Specify only the views you want generated: index,create,edit,show'], ['relations', null, InputOption::VALUE_NONE, 'Specify if you want to pass relationships for fields'], ]; diff --git a/src/Common/CommandData.php b/src/Common/CommandData.php index 2b0c6da92..bcb8bdb6b 100755 --- a/src/Common/CommandData.php +++ b/src/Common/CommandData.php @@ -54,8 +54,10 @@ public function __construct(Command $commandObj, $commandType) $this->commandType = $commandType; $this->fieldNamesMapping = [ - '$FIELD_NAME_TITLE$' => 'fieldTitle', - '$FIELD_NAME$' => 'name', + '$FIELD_NAME_TITLE$' => 'fieldTitle', + '$FIELD_NAME$' => 'name', + '$FIELD_DOT_NOTATION_NAME$' => 'dotNotationName', + '$FIELD_IS_FILLABLE$' => 'isFillable', ]; $this->config = new GeneratorConfig(); diff --git a/src/Common/GeneratorConfig.php b/src/Common/GeneratorConfig.php index 158ee7761..a5277af32 100755 --- a/src/Common/GeneratorConfig.php +++ b/src/Common/GeneratorConfig.php @@ -70,6 +70,7 @@ class GeneratorConfig 'paginate', 'skip', 'datatables', + 'datagrid', 'views', 'relations', ]; @@ -315,6 +316,15 @@ public function prepareOptions(CommandData &$commandData) $this->addOns['datatables'] = false; } } + + if (!empty($this->options['datagrid'])) + { + if (isset($this->options['datatables']) && $this->options['datatables'] === 'true' && $this->options['datatables']) + { + $commandData->commandError('can\'t use datagrid and datables at the same time.'); + exit; + } + } } public function preparePrefixes() diff --git a/src/Common/GeneratorField.php b/src/Common/GeneratorField.php index 13751e108..08fea0785 100644 --- a/src/Common/GeneratorField.php +++ b/src/Common/GeneratorField.php @@ -8,6 +8,7 @@ class GeneratorField { /** @var string */ public $name; + public $dotNotationname; public $dbInput; public $htmlInput; public $htmlType; @@ -135,6 +136,10 @@ public function __get($key) return Str::title(str_replace('_', ' ', $this->name)); } + if ($key == 'dotNotationName') { + return str_replace('->', '.', $this->name); + } + return $this->$key; } } diff --git a/src/Generators/RepositoryGenerator.php b/src/Generators/RepositoryGenerator.php index b85796f7a..85d42d2ba 100755 --- a/src/Generators/RepositoryGenerator.php +++ b/src/Generators/RepositoryGenerator.php @@ -33,7 +33,10 @@ public function generate() foreach ($this->commandData->fields as $field) { if ($field->isSearchable) { - $searchables[] = "'".$field->name."'"; + $condition = ''; + if ($field->fieldType == 'text') + $condition = " => 'like'"; + $searchables[] = "'".$field->name."'".$condition; } } diff --git a/src/Generators/Scaffold/ControllerGenerator.php b/src/Generators/Scaffold/ControllerGenerator.php index 5059c3f36..8f89ea5f4 100755 --- a/src/Generators/Scaffold/ControllerGenerator.php +++ b/src/Generators/Scaffold/ControllerGenerator.php @@ -44,6 +44,18 @@ public function generate() } else { $templateData = str_replace('$RENDER_TYPE$', 'all()', $templateData); } + + if ($this->commandData->getOption('datagrid')) + { + $use_filter_convert = get_template('scaffold.controller.datagrid_use_filter_convert', 'laravel-generator'); + $filter_convert = get_template('scaffold.controller.datagrid_filter_convert', 'laravel-generator'); + + $templateData = str_replace ('$DATAGRID_USE_FILTER_CONVERT$', $use_filter_convert, $templateData); + $templateData = str_replace ('$DATAGRID_FILTER_CONVERT$', $filter_convert, $templateData); + } else { + $templateData = str_replace ('$DATAGRID_USE_FILTER_CONVERT$', '', $templateData); + $templateData = str_replace ('$DATAGRID_FILTER_CONVERT$', '', $templateData); + } } $templateData = fill_template($this->commandData->dynamicVars, $templateData); diff --git a/src/Generators/Scaffold/ViewGenerator.php b/src/Generators/Scaffold/ViewGenerator.php index d06fc3565..433d11302 100755 --- a/src/Generators/Scaffold/ViewGenerator.php +++ b/src/Generators/Scaffold/ViewGenerator.php @@ -80,6 +80,8 @@ private function generateTable() if ($this->commandData->getAddOn('datatables')) { $templateData = $this->generateDataTableBody(); $this->generateDataTableActions(); + } else if ($this->commandData->getOption('datagrid')) { + $templateData = $this->generateDatagridBladeTableBody(); } else { $templateData = $this->generateBladeTableBody(); } @@ -107,6 +109,41 @@ private function generateDataTableActions() $this->commandData->commandInfo('datatables_actions.blade.php created'); } + private function generateDatagridBladeTableBody() + { + $templateData = get_template('scaffold.views.blade_datagrid_table_body', $this->templateType); + + $templateData = fill_template($this->commandData->dynamicVars, $templateData); + + $templateData = str_replace('$SET_COLUMNS$', $this->generateDatagridSetColumnFields(), $templateData); + + return $templateData; + } + + private function generateDatagridSetColumnFields() + { + $setColumnsTemplate = get_template('scaffold.views.datagrid_table_set_columns', $this->templateType); + + $setColumns = []; + + foreach ($this->commandData->fields as $field) { + if (!$field->inIndex) { + continue; + } + + $field->isFillable = $field->isFillable ? 'true' : 'false'; + + $setColumns[] = $fieldTemplate = fill_template_with_field_data( + $this->commandData->dynamicVars, + $this->commandData->fieldNamesMapping, + $setColumnsTemplate, + $field + ); + } + + return implode(infy_nl_tab(0, 1), $setColumns); + } + private function generateBladeTableBody() { $templateData = get_template('scaffold.views.blade_table_body', $this->templateType); diff --git a/templates/scaffold/controller/controller.stub b/templates/scaffold/controller/controller.stub index 2c446a4fd..905472ac9 100755 --- a/templates/scaffold/controller/controller.stub +++ b/templates/scaffold/controller/controller.stub @@ -29,6 +29,7 @@ class $MODEL_NAME$Controller extends AppBaseController */ public function index(Request $request) { + $DATAGRID_USE_FILTER_CONVERT$ $this->$MODEL_NAME_CAMEL$Repository->pushCriteria(new RequestCriteria($request)); $$MODEL_NAME_PLURAL_CAMEL$ = $this->$MODEL_NAME_CAMEL$Repository->$RENDER_TYPE$; @@ -152,4 +153,5 @@ class $MODEL_NAME$Controller extends AppBaseController return redirect(route('$ROUTE_NAMED_PREFIX$$MODEL_NAME_PLURAL_CAMEL$.index')); } + $DATAGRID_FILTER_CONVERT$ } From 7b7a98931600173dd8c0fe6d1120a55ae5c5a323 Mon Sep 17 00:00:00 2001 From: Shem Pasamba Date: Fri, 16 Sep 2016 10:23:31 +0800 Subject: [PATCH 02/15] Missed the stubs --- .../controller/datagrid_filter_convert.stub | 32 +++++++++++++++++++ .../datagrid_use_filter_convert.stub | 1 + 2 files changed, 33 insertions(+) create mode 100644 templates/scaffold/controller/datagrid_filter_convert.stub create mode 100644 templates/scaffold/controller/datagrid_use_filter_convert.stub diff --git a/templates/scaffold/controller/datagrid_filter_convert.stub b/templates/scaffold/controller/datagrid_filter_convert.stub new file mode 100644 index 000000000..31051704a --- /dev/null +++ b/templates/scaffold/controller/datagrid_filter_convert.stub @@ -0,0 +1,32 @@ + + /** + * Convert datagrid filters to repository filters + * + * @param Request &$request + */ + private function convertDatagridFilterToRepositoryFilter (&$request) + { + if (!isset($request['f'])) + return; + + $f = $request['f']; + + if (isset($f['order_by']) && !empty($f['order_by']) + && isset($f['order_dir']) && !empty($f['order_dir'])) + { + $request['orderBy']=$f['order_by']; + $request['sortedBy']=$f['order_dir']!=='DESC'?'asc':'desc'; + } + + unset($f['order_by']); + unset($f['order_dir']); + $searches=[]; + foreach($f as $field => $value) + { + if ($value == '') + continue; + $searches[] = $field.':'.$value; + } + $request['search']=implode(';', $searches); + $request['searchUseAnd'] = 1; + } diff --git a/templates/scaffold/controller/datagrid_use_filter_convert.stub b/templates/scaffold/controller/datagrid_use_filter_convert.stub new file mode 100644 index 000000000..fd4039717 --- /dev/null +++ b/templates/scaffold/controller/datagrid_use_filter_convert.stub @@ -0,0 +1 @@ +$this->convertDatagridFilterToRepositoryFilter($request); From 7802bed20f5b8c4b91154fc2a65e2f68c437a623 Mon Sep 17 00:00:00 2001 From: Shem Pasamba Date: Fri, 16 Sep 2016 10:36:18 +0800 Subject: [PATCH 03/15] Fix: StyleCI errors --- src/Common/GeneratorConfig.php | 6 ++---- src/Generators/RepositoryGenerator.php | 3 ++- src/Generators/Scaffold/ControllerGenerator.php | 13 ++++++------- src/Generators/Scaffold/ViewGenerator.php | 2 +- 4 files changed, 11 insertions(+), 13 deletions(-) diff --git a/src/Common/GeneratorConfig.php b/src/Common/GeneratorConfig.php index a5277af32..a325ee414 100755 --- a/src/Common/GeneratorConfig.php +++ b/src/Common/GeneratorConfig.php @@ -317,10 +317,8 @@ public function prepareOptions(CommandData &$commandData) } } - if (!empty($this->options['datagrid'])) - { - if (isset($this->options['datatables']) && $this->options['datatables'] === 'true' && $this->options['datatables']) - { + if (!empty($this->options['datagrid'])) { + if (isset($this->options['datatables']) && $this->options['datatables'] === 'true' && $this->options['datatables']) { $commandData->commandError('can\'t use datagrid and datables at the same time.'); exit; } diff --git a/src/Generators/RepositoryGenerator.php b/src/Generators/RepositoryGenerator.php index 85d42d2ba..881f72bbd 100755 --- a/src/Generators/RepositoryGenerator.php +++ b/src/Generators/RepositoryGenerator.php @@ -34,8 +34,9 @@ public function generate() foreach ($this->commandData->fields as $field) { if ($field->isSearchable) { $condition = ''; - if ($field->fieldType == 'text') + if ($field->fieldType == 'text') { $condition = " => 'like'"; + } $searchables[] = "'".$field->name."'".$condition; } } diff --git a/src/Generators/Scaffold/ControllerGenerator.php b/src/Generators/Scaffold/ControllerGenerator.php index 8f89ea5f4..585746c83 100755 --- a/src/Generators/Scaffold/ControllerGenerator.php +++ b/src/Generators/Scaffold/ControllerGenerator.php @@ -45,16 +45,15 @@ public function generate() $templateData = str_replace('$RENDER_TYPE$', 'all()', $templateData); } - if ($this->commandData->getOption('datagrid')) - { + if ($this->commandData->getOption('datagrid')) { $use_filter_convert = get_template('scaffold.controller.datagrid_use_filter_convert', 'laravel-generator'); - $filter_convert = get_template('scaffold.controller.datagrid_filter_convert', 'laravel-generator'); + $filter_convert = get_template('scaffold.controller.datagrid_filter_convert', 'laravel-generator'); - $templateData = str_replace ('$DATAGRID_USE_FILTER_CONVERT$', $use_filter_convert, $templateData); - $templateData = str_replace ('$DATAGRID_FILTER_CONVERT$', $filter_convert, $templateData); + $templateData = str_replace('$DATAGRID_USE_FILTER_CONVERT$', $use_filter_convert, $templateData); + $templateData = str_replace('$DATAGRID_FILTER_CONVERT$', $filter_convert, $templateData); } else { - $templateData = str_replace ('$DATAGRID_USE_FILTER_CONVERT$', '', $templateData); - $templateData = str_replace ('$DATAGRID_FILTER_CONVERT$', '', $templateData); + $templateData = str_replace('$DATAGRID_USE_FILTER_CONVERT$', '', $templateData); + $templateData = str_replace('$DATAGRID_FILTER_CONVERT$', '', $templateData); } } diff --git a/src/Generators/Scaffold/ViewGenerator.php b/src/Generators/Scaffold/ViewGenerator.php index 433d11302..7466e3735 100755 --- a/src/Generators/Scaffold/ViewGenerator.php +++ b/src/Generators/Scaffold/ViewGenerator.php @@ -80,7 +80,7 @@ private function generateTable() if ($this->commandData->getAddOn('datatables')) { $templateData = $this->generateDataTableBody(); $this->generateDataTableActions(); - } else if ($this->commandData->getOption('datagrid')) { + } elseif ($this->commandData->getOption('datagrid')) { $templateData = $this->generateDatagridBladeTableBody(); } else { $templateData = $this->generateBladeTableBody(); From 479a880aee119d8e1438ea23938bdb0599eb2438 Mon Sep 17 00:00:00 2001 From: Shem Pasamba Date: Fri, 16 Sep 2016 11:56:38 +0800 Subject: [PATCH 04/15] Use a trait instead of populating controller with the same function --- .../Scaffold/ControllerGenerator.php | 20 +++++++++++-------- .../DatagridSortableAndFilterableUtil.php | 12 +++++++++-- templates/scaffold/controller/controller.stub | 6 +++--- ...convert.stub => datagrid_call_filter.stub} | 0 .../controller/datagrid_use_path.stub | 1 + .../controller/datagrid_use_trait.stub | 1 + 6 files changed, 27 insertions(+), 13 deletions(-) rename templates/scaffold/controller/datagrid_filter_convert.stub => src/Utils/DatagridSortableAndFilterableUtil.php (77%) rename templates/scaffold/controller/{datagrid_use_filter_convert.stub => datagrid_call_filter.stub} (100%) create mode 100644 templates/scaffold/controller/datagrid_use_path.stub create mode 100644 templates/scaffold/controller/datagrid_use_trait.stub diff --git a/src/Generators/Scaffold/ControllerGenerator.php b/src/Generators/Scaffold/ControllerGenerator.php index 585746c83..902eb90f3 100755 --- a/src/Generators/Scaffold/ControllerGenerator.php +++ b/src/Generators/Scaffold/ControllerGenerator.php @@ -45,15 +45,19 @@ public function generate() $templateData = str_replace('$RENDER_TYPE$', 'all()', $templateData); } - if ($this->commandData->getOption('datagrid')) { - $use_filter_convert = get_template('scaffold.controller.datagrid_use_filter_convert', 'laravel-generator'); - $filter_convert = get_template('scaffold.controller.datagrid_filter_convert', 'laravel-generator'); - - $templateData = str_replace('$DATAGRID_USE_FILTER_CONVERT$', $use_filter_convert, $templateData); - $templateData = str_replace('$DATAGRID_FILTER_CONVERT$', $filter_convert, $templateData); + if ($this->commandData->getOption('datagrid')) + { + $use_datagrid_path = get_template('scaffold.controller.datagrid_use_path', 'laravel-generator'); + $use_datagrid_trait = get_template('scaffold.controller.datagrid_use_trait', 'laravel-generator'); + $call_datagrid = get_template('scaffold.controller.datagrid_call_filter', 'laravel-generator'); + + $templateData = str_replace ('$USE_DATAGRID_PATH$', $use_datagrid_path, $templateData); + $templateData = str_replace ('$USE_DATAGRID_TRAIT$', $use_datagrid_trait, $templateData); + $templateData = str_replace ('$CALL_DATAGRID$', $call_datagrid, $templateData); } else { - $templateData = str_replace('$DATAGRID_USE_FILTER_CONVERT$', '', $templateData); - $templateData = str_replace('$DATAGRID_FILTER_CONVERT$', '', $templateData); + $templateData = str_replace ('$USE_DATAGRID_PATH$', $use_datagrid, $templateData); + $templateData = str_replace ('$USE_DATAGRID_TRAIT$', '', $templateData); + $templateData = str_replace ('$CALL_DATAGRID$', '', $templateData); } } diff --git a/templates/scaffold/controller/datagrid_filter_convert.stub b/src/Utils/DatagridSortableAndFilterableUtil.php similarity index 77% rename from templates/scaffold/controller/datagrid_filter_convert.stub rename to src/Utils/DatagridSortableAndFilterableUtil.php index 31051704a..66a3fcfa1 100644 --- a/templates/scaffold/controller/datagrid_filter_convert.stub +++ b/src/Utils/DatagridSortableAndFilterableUtil.php @@ -1,10 +1,17 @@ +$MODEL_NAME_CAMEL$Repository->pushCriteria(new RequestCriteria($request)); $$MODEL_NAME_PLURAL_CAMEL$ = $this->$MODEL_NAME_CAMEL$Repository->$RENDER_TYPE$; @@ -153,5 +154,4 @@ class $MODEL_NAME$Controller extends AppBaseController return redirect(route('$ROUTE_NAMED_PREFIX$$MODEL_NAME_PLURAL_CAMEL$.index')); } - $DATAGRID_FILTER_CONVERT$ } diff --git a/templates/scaffold/controller/datagrid_use_filter_convert.stub b/templates/scaffold/controller/datagrid_call_filter.stub similarity index 100% rename from templates/scaffold/controller/datagrid_use_filter_convert.stub rename to templates/scaffold/controller/datagrid_call_filter.stub diff --git a/templates/scaffold/controller/datagrid_use_path.stub b/templates/scaffold/controller/datagrid_use_path.stub new file mode 100644 index 000000000..fd12ad391 --- /dev/null +++ b/templates/scaffold/controller/datagrid_use_path.stub @@ -0,0 +1 @@ +use InfyOm\Generator\Utils\DatagridSortableAndFilterable; diff --git a/templates/scaffold/controller/datagrid_use_trait.stub b/templates/scaffold/controller/datagrid_use_trait.stub new file mode 100644 index 000000000..8dbe04f22 --- /dev/null +++ b/templates/scaffold/controller/datagrid_use_trait.stub @@ -0,0 +1 @@ +use DatagridSortableAndFilterable; From f586e680e852acc194a2b37782b63a99b390a89a Mon Sep 17 00:00:00 2001 From: Shem Pasamba Date: Fri, 16 Sep 2016 11:58:23 +0800 Subject: [PATCH 05/15] Style fixes again --- .../Scaffold/ControllerGenerator.php | 19 ++++++----- .../DatagridSortableAndFilterableUtil.php | 32 +++++++++---------- 2 files changed, 25 insertions(+), 26 deletions(-) diff --git a/src/Generators/Scaffold/ControllerGenerator.php b/src/Generators/Scaffold/ControllerGenerator.php index 902eb90f3..a446ab705 100755 --- a/src/Generators/Scaffold/ControllerGenerator.php +++ b/src/Generators/Scaffold/ControllerGenerator.php @@ -45,19 +45,18 @@ public function generate() $templateData = str_replace('$RENDER_TYPE$', 'all()', $templateData); } - if ($this->commandData->getOption('datagrid')) - { - $use_datagrid_path = get_template('scaffold.controller.datagrid_use_path', 'laravel-generator'); + if ($this->commandData->getOption('datagrid')) { + $use_datagrid_path = get_template('scaffold.controller.datagrid_use_path', 'laravel-generator'); $use_datagrid_trait = get_template('scaffold.controller.datagrid_use_trait', 'laravel-generator'); - $call_datagrid = get_template('scaffold.controller.datagrid_call_filter', 'laravel-generator'); + $call_datagrid = get_template('scaffold.controller.datagrid_call_filter', 'laravel-generator'); - $templateData = str_replace ('$USE_DATAGRID_PATH$', $use_datagrid_path, $templateData); - $templateData = str_replace ('$USE_DATAGRID_TRAIT$', $use_datagrid_trait, $templateData); - $templateData = str_replace ('$CALL_DATAGRID$', $call_datagrid, $templateData); + $templateData = str_replace('$USE_DATAGRID_PATH$', $use_datagrid_path, $templateData); + $templateData = str_replace('$USE_DATAGRID_TRAIT$', $use_datagrid_trait, $templateData); + $templateData = str_replace('$CALL_DATAGRID$', $call_datagrid, $templateData); } else { - $templateData = str_replace ('$USE_DATAGRID_PATH$', $use_datagrid, $templateData); - $templateData = str_replace ('$USE_DATAGRID_TRAIT$', '', $templateData); - $templateData = str_replace ('$CALL_DATAGRID$', '', $templateData); + $templateData = str_replace('$USE_DATAGRID_PATH$', $use_datagrid, $templateData); + $templateData = str_replace('$USE_DATAGRID_TRAIT$', '', $templateData); + $templateData = str_replace('$CALL_DATAGRID$', '', $templateData); } } diff --git a/src/Utils/DatagridSortableAndFilterableUtil.php b/src/Utils/DatagridSortableAndFilterableUtil.php index 66a3fcfa1..7e5838909 100644 --- a/src/Utils/DatagridSortableAndFilterableUtil.php +++ b/src/Utils/DatagridSortableAndFilterableUtil.php @@ -4,37 +4,37 @@ use Illuminate\Http\Request; -trait DatagridSortableAndFilterable +trait DatagridSortableAndFilterableUtil { /** - * Convert datagrid filters to repository filters - * - * @param Request &$request - */ - private function convertDatagridFilterToRepositoryFilter (Request &$request) + * Convert datagrid filters to repository filters. + * + * @param Request &$request + */ + private function convertDatagridFilterToRepositoryFilter(Request &$request) { - if (!isset($request['f'])) + if (!isset($request['f'])) { return; + } $f = $request['f']; if (isset($f['order_by']) && !empty($f['order_by']) - && isset($f['order_dir']) && !empty($f['order_dir'])) - { - $request['orderBy']=$f['order_by']; - $request['sortedBy']=$f['order_dir']!=='DESC'?'asc':'desc'; + && isset($f['order_dir']) && !empty($f['order_dir'])) { + $request['orderBy'] = $f['order_by']; + $request['sortedBy'] = $f['order_dir'] !== 'DESC' ? 'asc' : 'desc'; } unset($f['order_by']); unset($f['order_dir']); - $searches=[]; - foreach($f as $field => $value) - { - if ($value == '') + $searches = []; + foreach ($f as $field => $value) { + if ($value == '') { continue; + } $searches[] = $field.':'.$value; } - $request['search']=implode(';', $searches); + $request['search'] = implode(';', $searches); $request['searchUseAnd'] = 1; } } From 0a5866eb21974d75cbbe12fcc7a8c51e8525ecd5 Mon Sep 17 00:00:00 2001 From: Shem Pasamba Date: Fri, 16 Sep 2016 12:05:41 +0800 Subject: [PATCH 06/15] Fixed DatagridSortableAndFilterable trait filename path --- templates/scaffold/controller/datagrid_use_path.stub | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/scaffold/controller/datagrid_use_path.stub b/templates/scaffold/controller/datagrid_use_path.stub index fd12ad391..85a0e697d 100644 --- a/templates/scaffold/controller/datagrid_use_path.stub +++ b/templates/scaffold/controller/datagrid_use_path.stub @@ -1 +1 @@ -use InfyOm\Generator\Utils\DatagridSortableAndFilterable; +use InfyOm\Generator\Utils\DatagridSortableAndFilterableUtil as DatagridSortableAndFilterable; From 36c712df47991fc0679fe3834986383238570b74 Mon Sep 17 00:00:00 2001 From: Shem Pasamba Date: Sun, 18 Sep 2016 20:35:34 +0800 Subject: [PATCH 07/15] Add setDefaultOrder method --- .../DatagridSortableAndFilterableUtil.php | 66 +++++++++++-------- 1 file changed, 40 insertions(+), 26 deletions(-) diff --git a/src/Utils/DatagridSortableAndFilterableUtil.php b/src/Utils/DatagridSortableAndFilterableUtil.php index 7e5838909..d440d6c25 100644 --- a/src/Utils/DatagridSortableAndFilterableUtil.php +++ b/src/Utils/DatagridSortableAndFilterableUtil.php @@ -7,34 +7,48 @@ trait DatagridSortableAndFilterableUtil { /** - * Convert datagrid filters to repository filters. - * - * @param Request &$request - */ - private function convertDatagridFilterToRepositoryFilter(Request &$request) - { - if (!isset($request['f'])) { - return; - } + * Convert datagrid filters to repository filters. + * + * @param Request &$request + */ + private function convertDatagridFilterToRepositoryFilter(Request &$request) + { + if (!isset($request['f'])) { + return; + } - $f = $request['f']; + $f = $request['f']; - if (isset($f['order_by']) && !empty($f['order_by']) - && isset($f['order_dir']) && !empty($f['order_dir'])) { - $request['orderBy'] = $f['order_by']; - $request['sortedBy'] = $f['order_dir'] !== 'DESC' ? 'asc' : 'desc'; - } + if (isset($f['order_by']) && !empty($f['order_by']) + && isset($f['order_dir']) && !empty($f['order_dir'])) { + $request['orderBy'] = $f['order_by']; + $request['sortedBy'] = $f['order_dir'] !== 'DESC' ? 'asc' : 'desc'; + } - unset($f['order_by']); - unset($f['order_dir']); - $searches = []; - foreach ($f as $field => $value) { - if ($value == '') { + unset($f['order_by']); + unset($f['order_dir']); + $searches = []; + foreach ($f as $field => $value) { + if ($value == '') { continue; - } - $searches[] = $field.':'.$value; - } - $request['search'] = implode(';', $searches); - $request['searchUseAnd'] = 1; - } + } + $searches[] = $field.':'.$value; + } + $request['search'] = implode(';', $searches); + $request['searchUseAnd'] = 1; + } + + /** + * Set default order by and direction + * + * @param Request $request + */ + private function setDefaultOrder(&$request, $by, $dir = 'ASC') + { + if (!isset($request['f']['order_by']) || + isset($request['f']['order_by']) && $request['f']['order_by'] == '') { + $request['orderBy'] = $by; + $request['sortedBy'] = $dir; + } + } } From 19065cc1e65a49be123497c2971953d3cfa6f48f Mon Sep 17 00:00:00 2001 From: Shem Pasamba Date: Sun, 18 Sep 2016 20:39:18 +0800 Subject: [PATCH 08/15] Style fixes --- src/Utils/DatagridSortableAndFilterableUtil.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Utils/DatagridSortableAndFilterableUtil.php b/src/Utils/DatagridSortableAndFilterableUtil.php index d440d6c25..fb1906715 100644 --- a/src/Utils/DatagridSortableAndFilterableUtil.php +++ b/src/Utils/DatagridSortableAndFilterableUtil.php @@ -21,8 +21,8 @@ private function convertDatagridFilterToRepositoryFilter(Request &$request) if (isset($f['order_by']) && !empty($f['order_by']) && isset($f['order_dir']) && !empty($f['order_dir'])) { - $request['orderBy'] = $f['order_by']; - $request['sortedBy'] = $f['order_dir'] !== 'DESC' ? 'asc' : 'desc'; + $request['orderBy'] = $f['order_by']; + $request['sortedBy'] = $f['order_dir'] !== 'DESC' ? 'asc' : 'desc'; } unset($f['order_by']); @@ -30,7 +30,7 @@ private function convertDatagridFilterToRepositoryFilter(Request &$request) $searches = []; foreach ($f as $field => $value) { if ($value == '') { - continue; + continue; } $searches[] = $field.':'.$value; } @@ -39,7 +39,7 @@ private function convertDatagridFilterToRepositoryFilter(Request &$request) } /** - * Set default order by and direction + * Set default order by and direction. * * @param Request $request */ @@ -47,8 +47,8 @@ private function setDefaultOrder(&$request, $by, $dir = 'ASC') { if (!isset($request['f']['order_by']) || isset($request['f']['order_by']) && $request['f']['order_by'] == '') { - $request['orderBy'] = $by; - $request['sortedBy'] = $dir; + $request['orderBy'] = $by; + $request['sortedBy'] = $dir; } } } From d4628af23956070305afda387f4a5ddc6d7042ac Mon Sep 17 00:00:00 2001 From: Shem Pasamba Date: Sun, 18 Sep 2016 21:36:03 +0800 Subject: [PATCH 09/15] Use ilike instead of like --- src/Generators/RepositoryGenerator.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Generators/RepositoryGenerator.php b/src/Generators/RepositoryGenerator.php index 881f72bbd..cf88eaa16 100755 --- a/src/Generators/RepositoryGenerator.php +++ b/src/Generators/RepositoryGenerator.php @@ -35,7 +35,7 @@ public function generate() if ($field->isSearchable) { $condition = ''; if ($field->fieldType == 'text') { - $condition = " => 'like'"; + $condition = " => 'ilike'"; } $searchables[] = "'".$field->name."'".$condition; } From 28204aadfc6b589ce0fe0f8003fb973027a1eb04 Mon Sep 17 00:00:00 2001 From: Shem Pasamba Date: Mon, 3 Aug 2020 16:30:27 +0800 Subject: [PATCH 10/15] no need to call datagrid as filter & sorting is now built in --- composer.json | 2 +- src/Generators/Scaffold/ControllerGenerator.php | 2 -- templates/scaffold/controller/controller.stub | 5 +---- templates/scaffold/controller/datagrid_call_filter.stub | 1 - 4 files changed, 2 insertions(+), 8 deletions(-) delete mode 100644 templates/scaffold/controller/datagrid_call_filter.stub diff --git a/composer.json b/composer.json index 32d4a1b1b..26e23978c 100644 --- a/composer.json +++ b/composer.json @@ -51,5 +51,5 @@ "\\InfyOm\\Generator\\InfyOmGeneratorServiceProvider" ] } - } + } } diff --git a/src/Generators/Scaffold/ControllerGenerator.php b/src/Generators/Scaffold/ControllerGenerator.php index 2278058e5..8e3fede64 100755 --- a/src/Generators/Scaffold/ControllerGenerator.php +++ b/src/Generators/Scaffold/ControllerGenerator.php @@ -71,11 +71,9 @@ public function generate() $templateData = str_replace('$USE_DATAGRID_PATH$', $use_datagrid_path, $templateData); $templateData = str_replace('$USE_DATAGRID_TRAIT$', $use_datagrid_trait, $templateData); - $templateData = str_replace('$CALL_DATAGRID$', $call_datagrid, $templateData); } else { $templateData = str_replace('$USE_DATAGRID_PATH$', $use_datagrid, $templateData); $templateData = str_replace('$USE_DATAGRID_TRAIT$', '', $templateData); - $templateData = str_replace('$CALL_DATAGRID$', '', $templateData); } } diff --git a/templates/scaffold/controller/controller.stub b/templates/scaffold/controller/controller.stub index fd67ec58b..1f2bc8c54 100755 --- a/templates/scaffold/controller/controller.stub +++ b/templates/scaffold/controller/controller.stub @@ -9,10 +9,9 @@ use $NAMESPACE_APP$\Http\Controllers\AppBaseController; use Illuminate\Http\Request; use Flash; use Response; -$USE_DATAGRID_PATH$ + class $MODEL_NAME$Controller extends AppBaseController { - $USE_DATAGRID_TRAIT$ /** @var $MODEL_NAME$Repository */ private $$MODEL_NAME_CAMEL$Repository; @@ -30,8 +29,6 @@ class $MODEL_NAME$Controller extends AppBaseController */ public function index(Request $request) { - $CALL_DATAGRID$ - $this->$MODEL_NAME_CAMEL$Repository->pushCriteria(new RequestCriteria($request)); $$MODEL_NAME_PLURAL_CAMEL$ = $this->$MODEL_NAME_CAMEL$Repository->$RENDER_TYPE$; return view('$VIEW_PREFIX$$MODEL_NAME_PLURAL_SNAKE$.index') diff --git a/templates/scaffold/controller/datagrid_call_filter.stub b/templates/scaffold/controller/datagrid_call_filter.stub deleted file mode 100644 index fd4039717..000000000 --- a/templates/scaffold/controller/datagrid_call_filter.stub +++ /dev/null @@ -1 +0,0 @@ -$this->convertDatagridFilterToRepositoryFilter($request); From 1bfa4840aa252182838e64c1abd68c1f859994fb Mon Sep 17 00:00:00 2001 From: Shem Pasamba Date: Thu, 20 Aug 2020 10:55:40 +0800 Subject: [PATCH 11/15] add sort. use ilike --- templates/base_repository.stub | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/templates/base_repository.stub b/templates/base_repository.stub index cc17ad673..cfec5c38a 100644 --- a/templates/base_repository.stub +++ b/templates/base_repository.stub @@ -81,20 +81,32 @@ abstract class BaseRepository * @param array $search * @param int|null $skip * @param int|null $limit + * @param array $sort with [['field_name' => 'asc|desc'], ...] * @return \Illuminate\Database\Eloquent\Builder */ - public function allQuery($search = [], $skip = null, $limit = null) + public function allQuery($search = [], $skip = null, $limit = null, $sort = []) { $query = $this->model->newQuery(); if (count($search)) { foreach($search as $key => $value) { - if (in_array($key, $this->getFieldsSearchable())) { - $query->where($key, $value); + if (in_array($key, array_keys($this->getFieldsSearchable()))) { + $search_type = $this->getFieldsSearchable()[$key]; + if (preg_match('/like/i', $search_type)) + $value = '%'.$value.'%'; + $query->where($key, $this->getFieldsSearchable()[$key], $value); } } } + if (count($sort)) + { + foreach($sort as $field => $sort) + { + $query->orderBy($field, $sort); + } + } + if (!is_null($skip)) { $query->skip($skip); } @@ -113,12 +125,13 @@ abstract class BaseRepository * @param int|null $skip * @param int|null $limit * @param array $columns + * @param array $sort with [['field_name' => 'asc|desc'], ...] * * @return \Illuminate\Contracts\Pagination\LengthAwarePaginator|\Illuminate\Database\Eloquent\Builder[]|\Illuminate\Database\Eloquent\Collection */ - public function all($search = [], $skip = null, $limit = null, $columns = ['*']) + public function all($search = [], $skip = null, $limit = null, $columns = ['*'], $sort = []) { - $query = $this->allQuery($search, $skip, $limit); + $query = $this->allQuery($search, $skip, $limit, $sort); return $query->get($columns); } From f611fc48c44c337a2d53b3d7a81011a7ff25c954 Mon Sep 17 00:00:00 2001 From: Shem Pasamba Date: Tue, 1 Sep 2020 16:38:42 +0800 Subject: [PATCH 12/15] Add microseconds to timestamp --- config/laravel_generator.php | 1 + 1 file changed, 1 insertion(+) diff --git a/config/laravel_generator.php b/config/laravel_generator.php index 7c656c250..c958e378e 100755 --- a/config/laravel_generator.php +++ b/config/laravel_generator.php @@ -101,6 +101,7 @@ */ 'model_extend_class' => 'Eloquent', + 'model_default_date_format' => 'Y-m-d H:i:s.uP', /* |-------------------------------------------------------------------------- From abd7cc2c434328f6414da3e818ce8b088a23b734 Mon Sep 17 00:00:00 2001 From: Shem Pasamba Date: Wed, 2 Sep 2020 11:17:40 +0800 Subject: [PATCH 13/15] Use ilike always --- templates/base_repository.stub | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/templates/base_repository.stub b/templates/base_repository.stub index cfec5c38a..12c9e5f71 100644 --- a/templates/base_repository.stub +++ b/templates/base_repository.stub @@ -90,11 +90,10 @@ abstract class BaseRepository if (count($search)) { foreach($search as $key => $value) { - if (in_array($key, array_keys($this->getFieldsSearchable()))) { - $search_type = $this->getFieldsSearchable()[$key]; - if (preg_match('/like/i', $search_type)) - $value = '%'.$value.'%'; - $query->where($key, $this->getFieldsSearchable()[$key], $value); + if (in_array($key, $this->getFieldsSearchable())) { + $values = array_unique(array_filter(array_map('trim', explode(" ", $value)))); + foreach($values as $value) + $query->where($key, 'ilike', '%'.$value.'%'); } } } From b5e54573192d6dd4dcb56d91db0ea00c623923c3 Mon Sep 17 00:00:00 2001 From: Shem Pasamba Date: Mon, 16 Nov 2020 14:33:51 +0800 Subject: [PATCH 14/15] Update composer.json make it usable in 6.0 too --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 26e23978c..611263f19 100644 --- a/composer.json +++ b/composer.json @@ -25,7 +25,7 @@ ], "require": { "php": "^7.2.5", - "illuminate/support": "^7.0", + "illuminate/support": "^7.0 || ^6.0", "laracasts/flash": "^3.1" }, "require-dev": { From f3853236d3c5785ac5a1f6e6c43c9de130763cd6 Mon Sep 17 00:00:00 2001 From: Shem Pasamba Date: Mon, 16 Nov 2020 15:11:56 +0800 Subject: [PATCH 15/15] Allow use of moduleName to put generated files into the Module folder --- src/Commands/BaseCommand.php | 1 + src/Commands/RollbackGeneratorCommand.php | 3 +- src/Common/GeneratorConfig.php | 51 ++++++++++++++++++++++- 3 files changed, 53 insertions(+), 2 deletions(-) diff --git a/src/Commands/BaseCommand.php b/src/Commands/BaseCommand.php index 8ecbc33bd..51a7504b6 100755 --- a/src/Commands/BaseCommand.php +++ b/src/Commands/BaseCommand.php @@ -303,6 +303,7 @@ public function getOptions() ['localized', null, InputOption::VALUE_NONE, 'Localize files.'], ['repositoryPattern', null, InputOption::VALUE_REQUIRED, 'Repository Pattern'], ['connection', null, InputOption::VALUE_REQUIRED, 'Specify connection name'], + ['moduleName', null, InputOption::VALUE_REQUIRED, 'Generate files to this module & namespace (eg. Admin)'], ]; } diff --git a/src/Commands/RollbackGeneratorCommand.php b/src/Commands/RollbackGeneratorCommand.php index 11a462831..04768d7c5 100755 --- a/src/Commands/RollbackGeneratorCommand.php +++ b/src/Commands/RollbackGeneratorCommand.php @@ -75,7 +75,7 @@ public function handle() $this->commandData = new CommandData($this, $this->argument('type')); $this->commandData->config->mName = $this->commandData->modelName = $this->argument('model'); - $this->commandData->config->init($this->commandData, ['tableName', 'prefix', 'plural', 'views']); + $this->commandData->config->init($this->commandData, ['tableName', 'prefix', 'plural', 'views', 'moduleName']); $views = $this->commandData->getOption('views'); if (!empty($views)) { @@ -151,6 +151,7 @@ public function getOptions() ['prefix', null, InputOption::VALUE_REQUIRED, 'Prefix for all files'], ['plural', null, InputOption::VALUE_REQUIRED, 'Plural Model name'], ['views', null, InputOption::VALUE_REQUIRED, 'Views to rollback'], + ['moduleName', null, InputOption::VALUE_REQUIRED, 'Generate files to this module & namespace (eg. Admin)'], ]; } diff --git a/src/Common/GeneratorConfig.php b/src/Common/GeneratorConfig.php index 4bbdc305b..676e7c5ae 100755 --- a/src/Common/GeneratorConfig.php +++ b/src/Common/GeneratorConfig.php @@ -95,6 +95,7 @@ class GeneratorConfig 'repositoryPattern', 'localized', 'connection', + 'moduleName', ]; public $tableName; @@ -395,10 +396,58 @@ public function prepareOptions(CommandData &$commandData) if (!empty($this->options['datagrid'])) { if (isset($this->options['datatables']) && $this->options['datatables'] === 'true' && $this->options['datatables']) { - $commandData->commandError('can\'t use datagrid and datables at the same time.'); + $commandData->commandError('Can\'t use datagrid and datables at the same time.'); exit; } } + if (!empty($this->options['moduleName'])) { + if (!file_exists(config_path('modules.php'))) { + $commandData->commandError('Can\'t use modules since config doesn\'t exist in '.config_path('modules.php').'.'); + exit; + } + // change folder locations + $this->modules_path = config('modules.paths.modules', base_path('Modules')).'/'.$this->options['moduleName']; + $config_paths = config('infyom.laravel_generator.path'); + $new_config_paths = []; + foreach($config_paths as $key => $path) { + if (preg_match('/migrations/', $path)) + $path = str_replace('migrations', 'Migrations', $path); + if (strpos($path, app_path()) === 0) { + $new_config_paths[$key] = str_replace(app_path(), $this->modules_path, $path); + } else { + $new_config_paths[$key] = str_replace(base_path(), $this->modules_path, $path); + } + $new_config_paths[$key][strlen($this->modules_path)+1] = strtoupper($new_config_paths[$key][strlen($this->modules_path)+1]); + } + config(['infyom.laravel_generator.path' => $new_config_paths]); + + // change namespace + $this->module_namespace = config('modules.namespace', 'Modules').'\\'.$this->options['moduleName'].'\\'; + $config_namespaces = config('infyom.laravel_generator.namespace'); + $new_config_namespaces = []; + foreach($config_namespaces as $key => $namespace) + { + if (strpos($namespace, 'App\\') === 0) + $namespace = str_replace('App\\', '', $namespace); + $new_config_namespaces[$key] = $this->module_namespace.$namespace; + } + config(['infyom.laravel_generator.namespace' => $new_config_namespaces]); + + // change prefix + $viewPrefix = isset($this->prefixes['view'])?$this->prefixes['view']:null; + config(['infyom.laravel_generator.prefixes.view' => strtolower($this->options['moduleName']).'::']); + $this->prefixes['view'] = config('infyom.laravel_generator.prefixes.view'); + if ($this->getOption('plural')) { + $this->mPlural = $this->getOption('plural'); + } else { + $this->mPlural = Str::plural($this->mName); + } + $this->mSnakePlural = Str::snake($this->mPlural); + $this->pathViews = config( + 'infyom.laravel_generator.path.views', + base_path('resources/views/') + ).$viewPrefix.$this->mSnakePlural.'/'; + } } public function preparePrefixes()