PluginProbe
ShopBuilder – WooCommerce Builder For Elementor / 2.6.3
ShopBuilder – WooCommerce Builder For Elementor v2.6.3
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 +44 -98 3.4.22.6.3 View file →
@@ -6,10 +6,8 @@
6 6 */
7 7
8 8 namespace RadiusTheme\SB;
9 9
10 -use RadiusTheme\SB\AI\AIinit;
11 -use RadiusTheme\SB\Helpers\Cache;
12 10 use RadiusTheme\SB\Helpers\Migration;
13 11 use RadiusTheme\SB\Helpers\Installation;
14 12 use RadiusTheme\SB\Modules\ModuleManager;
15 13 use RadiusTheme\SB\Traits\SingletonTrait;
@@ -16,9 +14,8 @@
16 14 use RadiusTheme\SB\Controllers\Shortcodes;
17 15 use RadiusTheme\SB\Controllers\Dependencies;
18 16 use RadiusTheme\SB\Controllers\CacheController;
19 17 use RadiusTheme\SB\Controllers\Admin\AdminInit;
20 -use RadiusTheme\SB\Controllers\Admin\PluginRow;
21 18 use RadiusTheme\SB\Controllers\AssetsController;
22 19 use RadiusTheme\SB\Controllers\BuilderController;
23 20 use RadiusTheme\SB\Controllers\SupportController;
24 21 use RadiusTheme\SB\Controllers\Hooks\FilterHooks;
@@ -24,9 +21,8 @@
24 21 use RadiusTheme\SB\Controllers\Hooks\FilterHooks;
25 22 use RadiusTheme\SB\Controllers\Hooks\ActionHooks;
26 23 use RadiusTheme\SB\Controllers\Frontend\Ajax\AddToCart;
27 24 use RadiusTheme\SB\Controllers\Frontend\Ajax\AjaxLogin;
28 -use RadiusTheme\SB\Controllers\Frontend\OrderReviewQuantity;
29 25 use RadiusTheme\SB\Controllers\Frontend\Ajax\UpdateCheckoutSection;
30 26
31 27 // Do not allow directly accessing this file.
32 28 if ( ! defined( 'ABSPATH' ) ) {
@@ -73,9 +69,9 @@
73 69 * URL for fetch API
74 70 *
75 71 * @var string
76 72 */
77 - public $BASE_API = 'https://shopbuilderwp.com/demo/wp-json/rtsb/v1/layouts/';
73 + public $BASE_API = 'https://shopbuilderwp.com/wp-json/rtsb/v1/layouts/';
78 74
79 75 use SingletonTrait;
80 76
81 77 /**
@@ -81,19 +77,14 @@
81 77 /**
82 78 * Class Constructor
83 79 */
84 80 private function __construct() {
81 + $this->define_constants();
85 82 $this->post_type = 'product';
86 83 $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' ) ) ) );
84 + add_action( 'init', [ $this, 'language' ] );
87 85 add_action( 'plugins_loaded', [ $this, 'init' ], 15 );
88 - add_action( 'upgrader_process_complete', [ $this, 'maybe_run_after_update' ], 10, 2 );
89 86
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 87 // Register Plugin Active Hook.
97 88 register_activation_hook( RTSB_FILE, [ Installation::class, 'activate' ] );
98 89
99 90 // Register Plugin Deactivate Hook.
@@ -101,8 +92,9 @@
101 92
102 93 if ( Dependencies::instance()->check() ) {
103 94 SupportController::instance();
104 95 }
96 +
105 97 // HPOS Declare compatibility.
106 98 add_action(
107 99 'before_woocommerce_init',
108 100 function () {
@@ -113,31 +105,34 @@
113 105 );
114 106 }
115 107
116 108 /**
117 - * Assets url generate with given assets file
109 + * Constants
118 110 *
119 - * @param string $file File.
120 - *
121 - * @return string
111 + * @return void
122 112 */
123 - public function get_assets_uri( $file ) {
124 - $file = ltrim( $file, '/' );
113 + private function define_constants() {
114 + if ( ! defined( 'RTSB_ABSPATH' ) ) {
115 + define( 'RTSB_ABSPATH', dirname( RTSB_FILE ) . '/' );
116 + }
125 117
126 - return trailingslashit( RTSB_URL . '/assets' ) . $file;
118 + if ( ! defined( 'RTSB_URL' ) ) {
119 + define( 'RTSB_URL', plugins_url( '', RTSB_FILE ) );
120 + }
127 121 }
128 122
123 +
129 124 /**
130 - * Assets path.
125 + * Assets url generate with given assets file
131 126 *
132 127 * @param string $file File.
133 128 *
134 129 * @return string
135 130 */
136 - public function get_assets_path( $file ) {
131 + public function get_assets_uri( $file ) {
137 132 $file = ltrim( $file, '/' );
138 133
139 - return trailingslashit( RTSB_PATH . 'assets' ) . $file;
134 + return trailingslashit( RTSB_URL . '/assets' ) . $file;
140 135 }
141 136
142 137 /**
143 138 * Get the template path.
@@ -157,107 +152,58 @@
157 152 return untrailingslashit( plugin_dir_path( RTSB_FILE ) );
158 153 }
159 154
160 155 /**
156 + * Load Text Domain
157 + */
158 + public function language() {
159 + load_plugin_textdomain( 'shopbuilder', false, dirname( plugin_basename( RTSB_FILE ) ) . '/languages/' );
160 + }
161 +
162 + /**
161 163 * Init
162 164 *
163 165 * @return void
164 166 */
165 167 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 168 if ( ! Dependencies::instance()->check() ) {
174 169 return;
175 170 }
176 171
177 - try {
178 - do_action( 'rtsb/before/loaded' );
179 - CacheController::instance();
180 - // Include File.
181 - AssetsController::instance();
182 - ModuleManager::instance();
172 + do_action( 'rtsb/before/loaded' );
173 + CacheController::instance();
174 + // Include File.
175 + AssetsController::instance();
176 + ModuleManager::instance();
183 177
184 - // Ajax.
185 - AddToCart::instance();
186 - AjaxLogin::instance();
187 - UpdateCheckoutSection::instance();
178 + // Ajax.
179 + AddToCart::instance();
180 + AjaxLogin::instance();
181 + UpdateCheckoutSection::instance();
188 182
189 - // Checkout.
190 - OrderReviewQuantity::instance();
183 + BuilderController::instance();
184 + FilterHooks::init_hooks();
185 + ActionHooks::init_hooks();
191 186
192 - BuilderController::instance();
193 - FilterHooks::init_hooks();
194 - ActionHooks::init_hooks();
187 + Installation::init();
188 + Migration::init();
195 189
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
190 + if ( is_admin() ) {
191 + AdminInit::instance();
209 192 }
210 - }
211 193
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 - }
194 + Shortcodes::instance();
224 195
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 - }
196 + do_action( 'rtsb/after/loaded' );
251 197 }
252 198
253 199 /**
254 - * Checks if Pro version installed.
200 + * Checks if Pro version installed
255 201 *
256 202 * @return boolean
257 203 */
258 204 public function has_pro() {
259 - return function_exists( 'rtsbpro' ); // Fns::is_pro_authorized() will add in the future for checking pro Version Compatibility.
205 + return function_exists( 'rtsbpro' );
260 206 }
261 207
262 208 /**
263 209 * PRO Version URL.