PluginProbe
ShopBuilder – WooCommerce Builder For Elementor / 3.4.0
ShopBuilder – WooCommerce Builder For Elementor v3.4.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 +68 -70 2.1.13.4.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,48 +35,60 @@
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 = '#';
51 + if ( ! wp_verify_nonce( Fns::get_nonce(), rtsb()->nonceText ) || ! $page_type ) {
52 + $return = [
53 + 'success' => false,
54 + 'post_id' => $page_id,
55 + ];
56 + wp_send_json( $return );
81 57
82 - if ( ! Fns::verify_nonce() || ! $page_type ) {
58 + }
59 + if ( ! current_user_can( 'manage_options' ) ) {
83 60 $return = [
84 61 'success' => false,
85 62 'post_id' => $page_id,
86 63 ];
87 64 wp_send_json( $return );
65 + }
88 66
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
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 + );
89 78 }
90 79
91 - add_filter( 'pre_option_elementor_unfiltered_files_upload', function () {
92 - return '1';
93 - }, 99 );
80 + add_filter(
81 + 'pre_option_elementor_unfiltered_files_upload',
82 + function () {
83 + return '1';
84 + },
85 + 99
86 + );
94 87
95 88 Plugin::$instance->files_manager->clear_cache();
96 89 add_filter( 'rtsb_import_status', '__return_true' );
97 90
98 - $status = $_REQUEST['status'] ?? '';
99 - $post_args = [ 'timeout' => 120 ];
100 - $post_args['body'] = [
101 - 'status' => $status,
102 - 'layout_id' => $import_layout,
103 - 'has_pro' => $hasPro
104 - ];
105 - $layoutRequest = wp_remote_post( rtsb()->BASE_API, $post_args );
106 -
107 - if ( is_wp_error( $layoutRequest ) ) {
108 - wp_send_json_error( [ 'messages' => $layoutRequest->get_error_messages() ] );
109 - }
110 - $layoutJson = json_decode( $layoutRequest['body'], true );
111 91 $option_name = BuilderFns::option_name( $page_type );
112 92
113 93 $post_data = [
114 94 'ID' => $page_id,
@@ -139,24 +119,40 @@
139 119 }
140 120
141 121 $edit_by = '';
142 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
143 126 if ( 'product' == $page_type ) {
144 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 );
145 129 }
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 ) ) {
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 {
150 142 if ( 'default_template' === $default_template ) {
151 - // update_option( $option_name, $page_id );
152 - 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 + }
153 148 } 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, '' );
158 - 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 + }
159 155 }
160 156 }
161 157 }
162 158
@@ -171,12 +167,10 @@
171 167 ],
172 168 admin_url( 'post.php' )
173 169 );
174 170
175 - if ( ! empty( $layoutJson['data'] ) ) {
176 - $data = json_decode( $layoutJson['data'], true );
177 - $content = $this->process_export_import_content( $data, 'on_import' );
178 - $content = json_encode( $content );
171 + if ( ! empty( $layoutJson ) && is_array( $layoutJson ) ) {
172 + $content = wp_slash( wp_json_encode( $layoutJson ) );
179 173 update_post_meta( $page_id, '_elementor_data', $content );
180 174 update_post_meta( $page_id, '_rtsb_import_id', $import_layout );
181 175 }
182 176 }
@@ -190,9 +184,13 @@
190 184 'new_page' => $new_page,
191 185
192 186 ];
193 187 if ( $edit_by ) {
194 - $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 + );
195 193 }
196 194 wp_send_json( $return );
197 195 wp_die();
198 196 }