From 830e4b862d9491811e471a7b629f971e8ba70ba2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Lucas=20Garc=C3=ADa?= <lucas@codeccoop.org>
Date: Tue, 30 Jan 2024 01:38:11 +0100
Subject: [PATCH] feat: class refactor

---
 ...seSettings.php => class-base-settings.php} | 17 +++--
 .../Integration.php => class-integration.php} |  4 +-
 includes/{options/Menu.php => class-menu.php} | 38 +++++++----
 .../Settings.php => class-settings.php}       | 14 ++--
 .../fields/{BaseField.php => class-field.php} |  6 +-
 .../gf/iban/{Addon.php => class-addon.php}    |  2 +-
 .../gf/iban/{index.php => class-field.php}    |  7 +-
 .../gf/iban/{Field.php => class-gf-field.php} |  3 +-
 includes/fields/gf/index.php                  |  3 -
 includes/fields/index.php                     | 11 ---
 .../wpcf7/iban/{index.php => class-field.php} |  5 +-
 includes/fields/wpcf7/index.php               |  3 -
 ...dsetControl.js => fieldset-control-js.php} |  0
 .../gf/{index.php => class-integration.php}   | 12 ++--
 includes/integrations/index.php               | 27 --------
 .../{index.php => class-integration.php}      | 11 +--
 includes/options/index.php                    | 10 ---
 wpct-erp-forms.php                            | 68 +++++++++++++------
 18 files changed, 116 insertions(+), 125 deletions(-)
 rename includes/{options/BaseSettings.php => class-base-settings.php} (90%)
 rename includes/{integrations/Integration.php => class-integration.php} (98%)
 rename includes/{options/Menu.php => class-menu.php} (58%)
 rename includes/{options/Settings.php => class-settings.php} (75%)
 rename includes/fields/{BaseField.php => class-field.php} (85%)
 rename includes/fields/gf/iban/{Addon.php => class-addon.php} (96%)
 rename includes/fields/gf/iban/{index.php => class-field.php} (72%)
 rename includes/fields/gf/iban/{Field.php => class-gf-field.php} (99%)
 delete mode 100644 includes/fields/gf/index.php
 delete mode 100644 includes/fields/index.php
 rename includes/fields/wpcf7/iban/{index.php => class-field.php} (97%)
 delete mode 100644 includes/fields/wpcf7/index.php
 rename includes/{options/fieldsetControl.js => fieldset-control-js.php} (100%)
 rename includes/integrations/gf/{index.php => class-integration.php} (93%)
 delete mode 100644 includes/integrations/index.php
 rename includes/integrations/wpcf7/{index.php => class-integration.php} (75%)
 delete mode 100644 includes/options/index.php

diff --git a/includes/options/BaseSettings.php b/includes/class-base-settings.php
similarity index 90%
rename from includes/options/BaseSettings.php
rename to includes/class-base-settings.php
index 78ab794..5e02a90 100644
--- a/includes/options/BaseSettings.php
+++ b/includes/class-base-settings.php
@@ -1,8 +1,6 @@
 <?php
 
-namespace WPCT_ERP_FORMS\Options;
-
-use Exception;
+namespace WPCT_ERP_FORMS;
 
 class Undefined
 {
@@ -76,7 +74,11 @@ class BaseSettings
         }
 
         if (!is_array($value)) {
-            return $this->input_render($setting, $field, $value);
+            if (is_bool($value)) {
+                return $this->checkbox_render($setting, $field, $value);
+            } else {
+                return $this->input_render($setting, $field, $value);
+            }
         } else {
             $fieldset = $this->fieldset_render($setting, $field, $value);
             if ($is_root) {
@@ -88,6 +90,11 @@ class BaseSettings
         }
     }
 
