MOON
Server: Apache
System: Linux e2e-78-16.ssdcloudindia.net 3.10.0-1160.45.1.el7.x86_64 #1 SMP Wed Oct 13 17:20:51 UTC 2021 x86_64
User: imensosw (1005)
PHP: 8.0.30
Disabled: exec,passthru,shell_exec,system
Upload Files
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
        );
    }
}