PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.27.1
GiveWP – Donation Plugin and Fundraising Platform v2.27.1
4.16.3 4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / src / Framework / PaymentGateways / PaymentGatewayRegister.php
give / src / Framework / PaymentGateways Last commit date
Actions 3 years ago CommandHandlers 3 years ago Commands 3 years ago Contracts 3 years ago Controllers 3 years ago DataTransferObjects 3 years ago Exceptions 4 years ago Log 4 years ago Routes 3 years ago Traits 3 years ago DonationSummary.php 3 years ago PaymentGateway.php 3 years ago PaymentGatewayRegister.php 3 years ago SubscriptionModule.php 4 years ago
PaymentGatewayRegister.php
115 lines
1 <?php
2
3 namespace Give\Framework\PaymentGateways;
4
5 use Give\Container\Container;
6 use Give\Framework\Exceptions\Primitives\Exception;
7 use Give\Framework\Exceptions\Primitives\InvalidArgumentException;
8 use Give\Framework\PaymentGateways\Contracts\PaymentGatewaysIterator;
9 use Give\Framework\PaymentGateways\Exceptions\OverflowException;
10
11 /**
12 * @since 2.18.0
13 */
14 class PaymentGatewayRegister extends PaymentGatewaysIterator
15 {
16 protected $gateways = [];
17
18 /**
19 * Get Gateways
20 *
21 * @since 2.18.0
22 */
23 public function getPaymentGateways(): array
24 {
25 return $this->gateways;
26 }
27
28 /**
29 * Get Gateway
30 *
31 * @since 2.18.0
32 */
33 public function getPaymentGateway(string $id): PaymentGateway
34 {
35 if (!$this->hasPaymentGateway($id)) {
36 throw new InvalidArgumentException("No gateway exists with the ID {$id}");
37 }
38
39 /** @var PaymentGateway $gateway */
40 $gateway = give($this->gateways[$id]);
41
42 return $gateway;
43 }
44
45 /**
46 * @since 2.18.0
47 */
48 public function hasPaymentGateway(string $id): bool
49 {
50 return isset($this->gateways[$id]);
51 }
52
53 /**
54 * Register Gateway
55 *
56 * @since 2.18.0
57 *
58 * @throws OverflowException|InvalidArgumentException|Exception
59 */
60 public function registerGateway(string $gatewayClass)
61 {
62 if (!is_subclass_of($gatewayClass, PaymentGateway::class)) {
63 throw new InvalidArgumentException(
64 sprintf(
65 '%1$s must extend %2$s',
66 $gatewayClass,
67 PaymentGateway::class
68 )
69 );
70 }
71
72 $gatewayId = $gatewayClass::id();
73
74 if ($this->hasPaymentGateway($gatewayId)) {
75 throw new OverflowException("Cannot register a gateway with an id that already exists: $gatewayId");
76 }
77
78 $this->gateways[$gatewayId] = $gatewayClass;
79
80 $this->registerGatewayWithServiceContainer($gatewayClass, $gatewayId);
81 }
82
83 /**
84 * Unregister Gateway
85 *
86 * @since 2.18.0
87 *
88 * @param $gatewayId
89 */
90 public function unregisterGateway($gatewayId)
91 {
92 if (isset($this->gateways[$gatewayId])) {
93 unset($this->gateways[$gatewayId]);
94 }
95 }
96
97 /**
98 *
99 * Register Gateway with Service Container as Singleton
100 * with option of adding Subscription Module through filter "give_gateway_{$gatewayId}_subscription_module"
101 *
102 * @since 2.18.0
103 *
104 * @return void
105 */
106 private function registerGatewayWithServiceContainer(string $gatewayClass, string $gatewayId)
107 {
108 give()->singleton($gatewayClass, function (Container $container) use ($gatewayClass, $gatewayId) {
109 $subscriptionModule = apply_filters("givewp_gateway_{$gatewayId}_subscription_module", null);
110
111 return new $gatewayClass($subscriptionModule ? $container->make($subscriptionModule) : null);
112 });
113 }
114 }
115