GOOD SHELL MAS BOY
Server: Apache/2.4.52 (Ubuntu)
System: Linux vmi1836763.contaboserver.net 5.15.0-130-generic #140-Ubuntu SMP Wed Dec 18 17:59:53 UTC 2024 x86_64
User: www-data (33)
PHP: 8.4.10
Disabled: NONE
Upload Files
File: /var/www/vaspayment.com/app/Http/Controllers/SettingController.php
<?php

namespace App\Http\Controllers;

use App\Models\Biller;
use App\Models\Notify;
use App\Models\Gateway;
use App\Models\Product;
use App\Models\Business;
use App\Models\Referrals;
use App\Models\Newsletter;
use Illuminate\Support\Str;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\Validator;

class SettingController extends Controller
{
  public function __construct()
  {
    if (config('app.verification') === true) {
      $this->middleware(['auth', 'verified', 'agent'])->except(['view', 'storeContact']);
    } else {
      $this->middleware(['auth']);
    }
  }


  public function view()
  {

    return view('settings.profile_view');
  }

  public function index()
  {
    return view('settings.business');
  }

  public function store(Request $request)
  {
    $request->validate([
      'name' => 'required|string',
      'category' => 'required|string',
      'description' => 'required|string',
      'address' => 'required|string',
      'city' => 'required|string',
      'state' => 'required|string',
      'phone' => 'required|string',
      'email' => 'required|email',
      'biz_email' => 'required|email',
      'facebook' => 'sometimes',
      'instagram' => 'sometimes',
      'linkedin' => 'sometimes',
      'twitter' => 'sometimes',
      'website' => 'required|url',
    ]);

    $business = new Business;
    $business->name = $request->input('name');
    $business->category = $request->input('category');
    $business->description = $request->input('description');
    $business->address = $request->input('address');
    $business->city = $request->input('city');
    $business->state = $request->input('state');
    $business->phone = $request->input('phone');
    $business->email = $request->input('email');
    $business->biz_email = $request->input('biz_email');
    $business->facebook = $request->input('facebook');
    $business->instagram = $request->input('instagram');
    $business->linkedin = $request->input('linkedin');
    $business->twitter = $request->input('twitter');
    $business->website = $request->input('website');
    $business->user_id = auth()->user()->id;



    if ($request->hasFile('logo')) {
      $business->logo = '/storage/' . $request->file('logo')->store('bizLogo', 'public');
    }

    if ($request->hasFile('icon')) {
      $business->icon = '/storage/' . $request->file('icon')->store('bizIcon', 'public');
    }

    $business->save();


    return redirect()->route('setting.payment')->with('status', 'Business Profile Saved');
  }

  public function update(Request $request, $id)
  {
    $business = Business::find($id);
    if (!$business) {
      return abort(404);
    }
    $business->name = $request->input('name');
    $business->category = $request->input('category');
    $business->description = $request->input('description');
    $business->address = $request->input('address');
    $business->city = $request->input('city');
    $business->state = $request->input('state');
    $business->phone = $request->input('phone');
    $business->email = $request->input('email');
    $business->biz_email = $request->input('biz_email');
    $business->facebook = $request->input('facebook');
    $business->instagram = $request->input('instagram');
    $business->linkedin = $request->input('linkedin');
    $business->twitter = $request->input('twitter');
    $business->website = $request->input('website');
    $business->user_id = auth()->user()->id;

    if ($request->hasFile('logo')) {
      if ($business->logo) {
        Storage::delete($business->logo);
      }
      $business->logo = '/storage/' . $request->file('logo')->store('bizLogo', 'public');
    }

    if ($request->hasFile('icon')) {
      if ($business->icon) {
        Storage::delete($business->icon);
      }
      $business->icon = '/storage/' . $request->file('icon')->store('bizIcon', 'public');
    }

    $business->save();
    return redirect()->route('setting.payment')->with('status', 'Business Profile Updated');
  }

