PluginProbe ʕ •ᴥ•ʔ
Kubio AI Page Builder / 1.2.3
Kubio AI Page Builder v1.2.3
2.9.1 2.9.0 2.8.6 2.8.5 2.8.4 2.8.3 2.8.2 2.8.1 trunk 1.0.0 1.0.1 1.1.0 1.2.0 1.2.1 1.2.2 1.2.3 1.3.0 1.3.1 1.3.2 1.4.0 1.4.1 1.4.2 1.4.3 1.5.0 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.7.0 1.7.1 1.7.2 1.7.3 1.8.0 1.8.1 1.8.2 1.9.0 2.0.0 2.1.1 2.1.2 2.1.3 2.2.0 2.2.3 2.2.4 2.2.5 2.3.0 2.3.1 2.3.3 2.3.4 2.4.0 2.4.1 2.4.2 2.4.3 2.4.5 2.5.0 2.5.1 2.5.2 2.5.3 2.6.0 2.6.1 2.6.2 2.6.3 2.6.5 2.6.6 2.6.7 2.7.0 2.7.1 2.7.2 2.7.3 2.8.0
kubio / lib / preview / index.php
kubio / lib / preview Last commit date
autosaves-preview.php 4 years ago index.php 4 years ago menu-preview.php 4 years ago site-data-preview.php 4 years ago
index.php
254 lines
1 <?php
2
3
4 use IlluminateAgnostic\Arr\Support\Arr;
5
6
7 if ( ! defined( 'ABSPATH' ) ) {
8 exit;
9 }
10
11 /**
12 * @param $uuid
13 *
14 * @return array|null
15 */
16 function kubio_get_changeset_by_uuid( $uuid ) {
17 if ( ! empty( $uuid ) ) {
18
19 if ( $cached = wp_cache_get( "{$uuid}-data", 'kubio/preview' ) ) {
20 return $cached;
21 }
22
23 $args = array(
24 'name' => $uuid,
25 'post_type' => 'kubio_changeset',
26 'post_status' => array( 'publish', 'draft' ),
27 );
28
29 $posts = get_posts( $args );
30
31 if ( ! empty( $posts ) ) {
32 /** @var WP_Post $my_posts */
33 $changeset = $posts[0];
34
35 $content = json_decode( $changeset->post_content, true );
36 wp_cache_set( "{$uuid}-data", $content, 'kubio/preview' );
37
38 return $content;
39 }
40 }
41
42 return null;
43 }
44
45
46 function kubio_get_current_changeset_data( $path = '', $fallback = null ) {
47 static $chanset_data;
48
49 if ( ! $chanset_data ) {
50 $uuid = sanitize_text_field( Arr::get( $_REQUEST, 'kubio-preview', false ) );
51 $chanset_data = kubio_get_changeset_by_uuid( $uuid );
52 }
53
54 if ( empty( $path ) ) {
55 return $chanset_data;
56 }
57
58 return Arr::get( $chanset_data, $path, $fallback );
59
60 }
61
62 function kubio_prepare_changest_post() {
63
64 if ( $cached = wp_cache_get( 'uuid', 'kubio/preview' ) ) {
65 return $cached;
66 }
67
68 $post_type = 'kubio_changeset';
69 $uuid = wp_generate_uuid4();
70
71 // make a bit of a cleanup first
72 $allposts = get_posts(
73 array(
74 'post_type' => $post_type,
75 'numberposts' => - 1,
76 'date_query' => array(
77 'column' => 'post_date',
78 'before' => '- 1 day',
79 ),
80 )
81 );
82
83 foreach ( $allposts as $eachpost ) {
84 wp_delete_post( $eachpost->ID, true );
85 }
86
87 wp_insert_post(
88 array(
89 'post_content' => '', // remove the preery prints
90 'post_status' => 'publish',
91 'post_type' => $post_type,
92 'post_name' => $uuid,
93 'post_title' => $uuid,
94 'guid' => uniqid( "$post_type-" . time() . '-' ),
95 ),
96 false
97 );
98
99 wp_cache_set( 'uuid', $uuid, 'kubio/preview' );
100 wp_cache_set( "{$uuid}-data", array(), 'kubio/preview' );
101
102 return $uuid;
103 }
104
105 function kubio_register_preivew_data_post() {
106
107 $args = array(
108 'label' => __( 'Kubio Preview', 'kubio' ),
109 'public' => false,
110 'show_ui' => false,
111 'show_in_rest' => true,
112 'rest_base' => 'kubio/preview-changeset',
113 'hierarchical' => false,
114 'rewrite' => false,
115 'query_var' => false,
116 'can_export' => false,
117 'delete_with_user' => false,
118 'capabilities' => array(
119 'read' => 'edit_theme_options',
120 'create_posts' => 'edit_theme_options',
121 'edit_posts' => 'edit_theme_options',
122 'edit_published_posts' => 'edit_theme_options',
123 'delete_published_posts' => 'edit_theme_options',
124 'edit_others_posts' => 'edit_theme_options',
125 'delete_others_posts' => 'edit_theme_options',
126 ),
127 'map_meta_cap' => true,
128 'supports' => array(
129 'title',
130 'author',
131 'editor',
132 ),
133 );
134 register_post_type( 'kubio_changeset', $args );
135 }
136
137
138 add_action( 'init', 'kubio_register_preivew_data_post' );
139
140 add_filter(
141 'kubio/block_editor_settings',
142 function ( $settings ) {
143 $settings['changeset_uuid'] = kubio_prepare_changest_post();
144
145 return $settings;
146 }
147 );
148
149
150 // delete changeset when browser refreshes
151 add_action(
152 'wp_ajax_kubio-delete-changeset',
153 function () {
154 $uuid = sanitize_text_field( Arr::get( $_REQUEST, 'uuid', false ) );
155
156 $changeset = kubio_get_changeset_by_uuid( $uuid );
157
158 if ( $changeset && intval( $changeset->post_author ) === get_current_user_id() ) {
159 wp_delete_post( $changeset->ID, true );
160 }
161
162 }
163 );
164
165 function kubio_get_template_part_id_by_slug( $slug, $theme ) {
166 $stylesheet = get_stylesheet();
167 $template = get_template();
168 $template_part_query = new WP_Query(
169 array(
170 'post_type' => 'wp_template_part',
171 'post_status' => array( 'publish' ),
172 'post_name__in' => array( $slug ),
173 'posts_per_page' => 1,
174 'no_found_rows' => true,
175 'tax_query' => array(
176 array(
177 'taxonomy' => 'wp_theme',
178 'field' => 'name',
179 'terms' => array( $stylesheet, $template ),
180 ),
181 ),
182 )
183 );
184
185 return $template_part_query->have_posts() ? $template_part_query->next_post()->ID : null;
186 }
187
188 function kubio_get_template_part_block_id( $block ) {
189 $id = Arr::get( $block, 'attrs.postId', 0 );
190 $slug = Arr::get( $block, 'attrs.slug', '' );
191 $theme = Arr::get( $block, 'attrs.theme', '' );
192
193 if ( $id ) {
194 return $id;
195 }
196
197 return kubio_get_template_part_id_by_slug( $slug, $theme );
198 }
199
200
201 require_once __DIR__ . '/autosaves-preview.php';
202 require_once __DIR__ . '/menu-preview.php';
203 require_once __DIR__ . '/site-data-preview.php';
204
205
206 function kubio_is_page_preview() {
207 return Arr::has( $_REQUEST, 'kubio-preview', false );
208 }
209
210 add_action(
211 'init',
212 function () {
213 $uuid = sanitize_text_field( Arr::get( $_REQUEST, 'kubio-preview', false ) );
214
215 if ( ! empty( $uuid ) ) {
216
217 $changeset_data = kubio_get_current_changeset_data();
218
219 if ( empty( $changeset_data ) ) {
220 wp_die( esc_html__( 'Current preview state is unavailable', 'kubio' ) );
221 }
222
223 show_admin_bar( false );
224 kubio_handle_autosaved_posts_and_templates();
225
226 $custom_entities = kubio_get_current_changeset_data( 'customEntities', array() );
227 $custom_data = (array) kubio_get_current_changeset_data( 'customData', array() );
228
229 foreach ( $custom_entities as $item ) {
230 do_action( 'kubio/preview/handle_custom_entities', $item );
231 }
232
233 do_action( 'kubio/preview/handle_custom_data', $custom_data );
234
235 add_action( 'wp_enqueue_scripts', 'kubio_enqueue_preview_url_maintainer' );
236 } else {
237 if ( isset( $_REQUEST['kubio-random'] ) && ! ( is_admin() || is_customize_preview() ) ) {
238 add_action( 'wp_enqueue_scripts', 'kubio_enqueue_preview_url_maintainer' );
239 }
240 }
241
242 }
243 );
244
245
246 function kubio_enqueue_preview_url_maintainer() {
247 if ( is_user_logged_in() ) {
248 wp_enqueue_script( 'kubio-maintain-preview-url', kubio_url( '/static/maintain-preview-url.js' ), array( 'wp-url' ), KUBIO_VERSION, true );
249 wp_add_inline_script( 'kubio-maintain-preview-url', 'kubioMaintainPreviewURLBase="' . site_url() . '"', 'before' );
250 }
251 }
252
253
254