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

/**
 * UserSubjectExpertiseController 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\UserSubjectExpertise;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator;
use DB ;

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

class UserSubjectExpertiseController extends Controller
{
    /**
     * GetUserSubjectExpertise function gets the subject expertise of specified user
     * from the storage and return it in json format.
     *
     * @param  \Illuminate\Http\Request  request
     * @return json
     */
    public function getUserSubjectExpertise(Request $request): \Illuminate\Http\JsonResponse
    {
        $user_id = Auth::user()->id ;
        $userSubjectExpertises = UserSubjectExpertise::
        select("user_subject_expertises.*", 'subjects.subject', 'expertises.expertise_level')
            ->join('subjects', 'subjects.id', '=', 'user_subject_expertises.subject_id')
            ->join('expertises', 'expertises.id', '=', 'user_subject_expertises.expertise_id')
            ->where('user_subject_expertises.user_id', $user_id)->get();

        return response()->json(
            [
                'status' => 'success',
                'userSubjectExpertises' => $userSubjectExpertises->toArray()
            ],
            200
        );
    }
    /**
     * Insert function adds subject expertise in the storage for
     * the specified user and return json.
     *
     * @param  \Illuminate\Http\Request  request
     * @return json
     */
    public function insert(Request $request): \Illuminate\Http\JsonResponse
    {
        $validator = Validator::make(
            $request->all(),
            [
            'subject_id' => 'required',
            'expertise_id' => 'required',
            ],
            [
            'subject_id.required' => 'Please select subject!',
            'expertise_id.required' => 'Please select expertise level!',
            ]
        );
        if ($validator->fails()) {
            return response()->json(
                [
                'status' => 'error',
                'message' => 'Please select required field!.',
                'errors' => $validator->errors()
                ],
                422
            );
        }
        if ($request->subject_id == 'undefined' || $request->expertise_id == 'undefined') {
            return response()->json(
                [
                'status' => 'error',
                'message' => 'Please select required field!.',
                'errors' => 'errors'
                ],
                422
            );
        }

        $user_id = Auth::user()->id ;
        if (UserSubjectExpertise::where('user_id', $user_id)->where('subject_id', $request->subject_id)->exists()) {
            $userSubjectExpertises = UserSubjectExpertise::
                select("user_subject_expertises.*", 'subjects.subject', 'expertises.expertise_level')
                ->join('subjects', 'subjects.id', '=', 'user_subject_expertises.subject_id')
                ->join('expertises', 'expertises.id', '=', 'user_subject_expertises.expertise_id')
                ->where('user_subject_expertises.user_id', $user_id)->get();
            return response()->json(
                [
                'status' => 'success',
                'message' => 'This subject is already in your profile.',
                'userSubjectExpertises' => $userSubjectExpertises->toArray()
                ],
                200
            );
        }


        UserSubjectExpertise::create(
            ['user_id' => $user_id,'subject_id' => $request->subject_id,'expertise_id' => $request->expertise_id]
        );

        $userSubjectExpertises = UserSubjectExpertise::
        select("user_subject_expertises.*", 'subjects.subject', 'expertises.expertise_level')
            ->join('subjects', 'subjects.id', '=', 'user_subject_expertises.subject_id')
            ->join('expertises', 'expertises.id', '=', 'user_subject_expertises.expertise_id')
            ->where('user_subject_expertises.user_id', $user_id)->get();
        return response()->json(
            [
                'status' => 'success',
                'message' => 'Expertise added successfully.',
                'userSubjectExpertises' => $userSubjectExpertises->toArray()
            ],
            200
        );
    }

    /**
     * Update function updates the subject expertise for the specified user in
     * the storage and return it in json format.
     *
     * @param  \Illuminate\Http\Request  request
     * @return json
     */
    public function update(Request $request): \Illuminate\Http\JsonResponse
    {

        $validator = Validator::make(
            $request->all(),
            [
            'expertise_id.*' => 'required',
            ],
            [
            'expertise_id.required' => 'Please select expertise level!',
            ]
        );

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

        $id = $request->id ;
        $subject_id = $request->subject_id ;
        $expertise_id = $request->expertise_id ;

        $i = 0 ;
        $ids = [] ;
        if ($request->subject_id) {
            foreach ($request->subject_id as $subject_id) {
                $ids[] = $subject_id ;
                $userSkill = UserSubjectExpertise::updateOrCreate(
                    ['user_id' => $user_id,'subject_id' => $subject_id],
                    ['user_id' => $user_id,'subject_id' => $subject_id,'expertise_id' => $expertise_id[$i]]
                );
                $i++;
            }
        }

        if (sizeof($ids) > 0) {
            UserSubjectExpertise::where('user_id', $user_id)->whereNotIn('subject_id', $ids)->delete();
        } else {
            UserSubjectExpertise::where('user_id', $user_id)->delete();
        }
        
        $userSubjectExpertises = UserSubjectExpertise::
        select("user_subject_expertises.*", 'subjects.subject', 'expertises.expertise_level')
            ->join('subjects', 'subjects.id', '=', 'user_subject_expertises.subject_id')
            ->join('expertises', 'expertises.id', '=', 'user_subject_expertises.expertise_id')
            ->where('user_subject_expertises.user_id', $user_id)->get();
        return response()->json(
            [
                'status' => 'success',
                'message' => 'Expertise updated successfully.',
                'userSubjectExpertises' => $userSubjectExpertises->toArray()
            ],
            200
        );
    }
}