PluginProbe
Page Builder: Pagelayer – Drag and Drop website builder / 2.2.0
Page Builder: Pagelayer – Drag and Drop website builder v2.2.0
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
← All changes | main/live.php +291 -32 0.9.22.2.0 View file →
@@ -30,12 +30,10 @@
30 30 // The constructor
31 31 function __construct() {
32 32
33 33 global $pagelayer;
34 -
35 - $GLOBALS['concatenate_scripts'] = true;
36 -
37 - // Convert the post to a PageLayer Post first
34 +
35 + // Convert the post to a Pagelayer Post first
38 36 $this->check_post();
39 37
40 38 // Add the shortcodes
41 39 // TODO : Make a json file
@@ -44,18 +42,42 @@
44 42 // Add the Body Class Filter
45 43 //add_filter('body_class', array($this, 'body_class'));
46 44
47 45 // Add the content handler
48 - add_filter('the_content', array($this, 'the_content'));
49 -
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 +
50 60 // Enqueue our Editor's JS
51 - wp_register_script('pagelayer-editor', PAGELAYER_JS.'/givejs.php?give=pagelayer-editor.js,widgets.js,'.(defined('PAGELAYER_PREMIUM') ? 'premium.js,' : '').'properties.js,base64.js,slimscroll.js,vanilla-picker.min.js,trumbowyg.js,trumbowyg-pagelayer.js,pen.js', array('jquery'), PAGELAYER_VERSION);
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 +
52 63 wp_enqueue_script('pagelayer-editor');
53 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 +
54 70 // Enqueue the Editor's CSS
55 - wp_register_style('pagelayer-editor', PAGELAYER_CSS.'/givecss.php?give=pagelayer-editor-frontend.css,pen.css', array(), PAGELAYER_VERSION);
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);
56 72 wp_enqueue_style('pagelayer-editor');
57 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 +
58 80 // Enqueue the DateTime picker CSS
59 81 /* wp_register_style('datetime-picker', PAGELAYER_CSS.'/datetime-picker.css', array(), PAGELAYER_VERSION);
60 82 wp_enqueue_style('datetime-picker'); */
61 83
@@ -68,8 +90,9 @@
68 90 pagelayer_enqueue_frontend(true);
69 91
70 92 // Hide Admin Bar
71 93 show_admin_bar(false);
94 + remove_action('wp_head', '_admin_bar_bump_cb');
72 95
73 96 // Load custom widgets
74 97 do_action('pagelayer_custom_editor_enqueue');
75 98
@@ -85,30 +108,198 @@
85 108
86 109 // Header function to add certain things
87 110 function wp_head(){
88 111
89 - global $pagelayer, $post;
112 + global $pagelayer, $post, $wp_query, $_wp_post_type_features;
90 113
91 - $returnURL = (!is_page($post->ID) ? admin_url('edit.php') : admin_url('edit.php?post_type=page') );
114 + // Export the post props
115 + $_post = clone $post;
92 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 +
93 149 echo '
94 150 <script type="text/javascript">
95 -pagelayer_ver = "'.PAGELAYER_VERSION .'";
96 -pagelayer_shortcodes = '.json_encode($pagelayer->shortcodes).';
97 -pagelayer_styles = '.json_encode($pagelayer->styles).';
98 -pagelayer_groups = '.json_encode($pagelayer->groups).';
99 -pagelayer_ajax_url = "'.admin_url( 'admin-ajax.php' ).'";
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.'";
100 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 ).'";
101 163 pagelayer_url = "'.PAGELAYER_URL.'";
102 164 pagelayer_postID = "'.$post->ID.'";
165 +pagelayer_permalink_structure = "'.(empty(get_option('permalink_structure')) ? 0 : 1).'";
166 +pagelayer_post_permalink = "'.get_permalink($post->ID).'";
103 167 pagelayer_tabs = '.json_encode($pagelayer->tabs).';
104 168 pagelayer_isDirty = false;
105 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 '
106 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 +
107 290 }
108 291
109 292 // Footer function to add certain things
110 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 +
111 302 wp_enqueue_script('heartbeat');
112 303 _wp_footer_scripts();
113 304 }
114 305
@@ -122,22 +313,26 @@
122 313
123 314 if(empty($data)){
124 315
125 316 // Is it a Gutenburg Post ?
126 - if(false){
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 -->';
127 325
128 - // Regular post
326 + // Regular post, but its empty so we will add our blocks !
129 327 }else{
130 328
131 329 // Add our surrounding tag
132 - $post->post_content = '['.PAGELAYER_SC_PREFIX.'_row]
133 -['.PAGELAYER_SC_PREFIX.'_col col=12]
134 -['.PAGELAYER_SC_PREFIX.'_text]
135 -'.$post->post_content.'
136 -[/'.PAGELAYER_SC_PREFIX.'_text]
137 -[/'.PAGELAYER_SC_PREFIX.'_col]
138 -[/'.PAGELAYER_SC_PREFIX.'_row]';
139 -
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 +
140 335 // Update the post
141 336 $new_post = array(
142 337 'ID' => $post->ID,
143 338 'post_content' => $post->post_content,
@@ -145,13 +340,13 @@
145 340
146 341 // Update the post into the database
147 342 wp_update_post($new_post);
148 343
149 - }
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 + }
150 348
151 - // Convert to pagelayer accessed post
152 - if(!add_post_meta($post->ID, 'pagelayer-data', time(), true)){
153 - update_post_meta($post->ID, 'pagelayer-data', time());
154 349 }
155 350 }
156 351
157 352 }
@@ -158,10 +353,14 @@
158 353
159 354 // Add certain things
160 355 function the_content($content) {
161 356
162 - global $post;
163 -
357 + global $post, $pagelayer;
358 +
359 + if(empty($pagelayer->dont_make_editable)){
360 + $content = '<div class="pagelayer-editable-area">'.$content.'</div>';
361 + }
362 +
164 363 // Check if we're inside the main loop in a single post page.
165 364 if ( is_single() && in_the_loop() && is_main_query() ) {
166 365 return $content;
167 366 }
@@ -168,6 +367,66 @@
168 367
169 368 return $content;
170 369
171 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;
172 384
173 -}
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 +}