File: /home/imensosw/.trash/app.1/Http/Controllers/UserSubjectExpertiseController.php
<?php
/**
* UserSubjectExpertiseController class file
*
* PHP Version 7.2
*
* @category Controller
* @package Ez
* @author Imenso Software <admin@imensosoftware.com>
* @license http://imensosoftware/license.php GNU Public License
* @link http://imensosoftware.com/recipes
*/
namespace App\Http\Controllers;
use App\Models\UserSubjectExpertise;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator;
use DB ;
/**
* UserSubjectExpertiseController class
*
* The class manage the User Subject Expertise
*
* @category UserSubjectExpertiseController
* @package Ez
* @author Imenso Software <admin@imensosoftware.com>
* @license http://imensosoftware/license.php GNU Public License
* @link http://imensosoftware.com/recipes
*/
class UserSubjectExpertiseController extends Controller
{
/**
* GetUserSubjectExpertise function gets the subject expertise of specified user
* from the storage and return it in json format.
*
* @param \Illuminate\Http\Request request
* @return json
*/
public function getUserSubjectExpertise(Request $request): \Illuminate\Http\JsonResponse
{
$user_id = Auth::user()->id ;
$userSubjectExpertises = UserSubjectExpertise::
select("user_subject_expertises.*", 'subjects.subject', 'expertises.expertise_level')
->join('subjects', 'subjects.id', '=', 'user_subject_expertises.subject_id')
->join('expertises', 'expertises.id', '=', 'user_subject_expertises.expertise_id')
->where('user_subject_expertises.user_id', $user_id)->get();
return response()->json(
[
'status' => 'success',
'userSubjectExpertises' => $userSubjectExpertises->toArray()
],
200
);
}
/**
* Insert function adds subject expertise in the storage for
* the specified user and return json.
*
* @param \Illuminate\Http\Request request
* @return json
*/
public function insert(Request $request): \Illuminate\Http\JsonResponse
{
$validator = Validator::make(
$request->all(),
[
'subject_id' => 'required',
'expertise_id' => 'required',
],
[
'subject_id.required' => 'Please select subject!',
'expertise_id.required' => 'Please select expertise level!',
]
);
if ($validator->fails()) {
return response()->json(
[
'status' => 'error',
'message' => 'Please select required field!.',
'errors' => $validator->errors()
],
422
);
}
if ($request->subject_id == 'undefined' || $request->expertise_id == 'undefined') {
return response()->json(
[
'status' => 'error',
'message' => 'Please select required field!.',
'errors' => 'errors'
],
422
);
}
$user_id = Auth::user()->id ;
if (UserSubjectExpertise::where('user_id', $user_id)->where('subject_id', $request->subject_id)->exists()) {
$userSubjectExpertises = UserSubjectExpertise::
select("user_subject_expertises.*", 'subjects.subject', 'expertises.expertise_level')
->join('subjects', 'subjects.id', '=', 'user_subject_expertises.subject_id')
->join('expertises', 'expertises.id', '=', 'user_subject_expertises.expertise_id')
->where('user_subject_expertises.user_id', $user_id)->get();
return response()->json(
[
'status' => 'success',
'message' => 'This subject is already in your profile.',
'userSubjectExpertises' => $userSubjectExpertises->toArray()
],
200
);
}
UserSubjectExpertise::create(
['user_id' => $user_id,'subject_id' => $request->subject_id,'expertise_id' => $request->expertise_id]
);
$userSubjectExpertises = UserSubjectExpertise::
select("user_subject_expertises.*", 'subjects.subject', 'expertises.expertise_level')
->join('subjects', 'subjects.id', '=', 'user_subject_expertises.subject_id')
->join('expertises', 'expertises.id', '=', 'user_subject_expertises.expertise_id')
->where('user_subject_expertises.user_id', $user_id)->get();
return response()->json(
[
'status' => 'success',
'message' => 'Expertise added successfully.',
'userSubjectExpertises' => $userSubjectExpertises->toArray()
],
200
);
}
/**
* Update function updates the subject expertise for the specified user in
* the storage and return it in json format.
*
* @param \Illuminate\Http\Request request
* @return json
*/
public function update(Request $request): \Illuminate\Http\JsonResponse
{
$validator = Validator::make(
$request->all(),
[
'expertise_id.*' => 'required',
],
[
'expertise_id.required' => 'Please select expertise level!',
]
);
if ($validator->fails()) {
$messages = $validator->errors()->all();
;
$error_in = [];
foreach ($messages as $messages) {
$id = substr($messages, 17, 1);
$error_in[] = intval($id);
}
return response()->json(
[
'status' => 'error',
'message' => 'Please select expertise level!',
'error_in' => $error_in,
'errors' => $validator->errors()
],
422
);
}
$user_id = Auth::user()->id ;
$id = $request->id ;
$subject_id = $request->subject_id ;
$expertise_id = $request->expertise_id ;
$i = 0 ;
$ids = [] ;
if ($request->subject_id) {
foreach ($request->subject_id as $subject_id) {
$ids[] = $subject_id ;
$userSkill = UserSubjectExpertise::updateOrCreate(
['user_id' => $user_id,'subject_id' => $subject_id],
['user_id' => $user_id,'subject_id' => $subject_id,'expertise_id' => $expertise_id[$i]]
);
$i++;
}
}
if (sizeof($ids) > 0) {
UserSubjectExpertise::where('user_id', $user_id)->whereNotIn('subject_id', $ids)->delete();
} else {
UserSubjectExpertise::where('user_id', $user_id)->delete();
}
$userSubjectExpertises = UserSubjectExpertise::
select("user_subject_expertises.*", 'subjects.subject', 'expertises.expertise_level')
->join('subjects', 'subjects.id', '=', 'user_subject_expertises.subject_id')
->join('expertises', 'expertises.id', '=', 'user_subject_expertises.expertise_id')
->where('user_subject_expertises.user_id', $user_id)->get();
return response()->json(
[
'status' => 'success',
'message' => 'Expertise updated successfully.',
'userSubjectExpertises' => $userSubjectExpertises->toArray()
],
200
);
}
}