<?php if ( ! defined( 'ABSPATH' ) ) exit;
* Class NF_Fields_Checkbox
class NF_Fields_Checkbox extends NF_Abstracts_Input
protected $_name = 'checkbox';
protected $_nicename = 'Checkbox';
protected $_section = 'common';
protected $_icon = 'check-square-o';
protected $_type = 'checkbox';
protected $_templates = 'checkbox';
protected $_test_value = 0;
protected $_settings = array( 'checkbox_default_value', 'checkbox_values', 'checked_calc_value', 'unchecked_calc_value' );
protected $_settings_exclude = array( 'default', 'placeholder', 'input_limit_set' );
* NF_Fields_Checkbox constructor.
public function __construct()
$this->_nicename = esc_html__( 'Single Checkbox', 'ninja-forms' );
$this->_settings[ 'label_pos' ][ 'value' ] = 'right';
add_filter( 'ninja_forms_custom_columns', array( $this, 'custom_columns' ), 10, 2 );
add_filter( 'ninja_forms_merge_tag_value_' . $this->_name, array( $this, 'filter_merge_tag_value' ), 10, 2 );
add_filter( 'ninja_forms_merge_tag_calc_value_' . $this->_name, array( $this, 'filter_merge_tag_value_calc' ), 10, 2 );
add_filter( 'ninja_forms_subs_export_field_value_' . $this->_type, array( $this, 'export_value' ), 10, 2 );
* Display the checkbox on the edit submissions area.
* @param $value Field value.
* @return string HTML used for display of checkbox.
public function admin_form_element( $id, $value )
// If the checkboxes value is 1 or on...
if( 'on' == $value || 1 == $value ) {
// ...this variable to checked.
// ...else leave the variable empty.
// Return HTML to be output to the submission edit page.
return "<input type='hidden' name='fields[$id]' value='0' >
<input type='checkbox' name='fields[$id]' id='' $checked>";
* Creates what is displayed in the columns on the submissions page.
*nf_subs_export_pre_value
* @param $value checkbox value
* @param $field field model.
* @return $value string|void
public function custom_columns( $value, $field )
// If the field type is equal to checkbox...
if( 'checkbox' == $field->get_setting( 'type' ) ) {
// Backwards compatibility check for the new checked value setting.
if( null == $field->get_setting( 'checked_value' ) && 1 == $value || 'on' == $value ) {
return esc_html__( 'Checked', 'ninja-forms' );
} elseif( null == $field->get_setting( 'unchecked_value' ) && 0 == $value ) {
return esc_html__( 'Unchecked', 'ninja-forms');
// If the field value is set to 1....
if( 1 == $value || 'on' == $value) {
// Set the value to the checked value setting.
$value = $field->get_setting( 'checked_value' );
// Else set the value to the unchecked value setting.
$value = $field->get_setting( 'unchecked_value' );
* This is what provides the merge tag with the fields value.
* @param $value Field value
* @param $field field model
public function filter_merge_tag_value( $value, $field )
// If value is true, return checked value setting.
if( $value ) return $field[ 'settings' ][ 'checked_value' ];
// Else return unchecked value setting.
return $field[ 'settings' ][ 'unchecked_value' ];;
* Filter Merge Tag Value Calc
* Provides the calculation value when the merge tag is used.
* @param $value checkbox value
* @param $field field model
public function filter_merge_tag_value_calc( $value, $field )
// If value is equal to 1...
// ...return the checked calc value of the field model.
return $field[ 'checked_calc_value' ];
// ...else return the unchecked calc value of the field model.
return $field[ 'unchecked_calc_value' ];
* Determines the value to send to submission export.
* @param $value checkbox field value
* @param $field checkbox field model
public function export_value( $value, $field )
// @TODO: Why were these values translated in the first place?
// If value is equal to checked or unchecked return the value
if ( __( 'checked', 'ninja-forms' ) == $value ||
__( 'unchecked', 'ninja-forms' ) == $value ) return $value;
// Creating settings variables for our check.
if( is_array( $field ) ) {
// The email action sends teh field variable as an array
$checked_setting = $field[ 'setting' ][ 'checked_value' ];
$unchecked_setting = $field[ 'setting' ][ 'unchecked_value' ];
$checked_setting = $field->get_setting( 'checked_value' );
$unchecked_setting = $field->get_setting( 'unchecked_value' );
// If the the value and check to see if we have checked and unchecked settings...
if ( ( 1 == $value || 'on' == $value ) && ! empty( $checked_setting ) ) {
// ...if we do return checked setting
} elseif ( 0 == $value && ! empty( $unchecked_setting ) ) {
// ...else return unchecked setting.
return $unchecked_setting;
* These checks are for checkbox fields that were created before version 3.2.7.
} elseif ( 1 == $value || 'on' == $value ) {
return esc_html__( 'checked', 'ninja-forms' );
} elseif ( 0 == $value ) {
return esc_html__( 'unchecked', 'ninja-forms' );