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