/home/mip/mip/app/Modules/Client/Repositories/Settings/Users/UserRepository.php
<?php
namespace QxCMS\Modules\Client\Repositories\Settings\Users;
use Carbon\Carbon;
use Illuminate\Http\Request;
use QxCMS\Modules\AbstractRepository;
use Illuminate\Support\Arr;
use QxCMS\Modules\Likod\Models\Clients\User;
use QxCMS\Modules\Client\Models\Settings\UserLogs\UserLogs;
use QxCMS\Modules\Client\Models\Settings\LoginLogs\LoginLogs;
use QxCMS\Modules\Client\Repositories\Settings\Users\UserRepositoryInterface;
class UserRepository extends AbstractRepository implements UserRepositoryInterface
{
protected $model;
protected $log;
protected $loginlogs;
function __construct(User $model, UserLogs $log, LoginLogs $loginlogs)
{
$this->model = $model;
$this->log = $log;
$this->loginlogs = $loginlogs;
}
public function tokenInputLists()
{
return $this->model->select('id', 'name')->where('status', '1');
}
public function create(array $request)
{
$user = auth()->user();
$model = $this->model->fill($this->makeUser($request));
$model->save();
$this->log->saveLog(['action' => 'Create', 'module_id' => $this->getModuleId(), 'user_id' => $user->id, 'data_id' => $model->id]);
return $model;
}
public function makeUser(array $request)
{
$request['client_id'] = auth('client')->user()->client->id;
$request['password'] = bcrypt($request['password_confirmation']);
return $request;
}
public function update($id, array $request)
{
$user = auth()->user();
$model = $this->findById($id);
$model->fill($this->changePassword($request));
if(count($model->getDirty()) > 0) {
$model->save();
session()->flash('success', 'Successfully updated.');
$this->log->saveLog(['action' => 'Update', 'module_id' => $this->getModuleId(), 'user_id' => $user->id, 'data_id' => $model->id]);
}
return $model;
}
public function changePassword(array $request)
{
$confirm_password = $request['password_confirmation'];
if(!empty($confirm_password)) {
$request['password'] = bcrypt($confirm_password);
return $request;
}
return Arr::except($request, ['password_confirmation','password']);
}
public function delete($id)
{
$user = auth()->user();
$model = $this->findById($id);
if($model->type_id == 1) {
return $this->getAjaxResponse('error', 'Primary user connot be deleted.');
}
$model->delete();
$this->log->saveLog(['action' => 'Delete', 'module_id' => $this->getModuleId(), 'user_id' => $user->id, 'data_id' => $model->id]);
return $this->getAjaxResponse('success', 'Successfully deleted.');
}
public function select2($params = array())
{
if(!isset($params['name'])) $params['name'] = '';
if(!isset($params['user_type'])) $params['user_type'] = '';
$model = $this->model
->select(['name as text', 'id'])
->searchUserType($params['user_type'])
->searchByName($params['name'])
->get();
if(isset($params['placeholder'])) {
$placeholder = array('text' => ' - All -', 'id' => '-1');
if(isset($params['placeholder']['text'])) $placeholder = array('text' => $params['placeholder']['text'], 'id' => '-1');
return response(array_prepend($model->toArray(), $placeholder))
->header('Content-Type', 'application/json');
}
return response($model->toArray())
->header('Content-Type', 'application/json');
}
public function datatablesIndex($params = array())
{
$roleIds = array();
if(auth()->user()->role_id != $params['developer_id'])
{
$roleIds = $params['hiddenRoleIds'];
}
return $this->model
->select(['id', 'role_id', 'name', 'email', 'status'])
->with('role')
->where('client_id', auth()->user()->client->id)
->filterUsersByRole($roleIds)
->isNotSubUser();
}
public function userLists()
{
return $this->model->orderBy('name','asc')->clientUser()->pluck('name', 'id')->toArray();
}
public function searchUserUsername($id)
{
return $this->model->find($id);
}
public function getUserLogType(Request $request)
{
if($request->report_type == 1){
return 'Add, Edit, Delete of Data';
}else{
return 'User Access Logs';
}
}
public function getUserLogDate(Request $request)
{
$start = Carbon::createFromFormat('Y-m-d', $request->start_date)->format('M j, Y');
$end = Carbon::createFromFormat('Y-m-d', $request->end_date)->format('M j, Y');
return $start.' - '.$end;
}
public function getUserLog(Request $request)
{
if($request->report_type == 1){
return $this->log->with('user', 'module')->select('*');
}else if($request->report_type == 2){
return $this->loginlogs->select('*');
}
}
public function getUserLogCount(Request $request)
{
if($request->report_type == 1){
if($request->user_id == ''){
return $this->log->with('user')->whereRaw("date_format(created_at, '%Y-%m-%d') >= '{$request->start_date}'")
->whereRaw("date_format(created_at, '%Y-%m-%d') <= '{$request->end_date}'")->count();
}else{
return $this->log->with('user')->where('user_id', $request->user_id)->whereRaw("date_format(created_at, '%Y-%m-%d') >= '{$request->start_date}'")
->whereRaw("date_format(created_at, '%Y-%m-%d') <= '{$request->end_date}'")->count();
}
}else if($request->report_type == 2){
if($request->user_id == ''){
return $this->loginlogs->whereRaw("date_format(created_at, '%Y-%m-%d') >= '{$request->start_date}'")
->whereRaw("date_format(created_at, '%Y-%m-%d') <= '{$request->end_date}'")->count();
}else{
$user = $this->model->find($request->user_id);
return $this->loginlogs->where('username', $user->email)->whereRaw("date_format(created_at, '%Y-%m-%d') >= '{$request->start_date}'")
->whereRaw("date_format(created_at, '%Y-%m-%d') <= '{$request->end_date}'")->count();
}
}
}
}