PluginProbe
Page Builder: Pagelayer – Drag and Drop website builder / 2.2.1
Page Builder: Pagelayer – Drag and Drop website builder v2.2.1
2.2.1 2.2.0 2.1.9 2.1.8 2.1.7 2.1.6 2.1.5 2.1.4 2.1.3 trunk 0.9.0 0.9.1 0.9.2 0.9.3 0.9.4 0.9.5 0.9.6 0.9.7 0.9.8 0.9.9 1.0.0 1.0.2 1.0.3 1.0.4 1.0.5 All 129 releases
pagelayer / main / live.php

live.php in Page Builder: Pagelayer – Drag and Drop website builder 2.2.1, at main/live.php

432 lines 14.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 //////////////////////////////////////////////////////////////
4 //===========================================================
5 // live.php
6 //===========================================================
7 // PAGELAYER
8 // Inspired by the DESIRE to be the BEST OF ALL
9 // ----------------------------------------------------------
10 // Started by: Pulkit Gupta
11 // Date: 23rd Jan 2017
12 // Time: 23:00 hrs
13 // Site: http://pagelayer.com/wordpress (PAGELAYER)
14 // ----------------------------------------------------------
15 // Please Read the Terms of use at http://pagelayer.com/tos
16 // ----------------------------------------------------------
17 //===========================================================
18 // (c)Pagelayer Team
19 //===========================================================
20 //////////////////////////////////////////////////////////////
21
22 // Are we being accessed directly ?
23 if(!defined('PAGELAYER_VERSION')) {
24 exit('Hacking Attempt !');
25 }
26
27
28 class PageLayer_LiveEditor{
29
30 // The constructor
31 function __construct() {
32
33 global $pagelayer;
34
35 // Convert the post to a Pagelayer Post first
36 $this->check_post();
37
38 // Add the shortcodes
39 // TODO : Make a json file
40 add_action('wp_head', array($this, 'wp_head'), 999);
41
42 // Add the Body Class Filter
43 //add_filter('body_class', array($this, 'body_class'));
44
45 // Add the content handler
46 add_filter('the_content', array($this, 'the_content'), 999999);
47
48 // Skip do_blocks for invalid blocks
49 add_filter( 'pre_render_block', array($this, 'pre_do_render_block'), 10, 3 );
50
51 // Skip do_shortcode for invalid shortcodes
52 add_filter( 'pre_do_shortcode_tag', array($this, 'pre_do_shortcode_tag'), 10, 4 );
53
54 // Build the Shortcodes MD5 for cache
55 $scmd5 = md5(json_encode($pagelayer->shortcodes).json_encode($pagelayer->groups).json_encode($pagelayer->styles));
56
57 $premium_js = apply_filters('pagelayer_editor_give_js', '');
58 $premium_css = apply_filters('pagelayer_editor_give_css', '');
59
60 // Enqueue our Editor's JS
61 wp_register_script('pagelayer-editor', admin_url( 'admin-ajax.php?action=pagelayer_givejs' ).'&give=pagelayer-editor.js,widgets.js,properties.js,base-64.min.js,slimscroll.js,vanilla-picker.min.js,trumbowyg.js,trumbowyg.fontfamily.js,trumbowyg-pagelayer.js,tlite.min.js,pagelayer-pen.js'.$premium_js.'&pagelayer_nonce=1&scmd5='.$scmd5, array('jquery'), PAGELAYER_VERSION);
62
63 wp_enqueue_script('pagelayer-editor');
64
65 $css_url = admin_url('admin-ajax.php?action=pagelayer_givecss&pagelayer_nonce=1&');
66 if(pagelayer_enable_giver()){
67 $css_url = PAGELAYER_CSS.'/givecss.php?';
68 }
69
70 // Enqueue the Editor's CSS
71 wp_register_style('pagelayer-editor', $css_url.'give=pagelayer-editor-frontend.css,pagelayer-pen.css,'.(defined('PAGELAYER_PREMIUM') ? ',owl.theme.default.min.css,owl.carousel.min.css' : '').$premium_css, array(), PAGELAYER_VERSION);
72 wp_enqueue_style('pagelayer-editor');
73
74 // Enqueue AI Layout Generator
75 wp_register_script('pagelayer-ai', PAGELAYER_JS.'/pagelayer-ai.js', array('jquery', 'pagelayer-editor'), PAGELAYER_VERSION, true);
76 wp_enqueue_script('pagelayer-ai');
77 wp_register_style('pagelayer-ai', PAGELAYER_CSS.'/pagelayer-ai.css', array(), PAGELAYER_VERSION);
78 wp_enqueue_style('pagelayer-ai');
79
80 // Enqueue the DateTime picker CSS
81 /* wp_register_style('datetime-picker', PAGELAYER_CSS.'/datetime-picker.css', array(), PAGELAYER_VERSION);
82 wp_enqueue_style('datetime-picker'); */
83
84 // Enqueue the media library
85 if(!did_action('wp_enqueue_media')){
86 wp_enqueue_media();
87 }
88
89 // Force the Frontend CSS and JS if not already loaded
90 pagelayer_enqueue_frontend(true);
91
92 // Hide Admin Bar
93 show_admin_bar(false);
94 remove_action('wp_head', '_admin_bar_bump_cb');
95
96 // Load custom widgets
97 do_action('pagelayer_custom_editor_enqueue');
98
99 // Add the footer scripts
100 add_action('wp_footer', array($this, 'wp_footer'), 1);
101
102 }
103
104 // Add our body class
105 function body_class($classes){
106 return array_merge($classes, array('pagelayer-body'));
107 }
108
109 // Header function to add certain things
110 function wp_head(){
111
112 global $pagelayer, $post, $wp_query, $_wp_post_type_features;
113
114 // Export the post props
115 $_post = clone $post;
116
117 unset($_post->post_content);
118
119 // Add template type
120 if(!empty($pagelayer->template_editor)){
121 $_post->pagelayer_template_type = get_post_meta($_post->ID, 'pagelayer_template_type', true);
122 }
123
124 $returnURL = ($_post->post_type == 'post' ? admin_url('edit.php') : admin_url('edit.php?post_type='.$_post->post_type) );
125
126 // Get CAPTCHA site key
127 $pagelayer_recaptch_site_key = get_option('pagelayer_google_captcha');
128
129 $pro_url = defined('POPULARFX_PRO_URL') ? POPULARFX_PRO_URL : PAGELAYER_PRO_PRICE_URL;
130 $pro_txt = defined('POPULARFX_PRO_URL') ? 'PopularFX Pro' : 'Pagelayer Pro';
131 $post_type = get_post_type_object($post->post_type);
132 $post_type_name = (!empty($post_type->labels->singular_name)) ? $post_type->labels->singular_name : ucfirst($post_type->name);
133
134 // Create list of nav menus and it's items list
135 $pagelayer_menus_items_list = array();
136 $menus = wp_get_nav_menus();
137
138 $referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
139
140 foreach($menus as $menu){
141
142 if(!is_nav_menu($menu)){
143 continue;
144 }
145
146 $pagelayer_menus_items_list[$menu->term_id] = wp_get_nav_menu_items($menu->term_id, array('post_status' => 'any'));
147 }
148
149 echo '
150 <script type="text/javascript">
151 pagelayer_ver = "'.PAGELAYER_VERSION.'";
152 pagelayer_block_prefix = "'.PAGELAYER_BLOCK_PREFIX.'";
153 pagelayer_pro = '.(int)defined('PAGELAYER_PREMIUM').';
154 pagelayer_pro_url = "'.PAGELAYER_PRO_PRICE_URL.'";
155 pagelayer_pro_txt = "'.addslashes('This feature is a part of <a href="'.$pro_url.'" target="_blank">'.$pro_txt.'</a>. You will need purchase <a href="'.$pro_url.'" target="_blank">'.$pro_txt.'</a> to use this feature.').'";
156 pagelayer_api_url = "'.PAGELAYER_API.'";
157 pagelayer_ajax_url = "'.admin_url( 'admin-ajax.php' ).'?&";
158 pagelayer_post_props = "'.admin_url( 'admin.php?page=pagelayer_meta_setting&post=' ).$post->ID.'";
159 pagelayer_ajax_nonce = "'.wp_create_nonce('pagelayer_ajax').'";
160 pagelayer_media_ajax_nonce = "'.wp_create_nonce('media-form').'";
161 pagelayer_internal_linking_nonce = "'.wp_create_nonce('internal-linking').'";
162 pagelayer_preview_nonce = "'. wp_create_nonce( 'post_preview_' . $post->ID ).'";
163 pagelayer_url = "'.PAGELAYER_URL.'";
164 pagelayer_postID = "'.$post->ID.'";
165 pagelayer_permalink_structure = "'.(empty(get_option('permalink_structure')) ? 0 : 1).'";
166 pagelayer_post_permalink = "'.get_permalink($post->ID).'";
167 pagelayer_tabs = '.json_encode($pagelayer->tabs).';
168 pagelayer_isDirty = false;
169 pagelayer_returnURL = "'.$returnURL.'";
170 pagelayer_theme_vars = '.json_encode( pagelayer_template_vars() ).';
171 pagelayer_revision_obj = '.json_encode( pagelayer_get_post_revision_by_id( $post->ID ) ).';
172 pagelayer_author = '.json_encode(pagelayer_author_data($post->ID)).';
173 pagelayer_site_logo = '.json_encode(pagelayer_site_logo()).';
174 pagelayer_support_FI = "'. ( current_theme_supports('post-thumbnails') ) .'";
175 pagelayer_editable = ".'.(!empty($pagelayer->template_editor) ? $pagelayer->template_editor : 'pagelayer-editable-area').'";
176 pagelayer_recaptch_site_key = "'.(!empty($pagelayer_recaptch_site_key) ? $pagelayer_recaptch_site_key : '').'";
177 pagelayer_post = '. @json_encode($_post) .';
178 pagelayer_loaded_icons = '.json_encode(pagelayer_enabled_icons()).';
179 pagelayer_social_urls = '.json_encode(pagelayer_get_social_urls()).';
180 pagelayer_global_widgets = '.json_encode($pagelayer->global_widgets).';
181 pagelayer_saved_sections = '.json_encode($pagelayer->saved_sections).';
182 pagelayer_global_sections = '.json_encode($pagelayer->global_sections).';
183 pagelayer_brand = "'.addslashes($pagelayer->BRAND_TEXT).'";
184 pagelayer_post_type_features = '.json_encode(@$_wp_post_type_features[$post->post_type]).';
185 pagelayer_post_categories = '.json_encode(pagelayer_post_cats($post)).';
186 pagelayer_post_tags = '.json_encode(pagelayer_post_tags($post)).';
187 pagelayer_shortcodes.pl_post_props.name = "'.ucfirst($post_type_name).' '. __pl('Settings').'";
188 pagelayer_shortcodes.pl_post_props.params.post_author.list = '.json_encode(pagelayer_post_authors_by_type($post->post_type)).';
189 pagelayer_shortcodes.pl_post_props.pageParent.post_parent.list = '.json_encode(pagelayer_parent_post_prop($post)).';
190 pagelayer_gmaps_key = "'.get_option('pagelayer-gmaps-api-key').'";
191 pagelayer_ajax_post_data = {};
192 pagelayer_menus_items_list = '.json_encode($pagelayer_menus_items_list).';
193 pagelayer_customizer_values = '.json_encode(pagelayer_get_customizer_options()).';
194 pagelayer_global_colors = '.json_encode($pagelayer->global_colors).';
195 pagelayer_global_fonts = '.json_encode($pagelayer->global_fonts).';
196 pagelayer_customizer_url = "'.admin_url("/customize.php?return=").urlencode($referer).'";
197 pagelayer_support_url = "'.$pagelayer->support .'";
198 pagelayer_ai_settings = '.json_encode(array(
199 'rest_url' => esc_url_raw(rest_url('pagelayer/v1/ai/')),
200 'nonce' => wp_create_nonce('wp_rest'),
201 'ajax_url' => admin_url('admin-ajax.php'),
202 'ajax_nonce' => wp_create_nonce('pagelayer_ajax'),
203 'css_url' => PAGELAYER_CSS.'/pagelayer-ai.css',
204 'current_post_id' => $post->ID,
205 'current_post_title' => $post->post_title,
206 'has_custom_globals' => class_exists('Pagelayer_AI_Layout_Engine') ? Pagelayer_AI_Layout_Engine::instance()->has_custom_globals() : false,
207 'providers' => class_exists('Pagelayer_AI_Controller') ? Pagelayer_AI_Controller::get_instance()->get_available_models() : array(),
208 'user_settings' => class_exists('Pagelayer_AI_Controller') ? Pagelayer_AI_Controller::get_instance()->get_user_ai_settings() : array(),
209 )).';';
210
211 if(defined('PAGELAYER_PREMIUM')){
212 echo 'pagelayer_shortcodes.pl_popup.advance_options.popup_cookie_name.default = "popup_cookie_'.rand(100, 999).'";';
213 }
214
215 // Detect JS via givejs for better performance
216 if(empty($pagelayer->settings['enable_giver'])){
217 echo '
218 jQuery(document).ready(function(){
219 var test_giver = -1;
220
221 return jQuery.ajax({
222 url: "'.PAGELAYER_JS.'/givejs.php?test=1",
223 type: "GET",
224 dataType: "text",
225 success:function(data){
226
227 if(data !== "1"){
228 return;
229 }
230
231 test_giver = 1;
232 },
233 complete:function(data){
234 jQuery.ajax({
235 type: "POST",
236 url: pagelayer_ajax_url+"&action=pagelayer_set_jscss_giver",
237 data: {
238 pagelayer_nonce: pagelayer_ajax_nonce,
239 set : test_giver
240 },
241 error: function(errorThrown){
242 console.log("Error saving giver data");
243 console.log(errorThrown);
244 }
245 });
246
247 }
248 });
249 });
250 ';
251 }
252
253 echo '
254 </script>';
255
256 echo '<style>
257 @media (min-width: '.($pagelayer->settings['tablet_breakpoint'] + 1).'px){
258 .pagelayer-hide-desktop{
259 display:initial;
260 filter:blur(3px);
261 }
262 .pagelayer-hide-desktop *{
263 filter:blur(2px);
264 }
265 }
266
267 @media (max-width: '.$pagelayer->settings['tablet_breakpoint'].'px) and (min-width: '.($pagelayer->settings['mobile_breakpoint'] + 1).'px){
268 .pagelayer-hide-tablet{
269 display:initial;
270 filter:blur(3px);
271 }
272 .pagelayer-hide-tablet *{
273 filter:blur(2px);
274 }
275 }
276
277 @media (max-width: '.$pagelayer->settings['mobile_breakpoint'].'px){
278 .pagelayer-hide-mobile{
279 display:initial;
280 filter:blur(3px);
281 }
282
283 .pagelayer-hide-mobile *{
284 filter:blur(2px);
285 }
286 }
287 </style>';
288 do_action('pagelayer_editor_wp_head');
289
290 }
291
292 // Footer function to add certain things
293 function wp_footer(){
294
295 global $pagelayer;
296
297 echo '<script>
298 pagelayer_default_params = '.json_encode($pagelayer->default_params, JSON_FORCE_OBJECT).';
299 pagelayer.el = '.json_encode($pagelayer->data_attr, JSON_FORCE_OBJECT).';
300 </script>';
301
302 wp_enqueue_script('heartbeat');
303 _wp_footer_scripts();
304 }
305
306 // Convert to Pagelayer post
307 function check_post(){
308
309 global $post;
310
311 // Is this a Pagelayer post
312 $data = get_post_meta($post->ID, 'pagelayer-data', true);
313
314 if(empty($data)){
315
316 // Is it a Gutenburg Post ?
317 if(!empty($post->post_content)){
318
319 // Add our surrounding tag
320 $post->post_content = '<!-- '.PAGELAYER_BLOCK_PREFIX.':pagelayer/pl_row -->
321 <!-- '.PAGELAYER_BLOCK_PREFIX.':pagelayer/pl_col {col=12} -->
322 '.$post->post_content.'
323 <!-- /'.PAGELAYER_BLOCK_PREFIX.':pagelayer/pl_col -->
324 <!-- /'.PAGELAYER_BLOCK_PREFIX.':pagelayer/pl_row -->';
325
326 // Regular post, but its empty so we will add our blocks !
327 }else{
328
329 // Add our surrounding tag
330 $post->post_content = '<!-- '.PAGELAYER_BLOCK_PREFIX.':pagelayer/pl_row {"stretch":"auto","col_gap":"10","width_content":"auto","row_height":"default","overlay_hover_delay":"400","row_shape_top_color":"#227bc3","row_shape_top_width":"100","row_shape_top_height":"100","row_shape_bottom_color":"#e44993","row_shape_bottom_width":"100","row_shape_bottom_height":"100","pagelayer-id":""} -->
331 <!-- '.PAGELAYER_BLOCK_PREFIX.':pagelayer/pl_col {"overlay_hover_delay":"400","pagelayer-id":""} -->
332 <!-- /'.PAGELAYER_BLOCK_PREFIX.':pagelayer/pl_col -->
333 <!-- /'.PAGELAYER_BLOCK_PREFIX.':pagelayer/pl_row -->';
334
335 // Update the post
336 $new_post = array(
337 'ID' => $post->ID,
338 'post_content' => $post->post_content,
339 );
340
341 // Update the post into the database
342 wp_update_post($new_post);
343
344 // Convert to pagelayer accessed post
345 if(!add_post_meta($post->ID, 'pagelayer-data', time(), true)){
346 update_post_meta($post->ID, 'pagelayer-data', time());
347 }
348
349 }
350 }
351
352 }
353
354 // Add certain things
355 function the_content($content) {
356
357 global $post, $pagelayer;
358
359 if(empty($pagelayer->dont_make_editable)){
360 $content = '<div class="pagelayer-editable-area">'.$content.'</div>';
361 }
362
363 // Check if we're inside the main loop in a single post page.
364 if ( is_single() && in_the_loop() && is_main_query() ) {
365 return $content;
366 }
367
368 return $content;
369
370 }
371
372 // Skip do_shortcode for invalid shortcodes
373 function pre_do_shortcode_tag($return, $tag, $attr, $m){
374
375 if(!empty($pagelayer->dont_make_editable) || ! doing_filter('the_content')){
376 return $return;
377 }
378
379 $prefixes = ['pl_'];
380
381 $prefixes = apply_filters( 'pagelayer_valid_shortcode_tag', $prefixes);
382
383 $vailid = false;
384
385 foreach($prefixes as $prefix) {
386 if (strpos($tag, $prefix) === 0) {
387 $vailid = true;
388 break;
389 }
390 }
391
392 if($vailid){
393 return $return;
394 }
395
396 return $m[0];
397 }
398
399 // Skip do_blocks for invalid blocks
400 function pre_do_render_block($return, $parsed_block = [], $parent_block = null){
401
402 if(!empty($pagelayer->dont_make_editable) || ! doing_filter('the_content') || empty($parsed_block['blockName'])){
403 return $return;
404 }
405
406 $prefixes = ['pagelayer/'];
407
408 $prefixes = apply_filters( 'pagelayer_valid_block_tag', $prefixes);
409
410 $vailid = false;
411
412 foreach($prefixes as $prefix) {
413 if (strpos($parsed_block['blockName'], $prefix) === 0) {
414 $vailid = true;
415 break;
416 }
417 }
418
419 if($vailid){
420 return $return;
421 }
422
423 $serialize_block = serialize_block($parsed_block);
424
425 $parsed_block['blockName'] = 'pagelayer/pl_missing';
426 $parsed_block['innerHTML'] = $serialize_block;
427 $parsed_block['attrs'] = [];
428
429 return render_block($parsed_block);
430 }
431
432 }