Browse Source

Generate views command [WIP]

Vijayakrishnan 5 năm trước cách đây
mục cha
commit
0c74a1b15d

+ 58 - 44
app/Console/Commands/GenerateCCommand.php

@@ -68,61 +68,66 @@ class GenerateCCommand extends Command
 
             // routes
             $routesText[] = "/* SCAF */// $object->slug CRUD";
-            $routesText[] = "/* SCAF */Route::get ('/$object->slug', '{$name}Controller@index');";
-            $routesText[] = "/* SCAF */Route::get ('/$object->slug/:id', '{$name}Controller@show');";
-            $routesText[] = "/* SCAF */Route::get ('/$object->slug/create', '{$name}Controller@create');";
-            $routesText[] = "/* SCAF */Route::get ('/$object->slug/update/:id', '{$name}Controller@update');";
+            $routesText[] = "/* SCAF */Route::get ('/$object->slug', '{$name}Controller@index')->name('{$object->slug}-index');";
+            $routesText[] = "/* SCAF */Route::get ('/$object->slug/{id}', '{$name}Controller@show')->name('{$object->slug}-view');";
+            $routesText[] = "/* SCAF */Route::get ('/$object->slug/create', '{$name}Controller@create')->name('{$object->slug}-create');";
+            $routesText[] = "/* SCAF */Route::get ('/$object->slug/update/{id}', '{$name}Controller@update')->name('{$object->slug}-update');";
 
             // left nav links
             $linksText[] =
 '<!-- SCAF --><li class="nav-item"><a href="/' . $object->slug . '" class="nav-link"><i class="nav-icon ' . $object->icon . '"></i><p>' . $object->text . '</p></a></li>';
 
             // controller
