| Server IP : 34.87.99.72 / Your IP : 216.73.217.31 Web Server : Apache/2.4.46 (Unix) OpenSSL/1.1.1n System : Linux zlock-bitnami-lamp-prod-v2-vm 4.19.0-16-cloud-amd64 #1 SMP Debian 4.19.181-1 (2021-03-19) x86_64 User : bitnami ( 1000) PHP Version : 7.4.18 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : OFF Directory : /opt/bitnami/apache/htdocs/app/app/Http/Services/ |
Upload File : |
<?php
namespace App\Http\Services;
use App\Models\User;
use App\Models\UserSocialize;
use App\Http\Services\UserCreditService;
use Auth;
use DB;
use Hash;
use Illuminate\Contracts\Auth\PasswordBroker;
use Illuminate\Validation\ValidationException;
use App\Notifications\AccountActivateNotification;
use Password;
use Queriplex;
use Pylon\Exceptions\BadRequestException;
use App\Exports\BasicExcelExport;
use Maatwebsite\Excel\Facades\Excel;
use App\Classes\GCSFileUploader;
class UserService
{
public function __construct(
UserCreditService $userCreditService
)
{
$this->userCreditService = $userCreditService;
}
public function userQueriplex($query, Array $request)
{
$order_mode = ( $request['sortDesc'] ?? false ) ? 'DESC' : 'ASC';
$search_by = $request['searchBy'] ?? null;
$queriplex = Queriplex::make($query)
->withFilters($request,[
'id' => 'id',
'activity' => fn($query, $value) => $query->whereActivity($value),
'role_id' => 'role_id',
'mobile_num' => 'mobile_num',
'search' => ( fn($query, $value) => self::userSearchQuery($query,$value,$search_by) ),
])
->withSort($request['sortBy'] ?? null, [
"id" => fn($query) => $query->orderBy('id', $order_mode),
"register_time" => fn($query) => $query->orderBy('created_at', $order_mode),
"total_credit" => fn($query) => $query->orderBy('total_credit', $order_mode)->orderBy('id'),
]);
return $queriplex->apply();
}
public function userSearchQuery($query, $value, $search_by)
{
$common_searchable = [
'full_name',
'unique_id',
'mobile_num',
'email',
'created_at',
];
if(in_array($search_by,$common_searchable)){
if($search_by != "created_at")
$query->search($search_by,$value);
else
{
$query->where('created_at', '>=', $value[0]);
if(sizeof($value)>1)
$query->where('created_at', '<=', $value[1]);
}
}
return null;
}
public function userList(Array $request)
{
$users = User::query()->withSum('credits as total_credit','amount');
$users = self::userQueriplex($users, $request);
$request['type'] = $request['type'] ?? null;
if($request['type'] != 'find_mobile')
{
$result = $users->whereNotIn('role_id', [ User::ROLE_SUPER_ADMIN, User::ROLE_AA_ADMIN ])
->with(['partnerPackage'])
->paginate($request['itemsPerPage'] ?? null);
}
else
{
$result = $users->with(['partnerPackage'])
->paginate($request['itemsPerPage'] ?? null);
}
$result->each(function($item){
$item->total_credit = $item->total_credit ?: '0.00';
});
return $result;
}
public function exportUserList(Array $request) : GCSFileUploader
{
$users = User::query()->withSum('credits as total_credit','amount');
$users = self::userQueriplex($users, $request);
$result = $users->whereNotIn('role_id', [ User::ROLE_SUPER_ADMIN, User::ROLE_AA_ADMIN ])
->get()
->each(function($item){
$item->total_credit = $item->total_credit ?: '0.00';
});
$export = new BasicExcelExport($result);
$file_name = now()->format('Ymdhms')."-User-List.xlsx";
Excel::store($export, $file_name);
$fileUploader = new GCSFileUploader($file_name);
$fileUploader->setDirectory('reports/user-list');
$fileUploader->upload();
return $fileUploader;
}
public function userInfo(Array $request)
{
$user = User::where('id',$request['id'])
->firstOr( function(){
throw ValidationException::withMessages(
[ "id" => "The selected id is invalid." ]
);
});
$user->getCreditAmount();
$user->load('partnerPackage');
$user['isPartner'] = $user->isPartner();
$user['isSuperAdmin'] = $user->isSuperAdmin();
$user['isCustomer'] = $user->isCustomer();
return $user;
}
public function userCreate(Array $request)
{
$user = new User();
$user->full_name = $request['full_name'];
$user->unique_id = User::computedUniqueId($request['role_id']);
$user->role_id = $request['role_id'];
$user->email = $request['email'];
$user->mobile_num = $request['mobile_num'];
$user->gender = $request['gender'] ?? null;
$user->address = $request['address'] ?? null;
$user->city = $request['city'] ?? null;
$user->postcode = $request['postcode'] ?? null;
$user->state = $request['state'] ?? null;
$user->partner_package_id = $request['partner_package_id'] ?? null;
$user->commission_rate = $request['commission_rate'] ?? null;
$user->company_name = $request['company_name'] ?? null;
$user->business_reg_num = $request['business_reg_num'] ?? null;
$user->password = "p@ssw0rd";
$user->save();
if( isset($request['send_email']) && $request['send_email'] == true ){
$result = Password::broker()->sendResetLink(
[ 'email' => $user->email ],
function($user,$token){
$user->notify(new AccountActivateNotification($token));
}
);
}
$this->userCreditService->userRegisterFreeCredit($user->id);
return $user;
}
public function userUpdate(Array $request)
{
$user = User::where('id',$request['id'])
->withTrashed()
->firstOr( function(){
throw ValidationException::withMessages(
[ "id" => "The selected id is invalid." ]
);
});
$user->full_name = $request['full_name'] ?? $user->full_name;
$user->role_id = $request['role_id'] ?? $user->role_id;
$user->mobile_num = $request['mobile_num'] ?? $user->mobile_num;
$user->gender = $request['gender'] ?? $user->gender;
$user->address = $request['address'] ?? $user->address;
$user->city = $request['city'] ?? $user->city;
$user->postcode = $request['postcode'] ?? $user->postcode;
$user->state = $request['state'] ?? $user->state;
$user->partner_package_id = $request['partner_package_id'] ?? $user->partner_package_id;
$user->commission_rate = $request['commission_rate'] ?? $user->commission_rate;
$user->company_name = $request['company_name'] ?? $user->company_name;
$user->business_reg_num = $request['business_reg_num'] ?? $user->business_reg_num;
$user->password = isset($request['password']) ? Hash::make($request['password']) : $user->password;
$user->save();
return $user;
}
public function userDelete(Array $request)
{
$user = User::where('id',$request['id'])
->firstOr( function(){
throw ValidationException::withMessages(
[ "id" => "The selected id is invalid." ]
);
});
$user->full_name = $user->id . "_" . $user->full_name . "_deleted";
$user->unique_id = $user->id . "_" . $user->unique_id . "_deleted";
$user->email = $user->id . "_" . $user->email . "_deleted";
$user->mobile_num = $user->id . "_" . $user->mobile_num . "_deleted";
$user->ic_num = $user->id . "_" . $user->ic_num . "_deleted";
$user->save();
UserSocialize::where("user_id", $user->id)->delete();
$user->tokens()->delete();
$user->delete();
return $user;
}
public function userRefs()
{
$refs = collect(User::ROLE_TYPES)->except([
User::ROLE_SUPER_ADMIN,
User::ROLE_AA_ADMIN
]);
$refs = $refs->mapKeyValue("value", "text");
return $refs->values();
}
public function getGenderTypes()
{
$refs = collect(User::GENDER_TYPES);
return $refs->values();
}
public function forgotPassword(Array $request)
{
if(isset($request['id'])){
$user = User::where('id',$request['id'])
->withTrashed()
->firstOr( function(){
throw ValidationException::withMessages(
[ "id" => "The selected id is invalid." ]
);
});
$email = $user->email;
}else{
$email = $request['email'];
}
$result = Password::broker()->sendResetLink( [ 'email' => $email ] );
return $email;
}
public function resetPassword(Array $request)
{
$result = Password::broker()->reset( $request , function($user, $password){
$user->password = Hash::make($password);
$user->save();
});
switch ($result) {
case PasswordBroker::INVALID_TOKEN:
throw new BadRequestException("The token is invalid");
break;
case PasswordBroker::INVALID_USER:
throw new BadRequestException("User is invalid");
break;
default:
break;
}
return $result;
}
public function filterContactNumber(Array $request)
{
$user = User::all('mobile_num');
$result = [];
$number = [];
foreach($request['mobile_num'] as $phone_num)
{
$phone_num_temp = $phone_num;
if(!(substr( $phone_num, 0, 2 ) === "+6"))
$phone_num_temp = "+6" . $phone_num;
$hit = null;
$hit = $user->filter(function($item) use($phone_num_temp, $phone_num,$number) {
return $item->mobile_num == $phone_num_temp;
})->first();
$result[] = [
'phone_num' => $phone_num,
'hit' => $hit != null ? true : false
];
if($hit)
$number[] = $phone_num;
}
if(isset($request['version_2']) && $request['version_2'])
return $number;
return $result;
}
}