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

/**
 * UserSkillController 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 App\Models\UserSkill;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator;
use DB ;

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

class UserSkillController extends Controller
{

    /**
     * GetUserSkills function gets the skills of a specified user
     * and return it in json format.
     *
     * @param  \Illuminate\Http\Request  request
     * @return json
     */
    public function getUserSkills(Request $request): \Illuminate\Http\JsonResponse
    {
        $id = Auth::user()->id ;
        $userSkills = UserSkill::
        select("user_skills.*", 'languages.language_l', 'proficiencys.proficiency')
            ->join('languages', 'languages.id', '=', 'user_skills.language_id')
            ->join('proficiencys', 'proficiencys.id', '=', 'user_skills.proficiency_id')
            ->where('user_skills.user_id', $id)->get();

        return response()->json(
            [
                'status' => 'success',
                'userSkills' => $userSkills->toArray()
            ],
            200
        );
    }


    /**
     * Insert function adds the language for a specified user profile
     * and return json.
     *
     * @param  \Illuminate\Http\Request  request
     * @return json
     */
    public function insert(Request $request): \Illuminate\Http\JsonResponse
    {
        $validator = Validator::make(
            $request->all(),
            [
            'language_id' => 'required',
            'proficiency_id' => 'required',
            ],
            [
            'language_id.required' => 'Please select language!',
            'proficiency_id.required' => 'Please select proficiency!',
            ]
        );

        if ($validator->fails() || $request->language_id == 'undefined' || $request->proficiency_id == 'undefined') {
            return response()->json(
                [
                'status' => 'error',
                'message' => 'Please select required field!.',
                'errors' => $validator->errors()
                ],
                422
            );
        }
        $user_id = Auth::user()->id ;
        if (UserSkill::where('user_id', $user_id)->where('language_id', $request->language_id)->exists()) {
            $userSkills = UserSkill::
            select("user_skills.*", 'languages.language_l', 'proficiencys.proficiency')
                ->join('languages', 'languages.id', '=', 'user_skills.language_id')
                ->join('proficiencys', 'proficiencys.id', '=', 'user_skills.proficiency_id')
                ->where('user_skills.user_id', $user_id)->get();
            return response()->json(
                [
                'status' => 'success',
                'message' => 'This language is already in your profile.',
                'userSkills' => $userSkills->toArray()
                ],
                200
            );
        }
        
        UserSkill::create(
            ['user_id' => $user_id,'language_id' => $request->language_id,'proficiency_id' => $request->proficiency_id]
        );


        $profile = \App\Models\Profile::where('user_id', $user_id)->first();
        if ($profile->translator_status_id == 2 && $profile->info_status == 1) {
            $profile->translator_status_id = 3 ;
            $profile->save();
        }
        //$data['skill_status'] = 1 ;
        

        $userSkills = UserSkill::
            select("user_skills.*", 'languages.language_l', 'proficiencys.proficiency')
            ->join('languages', 'languages.id', '=', 'user_skills.language_id')
            ->join('proficiencys', 'proficiencys.id', '=', 'user_skills.proficiency_id')
            ->where('user_skills.user_id', $user_id)->get();

        \App\Models\UserSkillPair::updateUserSkillPairs($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();

        return response()->json(
            [
            'status' => 'success',
            'message' => 'Language added successfully.',
            'translator_status_id' => $translatorStatus->translator_status_id,
            'translator_status_name' => $translatorStatus->translator_status_name,
            'userSkills' => $userSkills->toArray()
            ],
            200
        );
    }

    /**
     * Update function updates the language for the specified user
     * and return json.
     *
     * @param  \Illuminate\Http\Request  request
     * @return json
     */
    public function update(Request $request): \Illuminate\Http\JsonResponse
    {
        $validator = Validator::make(
            $request->all(),
            [
            'proficiency_id.*' => 'required',
            ],
            [
            'proficiency_id.required' => 'Please select proficiency!',
            ]
        );

        if ($validator->fails()) {
            $messages = $validator->errors()->all();
            ;
            $error_in = [];
            foreach ($messages as $messages) {
                $id =  substr($messages, 19, 1);
                $error_in[] = intval($id);
            }
            return response()->json(
                [
                'status' => 'error',
                'message' => 'Please select proficiency!',
                'error_in' => $error_in,
                'errors' => $validator->errors()
                ],
                422
            );
        }
        $user_id = Auth::user()->id ;
        $language_id = $request->language_id ;
        $proficiency_id = $request->proficiency_id ;

        $i = 0 ;
        $ids = [] ;
        if ($request->language_id) {
            foreach ($request->language_id as $language_id) {
                $ids[] = $language_id ;
                $userSkill = UserSkill::updateOrCreate(
                    ['user_id' => $user_id,'language_id' => $language_id],
                    ['user_id' => $user_id,'language_id' => $language_id,'proficiency_id' => $proficiency_id[$i]]
                );
                $i++;
            }
        }
        
        
        if (sizeof($ids) > 0) {
            UserSkill::where('user_id', $user_id)->whereNotIn('language_id', $ids)->delete();
        } else {
            UserSkill::where('user_id', $user_id)->delete();
        }
        
        \App\Models\UserSkillPair::updateUserSkillPairs($user_id);

        $userSkills = UserSkill::
        select("user_skills.*", 'languages.language_l', 'proficiencys.proficiency')
            ->join('languages', 'languages.id', '=', 'user_skills.language_id')
            ->join('proficiencys', 'proficiencys.id', '=', 'user_skills.proficiency_id')
            ->where('user_skills.user_id', $user_id)->get();

        return response()->json(
            [
                'status' => 'success',
                'message' => 'Language updated successfully.',
                'userSkills' => $userSkills->toArray()
            ],
            200
        );
    }
}