From cf8230a246ea0eee795e460b65b29d90195589c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20Garc=C3=ADa?= <lucas@codeccoop.org> Date: Tue, 23 Jan 2024 10:56:27 +0100 Subject: [PATCH] feat: integrations registry --- includes/integrations/Integration.php | 40 +++++++++++++++++--- includes/integrations/contactform7/index.php | 7 +--- includes/integrations/gravityforms/index.php | 5 --- includes/integrations/index.php | 16 ++++++++ readme.txt | 21 ++++++++-- 5 files changed, 69 insertions(+), 20 deletions(-) diff --git a/includes/integrations/Integration.php b/includes/integrations/Integration.php index 47f647f..e62be1e 100644 --- a/includes/integrations/Integration.php +++ b/includes/integrations/Integration.php @@ -6,8 +6,33 @@ use Exception; class Integration { - public function register() + private static $instances = []; + + public function __construct() + { + add_action('init', function () { + $integration = self::get_instance(); + $integration->register(); + }); + } + + protected function __clone() + { + } + + public function __wakeup() + { + throw new \Exception("Cannot unserialize a singleton."); + } + + public static function get_instance() { + $cls = static::class; + if (!isset(self::$instances[$cls])) { + self::$instances[$cls] = new static(); + } + + return self::$instances[$cls]; } public function submit($payload, $endpoints) @@ -23,7 +48,7 @@ class Integration if (!isset($settings['notification_receiver'])) return; $to = $settings['notification_receiver']; - $subject = 'WPCT ERP Forms Error'; + $subject = 'Wpct ERP Forms Error'; $body = "Form ID: {$form['id']}\n"; $body .= "Form title: {$form['title']}"; $body .= 'Submission: ' . print_r($payload, true); @@ -73,7 +98,7 @@ class Integration ]; } - return $payload; + return apply_filters('wpct_erp_forms_payload', $payload); } private function cleanup_empties(&$submission) @@ -101,9 +126,14 @@ class Integration } ); - return array_map(function ($map) { + return apply_filters('wpct_erp_forms_endpoints', array_map(function ($map) { return $map['endpoint']; - }, $maps); + }, $maps)); + } + + public function register() + { + throw new Exception('Method to overwrite by inheritance'); } public function serialize_submission($submission, $form) diff --git a/includes/integrations/contactform7/index.php b/includes/integrations/contactform7/index.php index ddbcc67..72f9c93 100644 --- a/includes/integrations/contactform7/index.php +++ b/includes/integrations/contactform7/index.php @@ -1,6 +1,6 @@ <?php -namespace WPCT_ERP_FORMS\Integrations\WPCF7; +namespace WPCT_ERP_FORMS\Integrations; use WPCT_ERP_FORMS\Integrations\Integration; @@ -9,8 +9,6 @@ class WPCF7 extends Integration public function register() { - parent::register(); - add_filter('wpcf7_before_send_mail', function ($form, &$abort, $submission) { $this->do_submission($submission, $form); }, 10, 3); @@ -36,6 +34,3 @@ class WPCF7 extends Integration ]; } } - -$wpct_erp_forms_wpct7 = new WPCF7(); -$wpct_erp_forms_wpct7->register(); diff --git a/includes/integrations/gravityforms/index.php b/includes/integrations/gravityforms/index.php index 73caa2e..980e290 100644 --- a/includes/integrations/gravityforms/index.php +++ b/includes/integrations/gravityforms/index.php @@ -14,8 +14,6 @@ class GF extends Integration public function register() { - parent::register(); - add_action('gform_after_submission', function ($entry, $form) { $this->do_submission($entry, $form); }, 10, 2); @@ -114,6 +112,3 @@ class GF extends Integration } } } - -$wpct_erp_forms_gf = new GF(); -$wpct_erp_forms_gf->register(); diff --git a/includes/integrations/index.php b/includes/integrations/index.php index 73a9f87..a2e5cda 100644 --- a/includes/integrations/index.php +++ b/includes/integrations/index.php @@ -1,11 +1,27 @@ <?php +namespace WPCT_ERP_FORMS\Integrations; + +use WPCT_ERP_FORMS\Integrations\WPCF7; +use WPCT_ERP_FORMS\Integrations\GF; + require_once 'Integration.php'; +class WPCTIntegrationsRegistry +{ + public static $instances = []; +} + if (defined('WPCF7_VERSION')) { require_once 'contactform7/index.php'; + add_action('plugins_loaded', function () { + WPCTIntegrationsRegistry::$instances[] = new WPCF7(); + }); } if (class_exists('GFForms')) { require_once 'gravityforms/index.php'; + add_action('plugins_loaded', function () { + WPCTIntegrationsRegistry::$instances[] = new GF(); + }); } diff --git a/readme.txt b/readme.txt index 88ef6bc..27ce5e9 100755 --- a/readme.txt +++ b/readme.txt @@ -1,6 +1,6 @@ -=== Wpct CRM Forms === +=== Wpct ERP Forms === Contributors: codeccoop, coopdevs -Tags: forms, odoo, crm +Tags: forms, erp, crm Requires at least: 6.3.1 Tested up to: 6.3.1 Requires PHP: 8.0 @@ -8,11 +8,24 @@ Stable tag: 1.0.0 License: GPLv2 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html -Form submissions to the CRM Lead Odoo module +Form submissions to ERP backends == Description == -GravityForm's submissions to the [CRM Lead](https://git.coopdevs.org/coopdevs/odoo/odoo-addons/enhancements/enhancements-crm) Odoo module. The plugin should work with [WPCT Odoo Connect](https://git.coopdevs.org/coopdevs/website/wp/wp-plugins/wpct-odoo-connect) to perform http requests, and with [GravityForms](https://www.gravityforms.com/) to build forms. +Bridge WP form builder plugins' submissions to a ERP backend. The plugin should work with [WPCT Odoo Connect](https://git.coopdevs.org/coopdevs/website/wp/wp-plugins/wpct-odoo-connect) to perform http requests. + +The plugin has two integrations, with GravityForms and with Contactform7. Choose your preferred form builder. + +== Hooks == + +Filters: +* wpct_erp_forms_before_submission (array $submission, array $form) -> array $submission: Filter form submission +* wpct_erp_forms_payload (array $payload) -> array $payload: Filter submission payload +* wpct_erp_forms_endpoints (array $endpoints) -> array $endpoints: Filter endpoints array + +Actions: +* wpct_erp_forms_on_failure (array $submission, array $form): Fired on submission failure +* wpct_erp_forms_after_submission (array $submission, array $form): Fired on successfully submited == Changelog == -- GitLab