init();
}
function init() {
// 1. set text domain
// Reference: https://codex.wordpress.org/Function_Reference/load_plugin_textdomain
load_plugin_textdomain( 'acf-page_builder_field', false, dirname( plugin_basename(__FILE__) ) . '/lang/' );
if( in_array( basename( get_page_template() ), $this->use_on ))
{
add_filter( 'siteorigin_panels_row_attributes', array( $this, 'siteorigin_panels_attributes' ), 10, 2 );
add_filter( 'siteorigin_panels_row_cell_attributes', array( $this, 'siteorigin_panels_attributes' ), 10, 2 );
add_filter( 'siteorigin_panels_layout_attributes', array( $this, 'siteorigin_panels_attributes' ), 10, 2 );
add_action( 'wp_footer', array( $this, 'output_styles' ) );
}
}
function get_page_builder_field( $field_key )
{
$uid = uniqid( true );
$len = strlen($uid);
$field_id = 'acfpbf_'.substr($uid, $len - 6, 6);
$output = '
';
$panels_data = get_sub_field( $field_key );
$output .= $this->acf_siteorigin_panels_render( $field_id, $panels_data );
$output .= '
';
return $output;
}
function siteorigin_panels_attributes( $attr, $panels_data )
{
global $panel_id;
if( basename( get_page_template() ) == 'page-with-sections.php')
{
global $panel_id;
$panel_id = $GLOBALS['panel_id'];
$attr['id'] = $panel_id.'-'.$attr['id'];
return $attr;
}
return $attr;
}
function acf_field_page_builder_field_admin_enqueue_scripts()
{
$dir = plugin_dir_url( __FILE__ );
//wp_register_script( 'acf-input-page_builder_field', "{$dir}js/input.js" );
wp_enqueue_script('acf-input-page_builder_field', "{$dir}js/input.js", array('jquery','acf-page-builder-field-init','so-panels-admin','so-panels-admin-live-editor'), '1.0', true);
wp_register_script('acf-page-builder-field-init', plugin_dir_url( __FILE__ ) . 'js/init.js', array('jquery','so-panels-admin','so-panels-admin-live-editor'), '1.0', true);
//wp_register_script('acf-page-builder-field-init', plugin_dir_url( __FILE__ ) . 'js/init.js', array('so-panels-admin'));
//die(plugin_dir_url( __FILE__ ) . 'js/init.js');
// scripts
wp_enqueue_script(array('acf-page-builder-field-init'));
}
function acf_siteorigin_panels_render( $panel_id, $panels_data, $enqueue_css = true ) {
$GLOBALS['panel_id'] = $panel_id;
if( is_string( $panels_data ) )
{
$panels_data = json_decode( $panels_data, true );
}
if( empty($post_id) ) $post_id = get_the_ID();
$panels_data = apply_filters( 'siteorigin_panels_data', $panels_data, $post_id, $panel_id );
if( empty( $panels_data ) || empty( $panels_data['grids'] ) ) return '';
// Filter the widgets to add indexes
if ( !empty( $panels_data['widgets'] ) ) {
$last_gi = 0;
$last_ci = 0;
$last_wi = 0;
foreach ( $panels_data['widgets'] as $wid => &$widget_info ) {
if ( $widget_info['panels_info']['grid'] != $last_gi ) {
$last_gi = $widget_info['panels_info']['grid'];
$last_ci = 0;
$last_wi = 0;
}
elseif ( $widget_info['panels_info']['cell'] != $last_ci ) {
$last_ci = $widget_info['panels_info']['cell'];
$last_wi = 0;
}
$widget_info['panels_info']['cell_index'] = $last_wi++;
}
}
if( is_rtl() ) $panels_data = siteorigin_panels_make_rtl( $panels_data );
// Create the skeleton of the grids
$grids = array();
if( !empty( $panels_data['grids'] ) && !empty( $panels_data['grids'] ) ) {
foreach ( $panels_data['grids'] as $gi => $grid ) {
$gi = intval( $gi );
$grids[$gi] = array();
for ( $i = 0; $i < $grid['cells']; $i++ ) {
$grids[$gi][$i] = array();
}
}
}
// We need this to migrate from the old $panels_data that put widget meta into the "info" key instead of "panels_info"
if( !empty( $panels_data['widgets'] ) && is_array($panels_data['widgets']) ) {
foreach ( $panels_data['widgets'] as $i => $widget ) {
if( empty( $panels_data['widgets'][$i]['panels_info'] ) ) {
$panels_data['widgets'][$i]['panels_info'] = $panels_data['widgets'][$i]['info'];
unset($panels_data['widgets'][$i]['info']);
}
}
}
if( !empty( $panels_data['widgets'] ) && is_array($panels_data['widgets']) ){
foreach ( $panels_data['widgets'] as $widget ) {
// Put the widgets in the grids
$grids[ intval( $widget['panels_info']['grid']) ][ intval( $widget['panels_info']['cell'] ) ][] = $widget;
}
}
ob_start();
// Add the panel layout wrapper
$panel_layout_classes = apply_filters( 'siteorigin_panels_layout_classes', array(), $post_id, $panels_data, $panel_id );
$panel_layout_attributes = apply_filters( 'siteorigin_panels_layout_attributes', array(
'class' => implode( ' ', $panel_layout_classes ),
'id' => 'pl-' . $post_id
), $post_id, $panels_data );
echo ' $value ) {
if ($value) {
echo ' ' . $name . '="' . esc_attr($value) . '"';
}
}
echo '>';
global $acf_siteorigin_panels_inline_css;
if( empty($acf_siteorigin_panels_inline_css) ) $acf_siteorigin_panels_inline_css = array();
if( $enqueue_css && !isset($acf_siteorigin_panels_inline_css[$post_id]) ) {
wp_enqueue_style('siteorigin-panels-front');
//var_dump($panels_data);
$acf_siteorigin_panels_inline_css[$panel_id] = siteorigin_panels_generate_css($post_id, $panels_data);
/*
var_dump($acf_siteorigin_panels_inline_css);
die();
*/
}
$this->page_styles = $acf_siteorigin_panels_inline_css;
/*
echo '';
*/
echo apply_filters( 'siteorigin_panels_before_content', '', $panels_data, $post_id );
foreach ( $grids as $gi => $cells ) {
$grid_classes = apply_filters( 'siteorigin_panels_row_classes', array('panel-grid'), $panels_data['grids'][$gi] );
$grid_attributes = apply_filters( 'siteorigin_panels_row_attributes', array(
'class' => implode( ' ', $grid_classes ),
'id' => 'pg-' . $post_id . '-' . $gi
), $panels_data['grids'][$gi] );
// This allows other themes and plugins to add html before the row
echo apply_filters( 'siteorigin_panels_before_row', '', $panels_data['grids'][$gi], $grid_attributes );
echo '
$value ) {
echo $name.'="'.esc_attr($value).'" ';
}
echo '>';
$style_attributes = array();
if( !empty( $panels_data['grids'][$gi]['style']['class'] ) ) {
$style_attributes['class'] = array('panel-row-style-'.$panels_data['grids'][$gi]['style']['class']);
}
// Themes can add their own attributes to the style wrapper
$row_style_wrapper = siteorigin_panels_start_style_wrapper( 'row', $style_attributes, !empty($panels_data['grids'][$gi]['style']) ? $panels_data['grids'][$gi]['style'] : array() );
if( !empty($row_style_wrapper) ) echo $row_style_wrapper;
foreach ( $cells as $ci => $widgets ) {
// Themes can add their own styles to cells
$cell_classes = apply_filters( 'siteorigin_panels_row_cell_classes', array('panel-grid-cell'), $panels_data );
$cell_attributes = apply_filters( 'siteorigin_panels_row_cell_attributes', array(
'class' => implode( ' ', $cell_classes ),
'id' => 'pgc-' . $post_id . '-' . $gi . '-' . $ci
), $panels_data );
echo '
$value ) {
echo $name.'="'.esc_attr($value).'" ';
}
echo '>';
$cell_style_wrapper = siteorigin_panels_start_style_wrapper( 'cell', array(), !empty($panels_data['grids'][$gi]['style']) ? $panels_data['grids'][$gi]['style'] : array() );
if( !empty($cell_style_wrapper) ) echo $cell_style_wrapper;
foreach ( $widgets as $pi => $widget_info ) {
// TODO this wrapper should go in the before/after widget arguments
$widget_style_wrapper = siteorigin_panels_start_style_wrapper( 'widget', array(), !empty( $widget_info['panels_info']['style'] ) ? $widget_info['panels_info']['style'] : array() );
siteorigin_panels_the_widget( $widget_info['panels_info'], $widget_info, $gi, $ci, $pi, $pi == 0, $pi == count( $widgets ) - 1, $post_id, $widget_style_wrapper );
}
if ( empty( $widgets ) ) echo ' ';
if( !empty($cell_style_wrapper) ) echo '
';
echo '
';
}
echo '
';
// Close the
if( !empty($row_style_wrapper) ) echo '';
// This allows other themes and plugins to add html after the row
echo apply_filters( 'siteorigin_panels_after_row', '', $panels_data['grids'][$gi], $grid_attributes );
}
echo apply_filters( 'siteorigin_panels_after_content', '', $panels_data, $post_id );
echo '';
$html = ob_get_clean();
// Reset the current post
//$siteorigin_panels_current_post = $old_current_post;
return apply_filters( 'siteorigin_panels_render', $html, $post_id, !empty($post) ? $post : null );
}
function output_styles() {
global $acf_siteorigin_panels_inline_css;
if( empty( $acf_siteorigin_panels_inline_css ) || !is_array( $acf_siteorigin_panels_inline_css ) )
{
return;
}
$styles = '';
foreach( $acf_siteorigin_panels_inline_css AS $style_key => $style_data )
{
$search = array( '#pgc', '#pg', '#pl' );
$replace = array( '#'.$style_key.'-pgc', '#'.$style_key.'-pg', '#'.$style_key.'-pl' );
$styles .= str_replace($search, $replace, $style_data);
}
echo '';
}
}
function ACFPB()
{
return ACF_Page_Builder::get_instance();
}
add_action('init', function() {
add_action( 'admin_print_scripts-post-new.php', array( ACFPB(), 'acf_field_page_builder_field_admin_enqueue_scripts' ) , 999 );
add_action( 'admin_print_scripts-post.php', array( ACFPB(), 'acf_field_page_builder_field_admin_enqueue_scripts' ), 999 );
} );
add_action('acf/include_field_types', 'include_field_types_page_builder_field' );
// $acf_version = 5 and can be ignored until ACF6 exists
function include_field_types_page_builder_field( $acf_version ) {
ACFPB();
include_once('acf-page_builder_field-v5.php');
}
if( !function_exists( 'get_page_builder_field' ) )
{
function get_page_builder_field( $field )
{
return ACFPB()->get_page_builder_field( $field );
}
}