MINI Sh3ll
<?php
namespace App\Solar\Repositories\Spcl_user;
use App\Solar\Repositories\Spcl_user\SpclInterface;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use App\User;
use App\Models\Role;
use App\Models\Module;
use App\Models\ModulePermission;
use App\Notifications\WelcomeMail;
use App\Solar\Repositories\Zendesk\ZendeskInterface;
use Faker\Factory as Faker;
use Illuminate\Support\Arr;
class SpclRepository implements SpclInterface {
/**
* @var User
*/
private $user;
private $zendesk;
/**
* UserRepository constructor.
* @param User $user
*/
public function __construct(User $user,ZendeskInterface $zendesk) {
$this->user = $user;
$this->zendesk = $zendesk;
}
public function getRoles() {
return Role::where('role_name','SCPL User')->orWhere('role_name','Super Admin')->pluck('role_name', 'id')->prepend('Select Role', '');
}
public function getModules() {
return Module::get();
}
public function getAll() {
return $this->user->with('roles')->get();
}
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);
$user->modules()->attach($request->module_id);
//Send welcom mail to user
$user->password = $password;
$user->notify(new welcomeMail($user));
return $user;
}
public function find($id) {
return $this->user->newInstance()->findOrFail($id);
}
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);
}
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')
]);
}
}
return $user;
}
public function delete($id) {
$user = $this->user->findOrFail($id);
$user->delete();
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->role_id = $request->role_id;
$user->status = $request->status;
$user->verify_token = generateRandomString('20');
if($request->has('password')) {
$user->password = Hash::make($request->password);
}
}
public function getSCPLUser($role_id, $name) {
//Get roles name of portal_admin and portal_support from config
$roles = Arr::only(config('constants.role'), ['superadmin', 'scpl_user']);
foreach ($roles as $role) {
$role_names[] = $role['name'];
}
$query = $this->user->query();
$query->when($role_id != '', function($q) use($role_id){
return
$q->where('role_id', '=', $role_id);
});
$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.'%');
});
});
$roles = Role::whereIn('role_name',$role_names)->pluck('id');
//Get all user having role as portal_admin and portal_support
$query->whereIn('role_id', $roles);
return $query->with('roles')->where('email','<>',config('constants.superAdmin.email'))->where('id','<>',\Auth::id())->orderBy('id', 'DESC')->get();
}
public function getUserRole() {
return Role::where('role_name','SCPL User')->orWhere('role_name','Super Admin')->get();
}
}
OHA YOOOO