403Webshell
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 :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /opt/bitnami/apache/htdocs/app/app/Http/Services/UserCreditService.php
<?php
namespace App\Http\Services;

use App\Models\UserCredit;
use App\Models\NotificationMessage;
use Auth;
use DB;
use Queriplex;
use App\Http\Services\NotificationService;
use App\Exports\BasicExcelExport;
use Maatwebsite\Excel\Facades\Excel;
use App\Classes\GCSFileUploader;
use Carbon\Carbon;

class UserCreditService
{
	public function __construct(
		NotificationService $notificationService
	)
	{
		$this->notificationService = $notificationService;
	}

	public function userCreditList(Array $request)
	{
		$query = UserCredit::query();
		
		$userCredit = self::queriplex($query, $request);

		$result = $userCredit->orderBy("created_at","DESC")
			->paginate($request['itemsPerPage'] ?? null);

		$result->load('user');
		
		return $result;
	}

	public function searchQuery($query, $value, $search_by){

        $common_searchable = [
            'id',
			'title',
        ];          
        if(in_array($search_by,$common_searchable)){
            $query->search($search_by,$value);
        }
		else
		{
			if($search_by == "name"){
				$query->whereHas("user",function($q) use ($value){
					$q->search("full_name",$value);
				});
			}
			else if($search_by == "created_at")
			{
				$query->where('created_at', '>=', $value[0]);
				if(sizeof($value)>1)
					$query->where('created_at', '<=', $value[1]);
			}
			else if($search_by == "description")
			{
				$query->search('meta', $value);
				
			}
		}

        return null;
    }

	public function insertCredit(Array $request)
	{
		$userCredit = new UserCredit();
		$userCredit->user_id = $request['user_id'];
		$userCredit->type_id = $request['type_id'];
		$userCredit->title = $request['title'];
		$userCredit->amount = $request['amount'];
		$userCredit->meta = $request['meta'] ?? [
			'description' => $request['description'] ?? null,
		];
		$userCredit->save();

		return $userCredit;
	}

	public function userCreditCreate(Array $request)
	{
		$userCredit = self::insertCredit($request);

		$this->notificationService->createUserNotification([
			'type_id' => NotificationMessage::CREDIT_ADJUSTMENT,
			'title' => $userCredit->type_name,
			'content' => abs($userCredit->amount)." credit has been ".($userCredit->amount < 0 ? "deducted from" : "added to")." your account.",
			'user_id' => $userCredit->user_id,
		], $shouldNotifyUser = true);

		return $userCredit;
	}
	
	public function userCreditRefs()
	{
		$refs = collect(UserCredit::TYPES);

		$refs = $refs->map(function ($item, $key) {
			$sign = 1;
			if(in_array($key, [ UserCredit::DEDUCT_CREDIT ])){
				$sign = -1;
			}
			return [
				"value" => $key,
				"text" => $item,
				"sign" => $sign,
			];
		});

		return $refs->values();
	}

	public function userRegisterFreeCredit($user_id)
	{
		$userCredit = $this->userCreditCreate([
			"user_id" => $user_id,
			"type_id" => UserCredit::NEW_USER_CREDIT,
			"title" => "New User Free Credit",
			"amount" => UserCredit::NEW_USER_FREE_CREDIT_AMOUNT,
			"meta" => [
				"userId" => $user_id
			],
		]);

		return $userCredit;
	}

	public function queriplex($query, Array $request)
	{
		$order_mode = ( $request['sortDesc'] ?? false )  ? 'DESC' : 'ASC';
        $search_by = $request['searchBy'] ?? null;

		// // filter
		$userCredit = Queriplex::make($query)
			->withFilters($request, [
				'id' => 'id',
				'type_id' => 'type_id',
				'user_id' => function($query, $value){
					$query->whereHas('user',function($q) use ($value){
						$q->where('id',$value);
					});
				},
				"date" => function($query, $value){
					$date_1 = new Carbon($value[0]);
					$date_2 = count($value) > 1 ? new Carbon($value[1]) : new Carbon($value[0]);

					if($date_1->gt($date_2))
					{
						$datetime_1 = $date_2->startOfDay();
						$datetime_2 = $date_1->endOfDay();
					}
					else
					{
						$datetime_1 = $date_1->startOfDay();
						$datetime_2 = $date_2->endOfDay();
					}
					\Debugbar::info($datetime_1, $datetime_2);

					$query->whereDate("created_at",'>=',$datetime_1)->whereDate("created_at",'<=',$datetime_2);
				},
                'search' => ( fn($query, $value) => self::searchQuery($query,$value,$search_by) ),
			])
			->withSort($request['sortBy'] ?? null, [
                "id" => fn($query) => $query->orderBy('id', $order_mode),
                "created_at" => fn($query) => $query->orderBy('created_at', $order_mode),
            ])->apply();
		
		return $userCredit;
	}

	public function exportUserCreditList(Array $request)
	{
		$fileUploader = false;
		$user = Auth::user();
		$userCredits = UserCredit::query();

		$userCredits = self::queriplex($userCredits, $request);
		
		$result = $userCredits->orderBy("created_at","DESC")
			->get();

		if($result->isEmpty())
			return false;

		$result->load([
			'user'
		]);
		
		if($user->isSuperAdmin())
		{
			$data = $result->map(function($item) use($user)
			{

				return [
					'id' => $item->id,
					'user' => $item->user ? $item->user->full_name : '-',
					'user_email' => $item->user ? $item->user->email : '-',
					'user_mobile_num' => $item->user ? $item->user->mobile_num : '-',
					'title' => $item->title,
					'amount (RM)' => $item->amount,
					'description' => $item->meta["description"],
					'created_at' => $item->created_at,
				];
			});

			$export = new BasicExcelExport($data);
			$file_name = now()->format('Ymdhms')."-User-Credit.xlsx";
			Excel::store($export, $file_name);
			$fileUploader = new GCSFileUploader($file_name);
			$fileUploader->setDirectory('reports/user-credit');
			$fileUploader->upload();
		}

		return $fileUploader;
	}
}

Youez - 2016 - github.com/yon3zu
LinuXploit