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