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