PluginProbe
ShopBuilder – WooCommerce Builder For Elementor / 3.4.1
ShopBuilder – WooCommerce Builder For Elementor v3.4.1
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
shopbuilder / app / ShopBuilder.php

ShopBuilder.php in ShopBuilder – WooCommerce Builder For Elementor 3.4.1, at app/ShopBuilder.php

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