PluginProbe
Page Builder: Pagelayer – Drag and Drop website builder / 2.1.7
Page Builder: Pagelayer – Drag and Drop website builder v2.1.7
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.1.7, at main/live.php

414 lines 13.5 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 the DateTime picker CSS
75 /* wp_register_style('datetime-picker', PAGELAYER_CSS.'/datetime-picker.css', array(), PAGELAYER_VERSION);
76 wp_enqueue_style('datetime-picker'); */
77
78 // Enqueue the media library
79 if(!did_action('wp_enqueue_media')){
80 wp_enqueue_media();
81 }
82
83 // Force the Frontend CSS and JS if not already loaded
84 pagelayer_enqueue_frontend(true);
85
86 // Hide Admin Bar
87 show_admin_bar(false);
88 remove_action('wp_head', '_admin_bar_bump_cb');
89
90 // Load custom widgets
91 do_action('pagelayer_custom_editor_enqueue');
92
93 // Add the footer scripts
94 add_action('wp_footer', array($this, 'wp_footer'), 1);
95
96 }
97
98 // Add our body class
99 function body_class($classes){
100 return array_merge($classes, array('pagelayer-body'));
101 }
102
103 // Header function to add certain things
104 function wp_head(){
105
106 global $pagelayer, $post, $wp_query, $_wp_post_type_features;
107
108 // Export the post props
109 $_post = clone $post;
110
111 unset($_post->post_content);
112
113 // Add template type
114 if(!empty($pagelayer->template_editor)){
115 $_post->pagelayer_template_type = get_post_meta($_post->ID, 'pagelayer_template_type', true);
116 }
117
118 $returnURL = ($_post->post_type == 'post' ? admin_url('edit.php') : admin_url('edit.php?post_type='.$_post->post_type) );
119
120 // Get CAPTCHA site key
121 $pagelayer_recaptch_site_key = get_option('pagelayer_google_captcha');
122
123 $pro_url = defined('POPULARFX_PRO_URL') ? POPULARFX_PRO_URL : PAGELAYER_PRO_PRICE_URL;
124 $pro_txt = defined('POPULARFX_PRO_URL') ? 'PopularFX Pro' : 'Pagelayer Pro';
125 $post_type = get_post_type_object($post->post_type);
126 $post_type_name = (!empty($post_type->labels->singular_name)) ? $post_type->labels->singular_name : ucfirst($post_type->name);
127
128 // Create list of nav menus and it's items list
129 $pagelayer_menus_items_list = array();
130 $menus = wp_get_nav_menus();
131
132 $referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
133
134 foreach($menus as $menu){
135
136 if(!is_nav_menu($menu)){
137 continue;
138 }
139
140 $pagelayer_menus_items_list[$menu->term_id] = wp_get_nav_menu_items($menu->term_id, array('post_status' => 'any'));
141 }
142
143 echo '
144 <script type="text/javascript">
145 pagelayer_ver = "'.PAGELAYER_VERSION.'";
146 pagelayer_block_prefix = "'.PAGELAYER_BLOCK_PREFIX.'";
147 pagelayer_pro = '.(int)defined('PAGELAYER_PREMIUM').';
148 pagelayer_pro_url = "'.PAGELAYER_PRO_PRICE_URL.'";
149 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.').'";
150 pagelayer_api_url = "'.PAGELAYER_API.'";
151 pagelayer_ajax_url = "'.admin_url( 'admin-ajax.php' ).'?&";
152 pagelayer_post_props = "'.admin_url( 'admin.php?page=pagelayer_meta_setting&post=' ).$post->ID.'";
153 pagelayer_ajax_nonce = "'.wp_create_nonce('pagelayer_ajax').'";
154 pagelayer_media_ajax_nonce = "'.wp_create_nonce('media-form').'";
155 pagelayer_internal_linking_nonce = "'.wp_create_nonce('internal-linking').'";
156 pagelayer_preview_nonce = "'. wp_create_nonce( 'post_preview_' . $post->ID ).'";
157 pagelayer_url = "'.PAGELAYER_URL.'";
158 pagelayer_postID = "'.$post->ID.'";
159 pagelayer_permalink_structure = "'.(empty(get_option('permalink_structure')) ? 0 : 1).'";
160 pagelayer_post_permalink = "'.get_permalink($post->ID).'";
161 pagelayer_tabs = '.json_encode($pagelayer->tabs).';
162 pagelayer_isDirty = false;
163 pagelayer_returnURL = "'.$returnURL.'";
164 pagelayer_theme_vars = '.json_encode( pagelayer_template_vars() ).';
165 pagelayer_revision_obj = '.json_encode( pagelayer_get_post_revision_by_id( $post->ID ) ).';
166 pagelayer_author = '.json_encode(pagelayer_author_data($post->ID)).';
167 pagelayer_site_logo = '.json_encode(pagelayer_site_logo()).';
168 pagelayer_support_FI = "'. ( current_theme_supports('post-thumbnails') ) .'";
169 pagelayer_editable = ".'.(!empty($pagelayer->template_editor) ? $pagelayer->template_editor : 'pagelayer-editable-area').'";
170 pagelayer_recaptch_site_key = "'.(!empty($pagelayer_recaptch_site_key) ? $pagelayer_recaptch_site_key : '').'";
171 pagelayer_post = '. @json_encode($_post) .';
172 pagelayer_loaded_icons = '.json_encode(pagelayer_enabled_icons()).';
173 pagelayer_social_urls = '.json_encode(pagelayer_get_social_urls()).';
174 pagelayer_global_widgets = '.json_encode($pagelayer->global_widgets).';
175 pagelayer_saved_sections = '.json_encode($pagelayer->saved_sections).';
176 pagelayer_global_sections = '.json_encode($pagelayer->global_sections).';
177 pagelayer_brand = "'.addslashes($pagelayer->BRAND_TEXT).'";
178 pagelayer_post_type_features = '.json_encode(@$_wp_post_type_features[$post->post_type]).';
179 pagelayer_post_categories = '.json_encode(pagelayer_post_cats($post)).';
180 pagelayer_post_tags = '.json_encode(pagelayer_post_tags($post)).';
181 pagelayer_shortcodes.pl_post_props.name = "'.ucfirst($post_type_name).' '. __pl('Settings').'";
182 pagelayer_shortcodes.pl_post_props.params.post_author.list = '.json_encode(pagelayer_post_authors_by_type($post->post_type)).';
183 pagelayer_shortcodes.pl_post_props.pageParent.post_parent.list = '.json_encode(pagelayer_parent_post_prop($post)).';
184 pagelayer_gmaps_key = "'.get_option('pagelayer-gmaps-api-key').'";
185 pagelayer_ajax_post_data = {};
186 pagelayer_menus_items_list = '.json_encode($pagelayer_menus_items_list).';
187 pagelayer_customizer_values = '.json_encode(pagelayer_get_customizer_options()).';
188 pagelayer_global_colors = '.json_encode($pagelayer->global_colors).';
189 pagelayer_global_fonts = '.json_encode($pagelayer->global_fonts).';
190 pagelayer_customizer_url = "'.admin_url("/customize.php?return=").urlencode($referer).'";
191 pagelayer_support_url = "'.$pagelayer->support .'";';
192
193 if(defined('PAGELAYER_PREMIUM')){
194 echo 'pagelayer_shortcodes.pl_popup.advance_options.popup_cookie_name.default = "popup_cookie_'.rand(100, 999).'";';
195 }
196
197 // Detect JS via givejs for better performance
198 if(empty($pagelayer->settings['enable_giver'])){
199 echo '
200 jQuery(document).ready(function(){
201 var test_giver = -1;
202
203 return jQuery.ajax({
204 url: "'.PAGELAYER_JS.'/givejs.php?test=1",
205 type: "GET",
206 dataType: "text",
207 success:function(data){
208
209 if(data !== "1"){
210 return;
211 }
212
213 test_giver = 1;
214 },
215 complete:function(data){
216 jQuery.ajax({
217 type: "POST",
218 url: pagelayer_ajax_url+"&action=pagelayer_set_jscss_giver",
219 data: {
220 pagelayer_nonce: pagelayer_ajax_nonce,
221 set : test_giver
222 },
223 error: function(errorThrown){
224 console.log("Error saving giver data");
225 console.log(errorThrown);
226 }
227 });
228
229 }
230 });
231 });
232 ';
233 }
234
235 echo '
236 </script>';
237
238 echo '<style>
239 @media (min-width: '.($pagelayer->settings['tablet_breakpoint'] + 1).'px){
240 .pagelayer-hide-desktop{
241 display:initial;
242 filter:blur(3px);
243 }
244 .pagelayer-hide-desktop *{
245 filter:blur(2px);
246 }
247 }
248
249 @media (max-width: '.$pagelayer->settings['tablet_breakpoint'].'px) and (min-width: '.($pagelayer->settings['mobile_breakpoint'] + 1).'px){
250 .pagelayer-hide-tablet{
251 display:initial;
252 filter:blur(3px);
253 }
254 .pagelayer-hide-tablet *{
255 filter:blur(2px);
256 }
257 }
258
259 @media (max-width: '.$pagelayer->settings['mobile_breakpoint'].'px){
260 .pagelayer-hide-mobile{
261 display:initial;
262 filter:blur(3px);
263 }
264
265 .pagelayer-hide-mobile *{
266 filter:blur(2px);
267 }
268 }
269 </style>';
270 do_action('pagelayer_editor_wp_head');
271
272 }
273
274 // Footer function to add certain things
275 function wp_footer(){
276
277 global $pagelayer;
278
279 echo '<script>
280 pagelayer_default_params = '.json_encode($pagelayer->default_params, JSON_FORCE_OBJECT).';
281 pagelayer.el = '.json_encode($pagelayer->data_attr, JSON_FORCE_OBJECT).';
282 </script>';
283
284 wp_enqueue_script('heartbeat');
285 _wp_footer_scripts();
286 }
287
288 // Convert to Pagelayer post
289 function check_post(){
290
291 global $post;
292
293 // Is this a Pagelayer post
294 $data = get_post_meta($post->ID, 'pagelayer-data', true);
295
296 if(empty($data)){
297
298 // Is it a Gutenburg Post ?
299 if(!empty($post->post_content)){
300
301 // Add our surrounding tag
302 $post->post_content = '<!-- '.PAGELAYER_BLOCK_PREFIX.':pagelayer/pl_row -->
303 <!-- '.PAGELAYER_BLOCK_PREFIX.':pagelayer/pl_col {col=12} -->
304 '.$post->post_content.'
305 <!-- /'.PAGELAYER_BLOCK_PREFIX.':pagelayer/pl_col -->
306 <!-- /'.PAGELAYER_BLOCK_PREFIX.':pagelayer/pl_row -->';
307
308 // Regular post, but its empty so we will add our blocks !
309 }else{
310
311 // Add our surrounding tag
312 $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":""} -->
313 <!-- '.PAGELAYER_BLOCK_PREFIX.':pagelayer/pl_col {"overlay_hover_delay":"400","pagelayer-id":""} -->
314 <!-- /'.PAGELAYER_BLOCK_PREFIX.':pagelayer/pl_col -->
315 <!-- /'.PAGELAYER_BLOCK_PREFIX.':pagelayer/pl_row -->';
316
317 // Update the post
318 $new_post = array(
319 'ID' => $post->ID,
320 'post_content' => $post->post_content,
321 );
322
323 // Update the post into the database
324 wp_update_post($new_post);
325
326 // Convert to pagelayer accessed post
327 if(!add_post_meta($post->ID, 'pagelayer-data', time(), true)){
328 update_post_meta($post->ID, 'pagelayer-data', time());
329 }
330
331 }
332 }
333
334 }
335
336 // Add certain things
337 function the_content($content) {
338
339 global $post, $pagelayer;
340
341 if(empty($pagelayer->dont_make_editable)){
342 $content = '<div class="pagelayer-editable-area">'.$content.'</div>';
343 }
344
345 // Check if we're inside the main loop in a single post page.
346 if ( is_single() && in_the_loop() && is_main_query() ) {
347 return $content;
348 }
349
350 return $content;
351
352 }
353
354 // Skip do_shortcode for invalid shortcodes
355 function pre_do_shortcode_tag($return, $tag, $attr, $m){
356
357 if(!empty($pagelayer->dont_make_editable) || ! doing_filter('the_content')){
358 return $return;
359 }
360
361 $prefixes = ['pl_'];
362
363 $prefixes = apply_filters( 'pagelayer_valid_shortcode_tag', $prefixes);
364
365 $vailid = false;
366
367 foreach($prefixes as $prefix) {
368 if (strpos($tag, $prefix) === 0) {
369 $vailid = true;
370 break;
371 }
372 }
373
374 if($vailid){
375 return $return;
376 }
377
378 return $m[0];
379 }
380
381 // Skip do_blocks for invalid blocks
382 function pre_do_render_block($return, $parsed_block = [], $parent_block = null){
383
384 if(!empty($pagelayer->dont_make_editable) || ! doing_filter('the_content') || empty($parsed_block['blockName'])){
385 return $return;
386 }
387
388 $prefixes = ['pagelayer/'];
389
390 $prefixes = apply_filters( 'pagelayer_valid_block_tag', $prefixes);
391
392 $vailid = false;
393
394 foreach($prefixes as $prefix) {
395 if (strpos($parsed_block['blockName'], $prefix) === 0) {
396 $vailid = true;
397 break;
398 }
399 }
400
401 if($vailid){
402 return $return;
403 }
404
405 $serialize_block = serialize_block($parsed_block);
406
407 $parsed_block['blockName'] = 'pagelayer/pl_missing';
408 $parsed_block['innerHTML'] = $serialize_block;
409 $parsed_block['attrs'] = [];
410
411 return render_block($parsed_block);
412 }
413
414 }