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