PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.18.0
GiveWP – Donation Plugin and Fundraising Platform v2.18.0
4.16.4 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 4 years ago CommandHandlers 4 years ago Commands 4 years ago Contracts 4 years ago DataTransferObjects 4 years ago Exceptions 4 years ago Log 4 years ago Routes 4 years ago Traits 4 years ago Types 4 years ago PaymentGateway.php 4 years ago PaymentGatewayRegister.php 4 years ago
PaymentGatewayRegister.php
158 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\LegacyPaymentGateways\Adapters\LegacyPaymentGatewayRegisterAdapter;
9 use Give\Framework\PaymentGateways\Contracts\OffsiteGatewayInterface;
10 use Give\Framework\PaymentGateways\Contracts\PaymentGatewaysIterator;
11 use Give\Framework\PaymentGateways\Exceptions\OverflowException;
12
13 /**
14 * @since 2.18.0
15 */
16 class PaymentGatewayRegister extends PaymentGatewaysIterator
17 {
18 protected $gateways = [];
19
20 /**
21 * Get Gateways
22 *
23 * @since 2.18.0
24 *
25 * @return array
26 */
27 public function getPaymentGateways()
28 {
29 return $this->gateways;
30 }
31
32 /**
33 * Get Offsite Gateways
34 *
35 * @since 2.18.0
36 *
37 * @return array
38 */
39 public function getOffsitePaymentGateways()
40 {
41 return array_filter($this->gateways, static function ($gateway) {
42 return in_array(OffsiteGatewayInterface::class, class_implements($gateway), true);
43 });
44 }
45
46 /**
47 * Get Gateway
48 *
49 * @since 2.18.0
50 *
51 * @param string $id
52 *
53 * @return string
54 */
55 public function getPaymentGateway($id)
56 {
57 if (!$this->hasPaymentGateway($id)) {
58 throw new InvalidArgumentException("No gateway exists with the ID {$id}");
59 }
60
61 return $this->gateways[$id];
62 }
63
64 /**
65 * @since 2.18.0
66 *
67 * @param string $id
68 *
69 * @return bool
70 */
71 public function hasPaymentGateway($id)
72 {
73 return isset($this->gateways[$id]);
74 }
75
76 /**
77 * Register Gateway
78 *
79 * @since 2.18.0
80 *
81 * @param string $gatewayClass
82 *
83 * @throws OverflowException|InvalidArgumentException|Exception
84 */
85 public function registerGateway($gatewayClass)
86 {
87 if (!is_subclass_of($gatewayClass, PaymentGateway::class)) {
88 throw new InvalidArgumentException(
89 sprintf(
90 '%1$s must extend %2$s',
91 $gatewayClass,
92 PaymentGateway::class
93 )
94 );
95 }
96
97 $gatewayId = $gatewayClass::id();
98
99 if ($this->hasPaymentGateway($gatewayId)) {
100 throw new OverflowException("Cannot register a gateway with an id that already exists: $gatewayId");
101 }
102
103 $this->gateways[$gatewayId] = $gatewayClass;
104
105 $this->registerGatewayWithServiceContainer($gatewayClass, $gatewayId);
106
107 $this->afterGatewayRegister($gatewayClass);
108 }
109
110 /**
111 * Unregister Gateway
112 *
113 * @since 2.18.0
114 *
115 * @param $gatewayId
116 */
117 public function unregisterGateway($gatewayId)
118 {
119 if (isset($this->gateways[$gatewayId])) {
120 unset($this->gateways[$gatewayId]);
121 }
122 }
123
124 /**
125 *
126 * Register Gateway with Service Container as Singleton
127 * with option of adding Subscription Module through filter "give_gateway_{$gatewayId}_subscription_module"
128 *
129 * @since 2.18.0
130 *
131 * @param string $gatewayClass
132 * @param string $gatewayId
133 *
134 * @return void
135 */
136 private function registerGatewayWithServiceContainer($gatewayClass, $gatewayId)
137 {
138 give()->singleton($gatewayClass, function (Container $container) use ($gatewayClass, $gatewayId) {
139 $subscriptionModule = apply_filters("give_gateway_{$gatewayId}_subscription_module", null);
140
141 return new $gatewayClass($subscriptionModule ? $container->make($subscriptionModule) : null);
142 });
143 }
144
145 /**
146 * After gateway is registered, connect to legacy payment gateway adapter
147 *
148 * @param string $gatewayClass
149 */
150 private function afterGatewayRegister($gatewayClass)
151 {
152 /** @var LegacyPaymentGatewayRegisterAdapter $legacyPaymentGatewayRegisterAdapter */
153 $legacyPaymentGatewayRegisterAdapter = give(LegacyPaymentGatewayRegisterAdapter::class);
154
155 $legacyPaymentGatewayRegisterAdapter->connectGatewayToLegacyPaymentGatewayAdapter($gatewayClass);
156 }
157 }
158