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/Controllers/Admin/Ajax/CreateTemplate.php +63 -73 2.1.73.3.0 View file →
@@ -1,12 +1,11 @@
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 -use Elementor\TemplateLibrary\Source_Base;
8 6 use RadiusTheme\SB\Helpers\BuilderFns;
7 +use RadiusTheme\SB\Helpers\Cache;
9 8 use RadiusTheme\SB\Helpers\Fns;
10 9 use RadiusTheme\SB\Models\TemplateSettings;
11 10 use RadiusTheme\SB\Traits\SingletonTrait;
12 11
@@ -17,9 +16,9 @@
17 16
18 17 /**
19 18 * Default Template Switch.
20 19 */
21 -class CreateTemplate extends Source_Base {
20 +class CreateTemplate {
22 21 /**
23 22 * Singleton Trait.
24 23 */
25 24 use SingletonTrait;
@@ -30,39 +29,8 @@
30 29 private function __construct() {
31 30 add_action( 'wp_ajax_rtsb_builder_create_template', [ $this, 'response' ] );
32 31 }
33 32
34 -
35 - public function get_id() {
36 - }
37 -
38 - public function get_title() {
39 - }
40 -
41 - public function register_data() {
42 - }
43 -
44 - public function get_items( $args = [] ) {
45 - }
46 -
47 - public function get_item( $template_id ) {
48 - }
49 -
50 - public function get_data( array $args ) {
51 - }
52 -
53 - public function delete_template( $template_id ) {
54 - }
55 -
56 - public function save_item( $template_data ) {
57 - }
58 -
59 - public function update_item( $new_data ) {
60 - }
61 -
62 - public function export_template( $template_id ) {
63 - }
64 -
65 33 /**
66 34 * Create template
67 35 *
68 36 * @return void
@@ -67,20 +35,21 @@
67 35 *
68 36 * @return void
69 37 */
70 38 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
39 + Cache::clear_transient_cache();
40 + $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 41 $page_id = isset( $_POST['page_id'] ) ? absint( wp_unslash( $_POST['page_id'] ) ) : null;
73 42 $page_name = isset( $_POST['page_name'] ) ? sanitize_text_field( wp_unslash( $_POST['page_name'] ) ) : null;
74 43 $hasPro = isset( $_POST['hasPro'] ) ? sanitize_text_field( wp_unslash( $_POST['hasPro'] ) ) : null;
75 44 $edit_with = isset( $_POST['template_edit_with'] ) ? sanitize_text_field( wp_unslash( $_POST['template_edit_with'] ) ) : null;
76 45 $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;
46 + $import_layout = isset( $_POST['import_default_layout'] ) ? sanitize_text_field( $_POST['import_default_layout'] ) : null; //phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash
47 + $layoutJson = isset( $_POST['demoData'] ) ? $_POST['demoData'] : null; // phpcs:ignore WordPress.Security.NonceVerification.Missing, WordPress.Security.ValidatedSanitizedInput.MissingUnslash, WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
78 48 $product_id = isset( $_POST['preview_product_id'] ) ? absint( $_POST['preview_product_id'] ) : null;
49 + $url = '#';
79 50
80 - $url = '#';
81 -
82 - if ( ! Fns::verify_nonce() || ! $page_type ) {
51 + if ( ! wp_verify_nonce( Fns::get_nonce(), rtsb()->nonceText ) || ! $page_type ) {
83 52 $return = [
84 53 'success' => false,
85 54 'post_id' => $page_id,
86 55 ];
@@ -86,9 +55,9 @@
86 55 ];
87 56 wp_send_json( $return );
88 57
89 58 }
90 - if ( ! current_user_can( 'manage_options' ) ) {
59 + if ( ! current_user_can( 'manage_options' ) ) {
91 60 $return = [
92 61 'success' => false,
93 62 'post_id' => $page_id,
94 63 ];
@@ -94,29 +63,32 @@
94 63 ];
95 64 wp_send_json( $return );
96 65 }
97 66
98 - add_filter( 'pre_option_elementor_unfiltered_files_upload', function () {
99 - return '1';
100 - }, 99 );
67 + // Nonce verified above.
68 + $can_save = apply_filters( 'rtsb/builder/create_template/can_save', true, $page_type, $_POST ); // phpcs:ignore WordPress.Security.NonceVerification.Missing
101 69
70 + if ( true !== $can_save ) {
71 + wp_send_json(
72 + [
73 + 'success' => false,
74 + 'post_id' => $page_id,
75 + 'message' => is_string( $can_save ) ? $can_save : esc_html__( 'Template cannot be saved.', 'shopbuilder' ),
76 + ]
77 + );
78 + }
79 +
80 + add_filter(
81 + 'pre_option_elementor_unfiltered_files_upload',
82 + function () {
83 + return '1';
84 + },
85 + 99
86 + );
87 +
102 88 Plugin::$instance->files_manager->clear_cache();
103 89 add_filter( 'rtsb_import_status', '__return_true' );
104 90
105 - $status = $_REQUEST['status'] ?? '';
106 - $post_args = [ 'timeout' => 120 ];
107 - $post_args['body'] = [
108 - 'status' => $status,
109 - 'layout_id' => $import_layout,
110 - 'has_pro' => $hasPro
111 - ];
112 - $layoutRequest = wp_remote_post( rtsb()->BASE_API, $post_args );
113 -
114 - $layoutJson = [];
115 - if ( ! is_wp_error( $layoutRequest ) && ! empty( $layoutRequest['body'] ) ) {
116 - $layoutJson = json_decode( $layoutRequest['body'], true );
117 - }
118 -
119 91 $option_name = BuilderFns::option_name( $page_type );
120 92
121 93 $post_data = [
122 94 'ID' => $page_id,
@@ -147,24 +119,40 @@
147 119 }
148 120
149 121 $edit_by = '';
150 122 if ( $page_id ) {
123 + $edit_by = Fns::page_edit_with( $page_id );
124 + $template_for = sanitize_text_field( wp_unslash( $_POST['product_page_for'] ?? '' ) );
125 + $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
151 126 if ( 'product' == $page_type ) {
152 127 update_post_meta( $page_id, BuilderFns::$product_template_meta, $product_id );
128 + update_post_meta( $page_id, '_is_product_page_template_for', $template_for );
153 129 }
154 - $edit_by = Fns::page_edit_with( $page_id );
155 - $category_archive = array_unique( isset( $_POST['category_archive'] ) && is_array( $_POST['category_archive'] ) ? array_map( 'sanitize_text_field', $_POST['category_archive'] ) : [] );
156 - $the_products = array_unique( isset( $_POST['the_products'] ) && is_array( $_POST['the_products'] ) ? array_map( 'absint', $_POST['the_products'] ) : [] );
157 - if ( ! count( $the_products ) && ! count( $category_archive ) ) {
130 +
131 + $has_default = TemplateSettings::instance()->get_option( $option_name );
132 + $singleton_types = apply_filters(
133 + 'rtsb/builder/singleton_types',
134 + array_keys( BuilderFns::builder_page_types() )
135 + );
136 + $is_pool_type = ! in_array( $page_type, $singleton_types, true );
137 + if ( ( 'product' === $page_type && 'all_products' !== $template_for ) || ( 'archive' === $page_type && count( $selected_category ) ) ) {
138 + if ( ! $has_default ) {
139 + TemplateSettings::instance()->set_option( $option_name, '' );
140 + }
141 + } else {
158 142 if ( 'default_template' === $default_template ) {
159 - // update_option( $option_name, $page_id );
160 - TemplateSettings::instance()->set_option( $option_name, $page_id );
143 + if ( $is_pool_type ) {
144 + update_post_meta( $page_id, '_rtsb_tb_enabled_in_pool', 'on' );
145 + } else {
146 + TemplateSettings::instance()->set_option( $option_name, $page_id );
147 + }
161 148 } else {
162 - // $has_default = get_option( $option_name );
163 - $has_default = TemplateSettings::instance()->get_option( $option_name );
164 - if ( ! $has_default ) {
165 - // update_option( $option_name, '' );
166 - TemplateSettings::instance()->set_option( $option_name, '' );
149 + if ( $is_pool_type ) {
150 + delete_post_meta( $page_id, '_rtsb_tb_enabled_in_pool' );
151 + } else {
152 + if ( ! $has_default ) {
153 + TemplateSettings::instance()->set_option( $option_name, '' );
154 + }
167 155 }
168 156 }
169 157 }
170 158
@@ -179,12 +167,10 @@
179 167 ],
180 168 admin_url( 'post.php' )
181 169 );
182 170
183 - if ( ! empty( $layoutJson['data'] ) ) {
184 - $data = json_decode( $layoutJson['data'], true );
185 - $content = $this->process_export_import_content( $data, 'on_import' );
186 - $content = json_encode( $content );
171 + if ( ! empty( $layoutJson ) && is_array( $layoutJson ) ) {
172 + $content = wp_slash( wp_json_encode( $layoutJson ) );
187 173 update_post_meta( $page_id, '_elementor_data', $content );
188 174 update_post_meta( $page_id, '_rtsb_import_id', $import_layout );
189 175 }
190 176 }
@@ -198,9 +184,13 @@
198 184 'new_page' => $new_page,
199 185
200 186 ];
201 187 if ( $edit_by ) {
202 - $return['edit_btn_text'] = esc_html__( sprintf( 'Edit with %s', $edit_by ), 'shopbuilder' );
188 + $return['edit_btn_text'] = sprintf(
189 + /* translators: %s: Edit */
190 + esc_html__( 'Edit with %s', 'shopbuilder' ),
191 + esc_html( $edit_by )
192 + );
203 193 }
204 194 wp_send_json( $return );
205 195 wp_die();
206 196 }