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

200 lines 6.0 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\Core\Files\Uploads_Manager;
6 use Elementor\Plugin;
7 use Elementor\TemplateLibrary\Source_Base;
8 use RadiusTheme\SB\Helpers\BuilderFns;
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 $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 $page_id = isset( $_POST['page_id'] ) ? absint( wp_unslash( $_POST['page_id'] ) ) : null;
73 $page_name = isset( $_POST['page_name'] ) ? sanitize_text_field( wp_unslash( $_POST['page_name'] ) ) : null;
74 $hasPro = isset( $_POST['hasPro'] ) ? sanitize_text_field( wp_unslash( $_POST['hasPro'] ) ) : null;
75 $edit_with = isset( $_POST['template_edit_with'] ) ? sanitize_text_field( wp_unslash( $_POST['template_edit_with'] ) ) : null;
76 $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;
78 $product_id = isset( $_POST['preview_product_id'] ) ? absint( $_POST['preview_product_id'] ) : null;
79
80 $url = '#';
81
82 if ( ! Fns::verify_nonce() || ! $page_type ) {
83 $return = [
84 'success' => false,
85 'post_id' => $page_id,
86 ];
87 wp_send_json( $return );
88
89 }
90
91 add_filter( 'pre_option_elementor_unfiltered_files_upload', function () {
92 return '1';
93 }, 99 );
94
95 Plugin::$instance->files_manager->clear_cache();
96 add_filter( 'rtsb_import_status', '__return_true' );
97
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 $option_name = BuilderFns::option_name( $page_type );
112
113 $post_data = [
114 'ID' => $page_id,
115 'post_title' => $page_name,
116 'meta_input' => [
117 BuilderFns::template_type_meta_key() => $page_type,
118 ],
119 ];
120 if ( 'elementor' == $edit_with ) {
121 $post_data['meta_input']['_elementor_edit_mode'] = 'builder';
122 } elseif ( 'gutenberg' == $edit_with ) {
123 $post_data['meta_input']['_elementor_edit_mode'] = '';
124 }
125
126 if ( $page_id ) {
127 $page_id = wp_update_post( $post_data );
128 $new_page = false;
129 } else {
130 unset( $post_data['ID'] );
131 $post_data['post_type'] = BuilderFns::$post_type_tb;
132 $post_data['post_status'] = 'publish';
133 $page_id = wp_insert_post( $post_data );
134 $new_page = true;
135 if ( 'elementor' == $edit_with ) {
136 update_post_meta( $page_id, '_wp_page_template', 'elementor_header_footer' );
137 update_post_meta( $page_id, '_elementor_version', ELEMENTOR_VERSION );
138 }
139 }
140
141 $edit_by = '';
142 if ( $page_id ) {
143 if ( 'product' == $page_type ) {
144 update_post_meta( $page_id, BuilderFns::$product_template_meta, $product_id );
145 }
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 ) ) {
150 if ( 'default_template' === $default_template ) {
151 // update_option( $option_name, $page_id );
152 TemplateSettings::instance()->set_option( $option_name, $page_id );
153 } else {
154 // $has_default = get_option( $option_name );
155 $has_default = TemplateSettings::instance()->get_option( $option_name );
156 if ( ! $has_default ) {
157 // update_option( $option_name, '' );
158 TemplateSettings::instance()->set_option( $option_name, '' );
159 }
160 }
161 }
162
163 $action = 'edit';
164 if ( 'elementor' === $edit_by ) {
165 $action = 'elementor';
166 }
167 $url = add_query_arg(
168 [
169 'post' => $page_id,
170 'action' => $action,
171 ],
172 admin_url( 'post.php' )
173 );
174
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 );
179 update_post_meta( $page_id, '_elementor_data', $content );
180 update_post_meta( $page_id, '_rtsb_import_id', $import_layout );
181 }
182 }
183
184 do_action( 'rtsb/after/create/and/edit/builder/template', $_POST, $page_id );
185
186 $return = [
187 'success' => true,
188 'post_id' => $page_id,
189 'post_edit_url' => $url,
190 'new_page' => $new_page,
191
192 ];
193 if ( $edit_by ) {
194 $return['edit_btn_text'] = esc_html__( sprintf( 'Edit with %s', $edit_by ), 'shopbuilder' );
195 }
196 wp_send_json( $return );
197 wp_die();
198 }
199 }
200