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
);
}
}