+    private function checkbox_render($setting, $field, $value)
+    {
+        return "<input type='checkbox' name='{$setting}[$field]' " . ($value ? 'checked' : '') . " />";
+    }
+
     public function input_render($setting, $field, $value)
     {
         return "<input type='text' name='{$setting}[{$field}]' value='{$value}' />";
@@ -125,7 +132,7 @@ class BaseSettings
             <button class="button button-secondary" data-action="remove">Remove</button>
         </div>
         <script>
-            <?php include 'fieldsetControl.js' ?>
+            <?php include 'fieldset-control-js.php' ?>
         </script>
 <?php
         return ob_get_clean();
diff --git a/includes/integrations/Integration.php b/includes/class-integration.php
similarity index 98%
rename from includes/integrations/Integration.php
rename to includes/class-integration.php
index 4685e67..89c4754 100644
--- a/includes/integrations/Integration.php
+++ b/includes/class-integration.php
@@ -1,8 +1,6 @@
 <?php
 
-namespace WPCT_ERP_FORMS\Integrations;
-
-use Exception;
+namespace WPCT_ERP_FORMS;
 
 class Integration
 {
diff --git a/includes/options/Menu.php b/includes/class-menu.php
similarity index 58%
rename from includes/options/Menu.php
rename to includes/class-menu.php
index a7e1728..3121e4d 100644
--- a/includes/options/Menu.php
+++ b/includes/class-menu.php
@@ -1,10 +1,9 @@
 <?php
 
-namespace WPCT_ERP_FORMS\Options;
+namespace WPCT_ERP_FORMS;
 
 class Menu
 {
-
     private $name;
     private $settings;
 
@@ -14,25 +13,35 @@ class Menu
         $this->settings = $settings;
     }
 
-    public function register()
+    public function on_load()
     {
         add_action('admin_menu', function () {
-            add_options_page(
-                $this->name,
-                $this->name,
-                'manage_options',
-                $this->settings->get_name(),
-                function () {
-                    $this->render_page();
-                }
-            );
+            $this->add_menu();
         });
 
         add_action('admin_init', function () {
-            $this->settings->register();
+            $this->register_settings();
         });
     }
 
+    private function add_menu()
+    {
+        add_options_page(
+            $this->name,
+            $this->name,
+            'manage_options',
+            $this->settings->get_name(),
+            function () {
+                $this->render_page();
+            },
+        );
+    }
+
+    private function register_settings()
+    {
+        $this->settings->register();
+    }
+
     private function render_page()
     {
         ob_start();
@@ -48,7 +57,8 @@ class Menu
             </form>
         </div>
 <?php
-        echo ob_get_clean();
+        $output = ob_get_clean();
+        echo apply_filters('wpct_st_menu_page_content', $output);
     }
 
     public function get_settings()
diff --git a/includes/options/Settings.php b/includes/class-settings.php
similarity index 75%
rename from includes/options/Settings.php
rename to includes/class-settings.php
index 78461c7..b057ec9 100644
--- a/includes/options/Settings.php
+++ b/includes/class-settings.php
@@ -1,14 +1,12 @@
 <?php
 
-namespace WPCT_ERP_FORMS\Options;
+namespace WPCT_ERP_FORMS;
 
-use WPCT_ERP_FORMS\Options\BaseSettings;
-
-require_once 'BaseSettings.php';
+require_once 'class-base-settings.php';
 
 class Settings extends BaseSettings
 {
-    public $group_name = 'wpct_erp_forms';
+    public $group_name = 'wpct-erp-forms';
     private $_default_endpoint = '/api/private/crm-lead';
 
     public function register()
@@ -17,8 +15,8 @@ class Settings extends BaseSettings
         $this->register_setting(
             $setting_name,
             [
-                'notification_receiver' => 'admin@example.com'
-            ]
+                'notification_receiver' => 'admin@example.coop'
+            ],
         );
 
         $this->register_field('notification_receiver', $setting_name);
@@ -31,7 +29,7 @@ class Settings extends BaseSettings
                     [
                         'form_id' => 0,
                         'endpoint' => $this->_default_endpoint,
-                    ]
+                    ],
                 ],
             ],
         );
