PluginProbe
ShopBuilder – WooCommerce Builder For Elementor / 3.2.1
ShopBuilder – WooCommerce Builder For Elementor v3.2.1
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 +43 -67 2.0.33.2.1 View file →
@@ -1,13 +1,13 @@
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;
9 +use RadiusTheme\SB\Models\TemplateSettings;
10 10 use RadiusTheme\SB\Traits\SingletonTrait;
11 11
12 12 // Do not allow directly accessing this file.
13 13 if ( ! defined( 'ABSPATH' ) ) {
@@ -16,9 +16,9 @@
16 16
17 17 /**
18 18 * Default Template Switch.
19 19 */
20 -class CreateTemplate extends Source_Base {
20 +class CreateTemplate {
21 21 /**
22 22 * Singleton Trait.
23 23 */
24 24 use SingletonTrait;
@@ -29,39 +29,8 @@
29 29 private function __construct() {
30 30 add_action( 'wp_ajax_rtsb_builder_create_template', [ $this, 'response' ] );
31 31 }
32 32
33 -
34 - public function get_id() {
35 - }
36 -
37 - public function get_title() {
38 - }
39 -
40 - public function register_data() {
41 - }
42 -
43 - public function get_items( $args = [] ) {
44 - }
45 -
46 - public function get_item( $template_id ) {
47 - }
48 -
49 - public function get_data( array $args ) {
50 - }
51 -
52 - public function delete_template( $template_id ) {
53 - }
54 -
55 - public function save_item( $template_data ) {
56 - }
57 -
58 - public function update_item( $new_data ) {
59 - }
60 -
61 - public function export_template( $template_id ) {
62 - }
63 -
64 33 /**
65 34 * Create template
66 35 *
67 36 * @return void
@@ -66,48 +35,47 @@
66 35 *
67 36 * @return void
68 37 */
69 38 public function response() {
70 - $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.
71 41 $page_id = isset( $_POST['page_id'] ) ? absint( wp_unslash( $_POST['page_id'] ) ) : null;
72 42 $page_name = isset( $_POST['page_name'] ) ? sanitize_text_field( wp_unslash( $_POST['page_name'] ) ) : null;
73 43 $hasPro = isset( $_POST['hasPro'] ) ? sanitize_text_field( wp_unslash( $_POST['hasPro'] ) ) : null;
74 44 $edit_with = isset( $_POST['template_edit_with'] ) ? sanitize_text_field( wp_unslash( $_POST['template_edit_with'] ) ) : null;
75 45 $default_template = isset( $_POST['default_template'] ) ? sanitize_text_field( wp_unslash( $_POST['default_template'] ) ) : null;
76 - $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
77 48 $product_id = isset( $_POST['preview_product_id'] ) ? absint( $_POST['preview_product_id'] ) : null;
49 + $url = '#';
78 50
79 - $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 );
80 57
81 - if ( ! Fns::verify_nonce() || ! $page_type ) {
58 + }
59 + if ( ! current_user_can( 'manage_options' ) ) {
82 60 $return = [
83 61 'success' => false,
84 62 'post_id' => $page_id,
85 63 ];
86 64 wp_send_json( $return );
87 -
88 65 }
89 66
90 - add_filter( 'pre_option_elementor_unfiltered_files_upload', function () {
91 - return '1';
92 - }, 99 );
67 + add_filter(
68 + 'pre_option_elementor_unfiltered_files_upload',
69 + function () {
70 + return '1';
71 + },
72 + 99
73 + );
93 74
94 75 Plugin::$instance->files_manager->clear_cache();
95 76 add_filter( 'rtsb_import_status', '__return_true' );
96 77
97 - $status = $_REQUEST['status'] ?? '';
98 - $post_args = [ 'timeout' => 120 ];
99 - $post_args['body'] = [
100 - 'status' => $status,
101 - 'layout_id' => $import_layout,
102 - 'has_pro' => $hasPro
103 - ];
104 - $layoutRequest = wp_remote_post( rtsb()->BASE_API, $post_args );
105 -
106 - if ( is_wp_error( $layoutRequest ) ) {
107 - wp_send_json_error( [ 'messages' => $layoutRequest->get_error_messages() ] );
108 - }
109 - $layoutJson = json_decode( $layoutRequest['body'], true );
110 78 $option_name = BuilderFns::option_name( $page_type );
111 79
112 80 $post_data = [
113 81 'ID' => $page_id,
@@ -138,21 +106,27 @@
138 106 }
139 107
140 108 $edit_by = '';
141 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
142 113 if ( 'product' == $page_type ) {
143 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 );
144 116 }
145 - $edit_by = Fns::page_edit_with( $page_id );
146 - $category_archive = array_unique( isset( $_POST['category_archive'] ) && is_array( $_POST['category_archive'] ) ? array_map( 'sanitize_text_field', $_POST['category_archive'] ) : [] );
147 - $the_products = array_unique( isset( $_POST['the_products'] ) && is_array( $_POST['the_products'] ) ? array_map( 'absint', $_POST['the_products'] ) : [] );
148 - 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 {
149 124 if ( 'default_template' === $default_template ) {
150 - update_option( $option_name, $page_id );
125 + TemplateSettings::instance()->set_option( $option_name, $page_id );
151 126 } else {
152 - $has_default = get_option( $option_name );
153 127 if ( ! $has_default ) {
154 - update_option( $option_name, '' );
128 + TemplateSettings::instance()->set_option( $option_name, '' );
155 129 }
156 130 }
157 131 }
158 132
@@ -167,12 +141,10 @@
167 141 ],
168 142 admin_url( 'post.php' )
169 143 );
170 144
171 - if ( ! empty( $layoutJson['data'] ) ) {
172 - $data = json_decode( $layoutJson['data'], true );
173 - $content = $this->process_export_import_content( $data, 'on_import' );
174 - $content = json_encode( $content );
145 + if ( ! empty( $layoutJson ) && is_array( $layoutJson ) ) {
146 + $content = wp_slash( wp_json_encode( $layoutJson ) );
175 147 update_post_meta( $page_id, '_elementor_data', $content );
176 148 update_post_meta( $page_id, '_rtsb_import_id', $import_layout );
177 149 }
178 150 }
@@ -186,9 +158,13 @@
186 158 'new_page' => $new_page,
187 159
188 160 ];
189 161 if ( $edit_by ) {
190 - $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 + );
191 167 }
192 168 wp_send_json( $return );
193 169 wp_die();
194 170 }