/home/mip/mip/app/Modules/Client/Controllers/Settings/RoleController.php
<?php

namespace QxCMS\Modules\Client\Controllers\Settings;

use DB;
use Auth;
use Datatables;

use QxCMS\Http\Requests;
use Illuminate\Http\Request;
use QxCMS\Http\Controllers\Controller;

use QxCMS\Modules\Client\Requests\Settings\RoleRequest;
use QxCMS\Modules\Client\Repositories\Settings\Roles\RoleRepositoryInterface as Role;
use QxCMS\Modules\Client\Repositories\Settings\Roles\PermissionRepositoryInterface as Permission;

class RoleController extends Controller
{
	protected $role;
    protected $permission;
    protected $prefix_name = '';

    public function __construct(Role $role, Permission $permission)
    {
    	$this->auth = Auth::guard('client');
    	$this->prefix_name = config('modules.client');
    	$this->role = $role;
    	$this->permission = $permission;
    }

    public function permissions()
    {
        return $this->permission->getPermission($this->role->getModuleId());
    }

    public function index()
    {
        $this->authorize('activated', $this->permissions());
    	$data['permissions'] = $this->permissions();
        $data['userLogs'] = $this->role->getUserLogs($this->role->getModuleId());
        return view('Client::settings.roles.index', $data);
    }

    public function create()
    {
        $this->authorize('create', $this->permissions());
        $data['permissions'] = $this->permissions();
        $data['role_permissions'] = $this->role->build_role_permissions();
        return view('Client::settings.roles.create', $data);
    }

    public function store(RoleRequest $request)
    {
        $this->authorize('create', $this->permissions());
        $role = $this->role->create($request->all());
        $request->session()->flash('success', 'Successfully added.');
        return redirect($this->prefix_name.'/settings/roles/'.$role->hashid.'/edit');
    }

    public function show($id)
    {
        $this->authorize('activated', $this->permissions());
        $data['permissions'] = $this->permissions();
    }

    public function edit($hashid)
    {
        $this->authorize('update', $this->permissions());
        $id = decode($hashid);
        $data['permissions'] = $this->permissions();
        $data['role'] = $this->role->findById($id);
        $data['role_permissions'] = $this->role->build_role_permissions($id);  
        $data['userLogs'] = $this->role->getUserLogs($this->role->getModuleId(), $id);      
        return view('Client::settings.roles.edit',$data);
    }

    public function update(RoleRequest $request, $hashid)
    {
        $this->authorize('update', $this->permissions());
        $id = decode($hashid);
        $role = $this->role->update($id, $request->all());
        return redirect($this->prefix_name.'/settings/roles/'.$role->hashid.'/edit');
    }

    public function destroy($hashid)
    {        
        $this->authorize('delete', $this->permissions());
        $id = decode($hashid);
        return $this->role->delete($id, $this->auth->user()->client->id);   
    }

    /*
    * Datatables
    */
    public function getRolesData(Request $request)
    {        
        $roles = $this->role->datatablesIndex();
        $permissions = $this->permissions();
        return Datatables::of($roles)
            ->addColumn('action', function ($role) use ($permissions) {
                $html_out = '';
                if(!in_array($role->id, $this->role->getdefaultIDs())) {
                    if($this->auth->user()->can('update', $permissions)) {
                        $html_out .= '<a href="'.url($this->prefix_name.'/settings/roles/'.$role->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;';
                    }
                    if($this->auth->user()->can('delete', $permissions)) {
                        $html_out .= '<a href="#delete-'.$role->hashid.'" class="btn btn-xs btn-flat btn-danger" id="btn-delete" data-action="'.url($this->prefix_name).'/settings/roles/'.$role->hashid.'" data-toggle="tooltip" data-placement="top" title="Delete"><i class="fa fa-trash-o"></i></a>';
                    } 
                } else {
                    if($this->auth->user()->can('update', $permissions)) {
                        $html_out = '<a href="'.url($this->prefix_name.'/settings/roles/'.$role->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;';
                    }
                }
                return $html_out;
            })
            ->make(true);
    }
}