PluginProbe
Page Builder: Pagelayer – Drag and Drop website builder / 2.2.2
Page Builder: Pagelayer – Drag and Drop website builder v2.2.2
2.2.2 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 All 130 releases
← All changes | main/live.php +286 -34 0.9.7 → 2.2.2 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.fontfamily.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'.(defined('PAGELAYER_PREMIUM') ? ',owl.theme.default.min.css,owl.carousel.min.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,37 +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).'";
103 166 pagelayer_post_permalink = "'.get_permalink($post->ID).'";
104 167 pagelayer_tabs = '.json_encode($pagelayer->tabs).';
105 168 pagelayer_isDirty = false;
106 169 pagelayer_returnURL = "'.$returnURL.'";
170 +pagelayer_theme_vars = '.json_encode( pagelayer_template_vars() ).';
107 171 pagelayer_revision_obj = '.json_encode( pagelayer_get_post_revision_by_id( $post->ID ) ).';
108 172 pagelayer_author = '.json_encode(pagelayer_author_data($post->ID)).';
109 173 pagelayer_site_logo = '.json_encode(pagelayer_site_logo()).';
110 -pagelayer_postTitle = "'. ( isset( $post->post_title ) ? $post->post_title : '' ) .'";
111 174 pagelayer_support_FI = "'. ( current_theme_supports('post-thumbnails') ) .'";
112 -pagelayer_editable = ".'.(!empty($pagelayer->template_editor) ? $pagelayer->template_editor : 'entry-content').'";
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 '
113 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 +
114 290 }
115 291
116 292 // Footer function to add certain things
117 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 +
118 302 wp_enqueue_script('heartbeat');
119 303 _wp_footer_scripts();
120 304 }
121 305
@@ -129,22 +313,26 @@
129 313
130 314 if(empty($data)){
131 315
132 316 // Is it a Gutenburg Post ?
133 - 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 -->';
134 325
135 - // Regular post
326 + // Regular post, but its empty so we will add our blocks !
136 327 }else{
137 328
138 329 // Add our surrounding tag
139 - $post->post_content = '['.PAGELAYER_SC_PREFIX.'_row]
140 -['.PAGELAYER_SC_PREFIX.'_col col=12]
141 -['.PAGELAYER_SC_PREFIX.'_text]
142 -'.$post->post_content.'
143 -[/'.PAGELAYER_SC_PREFIX.'_text]
144 -[/'.PAGELAYER_SC_PREFIX.'_col]
145 -[/'.PAGELAYER_SC_PREFIX.'_row]';
146 -
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 +
147 335 // Update the post
148 336 $new_post = array(
149 337 'ID' => $post->ID,
150 338 'post_content' => $post->post_content,
@@ -152,13 +340,13 @@
152 340
153 341 // Update the post into the database
154 342 wp_update_post($new_post);
155 343
156 - }
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 + }
157 348
158 - // Convert to pagelayer accessed post
159 - if(!add_post_meta($post->ID, 'pagelayer-data', time(), true)){
160 - update_post_meta($post->ID, 'pagelayer-data', time());
161 349 }
162 350 }
163 351
164 352 }
@@ -165,10 +353,14 @@
165 353
166 354 // Add certain things
167 355 function the_content($content) {
168 356
169 - global $post;
170 -
357 + global $post, $pagelayer;
358 +
359 + if(empty($pagelayer->dont_make_editable)){
360 + $content = '<div class="pagelayer-editable-area">'.$content.'</div>';
361 + }
362 +
171 363 // Check if we're inside the main loop in a single post page.
172 364 if ( is_single() && in_the_loop() && is_main_query() ) {
173 365 return $content;
174 366 }
@@ -175,6 +367,66 @@
175 367
176 368 return $content;
177 369
178 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;
179 384
180 -}
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 +}