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 +267 -33 1.0.32.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,21 +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'));
46 + add_filter('the_content', array($this, 'the_content'), 999999);
49 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 +
50 54 // Build the Shortcodes MD5 for cache
51 55 $scmd5 = md5(json_encode($pagelayer->shortcodes).json_encode($pagelayer->groups).json_encode($pagelayer->styles));
52 56
57 + $premium_js = apply_filters('pagelayer_editor_give_js', '');
58 + $premium_css = apply_filters('pagelayer_editor_give_css', '');
59 +
53 60 // Enqueue our Editor's JS
54 - wp_register_script('pagelayer-editor', admin_url( 'admin-ajax.php?action=pagelayer_givejs' ).'&give=pagelayer-editor.js,widgets.js,'.(defined('PAGELAYER_PREMIUM') ? 'premium.js,' : '').'properties.js,base-64.js,slimscroll.js,vanilla-picker.min.js,trumbowyg.js,trumbowyg.fontfamily.js,trumbowyg-pagelayer.js,trumbowyg.fontsize.min.js,pen.js,tlite.min.js&pagelayer_nonce=1&scmd5='.$scmd5, 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 +
55 63 wp_enqueue_script('pagelayer-editor');
56 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 +
57 70 // Enqueue the Editor's CSS
58 - 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);
59 72 wp_enqueue_style('pagelayer-editor');
60 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 +
61 80 // Enqueue the DateTime picker CSS
62 81 /* wp_register_style('datetime-picker', PAGELAYER_CSS.'/datetime-picker.css', array(), PAGELAYER_VERSION);
63 82 wp_enqueue_style('datetime-picker'); */
64 83
@@ -89,28 +108,62 @@
89 108
90 109 // Header function to add certain things
91 110 function wp_head(){
92 111
93 - global $pagelayer, $post, $wp_query;
112 + global $pagelayer, $post, $wp_query, $_wp_post_type_features;
94 113
95 114 // Export the post props
96 115 $_post = clone $post;
116 +
97 117 unset($_post->post_content);
98 118
99 - $returnURL = (!is_page($post->ID) ? admin_url('edit.php') : admin_url('edit.php?post_type=page') );
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 + }
100 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 +
101 149 echo '
102 150 <script type="text/javascript">
103 151 pagelayer_ver = "'.PAGELAYER_VERSION.'";
152 +pagelayer_block_prefix = "'.PAGELAYER_BLOCK_PREFIX.'";
104 153 pagelayer_pro = '.(int)defined('PAGELAYER_PREMIUM').';
105 -pagelayer_pro_url = "'.PAGELAYER_PRO_URL.'";
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.').'";
106 156 pagelayer_api_url = "'.PAGELAYER_API.'";
107 157 pagelayer_ajax_url = "'.admin_url( 'admin-ajax.php' ).'?&";
158 +pagelayer_post_props = "'.admin_url( 'admin.php?page=pagelayer_meta_setting&post=' ).$post->ID.'";
108 159 pagelayer_ajax_nonce = "'.wp_create_nonce('pagelayer_ajax').'";
109 160 pagelayer_media_ajax_nonce = "'.wp_create_nonce('media-form').'";
161 +pagelayer_internal_linking_nonce = "'.wp_create_nonce('internal-linking').'";
110 162 pagelayer_preview_nonce = "'. wp_create_nonce( 'post_preview_' . $post->ID ).'";
111 163 pagelayer_url = "'.PAGELAYER_URL.'";
112 164 pagelayer_postID = "'.$post->ID.'";
165 +pagelayer_permalink_structure = "'.(empty(get_option('permalink_structure')) ? 0 : 1).'";
113 166 pagelayer_post_permalink = "'.get_permalink($post->ID).'";
114 167 pagelayer_tabs = '.json_encode($pagelayer->tabs).';
115 168 pagelayer_isDirty = false;
116 169 pagelayer_returnURL = "'.$returnURL.'";
@@ -118,16 +171,121 @@
118 171 pagelayer_revision_obj = '.json_encode( pagelayer_get_post_revision_by_id( $post->ID ) ).';
119 172 pagelayer_author = '.json_encode(pagelayer_author_data($post->ID)).';
120 173 pagelayer_site_logo = '.json_encode(pagelayer_site_logo()).';
121 174 pagelayer_support_FI = "'. ( current_theme_supports('post-thumbnails') ) .'";
122 -pagelayer_editable = ".'.(!empty($pagelayer->template_editor) ? $pagelayer->template_editor : 'entry-content').'";
123 -pagelayer_wp_query = '. json_encode($wp_query->query_vars) .';
124 -pagelayer_post = '. @json_encode($_post) .';
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) .';
125 178 pagelayer_loaded_icons = '.json_encode(pagelayer_enabled_icons()).';
126 -pagelayer_shortcodes.pl_post_props.params.post_title.default = "'.pagelayer_escapeHTML($post->post_title).'";
127 -pagelayer_shortcodes.pl_post_props.params.post_name.default = "'.pagelayer_escapeHTML($post->post_name).'";
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 '
128 254 </script>';
129 -
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>';
130 288 do_action('pagelayer_editor_wp_head');
131 289
132 290 }
133 291
@@ -132,8 +290,16 @@
132 290 }
133 291
134 292 // Footer function to add certain things
135 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 +
136 302 wp_enqueue_script('heartbeat');
137 303 _wp_footer_scripts();
138 304 }
139 305
@@ -147,22 +313,26 @@
147 313
148 314 if(empty($data)){
149 315
150 316 // Is it a Gutenburg Post ?
151 - 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 -->';
152 325
153 - // Regular post
326 + // Regular post, but its empty so we will add our blocks !
154 327 }else{
155 328
156 329 // Add our surrounding tag
157 - $post->post_content = '['.PAGELAYER_SC_PREFIX.'_row]
158 -['.PAGELAYER_SC_PREFIX.'_col col=12]
159 -['.PAGELAYER_SC_PREFIX.'_text]
160 -'.$post->post_content.'
161 -[/'.PAGELAYER_SC_PREFIX.'_text]
162 -[/'.PAGELAYER_SC_PREFIX.'_col]
163 -[/'.PAGELAYER_SC_PREFIX.'_row]';
164 -
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 +
165 335 // Update the post
166 336 $new_post = array(
167 337 'ID' => $post->ID,
168 338 'post_content' => $post->post_content,
@@ -170,13 +340,13 @@
170 340
171 341 // Update the post into the database
172 342 wp_update_post($new_post);
173 343
174 - }
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 + }
175 348
176 - // Convert to pagelayer accessed post
177 - if(!add_post_meta($post->ID, 'pagelayer-data', time(), true)){
178 - update_post_meta($post->ID, 'pagelayer-data', time());
179 349 }
180 350 }
181 351
182 352 }
@@ -183,10 +353,14 @@
183 353
184 354 // Add certain things
185 355 function the_content($content) {
186 356
187 - global $post;
188 -
357 + global $post, $pagelayer;
358 +
359 + if(empty($pagelayer->dont_make_editable)){
360 + $content = '<div class="pagelayer-editable-area">'.$content.'</div>';
361 + }
362 +
189 363 // Check if we're inside the main loop in a single post page.
190 364 if ( is_single() && in_the_loop() && is_main_query() ) {
191 365 return $content;
192 366 }
@@ -193,6 +367,66 @@
193 367
194 368 return $content;
195 369
196 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;
197 384
198 -}
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 +}