PluginProbe
ShopBuilder – WooCommerce Builder For Elementor / 1.1.4
ShopBuilder – WooCommerce Builder For Elementor v1.1.4
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/Controllers/Dependencies.php +283 -181 2.2.21.1.4 View file →
@@ -1,181 +1,283 @@
1 -<?php
2 -
3 -namespace RadiusTheme\SB\Controllers;
4 -
5 -use RadiusTheme\SB\Helpers\Fns;
6 -use RadiusTheme\SB\Traits\SingletonTrait;
7 -
8 -// Do not allow directly accessing this file.
9 -if ( ! defined( 'ABSPATH' ) ) {
10 - exit( 'This script cannot be accessed directly.' );
11 -}
12 -
13 -
14 -class Dependencies {
15 -
16 - const MINIMUM_PHP_VERSION = '7.4';
17 -
18 - const PLUGIN_NAME = 'ShopBuilder - Woocommerce Builder for Elementor';
19 -
20 - use SingletonTrait;
21 -
22 - private $missing = [];
23 - /**
24 - * @var bool
25 - */
26 - private $allOk = true;
27 -
28 - /**
29 - * @return bool
30 - */
31 - public function check() {
32 -
33 - if ( version_compare( PHP_VERSION, self::MINIMUM_PHP_VERSION, '<' ) ) {
34 - add_action( 'admin_notices', [ $this, 'minimum_php_version' ] );
35 - $this->allOk = false;
36 - }
37 -
38 - if ( ! function_exists( 'is_plugin_active' ) ) {
39 - include_once ABSPATH . 'wp-admin/includes/plugin.php';
40 - }
41 - if ( ! function_exists( 'wp_create_nonce' ) ) {
42 - require_once ABSPATH . 'wp-includes/pluggable.php';
43 - }
44 - // Check WooCommerce
45 - $woocommerce = 'woocommerce/woocommerce.php';
46 -
47 - if ( ! is_plugin_active( $woocommerce ) ) {
48 - if ( $this->is_plugins_installed( $woocommerce ) ) {
49 - $activation_url = wp_nonce_url( 'plugins.php?action=activate&amp;plugin=' . $woocommerce . '&amp;plugin_status=all&amp;paged=1&amp;s', 'activate-plugin_' . $woocommerce );
50 - $message = sprintf(
51 - '<strong>%s</strong> %s <strong>%s</strong> %s',
52 - esc_html( self::PLUGIN_NAME ),
53 - esc_html__( 'requires', 'shopbuilder' ),
54 - esc_html__( 'WooCommerce', 'shopbuilder' ),
55 - esc_html__( 'plugin to be active. Please activate WooCommerce to continue.', 'shopbuilder' )
56 - );
57 - $button_text = esc_html__( 'Activate WooCommerce', 'shopbuilder' );
58 -
59 - } else {
60 - $activation_url = wp_nonce_url( self_admin_url( 'update.php?action=install-plugin&plugin=woocommerce' ), 'install-plugin_woocommerce' );
61 - $message = sprintf(
62 - '<strong>%s</strong> %s <strong>%s</strong> %s',
63 - esc_html( self::PLUGIN_NAME ),
64 - esc_html__( 'requires', 'shopbuilder' ),
65 - esc_html__( 'WooCommerce', 'shopbuilder' ),
66 - esc_html__( 'plugin to be installed and activated. Please install WooCommerce to continue.', 'shopbuilder' )
67 - );
68 - $button_text = esc_html__( 'Install WooCommerce', 'shopbuilder' );
69 - }
70 - $this->missing['woocommerce'] = [
71 - 'name' => 'WooCommerce',
72 - 'slug' => 'woocommerce',
73 - 'file_name' => $woocommerce,
74 - 'url' => $activation_url,
75 - 'message' => $message,
76 - 'button_txt' => $button_text,
77 - ];
78 - }
79 -
80 - $elementor = 'elementor/elementor.php';
81 -
82 - if ( ! is_plugin_active( $elementor ) ) {
83 -
84 - if ( $this->is_plugins_installed( $elementor ) ) {
85 - $activation_url = wp_nonce_url( 'plugins.php?action=activate&amp;plugin=' . $elementor . '&amp;plugin_status=all&amp;paged=1&amp;s', 'activate-plugin_' . $elementor );
86 - $message = sprintf(
87 - '<strong>%s</strong> %s <strong>%s</strong> %s',
88 - esc_html( self::PLUGIN_NAME ),
89 - esc_html__( 'requires', 'shopbuilder' ),
90 - esc_html__( 'Elementor', 'shopbuilder' ),
91 - esc_html__( 'plugin to be active. Please activate Elementor to continue.', 'shopbuilder' )
92 - );
93 - $button_text = esc_html__( 'Activate Elementor', 'shopbuilder' );
94 -
95 - } else {
96 - $activation_url = wp_nonce_url(
97 - self_admin_url( 'update.php?action=install-plugin&plugin=elementor' ),
98 - 'install-plugin_elementor'
99 - );
100 - $message = sprintf(
101 - '<strong>%s</strong> %s <strong>%s</strong> %s',
102 - esc_html( self::PLUGIN_NAME ),
103 - esc_html__( 'requires', 'shopbuilder' ),
104 - esc_html__( 'Elementor', 'shopbuilder' ),
105 - esc_html__( 'plugin to be installed and activated. Please install Elementor to continue.', 'shopbuilder' )
106 - );
107 - $button_text = esc_html__( 'Install Elementor', 'shopbuilder' );
108 - }
109 -
110 - $this->missing['elementor'] = [
111 - 'name' => 'Elementor',
112 - 'slug' => 'elementor',
113 - 'file_name' => $elementor,
114 - 'url' => $activation_url,
115 - 'message' => $message,
116 - 'button_txt' => $button_text,
117 - ];
118 - }
119 - if ( ! empty( $this->missing ) ) {
120 - add_action( 'admin_notices', [ $this, '_missing_plugins_warning' ] );
121 -
122 - $this->allOk = false;
123 - }
124 -
125 - return $this->allOk;
126 - }
127 -
128 - /**
129 - * Admin Notice For Required PHP Version
130 - */
131 - public function minimum_php_version() {
132 - // Protect plugin Activation with error.
133 - if ( isset( $_GET['activate'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended
134 - unset( $_GET['activate'] );
135 - }
136 - $message = sprintf(
137 - /* translators: 1: Plugin name 2: PHP 3: Required PHP version */
138 - esc_html__( '"%1$s" requires "%2$s" version %3$s or greater.', 'shopbuilder' ),
139 - '<strong>' . esc_html__( 'ShopBuilder', 'shopbuilder' ) . '</strong>',
140 - '<strong>' . esc_html__( 'PHP', 'shopbuilder' ) . '</strong>',
141 - self::MINIMUM_PHP_VERSION
142 - );
143 - printf( '<div class="notice notice-warning is-dismissible"><p>%1$s</p></div>', wp_kses_post( $message ) );
144 - }
145 -
146 - /**
147 - * Adds admin notice.
148 - */
149 - public function _missing_plugins_warning() {
150 - $missingPlugins = '';
151 - $counter = 0;
152 - foreach ( $this->missing as $plugin ) {
153 - $counter++;
154 - if ( $counter == count( $this->missing ) ) {
155 - $sep = '';
156 - } elseif ( $counter == count( $this->missing ) - 1 ) {
157 - $sep = ' ' . esc_html__( 'and', 'shopbuilder' ) . ' ';
158 - } else {
159 - $sep = ', ';
160 - }
161 - if ( current_user_can( 'activate_plugins' ) ) {
162 - $button = '<p><a href="' . esc_url( $plugin['url'] ) . '" class="button-primary">' . esc_html( $plugin['button_txt'] ) . '</a></p>';
163 - // $plugin['message'] Already used escaping function
164 - printf( '<div class="error"><p>%1$s</p>%2$s</div>', $plugin['message'], $button ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
165 - } else {
166 - $missingPlugins .= '<strong>' . esc_html( $plugin['name'] ) . '</strong>' . $sep;
167 - }
168 - }
169 - }
170 -
171 - /**
172 - * @param $plugin_file_path
173 - *
174 - * @return bool
175 - */
176 - public function is_plugins_installed( $plugin_file_path = null ) {
177 - $installed_plugins_list = get_plugins();
178 -
179 - return isset( $installed_plugins_list[ $plugin_file_path ] );
180 - }
181 -}
1 +<?php
2 +
3 +namespace RadiusTheme\SB\Controllers;
4 +
5 +use RadiusTheme\SB\Helpers\Fns;
6 +use RadiusTheme\SB\Traits\SingletonTrait;
7 +
8 +// Do not allow directly accessing this file.
9 +if ( ! defined( 'ABSPATH' ) ) {
10 + exit( 'This script cannot be accessed directly.' );
11 +}
12 +
13 +
14 +class Dependencies {
15 +
16 + const MINIMUM_PHP_VERSION = '7.4';
17 +
18 + const PLUGIN_NAME = 'ShopBuilder - Woocommerce Builder for Elementor';
19 +
20 + use SingletonTrait;
21 +
22 + private $missing = [];
23 + /**
24 + * @var bool
25 + */
26 + private $allOk = true;
27 +
28 + /**
29 + * @return bool
30 + */
31 + public function check() {
32 +
33 + if ( version_compare( PHP_VERSION, self::MINIMUM_PHP_VERSION, '<' ) ) {
34 + add_action( 'admin_notices', [ $this, 'minimum_php_version' ] );
35 + $this->allOk = false;
36 + }
37 +
38 + if ( ! function_exists( 'is_plugin_active' ) ) {
39 + include_once ABSPATH . 'wp-admin/includes/plugin.php';
40 + }
41 + if ( ! function_exists( 'wp_create_nonce' ) ) {
42 + require_once ABSPATH . 'wp-includes/pluggable.php';
43 + }
44 + // Check WooCommerce
45 + $woocommerce = 'woocommerce/woocommerce.php';
46 +
47 + if ( ! is_plugin_active( $woocommerce ) ) {
48 + if ( $this->is_plugins_installed( $woocommerce ) ) {
49 + $activation_url = wp_nonce_url( 'plugins.php?action=activate&amp;plugin=' . $woocommerce . '&amp;plugin_status=all&amp;paged=1&amp;s', 'activate-plugin_' . $woocommerce );
50 + $message = sprintf(
51 + '<strong>%s</strong> %s <strong>%s</strong> %s',
52 + esc_html( self::PLUGIN_NAME ),
53 + esc_html__( 'requires', 'shopbuilder' ),
54 + esc_html__( 'WooCommerce', 'shopbuilder' ),
55 + esc_html__( 'plugin to be active. Please activate WooCommerce to continue.', 'shopbuilder' )
56 + );
57 + $button_text = esc_html__( 'Activate WooCommerce', 'shopbuilder' );
58 +
59 + } else {
60 + $activation_url = wp_nonce_url( self_admin_url( 'update.php?action=install-plugin&plugin=woocommerce' ), 'install-plugin_woocommerce' );
61 + $message = sprintf(
62 + '<strong>%s</strong> %s <strong>%s</strong> %s',
63 + esc_html( self::PLUGIN_NAME ),
64 + esc_html__( 'requires', 'shopbuilder' ),
65 + esc_html__( 'WooCommerce', 'shopbuilder' ),
66 + esc_html__( 'plugin to be installed and activated. Please install WooCommerce to continue.', 'shopbuilder' )
67 + );
68 + $button_text = esc_html__( 'Install WooCommerce', 'shopbuilder' );
69 + }
70 + $this->missing['woocommerce'] = [
71 + 'name' => 'WooCommerce',
72 + 'slug' => 'woocommerce',
73 + 'file_name' => $woocommerce,
74 + 'url' => $activation_url,
75 + 'message' => $message,
76 + 'button_txt' => $button_text,
77 + ];
78 + }
79 +
80 + $elementor = 'elementor/elementor.php';
81 +
82 + if ( ! is_plugin_active( $elementor ) ) {
83 +
84 + if ( $this->is_plugins_installed( $elementor ) ) {
85 + $activation_url = wp_nonce_url( 'plugins.php?action=activate&amp;plugin=' . $elementor . '&amp;plugin_status=all&amp;paged=1&amp;s', 'activate-plugin_' . $elementor );
86 + $message = sprintf(
87 + '<strong>%s</strong> %s <strong>%s</strong> %s',
88 + esc_html( self::PLUGIN_NAME ),
89 + esc_html__( 'requires', 'shopbuilder' ),
90 + esc_html__( 'Elementor', 'shopbuilder' ),
91 + esc_html__( 'plugin to be active. Please activate Elementor to continue.', 'shopbuilder' )
92 + );
93 + $button_text = esc_html__( 'Activate Elementor', 'shopbuilder' );
94 +
95 + } else {
96 + $activation_url = wp_nonce_url( self_admin_url( 'update.php?action=install-plugin&plugin=elementor' ),
97 + 'install-plugin_elementor' );
98 + $message = sprintf(
99 + '<strong>%s</strong> %s <strong>%s</strong> %s',
100 + esc_html( self::PLUGIN_NAME ),
101 + esc_html__( 'requires', 'shopbuilder' ),
102 + esc_html__( 'Elementor', 'shopbuilder' ),
103 + esc_html__( 'plugin to be installed and activated. Please install Elementor to continue.', 'shopbuilder' )
104 + );
105 + $button_text = esc_html__( 'Install Elementor', 'shopbuilder' );
106 + }
107 +
108 + $this->missing['elementor'] = [
109 + 'name' => 'Elementor',
110 + 'slug' => 'elementor',
111 + 'file_name' => $elementor,
112 + 'url' => $activation_url,
113 + 'message' => $message,
114 + 'button_txt' => $button_text,
115 + ];
116 + }
117 + if ( ! empty( $this->missing ) ) {
118 + add_action( 'admin_notices', [ $this, '_missing_plugins_warning' ] );
119 +
120 + $this->allOk = false;
121 + }
122 +
123 + return $this->allOk;
124 + }
125 +
126 + /**
127 + * Admin Notice For Required PHP Version
128 + */
129 + public function minimum_php_version() {
130 + if ( isset( $_GET['activate'] ) ) {
131 + unset( $_GET['activate'] );
132 + }
133 + $message = sprintf(
134 + /* translators: 1: Plugin name 2: PHP 3: Required PHP version */
135 + esc_html__( '"%1$s" requires "%2$s" version %3$s or greater.', 'shopbuilder' ),
136 + '<strong>' . esc_html__( 'ShopBuilder', 'shopbuilder' ) . '</strong>',
137 + '<strong>' . esc_html__( 'PHP', 'shopbuilder' ) . '</strong>',
138 + self::MINIMUM_PHP_VERSION
139 + );
140 + printf( '<div class="notice notice-warning is-dismissible"><p>%1$s</p></div>', $message );
141 + }
142 +
143 + /**
144 + * Adds admin notice.
145 + */
146 + public function _missing_plugins_warning() {
147 + $missingPlugins = '';
148 + $counter = 0;
149 + foreach ( $this->missing as $plugin ) {
150 + $counter ++;
151 + if ( $counter == sizeof( $this->missing ) ) {
152 + $sep = '';
153 + } elseif ( $counter == sizeof( $this->missing ) - 1 ) {
154 + $sep = ' ' . esc_html__( 'and', 'shopbuilder' ) . ' ';
155 + } else {
156 + $sep = ', ';
157 + }
158 + if ( current_user_can( 'activate_plugins' ) ) {
159 + $button = '<p><a href="' . esc_url( $plugin['url'] ) . '" class="button-primary plugin-install-by-ajax">' . esc_html( $plugin['button_txt'] ) . '</a></p>';
160 + // $plugin['message'] Already used escaping function
161 + printf( '<div class="error"><p>%1$s</p>%2$s</div>', $plugin['message'], $button ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
162 + } else {
163 + $missingPlugins .= '<strong>' . esc_html( $plugin['name'] ) . '</strong>' . $sep;
164 + }
165 + }
166 + // TODO:: AJax plugin installation will do later.
167 + // self::notice();
168 + }
169 +
170 + /**
171 + * @param $plugin_file_path
172 + *
173 + * @return bool
174 + */
175 + public function is_plugins_installed( $plugin_file_path = null ) {
176 + $installed_plugins_list = get_plugins();
177 +
178 + return isset( $installed_plugins_list[ $plugin_file_path ] );
179 + }
180 +
181 +
182 +
183 + /**
184 + * Undocumented function.
185 + *
186 + * @return void
187 + */
188 + public static function notice() {
189 + add_action(
190 + 'admin_enqueue_scripts',
191 + function () {
192 + wp_enqueue_script('jquery');
193 + }
194 + );
195 +
196 + add_action(
197 + 'admin_footer',
198 + function () {
199 + ?>
200 + <script type="text/javascript">
201 + /*
202 + (function ($) {
203 + $(function () {
204 + setTimeout(function () {
205 + $('.plugin-install-by-ajax')
206 + .on('click', function (e) {
207 + e.preventDefault();
208 + let plugin_slug = e.target.url;
209 + const data = {
210 + action: 'rtsb_plugin_installation',
211 + plugin_slug: plugin_slug ? plugin_slug : null,
212 + __rtsb_wpnonce: rtsbParams.__rtsb_wpnonce,
213 + };
214 + wp.updates.installPlugin({
215 + slug: 'hello-dolly',
216 + success: function() {
217 + console.log('Plugin installed successfully!');
218 + },
219 + error: function(error) {
220 + console.log('An error occurred: ' + error.statusText);
221 + },
222 + installing: function() {
223 + console.log('Installing plugin...');
224 + }
225 + });
226 +
227 + $.ajax({
228 + url: '<?php // echo admin_url( 'admin-ajax.php' ); ?>',
229 + data,
230 + type: 'POST',
231 + beforeSend() {
232 + modal.addModal().addLoading();
233 + },
234 + success(response) {
235 +
236 + wp.updates.installPlugin({
237 + slug: 'hello-dolly',
238 + success: function() {
239 + console.log('Plugin installed successfully!');
240 + },
241 + error: function(error) {
242 + console.log('An error occurred: ' + error.statusText);
243 + },
244 + installing: function() {
245 + console.log('Installing plugin...');
246 + }
247 + });
248 +
249 + },
250 + error(e) {},
251 + });
252 +
253 + });
254 + }, 1000);
255 + });
256 + })(jQuery);
257 + */
258 + </script>
259 + <?php
260 + }
261 + );
262 + /*
263 + add_action(
264 + 'wp_ajax_rtsb_plugin_installation',
265 + function () {
266 + $return = [
267 + 'success' => false,
268 + ];
269 + if ( ! Fns::verify_nonce() ) {
270 + wp_send_json_error($return);
271 + }
272 + error_log( print_r( $_REQUEST , true ) . "\n\n" , 3, __DIR__ . '/log.txt' );
273 + wp_send_json_success( $return );
274 + wp_die();
275 + }
276 + );
277 + */
278 + }
279 +
280 +
281 +
282 +
283 +}