From e428f962464b8e5cd462fc0de2b10d9a87167ff0 Mon Sep 17 00:00:00 2001 From: oncalldeveloper Date: Sat, 5 Jan 2019 01:07:28 +0700 Subject: [PATCH 01/24] Adding a CRUD Generator to the admin options --- app/Http/Controllers/CrudController.php | 143 +++++++++++++++ composer.json | 2 +- config/crudgenerator.php | 70 ++++++++ .../views/html/create.blade.stub | 36 ++++ .../crud-generator/views/html/edit.blade.stub | 37 ++++ .../form-fields/checkbox-field.blade.stub | 6 + .../html/form-fields/form-field.blade.stub | 1 + .../html/form-fields/input-field.blade.stub | 1 + .../form-fields/password-field.blade.stub | 1 + .../html/form-fields/radio-field.blade.stub | 6 + .../html/form-fields/select-field.blade.stub | 5 + .../form-fields/textarea-field.blade.stub | 1 + .../html/form-fields/wrap-field.blade.stub | 5 + .../crud-generator/views/html/form.blade.stub | 7 + .../views/html/index.blade.stub | 63 +++++++ .../crud-generator/views/html/show.blade.stub | 40 +++++ .../views/laravelcollective/create.blade.stub | 35 ++++ .../views/laravelcollective/edit.blade.stub | 40 +++++ .../form-fields/checkbox-field.blade.stub | 6 + .../form-fields/form-field.blade.stub | 1 + .../form-fields/input-field.blade.stub | 1 + .../form-fields/password-field.blade.stub | 1 + .../form-fields/radio-field.blade.stub | 6 + .../form-fields/select-field.blade.stub | 1 + .../form-fields/textarea-field.blade.stub | 2 + .../form-fields/wrap-field.blade.stub | 5 + .../views/laravelcollective/form.blade.stub | 7 + .../views/laravelcollective/index.blade.stub | 69 +++++++ .../views/laravelcollective/show.blade.stub | 46 +++++ resources/lang/en/titles.php | 2 + resources/lang/fr/titles.php | 2 + resources/lang/pt-br/titles.php | 2 + .../views/crudmanagement/add-crud.blade.php | 169 ++++++++++++++++++ resources/views/partials/nav.blade.php | 4 + resources/views/scripts/summernote.blade.php | 20 +++ 35 files changed, 842 insertions(+), 1 deletion(-) create mode 100644 app/Http/Controllers/CrudController.php create mode 100644 config/crudgenerator.php create mode 100644 resources/crud-generator/views/html/create.blade.stub create mode 100644 resources/crud-generator/views/html/edit.blade.stub create mode 100644 resources/crud-generator/views/html/form-fields/checkbox-field.blade.stub create mode 100644 resources/crud-generator/views/html/form-fields/form-field.blade.stub create mode 100644 resources/crud-generator/views/html/form-fields/input-field.blade.stub create mode 100644 resources/crud-generator/views/html/form-fields/password-field.blade.stub create mode 100644 resources/crud-generator/views/html/form-fields/radio-field.blade.stub create mode 100644 resources/crud-generator/views/html/form-fields/select-field.blade.stub create mode 100644 resources/crud-generator/views/html/form-fields/textarea-field.blade.stub create mode 100644 resources/crud-generator/views/html/form-fields/wrap-field.blade.stub create mode 100644 resources/crud-generator/views/html/form.blade.stub create mode 100644 resources/crud-generator/views/html/index.blade.stub create mode 100644 resources/crud-generator/views/html/show.blade.stub create mode 100644 resources/crud-generator/views/laravelcollective/create.blade.stub create mode 100644 resources/crud-generator/views/laravelcollective/edit.blade.stub create mode 100644 resources/crud-generator/views/laravelcollective/form-fields/checkbox-field.blade.stub create mode 100644 resources/crud-generator/views/laravelcollective/form-fields/form-field.blade.stub create mode 100644 resources/crud-generator/views/laravelcollective/form-fields/input-field.blade.stub create mode 100644 resources/crud-generator/views/laravelcollective/form-fields/password-field.blade.stub create mode 100644 resources/crud-generator/views/laravelcollective/form-fields/radio-field.blade.stub create mode 100644 resources/crud-generator/views/laravelcollective/form-fields/select-field.blade.stub create mode 100644 resources/crud-generator/views/laravelcollective/form-fields/textarea-field.blade.stub create mode 100644 resources/crud-generator/views/laravelcollective/form-fields/wrap-field.blade.stub create mode 100644 resources/crud-generator/views/laravelcollective/form.blade.stub create mode 100644 resources/crud-generator/views/laravelcollective/index.blade.stub create mode 100644 resources/crud-generator/views/laravelcollective/show.blade.stub create mode 100644 resources/views/crudmanagement/add-crud.blade.php create mode 100644 resources/views/scripts/summernote.blade.php diff --git a/app/Http/Controllers/CrudController.php b/app/Http/Controllers/CrudController.php new file mode 100644 index 000000000..3bd865cf5 --- /dev/null +++ b/app/Http/Controllers/CrudController.php @@ -0,0 +1,143 @@ +crud_name; + + + /** + * Make sure we do not already have this module + */ + $directories = glob(base_path() . '/resources/views/*' , GLOB_ONLYDIR); + foreach( $directories as $dir ){ + $this_name = str_replace(base_path() . '/resources/views/','',$dir); + $used_names[] = $this_name; + } + //dd($request->crud_name); + + if(in_array(strtolower($request->crud_name),$used_names)){ + return Redirect::back()->withErrors(['Name Exists or Restricted']); + } + + + + + + if ($request->has('fields')) { + $fieldsArray = []; + $validationsArray = []; + $x = 0; + foreach ($request->fields as $field) { + if ($request->fields_required[$x] == 1) { + $validationsArray[] = $field; + } + + $fieldsArray[] = $field . '#' . $request->fields_type[$x]; + + $x++; + } + + $commandArg['--fields'] = implode(";", $fieldsArray); + } + + if (!empty($validationsArray)) { + $commandArg['--validations'] = implode("#required;", $validationsArray) . "#required"; + } + + if ($request->has('route')) { + $commandArg['--route'] = $request->route; + } + + if ($request->has('view_path')) { + $commandArg['--view-path'] = $request->view_path; + } + + if ($request->has('controller_namespace')) { + $commandArg['--controller-namespace'] = $request->controller_namespace; + } + + if ($request->has('model_namespace')) { + $commandArg['--model-namespace'] = $request->model_namespace; + } + + if ($request->has('route_group')) { + $commandArg['--route-group'] = $request->route_group; + } + + if ($request->has('relationships')) { + $commandArg['--relationships'] = $request->relationships; + } + + if ($request->has('form_helper')) { + $commandArg['--form-helper'] = $request->form_helper; + } + + if ($request->has('soft_deletes')) { + $commandArg['--soft-deletes'] = $request->soft_deletes; + } + + try { + Artisan::call('crud:generate', $commandArg); + + $menus = json_decode(File::get(base_path('resources/laravel-admin/menus.json'))); + + $name = $commandArg['name']; + $routeName = ($commandArg['--route-group']) ? $commandArg['--route-group'] . '/' . snake_case($name, '-') : snake_case($name, '-'); + + $menus->menus = array_map(function ($menu) use ($name, $routeName) { + if ($menu->section == 'Resources') { + array_push($menu->items, (object) [ + 'title' => $name, + 'url' => '/' . $routeName, + ]); + } + + return $menu; + }, $menus->menus); + + File::put(base_path('resources/laravel-admin/menus.json'), json_encode($menus)); + + Artisan::call('migrate'); + } catch (\Exception $e) { + return Response::make($e->getMessage(), 500); + } + + return redirect('crud')->with('flash_message', 'Your CRUD has been generated. See on the menu.'); + } +} \ No newline at end of file diff --git a/composer.json b/composer.json index 1649e65b2..f937c1247 100755 --- a/composer.json +++ b/composer.json @@ -6,7 +6,6 @@ "type": "project", "require": { "php": "^7.1.3", - "barryvdh/laravel-debugbar": "^3.0", "creativeorange/gravatar": "~1.0", "doctrine/dbal": "^2.5", "fideloper/proxy": "^4.0", @@ -33,6 +32,7 @@ "socialiteproviders/youtube": "^3.0" }, "require-dev": { + "barryvdh/laravel-debugbar": "^3.0", "filp/whoops": "^2.0", "fzaninotto/faker": "^1.4", "mockery/mockery": "^1.0", diff --git a/config/crudgenerator.php b/config/crudgenerator.php new file mode 100644 index 000000000..2c0b9b9b2 --- /dev/null +++ b/config/crudgenerator.php @@ -0,0 +1,70 @@ + true, + + /* + |-------------------------------------------------------------------------- + | Crud Generator Template Stubs Storage Path + |-------------------------------------------------------------------------- + | + | Here you can specify your custom template path for the generator. + | + */ + + 'path' => base_path('resources/crud-generator/'), + + /** + * Columns number to show in view's table. + */ + 'view_columns_number' => 3, + + /** + * Delimiter for template vars + */ + 'custom_delimiter' => ['%%', '%%'], + + /* + |-------------------------------------------------------------------------- + | Dynamic templating + |-------------------------------------------------------------------------- + | + | Here you can specify your customs templates for the generator. + | You can set new templates or delete some templates if you do not want them. + | You can also choose which values are passed to the views and you can specify a custom delimiter for all templates + | + | Those values are available : + | + | formFields + | formFieldsHtml + | varName + | crudName + | crudNameCap + | crudNameSingular + | primaryKey + | modelName + | modelNameCap + | viewName + | routePrefix + | routePrefixCap + | routeGroup + | formHeadingHtml + | formBodyHtml + | + | + */ + 'dynamic_view_template' => [ + 'index' => ['formHeadingHtml', 'formBodyHtml', 'crudName', 'crudNameCap', 'modelName', 'viewName', 'routeGroup', 'primaryKey'], + 'form' => ['formFieldsHtml'], + 'create' => ['crudName', 'crudNameCap', 'modelName', 'modelNameCap', 'viewName', 'routeGroup', 'viewTemplateDir'], + 'edit' => ['crudName', 'crudNameSingular', 'crudNameCap', 'modelNameCap', 'modelName', 'viewName', 'routeGroup', 'primaryKey', 'viewTemplateDir'], + 'show' => ['formHeadingHtml', 'formBodyHtml', 'formBodyHtmlForShowView', 'crudName', 'crudNameSingular', 'crudNameCap', 'modelName', 'viewName', 'routeGroup', 'primaryKey'], + /* + * Add new stubs templates here if you need to, like action, datatable... + * custom_template needs to be activated for this to work + */ + ] + + +]; diff --git a/resources/crud-generator/views/html/create.blade.stub b/resources/crud-generator/views/html/create.blade.stub new file mode 100644 index 000000000..50f8fd902 --- /dev/null +++ b/resources/crud-generator/views/html/create.blade.stub @@ -0,0 +1,36 @@ +@extends('layouts.app') + +@section('content') +
+
+ + +
+
+
Create New %%modelName%%
+
+ +
+
+ + @if ($errors->any()) +
    + @foreach ($errors->all() as $error) +
  • {{ $error }}
  • + @endforeach +
