PluginProbe
seQura / 3.0.7
seQura v3.0.7
4.3.4 4.3.3 4.3.2 4.3.1 trunk 2.0.0 2.0.10 2.0.11 2.0.12 2.0.5 2.0.6 2.0.7 2.0.8 2.0.9 3.0.0 3.0.2 3.0.5 3.0.6 3.0.7 3.1.0 3.1.1 3.2.0 3.2.1 3.2.2 4.0.0 All 30 releases
sequra / src / class-plugin.php

class-plugin.php in seQura 3.0.7, at src/class-plugin.php

196 lines 7.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * The core plugin class.
4 *
5 * @package SeQura/WC
6 */
7
8 namespace SeQura\WC;
9
10 use SeQura\WC\Controllers\Hooks\Asset\Interface_Assets_Controller;
11 use SeQura\WC\Controllers\Hooks\Product\Interface_Product_Controller;
12 use SeQura\WC\Controllers\Hooks\I18n\Interface_I18n_Controller;
13 use SeQura\WC\Controllers\Hooks\Order\Interface_Order_Controller;
14 use SeQura\WC\Controllers\Hooks\Payment\Interface_Payment_Controller;
15 use SeQura\WC\Controllers\Hooks\Process\Interface_Async_Process_Controller;
16 use SeQura\WC\Controllers\Hooks\Settings\Interface_Settings_Controller;
17 use SeQura\WC\Controllers\Rest\REST_Controller;
18 use SeQura\WC\Services\Interface_Constants;
19 use SeQura\WC\Services\Migration\Interface_Migration_Manager;
20
21 /**
22 * The core plugin class.
23 */
24 class Plugin {
25
26 /**
27 * The plugin data.
28 *
29 * @var array<string, string>
30 */
31 private $data;
32
33 /**
34 * The WordPress version
35 *
36 * @var string
37 */
38 private $wp_version;
39
40 /**
41 * The WooCommerce version
42 *
43 * @var string
44 */
45 private $wc_version;
46
47 /**
48 * The plugin base name.
49 *
50 * @var string
51 */
52 private $base_name;
53
54 /**
55 * The plugin file path.
56 *
57 * @var string
58 */
59 private $file_path;
60
61 /**
62 * Migration manager.
63 *
64 * @var Interface_Migration_Manager
65 */
66 private $migration_manager;
67
68 private const HOOK_DELIVERY_REPORT = 'sequra_delivery_report';
69
70 /**
71 * Construct the plugin and bind hooks with controllers.
72 */
73 public function __construct(
74 Interface_Constants $constants,
75 Interface_Migration_Manager $migration_manager,
76 Interface_I18n_Controller $i18n_controller,
77 Interface_Assets_Controller $assets_controller,
78 Interface_Settings_Controller $settings_controller,
79 Interface_Payment_Controller $payment_controller,
80 REST_Controller $rest_settings_controller,
81 REST_Controller $rest_onboarding_controller,
82 REST_Controller $rest_payment_controller,
83 REST_Controller $rest_log_controller,
84 Interface_Product_Controller $product_controller,
85 Interface_Async_Process_Controller $async_process_controller,
86 Interface_Order_Controller $order_controller
87 ) {
88 $this->data = $constants->get_plugin_data();
89 $this->wp_version = $constants->get_environment_data()['wp_version'] ?? '';
90 $this->wc_version = $constants->get_woocommerce_data()['Version'] ?? '';
91 $this->file_path = $constants->get_plugin_file_path();
92 $this->base_name = $constants->get_plugin_basename();
93 $this->migration_manager = $migration_manager;
94
95 \add_action( 'plugins_loaded', array( $this, 'install' ) );
96
97 // I18n.
98 \add_action( 'plugins_loaded', array( $i18n_controller, 'load_text_domain' ) );
99
100 // Assets hooks.
101 \add_action( 'admin_enqueue_scripts', array( $assets_controller, 'enqueue_admin' ) );
102 \add_action( 'wp_enqueue_scripts', array( $assets_controller, 'enqueue_front' ) );
103
104 // Settings hooks.
105 \add_action( 'admin_menu', array( $settings_controller, 'register_page' ) );
106 \add_filter( "plugin_action_links_{$this->base_name}", array( $settings_controller, 'add_action_link' ), 10, 4 );
107 \add_filter( 'sequra_settings_page_url', array( $settings_controller, 'get_settings_page_url' ) );
108 \add_filter( 'admin_footer_text', array( $settings_controller, 'remove_footer_admin' ) );
109 \add_filter( 'plugin_row_meta', array( $settings_controller, 'add_plugin_row_meta' ), 10, 2 );
110
111 // REST Controllers.
112 \add_action( 'rest_api_init', array( $rest_settings_controller, 'register_routes' ) );
113 \add_action( 'rest_api_init', array( $rest_onboarding_controller, 'register_routes' ) );
114 \add_action( 'rest_api_init', array( $rest_payment_controller, 'register_routes' ) );
115 \add_action( 'rest_api_init', array( $rest_log_controller, 'register_routes' ) );
116
117 // Payment hooks.
118 \add_filter( 'woocommerce_payment_gateways', array( $payment_controller, 'register_gateway_classes' ) );
119 \add_action( 'woocommerce_blocks_loaded', array( $payment_controller, 'register_gateway_gutenberg_block' ) );
120
121 \add_filter( 'woocommerce_thankyou_order_received_text', array( $payment_controller, 'order_received_text' ), 10, 2 );
122 \add_filter( 'woocommerce_order_get_payment_method_title', array( $payment_controller, 'order_get_payment_method_title' ), 10, 2 );
123
124 // Product widget.
125 \add_action( 'woocommerce_after_main_content', array( $product_controller, 'add_widget_shortcode_to_page' ) );
126 \add_action( 'wp_footer', array( $product_controller, 'add_widget_shortcode_to_page' ) );
127
128 \add_shortcode( 'sequra_widget', array( $product_controller, 'do_widget_shortcode' ) );
129 \add_shortcode( 'sequra_cart_widget', array( $product_controller, 'do_cart_widget_shortcode' ) );
130 \add_shortcode( 'sequra_product_listing_widget', array( $product_controller, 'do_product_listing_widget_shortcode' ) );
131
132 \add_action( 'add_meta_boxes', array( $product_controller, 'add_meta_boxes' ) );
133 \add_action( 'woocommerce_process_product_meta', array( $product_controller, 'save_product_meta' ) );
134
135 // Delivery report.
136 \add_action( self::HOOK_DELIVERY_REPORT, array( $async_process_controller, 'send_delivery_report' ) );
137 \add_filter( 'woocommerce_order_data_store_cpt_get_orders_query', array( $order_controller, 'handle_custom_query_vars' ), 10, 3 );
138
139 // Order Update.
140 \add_action( 'woocommerce_order_status_changed', array( $order_controller, 'handle_order_status_changed' ), 10, 4 );
141 \add_action( 'woocommerce_admin_order_data_after_order_details', array( $order_controller, 'show_link_to_sequra_back_office' ) );
142
143 // WooCommerce Compat.
144 \add_action( 'before_woocommerce_init', array( $this, 'declare_woocommerce_compatibility' ) );
145 }
146
147 /**
148 * Handle activation of the plugin.
149 */
150 public function activate(): void {
151 if ( version_compare( PHP_VERSION, $this->data['RequiresPHP'], '<' ) ) {
152 \deactivate_plugins( $this->base_name );
153 \wp_die( \esc_html( 'This plugin requires PHP ' . $this->data['RequiresPHP'] . ' or greater.' ) );
154 }
155
156 if ( version_compare( $this->wp_version, $this->data['RequiresWP'], '<' ) ) {
157 \deactivate_plugins( $this->base_name );
158 \wp_die( \esc_html( 'This plugin requires WordPress ' . $this->data['RequiresWP'] . ' or greater.' ) );
159 }
160
161 if ( version_compare( $this->wc_version, $this->data['RequiresWC'], '<' ) ) {
162 \deactivate_plugins( $this->base_name );
163 \wp_die( \esc_html( 'This plugin requires WooCommerce ' . $this->data['RequiresWC'] . ' or greater.' ) );
164 }
165 }
166
167 /**
168 * Handle deactivation of the plugin.
169 */
170 public function deactivate(): void {
171 \wp_clear_scheduled_hook( self::HOOK_DELIVERY_REPORT );
172 }
173
174 /**
175 * Execute the installation process if needed.
176 */
177 public function install(): void {
178 if ( ! \wp_next_scheduled( self::HOOK_DELIVERY_REPORT ) ) {
179 $random_offset = \wp_rand( 0, 25200 ); // 60*60*7 seconds from 2AM to 8AM.
180 $tomorrow = gmdate( 'Y-m-d 02:00', strtotime( 'tomorrow' ) );
181 $time = $random_offset + strtotime( $tomorrow );
182 \wp_schedule_event( $time, 'daily', self::HOOK_DELIVERY_REPORT );
183 }
184 $this->migration_manager->run_install_migrations();
185 }
186
187 /**
188 * Declare WooCommerce compatibility.
189 */
190 public function declare_woocommerce_compatibility() {
191 if ( class_exists( \Automattic\WooCommerce\Utilities\FeaturesUtil::class ) ) {
192 \Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility( 'custom_order_tables', $this->file_path, true );
193 }
194 }
195 }
196