PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.19.4
GiveWP – Donation Plugin and Fundraising Platform v3.19.4
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 2 years ago CommandHandlers 2 years ago Commands 2 years ago Contracts 1 year ago Controllers 2 years ago DataTransferObjects 3 years ago Exceptions 4 years ago Log 4 years ago Routes 3 years ago Traits 2 years ago Webhooks 1 year ago DonationSummary.php 3 years ago PaymentGateway.php 1 year ago PaymentGatewayRegister.php 2 years ago SubscriptionModule.php 1 year ago
PaymentGatewayRegister.php
130 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 /**
17 * @var string[]
18 */
19 protected $gateways = [];
20
21 /**
22 * Get Gateways
23 *
24 * @since 2.30.0 added $supportedFormVersion param to filter gateways by supported form version
25 * @since 2.18.0
26 */
27 public function getPaymentGateways(int $supportedFormVersion = null): array
28 {
29 if (!$supportedFormVersion) {
30 return $this->gateways;
31 }
32
33 return array_filter($this->gateways, static function (string $gatewayClass) use ($supportedFormVersion) {
34 /** @var PaymentGateway $gateway */
35 $gateway = give($gatewayClass);
36
37 return in_array($supportedFormVersion, $gateway->supportsFormVersions(), true);
38 });
39 }
40
41 /**
42 * Get Gateway
43 *
44 * @since 2.18.0
45 */
46 public function getPaymentGateway(string $id): PaymentGateway
47 {
48 if (!$this->hasPaymentGateway($id)) {
49 throw new InvalidArgumentException("No gateway exists with the ID {$id}");
50 }
51
52 /** @var PaymentGateway $gateway */
53 $gateway = give($this->gateways[$id]);
54
55 return $gateway;
56 }
57
58 /**
59 * @since 2.18.0
60 */
61 public function hasPaymentGateway(string $id): bool
62 {
63 return isset($this->gateways[$id]);
64 }
65
66 /**
67 * Register Gateway
68 *
69 * @since 2.18.0
70 *
71 * @throws OverflowException|InvalidArgumentException|Exception
72 */
73 public function registerGateway(string $gatewayClass)
74 {
75 if (!is_subclass_of($gatewayClass, PaymentGateway::class)) {
76 throw new InvalidArgumentException(
77 sprintf(
78 '%1$s must extend %2$s',
79 $gatewayClass,
80 PaymentGateway::class
81 )
82 );
83 }
84
85 $gatewayId = $gatewayClass::id();
86
87 if ($this->hasPaymentGateway($gatewayId)) {
88 throw new OverflowException("Cannot register a gateway with an id that already exists: $gatewayId");
89 }
90
91
92 $this->gateways[$gatewayId] = $gatewayClass;
93
94
95 $this->registerGatewayWithServiceContainer($gatewayClass, $gatewayId);
96 }
97
98 /**
99 * Unregister Gateway
100 *
101 * @since 2.18.0
102 *
103 * @param $gatewayId
104 */
105 public function unregisterGateway($gatewayId)
106 {
107 if (isset($this->gateways[$gatewayId])) {
108 unset($this->gateways[$gatewayId]);
109 }
110 }
111
112 /**
113 *
114 * Register Gateway with Service Container as Singleton
115 * with option of adding Subscription Module through filter "give_gateway_{$gatewayId}_subscription_module"
116 *
117 * @since 2.18.0
118 *
119 * @return void
120 */
121 private function registerGatewayWithServiceContainer(string $gatewayClass, string $gatewayId)
122 {
123 give()->singleton($gatewayClass, function (Container $container) use ($gatewayClass, $gatewayId) {
124 $subscriptionModule = apply_filters("givewp_gateway_{$gatewayId}_subscription_module", null);
125
126 return new $gatewayClass($subscriptionModule ? $container->make($subscriptionModule) : null);
127 });
128 }
129 }
130