PluginProbe
ShopBuilder – WooCommerce Builder For Elementor / 2.0.2
ShopBuilder – WooCommerce Builder For Elementor v2.0.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
← All changes | app/ShopBuilder.php +135 -186 3.4.22.0.2 View file →
@@ -4,21 +4,14 @@
4 4 *
5 5 * @package RadiusTheme\SB
6 6 */
7 7
8 -namespace RadiusTheme\SB;
9 8
10 -use RadiusTheme\SB\AI\AIinit;
11 -use RadiusTheme\SB\Helpers\Cache;
12 -use RadiusTheme\SB\Helpers\Migration;
13 9 use RadiusTheme\SB\Helpers\Installation;
14 10 use RadiusTheme\SB\Modules\ModuleManager;
15 11 use RadiusTheme\SB\Traits\SingletonTrait;
16 -use RadiusTheme\SB\Controllers\Shortcodes;
17 12 use RadiusTheme\SB\Controllers\Dependencies;
18 -use RadiusTheme\SB\Controllers\CacheController;
19 13 use RadiusTheme\SB\Controllers\Admin\AdminInit;
20 -use RadiusTheme\SB\Controllers\Admin\PluginRow;
21 14 use RadiusTheme\SB\Controllers\AssetsController;
22 15 use RadiusTheme\SB\Controllers\BuilderController;
23 16 use RadiusTheme\SB\Controllers\SupportController;
24 17 use RadiusTheme\SB\Controllers\Hooks\FilterHooks;
@@ -24,10 +17,9 @@
24 17 use RadiusTheme\SB\Controllers\Hooks\FilterHooks;
25 18 use RadiusTheme\SB\Controllers\Hooks\ActionHooks;
26 19 use RadiusTheme\SB\Controllers\Frontend\Ajax\AddToCart;
27 20 use RadiusTheme\SB\Controllers\Frontend\Ajax\AjaxLogin;
28 -use RadiusTheme\SB\Controllers\Frontend\OrderReviewQuantity;
29 -use RadiusTheme\SB\Controllers\Frontend\Ajax\UpdateCheckoutSection;
21 +use RadiusTheme\SB\Helpers\Fns;
30 22
31 23 // Do not allow directly accessing this file.
32 24 if ( ! defined( 'ABSPATH' ) ) {
33 25 exit( 'This script cannot be accessed directly.' );
@@ -32,152 +24,152 @@
32 24 if ( ! defined( 'ABSPATH' ) ) {
33 25 exit( 'This script cannot be accessed directly.' );
34 26 }
35 27
36 -/**
37 - * Main initialization class.
38 - */
39 -final class ShopBuilder {
28 +require_once RTSB_PATH . 'vendor/autoload.php';
40 29
30 +if ( ! class_exists( ShopBuilder::class ) ) {
41 31 /**
42 - * Nonce id
43 - *
44 - * @var string
32 + * Main initialization class.
45 33 */
46 - public $nonceId = '__rtsb_wpnonce';
34 + final class ShopBuilder {
47 35
48 - /**
49 - * Nonce Text
50 - *
51 - * @var string
52 - */
53 - public $nonceText = 'rtsb_nonce';
36 + /**
37 + * Nonce id
38 + *
39 + * @var string
40 + */
41 + public $nonceId = '__rtsb_wpnonce';
54 42
55 - /**
56 - * Post Type.
57 - *
58 - * @var string
59 - */
60 - public $post_type;
43 + /**
44 + * Nonce Text
45 + *
46 + * @var string
47 + */
48 + public $nonceText = 'rtsb_nonce';
61 49
62 - /**
63 - * Post Type.
64 - *
65 - * @var string
66 - */
67 - public $current_theme;
68 - /**
69 - * Singleton
70 - */
50 + /**
51 + * Post Type.
52 + *
53 + * @var string
54 + */
55 + public $post_type;
71 56
72 - /**
73 - * URL for fetch API
74 - *
75 - * @var string
76 - */
77 - public $BASE_API = 'https://shopbuilderwp.com/demo/wp-json/rtsb/v1/layouts/';
57 + /**
58 + * Post Type.
59 + *
60 + * @var string
61 + */
62 + public $current_theme;
63 + /**
64 + * Singleton
65 + */
78 66
79 - use SingletonTrait;
67 + /**
68 + * URL for fetch API
69 + * @var string
70 + */
71 + public $BASE_API = 'https://shopbuilderwp.com/wp-json/rtsb/v1/layouts/';
80 72
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 );
73 + use SingletonTrait;
89 74
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 );
75 + /**
76 + * Class Constructor
77 + */
78 + private function __construct() {
79 + $this->define_constants();
80 + $this->post_type = 'product';
81 + $this->current_theme = wp_get_theme()->get( 'Template' ) ? wp_get_theme()->get( 'Template' ) : wp_get_theme()->get( 'TextDomain' );
82 + add_action( 'init', [ $this, 'language' ] );
83 + add_action( 'plugins_loaded', [ $this, 'init' ], 15 );
95 84
96 - // Register Plugin Active Hook.
97 - register_activation_hook( RTSB_FILE, [ Installation::class, 'activate' ] );
85 + // Register Plugin Active Hook.
86 + register_activation_hook( RTSB_FILE, [ Installation::class, 'activate' ] );
98 87
99 - // Register Plugin Deactivate Hook.
100 - register_deactivation_hook( RTSB_FILE, [ Installation::class, 'deactivation' ] );
88 + // Register Plugin Deactivate Hook.
89 + register_deactivation_hook( RTSB_FILE, [ Installation::class, 'deactivation' ] );
101 90
102 - if ( Dependencies::instance()->check() ) {
103 91 SupportController::instance();
92 +
93 + // HPOS Declare compatibility
94 + add_action(
95 + 'before_woocommerce_init',
96 + function() {
97 + if ( class_exists( \Automattic\WooCommerce\Utilities\FeaturesUtil::class ) ) {
98 + \Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility( 'custom_order_tables', RTSB_FILE, true );
99 + }
100 + }
101 + );
102 +
104 103 }
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 - }
104 +
105 + /**
106 + * Constants
107 + *
108 + * @return void
109 + */
110 + private function define_constants() {
111 + if ( ! defined( 'RTSB_ABSPATH' ) ) {
112 + define( 'RTSB_ABSPATH', dirname( RTSB_FILE ) . '/' );
112 113 }
113 - );
114 - }
115 114
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, '/' );
115 + if ( ! defined( 'RTSB_URL' ) ) {
116 + define( 'RTSB_URL', plugins_url( '', RTSB_FILE ) );
117 + }
125 118
126 - return trailingslashit( RTSB_URL . '/assets' ) . $file;
127 - }
119 + }
128 120
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 121
139 - return trailingslashit( RTSB_PATH . 'assets' ) . $file;
140 - }
122 + /**
123 + * Assets url generate with given assets file
124 + *
125 + * @param string $file File.
126 + *
127 + * @return string
128 + */
129 + public function get_assets_uri( $file ) {
130 + $file = ltrim( $file, '/' );
141 131
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 - }
132 + return trailingslashit( RTSB_URL . '/assets' ) . $file;
133 + }
150 134
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 - }
135 + /**
136 + * Get the template path.
137 + *
138 + * @return string
139 + */
140 + public function get_template_path() {
141 + return apply_filters( 'rtsb/template/path', 'shopbuilder/' );
142 + }
159 143
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();
144 + /**
145 + * Get the plugin path.
146 + *
147 + * @return string
148 + */
149 + public function plugin_path() {
150 + return untrailingslashit( plugin_dir_path( RTSB_FILE ) );
171 151 }
172 152
173 - if ( ! Dependencies::instance()->check() ) {
174 - return;
153 + /**
154 + * Load Text Domain
155 + */
156 + public function language() {
157 + load_plugin_textdomain( 'shopbuilder', false, dirname( plugin_basename( RTSB_FILE ) ) . '/languages/' );
175 158 }
176 159
177 - try {
160 + /**
161 + * Init
162 + *
163 + * @return void
164 + */
165 + public function init() {
166 + if ( ! Dependencies::instance()->check() ) {
167 + return;
168 + }
169 +
178 170 do_action( 'rtsb/before/loaded' );
179 - CacheController::instance();
171 +
180 172 // Include File.
181 173 AssetsController::instance();
182 174 ModuleManager::instance();
183 175
@@ -183,88 +175,45 @@
183 175
184 176 // Ajax.
185 177 AddToCart::instance();
186 178 AjaxLogin::instance();
187 - UpdateCheckoutSection::instance();
188 179
189 - // Checkout.
190 - OrderReviewQuantity::instance();
191 -
192 180 BuilderController::instance();
193 181 FilterHooks::init_hooks();
194 182 ActionHooks::init_hooks();
195 183
196 184 Installation::init();
197 - Migration::init();
198 - AIinit::instance();
199 -
200 185 if ( is_admin() ) {
201 186 AdminInit::instance();
202 187 }
203 188
204 - Shortcodes::instance();
205 -
206 189 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 190 }
210 - }
211 191
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;
192 + /**
193 + * Checks if Pro version installed
194 + *
195 + * @return boolean
196 + */
197 + public function has_pro() {
198 + return function_exists( 'rtsbpro' );
223 199 }
224 200
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;
201 + /**
202 + * PRO Version URL.
203 + *
204 + * @return string
205 + */
206 + public function pro_version_link() {
207 + return 'https://shopbuilderwp.com/';
234 208 }
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 209 }
252 210
253 211 /**
254 - * Checks if Pro version installed.
255 - *
256 - * @return boolean
212 + * @return ShopBuilder
257 213 */
258 - public function has_pro() {
259 - return function_exists( 'rtsbpro' ); // Fns::is_pro_authorized() will add in the future for checking pro Version Compatibility.
214 + function rtsb() {
215 + return ShopBuilder::instance();
260 216 }
261 217
262 - /**
263 - * PRO Version URL.
264 - *
265 - * @return string
266 - */
267 - public function pro_version_link() {
268 - return 'https://shopbuilderwp.com/';
269 - }
218 + rtsb();
270 219 }