Files
wticreatorstudio/Modules/JobPortalCompany/Admin/CompanyController.php
T
2024-02-12 22:54:20 -05:00

355 lines
12 KiB
PHP

<?php
namespace Modules\JobPortalCompany\Admin;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Modules\JobPortal\Http\Controllers\JobPortalAdminController;
use Modules\JobPortal\Entities\CandidateContact;
use Modules\JobPortal\Entities\CompanyTerm;
use Modules\JobPortal\Entities\Language;
use Modules\JobPortal\Entities\CompanyCategory as Category;
use Modules\JobPortal\Entities\Company;
use Modules\JobPortal\Entities\CompanyTranslation;
use Modules\JobPortal\Entities\Location;
use Modules\JobPortal\Entities\Attributes;
use Illuminate\Support\Facades\DB;
class CompanyController extends JobPortalAdminController
{
protected $attributes;
protected $location;
protected $company;
protected $company_translation;
protected $category;
protected $language;
protected $company_term;
public function __construct()
{
parent::__construct();
$this->attributes = Attributes::class;
$this->company = Company::class;
$this->location = Location::class;
$this->category = Category::class;
$this->company_translation = CompanyTranslation::class;
$this->language = Language::class;
$this->company_term = CompanyTerm::class;
}
public function index(Request $request)
{
$this->checkPermission('company.admin.index');
if(!is_admin())
{
$user_company = $this->company::where('owner_id',Auth::id())->first();
if($user_company)
{
return redirect(route('company.admin.edit',['id'=>$user_company->id]));
}else{
return redirect(route('company.admin.create'));
}
}
$dataCompany = $this->company::query()->orderBy('id', 'desc');
$company_name = $request->query('s');
$cate = $request->query('category_id');
if ($cate) {
$dataCompany->where('category_id', $cate);
}
if ($company_name) {
$dataCompany->where('name', 'LIKE', '%' . $company_name . '%');
$dataCompany->orderBy('name', 'asc');
}
$data = [
'rows' => $dataCompany->paginate(20),
'categories' => $this->category::get(),
//"languages"=>$this->language::getActive(false),
"locale"=>\App::getLocale(),
//'page_title'=>__("Company Management")
];
return view('jobportalcompany::admin.company.index', $data);
}
public function create(Request $request)
{
$this->checkPermission('company.admin.create');
if(!is_admin())
{
$user_company = $this->company::where('owner_id',Auth::id())->first();
if($user_company)
{
return redirect(route('company.admin.edit',['id'=>$user_company->id]));
}
}
$row = new $this->company();
$row->fill([
'status' => 'publish',
]);
$data = [
'categories' => $this->category::get()->toTree(),
'attributes' => $this->attributes::where('service', 'company')->get(),
'row' => $row,
'company_location' => $this->location::where('status', 'publish')->get()->toTree(),
'translation'=>new $this->company_translation()
];
return view('jobportalcompany::admin.company.detail', $data);
}
public function edit(Request $request, $id)
{
$this->checkPermission('company.admin.bulkEdit');
$row = $this->company::find($id);
$translation = $row->translateOrOrigin($request->query('lang'));
if (empty($row)) {
return redirect(route('company.admin.index'));
}elseif(!is_admin() && $row->owner_id != Auth::id()){
$user_company = $this->company::where('owner_id',Auth::id())->first();
if($user_company)
{
return redirect(route('company.admin.edit',['id'=>$user_company->id]));
}else{
return redirect(route('company.admin.create'));
}
}
$data = [
'row' => $row,
'categories' => $this->category::get()->toTree(),
'attributes' => $this->attributes::where('service', 'company')->get(),
'company_location' => $this->location::where('status', 'publish')->get()->toTree(),
'translation' => $translation,
'enable_multi_lang'=>true,
'page_title'=>__("Edit Company :name",['name'=>$translation->name]),
"selected_terms" => $row->companyTerm ? $row->companyTerm->pluck('term_id') : [],
];
return view('jobportalcompany::admin.company.detail', $data);
}
public function store(Request $request, $id){
$this->checkPermission('company.admin.create');
$input = $request->input();
if($id>0){
$row = $this->company::find($id);
if (empty($row)) {
return redirect(route('company.admin.index'));
}elseif(!is_admin() && $row->owner_id != Auth::id()){
$user_company = $this->company::where('owner_id',Auth::id())->where('status','publish')->first();
if($user_company)
{
return redirect(route('company.admin.edit',['id'=>$user_company->id]));
}else{
return redirect(route('company.admin.create'));
}
}
}else{
$row = new $this->company();
if(!is_admin())
{
$user_company = $this->company::where('owner_id',Auth::id())->where('status','publish')->first();
if($user_company)
{
return redirect(route('company.admin.edit',['id'=>$user_company->id]));
}
$row->owner_id = Auth::id();
}
}
$attr = [
'name',
'email',
'phone',
'website',
'location_id',
'avatar_id',
'founded_in',
'category_id',
'map_lat',
'map_lng',
'status',
'about',
'social_media',
'city',
'state',
'country',
'address',
'team_size',
'is_featured',
'zip_code',
'allow_search'
];
$input['team_size'] = !empty($input['team_size']) ? $input['team_size'] : 0;
$row->fillByAttr($attr, $input);
if($request->input('slug')){
$row->slug = $request->input('slug');
}
if(is_admin())
{
$row->owner_id = $input['owner_id'] ?? Auth::id();
$row->is_featured = $input['is_featured'] ?? 0;
}
$res = $row->saveOriginOrTranslation($request->query('lang'),true);
if ($res) {
if (!$request->input('lang') or is_default_lang($request->input('lang'))) {
$this->saveTerms($row, $request);
}
if($id > 0 ){
return back()->with('success', __('Company updated') );
}else{
return redirect(route('company.admin.edit',$row->id))->with('success', __('Company created') );
}
}
}
public function saveTerms($row, $request)
{
if (empty($request->input('terms'))) {
$this->company_term::where('company_id', $row->id)->delete();
} else {
$term_ids = $request->input('terms');
foreach ($term_ids as $term_id) {
$this->company_term::firstOrCreate([
'term_id' => $term_id,
'company_id' => $row->id
]);
}
$this->company_term::where('company_id', $row->id)->whereNotIn('term_id', $term_ids)->delete();
}
}
public function bulkEdit(Request $request)
{
$this->checkPermission('company.admin.bulkEdit');
$ids = $request->input('ids');
$action = $request->input('action');
if (empty($ids) or !is_array($ids)) {
return redirect()->back()->with('error', __('No items selected!'));
}
if (empty($action)) {
return redirect()->back()->with('error', __('Please select an action!'));
}
if ($action == "delete") {
foreach ($ids as $id) {
$query = $this->company::where("id", $id);
if (!$this->hasPermission('company.admin.bulkEdit')) {
$query->where("create_user", Auth::id());
//$this->checkPermission('employer_manage');
}
$query->first();
if(!empty($query)){
$query->delete();
}
}
} else {
foreach ($ids as $id) {
$query = $this->company::where("id", $id);
if (!$this->hasPermission('company.admin.bulkEdit')) {
$query->where("create_user", Auth::id());
//$this->checkPermission('employer_manage');
}
$query->update(['status' => $action]);
}
}
return redirect()->back()->with('success', __('Update success!'));
}
public function trans($id,$locale){
$row = $this->company::find($id);
if(empty($row)){
return redirect()->back()->with("danger",__("Company does not exists"));
}
$translated = $this->company::query()->where('origin_id',$id)->where('lang',$locale)->first();
if(!empty($translated)){
redirect($translated->getEditUrl());
}
$language = $this->language::where('locale',$locale)->first();
if(empty($language)){
return redirect()->back()->with("danger",__("Language does not exists"));
}
$new = $row->replicate();
if(!$row->origin_id){
$new->origin_id = $row->id;
}
$new->lang = $locale;
$new->save();
return redirect($new->getEditUrl());
}
public function getForSelect2(Request $request)
{
$pre_selected = $request->query('pre_selected');
$selected = $request->query('selected');
if($pre_selected && $selected){
if(is_array($selected))
{
$imploded_strings = implode("','", $selected);
$query = Company::query()->select('id', DB::raw('name as text'));
$items = $query->whereIn('jp_companies.id', $selected)->take(50)->orderByRaw(DB::raw("FIELD(id, '$imploded_strings')"))->get();
return response()->json([
'items'=>$items
]);
}
$item = Company::find($selected);
if(empty($item)){
return response()->json([
'text'=>''
]);
}else{
return response()->json([
'text'=>$item->name
]);
}
}
$q = $request->query('q');
$query = Company::select('id', 'name as text')->where("status","publish");
if ($q) {
$query->where('name', 'like', '%' . $q . '%');
}
$res = $query->orderBy('id', 'desc')->limit(20)->get();
return response()->json([
'results' => $res
]);
}
function myContact(Request $request){
//$this->setActiveMenu('admin/module/company/my-contact');
$query = CandidateContact::query()
->where('contact_to', 'company')
->where('origin_id', Auth::id());
if($orderby = $request->get('orderby')){
switch ($orderby){
case 'oldest':
$query->orderBy('id', 'asc');
break;
default:
$query->orderBy('id', 'desc');
break;
}
}else{
$query->orderBy('id', 'desc');
}
$rows = $query->paginate(20);
$data = [
'rows' => $rows
];
return view('jobportalcompany::admin.company.my-contact', $data);
}
}