← All changes
|
backend/src/Services/Integrations/IntegrationService.php
+94
-11
1.4
→
1.5
View file →
| @@ -3,8 +3,9 @@ | ||
| 3 | 3 | namespace IvyForms\Services\Integrations; |
| 4 | 4 | |
| 5 | 5 | use IvyForms\Common\Exceptions\InvalidArgumentException; |
| 6 | 6 | use IvyForms\Services\GoogleSheets\Hooks\InitializationHook as GoogleSheetsInitializationHook; |
| 7 | +use IvyForms\Services\Payment\PaymentsFeature; | |
| 7 | 8 | |
| 8 | 9 | /** |
| 9 | 10 | * Integration Service |
| 10 | 11 | * |
| @@ -95,8 +96,10 @@ | ||
| 95 | 96 | ], |
| 96 | 97 | ], |
| 97 | 98 | ]); |
| 98 | 99 | |
| 100 | + $this->registerPageBuilderIntegrations(); | |
| 101 | + | |
| 99 | 102 | // Register Pro integrations as placeholders |
| 100 | 103 | // These will be shown with "Upgrade" button when Pro is not installed |
| 101 | 104 | // When Pro is installed, these will be overwritten by Pro's registrar |
| 102 | 105 | |
| @@ -130,19 +133,19 @@ | ||
| 130 | 133 | ], |
| 131 | 134 | ], |
| 132 | 135 | ]); |
| 133 | 136 | |
| 134 | - // Zapier Integration (Pro - Growth) — hidden in Lite until ready; Pro re-registers as coming soon | |
| 135 | -// $this->registry->register('zapier', [ | |
| 136 | -// 'label' => 'zapier_label', | |
| 137 | -// 'component' => 'ZapierIntegrationSettings', | |
| 138 | -// 'icon' => 'zapier', | |
| 139 | -// 'description' => 'zapier_description', | |
| 140 | -// 'category' => 'Automation', | |
| 141 | -// 'requiresAuth' => false, | |
| 142 | -// 'hasGlobalSettings' => true, | |
| 143 | -// 'plan' => 'growth', | |
| 144 | -// ]); | |
| 137 | + // Zapier Integration (Pro - Growth) | |
| 138 | + $this->registry->register('zapier', [ | |
| 139 | + 'label' => 'zapier_label', | |
| 140 | + 'component' => 'ZapierIntegrationSettings', | |
| 141 | + 'icon' => 'zapier', | |
| 142 | + 'description' => 'zapier_description', | |
| 143 | + 'category' => 'Automation', | |
| 144 | + 'requiresAuth' => false, | |
| 145 | + 'hasGlobalSettings' => true, | |
| 146 | + 'plan' => 'growth', | |
| 147 | + ]); | |
| 145 | 148 | |
| 146 | 149 | // Public API Integration (Pro - Agency) |
| 147 | 150 | $this->registry->register('public-api', [ |
| 148 | 151 | 'label' => 'public_api_integration_label', |
| @@ -162,8 +165,10 @@ | ||
| 162 | 165 | ], |
| 163 | 166 | ], |
| 164 | 167 | ]); |
| 165 | 168 | |
| 169 | + $this->registerPaymentIntegrations(); | |
| 170 | + | |
| 166 | 171 | // Salesforce Integration (Pro - Agency) |
| 167 | 172 | // $this->registry->register('salesforce', [ |
| 168 | 173 | // 'label' => 'salesforce_label', |
| 169 | 174 | // 'component' => 'SalesforceIntegrationSettings', |
| @@ -190,7 +195,85 @@ | ||
| 190 | 195 | 'type' => 'boolean', |
| 191 | 196 | 'default' => false, |
| 192 | 197 | ], |
| 193 | 198 | ], |
| 199 | + ]); | |
| 200 | + } | |
| 201 | + | |
| 202 | + /** | |
| 203 | + * Register page builder integrations (Lite) | |
| 204 | + * | |
| 205 | + * These are informational cards only: forms are embedded through the builder itself, | |
| 206 | + * so there is nothing to enable or configure — the card just links to the documentation. | |
| 207 | + * | |
| 208 | + * @return void | |
| 209 | + * @throws InvalidArgumentException | |
| 210 | + */ | |
| 211 | + private function registerPageBuilderIntegrations(): void | |
| 212 | + { | |
| 213 | + $pageBuilderSlugs = ['elementor', 'divi', 'gutenberg']; | |
| 214 | + | |
| 215 | + foreach ($pageBuilderSlugs as $slug) { | |
| 216 | + $this->registry->register($slug, [ | |
| 217 | + 'label' => $slug . '_label', | |
| 218 | + 'icon' => $slug, | |
| 219 | + 'description' => $slug . '_description', | |
| 220 | + 'category' => 'Page Builders', | |
| 221 | + 'plan' => 'lite', | |
| 222 | + 'docsOnly' => true, | |
| 223 | + 'hasGlobalSettings' => false, | |
| 224 | + 'hasFormSettings' => false, | |
| 225 | + 'learnMoreUrl' => 'https://ivyforms.com/documentation/', | |
| 226 | + ]); | |
| 227 | + } | |
| 228 | + } | |
| 229 | + | |
| 230 | + /** | |
| 231 | + * Payment integrations (Square / Stripe / PayPal) | |
| 232 | + * | |
| 233 | + * While the payments feature is not released, the cards are shown as "Coming soon": | |
| 234 | + * no toggle, no settings and no form-builder tab (see PaymentsFeature). | |
| 235 | + */ | |
| 236 | + private function registerPaymentIntegrations(): void | |
| 237 | + { | |
| 238 | + $comingSoon = !PaymentsFeature::isEnabled(); | |
| 239 | + | |
| 240 | + $this->registry->register('square', [ | |
| 241 | + 'label' => 'square_label', | |
| 242 | + 'component' => 'SquareIntegrationSettings', | |
| 243 | + 'icon' => 'square', | |
| 244 | + 'description' => 'square_description', | |
| 245 | + 'category' => 'Payment', | |
| 246 | + 'requiresAuth' => true, | |
| 247 | + 'hasGlobalSettings' => true, | |
| 248 | + 'plan' => 'lite', | |
| 249 | + 'learnMoreUrl' => 'https://ivyforms.com/documentation/', | |
| 250 | + 'comingSoon' => $comingSoon, | |
| 251 | + ]); | |
| 252 | + | |
| 253 | + $this->registry->register('stripe', [ | |
| 254 | + 'label' => 'stripe_label', | |
| 255 | + 'component' => 'StripeIntegrationSettings', | |
| 256 | + 'icon' => 'stripe', | |
| 257 | + 'description' => 'stripe_description', | |
| 258 | + 'category' => 'Payment', | |
| 259 | + 'requiresAuth' => true, | |
| 260 | + 'hasGlobalSettings' => true, | |
| 261 | + 'plan' => 'essentials', | |
| 262 | + 'learnMoreUrl' => 'https://ivyforms.com/documentation/', | |
| 263 | + 'comingSoon' => $comingSoon, | |
| 264 | + ]); | |
| 265 | + | |
| 266 | + $this->registry->register('paypal', [ | |
| 267 | + 'label' => 'paypal_label', | |
| 268 | + 'component' => 'PaypalIntegrationSettings', | |
| 269 | + 'icon' => 'paypal', | |
| 270 | + 'description' => 'paypal_description', | |
| 271 | + 'category' => 'Payment', | |
| 272 | + 'requiresAuth' => true, | |
| 273 | + 'hasGlobalSettings' => true, | |
| 274 | + 'plan' => 'essentials', | |
| 275 | + 'learnMoreUrl' => 'https://ivyforms.com/documentation/', | |
| 276 | + 'comingSoon' => $comingSoon, | |
| 194 | 277 | ]); |
| 195 | 278 | } |
| 196 | 279 | } |