PluginProbe
seQura / 3.0.5
seQura v3.0.5
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.5, at src/class-plugin.php

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