PluginProbe
seQura / 3.0.6
seQura v3.0.6
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.6, at src/class-plugin.php

199 lines 7.1 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