/home/mip/mip/app/Modules/Client/Controllers/Principals/PrincipalController.php
<?php
namespace QxCMS\Modules\Client\Controllers\Principals;
use Illuminate\Http\Request;
use QxCMS\Http\Controllers\Controller;
use DB;
use Auth;
use Datatables;
use QxCMS\Modules\Client\Requests\Principals\PrincipalRequest;
use QxCMS\Modules\Client\Repositories\Principals\PrincipalRepositoryInterface as Principal;
use QxCMS\Modules\Client\Repositories\Settings\Roles\PermissionRepositoryInterface as Permission;
class PrincipalController extends Controller
{
protected $principal;
protected $permission;
protected $auth;
protected $prefix_name = '';
public function __construct(
Principal $principal,
Permission $permission
)
{
$this->principal = $principal;
$this->permission = $permission;
$this->auth = Auth::guard('client');
$this->prefix_name = config('modules.client');
}
public function permissions()
{
return $this->permission->getPermission($this->principal->getModuleId());
}
public function index()
{
$this->authorize('activated', $this->permissions());
$data['permissions'] = $this->permissions();
$data['userLogs'] = $this->principal->getUserLogs($this->principal->getModuleId());
return view('Client::principals.index', $data);
}
public function show($id)
{
$this->authorize('activated', $this->permissions());
}
public function overview($hashid)
{
$this->authorize('activated', $this->permissions());
$data['permissions'] = $this->permissions();
$id = decode($hashid);
$data['principal'] = $this->principal->with(['contacts'])->find($id);
return view('Client::principals.overview', $data);
}
public function create()
{
$this->authorize('create', $this->permissions());
$data['statuses'] = $this->principal->getPrincipalStatusLists();
return view('Client::principals.create', $data);
}
public function store(PrincipalRequest $request)
{
$this->authorize('create', $this->permissions());
$input = $request->all();
$input['client_id'] = $this->auth->user()->client->id;
$principal = $this->principal->create($input);
if(!$request->ajax()) {
session()->flash('success', 'Successfully added.');
return redirect($this->prefix_name.'/principals/'.$principal->hashid.'/edit');
}
return response(
array('message'=>'Successfully added.','type'=>'success', 'row' => $principal)
)->header('Content-Type', 'application/json');
}
public function edit($hashid)
{
$this->authorize('update', $this->permissions());
$id = decode($hashid);
$data['permissions'] = $this->permissions();
$data['statuses'] = $this->principal->getPrincipalStatusLists();
$data['principal'] = $this->principal->findById($id);
$data['userLogs'] = $this->principal->getUserLogs($this->principal->getModuleId(), $id);
return view('Client::principals.edit', $data);
}
public function update(PrincipalRequest $request, $hashid)
{
$this->authorize('update', $this->permissions());
$id = decode($hashid);
$input = $request->all();
$input['client_id'] = $this->auth->user()->client->id;
$principal = $this->principal->update($id, $input);
return redirect($this->prefix_name.'/principals/'.$principal->hashid.'/edit');
}
public function destroy($hashid)
{
$this->authorize('delete', $this->permissions());
$id = decode($hashid);
return $this->principal->delete($id);
}
public function select2(Request $request)
{
return $this->principal->select2($request->all());
}
public function login(Request $request, $hashid)
{
$id = decode($hashid);
$client = $this->auth->user()->client;
$root_dir = $client->root_dir;
session(['root_dir'=>$root_dir]);
if (Auth::guard('employer')->loginUsingId($id)) {
$user = Auth::guard('employer')->user();
if($user->status == 'Active')
{
return redirect('/employer/'.$root_dir.'/dashboard');
} else {
Auth::guard('employer')->logout();
$request->session()->regenerate();
session()->flash('error_logout', 'This principal is inactive.');
return redirect(config('modules.employer').'/'.$root_dir.'/auth/login');
}
} else {
return "not login";
}
}
/*
* Datatables
*/
public function getPrincipalsData()
{
$principals = $this->principal->select([
'principals.id',
'principals.name',
'principals.email',
'principals.status',
'principals.address',
'principals.contact_details'
]);
$permissions = $this->permissions();
return Datatables::of($principals)
->editColumn('status', function($principal) {
if($principal->status == 'Active') return '<span class="label label-success">Active</span>';
else return '<span class="label label-danger">Inactive</span>';
})
->addColumn('details', function($model) {
$html_out = '';
if($model->name != "") {
$html_out .= '<a href="'.url($this->prefix_name.'/principals/'.$model->hashid.'/overview').'"><font size="4">'.$model->name.'</font></a>';
}
if($model->address != '')
{
$html_out .= "<br /><i class=\"fa fa-map-marker\"></i> ".$model->address;
}
if($model->email != '')
{
$html_out .= "<br /><i class=\"fa fa-envelope\"></i> ".$model->email;
}
if($model->contact_details != '')
{
if(is_array($model->contact_details)) {
$html_out .= "<br /><i class=\"fa fa-phone\"></i> ".implode(', ', $model->contact_details);
}
}
return $html_out;
})
->filterColumn('details', function($query, $keyword) {
$query->whereRaw("name like ?", ["%{$keyword}%"]);
})
->addColumn('action', function ($principal) use ($permissions){
$html_out = '';
if($this->auth->user()->can('update', $permissions)) {
$html_out .= '<a href="'.url($this->prefix_name.'/principals/'.$principal->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>';
}
if($this->auth->user()->can('delete', $permissions)) {
$html_out .= ' <a href="#delete-'.$principal->hashid.'" class="btn btn-xs btn-flat btn-danger" id="btn-delete" data-action="'.url($this->prefix_name).'/principals/'.$principal->hashid.'" data-toggle="tooltip" data-placement="top" title="Delete"><i class="fa fa-trash-o"></i></a>';
}
/* if($this->auth->user()->role_id == 1) {
$html_out .= ' <a href="'.url($this->prefix_name.'/principals/'.$principal->hashid.'/login').'" class="btn btn-xs btn-flat btn-success" data-toggle="tooltip" data-placement="top" title="Login" target="_blank"><i class="fa fa-sign-in"></i></a>';
}*/
return $html_out;
})
->orderColumn('details', 'name $1')
->make(true);
}
}