MINI Sh3ll
<?php
namespace App\Solar\Repositories\SupportAndPortal;
use App\Solar\Repositories\SupportAndPortal\SupportAndPortalInterface;
use App\Solar\Repositories\Spcl_user\SpclInterface;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use App\User;
use App\Models\Company;
use App\Models\CompanyUser;
use App\Models\Plant;
use App\Models\Role;
use App\Models\Module;
use App\Models\ModulePermission;
use App\Solar\Repositories\Zendesk\ZendeskInterface;
use App\Notifications\WelcomeMail;
use Faker\Factory as Faker;
use Illuminate\Support\Arr;
class SupportAndPortalRepository implements SupportAndPortalInterface {
/**
* @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 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();
$user->modules()->attach($request->module_id);
// if ($user->role_id == config('constants.role.portal_admin.id')) {
// $permissions = config('permissions_constants.permission.portal_admin');
// } elseif ($user->role_id == config('constants.role.portal_support.id')) {
// $permissions = config('permissions_constants.permission.portal_support');
// }
// $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')
// ]);
// }
// }
$companies[] = array(
'company_id' => $request->company_id,
'user_id' => $user->id
);
CompanyUser::insert($companies);
$user->password = $password;
$user->notify(new welcomeMail($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->verify_token = generateRandomString('20');
if($request->has('password')) {
$user->password = Hash::make($request->password);
}
if (isset($request->role_id)) {
$user->role_id = $request->role_id;
}
}
public function getUserRole() {
//Get roles name of portal_admin and portal_support from config
$roles = Arr::only(config('constants.role'), ['portal_admin', 'portal_support']);
foreach ($roles as $role) {
$role_names[] = $role['name'];
}
return Role::whereIn('role_name',$role_names)->get();
}
public function getSupportAndPortal($role_id, $name) {
//Get roles name of portal_admin and portal_support from config
$roles = Arr::only(config('constants.role'), ['portal_admin', 'portal_support']);
foreach ($roles as $role) {
$role_names[] = $role['name'];
}
$query = $this->user->query();
$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);
//Checked auth user role,if role not superadmin listing according to company
if(\Auth::user()->roles->role_name != config('constants.role.superadmin.name') && \Auth::user()->roles->role_name != config('constants.role.scpl_user.name')){
$company_id = \Auth::user()->company_users->pluck('company_id')->first();
$query = $this->user::whereHas('company_users',function($q) use($company_id){
$q->where('company_id',$company_id );
})->whereIn('role_id',$roles);
}
$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.'%');
});
});
return $query = $query->with('roles')->where('id','<>',\Auth::id())->orderBy('id', 'DESC')->get();
//return $query->except(\Auth::user()->id);
}
public function getCompany($id) {
return CompanyUser::where('user_id', $id)->pluck('company_id');
}
public function getCompanies()
{
$company = Company::with('company_domains');
//Checked auth user role,if role not superadmin listing according to company
if(\Auth::user()->roles->role_name != config('constants.role.superadmin.name') && \Auth::user()->roles->role_name != config('constants.role.scpl_user.name')){
$company_id = \Auth::user()->company_users->pluck('company_id')->first();
$company = Company::with('company_domains')->whereHas('company_user',function($q) use($company_id){
$q->where('company_id',$company_id );
});
}
$companyAttribute = collect($company->get())
->mapWithKeys(function ($item) {
$domain = $item->company_domains->pluck('domain_name')->toArray();
$domain_name = implode(',',$domain );
return [$item->id => ['data-id'=>$item->id,'data-comapny-domain' => $domain_name ]];
})->all();
$company = $company->pluck('company_name', 'id')->prepend('Select company', '');
return $data = array('company' =>$company,'companyAttribute'=>$companyAttribute );
}
}
OHA YOOOO