MINI Sh3ll
<?php
namespace App\Solar\Repositories\User;
use App\Solar\Repositories\User\UserInterface;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use App\User;
use App\Models\Company;
use App\Models\CompanyUser;
use App\Models\State;
use App\Models\Plant;
use App\Models\Role;
use App\Notifications\InviteUser;
use App\Models\Module;
use App\Models\ModulePermission;
use App\Models\SmsSetting;
use App\Solar\Repositories\Zendesk\ZendeskInterface;
use Faker\Factory as Faker;
use App\Models\PlantUser;
class UserRepository implements UserInterface {
/**
* @var User
*/
private $user;
private $zendesk;
/**
* UserRepository constructor.
* @param User $user
*/
public function __construct(User $user,ZendeskInterface $zendesk) {
$this->user = $user;
$this->zendesk = $zendesk;
}
/*
* Get all company users data
*/
public function getUser() {
$users =CompanyUser::with('user', 'company')->whereHas('user', function($query) {
$query->where('is_invited', '=', 1);
$query->where('id','<>',\Auth::id());
})->get();
if(\Auth::user()->roles->id != config('constants.role.superadmin.id') && \Auth::user()->roles->id != config('constants.role.scpl_user.id')){
$company_id = \Auth::user()->company_users->pluck('company_id')->all();
$users = CompanyUser::with('user', 'company')->whereIn('company_id',$company_id)->whereHas('user', function($query) {
$query->where('is_invited', '=', 1);
$query->where('id','<>',\Auth::id());
})->get();
}
return $users;
}
public function find($id) {
return $this->user->newInstance()->with('module_permissions')->findOrFail($id);
}
public function store($request) {
$user = $this->user;
$password = generate_password();
$request->request->add(['password' => $password]);
$this->buildObject($user, $request);
$faker = Faker::create();
$user->otp = $faker->numberBetween(10000, 99999);
$user->save();
// send_otp funtion to send otp to phone number
send_otp($user->mobile, $user->otp);
ModulePermission::where('user_id', $user->id)->delete();
if ($user->role_id == config('constants.role.company_admin.id')) {
$permissions = config('permissions_constants.permission.company_admin');
} elseif ($user->role_id == config('constants.role.user.id')) {
$permissions = config('permissions_constants.permission.user');
}
$count = count($permissions);
if ($count > 0) {
for ($i = 0; $i < $count; $i++) {
$module_id = getModule($permissions[$i]['module_code']);
ModulePermission::updateOrCreate([
'module_id' => $module_id,
'user_id' => $user->id,
'has_access' => 1,
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s')
]);
}
}
$user->company_user()->attach($request->company_id);
//Send invite mail to user
$user->password = $password;
$user->notify(new InviteUser($user));
return $user;
}
public function update($id, $request) {
$user = $this->user->findOrFail($id);
$this->buildObject($user, $request);
$user->save();
if(!empty($user->zendesk_id)){
$name = $request->first_name.' '.$request->last_name;
$updateUser = $this->zendesk->updateUser($user->zendesk_id,$name);
}
$modules = $request->module_code;
if($request->has('module_id')) {
$user->modules()->sync($request->module_id);
foreach ($request->module_id as $module_id) {
ModulePermission::where('user_id', '=', $user->id)
->where('module_id', '=', $module_id)
->update([
'has_access' => 1,
'created_at' => date('Y-m-d H:i:s'),
'updated_at' => date('Y-m-d H:i:s')
]);
}
}
// if ($modules != null) {
// ModulePermission::where('user_id', $user->id)->delete();
// $count = count($modules);
// if ($count > 0) {
// for ($i = 0; $i < $count; $i++) {
// $module_id = getModule($modules[$i]);
// ModulePermission::updateOrCreate([
// 'module_id' => $module_id,
// 'user_id' => $user->id,
// 'has_access' => 1,
// 'created_at' => date('Y-m-d H:i:s'),
// 'updated_at' => date('Y-m-d H:i:s')
// ]);
// }
// }
// }
return $user;
}
/*
* Delete resource details
*/
public function delete($id) {
$user = $this->user->findOrFail($id);
$user->delete();
return $user;
}
/*
* Destroy resource details
*/
public function destroy($id) {
$user = $this->user->findOrFail($id);
$user->forceDelete();
return $user;
}
public function buildObject($user, $request) {
$user->first_name = ucfirst($request->first_name);
$user->middle_name = ucfirst($request->middle_name);
$user->last_name = ucfirst($request->last_name);
$user->email = $request->email;
$user->mobile = $request->mobile;
$user->status = $request->status;
if(empty($user->id)){
$user->role_id = config('constants.role.user.id');
}
if($request->has('inviteUser')) {
$user->invited_by = \Auth::id();
$user->is_invited = 1;
}
if($request->has('password')) {
$user->password = Hash::make($request->password);
}
$user->verify_token = generateRandomString('20');
$url = $request->url;
if ($url == 'company_user') {
$user->role_id = config('constants.role.company_admin.id');
}
}
public function getRegistered($name,$company_id , $role)
{
$userRoleId = array(config('constants.role.superadmin.id'),config('constants.role.scpl_user.id'));
$query = $this->user->query();
//Checked auth user role,if role not superadmin listing according to company
if(\Auth::user()->roles->id != config('constants.role.superadmin.id') && \Auth::user()->roles->id != config('constants.role.scpl_user.id')){
$company_id = \Auth::user()->company_users->pluck('company_id')->all();
$users = CompanyUser::where('company_id',$company_id)->pluck('user_id')->all();
$query = $query->whereIn('id',$users);
}
$query->whereNotIn('role_id', $userRoleId);
$query->where('is_email_verified',1);
$query->where('is_mobile_verified',1);
$query->where(function ($qr) use($name) {
$qr->when($name != '', function($q) use($name){
return
$q->where('first_name', 'LIKE', '%'.$name.'%')
->orWhere('middle_name', 'LIKE', '%'.$name.'%')
->orWhere('last_name', 'LIKE', '%'.$name.'%');
});
});
$query->when($role != '', function($qrl) use($role){
return
$qrl->where('role_id', $role);
});
$query->when($company_id != '', function($q) use($company_id){
$q->whereHas('company_users', function($query) use($company_id) {
$query->when($company_id != '',
function($q) use($company_id){
return $q->where('company_id',$company_id);
});
});
})
->withCount('company_users')->with('company_users.company');
return $query->where('id','<>',\Auth::id())->orderBy('id', 'DESC')->get();
}
public function getNonRegistered($name,$company_id ,$role)
{
$userRoleId = array(config('constants.role.superadmin.id'),config('constants.role.scpl_user.id'));
$query = $this->user->query();
//Checked auth user role,if role not superadmin listing according to company
if(\Auth::user()->roles->id != config('constants.role.superadmin.id') && \Auth::user()->roles->id != config('constants.role.scpl_user.id')){
$company_id = \Auth::user()->company_users->pluck('company_id')->all();
$users = CompanyUser::where('company_id',$company_id)->pluck('user_id')->all();
$query = $query->whereIn('id',$users);
}
$query->whereNotIn('role_id', $userRoleId);
$query->Where(function ($qy) {
$qy->where('is_email_verified', 0)
->Orwhere('is_mobile_verified',0);});
$query->where(function ($qr) use($name) {
$qr->when($name != '', function($q) use($name){
return
$q->where('first_name', 'LIKE', '%'.$name.'%')
->orWhere('middle_name', 'LIKE', '%'.$name.'%')
->orWhere('last_name', 'LIKE', '%'.$name.'%');
});
});
$query->when($role != '', function($qrl) use($role){
return
$qrl->where('role_id', $role);
});
$query->when($company_id != '', function($q) use($company_id){
$q->whereHas('company_users', function($qry) use($company_id) {
return $qry->where('company_id',$company_id);
});
})
->withCount('company_users')->with('company_users.company');
return $query->where('id','<>',\Auth::id())->orderBy('id', 'DESC')->get();
}
public function update_profile($request) {
$id = \Auth::id();
$user = $this->user->findOrFail($id);
$user->first_name = ucfirst($request->first_name);
$user->middle_name = ucfirst($request->middle_name);
$user->last_name = ucfirst($request->last_name);
$user->save();
if(!empty($user->zendesk_id)){
$name = $request->first_name.' '.$request->last_name;
$updateUser = $this->zendesk->updateUser($user->zendesk_id,$name);
}
return $user;
}
public function updatePassword($request) {
$user = \Auth::user();
$checkCurerent = Hash::check($request->current_password, $user->password);
if ($checkCurerent) {
$check = Hash::check($request->password, $user->password);
if ($check != true) {
$user = $this->user->findOrFail($user->id);
$user->password = bcrypt($request->password);
$user->save();
return 1;
}
return 2;
}
return 0;
}
public function getUserCompanies($id) {
return CompanyUser::with('company')->where('user_id',$id)->get();
}
//check Email Already Exist
public function checkEmail($email) {
return User::where('email',$email)->get();
}
//check Number Already Exist
public function checkMobile($mobile) {
return User::where('mobile',$mobile)->get();
}
public function getCompany() {
if(\Auth::user()->role_id == config('constants.role.superadmin.id') || \Auth::user()->role_id == config('constants.role.scpl_user.id')) {
$company = Company::where('status','1')->orderBy('id', 'DESC')->get();
}else{
$company_id = CompanyUser::where('user_id',\Auth::id())->pluck('company_id')->all();
$company = Company::where('status','1')->whereIn('id',$company_id)->orderBy('id', 'DESC')->get();
}
return $company;
}
public function getPlants($company_id) {
if(\Auth::user()->role_id == config('constants.role.user.id')) {
$plantdetails = PlantUser::where('user_id', \Auth::id())
->with(['plant' => function($q) use($company_id) {
$q->where('company_id', $company_id)
->where('status','1');
}])
->get();
foreach ($plantdetails as $plantdetail) {
$plants[] = $plantdetail->plant;
}
} else
{
$plants = Plant::where('company_id',$company_id)->where('status','1')->get();
}
return $plants;
}
/*
* Get Invited by Username
*/
public function getUserName($invited_by) {
return $this->user->where('id',$invited_by)->first();
}
/*
* Get state by country ID
*/
public function getState($request) {
return State::where('country_id',$request->country)->get();
}
/*
* Get SMS setting details
*/
public function getSettingDetails() {
return SmsSetting::first();
}
/*
* Get SMS setting details
*/
public function storeSettingDetails($request, $id) {
$id = decrypt($id);
$smsSetting = SmsSetting::findOrFail($id);
$url = $request->url;
$hcode = htmlspecialchars($url, ENT_QUOTES);
$smsSetting->url = $hcode;
$smsSetting->mobile_number_parameter = $request->mobile;
$smsSetting->message_parameter = $request->message;
$smsSetting->username_parameter = $request->username_key;
$smsSetting->username_key_value = $request->username_value;
$smsSetting->password_parameter = $request->password_key;
$smsSetting->password_key_value = $request->password_value;
$smsSetting->senderid_parameter = $request->senderid_key;
$smsSetting->senderid_key_value = $request->senderid_value;
$smsSetting->save();
}
}
OHA YOOOO