-            $template =
-'<?php
-
-namespace App\Http\Controllers;
-
-use Illuminate\Http\Request;
-use App\Models\_MODEL_;
-
-class _NAME_Controller extends Controller
-{
-
-  public function index(Request $request)
-  {
-    $rows = _MODEL_::all();
-    return view(\'_SLUG_.index\', compact(\'rows\'));
-  }
-
-  public function show(Request $request, $uid)
-  {
-    $row = _MODEL_::where(\'uid\', $uid)->first();
-    return view(\'_SLUG_.show\', compact(\'row\'));
-  }
-
-  public function create(Request $request)
-  {
-    return view(\'_SLUG_.create\');
-  }
-
-  public function update(Request $request, $uid)
-  {
-    $row = _MODEL_::where(\'uid\', $uid)->first();
-    return view(\'_SLUG_.update\', compact(\'row\'));
-  }
-
-}
-
-';
-
-            // write controller
+            $template = file_get_contents(base_path('generatecv/controller.template.php'));
             $text = str_replace("_NAME_", $name, $template);
             $text = str_replace("_MODEL_", $object->model, $text);
             $text = str_replace("_SLUG_", $object->slug, $text);
-            if(!file_exists(app_path("Http/Controllers/{$name}Controller.php"))) {
+//            if(!file_exists(app_path("Http/Controllers/{$name}Controller.php"))) {
                 file_put_contents(app_path("Http/Controllers/{$name}Controller.php"), $text);
                 echo "Generated " . app_path("Http/Controllers/{$name}Controller.php") . "\n";
+//            }
+
+            // views - index
+            if(isset($object->list)) {
+                $template = file_get_contents(base_path('generatecv/listing.template.blade.php'));
+                $text = str_replace("_NAME_", $object->text, $template);
+                $text = str_replace("_SLUG_", $object->slug, $text);
+                $ths = [];
+                foreach ($object->list as $field => $display) {
+                    $ths[] = "<th>{$display}</th>";
+                }
+                $ths = implode("\n", $ths);
+                $text = str_replace("<!-- __SCAFFOLD_THS__ -->", $ths, $text);
+                $tds = [];
+                foreach ($object->list as $field => $display) {
+                    if($field === 'id') {
+                        $tds[] = '<td><a href="/' . $object->slug . '/<?= $row->uid ?>"><?= $row->' . $field . ' ?></a></td>';
+                    }
+                    else {
+                        $tds[] = '<td><?= $row->' . $field . ' ?></td>';
+                    }
+                }
+                $tds = implode("\n", $tds);
+                $text = str_replace("<!-- __SCAFFOLD_TDS__ -->", $tds, $text);
+//                if(!file_exists(resource_path("views/{$object->slug}/index.blade.php"))) {
+                    $this->file_force_contents(resource_path("views/{$object->slug}/index.blade.php"), $text);
+                    echo "Generated " . resource_path("views/{$object->slug}/index.blade.php") . "\n";
+//                }
+            }
+
+            if(isset($object->show)) {
+                $template = file_get_contents(base_path('generatecv/show.template.blade.php'));
+                $dts = [];
+                foreach ($object->show as $field => $display) {
+                    $dts[] = "<dt class='col-md-2'>{$display}</dt>" .
+                        '<dd class="col-md-10"><?= $row->' . $field . ' ?></dd>';
+                }
+                $dts = implode("\n", $dts);
+                $text = str_replace("<!-- __SCAFFOLD_DTS__  -->", $dts, $template);
+//                if(!file_exists(resource_path("views/{$object->slug}/show.blade.php"))) {
+                    $this->file_force_contents(resource_path("views/{$object->slug}/show.blade.php"), $text);
+                    echo "Generated " . resource_path("views/{$object->slug}/show.blade.php") . "\n";
+//                }
             }
 
         }
@@ -158,4 +163,13 @@ class _NAME_Controller extends Controller
         echo "Updated " . resource_path("views/layouts/pro-logged-in.blade.php") . "\n";
 
     }
+
+    private function file_force_contents($dir, $contents){
+        $parts = explode('/', $dir);
+        $file = array_pop($parts);
+        $dir = '';
+        foreach($parts as $part)
+            if(!is_dir($dir .= "/$part")) mkdir($dir);
+        file_put_contents("$dir/$file", $contents);
+    }
 }

+ 22 - 23
app/Http/Controllers/MyClientsController.php

@@ -8,28 +8,27 @@ use App\Models\Client;
 class MyClientsController extends Controller
 {
 
-  public function index(Request $request)
-  {
-    $rows = Client::all();
-    return view('my-clients.index', compact('rows'));
-  }
-
-  public function show(Request $request, $uid)
-  {
-    $row = Client::where('uid', $uid)->first();
-    return view('my-clients.show', compact('row'));
-  }
-
-  public function create(Request $request)
-  {
-    return view('my-clients.create');
-  }
-
-  public function update(Request $request, $uid)
-  {
-    $row = Client::where('uid', $uid)->first();
-    return view('my-clients.update', compact('row'));
-  }
+    public function index(Request $request)
+    {
+        $rows = Client::all();
+        return view('my-clients.index', compact('rows'));
+    }
+
+    public function show(Request $request, $uid)
+    {
+        $row = Client::where('uid', $uid)->first();
+        return view('my-clients.show', compact('row'));
+    }
+
+    public function create(Request $request)
+    {
+        return view('my-clients.create');
+    }
+
+    public function update(Request $request, $uid)
+    {
+        $row = Client::where('uid', $uid)->first();
+        return view('my-clients.update', compact('row'));
+    }
 
 }
-

+ 22 - 23
app/Http/Controllers/MyTeamsController.php

@@ -8,28 +8,27 @@ use App\Models\Team;
 class MyTeamsController extends Controller
 {
 
-  public function index(Request $request)
-  {
-    $rows = Team::all();
-    return view('my-teams.index', compact('rows'));
-  }
-
-  public function show(Request $request, $uid)
-  {
-    $row = Team::where('uid', $uid)->first();
-    return view('my-teams.show', compact('row'));
-  }
-
-  public function create(Request $request)
-  {
-    return view('my-teams.create');
-  }
-
-  public function update(Request $request, $uid)
-  {
-    $row = Team::where('uid', $uid)->first();
-    return view('my-teams.update', compact('row'));
-  }
+    public function index(Request $request)
+    {
+        $rows = Team::all();
+        return view('my-teams.index', compact('rows'));
+    }
+
+    public function show(Request $request, $uid)
+    {
+        $row = Team::where('uid', $uid)->first();
+        return view('my-teams.show', compact('row'));
+    }
+
+    public function create(Request $request)
+    {
+        return view('my-teams.create');
+    }
+
+    public function update(Request $request, $uid)
+    {
+        $row = Team::where('uid', $uid)->first();
+        return view('my-teams.update', compact('row'));
+    }
 
 }
-

+ 22 - 23
app/Http/Controllers/NotesController.php

@@ -8,28 +8,27 @@ use App\Models\Note;
 class NotesController extends Controller
 {
 
-  public function index(Request $request)
-  {
-    $rows = Note::all();
-    return view('notes.index', compact('rows'));
-  }
-
-  public function show(Request $request, $uid)
-  {
-    $row = Note::where('uid', $uid)->first();
-    return view('notes.show', compact('row'));
-  }
-
-  public function create(Request $request)
-  {
-    return view('notes.create');
-  }
-
-  public function update(Request $request, $uid)
-  {
-    $row = Note::where('uid', $uid)->first();
-    return view('notes.update', compact('row'));
-  }
+    public function index(Request $request)
+    {
+        $rows = Note::all();
+        return view('notes.index', compact('rows'));
+    }
+
+    public function show(Request $request, $uid)
+    {
+        $row = Note::where('uid', $uid)->first();
+        return view('notes.show', compact('row'));
+    }
+
+    public function create(Request $request)
+    {
+        return view('notes.create');
+    }
+
+    public function update(Request $request, $uid)
+    {
+        $row = Note::where('uid', $uid)->first();
+        return view('notes.update', compact('row'));
+    }
 
 }
-

+ 34 - 0
generatecv/controller.template.php

@@ -0,0 +1,34 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use Illuminate\Http\Request;
+use App\Models\_MODEL_;
+
+class _NAME_Controller extends Controller
+{
+
+    public function index(Request $request)
+    {
+        $rows = _MODEL_::all();
+        return view('_SLUG_.index', compact('rows'));
+    }
+
+    public function show(Request $request, $uid)
+    {
+        $row = _MODEL_::where('uid', $uid)->first();
+        return view('_SLUG_.show', compact('row'));
+    }
+
+    public function create(Request $request)
+    {
+        return view('_SLUG_.create');
+    }
+
+    public function update(Request $request, $uid)
+    {
+        $row = _MODEL_::where('uid', $uid)->first();
+        return view('_SLUG_.update', compact('row'));
+    }
+
+}

+ 30 - 1
generatecv/controllers.json

@@ -3,7 +3,36 @@
         "text": "My Teams",
         "slug": "my-teams",
         "model": "Team",
-        "icon": "fa fa-user"
+        "icon": "fa fa-user",
+        "list": {
+            "id": "ID",
+            "team_number": "Team #",
+            "hcp_pro_id": "HCP",
+            "ally_pro_id": "Ally",
+            "client_count": "Client Count"
+        },
+        "show": {
+            "id": "ID",
+            "uid": "UID",
+            "created_at": "Created",
+            "deactivated_at":"Deactivated",
+            "deactivation_memo": "Deactivation Memo",
+            "is_active":"Active?",
+            "reactivated_at":"Reactivated",
+            "reactivation_memo": "Reactivation Memo",
+            "team_number": "Team #",
+            "hcp_pro_id": "HCP",
+            "ally_pro_id": "Ally",
+            "client_count": "Client Count",
+            "type": "Type"
+        },
+        "editFields": {
+
+        },
+        "indirect": {
+            "hcp_pro_id": "hcpName()",
+            "ally_pro_id": "allyName()"
+        }
     },
     "MyClients": {
         "text": "My Clients",

+ 31 - 0
generatecv/listing.template.blade.php

@@ -0,0 +1,31 @@
+@extends('layouts.pro-logged-in')
+@section('content')
+
+    <div class="d-flex mb-2">
+        <div><i class="fa fa-users" aria-hidden="true"></i> _NAME_ List</div>
+        <div class="ml-auto">
+            <a class="btn btn-primary btn-sm" href="{{route('_SLUG_-create')}}">
+                <i class="fa fa-plus-circle" aria-hidden="true"></i>
+                Add New
+            </a>
+        </div>
+    </div>
+
+    <div class="table-responsive p-0">
+        <table class="table table-hover text-nowrap">
+            <thead>
+            <tr>
+                <!-- __SCAFFOLD_THS__ -->
+            </tr>
+            </thead>
+            <tbody>
+            @foreach($rows as $row)
+                <tr>
+                    <!-- __SCAFFOLD_TDS__ -->
+                </tr>
+            @endforeach
+            </tbody>
+        </table>
+    </div>
+
+@endsection

+ 15 - 0
generatecv/show.template.blade.php

@@ -0,0 +1,15 @@
+@extends('layouts.pro-logged-in')
+@section('content')
+    <div class="card">
+        <div class="card-header">
+            Details
+        </div>
+        <div class="card-body">
+            <div>
+                <dl class="row">
+                    <!-- __SCAFFOLD_DTS__  -->
+                </dl>
+            </div>
+        </div>
+    </div>
+@endsection

+ 39 - 0
resources/views/my-teams/index.blade.php

@@ -0,0 +1,39 @@
+@extends('layouts.pro-logged-in')
+@section('content')
+
+    <div class="d-flex mb-2">
+        <div><i class="fa fa-users" aria-hidden="true"></i> My Teams List</div>
+        <div class="ml-auto">
+            <a class="btn btn-primary btn-sm" href="{{route('my-teams-create')}}">
+                <i class="fa fa-plus-circle" aria-hidden="true"></i>
+                Add New
+            </a>
+        </div>
+    </div>
+
+    <div class="table-responsive p-0">
+        <table class="table table-hover text-nowrap">
+            <thead>
+            <tr>
+                <th>ID</th>
+<th>Team #</th>
+<th>HCP</th>
+<th>Ally</th>
+<th>Client Count</th>
+            </tr>
+            </thead>
+            <tbody>
+            @foreach($rows as $row)
+                <tr>
+                    <td><a href="/my-teams/<?= $row->uid ?>"><?= $row->id ?></a></td>
+<td><?= $row->team_number ?></td>
+<td><?= $row->hcp_pro_id ?></td>
+<td><?= $row->ally_pro_id ?></td>
+<td><?= $row->client_count ?></td>
+                </tr>
+            @endforeach
+            </tbody>
+        </table>
+    </div>
+
+@endsection

+ 27 - 0
resources/views/my-teams/show.blade.php

@@ -0,0 +1,27 @@
+@extends('layouts.pro-logged-in')
+@section('content')
+    <div class="card">
+        <div class="card-header">
+            Details
+        </div>
+        <div class="card-body">
+            <div>
+                <dl class="row">
+                    <dt class='col-md-2'>ID</dt><dd class="col-md-10"><?= $row->id ?></dd>
+<dt class='col-md-2'>UID</dt><dd class="col-md-10"><?= $row->uid ?></dd>
+<dt class='col-md-2'>Created</dt><dd class="col-md-10"><?= $row->created_at ?></dd>
+<dt class='col-md-2'>Deactivated</dt><dd class="col-md-10"><?= $row->deactivated_at ?></dd>
+<dt class='col-md-2'>Deactivation Memo</dt><dd class="col-md-10"><?= $row->deactivation_memo ?></dd>
+<dt class='col-md-2'>Active?</dt><dd class="col-md-10"><?= $row->is_active ?></dd>
+<dt class='col-md-2'>Reactivated</dt><dd class="col-md-10"><?= $row->reactivated_at ?></dd>
+<dt class='col-md-2'>Reactivation Memo</dt><dd class="col-md-10"><?= $row->reactivation_memo ?></dd>
+<dt class='col-md-2'>Team #</dt><dd class="col-md-10"><?= $row->team_number ?></dd>
+<dt class='col-md-2'>HCP</dt><dd class="col-md-10"><?= $row->hcp_pro_id ?></dd>
+<dt class='col-md-2'>Ally</dt><dd class="col-md-10"><?= $row->ally_pro_id ?></dd>
+<dt class='col-md-2'>Client Count</dt><dd class="col-md-10"><?= $row->client_count ?></dd>
+<dt class='col-md-2'>Type</dt><dd class="col-md-10"><?= $row->type ?></dd>
+                </dl>
+            </div>
+        </div>
+    </div>
+@endsection

+ 12 - 12
routes/web.php

@@ -42,19 +42,19 @@ Route::middleware('ensureValidSession')->group(function(){
 
 /* __SCAFFOLD_ROUTES__ */
 /* SCAF */// my-teams CRUD
-/* SCAF */Route::get ('/my-teams', 'MyTeamsController@index');
-/* SCAF */Route::get ('/my-teams/:id', 'MyTeamsController@show');
-/* SCAF */Route::get ('/my-teams/create', 'MyTeamsController@create');
-/* SCAF */Route::get ('/my-teams/update/:id', 'MyTeamsController@update');
+/* SCAF */Route::get ('/my-teams', 'MyTeamsController@index')->name('my-teams-index');
+/* SCAF */Route::get ('/my-teams/{id}', 'MyTeamsController@show')->name('my-teams-view');
+/* SCAF */Route::get ('/my-teams/create', 'MyTeamsController@create')->name('my-teams-create');
+/* SCAF */Route::get ('/my-teams/update/{id}', 'MyTeamsController@update')->name('my-teams-update');
 /* SCAF */// my-clients CRUD
-/* SCAF */Route::get ('/my-clients', 'MyClientsController@index');
-/* SCAF */Route::get ('/my-clients/:id', 'MyClientsController@show');
-/* SCAF */Route::get ('/my-clients/create', 'MyClientsController@create');
-/* SCAF */Route::get ('/my-clients/update/:id', 'MyClientsController@update');
+/* SCAF */Route::get ('/my-clients', 'MyClientsController@index')->name('my-clients-index');
+/* SCAF */Route::get ('/my-clients/{id}', 'MyClientsController@show')->name('my-clients-view');
+/* SCAF */Route::get ('/my-clients/create', 'MyClientsController@create')->name('my-clients-create');
+/* SCAF */Route::get ('/my-clients/update/{id}', 'MyClientsController@update')->name('my-clients-update');
 /* SCAF */// notes CRUD
-/* SCAF */Route::get ('/notes', 'NotesController@index');
-/* SCAF */Route::get ('/notes/:id', 'NotesController@show');
-/* SCAF */Route::get ('/notes/create', 'NotesController@create');
-/* SCAF */Route::get ('/notes/update/:id', 'NotesController@update');
+/* SCAF */Route::get ('/notes', 'NotesController@index')->name('notes-index');
+/* SCAF */Route::get ('/notes/{id}', 'NotesController@show')->name('notes-view');
+/* SCAF */Route::get ('/notes/create', 'NotesController@create')->name('notes-create');
+/* SCAF */Route::get ('/notes/update/{id}', 'NotesController@update')->name('notes-update');
 
 });