Integrations.php
129 lines
| 1 | <?php |
| 2 | |
| 3 | namespace IAWP\Integrations; |
| 4 | |
| 5 | use IAWPSCOPED\Illuminate\Support\Collection; |
| 6 | /** @internal */ |
| 7 | class Integrations |
| 8 | { |
| 9 | private ?Collection $cached_integrations = null; |
| 10 | /** |
| 11 | * @return Integration[] |
| 12 | */ |
| 13 | public function ecommerce_integrations() : array |
| 14 | { |
| 15 | return $this->integrations(function (\IAWP\Integrations\Integration $integration) { |
| 16 | return $integration->is_ecommerce_plugin(); |
| 17 | })->sortBy(function (\IAWP\Integrations\Integration $integration) { |
| 18 | return !$integration->activated(); |
| 19 | })->all(); |
| 20 | } |
| 21 | public function is_using_ecommerce_plugin() : bool |
| 22 | { |
| 23 | return Collection::make($this->ecommerce_integrations())->contains(function (\IAWP\Integrations\Integration $integration) { |
| 24 | return $integration->activated(); |
| 25 | }); |
| 26 | } |
| 27 | public function active_ecommerce_plugin() : ?\IAWP\Integrations\Integration |
| 28 | { |
| 29 | if (!$this->is_using_ecommerce_plugin()) { |
| 30 | return null; |
| 31 | } |
| 32 | $ecommerce_plugins = $this->ecommerce_integrations(); |
| 33 | return $ecommerce_plugins[\array_key_first($ecommerce_plugins)]; |
| 34 | } |
| 35 | /** |
| 36 | * @return Integration[] |
| 37 | */ |
| 38 | public function form_integrations() : array |
| 39 | { |
| 40 | return $this->integrations(function (\IAWP\Integrations\Integration $integration) { |
| 41 | return $integration->is_form_plugin(); |
| 42 | })->sortBy(function (\IAWP\Integrations\Integration $integration) { |
| 43 | return !$integration->activated(); |
| 44 | })->all(); |
| 45 | } |
| 46 | public function is_using_form_plugin() : bool |
| 47 | { |
| 48 | return Collection::make($this->form_integrations())->contains(function (\IAWP\Integrations\Integration $integration) { |
| 49 | return $integration->activated(); |
| 50 | }); |
| 51 | } |
| 52 | public function active_form_plugin() : ?\IAWP\Integrations\Integration |
| 53 | { |
| 54 | if (!$this->is_using_form_plugin()) { |
| 55 | return null; |
| 56 | } |
| 57 | $form_plugins = $this->form_integrations(); |
| 58 | return $form_plugins[\array_key_first($form_plugins)]; |
| 59 | } |
| 60 | private function integrations(?callable $where) : Collection |
| 61 | { |
| 62 | if (\is_null($this->cached_integrations)) { |
| 63 | $this->cached_integrations = $this->config()->map(function ($config) { |
| 64 | return new \IAWP\Integrations\Integration($config); |
| 65 | }); |
| 66 | } |
| 67 | return $this->cached_integrations->when(\is_callable($where), function (Collection $collection) use($where) { |
| 68 | return $collection->filter(function (\IAWP\Integrations\Integration $integration) use($where) { |
| 69 | return $where($integration); |
| 70 | })->values(); |
| 71 | }); |
| 72 | } |
| 73 | private function config() : Collection |
| 74 | { |
| 75 | // Template |
| 76 | // [ |
| 77 | // 'name' => 'WooCommerce', // Any string |
| 78 | // 'category' => 'ecommerce', // 'ecommerce' or 'form' |
| 79 | // 'plugin' => ['plugin/plugin.php'], // A string or an array of strings |
| 80 | // // 'theme' => ['theme-slug'], // A string or an array of strings |
| 81 | // 'description' => 'A text blurb' |
| 82 | // ], |
| 83 | return Collection::make([ |
| 84 | // Example |
| 85 | // [ |
| 86 | // 'name' => 'WooCommerce', |
| 87 | // 'category' => 'ecommerce', |
| 88 | // 'plugin' => ['woocommerce/woocommerce.php'], |
| 89 | // 'description' => 'Some text blurb...', |
| 90 | // ], |
| 91 | // eCommerce |
| 92 | ['name' => 'WooCommerce', 'category' => 'ecommerce', 'plugin' => ['woocommerce/woocommerce.php']], |
| 93 | ['name' => 'FluentCart', 'category' => 'ecommerce', 'plugin' => ['fluent-cart/fluent-cart.php', 'fluent-cart-pro/fluent-cart-pro.php']], |
| 94 | ['name' => 'SureCart', 'category' => 'ecommerce', 'plugin' => ['surecart/surecart.php']], |
| 95 | ['name' => 'Easy Digital Downloads', 'category' => 'ecommerce', 'plugin' => ['easy-digital-downloads/easy-digital-downloads.php', 'easy-digital-downloads-pro/easy-digital-downloads.php'], 'filename' => 'edd'], |
| 96 | ['name' => 'Paid Memberships Pro', 'category' => 'ecommerce', 'plugin' => ['paid-memberships-pro/paid-memberships-pro.php', 'paid-memberships-pro-dev/paid-memberships-pro.php'], 'filename' => 'pmpro'], |
| 97 | // Forms |
| 98 | ['name' => 'Contact Form 7', 'category' => 'form', 'plugin' => ['contact-form-7/wp-contact-form-7.php']], |
| 99 | ['name' => 'WPForms', 'category' => 'form', 'plugin' => ['wpforms-lite/wpforms.php', 'wpforms/wpforms.php']], |
| 100 | ['name' => 'Gravity Forms', 'category' => 'form', 'plugin' => ['gravityforms/gravityforms.php']], |
| 101 | ['name' => 'Fluent Forms', 'category' => 'form', 'plugin' => ['fluentform/fluentform.php']], |
| 102 | ['name' => 'MailChimp for WordPress', 'category' => 'form', 'plugin' => ['mailchimp-for-wp/mailchimp-for-wp.php']], |
| 103 | ['name' => 'MailPoet', 'category' => 'form', 'plugin' => ['mailpoet/mailpoet.php']], |
| 104 | ['name' => 'Ninja Forms', 'category' => 'form', 'plugin' => ['ninja-forms/ninja-forms.php']], |
| 105 | ['name' => 'Bit Form', 'category' => 'form', 'plugin' => ['bit-form/bitforms.php']], |
| 106 | ['name' => 'Kadence', 'category' => 'form', 'plugin' => ['kadence-blocks/kadence-blocks.php']], |
| 107 | ['name' => 'Newsletter', 'category' => 'form', 'plugin' => ['newsletter/plugin.php']], |
| 108 | ['name' => 'Formidable Forms', 'category' => 'form', 'plugin' => ['formidable/formidable.php']], |
| 109 | ['name' => 'Bricks Builder', 'category' => 'form', 'theme' => 'bricks'], |
| 110 | ['name' => 'Divi', 'category' => 'form', 'theme' => 'Divi'], |
| 111 | ['name' => 'Elementor Pro', 'category' => 'form', 'plugin' => ['elementor-pro/elementor-pro.php']], |
| 112 | ['name' => 'Avada', 'category' => 'form', 'plugin' => ['fusion-builder/fusion-builder.php', 'fusion-core/fusion-core.php']], |
| 113 | ['name' => 'MailOptin', 'category' => 'form', 'plugin' => ['mailoptin/mailoptin.php']], |
| 114 | ['name' => 'SureForms', 'category' => 'form', 'plugin' => ['sureforms/sureforms.php']], |
| 115 | ['name' => 'Forminator', 'category' => 'form', 'plugin' => ['forminator/forminator.php']], |
| 116 | ['name' => 'WS Form', 'category' => 'form', 'plugin' => ['ws-form/ws-form.php', 'ws-form-pro/ws-form.php']], |
| 117 | ['name' => 'Convert Pro', 'category' => 'form', 'plugin' => ['convertpro/convertpro.php']], |
| 118 | ['name' => 'Everest Forms', 'category' => 'form', 'plugin' => ['everest-forms/everest-forms.php']], |
| 119 | ['name' => 'Hustle', 'category' => 'form', 'plugin' => ['wordpress-popup/popover.php', 'hustle/opt-in.php']], |
| 120 | ['name' => 'JetFormBuilder', 'category' => 'form', 'plugin' => ['jetformbuilder/jet-form-builder.php']], |
| 121 | ['name' => 'Kali Forms', 'category' => 'form', 'plugin' => ['kali-forms/kali-forms.php']], |
| 122 | ['name' => 'Thrive Leads', 'category' => 'form', 'plugin' => ['thrive-leads/thrive-leads.php']], |
| 123 | ['name' => 'Amelia', 'category' => 'form', 'plugin' => ['ameliabooking/ameliabooking.php']], |
| 124 | ['name' => 'ARForms', 'category' => 'form', 'plugin' => ['arforms-form-builder/arforms-form-builder.php']], |
| 125 | ['name' => 'WP Store Locator', 'category' => 'form', 'plugin' => ['wp-store-locator/wp-store-locator.php']], |
| 126 | ]); |
| 127 | } |
| 128 | } |
| 129 |