PluginProbe
seQura / 3.0.0
seQura v3.0.0
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.0, at src/class-plugin.php

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