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 -71 2.1.5 → 3.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,49 +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 - $layoutJson = [];
108 - if ( ! is_wp_error( $layoutRequest ) && ! empty( $layoutRequest['body'] ) ) {
109 - $layoutJson = json_decode( $layoutRequest['body'], true );
110 - }
111 -
112 91 $option_name = BuilderFns::option_name( $page_type );
113 92
114 93 $post_data = [
115 94 'ID' => $page_id,
@@ -140,24 +119,40 @@
140 119 }
141 120
142 121 $edit_by = '';
143 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
144 126 if ( 'product' == $page_type ) {
145 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 );
146 129 }
147 - $edit_by = Fns::page_edit_with( $page_id );
148 - $category_archive = array_unique( isset( $_POST['category_archive'] ) && is_array( $_POST['category_archive'] ) ? array_map( 'sanitize_text_field', $_POST['category_archive'] ) : [] );
149 - $the_products = array_unique( isset( $_POST['the_products'] ) && is_array( $_POST['the_products'] ) ? array_map( 'absint', $_POST['the_products'] ) : [] );
150 - 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 {
151 142 if ( 'default_template' === $default_template ) {
152 - // update_option( $option_name, $page_id );
153 - 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 + }
154 148 } else {
155 - // $has_default = get_option( $option_name );
156 - $has_default = TemplateSettings::instance()->get_option( $option_name );
157 - if ( ! $has_default ) {
158 - // update_option( $option_name, '' );
159 - 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 + }
160 155 }
161 156 }
162 157 }
163 158
@@ -172,12 +167,10 @@
172 167 ],
173 168 admin_url( 'post.php' )
174 169 );
175 170
176 - if ( ! empty( $layoutJson['data'] ) ) {
177 - $data = json_decode( $layoutJson['data'], true );
178 - $content = $this->process_export_import_content( $data, 'on_import' );
179 - $content = json_encode( $content );
171 + if ( ! empty( $layoutJson ) && is_array( $layoutJson ) ) {
172 + $content = wp_slash( wp_json_encode( $layoutJson ) );
180 173 update_post_meta( $page_id, '_elementor_data', $content );
181 174 update_post_meta( $page_id, '_rtsb_import_id', $import_layout );
182 175 }
183 176 }
@@ -191,9 +184,13 @@
191 184 'new_page' => $new_page,
192 185
193 186 ];
194 187 if ( $edit_by ) {
195 - $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 + );
196 193 }
197 194 wp_send_json( $return );
198 195 wp_die();
199 196 }