Skip to content

Commit a755960

Browse files
authored
feat: stisla templates support added for laravel 7
1 parent 740b989 commit a755960

File tree

11 files changed

+370
-5
lines changed

11 files changed

+370
-5
lines changed

src/Commands/BaseCommand.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
use InfyOm\Generator\Generators\RepositoryGenerator;
1616
use InfyOm\Generator\Generators\RepositoryTestGenerator;
1717
use InfyOm\Generator\Generators\Scaffold\ControllerGenerator;
18+
use InfyOm\Generator\Generators\Scaffold\JQueryDatatableAssetsGenerator;
1819
use InfyOm\Generator\Generators\Scaffold\MenuGenerator;
1920
use InfyOm\Generator\Generators\Scaffold\RequestGenerator;
2021
use InfyOm\Generator\Generators\Scaffold\RoutesGenerator;
@@ -141,6 +142,11 @@ public function generateScaffoldItems()
141142
$menuGenerator = new MenuGenerator($this->commandData);
142143
$menuGenerator->generate();
143144
}
145+
146+
if ($this->commandData->jqueryDT()) {
147+
$assetsGenerator = new JQueryDatatableAssetsGenerator($this->commandData);
148+
$assetsGenerator->generate();
149+
}
144150
}
145151

146152
public function performPostActions($runMigration = false)
@@ -302,6 +308,7 @@ public function getOptions()
302308
['localized', null, InputOption::VALUE_NONE, 'Localize files.'],
303309
['repositoryPattern', null, InputOption::VALUE_REQUIRED, 'Repository Pattern'],
304310
['connection', null, InputOption::VALUE_REQUIRED, 'Specify connection name'],
311+
['jqueryDT', null, InputOption::VALUE_NONE, 'Generate listing screen into JQuery Datatables'],
305312
];
306313
}
307314

src/Common/CommandData.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,11 @@ public function addDynamicVariable($name, $val)
124124
{
125125
$this->dynamicVars[$name] = $val;
126126
}
127+
128+
public function jqueryDT()
129+
{
130+
return $this->getOption('jqueryDT') ? true : false;
131+
}
127132

128133
public function getFields()
129134
{

src/Common/GeneratorConfig.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ class GeneratorConfig
4444
public $pathRequest;
4545
public $pathRoutes;
4646
public $pathViews;
47+
public $pathAssets;
4748
public $modelJsPath;
4849

4950
/* Model Names */
@@ -94,6 +95,7 @@ class GeneratorConfig
9495
'repositoryPattern',
9596
'localized',
9697
'connection',
98+
'jqueryDT',
9799
];
98100

99101
public $tableName;
@@ -215,6 +217,11 @@ public function loadPaths()
215217
'infyom.laravel_generator.path.views',
216218
resource_path('views/')
217219
).$viewPrefix.$this->mSnakePlural.'/';
220+
221+
$this->pathAssets = config(
222+
'infyom.laravel_generator.path.assets',
223+
resource_path('assets/')
224+
);
218225

219226
$this->pathSeeder = config('infyom.laravel_generator.path.seeder', database_path('seeds/'));
220227
$this->pathDatabaseSeeder = config('infyom.laravel_generator.path.database_seeder', database_path('seeds/DatabaseSeeder.php'));

src/Generators/Scaffold/ControllerGenerator.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,11 @@ public function generate()
4343

4444
$templateData = get_template("scaffold.controller.$templateName", 'laravel-generator');
4545

