From cf37198a8aab6f5c75dcc0a4cd170d38f35a163d Mon Sep 17 00:00:00 2001
From: Angel MAS <angelmartin.isc@gmail.com>
Date: Fri, 20 Apr 2018 18:34:00 -0500
Subject: [PATCH] crud users

---
 .gitignore                                                        |  1 +
 composer.json                                                     | 17 +++++++++++++++++
 src/AdminUserController.php                                       | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/UserAdminProvider.php                                         | 30 ++++++++++++++++++++++++++++++
 src/migrations/2018_04_20_220009_add_short_bio_to_users_table.php | 32 ++++++++++++++++++++++++++++++++
 src/routes.php                                                    | 10 ++++++++++
 src/views/edit.blade.php                                          | 35 +++++++++++++++++++++++++++++++++++
 src/views/fields.blade.php                                        | 11 +++++++++++
 src/views/list.blade.php                                          | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 9 files changed, 298 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 composer.json
 create mode 100644 src/AdminUserController.php
 create mode 100644 src/UserAdminProvider.php
 create mode 100644 src/migrations/2018_04_20_220009_add_short_bio_to_users_table.php
 create mode 100644 src/routes.php
 create mode 100644 src/views/edit.blade.php
 create mode 100644 src/views/fields.blade.php
 create mode 100644 src/views/list.blade.php

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..57872d0
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+/vendor/
diff --git a/composer.json b/composer.json
new file mode 100644
index 0000000..cc428d3
--- /dev/null
+++ b/composer.json
@@ -0,0 +1,17 @@
+{
+    "name": "onestartup/user-admin",
+    "description": "Module for create user in dashboard",
+    "type": "library",
+    "license": "Apache-2.0",
+    "authors": [
+        {
+            "name": "Angel MAS",
+            "email": "angelmartin.isc@gmail.com"
+        }
+    ],
+    "minimum-stability": "dev",
+    "require": {},
+    "autoload": {
+        "psr-4": {"Onestartup\\UserAdmin\\": "src"}
+    }
+}
diff --git a/src/AdminUserController.php b/src/AdminUserController.php
new file mode 100644
index 0000000..f96bc03
--- /dev/null
+++ b/src/AdminUserController.php
@@ -0,0 +1,71 @@
+<?php
+
+namespace Onestartup\UserAdmin;
+
+use Illuminate\Http\Request;
+use App\Http\Requests;
+use App\Http\Controllers\Controller;
+use Yajra\Datatables\Datatables;
+use App\User;
+
+class AdminUserController extends Controller
+{
+
+    public function list()
+    {
+    	$roles = [1 => 'Admin', 2 => 'Editor'];
+    	return view('user-admin::list')->with('roles', $roles);
+    }
+
+    public function storeUser(Request $request)
+    {
+    	
+    	$user = new User($request->all());
+    	$user->password = bcrypt($request->password);
+    	$user->save();
+
+
+    	return redirect()->back()->with('message_success', 'Se registro correctamente');
+    }
+
+    public function show($id)
+    {
+        $user = User::find($id);
+        $roles = [1 => 'Admin', 2 => 'Editor'];
+
+        return view('user-admin::edit')
+            ->with('roles', $roles)
+            ->with('user', $user);
+    }
+
+    public function update(Request $request, $id)
+    {
+        $user = User::find($id);
+        $user->fill($request->all());
+        $user->save();
+
+
+        return redirect()->back()->with('message_success', 'Se registro correctamente');
+    }
+
+    public function destroy($id)
+    {
+        $user = User::find($id);
+        $user->delete();
+
+        return redirect()->route('user.list')->with('message_success', 'Se eliminó correctamente');
+    }
+
+    public function datatable()
+    {
+        $users = User::select(['id','name','email', 'short_bio','rol_id','created_at'])->orderBy('id', 'desc');
+
+        return Datatables::of($users)
+        ->addColumn('details_url', function ($user) {
+            return "<a href='".route('user.show',$user->id)."'>Ver Detalle</a>";
+        })
+        ->rawColumns(['details_url'])
+        ->make();
+    }
+
+}
diff --git a/src/UserAdminProvider.php b/src/UserAdminProvider.php
new file mode 100644
index 0000000..aceed37
--- /dev/null
+++ b/src/UserAdminProvider.php
@@ -0,0 +1,30 @@
+<?php
+
+namespace Onestartup\UserAdmin;
+
+use Illuminate\Support\ServiceProvider;
+
+class UserAdminProvider extends ServiceProvider
+{
+    /**
+     * Bootstrap the application services.
+     *
+     * @return void
+     */
+    public function boot()
+    {
+        include __DIR__.'/routes.php';
+        $this->loadMigrationsFrom(__DIR__.'/migrations');
+    }
+
+    /**
+     * Register the application services.
+     *
+     * @return void
+     */
+    public function register()
+    {
+        $this->app->make('Onestartup\UserAdmin\AdminUserController');
+        $this->loadViewsFrom(__DIR__.'/views', 'user-admin');
+    }
+}
diff --git a/src/migrations/2018_04_20_220009_add_short_bio_to_users_table.php b/src/migrations/2018_04_20_220009_add_short_bio_to_users_table.php
new file mode 100644
index 0000000..fdbf5a4
--- /dev/null
+++ b/src/migrations/2018_04_20_220009_add_short_bio_to_users_table.php
@@ -0,0 +1,32 @@
+<?php
+
+use Illuminate\Support\Facades\Schema;
+use Illuminate\Database\Schema\Blueprint;
+use Illuminate\Database\Migrations\Migration;
+
+class AddShortBioToUsersTable extends Migration
+{
+    /**
+     * Run the migrations.
+     *
+     * @return void
+     */
+    public function up()
+    {
+        Schema::table('users', function (Blueprint $table) {
+            $table->string('short_bio', 555)->nullable();
+        });
+    }
+
+    /**
+     * Reverse the migrations.
+     *
+     * @return void
+     */
+    public function down()
+    {
+        Schema::table('users', function (Blueprint $table) {
+            $table->dropColumn('short_bio');
+        });
+    }
+}
diff --git a/src/routes.php b/src/routes.php
new file mode 100644
index 0000000..a1fdf3f
--- /dev/null
+++ b/src/routes.php
@@ -0,0 +1,10 @@
+<?php
+
+Route::group(['middleware' => ['web', 'auth', 'is_admin']], function(){
+	Route::get('admin/user','Onestartup\UserAdmin\AdminUserController@list')->name('user.list');
+	Route::get('admin/user/datatable','Onestartup\UserAdmin\AdminUserController@datatable')->name('user.datatable');
+	Route::get('admin/user/{id}/show','Onestartup\UserAdmin\AdminUserController@show')->name('user.show');
+	Route::post('admin/user/store','Onestartup\UserAdmin\AdminUserController@storeUser')->name('user.store');
+	Route::put('admin/user/{id}/update','Onestartup\UserAdmin\AdminUserController@update')->name('user.update');
+	Route::delete('admin/user/{id}/destroy','Onestartup\UserAdmin\AdminUserController@destroy')->name('user.destroy');
+});
diff --git a/src/views/edit.blade.php b/src/views/edit.blade.php
new file mode 100644
index 0000000..755cba2
--- /dev/null
+++ b/src/views/edit.blade.php
@@ -0,0 +1,35 @@
+@extends('layouts.admin.admin-layout')
+@section('content')
+<div class="row">
+	<div class='col-md-10 offset-1'>
+		<div class='box'>
+		  <div class='box-header dark'>
+		    <h2>
+		      Actualizar datos
+		    </h2>
+		  </div>
+		  <div class='box-body'>
+		    <div class="row">
+		      <div class="col-md-8 offset-2">
+		        {!! Form::model($user,['route'=> ['user.update',$user->id],"method"=>"PUT"]) !!}
+		        @include('user-admin::fields')
+		        <br>
+		        <div class="row">
+		        	<div class="col-md-6">
+		        		{!! Form::submit('Actualizar', ['class'=>'btn btn-block btn-primary']) !!}
+		        		{!! Form::close() !!}
+		        	</div>
+		        	<div class="col-md-6">
+		        		{!! Form::open(['route'=> ['user.destroy', $user->id],'method'=>'DELETE'])!!}
+			                <button type='submit' class="btn btn-block btn-danger"  onclick='return confirm("¿Estas seguro que deseas eliminar este USUARIO?")'>Eliminar este usuario</button>
+			              {!! Form::close()!!}
+		        	</div>
+		        </div>
+		        
+		      </div>
+		    </div>
+		  </div>
+		</div>
+	</div>
+</div>
+@endsection
\ No newline at end of file
diff --git a/src/views/fields.blade.php b/src/views/fields.blade.php
new file mode 100644
index 0000000..bf750a5
--- /dev/null
+++ b/src/views/fields.blade.php
@@ -0,0 +1,11 @@
+{!! Form::label('name', 'Nombre', ['class'=>'control-label']) !!}
+{!! Form::text('name', null, ["class"=>"form-control", "required"=>"required"]) !!}
+
+{!! Form::label('email', 'Correo electrónico', ['class'=>'control-label']) !!}
+{!! Form::email('email', null, ["class"=>"form-control", "required"=>"required"]) !!}
+
+{!! Form::label('rol_id', 'Tipo de usuario', ['class'=>'control-label']) !!}
+{!! Form::select('rol_id', $roles, null, ["class"=>"form-control", "required"=>"required"]) !!}
+
+{!! Form::label('short_bio', 'Biografia', ['class'=>'control-label']) !!}
+{!! Form::text('short_bio', null, ["class"=>"form-control", "id"=>"short_bio", "required"=>"required"]) !!}
\ No newline at end of file
diff --git a/src/views/list.blade.php b/src/views/list.blade.php
new file mode 100644
index 0000000..0679529
--- /dev/null
+++ b/src/views/list.blade.php
@@ -0,0 +1,91 @@
+@extends('layouts.admin.admin-layout')
+@section('content')
+
+<div class='row collapse' id='xxx'>
+  <div class='col-md-10 offset-1'>
+    <div class='box'>
+      <div class='box-header dark'>
+        <h2>
+          Nuevo usuario
+          <span>
+            <a aria-expanded='false' data-toggle='collapse' href='#xxx' class="btn btn-xs danger">
+                Cancelar
+              </a>
+          </span>
+        </h2>
+      </div>
+      <div class='box-body'>
+        <div class="row">
+          <div class="col-md-8 offset-2">
+            {!! Form::open(['route'=> ['user.store'],"method"=>"POST"]) !!}
+            @include('user-admin::fields')
+            {!! Form::label('password', 'Password', ['class'=>'control-label']) !!}
+            {!! Form::text('password', null, ["class"=>"form-control", "id"=>"password", "required"=>"required"]) !!}
+
+            <br>
+            {!! Form::submit('Registrar', ['class'=>'btn btn-block btn-primary']) !!}
+            {!! Form::close() !!}
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</div>
+
+<div class="row">
+  <div class='col-md-10 offset-1'>
+    <div class='box'>
+      <div class='box-header dark'>
+        <h2>
+          Listado de usuarios
+          <span>
+            <a aria-expanded='false' data-toggle='collapse' href='#xxx' class="btn btn-xs primary">
+                Agregar usuarios
+            </a>
+          </span>
+        </h2>
+      </div>
+      <div class='box-body'>
+        <table class='table' id="users">
+          <thead>
+            <tr>
+              <th>#</th>
+              <th>Nombre</th>
+              <th>Correo</th>
+              <th>Bio</th>
+              <th>Tipo</th>
+              <th>Fecha de creación</th>
+              <th></th>
+            </tr>
+          </thead>
+        </table>
+      </div>
+      <div class='dker p-a text-right'></div>
+    </div>
+  </div>
+</div>
+@endsection
+
+
+@push('scripts')
+<script>
+  $(function() {
+    $('#users').DataTable({
+      processing: true,
+      serverSide: true,
+      pageLength: 25,
+      ajax: '{{ route("user.datatable") }}',
+      columns: [
+            {data: 'id', name: 'id'},
+            {data: 'name', name: 'name'},
+            {data: 'email', name: 'email'},
+            {data: 'short_bio', name: 'short_bio'},
+            {data: 'rol_id', name: 'rol_id'},
+            {data: 'created_at', name: 'created_at'},
+            {data: 'details_url', name: 'details_url'},
+        ]
+    });
+
+  });
+</script>
+@endpush
--
libgit2 0.26.0