Root Zanli
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
home
/
o5t6x7pgljbm
/
public_html
/
app
/
Http
/
Controllers
/
Api
/
Filename :
CollegeController.php
back
Copy
<?php namespace App\Http\Controllers\Api; use Illuminate\Http\Request; use App\Http\Controllers\Controller; use App\Models\College; use App\Models\CollegeWishlist; use App\Models\Group; use App\Models\User; use App\Models\GroupMember; use App\Models\Goal; use App\Models\TaskAssigned; use App\Models\CollegeGoalWeightage; use Helpers; use Config; use Image; use DB; class CollegeController extends Controller { public function listCollages(Request $request){ $validated = $request->validate([ 'limit' => 'numeric', 'recommended' => 'boolean', 'spMin' => 'numeric', 'spMax' => 'numeric', ]); $activeStore = CommonController::getActiveStore($request); $shouldRecommend = $request->has('recommended') ? $request->get('recommended') : false; $pageLimit = $request->has('limit') ? $request->get('limit') : 10; $user = $request->user(); $orderBy = 'RECENTLY_UPDATED'; $shouldPaginate = true; $collegeIds = $request->has('college_ids') ? (is_array($request->college_ids) ? $request->college_ids : array($request->college_ids) ) : array(); $spMin = $request->spMin; $spMax = $request->spMax; $loadImages = true; $loadPopularMajors = false; $colleges = $this->getColleges($user, $collegeIds, $activeStore, $orderBy, $pageLimit, $shouldPaginate,$shouldRecommend, $spMin, $spMax, $loadImages, $loadPopularMajors); $data = ["colleges"=>$colleges]; return Helpers::successResponse(array("data" => $data), 200, 'Colleges fetched successfully.');; } /** * */ public function getColleges($user, $collegeIds , $activeStore, $orderBy, $pageLimit, $shouldPaginate, $shouldRecommend, $spMin, $spMax, $loadImages = false, $loadPopularMajors = false, $countryId = false, $courseId = false){ $queryBuilder = College::query(); $queryBuilder->select('colleges.*', 'country_name'); $queryBuilder->leftJoin('countries', 'colleges.country_id', "=", 'countries.country_id'); if(count($collegeIds) > 0) $queryBuilder = $queryBuilder ->whereIn("college_id", $collegeIds); if($shouldRecommend) $queryBuilder->inRandomOrder(); else if($orderBy == 'RECENTLY_CREATED') $queryBuilder->orderBy("created_at",'desc'); else if($orderBy == 'RECENTLY_UPDATED') $queryBuilder->orderBy("updated_at",'desc'); else $queryBuilder->orderBy("updated_at",'desc'); if(!empty($spMin)) $queryBuilder->where('scholarship_points', '>=' , $spMin); if(!empty($spMax)) $queryBuilder->where('scholarship_points', '<=', $spMax); if(!empty($countryId)) $queryBuilder->where('colleges.country_id', '=' , $countryId); if(!empty($courseId)) $queryBuilder->whereIn('college_id',function($queryBuilder) use ($courseId){ $queryBuilder->select('college_id')->from('college_courses')->where('course_id', $courseId); }); if($shouldPaginate) $colleges = $queryBuilder->paginate($pageLimit); else $colleges = $queryBuilder->limit($pageLimit)->get(); $spWalletController = new SPWalletController(); $spEarnedByUser = $spWalletController->getEarnedSp($user); //loading additional attributes for each college $idToCollege = array(); foreach($colleges AS $college){ if($loadImages) $college->images; if($loadPopularMajors) $college->popularMajors; $idToCollege[$college->college_id] = $college; $college['added_in_wishlist']=false; $college['sp_earned'] = $spEarnedByUser; } $this->enrichWishlistFlag($user, $idToCollege); return $colleges; } private function enrichWishlistFlag( $user, $idToCollege){ $collegeIds = array_keys($idToCollege); $user_id = $user->user_id; $userWishlist = CollegeWishlist::where("user_id", $user_id) ->whereIn("college_id", $collegeIds) ->get(); foreach($userWishlist as $wishlistCollege){ $college_id = $wishlistCollege->college_id; $idToCollege[$college_id]->added_in_wishlist = true; } return $idToCollege; } private function getWishlistCollegeIdsForUser(User $user){ $user_id = $user->user_id; $userWishlist = CollegeWishlist::select('college_id') ->where("user_id", $user_id) ->get(); return $userWishlist; } public function getCollegesListHome(Request $request) { $validated = $request->validate([ /*'limit' => 'numeric',*/ 'recommended' => 'boolean', /* 'spMin' => 'numeric', 'spMax' => 'numeric',*/ ]); $user = $request->user(); $activeStore = CommonController::getActiveStore($request); $shouldRecommend = false; $pageLimit = 10; $orderBy = 'RECENTLY_CREATED'; $shouldPaginate = false; $collegeIds = $this->getWishlistCollegeIdsForUser($user); $data = array(); $loadImages = true; $loadPopularMajors = false; $spMin = $request->spMin; $spMax = $request->spMax; $countryId = $request->country_id; $courseId = $request->course_id; if(isset($collegeIds) && count($collegeIds) > 0) $data['favourite_colleges'] = $this->getColleges($user, $collegeIds, $activeStore, $orderBy, $pageLimit, $shouldPaginate, $shouldRecommend, $spMin, $spMax,$loadImages, $loadPopularMajors, $countryId, $courseId); else $data['favourite_colleges'] = array(); if(isset($request->favourite) && $request->favourite == '1'){ $data['colleges'] = $this->getColleges($user, $collegeIds, $activeStore, $orderBy, $pageLimit, $shouldPaginate, $shouldRecommend, $spMin, $spMax,$loadImages, $loadPopularMajors, $countryId, $courseId); } else { $data['colleges'] = $this->getColleges($user, array(), $activeStore, $orderBy, $pageLimit, $shouldPaginate, $shouldRecommend, $spMin, $spMax,$loadImages, $loadPopularMajors, $countryId, $courseId); } return Helpers::successResponse($data , 200, 'Colleges fetched successfully.'); } public function getCollegeInfoInDetails(Request $request) { $validated = $request->validate([ 'college_id' => 'required|numeric' ]); $user = $request->user(); $activeStore = CommonController::getActiveStore($request); $shouldRecommend = false; $pageLimit = 10; $orderBy = 'RECENTLY_CREATED'; $shouldPaginate = false; $collegeIds = array($request->college_id); $data = array(); $loadImages = true; $loadPopularMajors = true; $colleges = $this->getColleges($user, $collegeIds, $activeStore, $orderBy, $pageLimit, $shouldPaginate, $shouldRecommend, null, null, $loadImages, $loadPopularMajors); if(count($colleges) > 0){ $data['college'] = $colleges[0]; } else { return Helpers::responseMessage(404, 'College not found with provided id'); } $data['college']['skill_priority'] = CollegeGoalWeightage::select('goals.*', DB::raw('CONCAT("'.Config::get('constants.app.api-goal-image-url').'",goal_logo) as goal_logo'))->leftJoin('goals', 'college_goal_weightage.goal_id', "=", 'goals.goal_id')->orderBy('weightage', 'desc')->limit(3)->get(); $data['similar_colleges'] = $this->getColleges($user, array(), $activeStore, $orderBy, $pageLimit, $shouldPaginate, $shouldRecommend, null, null, $loadImages, false); return Helpers::successResponse($data , 200, 'College information fetched successfully'); } public function addOrRemoveCollegeToWishlist(Request $request){ $validated = $request->validate([ "college_id" => "required|numeric", "operation" => "in:ADD,REMOVE,TOGGLE" ]); $operation = $request->has('operation') ? $request->operation : 'TOGGLE'; $user = $request->user(); $collegeWishlistObj = CollegeWishlist::where('college_id', $request->college_id) ->where('user_id', $user->user_id)->first(); $success = false; switch($operation){ case 'ADD': if(isset($collegeWishlistObj) ) return Helpers::responseMessage(400, 'College already in wishlist'); else{ $collegeWishlistObj = CollegeWishlist::create([ 'user_id' => $user->user_id, 'college_id' => $request->college_id ]); $success = $collegeWishlistObj->save(); } break; case 'REMOVE': if(isset($collegeWishlistObj)) $success = $collegeWishlistObj->delete(); else return Helpers::responseMessage(400, 'College not present in wishlist'); break; case 'TOGGLE': if(isset($collegeWishlistObj)) $success = $collegeWishlistObj->delete(); else{ $collegeWishlistObj = CollegeWishlist::create([ 'user_id' => $user->user_id, 'college_id' => $request->college_id ]); $success = $collegeWishlistObj->save(); } break; } if($success) return Helpers::responseMessage(200, 'wishlist is updated'); else return Helpers::responseMessage(200, 'wishlist update failed'); } /* Added by prakash - Start */ public function get_colleges(Request $request){ $resData['data'] = College::select('college_id', 'college_name', 'college_image')->get(); return Helpers::successResponse($resData, 200, 'Colleges fetched successfully.'); } public function college_main(Request $request){ $validated = $request->validate([ "college_id" => "required|numeric", ]); $user = $request->user(); $goals = Goal::select('goals.*', 'weightage')->leftJoin('college_goal_weightage', 'college_goal_weightage.goal_id', "=", 'goals.goal_id') ->where('college_id', $request->college_id) ->get(); $totalTaskSPSum = 0; foreach($goals as $goal){ $taskSPSum = TaskAssigned::leftJoin('tasks', 'tasks.task_id', "=", 'task_assigned.task_id')->where('goal_id', $goal->goal_id)->sum('task_sp'); $totalTaskSPSum += $taskSPSum; $taskSP[$goal->goal_id] = $taskSPSum; } foreach($goals as $goal){ $goalObj = $goal; $goalObj['activity_analysis'] = number_format(($taskSP[$goal->goal_id]*100) / $totalTaskSPSum); $goalsObj[] = $goalObj; } $data['goals'] = $goalsObj; $data['colleges_you_follow'] = $this->getColleges($user, array(), null, 'RECENTLY_CREATED', 4, false, false, null, null); $resData['data'] = $data; return Helpers::successResponse($resData, 200, 'Colleges fetched successfully.'); } /* Added by prakash - End */ }