PluginProbe
ShopBuilder – WooCommerce Builder For Elementor / 2.6.3
ShopBuilder – WooCommerce Builder For Elementor v2.6.3
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/Admin/Ajax/CreateTemplate.php +44 -25 2.1.42.6.3 View file →
@@ -1,12 +1,12 @@
1 1 <?php
2 2
3 3 namespace RadiusTheme\SB\Controllers\Admin\Ajax;
4 4
5 -use Elementor\Core\Files\Uploads_Manager;
6 5 use Elementor\Plugin;
7 6 use Elementor\TemplateLibrary\Source_Base;
8 7 use RadiusTheme\SB\Helpers\BuilderFns;
8 +use RadiusTheme\SB\Helpers\Cache;
9 9 use RadiusTheme\SB\Helpers\Fns;
10 10 use RadiusTheme\SB\Models\TemplateSettings;
11 11 use RadiusTheme\SB\Traits\SingletonTrait;
12 12
@@ -67,20 +67,20 @@
67 67 *
68 68 * @return void
69 69 */
70 70 public function response() {
71 - $page_type = isset( $_POST['page_type'] ) ? sanitize_text_field( wp_unslash( $_POST['page_type'] ) ) : null; //rtsb_tb_template_type - it represent to template type
71 + Cache::clear_transient_cache();
72 + $page_type = isset( $_POST['page_type'] ) ? sanitize_text_field( wp_unslash( $_POST['page_type'] ) ) : null; // rtsb_tb_template_type - it represent to template type
72 73 $page_id = isset( $_POST['page_id'] ) ? absint( wp_unslash( $_POST['page_id'] ) ) : null;
73 74 $page_name = isset( $_POST['page_name'] ) ? sanitize_text_field( wp_unslash( $_POST['page_name'] ) ) : null;
74 75 $hasPro = isset( $_POST['hasPro'] ) ? sanitize_text_field( wp_unslash( $_POST['hasPro'] ) ) : null;
75 76 $edit_with = isset( $_POST['template_edit_with'] ) ? sanitize_text_field( wp_unslash( $_POST['template_edit_with'] ) ) : null;
76 77 $default_template = isset( $_POST['default_template'] ) ? sanitize_text_field( wp_unslash( $_POST['default_template'] ) ) : null;
77 - $import_layout = isset( $_POST['import_default_layout'] ) ? sanitize_text_field( $_POST['import_default_layout'] ) : null;
78 + $import_layout = isset( $_POST['import_default_layout'] ) ? sanitize_text_field( $_POST['import_default_layout'] ) : null; //phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash
78 79 $product_id = isset( $_POST['preview_product_id'] ) ? absint( $_POST['preview_product_id'] ) : null;
79 -
80 80 $url = '#';
81 81
82 - if ( ! Fns::verify_nonce() || ! $page_type ) {
82 + if ( ! wp_verify_nonce( Fns::get_nonce(), rtsb()->nonceText ) || ! $page_type ) {
83 83 $return = [
84 84 'success' => false,
85 85 'post_id' => $page_id,
86 86 ];
@@ -86,29 +86,41 @@
86 86 ];
87 87 wp_send_json( $return );
88 88
89 89 }
90 + if ( ! current_user_can( 'manage_options' ) ) {
91 + $return = [
92 + 'success' => false,
93 + 'post_id' => $page_id,
94 + ];
95 + wp_send_json( $return );
96 + }
90 97
91 - add_filter( 'pre_option_elementor_unfiltered_files_upload', function () {
92 - return '1';
93 - }, 99 );
98 + add_filter(
99 + 'pre_option_elementor_unfiltered_files_upload',
100 + function () {
101 + return '1';
102 + },
103 + 99
104 + );
94 105
95 106 Plugin::$instance->files_manager->clear_cache();
96 107 add_filter( 'rtsb_import_status', '__return_true' );
97 108
98 - $status = $_REQUEST['status'] ?? '';
109 + $status = sanitize_text_field( wp_unslash( $_REQUEST['status'] ?? '' ) );
99 110 $post_args = [ 'timeout' => 120 ];
100 111 $post_args['body'] = [
101 112 'status' => $status,
102 113 'layout_id' => $import_layout,
103 - 'has_pro' => $hasPro
114 + 'has_pro' => $hasPro,
104 115 ];
105 116 $layoutRequest = wp_remote_post( rtsb()->BASE_API, $post_args );
106 117
107 - if ( is_wp_error( $layoutRequest ) ) {
108 - wp_send_json_error( [ 'messages' => $layoutRequest->get_error_messages() ] );
118 + $layoutJson = [];
119 + if ( ! is_wp_error( $layoutRequest ) && ! empty( $layoutRequest['body'] ) ) {
120 + $layoutJson = json_decode( $layoutRequest['body'], true );
109 121 }
110 - $layoutJson = json_decode( $layoutRequest['body'], true );
122 +
111 123 $option_name = BuilderFns::option_name( $page_type );
112 124
113 125 $post_data = [
114 126 'ID' => $page_id,
@@ -139,25 +151,28 @@
139 151 }
140 152
141 153 $edit_by = '';
142 154 if ( $page_id ) {
155 + $edit_by = Fns::page_edit_with( $page_id );
156 + $template_for = sanitize_text_field( wp_unslash( $_POST['product_page_for'] ?? '' ) );
157 + $selected_category = array_unique( isset( $_POST['selected_category'] ) && is_array( $_POST['selected_category'] ) ? array_map( 'sanitize_text_field', $_POST['selected_category'] ) : [] ); //phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash
143 158 if ( 'product' == $page_type ) {
144 159 update_post_meta( $page_id, BuilderFns::$product_template_meta, $product_id );
160 + update_post_meta( $page_id, '_is_product_page_template_for', $template_for );
145 161 }
146 - $edit_by = Fns::page_edit_with( $page_id );
147 - $category_archive = array_unique( isset( $_POST['category_archive'] ) && is_array( $_POST['category_archive'] ) ? array_map( 'sanitize_text_field', $_POST['category_archive'] ) : [] );
148 - $the_products = array_unique( isset( $_POST['the_products'] ) && is_array( $_POST['the_products'] ) ? array_map( 'absint', $_POST['the_products'] ) : [] );
149 - if ( ! count( $the_products ) && ! count( $category_archive ) ) {
162 +
163 + $has_default = TemplateSettings::instance()->get_option( $option_name );
164 + if ( ( 'product' === $page_type && 'all_products' !== $template_for ) || ( 'archive' === $page_type && count( $selected_category ) ) ) {
165 + if ( ! $has_default ) {
166 + TemplateSettings::instance()->set_option( $option_name, '' );
167 + }
168 + } else {
150 169 if ( 'default_template' === $default_template ) {
151 - // update_option( $option_name, $page_id );
152 170 TemplateSettings::instance()->set_option( $option_name, $page_id );
153 171 } else {
154 - // $has_default = get_option( $option_name );
155 - $has_default = TemplateSettings::instance()->get_option( $option_name );
156 - if ( ! $has_default ) {
157 - // update_option( $option_name, '' );
172 + //if ( ! $has_default ) {
158 173 TemplateSettings::instance()->set_option( $option_name, '' );
159 - }
174 + // }
160 175 }
161 176 }
162 177
163 178 $action = 'edit';
@@ -174,9 +189,9 @@
174 189
175 190 if ( ! empty( $layoutJson['data'] ) ) {
176 191 $data = json_decode( $layoutJson['data'], true );
177 192 $content = $this->process_export_import_content( $data, 'on_import' );
178 - $content = json_encode( $content );
193 + $content = wp_json_encode( $content );
179 194 update_post_meta( $page_id, '_elementor_data', $content );
180 195 update_post_meta( $page_id, '_rtsb_import_id', $import_layout );
181 196 }
182 197 }
@@ -190,9 +205,13 @@
190 205 'new_page' => $new_page,
191 206
192 207 ];
193 208 if ( $edit_by ) {
194 - $return['edit_btn_text'] = esc_html__( sprintf( 'Edit with %s', $edit_by ), 'shopbuilder' );
209 + $return['edit_btn_text'] = sprintf(
210 + /* translators: %s: Edit */
211 + esc_html__( 'Edit with %s', 'shopbuilder' ),
212 + esc_html( $edit_by )
213 + );
195 214 }
196 215 wp_send_json( $return );
197 216 wp_die();
198 217 }