PluginProbe
ShopBuilder – WooCommerce Builder For Elementor / 3.4.2
ShopBuilder – WooCommerce Builder For Elementor v3.4.2
3.4.2 3.4.1 3.4.0 2.0.1 2.0.2 2.0.3 2.1.0 2.1.1 2.1.10 2.1.11 2.1.12 2.1.13 2.1.14 2.1.15 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 2.2.0 2.2.1 2.2.2 All 63 releases
shopbuilder / app / ShopBuilder.php

ShopBuilder.php in ShopBuilder – WooCommerce Builder For Elementor 3.4.2, at app/ShopBuilder.php

271 lines 6.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Main initialization class.
4 *
5 * @package RadiusTheme\SB
6 */
7
8 namespace RadiusTheme\SB;
9
10 use RadiusTheme\SB\AI\AIinit;
11 use RadiusTheme\SB\Helpers\Cache;
12 use RadiusTheme\SB\Helpers\Migration;
13 use RadiusTheme\SB\Helpers\Installation;
14 use RadiusTheme\SB\Modules\ModuleManager;
15 use RadiusTheme\SB\Traits\SingletonTrait;
16 use RadiusTheme\SB\Controllers\Shortcodes;
17 use RadiusTheme\SB\Controllers\Dependencies;
18 use RadiusTheme\SB\Controllers\CacheController;
19 use RadiusTheme\SB\Controllers\Admin\AdminInit;
20 use RadiusTheme\SB\Controllers\Admin\PluginRow;
21 use RadiusTheme\SB\Controllers\AssetsController;
22 use RadiusTheme\SB\Controllers\BuilderController;
23 use RadiusTheme\SB\Controllers\SupportController;
24 use RadiusTheme\SB\Controllers\Hooks\FilterHooks;
25 use RadiusTheme\SB\Controllers\Hooks\ActionHooks;
26 use RadiusTheme\SB\Controllers\Frontend\Ajax\AddToCart;
27 use RadiusTheme\SB\Controllers\Frontend\Ajax\AjaxLogin;
28 use RadiusTheme\SB\Controllers\Frontend\OrderReviewQuantity;
29 use RadiusTheme\SB\Controllers\Frontend\Ajax\UpdateCheckoutSection;
30
31 // Do not allow directly accessing this file.
32 if ( ! defined( 'ABSPATH' ) ) {
33 exit( 'This script cannot be accessed directly.' );
34 }
35
36 /**
37 * Main initialization class.
38 */
39 final class ShopBuilder {
40
41 /**
42 * Nonce id
43 *
44 * @var string
45 */
46 public $nonceId = '__rtsb_wpnonce';
47
48 /**
49 * Nonce Text
50 *
51 * @var string
52 */
53 public $nonceText = 'rtsb_nonce';
54
55 /**
56 * Post Type.
57 *
58 * @var string
59 */
60 public $post_type;
61
62 /**
63 * Post Type.
64 *
65 * @var string
66 */
67 public $current_theme;
68 /**
69 * Singleton
70 */
71
72 /**
73 * URL for fetch API
74 *
75 * @var string
76 */
77 public $BASE_API = 'https://shopbuilderwp.com/demo/wp-json/rtsb/v1/layouts/';
78
79 use SingletonTrait;
80
81 /**
82 * Class Constructor
83 */
84 private function __construct() {
85 $this->post_type = 'product';
86 $this->current_theme = wp_get_theme()->get( 'Template' ) ? wp_get_theme()->get( 'Template' ) : ( wp_get_theme()->get( 'TextDomain' ) ? wp_get_theme()->get( 'TextDomain' ) : strtolower( str_replace( ' ', '', wp_get_theme()->get( 'Name' ) ) ) );
87 add_action( 'plugins_loaded', [ $this, 'init' ], 15 );
88 add_action( 'upgrader_process_complete', [ $this, 'maybe_run_after_update' ], 10, 2 );
89
90 // Runs before anything reads or writes the object cache: Installation is
91 // on init:5 and ModuleManager on init:15. Registered here rather than in
92 // init() so version tracking stays accurate even while a dependency is
93 // missing and the rest of the plugin is dormant.
94 add_action( 'init', [ Cache::class, 'maybe_rotate_group' ], 1 );
95
96 // Register Plugin Active Hook.
97 register_activation_hook( RTSB_FILE, [ Installation::class, 'activate' ] );
98
99 // Register Plugin Deactivate Hook.
100 register_deactivation_hook( RTSB_FILE, [ Installation::class, 'deactivation' ] );
101
102 if ( Dependencies::instance()->check() ) {
103 SupportController::instance();
104 }
105 // HPOS Declare compatibility.
106 add_action(
107 'before_woocommerce_init',
108 function () {
109 if ( class_exists( \Automattic\WooCommerce\Utilities\FeaturesUtil::class ) ) {
110 \Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility( 'custom_order_tables', RTSB_FILE, true );
111 }
112 }
113 );
114 }
115
116 /**
117 * Assets url generate with given assets file
118 *
119 * @param string $file File.
120 *
121 * @return string
122 */
123 public function get_assets_uri( $file ) {
124 $file = ltrim( $file, '/' );
125
126 return trailingslashit( RTSB_URL . '/assets' ) . $file;
127 }
128
129 /**
130 * Assets path.
131 *
132 * @param string $file File.
133 *
134 * @return string
135 */
136 public function get_assets_path( $file ) {
137 $file = ltrim( $file, '/' );
138
139 return trailingslashit( RTSB_PATH . 'assets' ) . $file;
140 }
141
142 /**
143 * Get the template path.
144 *
145 * @return string
146 */
147 public function get_template_path() {
148 return apply_filters( 'rtsb/template/path', 'shopbuilder/' );
149 }
150
151 /**
152 * Get the plugin path.
153 *
154 * @return string
155 */
156 public function plugin_path() {
157 return untrailingslashit( plugin_dir_path( RTSB_FILE ) );
158 }
159
160 /**
161 * Init
162 *
163 * @return void
164 */
165 public function init() {
166 // Plugin row links (Settings/Demo/Documentation/Get Pro) must register
167 // regardless of dependency state so users can always reach Settings or
168 // docs even when WooCommerce/Elementor is inactive.
169 if ( is_admin() ) {
170 PluginRow::instance();
171 }
172
173 if ( ! Dependencies::instance()->check() ) {
174 return;
175 }
176
177 try {
178 do_action( 'rtsb/before/loaded' );
179 CacheController::instance();
180 // Include File.
181 AssetsController::instance();
182 ModuleManager::instance();
183
184 // Ajax.
185 AddToCart::instance();
186 AjaxLogin::instance();
187 UpdateCheckoutSection::instance();
188
189 // Checkout.
190 OrderReviewQuantity::instance();
191
192 BuilderController::instance();
193 FilterHooks::init_hooks();
194 ActionHooks::init_hooks();
195
196 Installation::init();
197 Migration::init();
198 AIinit::instance();
199
200 if ( is_admin() ) {
201 AdminInit::instance();
202 }
203
204 Shortcodes::instance();
205
206 do_action( 'rtsb/after/loaded' );
207 } catch ( \Throwable $e ) {
208 error_log( 'ShopBuilder init error: ' . $e->getMessage() ); // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_error_log
209 }
210 }
211
212 /**
213 * Maybe Run After Update
214 *
215 * @param object $upgrader_object Upgrader Object.
216 * @param array $options Options.
217 *
218 * @return void
219 */
220 public function maybe_run_after_update( $upgrader_object, $options ) {
221 if ( 'plugin' !== $options['type'] || ! in_array( $options['action'], [ 'install', 'update' ], true ) ) {
222 return;
223 }
224
225 $basename = plugin_basename( RTSB_FILE );
226 $slug = dirname( $basename );
227
228 // Bulk update flow: WordPress passes every plugin in the batch.
229 if ( ! empty( $options['plugins'] ) ) {
230 if ( in_array( $basename, (array) $options['plugins'], true ) ) {
231 Cache::clear_all_cache();
232 }
233 return;
234 }
235
236 // Single update flow: WordPress passes the basename under `plugin`.
237 if ( ! empty( $options['plugin'] ) ) {
238 if ( $basename === $options['plugin'] ) {
239 Cache::clear_all_cache();
240 }
241 return;
242 }
243
244 // Upload-based installation: only the destination folder name is known.
245 if (
246 ! empty( $upgrader_object->result['destination_name'] ) &&
247 $slug === $upgrader_object->result['destination_name']
248 ) {
249 Cache::clear_all_cache();
250 }
251 }
252
253 /**
254 * Checks if Pro version installed.
255 *
256 * @return boolean
257 */
258 public function has_pro() {
259 return function_exists( 'rtsbpro' ); // Fns::is_pro_authorized() will add in the future for checking pro Version Compatibility.
260 }
261
262 /**
263 * PRO Version URL.
264 *
265 * @return string
266 */
267 public function pro_version_link() {
268 return 'https://shopbuilderwp.com/';
269 }
270 }
271