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