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: 7.4.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: /home/imensosw/www/ezwork/app/Models/UserEvaluation.php
<?php

/**
 * UserEvaluationModel class file
 *
 * PHP Version 7.2
 *
 * @category Model
 * @package  Ez
 * @author   Imenso Software <admin@imensosoftware.com>
 * @license  http://imensosoftware/license.php GNU Public License
 * @link     http://imensosoftware.com/recipes
 */

namespace App\Models;

use DB;
use Illuminate\Database\Eloquent\Model;
use App\Models\UserSkill;
use App\Models\Evaluation;
use App\Models\Language;

/**
 * UserEvaluationModel class
 *
 * The class manage User Evaluation related queries
 *
 * @category UserEvaluationModel
 * @package  Ez
 * @author   Imenso Software <admin@imensosoftware.com>
 * @license  http://imensosoftware/license.php GNU Public License
 * @link     http://imensosoftware.com/recipes
 */

class UserEvaluation extends Model
{

    public $table = 'user_evaluations';

    public $fillable = [
        'user_id',
        'evaluation_id',
        'evaluation_status_id',
        'is_started',
        'answer',
        'answer_file',
        'time_expend',
        'score',
        'semantic_score',
        'terminology_score',
        'syntax_score',
        'quality_score',
        'beauty_score',
    ];

    
    /**
     * GetUserEvaluation function gets the list of evaluation of specified
     * user and return in array.
     *
     * @param  array data
     * @return \App\Models\Evaluation
     */
    public static function getUserEvaluation($data)
    {
        $user_id         = $data['user_id'];
        $userLanguageIds = UserSkill::select(
            DB::raw(
                'group_concat(user_skills.language_id) 
            as language_ids'
            )
        )->where('user_skills.user_id', '=', $user_id)
            ->groupBy('user_skills.user_id')->first();

        if ($userLanguageIds) {
            $userLanguageIds = explode(',', $userLanguageIds->language_ids);
        } else {
            $userLanguageIds = [];
        }

        // if(sizeof($userLanguageIds) < 2)
        // {
        // return [] ;
        // }
        $return = [];

        if (sizeof($userLanguageIds) > 1) {
            $userLanguageArray    = Language::getLanguageCombination($userLanguageIds, 2);
            $userEvaluations      = self::select(
                'evaluations.*',
                'user_evaluations.id as user_evaluations_id',
                'user_evaluations.evaluation_status_id',
                'user_evaluations.score',
                'user_evaluations.answer',
                'user_evaluations.answer_file',
                'user_evaluations.time_expend',
                'user_evaluations.semantic_score as user_semantic_score',
                'user_evaluations.terminology_score as user_terminology_score',
                'user_evaluations.syntax_score as user_syntax_score',
                'user_evaluations.quality_score  as user_quality_score',
                'user_evaluations.beauty_score as user_beauty_score',
                'from_languages.language_l as from_language',
                'to_languages.language_l as to_language',
                'evaluation_status.status_name',
                'evaluation_status.css_class',
                DB::raw(
                    'user_evaluations.semantic_score+
                    user_evaluations.terminology_score+user_evaluations.syntax_score+user_evaluations.
                    quality_score+user_evaluations.beauty_score AS user_total_score'
                ),
                DB::raw(
                    '5 as rating_count'
                ),
                DB::raw(
                    'round(user_evaluations.rating) AS user_score_rating'
                ),
                DB::raw(
                    'user_evaluations.rating AS dec_score_rating'
                ),
                DB::raw(
                    'evaluations.semantic_score+
                    evaluations.terminology_score+evaluations.syntax_score+evaluations.
                    quality_score+evaluations.beauty_score AS total_score'
                )
            )
                ->join('evaluations', 'evaluations.id', '=', 'user_evaluations.evaluation_id')
                ->join(
                    'languages as from_languages',
                    'from_languages.id',
                    '=',
                    'evaluations.from_language_id'
                )
                ->join(
                    'languages as to_languages',
                    'to_languages.id',
                    '=',
                    'evaluations.to_language_id'
                )
                ->leftJoin(
                    'evaluation_status',
                    'evaluation_status.id',
                    '=',
                    'user_evaluations.evaluation_status_id'
                )
                ->where('user_evaluations.user_id', $user_id)->groupBy('evaluations.id')->get();
            $userLanguageArrayNew = $userLanguageArray;
            foreach ($userEvaluations as $userEvaluation) {
                $return[]  = $userEvaluation;
                $keyRemove = '';

                foreach ($userLanguageArray as $i => $val) {
                    $uefLng = $userEvaluation['from_language_id'];
                    $uetLng = $userEvaluation['to_language_id'];
                    if ($userLanguageArray[$i][0] == $uefLng && $userLanguageArray[$i][1] == $uetLng) {
                        unset($userLanguageArray[$i]);
                    }
                }
            }
            foreach ($userLanguageArray as $userLanguage) {
                $evaluation = Evaluation::select(
                    'evaluations.*',
                    'user_evaluations.id as user_evaluations_id',
                    'user_evaluations.evaluation_status_id',
                    'user_evaluations.score',
                    'user_evaluations.answer',
                    'user_evaluations.answer_file',
                    'user_evaluations.time_expend',
                    'user_evaluations.semantic_score as user_semantic_score',
                    'user_evaluations.terminology_score as user_terminology_score',
                    'user_evaluations.syntax_score as user_syntax_score',
                    'user_evaluations.quality_score  as user_quality_score',
                    'user_evaluations.beauty_score as user_beauty_score',
                    'from_languages.language_l as from_language',
                    'to_languages.language_l as to_language',
                    'evaluation_status.status_name',
                    'evaluation_status.css_class',
                    DB::raw(
                        'user_evaluations.semantic_score+
                        user_evaluations.terminology_score+user_evaluations.syntax_score+
                        user_evaluations.quality_score+user_evaluations.beauty_score AS user_total_score'
                    ),
                    DB::raw(
                        'evaluations.semantic_score+
                        evaluations.terminology_score+evaluations.syntax_score+evaluations.quality_score
                        +evaluations.beauty_score AS total_score'
                    )
                )
                    ->join(
                        'languages as from_languages',
                        'from_languages.id',
                        '=',
                        'evaluations.from_language_id'
                    )
                    ->join('languages as to_languages', 'to_languages.id', '=', 'evaluations.to_language_id')
                    ->leftJoin(
                        'user_evaluations',
                        function ($join) use ($user_id) {
                            $join->on('user_evaluations.evaluation_id', '=', 'evaluations.id')
                                ->where('user_evaluations.user_id', '=', $user_id);
                        }
                    )
                ->leftJoin('evaluation_status', 'evaluation_status.id', '=', 'user_evaluations.evaluation_status_id')
                ->where('evaluations.status_id', 1)
                ->where('evaluations.from_language_id', $userLanguage[0])
                ->where('evaluations.to_language_id', $userLanguage[1])
                ->groupBy('evaluations.id')->first();

                if ($evaluation) {
                    $return[] = $evaluation;
                }
            }//end foreach
        } else {
            $evaluation = Evaluation::select(
                'evaluations.*',
                'user_evaluations.id as user_evaluations_id',
                'user_evaluations.evaluation_status_id',
                'user_evaluations.score',
                'user_evaluations.answer',
                'user_evaluations.answer_file',
                'user_evaluations.time_expend',
                'user_evaluations.semantic_score as user_semantic_score',
                'user_evaluations.terminology_score as user_terminology_score',
                'user_evaluations.syntax_score as user_syntax_score',
                'user_evaluations.quality_score  as user_quality_score',
                'user_evaluations.beauty_score as user_beauty_score',
                'from_languages.language_l as from_language',
                'to_languages.language_l as to_language',
                'evaluation_status.status_name',
                'evaluation_status.css_class',
                DB::raw(
                    'user_evaluations.semantic_score+
                    user_evaluations.terminology_score+user_evaluations.syntax_score+
                    user_evaluations.quality_score+user_evaluations.beauty_score AS user_total_score'
                ),
                DB::raw(
                    'evaluations.semantic_score+
                evaluations.terminology_score+evaluations.syntax_score+evaluations.quality_score
                +evaluations.beauty_score AS total_score'
                )
            )
                ->join('languages as from_languages', 'from_languages.id', '=', 'evaluations.from_language_id')
                ->join('languages as to_languages', 'to_languages.id', '=', 'evaluations.to_language_id')
                ->join(
                    'user_evaluations',
                    function ($join) use ($user_id) {
                        $join->on('user_evaluations.evaluation_id', '=', 'evaluations.id')
                            ->where('user_evaluations.user_id', '=', $user_id);
                    }
                )
            ->leftJoin(
                'evaluation_status',
                'evaluation_status.id',
                '=',
                'user_evaluations.evaluation_status_id'
            )
            ->where('user_evaluations.user_id', $user_id)->groupBy('evaluations.id')->get();
            if ($evaluation) {
                $return = $evaluation;
            }
        }//end if
        return $return;
    }
    //  end getUserEvaluation()
}
//  end class