Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
26 / 26
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
PaymentGatewayController
100.00% covered (success)
100.00%
26 / 26
100.00% covered (success)
100.00%
2 / 2
5
100.00% covered (success)
100.00%
1 / 1
 index
100.00% covered (success)
100.00%
15 / 15
100.00% covered (success)
100.00%
1 / 1
1
 update
100.00% covered (success)
100.00%
11 / 11
100.00% covered (success)
100.00%
1 / 1
4
1<?php
2
3namespace App\Http\Controllers\admin;
4
5use App\Http\Controllers\Controller;
6use App\Services\Payment\PaymentManager;
7use Illuminate\Http\RedirectResponse;
8use Illuminate\Http\Request;
9use Illuminate\View\View;
10
11/**
12 * Settings → Payment Gateways. One card per registered gateway
13 * (config/payment_gateways.php): enable toggle + its own config fields.
14 * `online_payments`/`international_payments` feature flags additionally
15 * gate which cards even show up — see PaymentManager::isOn().
16 */
17class PaymentGatewayController extends Controller
18{
19    public function index(PaymentManager $manager): View
20    {
21        $gateways = collect($manager->keys())->map(function ($key) use ($manager) {
22            $driver = $manager->driver($key);
23            $entry = config("payment_gateways.{$key}");
24
25            return [
26                'key' => $key,
27                'label' => $driver->label(),
28                'schema' => $driver->configSchema(),
29                'group' => $entry['group'],
30                'feature' => $entry['feature'],
31                'isImplemented' => $driver->isImplemented(),
32                'enabled' => settings("payment_gateways.{$key}.enabled", $entry['default_enabled'] ?? false),
33                'config' => $manager->config($key),
34            ];
35        })->groupBy('group');
36
37        return view('admin.payment-gateways.index', compact('gateways'));
38    }
39
40    public function update(Request $request, string $key, PaymentManager $manager): RedirectResponse
41    {
42        abort_unless($manager->has($key), 404);
43
44        $driver = $manager->driver($key);
45        $schema = $driver->configSchema();
46        $enabled = $request->boolean('enabled');
47
48        $rules = [];
49        foreach ($schema as $field => $def) {
50            $rules["config.{$field}"] = $enabled && ($def['required'] ?? false) ? 'required' : 'nullable';
51        }
52        $data = $request->validate($rules);
53
54        settings()->set("payment_gateways.{$key}.enabled", $enabled);
55        settings()->set("payment_gateways.{$key}.config", $data['config'] ?? []);
56
57        return redirect()->route('admin.payment-gateways.index')->with('success', $driver->label() . ' settings saved.');
58    }
59}