diff --git a/includes/fields/BaseField.php b/includes/fields/class-field.php
similarity index 85%
rename from includes/fields/BaseField.php
rename to includes/fields/class-field.php
index aa0e311..4a84d8f 100644
--- a/includes/fields/BaseField.php
+++ b/includes/fields/class-field.php
@@ -1,10 +1,8 @@
 <?php
 
-namespace WPCT_ERP_FORMS\Fields;
+namespace WPCT_ERP_FORMS;
 
-use Exception;
-
-class BaseField
+class Field
 {
     private static $instances = [];
 
diff --git a/includes/fields/gf/iban/Addon.php b/includes/fields/gf/iban/class-addon.php
similarity index 96%
rename from includes/fields/gf/iban/Addon.php
rename to includes/fields/gf/iban/class-addon.php
index cc9f9ae..1d8fbdc 100644
--- a/includes/fields/gf/iban/Addon.php
+++ b/includes/fields/gf/iban/class-addon.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace WPCT_ERP_FORMS\Fields\GF\Iban;
+namespace WPCT_ERP_FORMS\GF\Fields\Iban;
 
 use GFForms;
 use GFAddOn;
diff --git a/includes/fields/gf/iban/index.php b/includes/fields/gf/iban/class-field.php
similarity index 72%
rename from includes/fields/gf/iban/index.php
rename to includes/fields/gf/iban/class-field.php
index 1f85c9b..1b57140 100644
--- a/includes/fields/gf/iban/index.php
+++ b/includes/fields/gf/iban/class-field.php
@@ -1,10 +1,13 @@
 <?php
 
-namespace WPCT_ERP_FORMS\Fields\GF\Iban;
+namespace WPCT_ERP_FORMS\GF\Fields\Iban;
 
-use WPCT_ERP_FORMS\Fields\BaseField;
+use WPCT_ERP_FORMS\Field as BaseField;
 use GFAddOn;
 
+require_once 'class-addon.php';
+require_once 'class-gf-field.php';
+
 class Field extends BaseField
 {
     public function register()
diff --git a/includes/fields/gf/iban/Field.php b/includes/fields/gf/iban/class-gf-field.php
similarity index 99%
rename from includes/fields/gf/iban/Field.php
rename to includes/fields/gf/iban/class-gf-field.php
index 9651ef7..dfa96d5 100644
--- a/includes/fields/gf/iban/Field.php
+++ b/includes/fields/gf/iban/class-gf-field.php
@@ -1,8 +1,7 @@
 <?php
 
-namespace WPCT_ERP_FORMS\Fields\GF\Iban;
+namespace WPCT_ERP_FORMS\GF\Fields\Iban;
 
-use Exception;
 use GF_Field;
 
 class GFField extends GF_Field
diff --git a/includes/fields/gf/index.php b/includes/fields/gf/index.php
deleted file mode 100644
index 1f62d02..0000000
--- a/includes/fields/gf/index.php
+++ /dev/null
@@ -1,3 +0,0 @@
-<?php
-
-require_once 'iban/index.php';
diff --git a/includes/fields/index.php b/includes/fields/index.php
deleted file mode 100644
index eb4556c..0000000
--- a/includes/fields/index.php
+++ /dev/null
@@ -1,11 +0,0 @@
-<?php
-
-require_once 'BaseField.php';
-
-if (defined('WPCF7_VERSION')) {
-    require_once 'wpcf7/index.php';
-}
-
-if (class_exists('GFForms')) {
-    require_once 'gf/index.php';
-}
diff --git a/includes/fields/wpcf7/iban/index.php b/includes/fields/wpcf7/iban/class-field.php
similarity index 97%
rename from includes/fields/wpcf7/iban/index.php
rename to includes/fields/wpcf7/iban/class-field.php
index 1cf6e2b..632052f 100644
--- a/includes/fields/wpcf7/iban/index.php
+++ b/includes/fields/wpcf7/iban/class-field.php
@@ -1,9 +1,8 @@
 <?php
 
-namespace WPCT_ERP_FORMS\Fields\WPCF7\Iban;
+namespace WPCT_ERP_FORMS\WPCF7\Fields\Iban;
 
-use WPCT_ERP_FORMS\Fields\BaseField;
-use Exception;
+use WPCT_ERP_FORMS\Field as BaseField;
 
 class Field extends BaseField
 {
diff --git a/includes/fields/wpcf7/index.php b/includes/fields/wpcf7/index.php
deleted file mode 100644
index 1f62d02..0000000
--- a/includes/fields/wpcf7/index.php
+++ /dev/null
@@ -1,3 +0,0 @@
-<?php
-
-require_once 'iban/index.php';
diff --git a/includes/options/fieldsetControl.js b/includes/fieldset-control-js.php
similarity index 100%
rename from includes/options/fieldsetControl.js
rename to includes/fieldset-control-js.php
diff --git a/includes/integrations/gf/index.php b/includes/integrations/gf/class-integration.php
similarity index 93%
rename from includes/integrations/gf/index.php
rename to includes/integrations/gf/class-integration.php
index 26a2d3c..d20088a 100644
--- a/includes/integrations/gf/index.php
+++ b/includes/integrations/gf/class-integration.php
@@ -1,15 +1,17 @@
 <?php
 
-namespace WPCT_ERP_FORMS\Integrations;
+namespace WPCT_ERP_FORMS\GF;
 
-use WPCT_ERP_FORMS\Fields\GF\Iban\Field as IbanField;
-use WPCT_ERP_FORMS\Integrations\Integration;
-use Exception;
+use WPCT_ERP_FORMS\GF\Fields\Iban\Field as IbanField;
+use WPCT_ERP_FORMS\Integration as BaseIntegration;
 
 require_once 'attachments.php';
 require_once 'fields-population.php';
 
-class GF extends Integration
+// Fields
+require_once dirname(__FILE__, 3) . '/fields/gf/iban/index.php';
+
+class Integration extends BaseIntegration
 {
     public static $fields = [
         IbanField::class
diff --git a/includes/integrations/index.php b/includes/integrations/index.php
deleted file mode 100644
index f25adb1..0000000
--- a/includes/integrations/index.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?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 'wpcf7/index.php';
-    add_action('plugins_loaded', function () {
-        WPCTIntegrationsRegistry::$instances['wpcf7'] = new WPCF7();
-    }, 90);
-}
-
-if (class_exists('GFForms')) {
-    require_once 'gf/index.php';
-    add_action('plugins_loaded', function () {
-        WPCTIntegrationsRegistry::$instances['gf'] = new GF();
-    }, 90);
-}
diff --git a/includes/integrations/wpcf7/index.php b/includes/integrations/wpcf7/class-integration.php
similarity index 75%
rename from includes/integrations/wpcf7/index.php
rename to includes/integrations/wpcf7/class-integration.php
index e327c97..66a5c50 100644
--- a/includes/integrations/wpcf7/index.php
+++ b/includes/integrations/wpcf7/class-integration.php
@@ -1,11 +1,14 @@
 <?php
 
-namespace WPCT_ERP_FORMS\Integrations;
+namespace WPCT_ERP_FORMS\WPCF7;
 
-use WPCT_ERP_FORMS\Integrations\Integration;
-use WPCT_ERP_FORMS\Fields\WPCF7\Iban\Field as IbanField;
+use WPCT_ERP_FORMS\Integration as BaseIntegration;
+use WPCT_ERP_FORMS\WPCF7\Fields\Iban\Field as IbanField;
 
-class WPCF7 extends Integration
+// Fields
+require_once dirname(__FILE__, 3) . '/fields/wpcf7/iban/index.php';
+
+class Integration extends BaseIntegration
 {
     public static $fields = [
         IbanField::class
diff --git a/includes/options/index.php b/includes/options/index.php
deleted file mode 100644
index 270e749..0000000
--- a/includes/options/index.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-
-use WPCT_ERP_FORMS\Options\Settings;
-use WPCT_ERP_FORMS\Options\Menu;
-
-require_once 'Settings.php';
-require_once 'Menu.php';
-
-$wpct_erp_forms_admin_menu = new Menu('Wpct ERP Forms', new Settings());
-$wpct_erp_forms_admin_menu->register();
diff --git a/wpct-erp-forms.php b/wpct-erp-forms.php
index 0b42bae..6694cfe 100755
--- a/wpct-erp-forms.php
+++ b/wpct-erp-forms.php
@@ -1,5 +1,10 @@
 <?php
 
+namespace WPCT_ERP_FORMS;
+
+use WPCT_ERP_FORMS\WPCF7\Integration as Wpcf7Integration;
+use WPCT_ERP_FORMS\GF\Integration as GFIntegration;
+
 /**
  * Plugin Name:     Wpct ERP Forms
  * Plugin URI:      https://git.coopdevs.org/codeccoop/wp/wpct-erp-forms
@@ -13,28 +18,51 @@
  * @package         wpct_erp_forms
  */
 
-/* Settings */
-require_once 'includes/options/index.php';
+require_once 'includes/class-menu.php';
+require_once 'includes/class-settings.php';
+require_once 'includes/class-integration.php';
+require_once 'includes/fields/class-field.php';
 
-/* Integrations */
-require_once 'includes/integrations/index.php';
+class Plugin
+{
+    private $menu;
+    private $integrations = [];
 
-/* Fields */
-require_once 'includes/fields/index.php';
+    public function __construct()
+    {
+        $settings = new Settings();
+        $this->menu = new Menu('Wpct ERP Forms', $settings);
 
-/* Dependencies */
-add_filter('wpct_dependencies_check', function ($dependencies) {
-    $dependencies['Wpct Http Backend'] = '<a href="https://git.coopdevs.org/codeccoop/wp/wpct-http-backend/">Wpct Http Backend</a>';
-    return $dependencies;
-});
+        load_plugin_textdomain(
+            'wpct-erp-forms',
+            false,
+            dirname(plugin_basename(__FILE__)) . '/languages',
+        );
+    }
 
-/* Localization */
-add_action('plugins_loaded', 'wpct_erp_forms_i18n', 10);
-function wpct_erp_forms_i18n()
-{
-    load_plugin_textdomain(
-        'wpct-erp-forms',
-        false,
-        dirname(plugin_basename(__FILE__)) . '/languages'
-    );
+    public function on_load()
+    {
+        add_action('init', function () {
+            /* Dependencies */
+            add_filter('wpct_dependencies_check', function ($dependencies) {
+                $dependencies['Wpct Http Backend'] = '<a href="https://git.coopdevs.org/codeccoop/wp/wpct-http-backend/">Wpct Http Backend</a>';
+                return $dependencies;
+            });
+
+            if (is_plugin_active('wp-contact-form-7/wp-contact-form-7.php')) {
+                require_once 'includes/integrations/wpcf7/class-integration.php';
+                $this->integrations['wpcf7'] = new Wpcf7Integration();
+            } else if (is_plugin_active('gravityforms/gravityforms.php')) {
+                require_once 'includes/integrations/gf/class-integration.php';
+                $this->integrations['gf'] = new GFIntegration();
+            }
+        });
+
+        $this->menu->on_load();
+    }
 }
+
+add_action('plugins_loaded', function () {
+    $plugin = new Plugin();
+    $plugin->on_load();
+}, 10);
-- 
GitLab