Root Zanli
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
home
/
o5t6x7pgljbm
/
public_html
/
admin
/
app
/
Http
/
Controllers
/
Admin
/
Filename :
UserController.php
back
Copy
<?php namespace App\Http\Controllers\Admin; use App\Http\Controllers\Api\TUITWalletController; use App\Http\Controllers\Controller; use App\Libraries\Helpers; use App\Models\CoinsForCollegeRole; use App\Models\Product; use Illuminate\Http\Request; use App\Models\User; use App\Models\Task; use App\Models\Store; use App\Models\TUITWallet; use App\Models\TaskAssigned; use App\V2\Services\TUITService; use App\V2\Services\UserActivityService; use Auth; use Exception; use Hash; use Illuminate\Support\Facades\DB; use Session; use Socialite; use Image; Use Response; use Illuminate\Support\Facades\Log; //use Illuminate\Foundation\Auth\AuthenticatesUsers; //use Mail; class UserController extends Controller { protected $tuitService; function __construct(){ $this->tuitService = new TUITService(); } public function index() { $users = User::all(); $roles = CoinsForCollegeRole::all(); // Fetch all roles return view('Admin.User.index', compact('users', 'roles')); } public function user_list(Request $request) { Log::debug("Params: ". print_r($request->all(), true)); $columns = ["full_name", "email", "mobile", "profile_pic", "user_id",]; $columns2 = ["users.full_name", "users.email", "users.mobile", "users.profile_pic", "users.user_id", "users.coins_for_college_role_id"]; $totalData = User::count(); $limit = $request->input('length'); $start = $request->input('start'); $dir = $request->input('order.0.dir'); $query = User::select($columns2); // Filter by role if ($request->has('role_id') && $request->role_id != '') { $query->whereIn('coins_for_college_role_id', $request->role_id); } // Search filter if (!empty($request->input('search.value'))) { $search = $request->input('search.value'); $query->where(function ($query2) use ($columns2, $search) { foreach ($columns2 as $key => $value) { if ($key == 0) { $query2->where($value, 'LIKE', "%{$search}%"); } else { $query2->orWhere($value, 'LIKE', "%{$search}%"); } } return $query2; }); } $Users = $query->get(); $totalFiltered = $Users->count(); $Users = $query->offset($start); $Users = $query->limit($limit); if (isset($columns2[$request->input('order.0.column')])) { $order = $columns[$request->input('order.0.column')]; $Users = $query->orderBy($order, $dir); } $Users = $query->orderBy('users.created_at', 'desc')->get(); $data = []; if (!empty($Users)) { foreach ($Users as $key => $User) { $nestedData = []; foreach ($columns as $key => $column) { if ($column == 'user_id') { $edit = route('users.edit', $User->user_id); $delete = route('users.destroy', $User->user_id); $show = route('users.show', $User->user_id); $nestedData[$column] = "<form action='{$delete}' method='POST' id='userTable-" . $User->$column . "'> <input name='_method' type='hidden' value='DELETE'> <a href='{$edit}' title='EDIT' class='mb-6 btn-floating waves-effect waves-light gradient-45deg-green-teal gradient-shadow'> " . csrf_field() . " <i class='material-icons'>edit</i></a> <a href='{$show}' title='Details' class='mb-6 btn-floating waves-effect waves-light gradient-45deg-green-teal gradient-shadow'> <i class='material-icons'>remove_red_eye</i> </a> <button type='button' title='DELETE' class='mb-6 btn-floating waves-effect waves-light gradient-45deg-purple-deep-orange gradient-shadow' onclick='delete_user(" . $User->$column . ");'> <i class='material-icons'>clear</i> </button> </form>"; $nestedData['user_role'] = $User->cfcRole ? $User->cfcRole->role_name : 'N/A'; $nestedData['record_pk_id'] = $User->user_id; } elseif ($column == 'profile_pic') { $nestedData[$column] = '<img src="' . asset($User->profile_pic) . '" width="45px"/>'; } else { $nestedData[$column] = $User->$column; } } $data[] = $nestedData; } } $json_data = [ "draw" => intval($request->input('draw')), "recordsTotal" => intval($totalData), "recordsFiltered" => intval($totalFiltered), "data" => $data, ]; return response()->json($json_data); } public function create() { $Users = DB::table('users')->get(); return view('Admin.User.create',compact('Users')); } public function store(Request $request) { $validate = $request->validate([ 'full_name' => 'required', 'email' => 'required|email|unique:users,email,NULL,user_id,deleted_at,NULL', 'password' => 'required', 'confirm_password' => 'same:password', 'mobile' => 'required|numeric', // 'profile_pic_img' => 'required', ]); if($request->hasFile('profile_pic_img')) { $file = $request->file('profile_pic_img'); $imageName = rand().time().'.'.$file->getClientOriginalExtension(); // Save thumbnail image $img = Image::make($file->getRealPath()); $img->resize(100, 100, function ($constraint) { $constraint->aspectRatio(); })->save(public_path('profile_pics/thumb/').$imageName); // Save original size image $file->move(public_path('profile_pics'), $imageName); $request['profile_pic'] = $imageName; } $request['password'] = Hash::make($request['password']); $uuid = ''; $retry_count = 0; do{ $uuid = Helpers::getNumericUUID(); $user = User::where('uuid', $uuid)->first(); $retry_count++; }while($user != null || $retry_count < 5); $additional_params = ['uuid' => $uuid]; $user = User::create(array_merge($request->all(), $additional_params)); return redirect()->route('users.index')->with('success','Record Successfully Inserted.'); } public function show($id) { $users = User::find($id); $groups = User::select('*') ->leftjoin('groups','groups.owner_user_id','=','users.user_id') ->where('groups.owner_user_id',$id) ->get(); // $tasks = Task::select('*') // ->leftJoin('task_assigned','tasks.task_id','task_assigned.task_id') // ->leftJoin('users','users.user_id','task_assigned.user_id') // ->where('users.user_id',$id) // ->get(); $tasks = Task::select('tasks.*', 'products.product_name', 'groups.group_name') ->leftJoin('task_assigned', 'tasks.task_id', '=', 'task_assigned.task_id') ->leftJoin('users', 'users.user_id', '=', 'task_assigned.user_id') ->leftJoin('products', 'products.product_id', '=', 'tasks.product_id') ->leftjoin('groups','groups.group_id','=','tasks.group_id') ->where('users.user_id', $id) ->get(); $rewards = Product::select('*') ->leftjoin('users', 'users.user_id', '=', 'products.created_by') ->where('users.user_id', $id) ->orderBy('products.expires_on', 'desc') ->get(); $tuits = TUITWallet::where('user_id', $users->user_id)->first(); $tuit_wallet_arr = $this->tuitService->getTUITWallet($users); $tuit_balance = number_format(Helpers::formatDecimanPointsTUIT($tuit_wallet_arr['balance']), 3); $amount = number_format($this->tuitService->getTUIT_To_USDT($tuit_balance),2); return view('Admin.User.details',compact('users','groups','tasks','tuits','tuit_balance','amount','rewards')); } public function edit($id) { $users = User::select('*','profile_pic as profile_image')->where('users.user_id',$id)->first(); return view('Admin.User.edit',compact('users')); } public function update(Request $request,$id) { $validate = $request->validate([ 'full_name' => 'required', // 'email' => 'required|email|unique:users,email,'.$id.',user_id,deleted_at,NULL', 'mobile' => 'required|numeric', ]); $users = User::find($id); if($request->hasFile('profile_pic_img')) { $file = $request->file('profile_pic_img'); $imageName = rand().time().'.'.$file->getClientOriginalExtension(); // Save thumbnail image $img = Image::make($file->getRealPath()); $img->resize(100, 100, function ($constraint) { $constraint->aspectRatio(); })->save(public_path('profile_pics/thumb/').$imageName); // Save original size image $file->move(public_path('profile_pics'), $imageName); $request['profile_pic'] = $imageName; } if(!empty($request['reset_password'])) { $request['password'] = Hash::make($request['reset_password']); } $users->update($request->all()); return redirect()->route('users.index')->with('success','Record Updated Successfully.'); } public function destroy($id) { $data = User::find($id)->delete(); return redirect()->route('users.index')->with('success','Record Deleted Successfully'); } public function addTUITInquiry(Request $request){ $user_ids = $request->user_ids; $selected_all_users = $request->selected_all_users; $search_text = $request->search_text; $tuit_to_add = $request->tuit_to_add; $filter_options = $request->filter_options; $searchableColumns = ["users.full_name", "users.email", "users.mobile"]; Log::debug("Request Params: ". print_r($request->all(), true)); $selectedRoleIds = $this->getSelectedRolesIds($filter_options); if($selected_all_users === true || $selected_all_users === "true"){ $user_ids = []; } $queryBuilder = $this->getQuerySelectorForSelectedUsers($searchableColumns, $search_text, $selectedRoleIds, $user_ids); $numberOfSelectedUsers = $queryBuilder->count(); $response_data = []; $response_data['number_of_users'] = $numberOfSelectedUsers; $response_data['total_of_tuit'] = $numberOfSelectedUsers * $tuit_to_add; return Helpers::successResponse(['data' => $response_data], 200, 'summary fetched successfully'); } public function addTUITConfirm(Request $request){ $admin = auth()->user(); $user_ids = $request->user_ids; $selected_all_users = $request->selected_all_users; $search_text = $request->search_text; $tuit_to_add = $request->tuit_to_add; $filter_options = $request->filter_options; $searchableColumns = ["users.full_name", "users.email", "users.mobile"]; Log::debug("Request Params: ". print_r($request->all(), true)); $selectedRoleIds = $this->getSelectedRolesIds($filter_options); if($selected_all_users === true || $selected_all_users === "true"){ $user_ids = []; } $queryBuilder = $this->getQuerySelectorForSelectedUsers($searchableColumns, $search_text, $selectedRoleIds, $user_ids); $users = $queryBuilder->get(); $total_users = 0; $total_tuit = 0; $users_to_notify = []; try{ $response_data = DB::transaction(function() use($admin, $users, $tuit_to_add, $total_users, $total_tuit, &$users_to_notify){ $tuitWalletController = new TUITWalletController(); $userActivityService = new UserActivityService(); $tuitService = new TUITService(); foreach($users AS $user){ $activityHistory = UserActivityService::getDetailsForTUITRewardedForParent($user, null, $admin, $tuit_to_add); $tuitTransaction = $tuitService->triggerTuitCreditAction($user, 'MANUAL_ALLOCATION_BY_ADMIN', $activityHistory->activity_sub_details, $tuit_to_add); $userActivityService->addActivityHistory($activityHistory->user_id, $activityHistory->group_id, $activityHistory->activity_details, $activityHistory->activity_sub_details, $activityHistory->side_effect_details); $total_users++; $total_tuit += $tuit_to_add; $users_to_notify[]=[ 'user'=> $user, 'tuit_added' => $tuit_to_add ]; } $response = ['total_users' => $total_users, 'total_tuit' => $total_tuit]; return $response; }); }catch(Exception $e){ Log::error("error while adding TUITs"); Log::error("Message: {$e->getMessage()}, Stack Trace: {$e->getTraceAsString()}"); } foreach($users_to_notify AS $item){ $user = $item['user']; $tuit_added = $item['tuit_added']; $title = 'TUIT Rewarded'; $msg = "$tuit_added has been rewarded by Admin"; $type = "tuit_rewarded"; try{ if($user->device_type == 'android'){ Helpers::sendPushAndroid(array($user->device_token), $title, $msg, $type, 1); } else if($user->device_type == 'ios'){ Helpers::sendPushIOS(array($user->device_token), $title, $msg, $type, 1); } }catch(Exception $e){ Log::error("error while sending push notification"); Log::error("Message: {$e->getMessage()}, Stack Trace: {$e->getTraceAsString()}"); } } return Helpers::successResponse(['data' => $response_data], 200, 'TUIT rewarded successfully.'); } public function deductTUITInquiry(Request $request){ $user_ids = $request->user_ids; $selected_all_users = $request->selected_all_users; $search_text = $request->search_text; $tuit_to_deduct = $request->tuit_to_deduct; $filter_options = $request->filter_options; $searchableColumns = ["users.full_name", "users.email", "users.mobile"]; Log::debug("Request Params: ". print_r($request->all(), true)); $selectedRoleIds = $this->getSelectedRolesIds($filter_options); if($selected_all_users === true || $selected_all_users === "true"){ $user_ids = []; } $queryBuilder = $this->getQuerySelectorForSelectedUsers($searchableColumns, $search_text, $selectedRoleIds, $user_ids); $users = $queryBuilder->get(); $tuitWalletController = new TUITWalletController(); $total_users_affected = 0; $total_tuit_to_deduct = 0; foreach($users AS $user){ $canDeduct = $tuitWalletController->canDebitTUIT($user, $tuit_to_deduct); if(!$canDeduct){ Log::debug("can not deduct tuit for email: ". $user->email); continue; } $total_users_affected++; $total_tuit_to_deduct += $tuit_to_deduct; } $response_data = []; $response_data['number_of_users'] = $total_users_affected; $response_data['total_of_tuit'] = $total_tuit_to_deduct; return Helpers::successResponse(['data' => $response_data], 200, 'summary fetched successfully'); } public function deductTUITConfirm(Request $request){ $admin = auth()->user(); $user_ids = $request->user_ids; $selected_all_users = $request->selected_all_users; $search_text = $request->search_text; $tuit_to_deduct = $request->tuit_to_deduct; $filter_options = $request->filter_options; $searchableColumns = ["users.full_name", "users.email", "users.mobile"]; Log::debug("Request Params: ". print_r($request->all(), true)); $selectedRoleIds = $this->getSelectedRolesIds($filter_options); if($selected_all_users === true || $selected_all_users === "true"){ $user_ids = []; } $queryBuilder = $this->getQuerySelectorForSelectedUsers($searchableColumns, $search_text, $selectedRoleIds, $user_ids); $users = $queryBuilder->get(); $total_users = 0; $total_tuit = 0; $users_to_notify = []; try{ $response_data = DB::transaction(function() use($admin, $users, $tuit_to_deduct, $total_users, $total_tuit, &$users_to_notify){ $tuitWalletController = new TUITWalletController(); $userActivityService = new UserActivityService(); $tuitService = new TUITService(); foreach($users AS $user){ $canDeduct = $tuitWalletController->canDebitTUIT($user, $tuit_to_deduct); if(!$canDeduct){ Log::debug("can not deduct tuit for email: ". $user->email); continue; } $activityHistory = UserActivityService::getDetailsForTUITDeductionForParent($user, null, $admin, $tuit_to_deduct); $tuitTransaction = $tuitService->triggerTuitDebitAction($user, 'MANUAL_DEDUCTION_BY_ADMIN', $activityHistory->activity_sub_details, $tuit_to_deduct); $userActivityService->addActivityHistory($activityHistory->user_id, $activityHistory->group_id, $activityHistory->activity_details, $activityHistory->activity_sub_details, $activityHistory->side_effect_details); $total_users++; $total_tuit += $tuit_to_deduct; $users_to_notify[]=[ 'user'=> $user, 'tuit_deducted' => $tuit_to_deduct ]; } $response = ['total_users' => $total_users, 'total_tuit' => $total_tuit]; return $response; }); }catch(Exception $e){ Log::error("error while deducting TUITs"); Log::error("Message: {$e->getMessage()}, Stack Trace: {$e->getTraceAsString()}"); } foreach($users_to_notify AS $item){ $user = $item['user']; $tuit_deducted = $item['tuit_deducted']; $title = 'TUIT Rewarded'; $msg = "$tuit_deducted has been deducted by Admin"; $type = "tuit_deducted"; try{ if($user->device_type == 'android'){ Helpers::sendPushAndroid(array($user->device_token), $title, $msg, $type, 1); } else if($user->device_type == 'ios'){ Helpers::sendPushIOS(array($user->device_token), $title, $msg, $type, 1); } }catch(Exception $e){ Log::error("error while sending push notification"); Log::error("Message: {$e->getMessage()}, Stack Trace: {$e->getTraceAsString()}"); } } return Helpers::successResponse(['data' => $response_data], 200, 'TUIT deducted successfully.'); } public function getSelectedRolesIds($filter_options){ $selectedRoleIds = []; $selected_roles_query = CoinsForCollegeRole::whereNotIn('role_name', ['Child - <18 years old']); if(isset($filter_options['selected_roles']) && is_array($filter_options['selected_roles'])){ $selected_roles_query->whereIn('coins_for_college_role_id', $filter_options['selected_roles']); } // Log::debug("Role select query: ". $selected_roles_query->toSql()); // Log::debug("Values for Sql:" . print_r($selected_roles_query->getBindings(), true)); $selectedRoles = $selected_roles_query->get(); $selectedRoleIds = []; foreach($selectedRoles AS $cfc_role){ $selectedRoleIds[] = $cfc_role->coins_for_college_role_id; } return $selectedRoleIds; } public function getQuerySelectorForSelectedUsers($searchableColumns, $searchText, $selectedRoleIds = [], $selectedUserIds = []) { Log::debug("Selected UserIds inside UserController: " . json_encode($selectedUserIds)); // Start a new query on the User model $query = User::query(); // Filter by search text if (!empty($searchText)) { $query->where(function ($query2) use ($searchText, $searchableColumns) { foreach ($searchableColumns as $column) { $query2->orWhere($column, 'LIKE', "%{$searchText}%"); } }); } // Filter by selected user IDs if (!empty($selectedUserIds)) { $query->whereIn('users.user_id', $selectedUserIds); } // Filter by selected role IDs if (!empty($selectedRoleIds)) { $query->whereHas('cfcRole', function ($query2) use ($selectedRoleIds) { $query2->whereIn('coins_for_college_role_id', $selectedRoleIds); }); } else { $query->whereNot(DB::raw('1'), DB::raw('1')); } return $query; } }