PluginProbe
ShopBuilder – WooCommerce Builder For Elementor / 3.2.5
ShopBuilder – WooCommerce Builder For Elementor v3.2.5
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.2.5, at app/Controllers/Admin/Ajax/CreateTemplate.php

172 lines 5.7 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 add_filter(
68 'pre_option_elementor_unfiltered_files_upload',
69 function () {
70 return '1';
71 },
72 99
73 );
74
75 Plugin::$instance->files_manager->clear_cache();
76 add_filter( 'rtsb_import_status', '__return_true' );
77
78 $option_name = BuilderFns::option_name( $page_type );
79
80 $post_data = [
81 'ID' => $page_id,
82 'post_title' => $page_name,
83 'meta_input' => [
84 BuilderFns::template_type_meta_key() => $page_type,
85 ],
86 ];
87 if ( 'elementor' == $edit_with ) {
88 $post_data['meta_input']['_elementor_edit_mode'] = 'builder';
89 } elseif ( 'gutenberg' == $edit_with ) {
90 $post_data['meta_input']['_elementor_edit_mode'] = '';
91 }
92
93 if ( $page_id ) {
94 $page_id = wp_update_post( $post_data );
95 $new_page = false;
96 } else {
97 unset( $post_data['ID'] );
98 $post_data['post_type'] = BuilderFns::$post_type_tb;
99 $post_data['post_status'] = 'publish';
100 $page_id = wp_insert_post( $post_data );
101 $new_page = true;
102 if ( 'elementor' == $edit_with ) {
103 update_post_meta( $page_id, '_wp_page_template', 'elementor_header_footer' );
104 update_post_meta( $page_id, '_elementor_version', ELEMENTOR_VERSION );
105 }
106 }
107
108 $edit_by = '';
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
113 if ( 'product' == $page_type ) {
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 );
116 }
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 {
124 if ( 'default_template' === $default_template ) {
125 TemplateSettings::instance()->set_option( $option_name, $page_id );
126 } else {
127 if ( ! $has_default ) {
128 TemplateSettings::instance()->set_option( $option_name, '' );
129 }
130 }
131 }
132
133 $action = 'edit';
134 if ( 'elementor' === $edit_by ) {
135 $action = 'elementor';
136 }
137 $url = add_query_arg(
138 [
139 'post' => $page_id,
140 'action' => $action,
141 ],
142 admin_url( 'post.php' )
143 );
144
145 if ( ! empty( $layoutJson ) && is_array( $layoutJson ) ) {
146 $content = wp_slash( wp_json_encode( $layoutJson ) );
147 update_post_meta( $page_id, '_elementor_data', $content );
148 update_post_meta( $page_id, '_rtsb_import_id', $import_layout );
149 }
150 }
151
152 do_action( 'rtsb/after/create/and/edit/builder/template', $_POST, $page_id );
153
154 $return = [
155 'success' => true,
156 'post_id' => $page_id,
157 'post_edit_url' => $url,
158 'new_page' => $new_page,
159
160 ];
161 if ( $edit_by ) {
162 $return['edit_btn_text'] = sprintf(
163 /* translators: %s: Edit */
164 esc_html__( 'Edit with %s', 'shopbuilder' ),
165 esc_html( $edit_by )
166 );
167 }
168 wp_send_json( $return );
169 wp_die();
170 }
171 }
172