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.');
}
}
}