????
Current Path : /home/innovagencyco/www/abtest.innovagency.co.za/wp-content/plugins/pagelayer/main/ |
Current File : /home/innovagencyco/www/abtest.innovagency.co.za/wp-content/plugins/pagelayer/main/blocks.php |
<?php ////////////////////////////////////////////////////////////// //=========================================================== // PAGELAYER // Inspired by the DESIRE to be the BEST OF ALL // ---------------------------------------------------------- // Started by: Pulkit Gupta // Date: 23rd Jan 2017 // Time: 23:00 hrs // Site: http://pagelayer.com/wordpress (PAGELAYER) // ---------------------------------------------------------- // Please Read the Terms of use at http://pagelayer.com/tos // ---------------------------------------------------------- //=========================================================== // (c)Pagelayer Team //=========================================================== ////////////////////////////////////////////////////////////// // Are we being accessed directly ? if(!defined('PAGELAYER_VERSION')) { exit('Hacking Attempt !'); } if( version_compare( get_bloginfo( 'version' ), '5.8', '>=' ) ){ add_filter( 'block_categories_all', 'pagelayer_block_category', 999999999); }else{ add_filter( 'block_categories', 'pagelayer_block_category', 999999999 ); } function pagelayer_block_category( $categories ) { // Create a custom category and add it at the beginning of the list array_unshift($categories, array( 'slug' => 'pagelayer', 'title' => 'Pagelayer', )); return $categories; } function pagelayer_block_name_by_tag($tag){ return 'pagelayer/' . str_replace('_', '-', $tag); } add_action('template_redirect', 'pagelayer_block_init'); function pagelayer_block_init(){ global $pagelayer; if(!function_exists('register_block_type') || !pagelayer_has_blocks()){ return; } // Load shortcode pagelayer_load_shortcodes(); $pl_blocks_styles = $pagelayer->styles; $pl_attrs = []; foreach ($pagelayer->shortcodes as $block => $pl_props) { if(!empty($pl_props['no_gt']) || $pl_props['group'] == 'woocommerce'){ continue; } // Create attribute Object $attributes = []; $pagelayer_tabs = ['settings', 'options']; foreach($pagelayer_tabs as $tab){ $section_close = false; // First section always open foreach($pl_props[$tab] as $section => $props){ $props = array_key_exists($section, $pl_props) ? $pl_props[$section] : $pl_blocks_styles[$section]; // Reset / Create the cache foreach($props as $x => $prop){ $attributes[$x] = [ 'type' => $prop['type'] ]; if ($prop['type'] === 'image') { $attributes['pagelayer-srcset'] = [ 'type' => 'string' ]; } // Are we to set this value? if (isset($prop['default']) && !empty($prop['default'])) { $tmp_val = $prop['default']; // If there is a unit and there is no unit suffix in atts value if(isset($prop['units'])){ if (is_numeric($tmp_val)) { $tmp_val = $tmp_val . $prop['units'][0]; } else { $sep = isset($prop['sep']) ? $prop['sep'] : ','; $tmp2 = explode($sep, $tmp_val); foreach ($tmp2 as $k => $value) { if (is_numeric($value)) { $tmp2[$k] = $value . $prop['units'][0]; } } $tmp_val = implode($sep, $tmp2); } } $attributes[$x]['default'] = $tmp_val; } $modes = ['tablet', 'mobile']; // Do we have screen? if (array_key_exists('screen', $prop)) { foreach ($modes as $m) { $prop_name = $x . '_' . $m; $attributes[$prop_name] = [ 'type' => $prop['type'] ]; // TODO: // if (array_key_exists('default', $props[$prop_name])) { // $attributes[$prop_name]['default'] = $props[$x]['default']; // } } } } } } // Register blocks register_block_type( pagelayer_block_name_by_tag($block), array( 'attributes' => $attributes, 'render_callback' => 'pagelayer_block_renderer', ) ); } } function pagelayer_block_renderer($attributes, $content, $_this){ global $pagelayer; $parsed_block = $_this->parsed_block; $block_name = $parsed_block['blockName']; $tag = ''; $inner_blocks = array( 'blocks' => $parsed_block['innerBlocks'], 'content' => $parsed_block['innerContent'] ); $attributes['is_not_sc'] = 1; if ( is_string( $block_name ) && 0 === strpos( $block_name, 'pagelayer/' ) ) { $tag = substr( $block_name, 10 ); } // Convert as pagelayer shortcode $tag = str_replace('-', '_', $tag); if( empty($tag) || !array_key_exists($tag, $pagelayer->shortcodes) ){ return ''; } return pagelayer_render_shortcode($attributes, $content, $tag, $inner_blocks); } add_action('enqueue_block_editor_assets', 'pagelayer_enqueue_block_assets'); function pagelayer_enqueue_block_assets(){ global $pagelayer; wp_enqueue_style( 'pagelayer-block-icon', PAGELAYER_CSS . '/pagelayer-icons.css', array('wp-edit-blocks'), PAGELAYER_VERSION ); // Load styles and javascript pagelayer_enqueue_frontend(true); wp_enqueue_style( 'pagelayer-block-editor', PAGELAYER_CSS . '/pagelayer-blocks.css', array('wp-edit-blocks'), PAGELAYER_VERSION ); // Components wp_enqueue_script( 'pagelayer-blocks', PAGELAYER_JS . '/blocks/index.js', [ 'wp-blob', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-compose', 'wp-data', 'wp-element', 'wp-html-entities', 'wp-i18n' ], PAGELAYER_VERSION, true ); // Load shortcode pagelayer_load_shortcodes(); // Load fonts pagelayer_load_font_options(); $shortcodes = array(); foreach($pagelayer->shortcodes as $block => $pl_props) { if(!empty($pl_props['no_gt']) || $pl_props['group'] == 'woocommerce'){ continue; } $shortcodes[$block] = $pl_props; } wp_localize_script( 'pagelayer-blocks', 'pagelayer_config', array( 'pagelayer_shortcodes' => $shortcodes, 'pagelayer_styles' => $pagelayer->styles, 'pagelayer_groups' => $pagelayer->groups, 'internal_linking_nonce' => wp_create_nonce('internal-linking'), 'pagelayer_fonts' => $pagelayer->fonts, ) ); } // Load global JS add_action( 'admin_print_scripts', 'pagelayer_block_global_js'); function pagelayer_block_global_js(){ global $pagelayer, $post; // For gutenberg if(!pagelayer_is_gutenberg_editor()){ return; } // Load global colors and fonts pagelayer_load_global_palette(); $pagelayer_recaptch_lang = get_option('pagelayer_google_captcha_lang'); // Get CAPTCHA site key $pagelayer_recaptch_site_key = get_option('pagelayer_google_captcha'); $pro_url = defined('POPULARFX_PRO_URL') ? POPULARFX_PRO_URL : PAGELAYER_PRO_PRICE_URL; $pro_txt = defined('POPULARFX_PRO_URL') ? 'PopularFX Pro' : 'Pagelayer Pro'; echo '<script type="text/javascript" id="pagelayer-block-global-js"> pagelayer_ajax_url = "'.admin_url( 'admin-ajax.php' ).'?"; pagelayer_url = "'.PAGELAYER_URL.'"; pagelayer_ver = "'.PAGELAYER_VERSION.'"; pagelayer_global_nonce = "'.wp_create_nonce('pagelayer_global').'"; pagelayer_server_time = '.time().'; pagelayer_pro = '.(int)defined('PAGELAYER_PREMIUM').'; pagelayer_is_live = 1; pagelayer_pro_url = "'. $pro_url .'"; pagelayer_pro_txt = "'. $pro_txt .'"; pagelayer_facebook_id = "'.get_option('pagelayer-fbapp-id').'"; pagelayer_settings = '.json_encode($pagelayer->settings).'; pagelayer_recaptch_lang = "'.(!empty($pagelayer_recaptch_lang) ? $pagelayer_recaptch_lang : '').'"; pagelayer_global_colors = '.json_encode($pagelayer->global_colors).'; pagelayer_global_fonts = '.json_encode($pagelayer->global_fonts).'; pagelayer_ajax_nonce = "'.wp_create_nonce('pagelayer_ajax').'"; pagelayer_post_permalink = "'.get_permalink($post->ID).'"; pagelayer_author = '.json_encode(pagelayer_author_data($post->ID)).'; pagelayer_postID = "'.$post->ID.'"; pagelayer_site_logo = '.json_encode(pagelayer_site_logo()).'; pagelayer_recaptch_site_key = "'.(!empty($pagelayer_recaptch_site_key) ? $pagelayer_recaptch_site_key : '').'"; pagelayer_global_colors = '.json_encode($pagelayer->global_colors).'; pagelayer_global_fonts = '.json_encode($pagelayer->global_fonts).'; pagelayer_loaded_icons = '.json_encode(pagelayer_enabled_icons()).'; pagelayer_customizer_url = "'.admin_url("/customize.php?return=").urlencode($_SERVER['HTTP_REFERER']).'"; pagelayerCacheBlockTags = {}; </script>'; echo '<style id="pagelayer-block-global-style"> @media (min-width: '.($pagelayer->settings['tablet_breakpoint'] + 1).'px){ .pagelayer-hide-desktop{ filter:blur(3px); } .pagelayer-hide-desktop *{ filter:blur(2px); } } @media (max-width: '.$pagelayer->settings['tablet_breakpoint'].'px) and (min-width: '.($pagelayer->settings['mobile_breakpoint'] + 1).'px){ .pagelayer-hide-tablet{ filter:blur(3px); } .pagelayer-hide-tablet *{ filter:blur(2px); } } @media (max-width: '.$pagelayer->settings['mobile_breakpoint'].'px){ .pagelayer-hide-mobile{ filter:blur(3px); } .pagelayer-hide-mobile *{ filter:blur(2px); } } </style>'; } // Schema for save contact form template via react add_action( 'init', 'pagelayer_register_metadata' ); function pagelayer_register_metadata() { register_meta( 'post', 'pagelayer_contact_templates', array( 'type' => 'object', 'description' => 'Contacts Data', 'single' => true, 'show_in_rest' => array( 'schema' => array( 'additionalProperties' => true, 'items' => array( 'type' => 'array', 'items' => array( 'type' => 'array', 'items' => array( 'type' => 'string', ), ), ), ), ), 'auth_callback' => function() { return current_user_can('edit_posts'); } ) ); register_meta( 'post', '_pagelayer_content', array( 'type' => 'string', 'description' => 'Menu Content', 'single' => true, 'show_in_rest' => true, 'auth_callback' => function() { return current_user_can('edit_posts'); } ) ); } add_filter( 'the_post', 'pagelayer_blocks_the_post' ); function pagelayer_blocks_the_post( $post ) { if(!pagelayer_is_gutenberg_editor() || !has_blocks( $post ) ){ return; } // call block register // It is being used to load the runtime font family pagelayer_block_init(); $post->post_content = pagelayer_add_tmp_atts($post->post_content); } // Add tmp attribute to block code function pagelayer_add_tmp_atts($content){ $blocks = parse_blocks( $content ); $output = ''; foreach ( $blocks as $block ) { $block_name = $block['blockName']; // Is pagelayer block if ( is_string( $block_name ) && 0 === strpos( $block_name, 'pagelayer/' ) ) { $_block = pagelayer_serialize_block($block); $output .= serialize_block($_block); continue; } $output .= serialize_block($block); } return $output; } function pagelayer_serialize_block($block){ global $pagelayer; // Load shortcode pagelayer_load_shortcodes(); // If block saved by Pagelayer Editor if(in_array( $block['blockName'], ['pagelayer/pl_inner_col', 'pagelayer/pl_inner_row'])){ $block['blockName'] = str_replace('inner_', '', $block['blockName']); } $tag = substr( $block['blockName'], 10 ); $pl_tag = str_replace('-', '_', $tag); if(isset($pagelayer->shortcodes[$pl_tag])){ // Create attribute Object $pl_props = $pagelayer->shortcodes[$pl_tag]; $el = array( 'atts' => $block['attrs'], 'tmp' => [] ); foreach($pagelayer->tabs as $tab){ if(empty($pl_props[$tab])){ continue; } foreach($pl_props[$tab] as $section => $_props){ $props = !empty($pl_props[$section]) ? $pl_props[$section] : $pagelayer->styles[$section]; if(empty($props)){ continue; } // Reset / Create the cache foreach($props as $prop => $param){ // No value set if(empty($el['atts'][$prop])){ continue; } // Load any attachment values - This should go on top in the newer version @TODO if(in_array($param['type'], ['image', 'video', 'audio', 'media'])){ $attachment = ($param['type'] == 'image') ? pagelayer_image(@$el['atts'][$prop]) : pagelayer_attachment(@$el['atts'][$prop]); if(!empty($attachment)){ foreach($attachment as $k => $v){ $el['tmp'][$prop.'-'.$k] = $v; } } } // Load any attachment values - This should go on top in the newer version @TODO if($param['type'] == 'multi_image'){ $img_ids = pagelayer_maybe_explode(',', $el['atts'][$prop]); $img_urls = []; // Make the image URL foreach($img_ids as $k => $v){ $image = pagelayer_image($v); $img_urls['i'.$v] = @$image['url']; } $el['tmp'][$prop.'-urls'] = json_encode($img_urls); } // Load permalink values if($param['type'] == 'link'){ $link = $el['atts'][$prop]; if( is_array($el['atts'][$prop]) ){ // Link is required for check IF and IF-EXT in html if(!isset($el['atts'][$prop]['link']) || strlen(trim($el['atts'][$prop]['link'])) < 1){ $link = ''; unset($el['atts'][$prop]); continue; } $link = $el['atts'][$prop]['link']; } $el['tmp'][$prop] = pagelayer_permalink($link); } } } } $func = null; if(substr($pl_tag, 0, 3) == 'pl_'){ $func = 'pagelayer_sc_block_'.substr($pl_tag, 3); } if(function_exists($func)){ call_user_func_array($func, array(&$el)); } if(!empty($el['tmp'])){ $_tmp = $el['tmp']; $block['attrs']['tmpAtts'] = array_filter($_tmp); } // If block saved by Pagelayer Editor if(strpos($block['blockName'], '_') !== false){ $block['blockName'] = str_replace('_', '-', $block['blockName']); } } // This have innerBlocks if(!empty($block['innerBlocks'])){ foreach($block['innerBlocks'] as $key => $inner_block){ $block['innerBlocks'][$key] = pagelayer_serialize_block($inner_block); } } return $block; } // TODO: create a seprate file or use all the functions from pagelayer editor files //Grid Gallery Handler function pagelayer_sc_block_grid_gallery(&$el){ if(empty($el['atts']['ids'])){ $el['atts']['ids'] = ''; } $ids = pagelayer_maybe_explode(',', $el['atts']['ids']); $urls = []; $all_urls = []; $size = $el['atts']['size']; // Make the image URL foreach($ids as $k => $v){ $image = pagelayer_image($v); $urls['i'.$v] = @$image['url']; $links['i'.$v] = @$image['link']; $titles['i'.$v] = @$image['title']; $captions['i'.$v] = @$image['caption']; foreach($image as $kk => $vv){ $si = strstr($kk, '-url', true); if(!empty($si)){ $all_urls['i'.$v][$si] = $vv; } } } // Make the TMP vars if(!empty($urls)){ $el['tmp']['ids-urls'] = json_encode($urls); $el['tmp']['ids-all-urls'] = json_encode($all_urls); $el['tmp']['ids-all-links'] = json_encode($links); $el['tmp']['ids-all-titles'] = json_encode($titles); $el['tmp']['ids-all-captions'] = json_encode($captions); } }