| Server IP : 138.197.107.151 / Your IP : 216.73.217.7 Web Server : Apache/2.4.58 (Ubuntu) System : Linux BloxBy-Builder 6.8.0-71-generic #71-Ubuntu SMP PREEMPT_DYNAMIC Tue Jul 22 16:52:38 UTC 2025 x86_64 User : wpbetasites_mrakzqskir ( 1022) PHP Version : 8.3.6 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /var/www/shark-admin/app/Http/Controllers/ |
Upload File : |
<?php
// app/Http/Controllers/PricingPlanController.php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\PricingPlan;
class PricingPlanController extends Controller
{
public function list()
{
$title = "Pricing plans";
$customOrder = ["monthly","yearly","one-time"];
//
$plans = PricingPlan::orderByRaw("FIELD(type, '" . implode("','", $customOrder) . "')")->where("type","!=","monthly")->get();
//dd($plans);
return view('pricing_plans.list', compact('plans','title'));
}
public function create()
{
$title = "Create pricing plan";
return view('pricing_plans.create');
}
public function save(Request $request)
{
$request->validate([
'title' => 'required|string|max:255',
'subtitle' => 'required|string|max:255',
'price' => 'required|numeric',
'features' => 'nullable|string|max:255',
'features_labels' => 'nullable|string|max:255',
'plan_interval' => 'required'
]);
$features = array_filter(array_map('trim', explode('|', $request->input('features'))));
$features_labels = array_filter(array_map('trim', explode(',', $request->input('features_labels'))));
//dd($features);
\Stripe\Stripe::setApiKey(env('STRIPE_SECRET'));
// Step 1: Create Product
$product = \Stripe\Product::create([
'name' => $request->title,
'description' => $request->subtitle,
]);
$plan = [
'unit_amount' => $request->price*100, // in paisa = ₹500.00
'currency' => 'usd',
'product' => $product->id,
];
if($request->plan_interval=="monthly"){
$plan['recurring'] =
[
'interval' => 'month', // or 'year'
];
} else if($request->plan_interval=="yearly"){
$plan['recurring'] =
[
'interval' => 'year', // or 'year'
];
}
$price = \Stripe\Price::create($plan);
if($price){
$plan = new PricingPlan;
$plan->title = $request->title;
$plan->subtitle = $request->subtitle;
$plan->below_price_title = $request->below_price_title;
$plan->stripe_pricing_id = $price->id;
$plan->price = $request->price;
$plan->features = $features;
$plan->features_labels = $features_labels;
$plan->type = $request->plan_interval;
$plan->save();
}
return redirect()->route('pricing_plans.list')->with('success', 'Plan added successfully.');
}
public function edit(Request $request, $id)
{
$title = "Edit pricing plan";
$plan = PricingPlan::where('id', $id)->firstOrFail();
return view('pricing_plans.edit', compact('plan','title'));
}
public function update(Request $request, $id)
{
$plan = PricingPlan::findOrFail($id);
$request->validate([
'title' => 'required|string|max:255',
'subtitle' => 'required|string|max:255',
'price' => 'required|numeric',
'features' => 'nullable|string|max:255',
'features_labels' => 'nullable|string|max:255',
// 'is_enabled' => 'nullable|boolean'
]);
$features = array_filter(array_map('trim', explode('|', $request->input('features'))));
$features_labels = array_filter(array_map('trim', explode(',', $request->input('features_labels'))));
$plan->update([
'title' => $request->title,
'subtitle' => $request->subtitle,
'price' => $request->price,
'below_price_title' => $request->below_price_title,
'features' => $features,
'features_labels' => $features_labels,
//'is_enabled' => $request->has('is_enabled')
]);
return redirect()->back()->with('success', 'Plan updated successfully.');
}
public function toggleEnable($id)
{
$plan = PricingPlan::findOrFail($id);
$plan->is_enabled = !$plan->is_enabled;
$plan->save();
$status = $plan->is_enabled ? 'enabled' : 'disabled';
return redirect()->back()->with('success', "Plan has been $status.");
}
}