Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
| Total | |
100.00% |
26 / 26 |
|
100.00% |
2 / 2 |
CRAP | |
100.00% |
1 / 1 |
| PaymentGatewayController | |
100.00% |
26 / 26 |
|
100.00% |
2 / 2 |
5 | |
100.00% |
1 / 1 |
| index | |
100.00% |
15 / 15 |
|
100.00% |
1 / 1 |
1 | |||
| update | |
100.00% |
11 / 11 |
|
100.00% |
1 / 1 |
4 | |||
| 1 | <?php |
| 2 | |
| 3 | namespace App\Http\Controllers\admin; |
| 4 | |
| 5 | use App\Http\Controllers\Controller; |
| 6 | use App\Services\Payment\PaymentManager; |
| 7 | use Illuminate\Http\RedirectResponse; |
| 8 | use Illuminate\Http\Request; |
| 9 | use 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 | */ |
| 17 | class 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 | } |