HEX
Server: LiteSpeed
System: Linux sv4.hami.host 5.14.0-611.54.3.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Thu May 7 16:31:24 EDT 2026 x86_64
User: armgroup (1008)
PHP: 8.2.32
Disabled: show_source, system, shell_exec, passthru, exec, popen, proc_open, mail, socket_create, socket_create_listen, socket_create_pair, link, dl, openlog, syslog, stream_socket_server, curl_multi_init
Upload Files
File: /home/armgroup/libs/app/Http/Controllers/Account/AddressController.php
<?php

namespace App\Http\Controllers\Account;

use App\Http\Controllers\Controller;
use App\Http\Requests\Account\AddressRequest;
use App\Models\Address;
use App\Models\Province;
use App\Models\User;
use Artesaos\SEOTools\Facades\SEOTools;
use Illuminate\Support\Facades\DB;

class AddressController extends Controller
{
    public function index()
    {
        SEOTools::setTitle('پنل کاربری');

        $addresses = auth()->user()->addresses->load('city');

        return view('account.address.index', compact('addresses'));
    }

    public function create()
    {
        SEOTools::setTitle('پنل کاربری');

        $provinces = Province::select('id', 'name')->get();

        return view('account.address.create', compact('provinces'));
    }

    public function store(AddressRequest $request)
    {
        $address = auth()->user()->addresses()->create($request->validated());

        session(['address_id' => $address->id]);

        $this->doneMessage('Saved Successfully');

        if ($request->has('_back')) {
            return redirect()->route('addresses.index');
        }

        return redirect()->route('account.addresses.index');
    }

    public function edit(Address $address)
    {
        abort_unless(optional($address->users()->first())->id == auth()->id(), 403);

        SEOTools::setTitle('پنل کاربری');

        $address->load('city');

        $provinces = Province::select('id', 'name')->get();

        return view('account.address.edit', compact('provinces', 'address'));
    }

    public function update(AddressRequest $request, Address $address)
    {
        abort_unless(optional($address->users()->first())->id == auth()->id(), 403);

        $address->name = $request->name;
        $address->mobile = $request->mobile;
        $address->city_id = $request->city_id;
        $address->postal_code = $request->postal_code;
        $address->national_code = $request->national_code;
        $address->plaque = $request->plaque;
        $address->floor = $request->floor;
        $address->address = $request->address;
        $address->lat = $request->lat;
        $address->lng = $request->lng;

        if ($address->isDirty()) {
            DB::transaction(function () use ($address, $request) {
                $check = DB::table('addressables')->where('address_id', $address->id)->count();
                if ($check > 1) {
                    DB::table('addressables')
                        ->where('address_id', $address->id)
                        ->where('addressable_id', auth()->id())
                        ->where('addressable_type', User::class)->delete();

                    auth()->user()->addresses()->create($request->validated());
                } else {
                    $address->update();
                }
            });
        }
        $this->doneMessage('Saved Successfully');

        if ($request->has('_back')) {
            return redirect()->route('addresses.index');
        }

        return redirect()->route('account.addresses.index');
    }

    public function destroy(Address $address)
    {
        abort_unless(optional($address->users()->first())->id == auth()->id(), 403);

        $check = DB::table('addressables')->where('address_id', $address->id)->count();

        if ($check == 1) {
            $address->delete();
        }

        DB::table('addressables')
            ->where('address_id', $address->id)
            ->where('addressable_id', auth()->id())
            ->where('addressable_type', User::class)->delete();

        $this->doneMessage();

        return redirect()->route('account.addresses.index');
    }
}