<?php if ( ! defined( 'ABSPATH' ) ) exit;
/**
* Class NF_Abstracts_Field
*/
abstract class NF_Abstracts_Field extends NF_Abstracts_Element
{
/**
* @var string
*/
protected $_name = '';
/**
* @var string
*/
protected $_nicename = '';
/**
* @var string
*/
protected $_section = '';
/**
* @var string
*/
protected $_icon = 'square-o';
/**
* @var array
*/
protected $_aliases = array();
/**
* @var array
*/
protected $_settings = array();
/**
* @var array
*/
protected $_settings_all_fields = array();
/**
* @var array
*/
protected $_settings_exclude = array();
/**
* @var array
*/
protected $_settings_only = array();
/**
* @var array
*/
protected $_use_merge_tags = array( 'user', 'post', 'system', 'fields' );
/**
* @var array
*/
protected $_use_merge_tags_include = array();
/**
* @var array
*/
protected $_use_merge_tags_exclude = array();
/**
* @var string
*/
protected $_test_value = 'test';
/**
* @var string
*/
protected $_attr = '';
/**
* @var string
*/
protected $_type = '';
/**
* @var string
*/
protected $_parent_type = '';
/**
* @var string
*/
public static $_base_template = 'input';
/**
* @var array
*/
protected $_templates = array();
/**
* @var string
*/
protected $_wrap_template = 'wrap';
/**
* @var array
*/
protected $_old_classname = '';
/**
* @var bool
*/
protected $_show_in_builder = true;
//-----------------------------------------------------
// Public Methods
//-----------------------------------------------------
/**
* Constructor
*/
public function __construct()
{
if( ! empty( $this->_settings_only ) ){
$this->_settings = array_merge( $this->_settings, $this->_settings_only );
} else {
$this->_settings = array_merge( $this->_settings_all_fields, $this->_settings );
$this->_settings = array_diff( $this->_settings, $this->_settings_exclude );
}
$this->_settings = $this->load_settings( $this->_settings );
$this->_test_value = apply_filters( 'ninja_forms_field_' . $this->_name . '_test_value', $this->_test_value );
add_filter( 'ninja_forms_localize_field_settings_' . $this->_type, array( $this, 'localize_settings' ), 10, 2 );
}
/**
* Validate
*
* @param $field
* @param $data
* @return array $errors
*/
public function validate( $field, $data )
{
$errors = array();
// Required check.
if( is_array( $field[ 'value' ] ) && "repeater" !== $field[ 'type' ] ){
$field[ 'value' ] = implode( '', $field[ 'value' ] );
}
if( isset( $field['required'] ) && 1 == intval( $field['required'] ) ) {
$val = trim( $field['value'] );
if( empty( $val ) && '0' !== $val ){
$errors['slug'] = 'required-error';
$errors['message'] = esc_html__('This field is required.', 'ninja-forms');
}
}
return $errors;
}
public function process( $field, $data )
{
return $data;
}
/**
* Admin Form Element
*
* Returns the output for editing fields in a submission.
*
* @param $id
* @param $value
* @return string
*/
public function admin_form_element( $id, $value )
{
return '<input class="widefat" name="fields[' . absint( $id ) . ']" value="' . esc_attr( $value ) . '" type="text" />';
}
public function get_name()
{
return $this->_name;
}
public function get_nicename()
{
return $this->_nicename;
}
public function get_section()
{
return $this->_section;
}
public function get_icon()
{
return $this->_icon;
}
public function get_aliases()
{
return $this->_aliases;
}
public function get_type()
{
return $this->_type;
}
public function get_parent_type()
{
if( $this->_parent_type ){
return $this->_parent_type;
}
// If a type is not set, return 'textbox'
return ( get_parent_class() && isset ( parent::$_type ) ) ? parent::$_type : 'textbox';
}
public function get_settings()
{
return $this->_settings;
}
public function use_merge_tags()
{
$use_merge_tags = array_merge( $this->_use_merge_tags, $this->_use_merge_tags_include );
$use_merge_tags = array_diff( $use_merge_tags, $this->_use_merge_tags_exclude );
return $use_merge_tags;
}
public function get_test_value()
{
return $this->_test_value;
}
public function get_templates()
{
$templates = (array) $this->_templates;
// Create a reflection for examining the parent
$reflection = new ReflectionClass( $this );
$parent_class = $reflection->getParentClass();
if ( $parent_class->isAbstract() ) {
$parent_class_name = $parent_class->getName();
$parent_templates = call_user_func( array( $parent_class_name, 'get_base_template' ) ); // Parent Class' Static Property
return array_merge( $templates, (array) $parent_templates );
}
$parent_class_name = strtolower( str_replace('NF_Fields_', '', $parent_class->getName() ) );
if( ! isset( Ninja_Forms()->fields[ $parent_class_name ] ) ) return $templates;
$parent = Ninja_Forms()->fields[ $parent_class_name ];
return array_merge($templates, $parent->get_templates());
}
public function get_wrap_template()
{
return $this->_wrap_template;
}
public function get_old_classname()
{
return $this->_old_classname;
}
public function show_in_builder() {
return $this->_show_in_builder;
}
protected function load_settings( $only_settings = array() )
{
$settings = array();
// Loads a settings array from the FieldSettings configuration file.
$all_settings = Ninja_Forms::config( 'FieldSettings' );
foreach( $only_settings as $setting ){
if( isset( $all_settings[ $setting ]) ){
$settings[ $setting ] = $all_settings[ $setting ];
}
}
return $settings = apply_filters( 'ninja_forms_field_load_settings', $settings, $this->_name, $this->get_parent_type() );
}
public static function get_base_template()
{
return self::$_base_template;
}
public static function sort_by_order( $a, $b )
{
return $a->get_setting( 'order' ) - $b->get_setting( 'order' );
}
public function localize_settings( $settings, $form_id ) {
return $settings;
}
}
|