cms-token/@core/app/Http/Controllers/JobsController.php

419 lines
18 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Helpers\NexelitHelpers;
use App\JobApplicant;
use App\Jobs;
use App\JobsCategory;
use App\Language;
use App\Mail\BasicMail;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Str;
class JobsController extends Controller
{
public function __construct()
{
$this->middleware('auth:admin');
}
public function all_jobs(){
$all_jobs = Jobs::all()->groupBy('lang');
return view('backend.jobs.all-jobs')->with(['all_jobs' => $all_jobs]);
}
public function edit_job($id){
$job_post = Jobs::find($id);
$all_category = JobsCategory::where(['status' => 'publish','lang' => $job_post->lang])->get();
$all_language = Language::all();
return view('backend.jobs.edit-job')->with([
'all_languages' => $all_language,
'all_category' => $all_category,
'job_post' => $job_post
]);
}
public function new_job(){
$all_category = JobsCategory::where(['status' => 'publish','lang' => get_default_language()])->get();
$all_language = Language::all();
return view('backend.jobs.new-job')->with(['all_languages' => $all_language,'all_category' => $all_category]);
}
public function store_job(Request $request){
$this->validate($request,[
'title' => 'required|string',
'position' => 'required|string|max:191',
'company_name' => 'required|string|max:191',
'category_id' => 'required|string|max:191',
'vacancy' => 'required|string|max:191',
'job_responsibility' => 'required|string',
'employment_status' => 'required|string',
'education_requirement' => 'nullable|string',
'job_context' => 'nullable|string',
'experience_requirement' => 'nullable|string',
'additional_requirement' => 'nullable|string',
'job_location' => 'required|string',
'salary' => 'required|string',
'lang' => 'required|string|max:191',
'other_benefits' => 'nullable|string',
'email' => 'nullable|string|max:191',
'status' => 'nullable|string|max:191',
'deadline' => 'required|string|max:191',
'meta_tags' => 'nullable|string|max:191',
'meta_description' => 'nullable|string|max:191',
'slug' => 'nullable|string|max:191',
]);
$slug = !empty($request->slug) ? $request->slug : Str::slug($request->title,$request->lang);
Jobs::create([
'title' => $request->title,
'position' => $request->position,
'company_name' => $request->company_name,
'category_id' => $request->category_id,
'vacancy' => $request->vacancy,
'job_responsibility' => $request->job_responsibility,
'employment_status' => $request->employment_status,
'education_requirement' => $request->education_requirement,
'job_context' => $request->job_context,
'experience_requirement' => $request->experience_requirement,
'additional_requirement' => $request->additional_requirement,
'job_location' => $request->job_location,
'salary' => $request->salary,
'lang' => $request->lang,
'other_benefits' => $request->other_benefits,
'email' => $request->email,
'status' => $request->status,
'deadline' => $request->deadline,
'meta_tags' => $request->meta_tags,
'meta_description' => $request->meta_description,
'application_fee' => $request->application_fee,
'application_fee_status' => $request->application_fee_status,
'slug' => $slug,
]);
return redirect()->back()->with(['msg' => __('New Job Post Added'),'type' => 'success']);
}
public function update_job(Request $request){
$this->validate($request,[
'title' => 'required|string',
'position' => 'required|string|max:191',
'company_name' => 'required|string|max:191',
'category_id' => 'required|string|max:191',
'vacancy' => 'required|string|max:191',
'job_responsibility' => 'required|string',
'employment_status' => 'required|string',
'education_requirement' => 'nullable|string',
'experience_requirement' => 'nullable|string',
'additional_requirement' => 'nullable|string',
'job_context' => 'nullable|string',
'job_location' => 'required|string',
'salary' => 'required|string',
'lang' => 'required|string|max:191',
'other_benefits' => 'nullable|string',
'email' => 'nullable|string|max:191',
'status' => 'nullable|string|max:191',
'deadline' => 'required|string|max:191',
'meta_tags' => 'nullable|string|max:191',
'meta_description' => 'nullable|string|max:191',
'slug' => 'nullable|string|max:191',
]);
$slug = !empty($request->slug) ? $request->slug : Str::slug($request->title,$request->lang);
Jobs::find($request->job_id)->update([
'title' => $request->title,
'position' => $request->position,
'company_name' => $request->company_name,
'category_id' => $request->category_id,
'vacancy' => $request->vacancy,
'job_responsibility' => $request->job_responsibility,
'employment_status' => $request->employment_status,
'education_requirement' => $request->education_requirement,
'job_context' => $request->job_context,
'experience_requirement' => $request->experience_requirement,
'additional_requirement' => $request->additional_requirement,
'job_location' => $request->job_location,
'salary' => $request->salary,
'lang' => $request->lang,
'other_benefits' => $request->other_benefits,
'email' => $request->email,
'status' => $request->status,
'deadline' => $request->deadline,
'meta_tags' => $request->meta_tags,
'meta_description' => $request->meta_description,
'slug' => $slug,
'application_fee' => $request->application_fee,
'application_fee_status' => $request->application_fee_status,
]);
return redirect()->back()->with(['msg' => __('Job Post Update Success...'),'type' => 'success']);
}
public function clone_job(Request $request){
$job_post = Jobs::find($request->item_id);
Jobs::create([
'title' => $job_post->title,
'position' => $job_post->position,
'company_name' => $job_post->company_name,
'category_id' => $job_post->category_id,
'vacancy' => $job_post->vacancy,
'job_responsibility' => $job_post->job_responsibility,
'employment_status' => $job_post->employment_status,
'education_requirement' => $job_post->education_requirement,
'job_context' => $job_post->job_context,
'experience_requirement' => $job_post->experience_requirement,
'additional_requirement' => $job_post->additional_requirement,
'job_location' => $job_post->job_location,
'salary' => $job_post->salary,
'lang' => $job_post->lang,
'other_benefits' => $job_post->other_benefits,
'email' => $job_post->email,
'status' => 'draft',
'deadline' => $job_post->deadline,
'meta_tags' => $job_post->meta_tags,
'meta_description' => $job_post->meta_description,
'application_fee' => $job_post->application_fee,
'application_fee_status' => $job_post->application_fee_status,
'slug' => $job_post->title.random_int(999,9999),
]);
return redirect()->back()->with(['msg' => __('Job Post Clone Success...'),'type' => 'success']);
}
public function delete_job(Request $request,$id){
Jobs::find($id)->delete();
return redirect()->back()->with(['msg' => __('Job Post Deleted Success'),'type' => 'danger']);
}
public function page_settings(){
$all_languages = Language::all();
return view('backend.jobs.job-page-settings')->with(['all_languages' => $all_languages]);
}
public function update_page_settings(Request $request){
$this->validate($request,[
'site_job_post_items' => 'required|string|max:191'
]);
$all_languages = Language::all();
foreach ($all_languages as $lang){
$this->validate($request,[
'site_jobs_category_'.$lang->slug.'_title' => 'nullable|string'
]);
$site_jobs_category_title = 'site_jobs_category_'.$lang->slug.'_title';
update_static_option('site_jobs_category_'.$lang->slug.'_title',$request->$site_jobs_category_title);
}
update_static_option('site_job_post_items',$request->site_job_post_items);
return redirect()->back()->with(['msg' => __('Job Page Settings Success...'),'type' => 'success']);
}
public function single_page_settings(){
$all_languages = Language::all();
return view('backend.jobs.job-single-page-settings')->with(['all_languages' => $all_languages]);
}
public function update_single_page_settings(Request $request){
$this->validate($request,[
'job_single_page_apply_form' => 'nullable|string|max:191',
'job_single_page_applicant_mail' => 'required|string|max:191',
]);
$all_languages = Language::all();
foreach ($all_languages as $lang){
$this->validate($request,[
'job_single_page_'.$lang->slug.'_job_context_label' => 'nullable|string',
'job_single_page_'.$lang->slug.'_job_responsibility_label' => 'nullable|string',
'job_single_page_'.$lang->slug.'_education_requirement_label' => 'nullable|string',
'job_single_page_'.$lang->slug.'_experience_requirement_label' => 'nullable|string',
'job_single_page_'.$lang->slug.'_additional_requirement_label' => 'nullable|string',
'job_single_page_'.$lang->slug.'_others_benefits_label' => 'nullable|string',
'job_single_page_'.$lang->slug.'_apply_button_text' => 'nullable|string',
'job_single_page_'.$lang->slug.'_job_info_text' => 'nullable|string',
'job_single_page_'.$lang->slug.'_company_name_text' => 'nullable|string',
'job_single_page_'.$lang->slug.'_job_category_text' => 'nullable|string',
'job_single_page_'.$lang->slug.'_job_position_text' => 'nullable|string',
'job_single_page_'.$lang->slug.'_job_type_text' => 'nullable|string',
'job_single_page_'.$lang->slug.'_salary_text' => 'nullable|string',
'job_single_page_'.$lang->slug.'_job_location_text' => 'nullable|string',
'job_single_page_'.$lang->slug.'_job_deadline_text' => 'nullable|string',
'job_single_page_'.$lang->slug.'_job_application_fee_text' => 'nullable|string',
]);
$all_fileds = [
'job_single_page_'.$lang->slug.'_job_context_label',
'job_single_page_'.$lang->slug.'_job_responsibility_label',
'job_single_page_'.$lang->slug.'_education_requirement_label',
'job_single_page_'.$lang->slug.'_experience_requirement_label',
'job_single_page_'.$lang->slug.'_additional_requirement_label',
'job_single_page_'.$lang->slug.'_others_benefits_label',
'job_single_page_'.$lang->slug.'_apply_button_text',
'job_single_page_'.$lang->slug.'_job_info_text',
'job_single_page_'.$lang->slug.'_company_name_text',
'job_single_page_'.$lang->slug.'_job_category_text',
'job_single_page_'.$lang->slug.'_job_position_text',
'job_single_page_'.$lang->slug.'_job_type_text',
'job_single_page_'.$lang->slug.'_salary_text',
'job_single_page_'.$lang->slug.'_job_location_text',
'job_single_page_'.$lang->slug.'_job_deadline_text',
'job_single_page_'.$lang->slug.'_job_application_fee_text',
];
foreach ($all_fileds as $field){
update_static_option($field,$request->$field);
}
}
update_static_option('job_single_page_apply_form',$request->job_single_page_apply_form);
update_static_option('job_single_page_applicant_mail',$request->job_single_page_applicant_mail);
return redirect()->back()->with(['msg' => __('Job Page Settings Success...'),'type' => 'success']);
}
public function all_jobs_applicant(){
$all_applicant = JobApplicant::all();
return view('backend.jobs.all-applicant')->with(['all_applicant' => $all_applicant]);
}
public function delete_job_applicant(Request $request,$id){
$job_details = JobApplicant::find($id);
$all_attachment = unserialize($job_details->attachment);
if(is_array($all_attachment) || is_object($all_attachment)){
foreach($all_attachment as $name => $path){
if(file_exists($path)){
@unlink($path);
}
}
}
JobApplicant::find($id)->delete();
return redirect()->back()->with(['msg' => __('Job Application Delete Success...'),'type' => 'danger']);
}
public function bulk_action(Request $request){
Jobs::whereIn('id',$request->ids)->delete();
return response()->json(['status' => 'ok']);
}
public function job_applicant_bulk_delete(Request $request){
JobApplicant::whereIn('id',$request->ids)->delete();
return response()->json(['status' => 'ok']);
}
public function job_applicant_report(Request $request){
$order_data = '';
$jobs = Jobs::where(['status' => 'publish','lang' => get_default_language()])->get();
$query = JobApplicant::query();
if (!empty($request->start_date)){
$query->whereDate('created_at','>=',$request->start_date);
}
if (!empty($request->end_date)){
$query->whereDate('created_at','<=',$request->end_date);
}
if (!empty($request->job_id)){
$query->where(['jobs_id' => $request->job_id ]);
}
$error_msg = __('select start & end date to generate applicant report');
if (!empty($request->start_date) && !empty($request->end_date)){
$query->orderBy('id','DESC');
$order_data = $query->paginate($request->items);
$error_msg = '';
}
return view('backend.jobs.applicant-report')->with([
'order_data' => $order_data,
'start_date' => $request->start_date,
'end_date' => $request->end_date,
'items' => $request->items,
'job_id' => $request->job_id,
'jobs' => $jobs,
'error_msg' => $error_msg
]);
}
public function success_page_settings(){
$all_languages = Language::all();
return view('backend.jobs.job-success-page')->with(['all_languages' => $all_languages]);
}
public function cancel_page_settings(){
$all_languages = Language::all();
return view('backend.jobs.job-cancel-page')->with(['all_languages' => $all_languages]);
}
public function update_cancel_page_settings(Request $request){
$all_languages = Language::all();
foreach ($all_languages as $lang){
$this->validate($request,[
'job_cancel_page_'.$lang->slug.'_title' => 'nullable|string',
'job_cancel_page_'.$lang->slug.'_description' => 'nullable|string',
]);
$all_fileds = [
'job_cancel_page_'.$lang->slug.'_title',
'job_cancel_page_'.$lang->slug.'_description',
];
foreach ($all_fileds as $field){
update_static_option($field,$request->$field);
}
}
return redirect()->back()->with(['msg' => __('Settings Update'),'type' => 'success']);
}
public function update_success_page_settings(Request $request){
$all_languages = Language::all();
foreach ($all_languages as $lang){
$this->validate($request,[
'job_success_page_'.$lang->slug.'_title' => 'nullable|string',
'job_success_page_'.$lang->slug.'_description' => 'nullable|string',
]);
$all_fileds = [
'job_success_page_'.$lang->slug.'_title',
'job_success_page_'.$lang->slug.'_description',
];
foreach ($all_fileds as $field){
update_static_option($field,$request->$field);
}
}
return redirect()->back()->with(['msg' => __('Settings Update'),'type' => 'success']);
}
public function job_applicant_mail(Request $request){
$this->validate($request,[
'applicant_id' => 'required',
'name' => 'nullable',
'email' => 'nullable',
'subject' => 'required',
'message' => 'required',
]);
$applicant_details = JobApplicant::find($request->applicant_id);
try {
Mail::to($applicant_details->email)->send(new BasicMail([
'subject' => $request->subject,
'message' => $request->message
]));
}catch (\Exception $e){
return redirect()->back()->with(NexelitHelpers::item_delete($e->getMessage()));
}
return redirect()->back()->with(['msg' => __('Mail Send Success'),'type' => 'success']);
}
public function slug_check(Request $request){
$this->validate($request,[
'slug' => 'required|string',
'type' => 'required|string',
'lang' => 'required|string',
]);
$user_given_slug = $request->slug;
$query = Jobs::where(['slug' => $user_given_slug]);
if (!empty($request->lang)){
$query->where('lang' , $request->lang);
}
$slug_count = $query->count();
if ($request->type === 'new' && $slug_count > 0){
return $user_given_slug.'-'.$slug_count;
}elseif ($request->type === 'update' && $slug_count > 1){
return $user_given_slug.'-'.$slug_count;
}
return $user_given_slug;
}
}