46+
$this->generateDataTable();
47+
} else if ($this->commandData->jqueryDT()) {
48+
$templateName = 'jquery_datatable_controller';
49+
$templateData = get_template("scaffold.controller.$templateName", 'laravel-generator');
50+
4651
$this->generateDataTable();
4752
} else {
4853
if ($this->commandData->getOption('repositoryPattern')) {
@@ -75,7 +80,7 @@ public function generate()
7580

7681
private function generateDataTable()
7782
{
78-
$templateName = 'datatable';
83+
$templateName = ($this->commandData->jqueryDT()) ? 'jquery_datatable' : 'datatable';
7984
if ($this->commandData->isLocalizedTemplates()) {
8085
$templateName .= '_locale';
8186
}
@@ -99,7 +104,7 @@ private function generateDataTable()
99104
$this->commandData->commandComment("\nDataTable created: ");
100105
$this->commandData->commandInfo($fileName);
101106
}
102-
107+
103108
private function generateDataTableColumns()
104109
{
105110
$templateName = 'datatable_column';
Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
<?php
2+
3+
namespace InfyOm\Generator\Generators\Scaffold;
4+
5+
use InfyOm\Generator\Common\CommandData;
6+
use InfyOm\Generator\Generators\BaseGenerator;
7+
use InfyOm\Generator\Utils\FileUtil;
8+
9+
/**
10+
* Class JQueryDatatableAssetsGenerator.
11+
*/
12+
class JQueryDatatableAssetsGenerator extends BaseGenerator
13+
{
14+
/** @var CommandData */
15+
private $commandData;
16+
17+
/** @var string */
18+
private $path;
19+
20+
/** @var string */
21+
private $fileName;
22+
23+
private $config;
24+
25+
public function __construct(CommandData $commandData)
26+
{
27+
$this->commandData = $commandData;
28+
$this->path = $commandData->config->pathAssets.'js/';
29+
$this->config = $this->commandData->config;
30+
$this->fileName = $this->config->tableName.'.js';
31+
}
32+
33+
public function generate()
34+
{
35+
$this->generateJquery();
36+
}
37+
38+
public function generateJquery()
39+
{
40+
$templateName = 'jquery';
41+
42+
if ($this->commandData->isLocalizedTemplates()) {
43+
$templateName .= '_locale';
44+
}
45+
46+
$columnsCount = 0;
47+
48+
$fields = '';
49+
foreach ($this->commandData->fields as $field) {
50+
if (in_array($field->name, ['id', 'created_at', 'updated_at', 'deleted_at'])) {
51+
continue;
52+
}
53+
54+
$fields .= "{
55+
data: '$field->name',
56+
name: '$field->name'
57+
},";
58+
59+
$columnsCount++;
60+
}
61+
62+
// Publish Datatable JS file
63+
$templateData = get_template('scaffold.'.$templateName, 'laravel-generator');
64+
$templateData = fill_template($this->commandData->dynamicVars, $templateData);
65+
$templateData = str_replace('$ACTION_COLUMN_COUNT$', $columnsCount, $templateData);
66+
$templateData = str_replace('$JQUERY_FIELDS$', $fields, $templateData);
67+
68+
$path = $this->path.$this->config->tableName.'/';
69+
if (! file_exists($path)) {
70+
FileUtil::createDirectoryIfNotExist($path);
71+
}
72+
file_put_contents($path.$this->fileName, $templateData);
73+
$this->commandData->commandComment("\n".$this->config->tableName.' assets added.');
74+
75+
// Publish JS Rendere Template
76+
$templateName = 'js_renderer_template';
77+
$templateData = get_template('scaffold.'.$templateName, 'laravel-generator');
78+
$templateData = fill_template($this->commandData->dynamicVars, $templateData);
79+
80+
$path = $this->config->pathViews.'templates/';
81+
if (! file_exists($path)) {
82+
FileUtil::createDirectoryIfNotExist($path);
83+
}
84+
85+
file_put_contents($path.'templates.php', $templateData);
86+
$this->commandData->commandComment("\n".'JS Render Templates added.');
87+
88+
// Publish Webpack mix lines
89+
$webpackMixContents = file_get_contents(base_path('webpack.mix.js'));
90+
$templateName = 'webpack_mix_js';
91+
$templateData = get_template('scaffold.'.$templateName, 'laravel-generator');
92+
$templateData = fill_template($this->commandData->dynamicVars, $templateData);
93+
$webpackMixContents .= "\n\n".$templateData;
94+
95+
file_put_contents(base_path('webpack.mix.js'), $webpackMixContents);
96+
$this->commandData->commandComment("\n".$this->commandData->config->mCamelPlural.' webpack.mix.js updated.');
97+
}
98+
}

src/Generators/Scaffold/ViewGenerator.php

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ class ViewGenerator extends BaseGenerator
2323

2424
/** @var array */
2525
private $htmlFields;
26-
26+
2727
public function __construct(CommandData $commandData)
2828
{
2929
$this->commandData = $commandData;
@@ -122,6 +122,12 @@ private function generateDataTableActions()
122122
private function generateBladeTableBody()
123123
{
124124
$templateName = 'blade_table_body';
125+
126+
$tableFields = $this->generateTableHeaderFields();
127+
if ($this->commandData->jqueryDT()) {
128+
$templateName = 'js_table';
129+
$tableFields = $this->generateJSTableHeaderFields();
130+
}
125131

126132
if ($this->commandData->isLocalizedTemplates()) {
127133
$templateName .= '_locale';
@@ -131,7 +137,7 @@ private function generateBladeTableBody()
131137

132138
$templateData = fill_template($this->commandData->dynamicVars, $templateData);
133139

134-
$templateData = str_replace('$FIELD_HEADERS$', $this->generateTableHeaderFields(), $templateData);
140+
$templateData = str_replace('$FIELD_HEADERS$', $tableFields, $templateData);
135141

136142
$cellFieldTemplate = get_template('scaffold.views.table_cell', $this->templateType);
137143

@@ -154,6 +160,20 @@ private function generateBladeTableBody()
154160

155161
return str_replace('$FIELD_BODY$', $tableBodyFields, $templateData);
156162
}
163+
164+
private function generateJSTableHeaderFields()
165+
{
166+
$fields = '';
167+
foreach ($this->commandData->fields as $field) {
168+
if (in_array($field->name, ['id', 'created_at', 'updated_at', 'deleted_at'])) {
169+
continue;
170+
}
171+
172+
$fields .= '<th scope="col">'.str_replace("'", "", $field->name).'</th>';
173+
}
174+
175+
return $fields;
176+
}
157177

158178
private function generateTableHeaderFields()
159179
{
@@ -207,7 +227,7 @@ private function generateTableHeaderFields()
207227

208228
private function generateIndex()
209229
{
210-
$templateName = 'index';
230+
$templateName = ($this->commandData->jqueryDT()) ? 'js_index' : 'index';
211231

212232
if ($this->commandData->isLocalizedTemplates()) {
213233
$templateName .= '_locale';

0 commit comments

Comments
 (0)