<?php
if ( ! defined( 'ABSPATH' ) ) {
die( 'You are not allowed to call this page directly.' );
}
/**
* @since 2.04
*/
class FrmProEntryValues extends FrmEntryValues {
/**
* @var FrmProFieldValue[]
*/
protected $field_values = array();
/**
* @var stdClass
*/
private $current_section = null;
/**
* @var stdClass
*/
private $current_embedded_form = null;
/**
* Set/clear the current section or embedded form
*
* @since 2.04
*
* @param stdClass $field
*/
private function set_current_container( $field ) {
if ( $field->type === 'divider' ) {
$this->current_section = $field;
} else if ( $field->type === 'end_divider' ) {
$this->current_section = null;
}
if ( $field->type === 'form' ) {
$this->current_embedded_form = $field;
} else if ( is_object( $this->current_embedded_form ) && $field->form_id != $this->current_embedded_form->field_options['form_select'] ) {
$this->current_embedded_form = null;
}
}
/**
* Check if a field is included
*
* @since 2.04
*
* @param stdClass $field
*
* @return bool
*/
protected function is_field_included( $field ) {
if ( $field->type !== 'end_divider' ) {
$this->set_current_container( $field );
}
$is_included = true;
if ( ! empty( $this->include_fields ) ) {
$is_included = $this->is_self_or_parent_in_array( $field, $this->include_fields );
}
if ( ! empty( $this->exclude_fields ) ) {
$is_excluded = $this->is_self_or_parent_in_array( $field, $this->exclude_fields );
if ( $is_excluded ) {
$is_included = false;
}
}
if ( $field->type === 'end_divider' ) {
$this->set_current_container( $field );
}
return $is_included;
}
/**
* If embedded form or section is included/excluded, apply this to children as well
*
* @since 2.04
*
* @param stdClass $field
* @param array $fields
*
* @return bool
*/
private function is_self_or_parent_in_array( $field, $fields ) {
if ( $this->is_field_in_array( $field, $fields ) ) {
$in_array = true;
} else if ( is_object( $this->current_section ) && $this->is_field_in_array( $this->current_section, $fields ) ) {
$in_array = true;
} else if ( is_object( $this->current_embedded_form ) && $this->is_field_in_array( $this->current_embedded_form, $fields ) ) {
$in_array = true;
} else {
$in_array = false;
}
return $in_array;
}
/**
* Add a field's values to the field_values property
*
* @since 2.04
*
* @param stdClass $field
*/
protected function add_field_values( $field ) {
$atts = array(
'exclude_fields' => $this->exclude_fields,
);
$this->field_values[ $field->id ] = new FrmProFieldValue( $field, $this->entry );
}
}