alientronics/fleetany-web-admin

View on GitHub
src/Alientronics/FleetanyWebAdmin/Controllers/RoleController.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

namespace Alientronics\FleetanyWebAdmin\Controllers;

use App\Http\Controllers\Controller;
use Alientronics\FleetanyWebAdmin\Repositories\RoleRepositoryEloquent;
use Lang;
use Log;
use Prettus\Validator\Exceptions\ValidatorException;
use Illuminate\Support\Facades\Auth;
use Alientronics\CachedEloquent\Role;
use Kodeine\Acl\Models\Eloquent\Permission;

class RoleController extends Controller
{

    protected $roleRepo;
    protected $inputs;
    
    protected $fields = [
        'id',
        'name',
        'description'
    ];
    
    public function __construct(RoleRepositoryEloquent $roleRepo)
    {
        parent::__construct();

        $this->middleware('admin');
        $this->roleRepo = $roleRepo;
        
        $this->inputs = $this->request->all();
        $this->inputs['company_id'] = Auth::user()['company_id'];
    }

    public function index()
    {
        $filters = $this->helper->getFilters($this->request->all(), $this->fields, $this->request);

        $roles = $this->roleRepo->results($filters);

        return view("role.index", compact('roles', 'filters'));
    }
    
    public function create()
    {
        $role = new Role();
        $role_permissions = [];

        $permissions = Permission::get();
    
        $permissiondialog = [];
        $permissiondialog['permissions'] = Permission::lists('name', 'id');
        $permissiondialog['permissions']->splice(0, 0, ["" => ""]);
        $permissiondialog['role_id'] = "";
        
        return view("role.edit", compact('role', 'role_permissions', 'permissions', 'permissiondialog'));
    }

    public function store()
    {
        try {
            $inputs = $this->request->all();
            $validateRole = $this->roleRepo->validateRole($inputs);
            if (!empty($validateRole)) {
                return $this->redirect->back()->with('message', $validateRole);
            }
            
            $role = $this->roleRepo->create($inputs);
            $this->roleRepo->updateRolePermissions($role->id, $inputs['permissions']);
            
            //Fix Segmentation fault at phpunit --coverage-clover
            $table = Lang::get('admin.Role');
            return $this->redirect->to('role')->with('message', Lang::get(
                'general.succefullcreate',
                ['table'=> $table]
            ));
        } catch (ValidatorException $e) {
            return $this->redirect->back()->withInput()
                   ->with('errors', $e->getMessageBag());
        }
    }
    
    public function edit($idRole)
    {
        $role = $this->roleRepo->find($idRole);

        $role_permissions = [];
        foreach ($role->permissions->toArray() as $rolePerm) {
            $role_permissions[] = $rolePerm['id'];
        }
        
        $permissions = Permission::get();
    
        $permissiondialog = [];
        $permissiondialog['permissions'] = Permission::lists('name', 'id');
        $permissiondialog['permissions']->splice(0, 0, ["" => ""]);
        $permissiondialog['role_id'] = $role->id;
        
        return view("role.edit", compact(
            'role',
            'role_permissions',
            'permissions',
            'permissiondialog'
        ));
    }
    
    public function update($idRole)
    {
        try {
            $role = $this->roleRepo->find($idRole);
            $inputs = $this->request->all();
            $validateRole = $this->roleRepo->validateRole($inputs, $idRole);
            if (!empty($validateRole)) {
                return $this->redirect->back()->with('message', $validateRole);
            }
            $this->roleRepo->update($inputs, $idRole);
            $this->roleRepo->updateRolePermissions($role->id, $inputs['permissions']);
        
            //Fix Segmentation fault at phpunit --coverage-clover
            $table = Lang::get('admin.Role');
            return $this->redirect->to('role')->with('message', Lang::get(
                'general.succefullupdate',
                ['table'=> $table]
            ));
        } catch (ValidatorException $e) {
            return $this->redirect->back()->withInput()
                   ->with('errors', $e->getMessageBag());
        }
    }
    
    public function destroy($idRole)
    {
        $role = $this->roleRepo->find($idRole);
        if ($role) {
            Log::info('Delete field: '.$idRole);
            $this->roleRepo->delete($idRole);
            return $this->redirect->to('role')->with('message', Lang::get("general.deletedregister"));
        } else {
            return $this->redirect->to('role')->with('message', Lang::get("general.deletedregistererror"));
        }
    }

    public function createPermission()
    {
        try {
            $inputs = $this->request->all();
            $validatePermission = $this->roleRepo->validatePermission($inputs);
            if (!empty($validatePermission)) {
                return $this->redirect->back()->with('message', $validatePermission);
            }
            
            $this->roleRepo->createPermission($inputs);
            
            $urlBack = empty($inputs['permissiondialog_role_id']) ? 'role/create' :
                                    'role/'.$inputs['permissiondialog_role_id'].'/edit';
            
            //Fix Segmentation fault at phpunit --coverage-clover
            $table = Lang::get('admin.Permission');
            return $this->redirect->to($urlBack)->with('message', Lang::get(
                'general.succefullcreate',
                ['table'=> $table]
            ));
        } catch (ValidatorException $e) {
            return $this->redirect->back()->withInput()
                   ->with('errors', $e->getMessageBag());
        }
    }
}