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 +290 -32 0.9.52.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,31 +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() ).';
106 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 '
107 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 +
108 290 }
109 291
110 292 // Footer function to add certain things
111 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 +
112 302 wp_enqueue_script('heartbeat');
113 303 _wp_footer_scripts();
114 304 }
115 305
@@ -123,22 +313,26 @@
123 313
124 314 if(empty($data)){
125 315
126 316 // Is it a Gutenburg Post ?
127 - 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 -->';
128 325
129 - // Regular post
326 + // Regular post, but its empty so we will add our blocks !
130 327 }else{
131 328
132 329 // Add our surrounding tag
133 - $post->post_content = '['.PAGELAYER_SC_PREFIX.'_row]
134 -['.PAGELAYER_SC_PREFIX.'_col col=12]
135 -['.PAGELAYER_SC_PREFIX.'_text]
136 -'.$post->post_content.'
137 -[/'.PAGELAYER_SC_PREFIX.'_text]
138 -[/'.PAGELAYER_SC_PREFIX.'_col]
139 -[/'.PAGELAYER_SC_PREFIX.'_row]';
140 -
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 +
141 335 // Update the post
142 336 $new_post = array(
143 337 'ID' => $post->ID,
144 338 'post_content' => $post->post_content,
@@ -146,13 +340,13 @@
146 340
147 341 // Update the post into the database
148 342 wp_update_post($new_post);
149 343
150 - }
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 + }
151 348
152 - // Convert to pagelayer accessed post
153 - if(!add_post_meta($post->ID, 'pagelayer-data', time(), true)){
154 - update_post_meta($post->ID, 'pagelayer-data', time());
155 349 }
156 350 }
157 351
158 352 }
@@ -159,10 +353,14 @@
159 353
160 354 // Add certain things
161 355 function the_content($content) {
162 356
163 - global $post;
164 -
357 + global $post, $pagelayer;
358 +
359 + if(empty($pagelayer->dont_make_editable)){
360 + $content = '<div class="pagelayer-editable-area">'.$content.'</div>';
361 + }
362 +
165 363 // Check if we're inside the main loop in a single post page.
166 364 if ( is_single() && in_the_loop() && is_main_query() ) {
167 365 return $content;
168 366 }
@@ -169,6 +367,66 @@
169 367
170 368 return $content;
171 369
172 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;
173 384
174 -}
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 +}