mirror of
https://github.com/Bigherollc/wticreatorstudio.git
synced 2026-08-01 08:16:55 -04:00
394 lines
15 KiB
PHP
394 lines
15 KiB
PHP
<?php
|
|
namespace Modules\JobPortal\Admin;
|
|
|
|
use App\Models\User;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Hash;
|
|
use Illuminate\Support\Facades\Validator;
|
|
use Illuminate\Validation\Rule;
|
|
use Modules\JobPortal\Http\Controllers\JobPortalAdminController;
|
|
use Modules\JobPortal\Entities\Candidate;
|
|
use Modules\JobPortal\Entities\CandidateCategories;
|
|
use Modules\JobPortal\Entities\CandidateCvs;
|
|
use Modules\JobPortal\Entities\CandidateSkills;
|
|
use Modules\JobPortal\Entities\Category;
|
|
use Modules\JobPortal\Entities\Location;
|
|
use Modules\JobPortal\Entities\Skill;
|
|
use Modules\JobPortal\Entities\Badge;
|
|
use Modules\JobPortal\Events\VendorApproved;
|
|
use Modules\JobPortal\Exports\UserExport;
|
|
use Modules\JobPortal\Entities\CompanyRequest;
|
|
|
|
class UserController extends JobPortalAdminController
|
|
{
|
|
public function __construct()
|
|
{
|
|
if(!is_admin()){
|
|
$this->middleware('verified');
|
|
}
|
|
|
|
parent::__construct();
|
|
}
|
|
|
|
public function index(Request $request)
|
|
{
|
|
$this->checkPermission('user_manage');
|
|
$username = $request->query('s');
|
|
$listUser = User::query()->orderBy('id','desc');
|
|
if (!empty($username)) {
|
|
$listUser->where(function($query) use($username){
|
|
$query->where('first_name', 'LIKE', '%' . $username . '%');
|
|
$query->orWhere('id', $username);
|
|
$query->orWhere('phone', $username);
|
|
$query->orWhere('email', 'LIKE', '%' . $username . '%');
|
|
$query->orWhere('last_name', 'LIKE', '%' . $username . '%');
|
|
});
|
|
}
|
|
if($request->query('role')){
|
|
$listUser->role($request->query('role'));
|
|
}
|
|
$data = [
|
|
'rows' => $listUser->paginate(20),
|
|
'roles' => Role::all()
|
|
];
|
|
return view('jobportal::admin.user.index', $data);
|
|
}
|
|
|
|
public function create(Request $request)
|
|
{
|
|
$row = new \Modules\User\Models\User();
|
|
$data = [
|
|
'row' => $row,
|
|
'rolexs' => Role::all(),
|
|
'candidate_create' => $request->get('candidate_create', 0),
|
|
'candidate' => new Candidate(),
|
|
'locations' => Location::query()->where('status', 'publish')->get()->toTree(),
|
|
'categories' => Category::get()->toTree(),
|
|
'skills' => Skill::query()->where('status', 'publish')->get(),
|
|
'badges' => Badge::query()->where('status', 'publish')->get(),
|
|
'breadcrumbs'=>[
|
|
[
|
|
'name'=>__("Users"),
|
|
'url'=>'admin/jobportal/user'
|
|
]
|
|
]
|
|
];
|
|
return view('jobportal::admin.user.detail', $data);
|
|
}
|
|
|
|
public function edit(Request $request, $id)
|
|
{
|
|
$row = User::find($id);
|
|
if (empty($row)) {
|
|
return redirect('admin/jobportal/user');
|
|
}
|
|
if ($row->id != Auth::user()->id and !permissionCheck('setting_manage')) {
|
|
abort(403);
|
|
}
|
|
$data = [
|
|
'row' => $row,
|
|
'locations' => Location::query()->where('status', 'publish')->get()->toTree(),
|
|
'categories' => Category::get()->toTree(),
|
|
'cvs' => CandidateCvs::query()->where('origin_id', $id)->with('media')->get(),
|
|
'skills' => Skill::query()->where('status', 'publish')->get(),
|
|
'badges' => Badge::query()->where('status', 'publish')->get(),
|
|
];
|
|
return view('jobportal::admin.user.detail', $data);
|
|
}
|
|
|
|
public function password(Request $request,$id){
|
|
|
|
$row = User::find($id);
|
|
$data = [
|
|
'row'=>$row,
|
|
'currentUser'=>Auth::user()
|
|
];
|
|
if (empty($row)) {
|
|
return redirect('admin/jobportal/user');
|
|
}
|
|
if ($row->id != Auth::user()->id and !permissionCheck('setting_manage')) {
|
|
abort(403);
|
|
}
|
|
return view('jobportal::admin.user.password',$data);
|
|
}
|
|
|
|
public function changepass(Request $request, $id)
|
|
{
|
|
if(is_demo_mode()){
|
|
return redirect()->back()->with("error", __("DEMO MODE: You can not change password!"));
|
|
}
|
|
$rules = [];
|
|
$urow = User::find($id);
|
|
if ($urow->id != Auth::user()->id and !permissionCheck('setting_manage')) {
|
|
abort(403);
|
|
}
|
|
$request->validate([
|
|
'password' => 'required|min:6|max:255',
|
|
'password_confirmation' => 'required',
|
|
]);
|
|
$password_confirmation = $request->input('password_confirmation');
|
|
$password = $request->input('password');
|
|
if ($password != $password_confirmation) {
|
|
return redirect()->back()->with("error", __("Your New password does not matches. Please type again!"));
|
|
}
|
|
if ($urow->id != Auth::user()->id and !permissionCheck('setting_manage')) {
|
|
if ($password) {
|
|
if ($urow->id != Auth::user()->id) {
|
|
$rules['old_password'] = 'required';
|
|
}
|
|
$rules['password'] = 'required|string|min:6|confirmed';
|
|
}
|
|
$this->validate($request, $rules);
|
|
if ($password) {
|
|
if (!(Hash::check($request->input('old_password'), $urow->password))) {
|
|
// The Old passwords matches
|
|
return redirect()->back()->with("error", __("Your current password does not matches with the password you provided. Please try again."));
|
|
}
|
|
}
|
|
}
|
|
$urow->password = bcrypt($password);
|
|
if ($urow->save()) {
|
|
|
|
if ($request->input('role_id') and $role = Role::findById($request->input('role_id'))) {
|
|
$urow->assignRole($role);
|
|
}
|
|
return redirect()->back()->with('success', __('Password updated!'));
|
|
}
|
|
}
|
|
|
|
public function store(Request $request, $id)
|
|
{
|
|
if(!is_candidate() && !is_admin() && !is_employer()){
|
|
abort(403);
|
|
}
|
|
if($id and $id>0){
|
|
$row = User::find($id);
|
|
if(empty($row)){
|
|
abort(404);
|
|
}
|
|
if ($row->id != Auth::user()->id and !permissionCheck('setting_manage')) {
|
|
abort(403);
|
|
}
|
|
|
|
$request->validate([
|
|
'first_name' => 'required|max:255',
|
|
'last_name' => 'required|max:255',
|
|
'status' => 'required|max:50',
|
|
'phone' => 'required',
|
|
'role_id' => 'sometimes|required|max:11',
|
|
'email' =>[
|
|
'required',
|
|
'email',
|
|
'max:255',
|
|
Rule::unique('users')->ignore($row->id)
|
|
],
|
|
]);
|
|
|
|
}else{
|
|
$check = Validator::make($request->input(),[
|
|
'first_name' => 'required|max:255',
|
|
'last_name' => 'required|max:255',
|
|
'status' => 'required|max:50',
|
|
'phone' => 'required',
|
|
'role_id' => 'sometimes|required|max:11',
|
|
'email' =>[
|
|
'required',
|
|
'email',
|
|
'max:255',
|
|
Rule::unique('users')
|
|
],
|
|
]);
|
|
|
|
if(!$check->validated()){
|
|
return back()->withInput($request->input());
|
|
}
|
|
|
|
$row = new User();
|
|
$row->email = $request->input('email');
|
|
}
|
|
|
|
//$row->name = $request->input('name');
|
|
$row->first_name = $request->input('first_name');
|
|
$row->last_name = $request->input('last_name');
|
|
$row->phone = $request->input('phone');
|
|
$row->date_of_birth = date("Y-m-d", strtotime($request->input('birthday')));
|
|
$row->bio = clean($request->input('bio'));
|
|
$row->status = $request->input('status');
|
|
$row->avatar_id = $request->input('avatar_id');
|
|
$row->email = $request->input('email');
|
|
// $row->need_update_pw = $request->input('need_update_pw');
|
|
|
|
if(permissionCheck('setting_manage') && $role_id = $request->input('role_id')) {
|
|
$row->role_id = $role_id;
|
|
}
|
|
|
|
|
|
if ($row->save()) {
|
|
if($row->role->permissions->contains('route','job.apply-job') || $row->role->permissions->contains('route','candidate_portal')){
|
|
|
|
$check = Validator::make($request->input(),[
|
|
'title' => 'required|max:255'
|
|
]);
|
|
|
|
if(!$check->validated()){
|
|
return back()->withInput($request->input());
|
|
}
|
|
|
|
$cData = Candidate::find($row->id);
|
|
if(empty($cData)){
|
|
DB::table('jp_candidates')->insert([
|
|
'id' => $row->id
|
|
]);
|
|
$cData = Candidate::find($row->id);
|
|
}
|
|
$cData->fillByAttr([
|
|
'title',
|
|
'gallery',
|
|
'video',
|
|
'gender',
|
|
'expected_salary',
|
|
'salary_type',
|
|
'website',
|
|
'education_level',
|
|
'experience_year',
|
|
'languages',
|
|
'allow_search',
|
|
|
|
'address',
|
|
'city',
|
|
'country',
|
|
'location_id',
|
|
'map_lat',
|
|
'map_lng',
|
|
'map_zoom',
|
|
|
|
'education',
|
|
'experience',
|
|
'award',
|
|
'social_media',
|
|
'video_cover_id',
|
|
'badge_id'
|
|
|
|
], $request->input());
|
|
// $cData->save();
|
|
if(!empty($request->input('languages')))
|
|
{
|
|
$cData->languages = implode(',',$request->input('languages'));
|
|
}else{
|
|
$cData->languages = '';
|
|
}
|
|
$cData->saveOriginOrTranslation($request->query('lang'),true);
|
|
|
|
|
|
$uploadedCandidate = CandidateCvs::query()->where('origin_id', $row->id)->pluck('file_id')->toArray();
|
|
$cvUpload = $request->input('cvs', []);
|
|
if(!empty($cvUpload)) {
|
|
CandidateCvs::query()->where('origin_id', $row->id)->whereNotIn('file_id', $cvUpload)->delete();
|
|
foreach ($cvUpload as $oneCv) {
|
|
if (in_array($oneCv, $uploadedCandidate)) {
|
|
continue;
|
|
}
|
|
$cv = new CandidateCvs();
|
|
$cv->file_id = $oneCv;
|
|
$cv->origin_id = $row->id;
|
|
$cv->is_default = 0;
|
|
$cv->create_user = Auth::id();
|
|
$cv->save();
|
|
}
|
|
|
|
//Update Default CV
|
|
CandidateCvs::query()->where("origin_id", $row->id)->update(['is_default' => 0]);
|
|
CandidateCvs::query()->where("origin_id", $row->id)->where('file_id', @$request->csv_default)->update(['is_default' => 1]);
|
|
}
|
|
|
|
if(!empty($request->skills)){
|
|
$cSkills = CandidateSkills::query()->where('origin_id', $row->id)->pluck('skill_id')->toArray();
|
|
foreach($request->skills as $skill){
|
|
$pos = array_search(intval($skill), $cSkills);
|
|
if($pos !== false){
|
|
unset($cSkills[$pos]);
|
|
}else{
|
|
DB::table('jp_candidate_skills')->insert([
|
|
'origin_id' => $row->id,
|
|
'skill_id' => $skill
|
|
]);
|
|
}
|
|
}
|
|
if(!empty($cSkills)){
|
|
CandidateSkills::query()->where('origin_id', $row->id)->whereIn('skill_id', $cSkills)->delete();
|
|
}
|
|
}else{
|
|
CandidateSkills::query()->where('origin_id', $row->id)->delete();
|
|
}
|
|
|
|
if(!empty($request->categories)){
|
|
$cCats = CandidateCategories::query()->where('origin_id', $row->id)->pluck('cat_id')->toArray();
|
|
foreach($request->categories as $category){
|
|
$pos = array_search(intval($category), $cCats);
|
|
if($pos !== false){
|
|
unset($cCats[$pos]);
|
|
}else{
|
|
DB::table('jp_candidate_categories')->insert([
|
|
'origin_id' => $row->id,
|
|
'cat_id' => $category
|
|
]);
|
|
}
|
|
}
|
|
if(!empty($cCats)){
|
|
CandidateCategories::query()->where('origin_id', $row->id)->whereIn('cat_id', $cCats)->delete();
|
|
}
|
|
}else{
|
|
CandidateCategories::query()->where('origin_id', $row->id)->delete();
|
|
}
|
|
|
|
}
|
|
|
|
if($id > 0 ){
|
|
return back()->with('success', __('User updated') );
|
|
}else{
|
|
return redirect(route('user.admin.detail', $row->id))->with('success', __('User created') );
|
|
}
|
|
}
|
|
}
|
|
|
|
public function getForSelect2(Request $request)
|
|
{
|
|
$q = $request->query('q');
|
|
$query = User::select('*')->where('role_id',101);
|
|
if ($q) {
|
|
$query->where(function ($query) use ($q) {
|
|
$query->where('first_name', 'like', '%' . $q . '%')->orWhere('last_name', 'like', '%' . $q . '%')->orWhere('email', 'like', '%' . $q . '%')->orWhere('id', $q)->orWhere('phone', 'like', '%' . $q . '%');
|
|
});
|
|
}
|
|
$res = $query->orderBy('id', 'desc')->orderBy('first_name', 'asc')->limit(20)->get();
|
|
$data = [];
|
|
if (!empty($res)) {
|
|
if($request->query("user_type") == "candidate"){
|
|
//for only vendor
|
|
foreach ($res as $item) {
|
|
if($item->hasPermission("gig_manage")){
|
|
$data[] = [
|
|
'id' => $item->id,
|
|
'text' => $item->getDisplayName() ? $item->getDisplayName() . ' (#' . $item->id . ')' : $item->email . ' (#' . $item->id . ')',
|
|
];
|
|
}
|
|
}
|
|
}else{
|
|
//for all
|
|
foreach ($res as $item) {
|
|
$data[] = [
|
|
'id' => $item->id,
|
|
'text' => $item->getDisplayName() ? $item->getDisplayName() . ' (#' . $item->id . ')' : $item->email . ' (#' . $item->id . ')',
|
|
];
|
|
}
|
|
}
|
|
}
|
|
return response()->json([
|
|
'results' => $data
|
|
]);
|
|
}
|
|
|
|
}
|