HEX
Server: Apache/2.4.46 (Ubuntu)
System: Linux localhost 5.11.0-49-generic #55-Ubuntu SMP Wed Jan 12 17:36:34 UTC 2022 x86_64
User: root (0)
PHP: 7.4.16
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/html/sarvodayahospital/app/Http/Controllers/SpecialityController.php
<?php

namespace App\Http\Controllers;

use App\Models\CMSPage;
use App\Models\CPSDoctor;
use App\Models\Doctor;
use App\Models\Hospital;
use App\Models\Speciality;
use App\Models\Testimonial;
use Artesaos\SEOTools\Facades\OpenGraph;
use Artesaos\SEOTools\Facades\SEOMeta;

class SpecialityController extends Controller
{
    public function index()
    {
        $seo = [];

        $search = request('search');
        $hospital = request('hospital');

        $specialities = Speciality::query()
            ->when($search, function ($query) use ($search) {
                $query->where('Slug', $search);
            })
            ->when($hospital, function ($query) use ($hospital) {
                $query->whereHas('hospitals', function ($value) use ($hospital) {
                    $value->where('Slug', $hospital);
                });
            })
            ->orderBy('IsCentreOfExcellence', 'DESC')
            ->orderBy('Weight', 'ASC')
            ->get();

        $specialitiesDropdown = Speciality::query()
            ->orderBy('Weight', 'ASC')
            ->get();

        $hospitals = Hospital::whereHas('specialities')->get();

        $cmsPage = CMSPage::query()
            ->where('Slug', request()->path())
            ->firstOrFail();

        if ($cmsPage) {
            $seo = $cmsPage->seoComponent()->first();
        }

        return view('pages.speciality', compact('specialities', 'specialitiesDropdown', 'hospitals', 'seo'));
    }

    public function show($slug)
    {
        $seo = [];
        $sp = [];

        $speciality = Speciality::query()
            ->with(['hospitals', 'doctors', 'technologies', 'procedures', 'treatments', 'seoComponent', 'faqs', 'banner', 'mobileBanner'])
            ->where('Slug', $slug)
            ->first();

        if (!$speciality) {
            $cpsDoctor = CPSDoctor::query()
                ->with('cpsLocation')
                ->where('Slug', $slug)
                ->where('published_at', '!=', null)
                ->first();

            if ($cpsDoctor) {
                $specialities = $cpsDoctor->specialities()->get();

                $seo = $cpsDoctor->seoComponent()->first();

                $cpsLocations = $cpsDoctor->cpsLocation()->first()->load('hospitals');

                if(!is_null($cpsLocations)) {
                    $hospitals = $cpsLocations->hospitals->map(function($query) {
                        return $hospitalID[] = $query->id;
                    });
                }

                $doctors = Doctor::getDoctorBySpecialityAndHospital($specialities->pluck('id'), $hospitals);

                $location = $cpsDoctor->cpsLocation->Slug;

                $commonTreatmentDoctors = CPSDoctor::query()
                        ->with('cpsLocation')
                        ->whereHas('cpsLocation', function($query) use($location) {
                            $query->where('Slug', $location);
                        })
                        ->where('Slug', '!=', $slug)
                        ->where('published_at', '!=', null)
                        ->get();

                $sameSpecialityWithDiffLocationDoctors =  CPSDoctor::query()
                    ->with('cpsLocation')
                    ->where('Title', $cpsDoctor->Title)
                    ->where('Slug', '!=', $slug)
                    ->where('published_at', '!=', null)
                    ->get();


                $data = [
                    'cpsDoctors' => $cpsDoctor,
                    'specialities' => $specialities,
                    'doctors' => $doctors,
                    'commonTreatmentDoctors' => $commonTreatmentDoctors,
                    'sameSpecialityWithDiffLocationDoctors' => $sameSpecialityWithDiffLocationDoctors
                ];

                return view('pages.cps-doctor', compact('data', 'seo'));
            }

            return abort(404);
        }

        $seo = $speciality->seoComponent()->first();

        $spo = Speciality::where('Slug', $slug)
            ->with('ss')
            ->get();

        foreach ($spo as $p) {
            $sp[] = $p->Slug;
            foreach ($p->ss as $s) {
                $sp[] = $s->Slug;
            }
        }

        $doctors = Doctor::WhereHas('specialities', function ($q) use ($sp) {
            $q->WhereIn('Slug', $sp);
        })->orderByRaw('ISNULL(Weight), Weight ASC')->orderBy('Surname', 'asc')->get();

        $testimonials = $speciality ? $speciality->testimonials : [];

        return view('pages.single-speciality', compact('speciality', 'seo', 'doctors', 'testimonials'));
    }
}