File "ContactUsApiController.php"

Full Path: /home/clickysoft/public_html/jmapi5.clickysoft.net/app/Http/Controllers/Api/V1/Admin/ContactUsApiController.php
File size: 3.82 KB
MIME-type: text/x-php
Charset: utf-8

<?php

namespace App\Http\Controllers\Api\V1\Admin;

use App\Http\Controllers\Controller;
use App\Http\Requests\Admin\StoreContactQueryRequest;
use App\Http\Resources\Admin\ContactQueryResource;
use App\Mail\ContactQuerySubmitted;
use App\Models\ContactQuery;
use Illuminate\Support\Facades\Gate;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Mail;
use Symfony\Component\HttpFoundation\Response;

class ContactUsApiController extends Controller
{
    public function index(Request $request)
    {
        abort_if(Gate::denies('contact_us_access'), Response::HTTP_FORBIDDEN, '403 Forbidden');
        $queries = ContactQuery::when($request->filled('name'), function ($query) use ($request) {
            $searchQuery = $request->get('name');
            $query->whereRaw("name like '%" . addslashes($searchQuery) . "%' OR email like '%" . addslashes($searchQuery) . "%' OR phone like '%" . addslashes($searchQuery) . "%' OR department like '%" . addslashes($searchQuery) . "%' OR subject like '%" . addslashes($searchQuery) . "%' OR message like '%" . addslashes($searchQuery) . "%'");
        })->when($request->filled('is_read'), function ($query) use ($request) {
            $is_read = $request->get('is_read');
            $query->where("is_read", $is_read);
        })->orderBy('created_at', 'DESC')->paginate(50);
        ContactQueryResource::withoutWrapping();
        return ContactQueryResource::collection($queries);
    }

    public function store(StoreContactQueryRequest $request)
    {
        $contact_us = ContactQuery::create($request->all());
        $contact_us = new ContactQueryResource($contact_us);

        //Send email to orders@jmtrophies.com
        Mail::to('orders@jmtrophies.com')->send(new ContactQuerySubmitted(['data' => $contact_us]));

        return ($contact_us)
            ->response()
            ->setStatusCode(Response::HTTP_CREATED);
    }

    public function show(ContactQuery $contact_query)
    {
        abort_if(Gate::denies('contact_us_show'), Response::HTTP_FORBIDDEN, '403 Forbidden');

        $contact_query->is_read = true;
        $contact_query->save();

        $query_count = ContactQuery::where('is_read', 0)->count();

        return [
            'data' => new ContactQueryResource($contact_query),
            'new_queries_count' => $query_count,
        ];
    }

    public function destroy(ContactQuery $contact_query)
    {
        abort_if(Gate::denies('contact_us_delete'), Response::HTTP_FORBIDDEN, '403 Forbidden');

        try {
            $contact_query->delete();
            return response()
                ->json(['message' => 'Contact query deleted successfully'], Response::HTTP_OK);
        } catch (\Exception $e) {
            Log::channel('db_errors')->info('Record Deletion Error : Contact Query -> ' . $contact_query->id);
            Log::channel('db_errors')->info($e->getMessage());
            return response()
                ->json([
                    'message' => "Record not deleted.",
                    'errors' => ["error" => ["Unable to delete contact query."]]
                ], Response::HTTP_INTERNAL_SERVER_ERROR);
        }
    }

    public function getDepartments()
    {
        return \response()
            ->json(['data' => ContactQuery::DEPARTMENTS], Response::HTTP_OK);
    }

    public function updateContactQueryStatus(Request $request)
    {
        $request->validate([
            'contact_query_id' => 'sometimes|array',
        ]);
        if (count($request->get('contact_query_id')) > 0) {
            ContactQuery::whereIn('id', $request->get('contact_query_id'))->update(['is_read' => true]);
        } else {
            ContactQuery::where('is_read', 0)->update(['is_read' => true]);
        }

        return response()
            ->json(['message' => 'Contact query status updated successfully'], Response::HTTP_OK);
    }
}