ID) || empty($post->post_content)){
return $content;
}
// Step 1: Get content edtable attributes
$blocks = parse_blocks( $content );
$el_atts = array();
// Get editable content array
foreach( $blocks as $block ){
$block_name = $block['blockName'];
// Is pagelayer block
if( is_string( $block_name ) && 0 === strpos( $block_name, 'pagelayer/' ) ){
pagelayer_flatten_block_atts($block, $el_atts);
}
}
$el_atts = array_filter($el_atts);
// Step 2: Add comment content in original content
$blocks = parse_blocks( $post->post_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_add_comment_atts($block, $el_atts);
$output .= serialize_block($_block);
continue;
}
$output .= serialize_block($block);
}
return $output;
}
function pagelayer_add_comment_atts($block, $new_atts){
global $pagelayer, $pagelayer_comment_errors, $pagelayer_allowed_com, $pagelayer_comment_alerts;
if(empty($block['attrs']['pagelayer-id'])){
return $block;
}
$pl_id = $block['attrs']['pagelayer-id'];
if(isset($new_atts[$pl_id]) && is_array($new_atts[$pl_id])){
$block['attrs']['comment_atts'] = $new_atts[$pl_id];
// Clear cached
}elseif(isset($block['attrs']['comment_atts'])){
unset($block['attrs']['comment_atts']);
}
$blockName = $block['blockName'];
// If block saved by Pagelayer Editor
if(in_array( $blockName, ['pagelayer/pl_inner_col', 'pagelayer/pl_inner_row'])){
$blockName = str_replace('inner_', '', $blockName);
}
$tag = substr( $blockName, 10 );
$pl_tag = str_replace('-', '_', $tag);
if(isset($pagelayer->shortcodes[$pl_tag])){
// Create attribute Object
$pl_props = $pagelayer->shortcodes[$pl_tag];
$pl_id = $block['attrs']['pagelayer-id'];
$el_atts[$pl_id] = array();
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($block['attrs'][$prop]) || // Empty value in original content
(isset($param['ai']) && $param['ai'] === false) || // AI MODE is off
(is_string($block['attrs'][$prop]) && strlen(trim($block['attrs'][$prop])) < 1) || // Val not set
empty($param['edit']) // Not editable !
){
continue;
}
// Check for req
if(!empty($param['req'])){
$set = true;
foreach($param['req'] as $rk => $reqval){
$except = $rk[0] == '!' ? true : false;
$rk = $except ? substr($rk, 1) : $rk;
$val = pagelayer_isset($block['attrs'], $rk);
//echo $prop.' - '.$rk.' : '.$reqval.' == '.$val.'
';
// The value should not be there
if($except){
if(!is_array($reqval) && $reqval == $val){
$set = false;
break;
}
// Its an array and a value is found, then dont show
if(is_array($reqval) && in_array($val, $reqval)){
$set = false;
break;
}
// The value must be equal
}else{
if(!is_array($reqval) && $reqval != $val){
$set = false;
break;
}
// Its an array and no value is found, then dont show
if(is_array($reqval) && !in_array($val, $reqval)){
$set = false;
break;
}
}
}
// Unset as we dont need
if(empty($set)){
continue;
}
}
$tmp = trim(strip_tags($block['attrs']['comment_atts'][$prop]));
$skip_temp = trim($tmp, "+");
if(is_numeric($skip_temp)){
continue;
}
if(is_string($tmp) && $tmp[0] == '!'){
$pagelayer_comment_alerts[$pl_id][$prop]['o'] = $block['attrs'][$prop];
$pagelayer_comment_alerts[$pl_id][$prop]['c'] = $block['attrs']['comment_atts'][$prop];
continue;
}
if(!in_array($tmp, $pagelayer_allowed_com)){
$pagelayer_comment_errors[$pl_id][$prop]['o'] = $block['attrs'][$prop];
$pagelayer_comment_errors[$pl_id][$prop]['c'] = $block['attrs']['comment_atts'][$prop];
}
}
}
}
}
// This have innerBlocks
if(!empty($block['innerBlocks']) && is_array($block['innerBlocks'])){
foreach($block['innerBlocks'] as $key => $inner_block){
$block['innerBlocks'][$key] = pagelayer_add_comment_atts($inner_block, $new_atts);
}
}
return $block;
}
function pagelayer_flatten_block_atts($block, &$el_atts){
global $pagelayer;
// TODO: if empty then assign id and updated content
if(empty($block['attrs']['pagelayer-id'])){
return;
}
$blockName = $block['blockName'];
// If block saved by Pagelayer Editor
if(in_array( $blockName, ['pagelayer/pl_inner_col', 'pagelayer/pl_inner_row'])){
$blockName = str_replace('inner_', '', $blockName);
}
$tag = substr( $blockName, 10 );
$pl_tag = str_replace('-', '_', $tag);
if(isset($pagelayer->shortcodes[$pl_tag])){
// Create attribute Object
$pl_props = $pagelayer->shortcodes[$pl_tag];
$pl_id = $block['attrs']['pagelayer-id'];
$el_atts[$pl_id] = array();
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($block['attrs'][$prop]) || (isset($param['ai']) && $param['ai'] === false) || (is_string($block['attrs'][$prop]) && strlen(trim($block['attrs'][$prop])) < 1)){
continue;
}
// Is editable?
if(!empty($param['edit'])){
$el_atts[$pl_id][$prop] = $block['attrs'][$prop];
}
// Is image skipped?
if($param['type'] == 'image' && isset($block['attrs'][$prop.'_ai'])){
$el_atts[$pl_id][$prop] = $block['attrs'][$prop.'_ai'];
}
}
}
}
}
// This have innerBlocks
if(!empty($block['innerBlocks'])){
foreach($block['innerBlocks'] as $key => $inner_block){
pagelayer_flatten_block_atts($inner_block, $el_atts, $only_images);
}
}
}