File: /home/imensosw/.trash/app.1/Http/Controllers/UserEvaluationController.php
<?php
/**
* UserEvaluationController 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 Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator;
use DB ;
use App\Models\UserEvaluation;
use App\Models\UserSkill;
use App\Models\UserSkillPair;
/**
* UserEvaluationController class
*
* The class manage the User Evaluation
*
* @category UserEvaluationController
* @package Ez
* @author Imenso Software <admin@imensosoftware.com>
* @license http://imensosoftware/license.php GNU Public License
* @link http://imensosoftware.com/recipes
*/
class UserEvaluationController extends Controller
{
/**
* GetUserEvaluations function gets evaluations of specified users
* and return it in json format.
*
* @param \Illuminate\Http\Request request
* @return json
*/
public function getUserEvaluations(Request $request): \Illuminate\Http\JsonResponse
{
$user_id = Auth::user()->id ;
$userEvaluations = UserEvaluation::getUserEvaluation(['user_id' => $user_id]);
$existingIds = [];
$userSkillPairs = UserSkillPair::where('user_id', $user_id)->get();
foreach ($userSkillPairs as $userSkillPair) {
$usfLng = $userSkillPair->from_language_id;
$ustLng = $userSkillPair->to_language_id;
foreach ($userEvaluations as $userEvaluation) {
$uefLng = $userEvaluation->from_language_id;
$uetLng = $userEvaluation->to_language_id;
if ($usfLng == $uefLng && $ustLng == $uetLng) {
$existingIds[] = $userSkillPair->id ;
}
}
}
$missingEvaluationFor = UserSkillPair::
select(
'user_skill_pairs.id',
'from_languages.id as from_language_id',
'to_languages.id as to_language_id',
'from_languages.language_l as from_language',
'to_languages.language_l as to_language'
)
->join('languages as from_languages', 'from_languages.id', '=', 'user_skill_pairs.from_language_id')
->join('languages as to_languages', 'to_languages.id', '=', 'user_skill_pairs.to_language_id')
->where('user_skill_pairs.user_id', $user_id)->whereNotIn('user_skill_pairs.id', $existingIds)->get();
$userEvaluationCount = UserEvaluation::where('user_evaluations.user_id', $user_id)->count();
return response()->json(
[
'status' => 'success',
'userEvaluations' => $userEvaluations,
'missingEvaluationFor' => $missingEvaluationFor,
'userEvaluationCount' => $userEvaluationCount
],
200
);
}
/**
* Insert function adds evaluation in the storage for specified user
* and return it in json.
*
* @param \Illuminate\Http\Request request
* @return json
*/
public function insert(Request $request): \Illuminate\Http\JsonResponse
{
$validation = [];
$message = [];
if ($request->evaluation_file == 'null') {
$validation = [
'answer' => 'required_without:answer_file',
];
$message = [
'answer.required_without' => 'Please enter answer!',
];
} else {
$validation = [
'answer' => 'required_without:answer_file',
'answer_file' => 'required_without:answer|max:2048|mimes:pdf',
];
$message = [
'answer.required_without' => 'Please enter answer!',
'answer_file.required_without' => 'Please select file!',
'answer_file.mimes' => 'Answer file must be a pdf!',
'answer_file.max' => 'Answer file size must be less then 2 MB!',
];
}
$validator = Validator::make(
$request->all(),
$validation,
$message
);
if ($validator->fails()) {
return response()->json(
[
'status' => 'error',
'message' => 'Please enter required detail!.',
'errors' => $validator->errors()
],
422
);
}
$answer_file = "";
if ($request->answer_file) {
$answer_file = time() . '.' . $request->answer_file->getClientOriginalExtension();
$request->answer_file->move(public_path('docs/evaluation_answer_file'), $answer_file);
}
$user_id = Auth::user()->id ;
if (UserEvaluation::where('user_id', $user_id)->where('evaluation_id', $request->evaluation_id)->exists()) {
UserEvaluation::where('user_id', $user_id)
->where('evaluation_id', $request->evaluation_id)
->update(
['evaluation_status_id' => 2,'answer' => $request->answer,'time_expend' =>
$request->time_expend,'answer_file' => $answer_file]
);
} else {
UserEvaluation::create(
['user_id' => $user_id,'evaluation_id' => $request->evaluation_id,
'evaluation_status_id' => 2,'answer' => $request->answer,
'time_expend' => $request->time_expend,'answer_file' => $answer_file]
);
}
\App\Models\Profile::where('user_id', $user_id)
->where('translator_status_id', 3)
->update(['translator_status_id' => 4]);
$userEvaluations = UserEvaluation::getUserEvaluation(['user_id' => $user_id]);
$translatorStatus = \App\Models\Profile::
select('profiles.translator_status_id', 'translator_status.translator_status_name as translator_status_name')
->join('translator_status', 'translator_status.id', '=', 'profiles.translator_status_id')
->where('profiles.user_id', $user_id)
->first();
$existingIds = [];
$userSkillPairs = UserSkillPair::where('user_id', $user_id)->get();
foreach ($userSkillPairs as $userSkillPair) {
$usfLng = $userSkillPair->from_language_id;
$ustLng = $userSkillPair->to_language_id;
foreach ($userEvaluations as $userEvaluation) {
$uefLng = $userEvaluation->from_language_id;
$uetLng = $userEvaluation->to_language_id;
if ($usfLng == $uefLng && $ustLng == $uetLng) {
$existingIds[] = $userSkillPair->id ;
}
}
}
$missingEvaluationFor = UserSkillPair::
select(
'user_skill_pairs.id',
'from_languages.id as from_language_id',
'to_languages.id as to_language_id',
'from_languages.language_l as from_language',
'to_languages.language_l as to_language'
)
->join('languages as from_languages', 'from_languages.id', '=', 'user_skill_pairs.from_language_id')
->join('languages as to_languages', 'to_languages.id', '=', 'user_skill_pairs.to_language_id')
->where('user_skill_pairs.user_id', $user_id)->whereNotIn('user_skill_pairs.id', $existingIds)->get();
return response()->json(
[
'status' => 'success',
'message' => 'Evaluation submited successfully.',
'translator_status_id' => $translatorStatus->translator_status_id,
'translator_status_name' => $translatorStatus->translator_status_name,
'userEvaluations' => $userEvaluations,
'missingEvaluationFor' => $missingEvaluationFor
],
200
);
}
}