silverstripe-userforms/code/model/editableformfields/EditableTextField.php

116 lines
2.7 KiB
PHP
Raw Normal View History

<?php
/**
* EditableTextField
*
* This control represents a user-defined text field in a user defined form
*
* @package userforms
*/
class EditableTextField extends EditableFormField {
private static $singular_name = 'Text Field';
2015-09-11 00:20:06 +02:00
private static $plural_name = 'Text Fields';
2015-07-24 04:37:48 +02:00
private static $db = array(
'MinLength' => 'Int',
'MaxLength' => 'Int',
'Rows' => 'Int(1)',
'Placeholder' => 'Varchar(255)'
2015-07-24 04:37:48 +02:00
);
private static $defaults = array(
'Rows' => 1
);
public function getCMSFields() {
$this->beforeUpdateCMSFields(function($fields) {
$fields->addFieldToTab(
'Root.Main',
NumericField::create(
'Rows',
_t('EditableTextField.NUMBERROWS', 'Number of rows')
)->setDescription(_t(
'EditableTextField.NUMBERROWS_DESCRIPTION',
'Fields with more than one row will be generated as a textarea'
))
);
$fields->addFieldToTab(
'Root.Main',
TextField::create(
'Placeholder',
_t('EditableTextField.PLACEHOLDER', 'Placeholder')
)
);
2015-07-24 04:37:48 +02:00
});
return parent::getCMSFields();
}
/**
* @return FieldList
*/
public function getFieldValidationOptions() {
$fields = parent::getFieldValidationOptions();
$fields->merge(array(
FieldGroup::create(
_t('EditableTextField.TEXTLENGTH', 'Allowed text length'),
array(
NumericField::create('MinLength', false),
LiteralField::create('RangeLength', _t("EditableTextField.RANGE_TO", "to")),
NumericField::create('MaxLength', false)
)
)
));
return $fields;
}
/**
* @return TextareaField|TextField
*/
public function getFormField() {
2015-07-24 04:37:48 +02:00
if($this->Rows > 1) {
$field = TextareaField::create($this->Name, $this->EscapedTitle, $this->Default)
->setFieldHolderTemplate('UserFormsField_holder')
->setTemplate('UserFormsTextareaField')
->setRows($this->Rows);
2015-07-24 04:37:48 +02:00
} else {
$field = TextField::create($this->Name, $this->EscapedTitle, $this->Default)
->setFieldHolderTemplate('UserFormsField_holder')
->setTemplate('UserFormsField');
}
$this->doUpdateFormField($field);
return $field;
}
2015-08-11 01:40:37 +02:00
/**
2015-08-11 01:40:37 +02:00
* Updates a formfield with the additional metadata specified by this field
*
2015-08-11 01:40:37 +02:00
* @param FormField $field
*/
2015-08-11 01:40:37 +02:00
protected function updateFormField($field) {
parent::updateFormField($field);
if(is_numeric($this->MinLength) && $this->MinLength > 0) {
$field->setAttribute('data-rule-minlength', intval($this->MinLength));
2015-08-11 01:40:37 +02:00
}
if(is_numeric($this->MaxLength) && $this->MaxLength > 0) {
if($field instanceof TextField) {
$field->setMaxLength(intval($this->MaxLength));
}
$field->setAttribute('data-rule-maxlength', intval($this->MaxLength));
}
if($this->Placeholder) {
$field->setAttribute('placeholder', $this->Placeholder);
}
}
}