+ @endif + +
+ {{ csrf_field() }} + + @include ('%%viewTemplateDir%%.form', ['formMode' => 'create']) + +
+ +
+
+
+
+
+@endsection diff --git a/resources/crud-generator/views/html/edit.blade.stub b/resources/crud-generator/views/html/edit.blade.stub new file mode 100644 index 000000000..8d161d760 --- /dev/null +++ b/resources/crud-generator/views/html/edit.blade.stub @@ -0,0 +1,37 @@ +@extends('layouts.app') + +@section('content') +
+
+ + +
+
+
Edit %%modelName%% #{{ $%%crudNameSingular%%->%%primaryKey%% }}
+
+ +
+
+ + @if ($errors->any()) +
    + @foreach ($errors->all() as $error) +
  • {{ $error }}
  • + @endforeach +
+ @endif + +
+ {{ method_field('PATCH') }} + {{ csrf_field() }} + + @include ('%%viewTemplateDir%%.form', ['formMode' => 'edit']) + +
+ +
+
+
+
+
+@endsection diff --git a/resources/crud-generator/views/html/form-fields/checkbox-field.blade.stub b/resources/crud-generator/views/html/form-fields/checkbox-field.blade.stub new file mode 100644 index 000000000..e37b0dbda --- /dev/null +++ b/resources/crud-generator/views/html/form-fields/checkbox-field.blade.stub @@ -0,0 +1,6 @@ +
+ +
+
+ +
\ No newline at end of file diff --git a/resources/crud-generator/views/html/form-fields/form-field.blade.stub b/resources/crud-generator/views/html/form-fields/form-field.blade.stub new file mode 100644 index 000000000..996a4518c --- /dev/null +++ b/resources/crud-generator/views/html/form-fields/form-field.blade.stub @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/crud-generator/views/html/form-fields/input-field.blade.stub b/resources/crud-generator/views/html/form-fields/input-field.blade.stub new file mode 100644 index 000000000..996a4518c --- /dev/null +++ b/resources/crud-generator/views/html/form-fields/input-field.blade.stub @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/crud-generator/views/html/form-fields/password-field.blade.stub b/resources/crud-generator/views/html/form-fields/password-field.blade.stub new file mode 100644 index 000000000..f7cb007a2 --- /dev/null +++ b/resources/crud-generator/views/html/form-fields/password-field.blade.stub @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/crud-generator/views/html/form-fields/radio-field.blade.stub b/resources/crud-generator/views/html/form-fields/radio-field.blade.stub new file mode 100644 index 000000000..210e844af --- /dev/null +++ b/resources/crud-generator/views/html/form-fields/radio-field.blade.stub @@ -0,0 +1,6 @@ +
+ +
+
+ +
\ No newline at end of file diff --git a/resources/crud-generator/views/html/form-fields/select-field.blade.stub b/resources/crud-generator/views/html/form-fields/select-field.blade.stub new file mode 100644 index 000000000..560cb2d0e --- /dev/null +++ b/resources/crud-generator/views/html/form-fields/select-field.blade.stub @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/resources/crud-generator/views/html/form-fields/textarea-field.blade.stub b/resources/crud-generator/views/html/form-fields/textarea-field.blade.stub new file mode 100644 index 000000000..b723c33f0 --- /dev/null +++ b/resources/crud-generator/views/html/form-fields/textarea-field.blade.stub @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/crud-generator/views/html/form-fields/wrap-field.blade.stub b/resources/crud-generator/views/html/form-fields/wrap-field.blade.stub new file mode 100644 index 000000000..579d53757 --- /dev/null +++ b/resources/crud-generator/views/html/form-fields/wrap-field.blade.stub @@ -0,0 +1,5 @@ +
+ + %3$s + {!! $errors->first('%1$s', '

:message

') !!} +
diff --git a/resources/crud-generator/views/html/form.blade.stub b/resources/crud-generator/views/html/form.blade.stub new file mode 100644 index 000000000..416360dce --- /dev/null +++ b/resources/crud-generator/views/html/form.blade.stub @@ -0,0 +1,7 @@ +%%formFieldsHtml%% + +
+ +
+ +@include('scripts.summernote') \ No newline at end of file diff --git a/resources/crud-generator/views/html/index.blade.stub b/resources/crud-generator/views/html/index.blade.stub new file mode 100644 index 000000000..0f5d54853 --- /dev/null +++ b/resources/crud-generator/views/html/index.blade.stub @@ -0,0 +1,63 @@ +@extends('layouts.app') + +@section('content') +
+
+ + +
+
+
%%crudNameCap%%
+
+ + Add New + + + + +
+
+
+ + + + %%formHeadingHtml%% + + + + @foreach($%%crudName%% as $item) + + + %%formBodyHtml%% + + + @endforeach + +
#Actions
{{ $loop->iteration }} + + + +
+ {{ method_field('DELETE') }} + {{ csrf_field() }} + +
+
+
{!! $%%crudName%%->appends(['search' => Request::get('search')])->render() !!}
+
+ +
+
+
+
+
+@endsection diff --git a/resources/crud-generator/views/html/show.blade.stub b/resources/crud-generator/views/html/show.blade.stub new file mode 100644 index 000000000..5ed595d22 --- /dev/null +++ b/resources/crud-generator/views/html/show.blade.stub @@ -0,0 +1,40 @@ +@extends('layouts.app') + +@section('content') +
+
+ + +
+
+
%%modelName%% {{ $%%crudNameSingular%%->%%primaryKey%% }}
+
+ + + + +
+ {{ method_field('DELETE') }} + {{ csrf_field() }} + +
+
+
+ +
+ + + + + + %%formBodyHtmlForShowView%% + +
ID{{ $%%crudNameSingular%%->%%primaryKey%% }}
+
+ +
+
+
+
+
+@endsection diff --git a/resources/crud-generator/views/laravelcollective/create.blade.stub b/resources/crud-generator/views/laravelcollective/create.blade.stub new file mode 100644 index 000000000..0ceb0874e --- /dev/null +++ b/resources/crud-generator/views/laravelcollective/create.blade.stub @@ -0,0 +1,35 @@ +@extends('layouts.app') + +@section('content') +
+
+ + +
+
+
Create New %%modelName%%
+
+ +
+
+ + @if ($errors->any()) +
    + @foreach ($errors->all() as $error) +
  • {{ $error }}
  • + @endforeach +
+ @endif + + {!! Form::open(['url' => '/%%routeGroup%%%%viewName%%', 'class' => 'form-horizontal', 'files' => true]) !!} + + @include ('%%viewTemplateDir%%.form', ['formMode' => 'create']) + + {!! Form::close() !!} + +
+
+
+
+
+@endsection diff --git a/resources/crud-generator/views/laravelcollective/edit.blade.stub b/resources/crud-generator/views/laravelcollective/edit.blade.stub new file mode 100644 index 000000000..b8e2ca3e3 --- /dev/null +++ b/resources/crud-generator/views/laravelcollective/edit.blade.stub @@ -0,0 +1,40 @@ +@extends('layouts.app') + +@section('content') +
+
+ + +
+
+
Edit %%modelName%% #{{ $%%crudNameSingular%%->%%primaryKey%% }}
+
+ +
+
+ + @if ($errors->any()) +
    + @foreach ($errors->all() as $error) +
  • {{ $error }}
  • + @endforeach +
+ @endif + + {!! Form::model($%%crudNameSingular%%, [ + 'method' => 'PATCH', + 'url' => ['/%%routeGroup%%%%viewName%%', $%%crudNameSingular%%->%%primaryKey%%], + 'class' => 'form-horizontal', + 'files' => true + ]) !!} + + @include ('%%viewTemplateDir%%.form', ['formMode' => 'edit']) + + {!! Form::close() !!} + +
+
+
+
+
+@endsection diff --git a/resources/crud-generator/views/laravelcollective/form-fields/checkbox-field.blade.stub b/resources/crud-generator/views/laravelcollective/form-fields/checkbox-field.blade.stub new file mode 100644 index 000000000..34393a3cf --- /dev/null +++ b/resources/crud-generator/views/laravelcollective/form-fields/checkbox-field.blade.stub @@ -0,0 +1,6 @@ +
+ +
+
+ +
\ No newline at end of file diff --git a/resources/crud-generator/views/laravelcollective/form-fields/form-field.blade.stub b/resources/crud-generator/views/laravelcollective/form-fields/form-field.blade.stub new file mode 100644 index 000000000..b27eb3d3e --- /dev/null +++ b/resources/crud-generator/views/laravelcollective/form-fields/form-field.blade.stub @@ -0,0 +1 @@ +{!! Form::%%fieldType%%('%%itemName%%', null, ('%%required%%' == 'required') ? ['class' => 'form-control', 'required' => 'required'] : ['class' => 'form-control']) !!} \ No newline at end of file diff --git a/resources/crud-generator/views/laravelcollective/form-fields/input-field.blade.stub b/resources/crud-generator/views/laravelcollective/form-fields/input-field.blade.stub new file mode 100644 index 000000000..da0b6506f --- /dev/null +++ b/resources/crud-generator/views/laravelcollective/form-fields/input-field.blade.stub @@ -0,0 +1 @@ +{!! Form::input('%%fieldType%%', '%%itemName%%', null, ('%%required%%' == 'required') ? ['class' => 'form-control', 'required' => 'required'] : ['class' => 'form-control']) !!} \ No newline at end of file diff --git a/resources/crud-generator/views/laravelcollective/form-fields/password-field.blade.stub b/resources/crud-generator/views/laravelcollective/form-fields/password-field.blade.stub new file mode 100644 index 000000000..48c17bbcf --- /dev/null +++ b/resources/crud-generator/views/laravelcollective/form-fields/password-field.blade.stub @@ -0,0 +1 @@ +{!! Form::password('%%itemName%%', ('%%required%%' == 'required') ? ['class' => 'form-control', 'required' => 'required'] : ['class' => 'form-control']) !!} \ No newline at end of file diff --git a/resources/crud-generator/views/laravelcollective/form-fields/radio-field.blade.stub b/resources/crud-generator/views/laravelcollective/form-fields/radio-field.blade.stub new file mode 100644 index 000000000..63ad5bd21 --- /dev/null +++ b/resources/crud-generator/views/laravelcollective/form-fields/radio-field.blade.stub @@ -0,0 +1,6 @@ +
+ +
+
+ +
\ No newline at end of file diff --git a/resources/crud-generator/views/laravelcollective/form-fields/select-field.blade.stub b/resources/crud-generator/views/laravelcollective/form-fields/select-field.blade.stub new file mode 100644 index 000000000..95bf252eb --- /dev/null +++ b/resources/crud-generator/views/laravelcollective/form-fields/select-field.blade.stub @@ -0,0 +1 @@ +{!! Form::select('%%itemName%%', json_decode('%%options%%', true), null, ('%%required%%' == 'required') ? ['class' => 'form-control', 'required' => 'required'] : ['class' => 'form-control']) !!} \ No newline at end of file diff --git a/resources/crud-generator/views/laravelcollective/form-fields/textarea-field.blade.stub b/resources/crud-generator/views/laravelcollective/form-fields/textarea-field.blade.stub new file mode 100644 index 000000000..bc6ee443b --- /dev/null +++ b/resources/crud-generator/views/laravelcollective/form-fields/textarea-field.blade.stub @@ -0,0 +1,2 @@ +{!! Form::textarea('%%itemName%%', null, ('%%required%%' == 'required') ? ['class' => 'form-control summernote', 'required' => 'required'] : ['class' => 'form-control summernote']) !!} + diff --git a/resources/crud-generator/views/laravelcollective/form-fields/wrap-field.blade.stub b/resources/crud-generator/views/laravelcollective/form-fields/wrap-field.blade.stub new file mode 100644 index 000000000..24ae7914b --- /dev/null +++ b/resources/crud-generator/views/laravelcollective/form-fields/wrap-field.blade.stub @@ -0,0 +1,5 @@ +
+ {!! Form::label('%1$s', %2$s, ['class' => 'control-label']) !!} + %3$s + {!! $errors->first('%1$s', '

:message

') !!} +
diff --git a/resources/crud-generator/views/laravelcollective/form.blade.stub b/resources/crud-generator/views/laravelcollective/form.blade.stub new file mode 100644 index 000000000..ffc4eabdd --- /dev/null +++ b/resources/crud-generator/views/laravelcollective/form.blade.stub @@ -0,0 +1,7 @@ +%%formFieldsHtml%% + +
+ {!! Form::submit($formMode === 'edit' ? 'Update' : 'Create', ['class' => 'btn btn-primary']) !!} +
+ +@include('scripts.summernote') \ No newline at end of file diff --git a/resources/crud-generator/views/laravelcollective/index.blade.stub b/resources/crud-generator/views/laravelcollective/index.blade.stub new file mode 100644 index 000000000..60ec7ff52 --- /dev/null +++ b/resources/crud-generator/views/laravelcollective/index.blade.stub @@ -0,0 +1,69 @@ +@extends('layouts.app') + +@section('content') +
+
+ + +
+
+
%%crudNameCap%%
+
+ + Add New + + + {!! Form::open(['method' => 'GET', 'url' => '/%%routeGroup%%%%viewName%%', 'class' => 'form-inline my-2 my-lg-0 float-right', 'role' => 'search']) !!} +
+ + + + +
+ {!! Form::close() !!} + +
+
+
+ + + + %%formHeadingHtml%% + + + + @foreach($%%crudName%% as $item) + + + %%formBodyHtml%% + + + @endforeach + +
#Actions
{{ $loop->iteration }} + + + {!! Form::open([ + 'method'=>'DELETE', + 'url' => ['/%%routeGroup%%%%viewName%%', $item->%%primaryKey%%], + 'style' => 'display:inline' + ]) !!} + {!! Form::button(' Delete', array( + 'type' => 'submit', + 'class' => 'btn btn-danger btn-sm', + 'title' => 'Delete %%modelName%%', + 'onclick'=>'return confirm("Confirm delete?")' + )) !!} + {!! Form::close() !!} +
+
{!! $%%crudName%%->appends(['search' => Request::get('search')])->render() !!}
+
+ +
+
+
+
+
+@endsection diff --git a/resources/crud-generator/views/laravelcollective/show.blade.stub b/resources/crud-generator/views/laravelcollective/show.blade.stub new file mode 100644 index 000000000..856a6fcce --- /dev/null +++ b/resources/crud-generator/views/laravelcollective/show.blade.stub @@ -0,0 +1,46 @@ +@extends('layouts.app') + +@section('content') +
+
+ + +
+
+
%%modelName%% {{ $%%crudNameSingular%%->%%primaryKey%% }}
+
+ + + + {!! Form::open([ + 'method'=>'DELETE', + 'url' => ['%%routeGroup%%%%crudName%%', $%%crudNameSingular%%->%%primaryKey%%], + 'style' => 'display:inline' + ]) !!} + {!! Form::button(' Delete', array( + 'type' => 'submit', + 'class' => 'btn btn-danger btn-sm', + 'title' => 'Delete %%modelName%%', + 'onclick'=>'return confirm("Confirm delete?")' + ))!!} + {!! Form::close() !!} +
+
+ +
+ + + + + + %%formBodyHtmlForShowView%% + +
ID{{ $%%crudNameSingular%%->%%primaryKey%% }}
+
+ +
+
+
+
+
+@endsection diff --git a/resources/lang/en/titles.php b/resources/lang/en/titles.php index 6842a9ee9..813dad540 100755 --- a/resources/lang/en/titles.php +++ b/resources/lang/en/titles.php @@ -33,4 +33,6 @@ 'adminRoutes' => 'Routing Details', 'activeUsers' => 'Active Users', + + 'adminNewCrud' => 'New CRUD', ]; diff --git a/resources/lang/fr/titles.php b/resources/lang/fr/titles.php index 9f0bad73f..74ecda346 100755 --- a/resources/lang/fr/titles.php +++ b/resources/lang/fr/titles.php @@ -30,4 +30,6 @@ 'adminPHP' => 'Information PHP', 'adminRoutes' => 'Details routage', + 'adminNewCrud' => 'Créer CRUD', + ]; diff --git a/resources/lang/pt-br/titles.php b/resources/lang/pt-br/titles.php index 6475cdf3a..21d4fee7b 100755 --- a/resources/lang/pt-br/titles.php +++ b/resources/lang/pt-br/titles.php @@ -32,4 +32,6 @@ 'adminRoutes' => 'Detalhes das rotas', 'activeUsers' => 'Usuários Ativos.', + + 'adminNewCrud' => 'Criar CRUD', ]; diff --git a/resources/views/crudmanagement/add-crud.blade.php b/resources/views/crudmanagement/add-crud.blade.php new file mode 100644 index 000000000..05b668e3f --- /dev/null +++ b/resources/views/crudmanagement/add-crud.blade.php @@ -0,0 +1,169 @@ + +@extends('layouts.app') + +@section('template_title') + Generate New CRUD {{ Auth::user()->name }} +@endsection + +@section('head') +@endsection + +@section('content') +
+
+ +
+
+
Generator
+
+ + +
+ {{ csrf_field() }} + +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +

method#relationType#Model

+
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+

Table Fields:


+
+ + + + + + + +
+
+

It will automatically assume form fields based on the migration field type.

+
+
+
+ +
+
+
+ +
+
+
+
+
+@endsection + +@section('footer_scripts') + +@endsection diff --git a/resources/views/partials/nav.blade.php b/resources/views/partials/nav.blade.php index 10da8e636..6d8c4b7ee 100755 --- a/resources/views/partials/nav.blade.php +++ b/resources/views/partials/nav.blade.php @@ -48,6 +48,10 @@ {!! trans('titles.activeUsers') !!} + + + {!! trans('titles.adminNewCrud') !!} + @endrole diff --git a/resources/views/scripts/summernote.blade.php b/resources/views/scripts/summernote.blade.php new file mode 100644 index 000000000..b7a7efe29 --- /dev/null +++ b/resources/views/scripts/summernote.blade.php @@ -0,0 +1,20 @@ + +@section('footer_scripts') + + + + + + +@endsection + From de57c248cd42f2d1d935e8f4487c9f0bc1bbb988 Mon Sep 17 00:00:00 2001 From: oncalldeveloper Date: Sat, 5 Jan 2019 01:28:28 +0700 Subject: [PATCH 02/24] Adding a CRUD Generator to the admin options, Fixed Code Style Issues --- app/Http/Controllers/CrudController.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/app/Http/Controllers/CrudController.php b/app/Http/Controllers/CrudController.php index 3bd865cf5..64523051a 100644 --- a/app/Http/Controllers/CrudController.php +++ b/app/Http/Controllers/CrudController.php @@ -14,7 +14,7 @@ use Illuminate\Http\Request; use Response; use View; -Use Redirect; +use Redirect; class CrudController extends Controller { @@ -44,14 +44,14 @@ public function postGenerator(Request $request) /** * Make sure we do not already have this module */ - $directories = glob(base_path() . '/resources/views/*' , GLOB_ONLYDIR); - foreach( $directories as $dir ){ + $directories = glob(base_path() . '/resources/views/*', GLOB_ONLYDIR); + foreach ( $directories as $dir ){ $this_name = str_replace(base_path() . '/resources/views/','',$dir); $used_names[] = $this_name; } //dd($request->crud_name); - if(in_array(strtolower($request->crud_name),$used_names)){ + if (in_array(strtolower($request->crud_name), $used_names)){ return Redirect::back()->withErrors(['Name Exists or Restricted']); } @@ -140,4 +140,4 @@ public function postGenerator(Request $request) return redirect('crud')->with('flash_message', 'Your CRUD has been generated. See on the menu.'); } -} \ No newline at end of file +} From e67c1a649cd17d11c7d2a69508ca72fb02f2151b Mon Sep 17 00:00:00 2001 From: oncalldeveloper Date: Sat, 5 Jan 2019 01:28:28 +0700 Subject: [PATCH 03/24] Adding a CRUD Generator to the admin options, Fixed Code Style Issues --- app/Http/Controllers/CrudController.php | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/app/Http/Controllers/CrudController.php b/app/Http/Controllers/CrudController.php index 3bd865cf5..62d17b7b2 100644 --- a/app/Http/Controllers/CrudController.php +++ b/app/Http/Controllers/CrudController.php @@ -1,11 +1,4 @@ crud_name); - if(in_array(strtolower($request->crud_name),$used_names)){ + if (in_array(strtolower($request->crud_name), $used_names)){ return Redirect::back()->withErrors(['Name Exists or Restricted']); } @@ -140,4 +133,4 @@ public function postGenerator(Request $request) return redirect('crud')->with('flash_message', 'Your CRUD has been generated. See on the menu.'); } -} \ No newline at end of file +} From fdce64fd58eb79cbec3fde8362157b70e17788d0 Mon Sep 17 00:00:00 2001 From: oncalldeveloper Date: Sat, 5 Jan 2019 01:44:41 +0700 Subject: [PATCH 04/24] Adding a CRUD Generator to the admin options, Fixed Code Style Issues --- app/Http/Controllers/CrudController.php | 25 +++++++++---------------- 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/app/Http/Controllers/CrudController.php b/app/Http/Controllers/CrudController.php index 5d546b60b..b842d9b52 100644 --- a/app/Http/Controllers/CrudController.php +++ b/app/Http/Controllers/CrudController.php @@ -34,24 +34,17 @@ public function postGenerator(Request $request) $commandArg['name'] = $request->crud_name; - /** - * Make sure we do not already have this module - */ - $directories = glob(base_path() . '/resources/views/*', GLOB_ONLYDIR); - foreach ( $directories as $dir ){ + // Make sure we do not already have this module + $directories = glob(base_path().'/resources/views/*', GLOB_ONLYDIR); + foreach ($directories as $dir){ $this_name = str_replace(base_path() . '/resources/views/','',$dir); $used_names[] = $this_name; } - //dd($request->crud_name); - if (in_array(strtolower($request->crud_name), $used_names)){ + if (in_array(strtolower($request->crud_name), $used_names)) { return Redirect::back()->withErrors(['Name Exists or Restricted']); } - - - - if ($request->has('fields')) { $fieldsArray = []; $validationsArray = []; @@ -61,16 +54,16 @@ public function postGenerator(Request $request) $validationsArray[] = $field; } - $fieldsArray[] = $field . '#' . $request->fields_type[$x]; + $fieldsArray[] = $field.'#'.$request->fields_type[$x]; $x++; } - $commandArg['--fields'] = implode(";", $fieldsArray); + $commandArg['--fields'] = implode(';', $fieldsArray); } if (!empty($validationsArray)) { - $commandArg['--validations'] = implode("#required;", $validationsArray) . "#required"; + $commandArg['--validations'] = implode('#required;', $validationsArray) . '#required'; } if ($request->has('route')) { @@ -111,13 +104,13 @@ public function postGenerator(Request $request) $menus = json_decode(File::get(base_path('resources/laravel-admin/menus.json'))); $name = $commandArg['name']; - $routeName = ($commandArg['--route-group']) ? $commandArg['--route-group'] . '/' . snake_case($name, '-') : snake_case($name, '-'); + $routeName = ($commandArg['--route-group']) ? $commandArg['--route-group'].'/'.snake_case($name, '-') : snake_case($name, '-'); $menus->menus = array_map(function ($menu) use ($name, $routeName) { if ($menu->section == 'Resources') { array_push($menu->items, (object) [ 'title' => $name, - 'url' => '/' . $routeName, + 'url' => '/'.$routeName, ]); } From 0d0e3a6873910790975c80e121733020bb2eab88 Mon Sep 17 00:00:00 2001 From: oncalldeveloper Date: Sat, 5 Jan 2019 01:47:07 +0700 Subject: [PATCH 05/24] Adding a CRUD Generator to the admin options, Fixed Code Style Issues --- config/crudgenerator.php | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/config/crudgenerator.php b/config/crudgenerator.php index 2c0b9b9b2..5e182f35e 100644 --- a/config/crudgenerator.php +++ b/config/crudgenerator.php @@ -15,12 +15,12 @@ 'path' => base_path('resources/crud-generator/'), - /** + /* * Columns number to show in view's table. */ 'view_columns_number' => 3, - /** + /* * Delimiter for template vars */ 'custom_delimiter' => ['%%', '%%'], @@ -55,11 +55,11 @@ | */ 'dynamic_view_template' => [ - 'index' => ['formHeadingHtml', 'formBodyHtml', 'crudName', 'crudNameCap', 'modelName', 'viewName', 'routeGroup', 'primaryKey'], - 'form' => ['formFieldsHtml'], - 'create' => ['crudName', 'crudNameCap', 'modelName', 'modelNameCap', 'viewName', 'routeGroup', 'viewTemplateDir'], - 'edit' => ['crudName', 'crudNameSingular', 'crudNameCap', 'modelNameCap', 'modelName', 'viewName', 'routeGroup', 'primaryKey', 'viewTemplateDir'], - 'show' => ['formHeadingHtml', 'formBodyHtml', 'formBodyHtmlForShowView', 'crudName', 'crudNameSingular', 'crudNameCap', 'modelName', 'viewName', 'routeGroup', 'primaryKey'], + 'index' => ['formHeadingHtml', 'formBodyHtml', 'crudName', 'crudNameCap', 'modelName', 'viewName', 'routeGroup', 'primaryKey'], + 'form' => ['formFieldsHtml'], + 'create' => ['crudName', 'crudNameCap', 'modelName', 'modelNameCap', 'viewName', 'routeGroup', 'viewTemplateDir'], + 'edit' => ['crudName', 'crudNameSingular', 'crudNameCap', 'modelNameCap', 'modelName', 'viewName', 'routeGroup', 'primaryKey', 'viewTemplateDir'], + 'show' => ['formHeadingHtml', 'formBodyHtml', 'formBodyHtmlForShowView', 'crudName', 'crudNameSingular', 'crudNameCap', 'modelName', 'viewName', 'routeGroup', 'primaryKey'], /* * Add new stubs templates here if you need to, like action, datatable... * custom_template needs to be activated for this to work From 7b4e28f91294b2ce14d17bcdd283a6e5258f3687 Mon Sep 17 00:00:00 2001 From: oncalldeveloper Date: Sat, 5 Jan 2019 01:47:07 +0700 Subject: [PATCH 06/24] Adding a CRUD Generator to the admin options, Fixed Code Style Issues --- config/crudgenerator.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/config/crudgenerator.php b/config/crudgenerator.php index 2c0b9b9b2..a5154c031 100644 --- a/config/crudgenerator.php +++ b/config/crudgenerator.php @@ -15,12 +15,12 @@ 'path' => base_path('resources/crud-generator/'), - /** + /* * Columns number to show in view's table. */ 'view_columns_number' => 3, - /** + /* * Delimiter for template vars */ 'custom_delimiter' => ['%%', '%%'], @@ -55,16 +55,16 @@ | */ 'dynamic_view_template' => [ - 'index' => ['formHeadingHtml', 'formBodyHtml', 'crudName', 'crudNameCap', 'modelName', 'viewName', 'routeGroup', 'primaryKey'], - 'form' => ['formFieldsHtml'], - 'create' => ['crudName', 'crudNameCap', 'modelName', 'modelNameCap', 'viewName', 'routeGroup', 'viewTemplateDir'], - 'edit' => ['crudName', 'crudNameSingular', 'crudNameCap', 'modelNameCap', 'modelName', 'viewName', 'routeGroup', 'primaryKey', 'viewTemplateDir'], - 'show' => ['formHeadingHtml', 'formBodyHtml', 'formBodyHtmlForShowView', 'crudName', 'crudNameSingular', 'crudNameCap', 'modelName', 'viewName', 'routeGroup', 'primaryKey'], + 'index' => ['formHeadingHtml', 'formBodyHtml', 'crudName', 'crudNameCap', 'modelName', 'viewName', 'routeGroup', 'primaryKey'], + 'form' => ['formFieldsHtml'], + 'create' => ['crudName', 'crudNameCap', 'modelName', 'modelNameCap', 'viewName', 'routeGroup', 'viewTemplateDir'], + 'edit' => ['crudName', 'crudNameSingular', 'crudNameCap', 'modelNameCap', 'modelName', 'viewName', 'routeGroup', 'primaryKey', 'viewTemplateDir'], + 'show' => ['formHeadingHtml', 'formBodyHtml', 'formBodyHtmlForShowView', 'crudName', 'crudNameSingular', 'crudNameCap', 'modelName', 'viewName', 'routeGroup', 'primaryKey'], /* * Add new stubs templates here if you need to, like action, datatable... * custom_template needs to be activated for this to work */ - ] + ], ]; From a0df875e1ca3a59c4ebab3f5648a1d7ee22ba935 Mon Sep 17 00:00:00 2001 From: oncalldeveloper Date: Sat, 5 Jan 2019 01:51:05 +0700 Subject: [PATCH 07/24] Adding a CRUD Generator to the admin options, Fixed Code Style Issues --- app/Http/Controllers/CrudController.php | 7 ++++--- config/crudgenerator.php | 10 +++++----- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/app/Http/Controllers/CrudController.php b/app/Http/Controllers/CrudController.php index b842d9b52..fd96844e3 100644 --- a/app/Http/Controllers/CrudController.php +++ b/app/Http/Controllers/CrudController.php @@ -5,9 +5,10 @@ use Artisan; use File; use Illuminate\Http\Request; +use Redirect; use Response; use View; -use Redirect; + class CrudController extends Controller { @@ -37,7 +38,7 @@ public function postGenerator(Request $request) // Make sure we do not already have this module $directories = glob(base_path().'/resources/views/*', GLOB_ONLYDIR); foreach ($directories as $dir){ - $this_name = str_replace(base_path() . '/resources/views/','',$dir); + $this_name = str_replace(base_path().'/resources/views/','',$dir); $used_names[] = $this_name; } @@ -63,7 +64,7 @@ public function postGenerator(Request $request) } if (!empty($validationsArray)) { - $commandArg['--validations'] = implode('#required;', $validationsArray) . '#required'; + $commandArg['--validations'] = implode('#required;', $validationsArray).'#required'; } if ($request->has('route')) { diff --git a/config/crudgenerator.php b/config/crudgenerator.php index a5154c031..2c7846b71 100644 --- a/config/crudgenerator.php +++ b/config/crudgenerator.php @@ -55,11 +55,11 @@ | */ 'dynamic_view_template' => [ - 'index' => ['formHeadingHtml', 'formBodyHtml', 'crudName', 'crudNameCap', 'modelName', 'viewName', 'routeGroup', 'primaryKey'], - 'form' => ['formFieldsHtml'], - 'create' => ['crudName', 'crudNameCap', 'modelName', 'modelNameCap', 'viewName', 'routeGroup', 'viewTemplateDir'], - 'edit' => ['crudName', 'crudNameSingular', 'crudNameCap', 'modelNameCap', 'modelName', 'viewName', 'routeGroup', 'primaryKey', 'viewTemplateDir'], - 'show' => ['formHeadingHtml', 'formBodyHtml', 'formBodyHtmlForShowView', 'crudName', 'crudNameSingular', 'crudNameCap', 'modelName', 'viewName', 'routeGroup', 'primaryKey'], + 'index' => ['formHeadingHtml', 'formBodyHtml', 'crudName', 'crudNameCap', 'modelName', 'viewName', 'routeGroup', 'primaryKey'], + 'form' => ['formFieldsHtml'], + 'create' => ['crudName', 'crudNameCap', 'modelName', 'modelNameCap', 'viewName', 'routeGroup', 'viewTemplateDir'], + 'edit' => ['crudName', 'crudNameSingular', 'crudNameCap', 'modelNameCap', 'modelName', 'viewName', 'routeGroup', 'primaryKey', 'viewTemplateDir'], + 'show' => ['formHeadingHtml', 'formBodyHtml', 'formBodyHtmlForShowView', 'crudName', 'crudNameSingular', 'crudNameCap', 'modelName', 'viewName', 'routeGroup', 'primaryKey'], /* * Add new stubs templates here if you need to, like action, datatable... * custom_template needs to be activated for this to work From d833899e3c1be58d3203073dbefc03c411e46325 Mon Sep 17 00:00:00 2001 From: oncalldeveloper Date: Sat, 5 Jan 2019 01:53:39 +0700 Subject: [PATCH 08/24] Adding a CRUD Generator to the admin options, Fixed Code Style Issues --- app/Http/Controllers/CrudController.php | 4 +--- config/crudgenerator.php | 1 - 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/app/Http/Controllers/CrudController.php b/app/Http/Controllers/CrudController.php index fd96844e3..a83432367 100644 --- a/app/Http/Controllers/CrudController.php +++ b/app/Http/Controllers/CrudController.php @@ -9,7 +9,6 @@ use Response; use View; - class CrudController extends Controller { /** @@ -34,11 +33,10 @@ public function postGenerator(Request $request) $commandArg = []; $commandArg['name'] = $request->crud_name; - // Make sure we do not already have this module $directories = glob(base_path().'/resources/views/*', GLOB_ONLYDIR); foreach ($directories as $dir){ - $this_name = str_replace(base_path().'/resources/views/','',$dir); + $this_name = str_replace(base_path().'/resources/views/', '',$dir); $used_names[] = $this_name; } diff --git a/config/crudgenerator.php b/config/crudgenerator.php index 2c7846b71..0afebfea9 100644 --- a/config/crudgenerator.php +++ b/config/crudgenerator.php @@ -66,5 +66,4 @@ */ ], - ]; From e521f27ef8c154f46e6a66f05c2cbda5819e2379 Mon Sep 17 00:00:00 2001 From: oncalldeveloper Date: Sat, 5 Jan 2019 01:55:04 +0700 Subject: [PATCH 09/24] Adding a CRUD Generator to the admin options, Fixed Code Style Issues --- app/Http/Controllers/CrudController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/CrudController.php b/app/Http/Controllers/CrudController.php index a83432367..401a9cd83 100644 --- a/app/Http/Controllers/CrudController.php +++ b/app/Http/Controllers/CrudController.php @@ -36,7 +36,7 @@ public function postGenerator(Request $request) // Make sure we do not already have this module $directories = glob(base_path().'/resources/views/*', GLOB_ONLYDIR); foreach ($directories as $dir){ - $this_name = str_replace(base_path().'/resources/views/', '',$dir); + $this_name = str_replace(base_path().'/resources/views/', '', $dir); $used_names[] = $this_name; } From 58253e13f80b57de3dc5d652d8fa15ceb33cca31 Mon Sep 17 00:00:00 2001 From: oncalldeveloper Date: Sat, 5 Jan 2019 01:56:03 +0700 Subject: [PATCH 10/24] Adding a CRUD Generator to the admin options, Fixed Code Style Issues --- app/Http/Controllers/CrudController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/CrudController.php b/app/Http/Controllers/CrudController.php index 401a9cd83..e5727da95 100644 --- a/app/Http/Controllers/CrudController.php +++ b/app/Http/Controllers/CrudController.php @@ -35,7 +35,7 @@ public function postGenerator(Request $request) // Make sure we do not already have this module $directories = glob(base_path().'/resources/views/*', GLOB_ONLYDIR); - foreach ($directories as $dir){ + foreach ($directories as $dir) { $this_name = str_replace(base_path().'/resources/views/', '', $dir); $used_names[] = $this_name; } From cc24313736002a786cffa3927d58c1393ce0438a Mon Sep 17 00:00:00 2001 From: oncalldeveloper Date: Sat, 5 Jan 2019 02:14:33 +0700 Subject: [PATCH 11/24] Adding a CRUD Generator to the admin options, Fixed Code Style Issues --- app/Http/Controllers/CrudController.php | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/app/Http/Controllers/CrudController.php b/app/Http/Controllers/CrudController.php index e5727da95..58910b2c1 100644 --- a/app/Http/Controllers/CrudController.php +++ b/app/Http/Controllers/CrudController.php @@ -21,12 +21,11 @@ public function getGenerator() return view('crudmanagement.add-crud'); } + /** * Process generator. - * - * @param \Illuminate\Http\Request $request - * - * @return Response + * @param Request $request + * @return mixed */ public function postGenerator(Request $request) { @@ -105,7 +104,7 @@ public function postGenerator(Request $request) $name = $commandArg['name']; $routeName = ($commandArg['--route-group']) ? $commandArg['--route-group'].'/'.snake_case($name, '-') : snake_case($name, '-'); - $menus->menus = array_map(function ($menu) use ($name, $routeName) { + $menus->menus = array_map(function($menu) use ($name, $routeName) { if ($menu->section == 'Resources') { array_push($menu->items, (object) [ 'title' => $name, From 9b50f55c439248bb0ca56d2bbb3fc4edbec12b96 Mon Sep 17 00:00:00 2001 From: oncalldeveloper Date: Sat, 5 Jan 2019 02:16:30 +0700 Subject: [PATCH 12/24] Adding a CRUD Generator to the admin options, Fixed Code Style Issues --- app/Http/Controllers/CrudController.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/CrudController.php b/app/Http/Controllers/CrudController.php index 58910b2c1..de6a4f933 100644 --- a/app/Http/Controllers/CrudController.php +++ b/app/Http/Controllers/CrudController.php @@ -24,7 +24,9 @@ public function getGenerator() /** * Process generator. + * * @param Request $request + * * @return mixed */ public function postGenerator(Request $request) @@ -104,7 +106,7 @@ public function postGenerator(Request $request) $name = $commandArg['name']; $routeName = ($commandArg['--route-group']) ? $commandArg['--route-group'].'/'.snake_case($name, '-') : snake_case($name, '-'); - $menus->menus = array_map(function($menu) use ($name, $routeName) { + $menus->menus = array_map(function ($menu) use ($name, $routeName) { if ($menu->section == 'Resources') { array_push($menu->items, (object) [ 'title' => $name, From c81a1c2e83a997a8fccf9b4bcc03a9a6f62d0e5b Mon Sep 17 00:00:00 2001 From: oncalldeveloper Date: Sat, 5 Jan 2019 02:17:15 +0700 Subject: [PATCH 13/24] Adding a CRUD Generator to the admin options, Fixed Code Style Issues --- app/Http/Controllers/CrudController.php | 1 - 1 file changed, 1 deletion(-) diff --git a/app/Http/Controllers/CrudController.php b/app/Http/Controllers/CrudController.php index de6a4f933..635e8a4bf 100644 --- a/app/Http/Controllers/CrudController.php +++ b/app/Http/Controllers/CrudController.php @@ -21,7 +21,6 @@ public function getGenerator() return view('crudmanagement.add-crud'); } - /** * Process generator. * From 07c24cda43d08e720d23e39ded42c1a7a7966f3b Mon Sep 17 00:00:00 2001 From: oncalldeveloper Date: Sat, 5 Jan 2019 10:01:43 +0700 Subject: [PATCH 14/24] Add missing language entries and route --- resources/lang/en/titles.php | 1 + resources/lang/fr/titles.php | 1 + resources/lang/pt-br/titles.php | 1 + resources/views/crudmanagement/add-crud.blade.php | 3 ++- routes/web.php | 2 ++ 5 files changed, 7 insertions(+), 1 deletion(-) diff --git a/resources/lang/en/titles.php b/resources/lang/en/titles.php index 813dad540..077512f7d 100755 --- a/resources/lang/en/titles.php +++ b/resources/lang/en/titles.php @@ -35,4 +35,5 @@ 'activeUsers' => 'Active Users', 'adminNewCrud' => 'New CRUD', + 'generateNewCrud' => 'Generate New CRUD', ]; diff --git a/resources/lang/fr/titles.php b/resources/lang/fr/titles.php index 74ecda346..252dfbf4b 100755 --- a/resources/lang/fr/titles.php +++ b/resources/lang/fr/titles.php @@ -31,5 +31,6 @@ 'adminRoutes' => 'Details routage', 'adminNewCrud' => 'Créer CRUD', + 'generateNewCrud' => 'Créer CRUD', ]; diff --git a/resources/lang/pt-br/titles.php b/resources/lang/pt-br/titles.php index 21d4fee7b..26311174f 100755 --- a/resources/lang/pt-br/titles.php +++ b/resources/lang/pt-br/titles.php @@ -34,4 +34,5 @@ 'activeUsers' => 'Usuários Ativos.', 'adminNewCrud' => 'Criar CRUD', + 'generateNewCrud' => 'Criar CRUD', ]; diff --git a/resources/views/crudmanagement/add-crud.blade.php b/resources/views/crudmanagement/add-crud.blade.php index 05b668e3f..3c87a6329 100644 --- a/resources/views/crudmanagement/add-crud.blade.php +++ b/resources/views/crudmanagement/add-crud.blade.php @@ -8,7 +8,8 @@ @extends('layouts.app') @section('template_title') - Generate New CRUD {{ Auth::user()->name }} + {{ Auth::user()->name }} + {{ trans('titles.generateNewCrud') }} @endsection @section('head') diff --git a/routes/web.php b/routes/web.php index e3c93167e..5822ae7ef 100755 --- a/routes/web.php +++ b/routes/web.php @@ -121,6 +121,8 @@ ], ]); + Route::get('crud', 'CrudController@getGenerator'); + Route::post('admin/generator', 'CrudController@postGenerator'); Route::get('logs', '\Rap2hpoutre\LaravelLogViewer\LogViewerController@index'); Route::get('routes', 'AdminDetailsController@listRoutes'); Route::get('active-users', 'AdminDetailsController@activeUsers'); From 06ac56c160c3e802117621549f2511df2ae51710 Mon Sep 17 00:00:00 2001 From: DeveloperOnCall Date: Sat, 5 Jan 2019 10:18:45 +0700 Subject: [PATCH 15/24] Fix Page Title --- resources/views/crudmanagement/add-crud.blade.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/resources/views/crudmanagement/add-crud.blade.php b/resources/views/crudmanagement/add-crud.blade.php index 3c87a6329..2c73c2680 100644 --- a/resources/views/crudmanagement/add-crud.blade.php +++ b/resources/views/crudmanagement/add-crud.blade.php @@ -8,8 +8,7 @@ @extends('layouts.app') @section('template_title') - {{ Auth::user()->name }} - {{ trans('titles.generateNewCrud') }} + {{ trans('titles.generateNewCrud') }} @endsection @section('head') From 93877f683677a5e05bf5420a55ca356023e94520 Mon Sep 17 00:00:00 2001 From: oncalldeveloper Date: Sat, 5 Jan 2019 10:42:14 +0700 Subject: [PATCH 16/24] Change to include summernote properly to avoid insecure file inclusion errors --- resources/views/scripts/summernote.blade.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/views/scripts/summernote.blade.php b/resources/views/scripts/summernote.blade.php index b7a7efe29..ce3488d35 100644 --- a/resources/views/scripts/summernote.blade.php +++ b/resources/views/scripts/summernote.blade.php @@ -7,8 +7,8 @@ */?> @section('footer_scripts') - - + + + + + From d61a1f13998984aa94810ed9ef5bcb190346167c Mon Sep 17 00:00:00 2001 From: oncalldeveloper Date: Sat, 5 Jan 2019 21:48:25 +0700 Subject: [PATCH 18/24] Route cleanup --- app/Http/Controllers/CrudController.php | 4 ++-- resources/crud-generator/menus.json | 2 +- resources/views/crudmanagement/add-crud.blade.php | 2 +- routes/web.php | 5 +++-- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/app/Http/Controllers/CrudController.php b/app/Http/Controllers/CrudController.php index 8ed0b3823..14afa57d7 100644 --- a/app/Http/Controllers/CrudController.php +++ b/app/Http/Controllers/CrudController.php @@ -122,7 +122,7 @@ public function postGenerator(Request $request) } catch (\Exception $e) { return Response::make($e->getMessage(), 500); } - - return redirect('crud')->with('flash_message', 'Your CRUD has been generated. See on the menu.'); + Artisan::call('route:clear'); + return redirect()->route('create-crud')->with('flash_message', 'Your CRUD has been generated. See on the menu.'); } } diff --git a/resources/crud-generator/menus.json b/resources/crud-generator/menus.json index 705f20623..7f30c0411 100644 --- a/resources/crud-generator/menus.json +++ b/resources/crud-generator/menus.json @@ -1 +1 @@ -{"menus":[{"section":"Resources","items":[]},{"section":"Tools","items":[{"title":"Generator","url":"\/crud"}]}]} \ No newline at end of file +{"menus":[{"section":"Resources","items":[]},{"section":"Tools","items":[{"title":"Generator","url":"\/crud\/create"}]}]} \ No newline at end of file diff --git a/resources/views/crudmanagement/add-crud.blade.php b/resources/views/crudmanagement/add-crud.blade.php index 2c73c2680..6c2f30fbf 100644 --- a/resources/views/crudmanagement/add-crud.blade.php +++ b/resources/views/crudmanagement/add-crud.blade.php @@ -24,7 +24,7 @@
-
+ {{ csrf_field() }}
diff --git a/routes/web.php b/routes/web.php index 5822ae7ef..1eae23fab 100755 --- a/routes/web.php +++ b/routes/web.php @@ -121,8 +121,9 @@ ], ]); - Route::get('crud', 'CrudController@getGenerator'); - Route::post('admin/generator', 'CrudController@postGenerator'); + Route::get('crud/create', 'CrudController@getGenerator')->name('create-crud'); + Route::post('crud/generate', 'CrudController@postGenerator')->name('save-crud'); + Route::get('logs', '\Rap2hpoutre\LaravelLogViewer\LogViewerController@index'); Route::get('routes', 'AdminDetailsController@listRoutes'); Route::get('active-users', 'AdminDetailsController@activeUsers'); From fe48de33cbcace4bfa19c8d07cc960c9b4bd065e Mon Sep 17 00:00:00 2001 From: oncalldeveloper Date: Sat, 5 Jan 2019 21:48:25 +0700 Subject: [PATCH 19/24] Route cleanup --- app/Http/Controllers/CrudController.php | 4 +++- resources/crud-generator/menus.json | 2 +- resources/views/crudmanagement/add-crud.blade.php | 2 +- routes/web.php | 5 +++-- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/app/Http/Controllers/CrudController.php b/app/Http/Controllers/CrudController.php index 8ed0b3823..32de12128 100644 --- a/app/Http/Controllers/CrudController.php +++ b/app/Http/Controllers/CrudController.php @@ -123,6 +123,8 @@ public function postGenerator(Request $request) return Response::make($e->getMessage(), 500); } - return redirect('crud')->with('flash_message', 'Your CRUD has been generated. See on the menu.'); + Artisan::call('route:clear'); + + return redirect()->route('create-crud')->with('flash_message', 'Your CRUD has been generated. See on the menu.'); } } diff --git a/resources/crud-generator/menus.json b/resources/crud-generator/menus.json index 705f20623..7f30c0411 100644 --- a/resources/crud-generator/menus.json +++ b/resources/crud-generator/menus.json @@ -1 +1 @@ -{"menus":[{"section":"Resources","items":[]},{"section":"Tools","items":[{"title":"Generator","url":"\/crud"}]}]} \ No newline at end of file +{"menus":[{"section":"Resources","items":[]},{"section":"Tools","items":[{"title":"Generator","url":"\/crud\/create"}]}]} \ No newline at end of file diff --git a/resources/views/crudmanagement/add-crud.blade.php b/resources/views/crudmanagement/add-crud.blade.php index 2c73c2680..6c2f30fbf 100644 --- a/resources/views/crudmanagement/add-crud.blade.php +++ b/resources/views/crudmanagement/add-crud.blade.php @@ -24,7 +24,7 @@
- + {{ csrf_field() }}
diff --git a/routes/web.php b/routes/web.php index 5822ae7ef..1eae23fab 100755 --- a/routes/web.php +++ b/routes/web.php @@ -121,8 +121,9 @@ ], ]); - Route::get('crud', 'CrudController@getGenerator'); - Route::post('admin/generator', 'CrudController@postGenerator'); + Route::get('crud/create', 'CrudController@getGenerator')->name('create-crud'); + Route::post('crud/generate', 'CrudController@postGenerator')->name('save-crud'); + Route::get('logs', '\Rap2hpoutre\LaravelLogViewer\LogViewerController@index'); Route::get('routes', 'AdminDetailsController@listRoutes'); Route::get('active-users', 'AdminDetailsController@activeUsers'); From 734b6f9093a56e598c2593da5a1e27a5c0aa3985 Mon Sep 17 00:00:00 2001 From: oncalldeveloper Date: Sat, 5 Jan 2019 22:36:22 +0700 Subject: [PATCH 20/24] Added description of new feature and instructions for changes related to installing this package --- README.md | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 33fba9550..ab2fd04d1 100755 --- a/README.md +++ b/README.md @@ -24,6 +24,7 @@ - [Installation Instructions](#installation-instructions) - [Build the Front End Assets with Mix](#build-front-end-assets-with-mix) - [Optionally Build Cache](#optionally-build-cache) +- [CRUD Generator](#crud-generator) - [Seeds](#seeds) - [Seeded Roles](#seeded-roles) - [Seeded Permissions](#seeded-permissions) @@ -59,6 +60,7 @@ Laravel 5.7 with user authentication, registration with email confirmation, soci |[Google Maps API v3](https://developers.google.com/maps/documentation/javascript/) for User Location lookup and Geocoding| |CRUD (Create, Read, Update, Delete) Themes Management| |CRUD (Create, Read, Update, Delete) User Management| +|CRUD Generator to generate all required (module) files| |Robust [Laravel Logging](https://laravel.com/docs/5.7/errors#logging) with admin UI using MonoLog| |Google [reCaptcha Protection with Google API](https://developers.google.com/recaptcha/)| |User Registration with email verification| @@ -112,6 +114,10 @@ php artisan vendor:publish --tag=laravelroles && php artisan vendor:publish --tag=laravel2step ``` 7. From the projects root folder run `sudo chmod -R 755 ../laravel-auth` +7. From the projects root folder run `sudo chmod 755 app` +7. From the projects root folder run `sudo chmod 755 app/Http/Controllers` +7. From the projects root folder run `sudo chmod 755 resources/crud-generator/menus.json` +7. From the projects root folder run `sudo chmod 755 resources/views` 8. From the projects root folder run `php artisan key:generate` 9. From the projects root folder run `php artisan migrate` 10. From the projects root folder run `composer dump-autoload` @@ -157,6 +163,16 @@ php artisan vendor:publish --tag=laravel2step * [ThemesTableSeeder](https://github.com/jeremykenedy/laravel-auth/blob/master/database/seeds/ThemesTableSeeder.php) * NOTE: A lot of themes render incorrectly on Bootstrap 4 since their core was built to override Bootstrap 4. These will be updated soon and ones that do not render correctly will be removed from the seed. In the mean time you can remove them from the seed or manaully from the UI or database. +### CRUD Generator +Fill in the form with all required fields. Laravel-Auth will generate all required Models, Controllers, Views, Routes, Migrations etc. + +**NOTE**: For this to work properly, permissions on the related files and folders must be set accordingly. See install instructions + + * /app/Http/Controllers (755) + * /resources/crud-generator/menus.json (666) + * /resources/views (755) + + ### Routes ``` @@ -230,6 +246,8 @@ php artisan vendor:publish --tag=laravel2step | | PUT|PATCH | users/{user} | users.update | App\Http\Controllers\UsersManagementController@update | web,auth,activated,role:admin,activity,twostep | | | GET|HEAD | users/{user} | users.show | App\Http\Controllers\UsersManagementController@show | web,auth,activated,role:admin,activity,twostep | | | GET|HEAD | users/{user}/edit | users.edit | App\Http\Controllers\UsersManagementController@edit | web,auth,activated,role:admin,activity,twostep | +| | GET | crud/create | crud:create | App\Http\Controllers\CrudController@getGenerator | web,auth,activated,role:admin,activity,twostep | +| | POST | crud/generate | crud:save | App\Http\Controllers\CrudController@gpostGenerator | web,auth,activated,role:admin,activity,twostep | | | GET|HEAD | verification/needed | laravel2step::verificationNeeded | jeremykenedy\laravel2step\App\Http\Controllers\TwoStepController@showVerification | web,auth,Closure | | | POST | verification/resend | laravel2step::resend | jeremykenedy\laravel2step\App\Http\Controllers\TwoStepController@resend | web,auth,Closure | | | POST | verification/verify | laravel2step::verify | jeremykenedy\laravel2step\App\Http\Controllers\TwoStepController@verify | web,auth,Closure | @@ -468,7 +486,7 @@ INSTAGRAM_REDIRECT_URI=http://laravel-authentication.local/social/handle/instagr ``` -#### Laravel Developement Packages Used References +#### Laravel Development Packages Used References * https://laravel.com/docs/5.7/authentication * https://laravel.com/docs/5.7/authorization * https://laravel.com/docs/5.7/routing From 59aff7062d68ba6320271e8a8b5f7b94fc93ad53 Mon Sep 17 00:00:00 2001 From: DeveloperOnCall Date: Mon, 7 Jan 2019 09:25:49 +0700 Subject: [PATCH 21/24] Fixed Missing artisan command - rookie mistake not synching the composer file before the pull request :( --- composer.json | 1 + 1 file changed, 1 insertion(+) diff --git a/composer.json b/composer.json index f937c1247..64e0ca93d 100755 --- a/composer.json +++ b/composer.json @@ -32,6 +32,7 @@ "socialiteproviders/youtube": "^3.0" }, "require-dev": { + "appzcoder/crud-generator": "^3.0", "barryvdh/laravel-debugbar": "^3.0", "filp/whoops": "^2.0", "fzaninotto/faker": "^1.4", From e325d7492c4419b2ad818f60b24cc793f457bd3a Mon Sep 17 00:00:00 2001 From: DeveloperOnCall Date: Thu, 10 Jan 2019 08:56:52 +0700 Subject: [PATCH 22/24] Fixed Missing files --- resources/crud-generator/api-controller.stub | 84 +++++++++++++ resources/crud-generator/controller.stub | 120 +++++++++++++++++++ resources/crud-generator/lang.stub | 5 + resources/crud-generator/migration.stub | 27 +++++ resources/crud-generator/model.stub | 26 ++++ 5 files changed, 262 insertions(+) create mode 100644 resources/crud-generator/api-controller.stub create mode 100644 resources/crud-generator/controller.stub create mode 100644 resources/crud-generator/lang.stub create mode 100644 resources/crud-generator/migration.stub create mode 100644 resources/crud-generator/model.stub diff --git a/resources/crud-generator/api-controller.stub b/resources/crud-generator/api-controller.stub new file mode 100644 index 000000000..f95284deb --- /dev/null +++ b/resources/crud-generator/api-controller.stub @@ -0,0 +1,84 @@ +paginate({{pagination}}); + + return ${{crudName}}; + } + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * + * @return \Illuminate\Http\Response + */ + public function store(Request $request) + { + {{validationRules}} + ${{crudNameSingular}} = {{modelName}}::create($request->all()); + + return response()->json(${{crudNameSingular}}, 201); + } + + /** + * Display the specified resource. + * + * @param int $id + * + * @return \Illuminate\Http\Response + */ + public function show($id) + { + ${{crudNameSingular}} = {{modelName}}::findOrFail($id); + + return ${{crudNameSingular}}; + } + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param int $id + * + * @return \Illuminate\Http\Response + */ + public function update(Request $request, $id) + { + {{validationRules}} + ${{crudNameSingular}} = {{modelName}}::findOrFail($id); + ${{crudNameSingular}}->update($request->all()); + + return response()->json(${{crudNameSingular}}, 200); + } + + /** + * Remove the specified resource from storage. + * + * @param int $id + * + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + {{modelName}}::destroy($id); + + return response()->json(null, 204); + } +} diff --git a/resources/crud-generator/controller.stub b/resources/crud-generator/controller.stub new file mode 100644 index 000000000..0245f00d5 --- /dev/null +++ b/resources/crud-generator/controller.stub @@ -0,0 +1,120 @@ +get('search'); + $perPage = {{pagination}}; + + if (!empty($keyword)) { + ${{crudName}} = {{modelName}}::{{whereSnippet}}latest()->paginate($perPage); + } else { + ${{crudName}} = {{modelName}}::latest()->paginate($perPage); + } + + return view('{{crudName}}::index', compact('{{crudName}}')); + } + + /** + * Show the form for creating a new resource. + * + * @return \Illuminate\View\View + */ + public function create() + { + return view('{{crudName}}::create'); + } + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * + * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector + */ + public function store(Request $request) + { + {{validationRules}} + $requestData = $request->all(); + {{fileSnippet}} + {{modelName}}::create($requestData); + + return redirect('{{crudName}}')->with('flash_message', '{{modelName}} added!'); + } + + /** + * Display the specified resource. + * + * @param int $id + * + * @return \Illuminate\View\View + */ + public function show($id) + { + ${{crudNameSingular}} = {{modelName}}::findOrFail($id); + + //return view('{{viewPath}}{{viewName}}.show', compact('{{crudNameSingular}}')); + return view('{{crudName}}::show', compact('{{crudNameSingular}}')); + } + + /** + * Show the form for editing the specified resource. + * + * @param int $id + * + * @return \Illuminate\View\View + */ + public function edit($id) + { + ${{crudNameSingular}} = {{modelName}}::findOrFail($id); + + return view('{{crudName}}::edit', compact('{{crudNameSingular}}')); + } + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param int $id + * + * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector + */ + public function update(Request $request, $id) + { + {{validationRules}} + $requestData = $request->all(); + {{fileSnippet}} + ${{crudNameSingular}} = {{modelName}}::findOrFail($id); + ${{crudNameSingular}}->update($requestData); + + return redirect('{{crudName}}')->with('flash_message', '{{modelName}} updated!'); + } + + /** + * Remove the specified resource from storage. + * + * @param int $id + * + * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector + */ + public function destroy($id) + { + {{modelName}}::destroy($id); + + return redirect('{{crudName}}')->with('flash_message', '{{modelName}} deleted!'); + } +} diff --git a/resources/crud-generator/lang.stub b/resources/crud-generator/lang.stub new file mode 100644 index 000000000..75bd61af1 --- /dev/null +++ b/resources/crud-generator/lang.stub @@ -0,0 +1,5 @@ + Date: Thu, 10 Jan 2019 08:59:22 +0700 Subject: [PATCH 23/24] Fixing extra trailing slash in stub path --- config/crudgenerator.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/crudgenerator.php b/config/crudgenerator.php index 0afebfea9..07e385d28 100644 --- a/config/crudgenerator.php +++ b/config/crudgenerator.php @@ -13,7 +13,7 @@ | */ - 'path' => base_path('resources/crud-generator/'), + 'path' => base_path('resources/crud-generator'), /* * Columns number to show in view's table. From 7dbe459994f18dfe436162c12dbd47298ad6796f Mon Sep 17 00:00:00 2001 From: DeveloperOnCall Date: Thu, 10 Jan 2019 11:58:57 +0700 Subject: [PATCH 24/24] Reversing change to stub path - seems the crudgenerator package has some issues when using custom template locations. --- config/crudgenerator.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/crudgenerator.php b/config/crudgenerator.php index 07e385d28..0afebfea9 100644 --- a/config/crudgenerator.php +++ b/config/crudgenerator.php @@ -13,7 +13,7 @@ | */ - 'path' => base_path('resources/crud-generator'), + 'path' => base_path('resources/crud-generator/'), /* * Columns number to show in view's table.