/home/mip/mip/app/Modules/Likod/Controllers/Settings/UserController.php
<?php

namespace QxCMS\Modules\Likod\Controllers\Settings;

use Illuminate\Http\Request;
use QxCMS\Modules\Likod\Requests\Settings\UserRequest;

use QxCMS\Http\Requests;
use QxCMS\Http\Controllers\Controller;
use QxCMS\Modules\Likod\Repositories\Settings\Users\UserRepositoryInterface as User;
use DB;
use Datatables;
use Auth;
use Lang;
use Gate;
class UserController extends Controller
{
    protected $user;
    protected $auth;
    protected $prefix_name = '';

    public function __construct(
       User $user
    )
    {
        $this->auth = Auth::guard('likod');
        $this->prefix_name = config('modules.likod');
        $this->user = $user;
    }
   
    public function index()
    {
        return view('Likod::settings.users.index');
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        $data['roles'] = $this->user->getRolelists();
        return view('Likod::settings.users.create', $data);
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(UserRequest $request)
    {
        $user = $this->user->create($request->all()); 
        session()->flash('success', 'Successfully added.');
        return redirect($this->prefix_name.'/settings/users');
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($hashid)
    {
        $id = decode($hashid);
        $data['roles'] = $this->user->getRolelists($this->auth->user()->role_id);
        $data['user'] = $this->user->findById($id);
        return view('Likod::settings.users.edit', $data);
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(UserRequest $request, $hashid)
    {
        $id = decode($hashid);
        $this->user->update($id, $request->all());
        return redirect($this->prefix_name.'/settings/users');
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($hashid)
    {
        $id = decode($hashid);
        if(!$this->user->delete($id))
        {
            return $this->user->getAjaxResponse('error', 'User is currently used and connot be deleted.');
        } 
        return $this->user->getAjaxResponse('success', 'Successfully deleted.');
    }

     /*
     * Datatables
     */
    public function getUsersData()
    {        
        $users = $this->user->getUsersWithRole(['id', 'role_id', 'name', 'email']);
        return Datatables::of($users)
            ->addColumn('action', function ($user) {
                $html_out = '';
                $html_out .= '<a href="'.url($this->prefix_name.'/settings/users/'.$user->hashid.'/edit').'" class="btn btn-xs btn-flat btn-warning" data-toggle="tooltip" data-placement="top" title="Edit"><i class="fa fa-pencil"></i></a>&nbsp;&nbsp;';
                $html_out .= '<a href="#delete-'.$user->hashid.'" class="btn btn-xs btn-flat btn-danger" id="btn-delete" data-action="'.url($this->prefix_name).'/settings/users/'.$user->hashid.'" data-toggle="tooltip" data-placement="top" title="Delete"><i class="fa fa-trash-o"></i></a>';
                return $html_out;
            })
            ->make(true);
    }
}