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

219 lines 6.5 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 Elementor\TemplateLibrary\Source_Base;
7 use RadiusTheme\SB\Helpers\BuilderFns;
8 use RadiusTheme\SB\Helpers\Cache;
9 use RadiusTheme\SB\Helpers\Fns;
10 use RadiusTheme\SB\Models\TemplateSettings;
11 use RadiusTheme\SB\Traits\SingletonTrait;
12
13 // Do not allow directly accessing this file.
14 if ( ! defined( 'ABSPATH' ) ) {
15 exit( 'This script cannot be accessed directly.' );
16 }
17
18 /**
19 * Default Template Switch.
20 */
21 class CreateTemplate extends Source_Base {
22 /**
23 * Singleton Trait.
24 */
25 use SingletonTrait;
26
27 /**
28 * Construct function
29 */
30 private function __construct() {
31 add_action( 'wp_ajax_rtsb_builder_create_template', [ $this, 'response' ] );
32 }
33
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 /**
66 * Create template
67 *
68 * @return void
69 */
70 public function response() {
71 Cache::clear_transient_cache();
72 $page_type = isset( $_POST['page_type'] ) ? sanitize_text_field( wp_unslash( $_POST['page_type'] ) ) : null; // rtsb_tb_template_type - it represent to template type
73 $page_id = isset( $_POST['page_id'] ) ? absint( wp_unslash( $_POST['page_id'] ) ) : null;
74 $page_name = isset( $_POST['page_name'] ) ? sanitize_text_field( wp_unslash( $_POST['page_name'] ) ) : null;
75 $hasPro = isset( $_POST['hasPro'] ) ? sanitize_text_field( wp_unslash( $_POST['hasPro'] ) ) : null;
76 $edit_with = isset( $_POST['template_edit_with'] ) ? sanitize_text_field( wp_unslash( $_POST['template_edit_with'] ) ) : null;
77 $default_template = isset( $_POST['default_template'] ) ? sanitize_text_field( wp_unslash( $_POST['default_template'] ) ) : null;
78 $import_layout = isset( $_POST['import_default_layout'] ) ? sanitize_text_field( $_POST['import_default_layout'] ) : null; //phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash
79 $product_id = isset( $_POST['preview_product_id'] ) ? absint( $_POST['preview_product_id'] ) : null;
80 $url = '#';
81
82 if ( ! wp_verify_nonce( Fns::get_nonce(), rtsb()->nonceText ) || ! $page_type ) {
83 $return = [
84 'success' => false,
85 'post_id' => $page_id,
86 ];
87 wp_send_json( $return );
88
89 }
90 if ( ! current_user_can( 'manage_options' ) ) {
91 $return = [
92 'success' => false,
93 'post_id' => $page_id,
94 ];
95 wp_send_json( $return );
96 }
97
98 add_filter(
99 'pre_option_elementor_unfiltered_files_upload',
100 function () {
101 return '1';
102 },
103 99
104 );
105
106 Plugin::$instance->files_manager->clear_cache();
107 add_filter( 'rtsb_import_status', '__return_true' );
108
109 $status = sanitize_text_field( wp_unslash( $_REQUEST['status'] ?? '' ) );
110 $post_args = [ 'timeout' => 120 ];
111 $post_args['body'] = [
112 'status' => $status,
113 'layout_id' => $import_layout,
114 'has_pro' => $hasPro,
115 ];
116 $layoutRequest = wp_remote_post( rtsb()->BASE_API, $post_args );
117
118 $layoutJson = [];
119 if ( ! is_wp_error( $layoutRequest ) && ! empty( $layoutRequest['body'] ) ) {
120 $layoutJson = json_decode( $layoutRequest['body'], true );
121 }
122
123 $option_name = BuilderFns::option_name( $page_type );
124
125 $post_data = [
126 'ID' => $page_id,
127 'post_title' => $page_name,
128 'meta_input' => [
129 BuilderFns::template_type_meta_key() => $page_type,
130 ],
131 ];
132 if ( 'elementor' == $edit_with ) {
133 $post_data['meta_input']['_elementor_edit_mode'] = 'builder';
134 } elseif ( 'gutenberg' == $edit_with ) {
135 $post_data['meta_input']['_elementor_edit_mode'] = '';
136 }
137
138 if ( $page_id ) {
139 $page_id = wp_update_post( $post_data );
140 $new_page = false;
141 } else {
142 unset( $post_data['ID'] );
143 $post_data['post_type'] = BuilderFns::$post_type_tb;
144 $post_data['post_status'] = 'publish';
145 $page_id = wp_insert_post( $post_data );
146 $new_page = true;
147 if ( 'elementor' == $edit_with ) {
148 update_post_meta( $page_id, '_wp_page_template', 'elementor_header_footer' );
149 update_post_meta( $page_id, '_elementor_version', ELEMENTOR_VERSION );
150 }
151 }
152
153 $edit_by = '';
154 if ( $page_id ) {
155 $edit_by = Fns::page_edit_with( $page_id );
156 $template_for = sanitize_text_field( wp_unslash( $_POST['product_page_for'] ?? '' ) );
157 $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
158 if ( 'product' == $page_type ) {
159 update_post_meta( $page_id, BuilderFns::$product_template_meta, $product_id );
160 update_post_meta( $page_id, '_is_product_page_template_for', $template_for );
161 }
162
163 $has_default = TemplateSettings::instance()->get_option( $option_name );
164 if ( ( 'product' === $page_type && 'all_products' !== $template_for ) || ( 'archive' === $page_type && count( $selected_category ) ) ) {
165 if ( ! $has_default ) {
166 TemplateSettings::instance()->set_option( $option_name, '' );
167 }
168 } else {
169 if ( 'default_template' === $default_template ) {
170 TemplateSettings::instance()->set_option( $option_name, $page_id );
171 } else {
172 //if ( ! $has_default ) {
173 TemplateSettings::instance()->set_option( $option_name, '' );
174 // }
175 }
176 }
177
178 $action = 'edit';
179 if ( 'elementor' === $edit_by ) {
180 $action = 'elementor';
181 }
182 $url = add_query_arg(
183 [
184 'post' => $page_id,
185 'action' => $action,
186 ],
187 admin_url( 'post.php' )
188 );
189
190 if ( ! empty( $layoutJson['data'] ) ) {
191 $data = json_decode( $layoutJson['data'], true );
192 $content = $this->process_export_import_content( $data, 'on_import' );
193 $content = wp_json_encode( $content );
194 update_post_meta( $page_id, '_elementor_data', $content );
195 update_post_meta( $page_id, '_rtsb_import_id', $import_layout );
196 }
197 }
198
199 do_action( 'rtsb/after/create/and/edit/builder/template', $_POST, $page_id );
200
201 $return = [
202 'success' => true,
203 'post_id' => $page_id,
204 'post_edit_url' => $url,
205 'new_page' => $new_page,
206
207 ];
208 if ( $edit_by ) {
209 $return['edit_btn_text'] = sprintf(
210 /* translators: %s: Edit */
211 esc_html__( 'Edit with %s', 'shopbuilder' ),
212 esc_html( $edit_by )
213 );
214 }
215 wp_send_json( $return );
216 wp_die();
217 }
218 }
219