PluginProbe
ShopBuilder – WooCommerce Builder For Elementor / 3.2.6
ShopBuilder – WooCommerce Builder For Elementor v3.2.6
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 +40 -68 2.1.43.2.6 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,47 @@
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 );
88 -
89 65 }
90 66
91 - add_filter( 'pre_option_elementor_unfiltered_files_upload', function () {
92 - return '1';
93 - }, 99 );
67 + add_filter(
68 + 'pre_option_elementor_unfiltered_files_upload',
69 + function () {
70 + return '1';
71 + },
72 + 99
73 + );
94 74
95 75 Plugin::$instance->files_manager->clear_cache();
96 76 add_filter( 'rtsb_import_status', '__return_true' );
97 77
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 78 $option_name = BuilderFns::option_name( $page_type );
112 79
113 80 $post_data = [
114 81 'ID' => $page_id,
@@ -139,23 +106,26 @@
139 106 }
140 107
141 108 $edit_by = '';
142 109 if ( $page_id ) {
110 + $edit_by = Fns::page_edit_with( $page_id );
111 + $template_for = sanitize_text_field( wp_unslash( $_POST['product_page_for'] ?? '' ) );
112 + $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 113 if ( 'product' == $page_type ) {
144 114 update_post_meta( $page_id, BuilderFns::$product_template_meta, $product_id );
115 + update_post_meta( $page_id, '_is_product_page_template_for', $template_for );
145 116 }
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 ) ) {
117 +
118 + $has_default = TemplateSettings::instance()->get_option( $option_name );
119 + if ( ( 'product' === $page_type && 'all_products' !== $template_for ) || ( 'archive' === $page_type && count( $selected_category ) ) ) {
120 + if ( ! $has_default ) {
121 + TemplateSettings::instance()->set_option( $option_name, '' );
122 + }
123 + } else {
150 124 if ( 'default_template' === $default_template ) {
151 - // update_option( $option_name, $page_id );
152 125 TemplateSettings::instance()->set_option( $option_name, $page_id );
153 126 } else {
154 - // $has_default = get_option( $option_name );
155 - $has_default = TemplateSettings::instance()->get_option( $option_name );
156 127 if ( ! $has_default ) {
157 - // update_option( $option_name, '' );
158 128 TemplateSettings::instance()->set_option( $option_name, '' );
159 129 }
160 130 }
161 131 }
@@ -171,12 +141,10 @@
171 141 ],
172 142 admin_url( 'post.php' )
173 143 );
174 144
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 );
145 + if ( ! empty( $layoutJson ) && is_array( $layoutJson ) ) {
146 + $content = wp_slash( wp_json_encode( $layoutJson ) );
179 147 update_post_meta( $page_id, '_elementor_data', $content );
180 148 update_post_meta( $page_id, '_rtsb_import_id', $import_layout );
181 149 }
182 150 }
@@ -190,9 +158,13 @@
190 158 'new_page' => $new_page,
191 159
192 160 ];
193 161 if ( $edit_by ) {
194 - $return['edit_btn_text'] = esc_html__( sprintf( 'Edit with %s', $edit_by ), 'shopbuilder' );
162 + $return['edit_btn_text'] = sprintf(
163 + /* translators: %s: Edit */
164 + esc_html__( 'Edit with %s', 'shopbuilder' ),
165 + esc_html( $edit_by )
166 + );
195 167 }
196 168 wp_send_json( $return );
197 169 wp_die();
198 170 }