HEX
Server: nginx/1.18.0
System: Linux test-ipsremont 5.4.0-214-generic #234-Ubuntu SMP Fri Mar 14 23:50:27 UTC 2025 x86_64
User: ips (1000)
PHP: 8.0.30
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/quadcode-jobs/app/Http/Controllers/Controller.php
<?php

namespace App\Http\Controllers;

use App\Helpers\CollectionHelper;
use App\Models\Vacancy;
use App\Repositories\CategoryRepository;
use App\Repositories\LocationRepository;
use App\Repositories\VacancyRepository;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Contracts\View\Factory;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\View\View;

class Controller extends BaseController
{

    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;

    public function index(Request $request): Factory|View|Application|JsonResponse
    {
        $filters = ['categories' => [], 'locations' => []];
        $filterUri = [];

        $vacanciesQuery = Vacancy::query()->where('state', VacancyRepository::STATE_PUBLISHED);

        if ($request->has('location')) {
            $value = $request->get('location');
            if (!is_array($value)) {
                $value = [$value];
            }
            $value = array_filter($value, fn($item) => is_numeric($item) && $item !== '0');
            if (!empty($value)) {
                $vacanciesQuery->whereHas('locations', function ($query) use ($value) {
                    $query->whereIn('lever_locations.id', $value);
                });
                $filters['locations'] = LocationRepository::getListByIds($value);
                if ($filters['locations']->count()) {
                    $filterUri['location'] = $filters['locations']->keys()->toArray();
                }
            }
        }

        if ($request->has('category')) {
            $value = $request->get('category');
            if (!is_array($value)) {
                $value = [$value];
            }
            $value = array_filter($value, fn($item) => is_numeric($item) && $item !== '0');

            if (!empty($value)) {
                $vacanciesQuery->whereIn('category_id', $value);
                $filters['categories'] = CategoryRepository::getListByIds($value);
                if ($filters['categories']->count()) {
                    $filterUri['category'] = $filters['categories']->keys()->toArray();
                }
            }
        }

        if ($request->has('keywords') && !empty($request->get('keywords'))) {
            $fields = ['title'];
            $keywords = '%' . trim(htmlspecialchars($request->get('keywords'))) . '%';
            $vacanciesQuery->where(function ($query) use ($fields, $keywords) {
                foreach ($fields as $field) {
                    $query->orWhere($field, 'ilike', $keywords);
                }
            });
        }

        $pageSize = 10;
        $vacancies = CollectionHelper::paginate($vacanciesQuery->get(), $pageSize);

        if ($request->ajax()) {
            return response()->json($vacancies);
        }

        $responseData = [
            'vacancies' => $vacancies,
            'filters' => $filters,
            'filterUri' => $filterUri,
        ];

        if (!empty($request->get('from'))) {
            $responseData['modalTitle'] = __('Close this popup to see all open vacancies.');
        }

        return view('site.jobs', $responseData);
    }

}