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
shopbuilder / app / Controllers / Admin / Ajax / CreateTemplate.php

CreateTemplate.php in ShopBuilder – WooCommerce Builder For Elementor 3.3.0, at app/Controllers/Admin/Ajax/CreateTemplate.php

198 lines 6.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace RadiusTheme\SB\Controllers\Admin\Ajax;
4
5 use Elementor\Plugin;
6 use RadiusTheme\SB\Helpers\BuilderFns;
7 use RadiusTheme\SB\Helpers\Cache;
8 use RadiusTheme\SB\Helpers\Fns;
9 use RadiusTheme\SB\Models\TemplateSettings;
10 use RadiusTheme\SB\Traits\SingletonTrait;
11
12 // Do not allow directly accessing this file.
13 if ( ! defined( 'ABSPATH' ) ) {
14 exit( 'This script cannot be accessed directly.' );
15 }
16
17 /**
18 * Default Template Switch.
19 */
20 class CreateTemplate {
21 /**
22 * Singleton Trait.
23 */
24 use SingletonTrait;
25
26 /**
27 * Construct function
28 */
29 private function __construct() {
30 add_action( 'wp_ajax_rtsb_builder_create_template', [ $this, 'response' ] );
31 }
32
33 /**
34 * Create template
35 *
36 * @return void
37 */
38 public function response() {
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.
41 $page_id = isset( $_POST['page_id'] ) ? absint( wp_unslash( $_POST['page_id'] ) ) : null;
42 $page_name = isset( $_POST['page_name'] ) ? sanitize_text_field( wp_unslash( $_POST['page_name'] ) ) : null;
43 $hasPro = isset( $_POST['hasPro'] ) ? sanitize_text_field( wp_unslash( $_POST['hasPro'] ) ) : null;
44 $edit_with = isset( $_POST['template_edit_with'] ) ? sanitize_text_field( wp_unslash( $_POST['template_edit_with'] ) ) : null;
45 $default_template = isset( $_POST['default_template'] ) ? sanitize_text_field( wp_unslash( $_POST['default_template'] ) ) : 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
48 $product_id = isset( $_POST['preview_product_id'] ) ? absint( $_POST['preview_product_id'] ) : null;
49 $url = '#';
50
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 );
57
58 }
59 if ( ! current_user_can( 'manage_options' ) ) {
60 $return = [
61 'success' => false,
62 'post_id' => $page_id,
63 ];
64 wp_send_json( $return );
65 }
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 );
78 }
79
80 add_filter(
81 'pre_option_elementor_unfiltered_files_upload',
82 function () {
83 return '1';
84 },
85 99
86 );
87
88 Plugin::$instance->files_manager->clear_cache();
89 add_filter( 'rtsb_import_status', '__return_true' );
90
91 $option_name = BuilderFns::option_name( $page_type );
92
93 $post_data = [
94 'ID' => $page_id,
95 'post_title' => $page_name,
96 'meta_input' => [
97 BuilderFns::template_type_meta_key() => $page_type,
98 ],
99 ];
100 if ( 'elementor' == $edit_with ) {
101 $post_data['meta_input']['_elementor_edit_mode'] = 'builder';
102 } elseif ( 'gutenberg' == $edit_with ) {
103 $post_data['meta_input']['_elementor_edit_mode'] = '';
104 }
105
106 if ( $page_id ) {
107 $page_id = wp_update_post( $post_data );
108 $new_page = false;
109 } else {
110 unset( $post_data['ID'] );
111 $post_data['post_type'] = BuilderFns::$post_type_tb;
112 $post_data['post_status'] = 'publish';
113 $page_id = wp_insert_post( $post_data );
114 $new_page = true;
115 if ( 'elementor' == $edit_with ) {
116 update_post_meta( $page_id, '_wp_page_template', 'elementor_header_footer' );
117 update_post_meta( $page_id, '_elementor_version', ELEMENTOR_VERSION );
118 }
119 }
120
121 $edit_by = '';
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
126 if ( 'product' == $page_type ) {
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 );
129 }
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 {
142 if ( 'default_template' === $default_template ) {
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 }
148 } else {
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 }
155 }
156 }
157 }
158
159 $action = 'edit';
160 if ( 'elementor' === $edit_by ) {
161 $action = 'elementor';
162 }
163 $url = add_query_arg(
164 [
165 'post' => $page_id,
166 'action' => $action,
167 ],
168 admin_url( 'post.php' )
169 );
170
171 if ( ! empty( $layoutJson ) && is_array( $layoutJson ) ) {
172 $content = wp_slash( wp_json_encode( $layoutJson ) );
173 update_post_meta( $page_id, '_elementor_data', $content );
174 update_post_meta( $page_id, '_rtsb_import_id', $import_layout );
175 }
176 }
177
178 do_action( 'rtsb/after/create/and/edit/builder/template', $_POST, $page_id );
179
180 $return = [
181 'success' => true,
182 'post_id' => $page_id,
183 'post_edit_url' => $url,
184 'new_page' => $new_page,
185
186 ];
187 if ( $edit_by ) {
188 $return['edit_btn_text'] = sprintf(
189 /* translators: %s: Edit */
190 esc_html__( 'Edit with %s', 'shopbuilder' ),
191 esc_html( $edit_by )
192 );
193 }
194 wp_send_json( $return );
195 wp_die();
196 }
197 }
198