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/UserContract.php
<?php

/**
 * UserContractModel 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 Illuminate\Database\Eloquent\Model;
use App\Models\UserSkillPair;

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

class UserContract extends Model
{

    public $table = 'user_contracts';

    public $fillable = [
        'user_id',
        'from_language_id',
        'to_language_id',
        'status_id',
        'country_id',
        'rating',
        'translator_flag_id',
        'translator_type_id',
        'fixed_income',
        'proofreading_status_id',
        'translation_words',
        'proofreading_words',
        'translation_price',
        'proofreading_price',
        'contract_file',
        'contract_sent_date',
        'contract_accept_date',
    ];

        
    /**
     * GetUserContract function get the contract of specified users
     * and return list of contracts.
     *
     * @param  array data
     * @return \App\Models\UserEvaluation
     */
    public static function getUserContract($data)
    {
        $user_id        = $data['user_id'];
        $userSkillPairs = UserSkillPair::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'
        )->leftJoin(
            'user_contracts',
            function ($join) use ($user_id) {
                $join->on('user_contracts.user_id', '=', 'user_skill_pairs.user_id')
                    ->on('user_contracts.from_language_id', '=', 'user_skill_pairs.from_language_id')
                    ->on('user_contracts.to_language_id', '=', 'user_skill_pairs.to_language_id');
            }
        )
        ->leftJoin('status', 'status.id', '=', 'user_contracts.status_id')
        ->leftJoin(
            'translator_types',
            'translator_types.id',
            '=',
            'user_contracts.translator_type_id'
        )
        ->leftJoin(
            'translator_flags',
            'translator_flags.id',
            '=',
            'user_contracts.translator_flag_id'
        )
        ->leftJoin(
            'countrys',
            'countrys.id',
            '=',
            'user_contracts.country_id'
        )
        ->select(
            'user_contracts.*',
            'user_skill_pairs.id as user_skill_pair_id',
            'user_skill_pairs.from_language_id as from_id',
            'user_skill_pairs.to_language_id as to_id',
            'from_languages.language_l as from_language',
            'to_languages.language_l as to_language',
            'translator_types.translator_type',
            'translator_flags.translator_flag',
            'countrys.currency'
        )
        ->where('user_skill_pairs.user_id', $user_id)->orderBy('user_contracts.status_id', 'desc')
        ->get();

        $data = [];

        foreach ($userSkillPairs as $userSkillPair) {
            $userEvaluation = \App\Models\UserEvaluation::
            join('evaluations', 'evaluations.id', '=', 'user_evaluations.evaluation_id')
                ->where('evaluations.from_language_id', $userSkillPair->from_id)
                ->where('evaluations.to_language_id', $userSkillPair->to_id)
                ->where('user_evaluations.evaluation_status_id', 4)
                ->where('user_evaluations.user_id', $user_id)->first();
            if ($userEvaluation) {
                $userSkillPair['evaluation_status_id'] = $userEvaluation->evaluation_status_id;
                $userSkillPair['evaluation_rating'] = $userEvaluation->rating;
                $data[] = $userSkillPair;
            } else {
                $userSkillPair['evaluation_status_id'] = 1;
                $userSkillPair['evaluation_rating'] = 0;
                $data[] = $userSkillPair;
            }
        }

        $oldContracts = self::join(
            'languages as from_languages',
            'from_languages.id',
            '=',
            'user_contracts.from_language_id'
        )->join(
            'languages as to_languages',
            'to_languages.id',
            '=',
            'user_contracts.to_language_id'
        )->leftJoin(
            'user_skill_pairs',
            function ($join) use ($user_id) {
                $join->on('user_contracts.user_id', '=', 'user_skill_pairs.user_id')
                    ->on('user_contracts.from_language_id', '=', 'user_skill_pairs.from_language_id')
                    ->on('user_contracts.to_language_id', '=', 'user_skill_pairs.to_language_id');
            }
        )
        ->leftJoin('status', 'status.id', '=', 'user_contracts.status_id')
        ->leftJoin(
            'translator_types',
            'translator_types.id',
            '=',
            'user_contracts.translator_type_id'
        )
        ->leftJoin(
            'translator_flags',
            'translator_flags.id',
            '=',
            'user_contracts.translator_flag_id'
        )
        ->leftJoin(
            'countrys',
            'countrys.id',
            '=',
            'user_contracts.country_id'
        )
        ->select(
            'user_contracts.*',
            'user_skill_pairs.id as user_skill_pair_id',
            'user_skill_pairs.from_language_id as from_id',
            'user_skill_pairs.to_language_id as to_id',
            'from_languages.language_l as from_language',
            'to_languages.language_l as to_language',
            'translator_types.translator_type',
            'translator_flags.translator_flag',
            'countrys.currency'
        )
        ->where('user_contracts.user_id', $user_id)->whereNull('user_skill_pairs.id')->get();

        if ($oldContracts) {
            foreach ($oldContracts as $oldContract) {
                $userEvaluation = \App\Models\UserEvaluation::join(
                    'evaluations',
                    'evaluations.id',
                    '=',
                    'user_evaluations.evaluation_id'
                )
                    ->where('evaluations.from_language_id', $oldContract->from_id)
                    ->where('evaluations.to_language_id', $oldContract->to_id)
                    ->where('user_evaluations.evaluation_status_id', 4)
                    ->where('user_evaluations.user_id', $user_id)->first();
                if ($userEvaluation) {
                    $oldContract['evaluation_status_id'] = $userEvaluation->evaluation_status_id;
                    $oldContract['evaluation_rating'] = $userEvaluation->rating;
                    $data[] = $oldContract;
                } else {
                    $oldContract['evaluation_status_id'] = 1;
                    $oldContract['evaluation_rating'] = 0;
                    $data[] = $oldContract;
                }
            }
        }
        return $data;
    }
    //  end getUserContract()
}
//  end class