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/Http/Controllers/UserExperienceController.php
<?php

/**
 * UserExperienceController 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 Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Validator;
use DB ;
use App\Models\UserExperience;
use App\Models\UserExperienceType;
use App\Models\UserExperienceDoc;

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

class UserExperienceController extends Controller
{

    /**
     * GetUserWorkHistory function gets the work history of a specified user
     * from the storage and return it in json format.
     *
     * @param  \Illuminate\Http\Request  request
     * @return json
     */
    public function getUserWorkHistory(Request $request): \Illuminate\Http\JsonResponse
    {
        $user_id = Auth::user()->id ;
        $userExperience = UserExperience::getUserExperience($user_id);
        $userExperienceTypes = UserExperienceType::getUserExperienceTypes($user_id);
        $userExperienceDocs = UserExperienceDoc::getUserExperienceDocs($user_id);

        return response()->json(
            [
                'status' => 'success',
                'userExperience' => $userExperience,
                'userExperienceTypes' => $userExperienceTypes->toArray(),
                'userExperienceDocs' => $userExperienceDocs->toArray()
            ],
            200
        );
    }
    /**
     * UpdateWorkHistory function updates the work history of the specified
     * user and return it in json format.
     *
     * @param  \Illuminate\Http\Request  request
     * @return json
     */
    public function updateWorkHistory(Request $request): \Illuminate\Http\JsonResponse
    {
        
        $removeDocCount = 0 ;
        if ($request->remove_docs != '') {
            $removeDocs = explode(',', $request->remove_docs);
            $removeDocCount = sizeof($removeDocs);
        }
        $docCount = UserExperienceDoc::where('user_id', Auth::user()->id)->count();
        $docs_validation = "nullable";
        if ($docCount == $removeDocCount) {
            $docs_validation = "required";
        }
        $validator = Validator::make(
            $request->all(),
            [
            'experience_id' => 'required',
            'experience_type_id' => 'required',
            "experience_docs"   => "$docs_validation",
            /*'experience_docs.*' => "image"*/
            'experience_docs.*' => 'max:2048|mimes:pdf,jpg,png,jpeg',
            ],
            [
            'experience_id.required' => 'Please select work experience!',
            'experience_type_id.required' => 'Please select work experience type!',
            'experience_docs.required' => 'Please upload proof of work experience!',
            /*'experience_docs.image' => 'Document must be an image!',*/
            'experience_docs.mimes' => 'Document must be a pdf, jpg, png, jpeg!',
            'experience_docs.max' => 'Document must be less then 2 MB!'
            ]
        );
        if ($validator->fails()) {
            $messages = $validator->errors()->all();
            ;
            $error_in = [];
            foreach ($messages as $messages) {
                $id =  substr($messages, 20, 1);
                if ($id > 0) {
                    $error_in[] = intval($id);
                }
            }
            return response()->json(
                [
                'status' => 'error',
                'message' => 'Please provide required detail!',
                'error_in' => $error_in,
                'errors' => $validator->errors()
                ],
                422
            );
        }

        $user_id = Auth::user()->id ;
        $experience_id = $request->experience_id ;

        $userSkill = UserExperience::updateOrCreate(
            ['user_id' => $user_id],
            ['user_id' => $user_id,'experience_id' => $experience_id]
        );

        $user = \App\User::find($user_id);
        $experienceTypes = [];
        foreach ($request->experience_type_id as $experience_type_id) {
            $experienceTypes[] = $experience_type_id;
        }
        $user->experienceTypes()->sync($experienceTypes);

        $i = 1;
        $experienceDocNames = [];


        if ($request->remove_docs != '') {
            $removeDocs = explode(',', $request->remove_docs);
            UserExperienceDoc::whereIn('id', $removeDocs)->delete();
        }

        if ($request->experience_docs) {
            foreach ($request->experience_docs as $experience_docs) {
                $experienceDocName = time() . $i . '.' . $experience_docs->getClientOriginalExtension();
                $experienceDocNames[] = ['doc_name' => $experienceDocName] ;
                $experience_docs->move(public_path('docs/work_history'), $experienceDocName);
                $i++;
            }
            $user->experienceDocs()->createMany($experienceDocNames);
        }
    
        $userExperience = UserExperience::getUserExperience($user_id);
        $userExperienceTypes = UserExperienceType::getUserExperienceTypes($user_id);
        $userExperienceDocs = UserExperienceDoc::getUserExperienceDocs($user_id);

        return response()->json(
            [
                'status' => 'success',
                'message' => 'Work history updated successfully.',
                'userExperience' => $userExperience,
                'userExperienceTypes' => $userExperienceTypes->toArray(),
                'userExperienceDocs' => $userExperienceDocs->toArray()
            ],
            200
        );
    }
}