Value() or $field->dataValue() * * You can specify the label to use for the "is null" checkbox. If you want to use I8N for this label then specify it like this: * $field->setIsNullLabel(_T(SOME_MODULE_ISNULL_LABEL, "Is Null"); * * @author Pete Bacon Darwin * @package forms * @subpackage fields-basic */ class NullableField extends FormField { /** * The field that holds the value of this field * @var FormField */ protected $valueField; /** * The label to show next to the is null check box. * @var string */ protected $isNullLabel; /** * Create a new nullable field * @param $valueField * @return NullableField */ public function __construct(FormField $valueField, $isNullLabel = null) { $this->valueField = $valueField; $this->isNullLabel = $isNullLabel; if ( is_null($this->isNullLabel) ) { // Set a default label if one is not provided. $this->isNullLabel = _t('NullableField.IsNullLabel', 'Is Null'); } parent::__construct($valueField->getName(), $valueField->Title(), $valueField->Value(), $valueField->getForm(), $valueField->RightTitle()); $this->readonly = $valueField->isReadonly(); } /** * Get the label used for the Is Null checkbox. * @return string */ public function getIsNullLabel() { return $this->isNullLabel; } /** * Set the label used for the Is Null checkbox. * @param $isNulLabel string */ public function setIsNullLabel(string $isNulLabel){ $this->isNullLabel = $isNulLabel; return $this; } /** * Get the id used for the Is Null check box. * @return string */ public function getIsNullId() { return $this->getName() . "_IsNull"; } /** * (non-PHPdoc) * @see framework/forms/FormField#Field() */ public function Field($properties = array()) { if ( $this->isReadonly()) { $nullableCheckbox = new CheckboxField_Readonly($this->getIsNullId()); } else { $nullableCheckbox = new CheckboxField($this->getIsNullId()); } $nullableCheckbox->setValue(is_null($this->dataValue())); return $this->valueField->Field() . ' ' . $nullableCheckbox->Field() . ' ' . $this->getIsNullLabel().''; } /** * Value is sometimes an array, and sometimes a single value, so we need to handle both cases */ public function setValue($value, $data = null) { if ( is_array($data) && array_key_exists($this->getIsNullId(), $data) && $data[$this->getIsNullId()] ) { $value = null; } $this->valueField->setValue($value); parent::setValue($value); return $this; } /** * (non-PHPdoc) * @see forms/FormField#setName($name) */ public function setName($name) { // We need to pass through the name change to the underlying value field. $this->valueField->setName($name); parent::setName($name); return $this; } /** * (non-PHPdoc) * @see framework/forms/FormField#debug() */ public function debug() { $result = "$this->class ($this->name: $this->title : $this->message) = "; $result .= (is_null($this->value)) ? "<>" : $this->value; return result; } }