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 +181 -147 2.1.23.3.0 View file →
@@ -4,14 +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;
16 +use RadiusTheme\SB\Controllers\Shortcodes;
12 17 use RadiusTheme\SB\Controllers\Dependencies;
18 +use RadiusTheme\SB\Controllers\CacheController;
13 19 use RadiusTheme\SB\Controllers\Admin\AdminInit;
20 +use RadiusTheme\SB\Controllers\Admin\PluginRow;
14 21 use RadiusTheme\SB\Controllers\AssetsController;
15 22 use RadiusTheme\SB\Controllers\BuilderController;
16 23 use RadiusTheme\SB\Controllers\SupportController;
17 24 use RadiusTheme\SB\Controllers\Hooks\FilterHooks;
@@ -17,9 +24,9 @@
17 24 use RadiusTheme\SB\Controllers\Hooks\FilterHooks;
18 25 use RadiusTheme\SB\Controllers\Hooks\ActionHooks;
19 26 use RadiusTheme\SB\Controllers\Frontend\Ajax\AddToCart;
20 27 use RadiusTheme\SB\Controllers\Frontend\Ajax\AjaxLogin;
21 -use RadiusTheme\SB\Helpers\Migration;
28 +use RadiusTheme\SB\Controllers\Frontend\Ajax\UpdateCheckoutSection;
22 29
23 30 // Do not allow directly accessing this file.
24 31 if ( ! defined( 'ABSPATH' ) ) {
25 32 exit( 'This script cannot be accessed directly.' );
@@ -24,152 +31,163 @@
24 31 if ( ! defined( 'ABSPATH' ) ) {
25 32 exit( 'This script cannot be accessed directly.' );
26 33 }
27 34
28 -require_once RTSB_PATH . 'vendor/autoload.php';
35 +/**
36 + * Main initialization class.
37 + */
38 +final class ShopBuilder {
29 39
30 -if ( ! class_exists( ShopBuilder::class ) ) {
31 40 /**
32 - * Main initialization class.
41 + * Nonce id
42 + *
43 + * @var string
33 44 */
34 - final class ShopBuilder {
45 + public $nonceId = '__rtsb_wpnonce';
35 46
36 - /**
37 - * Nonce id
38 - *
39 - * @var string
40 - */
41 - public $nonceId = '__rtsb_wpnonce';
47 + /**
48 + * Nonce Text
49 + *
50 + * @var string
51 + */
52 + public $nonceText = 'rtsb_nonce';
42 53
43 - /**
44 - * Nonce Text
45 - *
46 - * @var string
47 - */
48 - public $nonceText = 'rtsb_nonce';
54 + /**
55 + * Post Type.
56 + *
57 + * @var string
58 + */
59 + public $post_type;
49 60
50 - /**
51 - * Post Type.
52 - *
53 - * @var string
54 - */
55 - public $post_type;
61 + /**
62 + * Post Type.
63 + *
64 + * @var string
65 + */
66 + public $current_theme;
67 + /**
68 + * Singleton
69 + */
56 70
57 - /**
58 - * Post Type.
59 - *
60 - * @var string
61 - */
62 - public $current_theme;
63 - /**
64 - * Singleton
65 - */
71 + /**
72 + * URL for fetch API
73 + *
74 + * @var string
75 + */
76 + public $BASE_API = 'https://shopbuilderwp.com/demo/wp-json/rtsb/v1/layouts/';
66 77
67 - /**
68 - * URL for fetch API
69 - * @var string
70 - */
71 - public $BASE_API = 'https://shopbuilderwp.com/wp-json/rtsb/v1/layouts/';
78 + use SingletonTrait;
72 79
73 - 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 );
74 89
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 );
90 + // Register Plugin Active Hook.
91 + register_activation_hook( RTSB_FILE, [ Installation::class, 'activate' ] );
84 92
85 - // Register Plugin Active Hook.
86 - register_activation_hook( RTSB_FILE, [ Installation::class, 'activate' ] );
93 + // Register Plugin Deactivate Hook.
94 + register_deactivation_hook( RTSB_FILE, [ Installation::class, 'deactivation' ] );
87 95
88 - // Register Plugin Deactivate Hook.
89 - register_deactivation_hook( RTSB_FILE, [ Installation::class, 'deactivation' ] );
90 -
96 + if ( Dependencies::instance()->check() ) {
91 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 + }
92 109
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 - );
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 + }
102 119
120 + if ( ! defined( 'RTSB_URL' ) ) {
121 + define( 'RTSB_URL', plugins_url( '', RTSB_FILE ) );
103 122 }
123 + }
104 124
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 ) . '/' );
113 - }
114 125
115 - if ( ! defined( 'RTSB_URL' ) ) {
116 - define( 'RTSB_URL', plugins_url( '', RTSB_FILE ) );
117 - }
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, '/' );
118 135
119 - }
136 + return trailingslashit( RTSB_URL . '/assets' ) . $file;
137 + }
120 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, '/' );
121 148
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, '/' );
149 + return trailingslashit( RTSB_PATH . 'assets' ) . $file;
150 + }
131 151
132 - return trailingslashit( RTSB_URL . '/assets' ) . $file;
133 - }
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 + }
134 160
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 - }
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 + }
143 169
144 - /**
145 - * Get the plugin path.
146 - *
147 - * @return string
148 - */
149 - public function plugin_path() {
150 - 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();
151 181 }
152 182
153 - /**
154 - * Load Text Domain
155 - */
156 - public function language() {
157 - load_plugin_textdomain( 'shopbuilder', false, dirname( plugin_basename( RTSB_FILE ) ) . '/languages/' );
183 + if ( ! Dependencies::instance()->check() ) {
184 + return;
158 185 }
159 186
160 - /**
161 - * Init
162 - *
163 - * @return void
164 - */
165 - public function init() {
166 - if ( ! Dependencies::instance()->check() ) {
167 - return;
168 - }
169 -
187 + try {
170 188 do_action( 'rtsb/before/loaded' );
171 -
189 + CacheController::instance();
172 190 // Include File.
173 191 AssetsController::instance();
174 192 ModuleManager::instance();
175 193
@@ -175,8 +193,9 @@
175 193
176 194 // Ajax.
177 195 AddToCart::instance();
178 196 AjaxLogin::instance();
197 + UpdateCheckoutSection::instance();
179 198
180 199 BuilderController::instance();
181 200 FilterHooks::init_hooks();
182 201 ActionHooks::init_hooks();
@@ -182,54 +201,69 @@
182 201 ActionHooks::init_hooks();
183 202
184 203 Installation::init();
185 204 Migration::init();
205 + AIinit::instance();
186 206
187 207 if ( is_admin() ) {
188 208 AdminInit::instance();
189 209 }
190 210
211 + Shortcodes::instance();
212 +
191 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
192 216 }
193 -
194 - /**
195 - * Checks if Pro version installed
196 - *
197 - * @return boolean
198 - */
199 - public function has_pro() {
200 - return function_exists( 'rtsbpro' );
201 - }
202 -
203 - /**
204 - * PRO Version URL.
205 - *
206 - * @return string
207 - */
208 - public function pro_version_link() {
209 - return 'https://shopbuilderwp.com/';
210 - }
211 217 }
212 218
213 219 /**
214 - * @return ShopBuilder
220 + * Maybe Run After Update
221 + *
222 + * @param object $upgrader_object Upgrader Object.
223 + * @param array $options Options.
224 + *
225 + * @return void
215 226 */
216 - function rtsb() {
217 - 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 + }
218 231
219 - if (null !== $cached_instance) {
220 - 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;
221 241 }
222 242
223 - $cached_instance = wp_cache_get('shopbuilder_instance', 'shopbuilder_cache');
224 -
225 - if (false === $cached_instance) {
226 - $cached_instance = ShopBuilder::instance();
227 - 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();
228 249 }
250 + }
229 251
230 - 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.
231 259 }
232 260
233 -
234 - rtsb();
261 + /**
262 + * PRO Version URL.
263 + *
264 + * @return string
265 + */
266 + public function pro_version_link() {
267 + return 'https://shopbuilderwp.com/';
268 + }
235 269 }