/home/mip/mip/app/Modules/Client/Controllers/Reports/AuditTrailController.php
<?php
namespace QxCMS\Modules\Client\Controllers\Reports;
use Auth;
use Excel;
use Session;
use Datatables;
use Illuminate\Http\Request;
use QxCMS\Http\Controllers\Controller;
use QxCMS\Modules\Client\Repositories\Settings\Users\UserRepositoryInterface as User;
use QxCMS\Modules\Client\Repositories\Settings\Roles\PermissionRepositoryInterface as Permission;
class AuditTrailController extends Controller
{
protected $auth;
protected $user;
protected $permission;
protected $module_id = 13;
protected $prefix_name = '';
public function __construct(Permission $permission, User $user)
{
$this->user = $user;
$this->permission = $permission;
$this->auth = Auth::guard('client');
$this->prefix_name = config('modules.client');
$this->getDetails($this->module_id);
}
public function permissions()
{
return $this->permission->getPermission($this->module_id);
}
public function index()
{
$this->authorize('activated', $this->permissions());
$data['permissions'] = $this->permissions();
return view('Client::reports.audittrail.index', $data, $this->getFormOptions());
}
public function show(Request $request)
{
$this->authorize('activated', $this->permissions());
$data['permissions'] = $this->permissions();
$data['type'] = $this->user->getUserLogType($request);
$data['date'] = $this->user->getUserLogDate($request);
$count = $this->user->getUserLogCount($request);
if($request->report_type == 1){
$data['visibleUser'] = true;
$data['visibleLogin'] = false;
}else{
$data['visibleUser'] = false;
$data['visibleLogin'] = true;
}
if($count == 0){
return view('Client::no-data');
}else{
return view('Client::reports.audittrail.view', $data);
}
}
public function excel(Request $request) {
$reportType = $request->has('report_type');
$type = $this->user->getUserLogType($request);
$date = $this->user->getUserLogDate($request);
$userLogs = $this->user->getUserLog($request)->where(function($query) use ($request, $reportType){
if($reportType && $request->report_type == 1){
if ($request->has('user_id')) {
$query->where('user_id', $request->user_id);
}
}
if($reportType && $request->report_type == 2){
if ($request->has('user_id')) {
$user = $this->user->searchUserUsername($request->user_id);
$query->where('username', $user->email);
}
}
if ($request->has('start_date') && $request->has('end_date')) {
$query->whereRaw("date_format(created_at, '%Y-%m-%d') >= '{$request->start_date}'")
->whereRaw("date_format(created_at, '%Y-%m-%d') <= '{$request->end_date}'");
}
})->orderBy('created_at', 'desc')->get();
Excel::create('Audit trail report', function($excel) use ($userLogs, $request, $type, $date){
$excel->setTitle('Audit Trail Report');
$excel->setCreator('Quantum X, Inc.')->setCompany('Quantum X, Inc.');
$excel->setDescription('audit trail report');
$excel->sheet('sheet1', function($sheet) use ($userLogs, $request, $type, $date) {
if($request->report_type == 1){
$sheet->loadView('Client::reports.audittrail.includes.user-logs-table')
->with('userLogs', $userLogs)
->with('type', $type)
->with('date', $date);
}else{
$sheet->loadView('Client::reports.audittrail.includes.login-logs-table')
->with('userLogs', $userLogs)
->with('type', $type)
->with('date', $date);
}
});
})->export('xlsx');
}
public function getReportsDataByUser(Request $request)
{
$userLogs = $this->user->getUserLog($request);
$reportType = $request->has('report_type');
return Datatables::of($userLogs)
->filter(function ($query) use ($request, $reportType) {
if($reportType && $request->report_type == 1){
if ($request->has('user_id')) {
$query->where('user_id', $request->user_id);
}
}
if($reportType && $request->report_type == 2){
if ($request->has('user_id')) {
$user = $this->user->searchUserUsername($request->user_id);
$query->where('username', $user->email);
}
}
if ($request->has('start_date') && $request->has('end_date')) {
$query->whereRaw("date_format(created_at, '%Y-%m-%d') >= '{$request->start_date}'")
->whereRaw("date_format(created_at, '%Y-%m-%d') <= '{$request->end_date}'");
}
})
->editColumn('module', function($row) {
if(!isset($row->module)) return '';
else return $row->module->title;
})
->editColumn('action', function($row) {
if(!isset($row->action)) return '';
else return $row->action;
})
->editColumn('ipaddress', function($row) {
if(!isset($row->ipaddress)) return '';
else return $row->ipaddress;
})
->editColumn('username', function($row) {
if(!isset($row->username)) return '';
else return $row->username;
})
->editColumn('user', function($row) {
if($row->user == null) {
if(isset($row->name)) return $row->name;
else return '';
}
else return $row->user->name;
})
->make(true);
}
protected function getFormOptions()
{
$data['users'] = $this->user->userLists();
$data['type'] = Array('1' => 'Add, Edit, Delete of Data', '2' => 'User Access Logs');
return $data;
}
}