  public function storeGateway(Request $request)
  {
    $email = auth()->user()->email;

    $existingGateway = Gateway::where('email', $email)->first();

    if ($existingGateway) {
      $existingGateway->update([
        'status' => $request->input('status'),
        'rate' => $request->input('rate'),
        'biller' => $request->input('biller'),
      ]);

      $message = 'Payment Gateway Info Updated';
    } else {
      $gateway = new Gateway();
      $gateway->user_id = auth()->user()->id;
      $gateway->email = $email;
      $gateway->status = $request->input('status');
      $gateway->rate = $request->input('rate');
      $gateway->biller = $request->input('biller');
      $gateway->save();

      $message = 'Payment Gateway Info Saved';
    }

    return redirect()->back()->with('status', $message);
  }

  public function web()
  {
    return view('settings.web');
  }
  public function webstore()
  {
    return view('settings.web');
  }

  public function gateway()
  {
    return view('settings.payment_gateway');
  }

  public function storeNotification(Request $request)
  {
    $request->validate([
      'title' => 'required',
      'message' => 'required'
    ]);

    // Check if there's an existing notification
    $existingNotification = Notify::first();

    if ($existingNotification) {
      // Update existing notification
      $existingNotification->title = $request->get('title');
      $existingNotification->message = $request->get('message');
      $existingNotification->save();
    } else {
      // Create a new instance
      $notify = new Notify();
      $notify->title = $request->get('title');
      $notify->message = $request->get('message');
      $notify->save();
    }

    return redirect()->back();
  }

  public function updateNotification(Request $request, Notify $notify)
  {
    $request->validate([
      'title' => 'required',
      'message' => 'required',
      'status' => 'required'
    ]);

    $notify->title = $request->get('title');
    $notify->message = $request->get('message');
    $notify->save();
    return redirect()->back();
  }


  public function listNotification()
  {
    $notifications = Notify::orderBy('created_at', 'desc')->get();
    return view('settings.notification', compact('notifications'));
  }

  public function deleteNotification(Request $request, Notify $notify)
  {
    $notify->delete();
    return redirect()->back()->with('status', 'Deleted!');
  }

  public function listContact()
  {
    $newsletters = Newsletter::orderBy('created_at', 'desc')->paginate(10);
    return view('settings.contact', compact('newsletters'));
  }

  public function productSettings()
  {
    $products = Product::latest()->get();
    return view('settings.products', compact('products'));
  }


  public function storeContact(Request $request)
  {
    $request->validate([
      'email' => 'required|email|allowed_domain|max:100',
    ]);
    $newsletter = new Newsletter;
    $newsletter->email = $request->get('email');
    $newsletter->save();
    return redirect()->back()->with('status', 'Saved! Wait patiently for the goodnews');
  }

  public function deleteContact(Newsletter $newsletter)
  {
    $newsletter->delete();
    return redirect()->back()->with('status', 'Deleted!');
  }

  public function referral()
  {
    $referrals = Referrals::paginate(10);
    return view('settings.referral', compact('referrals'));
  }

  public function storeOrUpdate(Request $request)
  {
    $validator = Validator::make($request->all(), [
      'name' => 'required|string|max:255',
      'status' => 'required|string',
      'type' => 'required|string',
    ]);

    if ($validator->fails()) {
      return redirect()->back()->with('error', $validator->errors()->first());
    }
    $validatedData = $validator->validated();
 
    try {
      $biller = Biller::updateOrCreate(
        ['name' => Str::slug($validatedData['name'], '_')],
        ['type' => $validatedData['type'], 'status' => $validatedData['status']]
      );

      $message = $biller->wasRecentlyCreated
        ? 'Data provider created successfully.'
        : 'Data provider updated successfully.';

      return redirect()->back()->with('status', $message);
    } catch (\Exception $e) {
      info('error message' . $e);
      return redirect()->back()->with('error', 'Failed to update/create data provider. Please try again.');
    }
  }


  public function listBiller()
  {
    $billers = Biller::paginate(10);
    return view('settings.billers', compact('billers'));
  }

  public function destroyBiller(Biller $biller)
  {
    try {
      $biller->delete();
      return redirect()->back()->with('status', 'Data provider deleted successfully.');
    } catch (\Exception $e) {
      info('error'. $e);
      return redirect()->back()->with('error', 'Failed to delete data provider. Please try again.');
    }
  }
}