mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
Merge branch 'master' into pulls/4.0/remove-deprecated-methods
This commit is contained in:
commit
33119a1f36
@ -290,8 +290,6 @@ mappings:
|
||||
CheckboxSetField: SilverStripe\Forms\CheckboxSetField
|
||||
CompositeField: SilverStripe\Forms\CompositeField
|
||||
ConfirmedPasswordField: SilverStripe\Forms\ConfirmedPasswordField
|
||||
CountryDropdownField: SilverStripe\Forms\CountryDropdownField
|
||||
CreditCardField: SilverStripe\Forms\CreditCardField
|
||||
CurrencyField: SilverStripe\Forms\CurrencyField
|
||||
CurrencyField_Readonly: SilverStripe\Forms\CurrencyField_Readonly
|
||||
CurrencyField_Disabled: SilverStripe\Forms\CurrencyField_Disabled
|
||||
@ -317,13 +315,10 @@ mappings:
|
||||
GroupedDropdownField: SilverStripe\Forms\GroupedDropdownField
|
||||
HeaderField: SilverStripe\Forms\HeaderField
|
||||
HiddenField: SilverStripe\Forms\HiddenField
|
||||
InlineFormAction: SilverStripe\Forms\InlineFormAction
|
||||
InlineFormAction_ReadOnly: SilverStripe\Forms\InlineFormAction_ReadOnly
|
||||
LabelField: SilverStripe\Forms\LabelField
|
||||
ListboxField: SilverStripe\Forms\ListboxField
|
||||
LiteralField: SilverStripe\Forms\LiteralField
|
||||
LookupField: SilverStripe\Forms\LookupField
|
||||
MemberDatetimeOptionsetField: SilverStripe\Forms\MemberDatetimeOptionsetField
|
||||
MoneyField: SilverStripe\Forms\MoneyField
|
||||
MultiSelectField: SilverStripe\Forms\MultiSelectField
|
||||
NullableField: SilverStripe\Forms\NullableField
|
||||
@ -331,7 +326,6 @@ mappings:
|
||||
NumericField_Readonly: SilverStripe\Forms\NumericField_Readonly
|
||||
OptionsetField: SilverStripe\Forms\OptionsetField
|
||||
PasswordField: SilverStripe\Forms\PasswordField
|
||||
PhoneNumberField: SilverStripe\Forms\PhoneNumberField
|
||||
PopoverField: SilverStripe\Forms\PopoverField
|
||||
PrintableTransformation: SilverStripe\Forms\PrintableTransformation
|
||||
PrintableTransformation_TabSet: SilverStripe\Forms\PrintableTransformation_TabSet
|
||||
@ -636,7 +630,6 @@ mappings:
|
||||
GridFieldTest_HTMLFragments: SilverStripe\Forms\Tests\GridField\GridFieldTest\HTMLFragments
|
||||
GridFieldTest_Permissions: SilverStripe\Forms\Tests\GridField\GridFieldTest\Permissions
|
||||
GroupedDropdownFieldTest: SilverStripe\Forms\Tests\GroupedDropdownFieldTest
|
||||
InlineFormActionTest: SilverStripe\Forms\Tests\InlineFormActionTest
|
||||
ListboxFieldTest: SilverStripe\Forms\Tests\ListboxFieldTest
|
||||
ListboxFieldTest_DataObject: SilverStripe\Forms\Tests\ListboxFieldTest\TestObject
|
||||
ListboxFieldTest_Article: SilverStripe\Forms\Tests\ListboxFieldTest\Article
|
||||
|
@ -22,10 +22,7 @@ on the SilverStripe API documentation.
|
||||
|
||||
## Formatted input
|
||||
|
||||
* [api:AjaxUniqueTextField]: Text field that automatically checks that the value entered is unique for the given set of fields in a given set of tables.
|
||||
* [api:ConfirmedPasswordField]: Two masked input fields, checks for matching passwords.
|
||||
* [api:CountryDropdownField]: A simple extension to dropdown field, pre-configured to list countries.
|
||||
* [api:CreditCardField]: Allows input of credit card numbers via four separate form fields, including generic validation of its numeric values.
|
||||
* [api:CurrencyField]: Text field, validating its input as a currency. Limited to US-centric formats, including a hardcoded currency symbol and decimal separators.
|
||||
See [api:MoneyField] for a more flexible implementation.
|
||||
* [api:DateField]: Represents a date in a single input field, or separated into day, month, and year. Can optionally use a calendar popup.
|
||||
@ -36,7 +33,6 @@ on the SilverStripe API documentation.
|
||||
* [api:MoneyField]: A form field that can save into a [api:Money] database field.
|
||||
* [api:NumericField]: Text input field with validation for numeric values.
|
||||
* [api:OptionsetField]: Set of radio buttons designed to emulate a dropdown.
|
||||
* [api:PhoneNumberField]: Field for displaying phone numbers. It separates the number, the area code and optionally the country code and extension.
|
||||
* [api:SelectionGroup]: SelectionGroup represents a number of fields which are selectable by a radio button that appears at the beginning of each item.
|
||||
* [api:TimeField]: Input field with time-specific, localised validation.
|
||||
|
||||
|
@ -1289,6 +1289,9 @@ After (`mysite/_config/config.yml`):
|
||||
* Removed `ModelAsController::find_old_page()`. Use `OldPageRedirector::find_old_page()` instead
|
||||
* Removed `RootURLController:set_default_homepage_link()` and `RootURLController::get_default_homepage_link()`.
|
||||
Use the `RootURLController.default_homepage_link` config setting instead.
|
||||
* Removed `CreditCardField`, `CountryDropdownField`, `PhoneNumberField`, `MemberDatetimeOptionsetField`, `InlineFormAction`.
|
||||
Use custom code instead
|
||||
* Removed `ResetFormAction`, use `FormAction::create()->setAttribute('type', 'reset')` instead
|
||||
|
||||
#### <a name="overview-general-deprecated"></a>General and Core Deprecated API
|
||||
|
||||
|
@ -53,7 +53,6 @@ en:
|
||||
BAD_METHOD: 'This form requires a {method} submission'
|
||||
CSRF_EXPIRED_MESSAGE: 'Your session has expired. Please re-submit the form.'
|
||||
CSRF_FAILED_MESSAGE: 'There seems to have been a technical problem. Please click the back button, refresh your browser, and try again.'
|
||||
VALIDATIONCREDIT: 'Please ensure you have entered the credit card number correctly'
|
||||
VALIDATIONPASSWORDSDONTMATCH: 'Passwords don''t match'
|
||||
VALIDATIONPASSWORDSNOTEMPTY: 'Passwords can''t be empty'
|
||||
VALIDATIONSTRONGPASSWORD: 'Passwords must have at least one digit and one alphanumeric character'
|
||||
@ -161,8 +160,6 @@ en:
|
||||
IsNullLabel: 'Is Null'
|
||||
SilverStripe\Forms\NumericField:
|
||||
VALIDATION: '''{value}'' is not a number, only numbers can be accepted for this field'
|
||||
SilverStripe\Forms\PhoneNumberField:
|
||||
VALIDATION: 'Please enter a valid phone number'
|
||||
SilverStripe\Forms\TimeField:
|
||||
VALIDATEFORMAT: 'Please enter a valid time format ({format})'
|
||||
SilverStripe\ORM\DataObject:
|
||||
|
@ -1,82 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Forms;
|
||||
|
||||
use SilverStripe\i18n\i18n;
|
||||
use SilverStripe\Security\Member;
|
||||
|
||||
/**
|
||||
* A simple extension to dropdown field, pre-configured to list countries.
|
||||
* It will default to the country of the current visitor.
|
||||
*/
|
||||
class CountryDropdownField extends DropdownField
|
||||
{
|
||||
|
||||
/**
|
||||
* Should we default the dropdown to the region determined from the user's locale?
|
||||
*
|
||||
* @config
|
||||
* @var bool
|
||||
*/
|
||||
private static $default_to_locale = true;
|
||||
|
||||
/**
|
||||
* The region code to default to if default_to_locale is set to false, or we can't
|
||||
* determine a region from a locale.
|
||||
*
|
||||
* @config
|
||||
* @var string
|
||||
*/
|
||||
private static $default_country = 'NZ';
|
||||
|
||||
protected $extraClasses = array('dropdown');
|
||||
|
||||
protected $schemaDataType = FormField::SCHEMA_DATA_TYPE_SINGLESELECT;
|
||||
|
||||
/**
|
||||
* Get the locale of the Member, or if we're not logged in or don't have a locale, use the default one
|
||||
* @return string
|
||||
*/
|
||||
protected function locale()
|
||||
{
|
||||
if (($member = Member::currentUser()) && $member->Locale) {
|
||||
return $member->Locale;
|
||||
}
|
||||
return i18n::get_locale();
|
||||
}
|
||||
|
||||
public function setSource($source)
|
||||
{
|
||||
if ($source) {
|
||||
return parent::setSource($source);
|
||||
}
|
||||
|
||||
// Get sorted countries
|
||||
$source = i18n::getData()->getCountries();
|
||||
return parent::setSource($source);
|
||||
}
|
||||
|
||||
public function Field($properties = array())
|
||||
{
|
||||
$source = $this->getSource();
|
||||
|
||||
// Default value to best availabel locale
|
||||
$value = $this->Value();
|
||||
if (CountryDropdownField::config()->default_to_locale
|
||||
&& (!$value || !isset($source[$value]))
|
||||
&& $this->locale()
|
||||
) {
|
||||
$value = i18n::getData()->countryFromLocale(i18n::get_locale());
|
||||
if ($value) {
|
||||
$this->setValue($value);
|
||||
}
|
||||
}
|
||||
|
||||
// Default to default country otherwise
|
||||
if (!$value || !isset($source[$value])) {
|
||||
$this->setValue(CountryDropdownField::config()->default_country);
|
||||
}
|
||||
|
||||
return parent::Field($properties);
|
||||
}
|
||||
}
|
@ -1,121 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Forms;
|
||||
|
||||
/**
|
||||
* Allows input of credit card numbers via four separate form fields,
|
||||
* including generic validation of its numeric values.
|
||||
*
|
||||
* @todo Validate
|
||||
*/
|
||||
class CreditCardField extends TextField
|
||||
{
|
||||
|
||||
/**
|
||||
* Add default attributes for use on all inputs.
|
||||
*
|
||||
* @return array List of attributes
|
||||
*/
|
||||
public function getAttributes()
|
||||
{
|
||||
return array_merge(
|
||||
parent::getAttributes(),
|
||||
array(
|
||||
'autocomplete' => 'off',
|
||||
'maxlength' => 4,
|
||||
'size' => 4
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
public function Field($properties = array())
|
||||
{
|
||||
$parts = $this->arrayValue();
|
||||
|
||||
$properties['ValueOne'] = $parts[0];
|
||||
$properties['ValueTwo'] = $parts[1];
|
||||
$properties['ValueThree'] = $parts[2];
|
||||
$properties['ValueFour'] = $parts[3];
|
||||
|
||||
return parent::Field($properties);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get tabindex HTML string
|
||||
*
|
||||
* @param int $increment Increase current tabindex by this value
|
||||
* @return string
|
||||
*/
|
||||
public function getTabIndexHTML($increment = 0)
|
||||
{
|
||||
// we can't add a tabindex if there hasn't been one set yet.
|
||||
if ($this->getAttribute('tabindex') === null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$tabIndex = (int)$this->getAttribute('tabindex') + (int)$increment;
|
||||
return (is_numeric($tabIndex)) ? ' tabindex = "' . $tabIndex . '"' : '';
|
||||
}
|
||||
|
||||
public function dataValue()
|
||||
{
|
||||
if (is_array($this->value)) {
|
||||
return implode("", $this->value);
|
||||
} else {
|
||||
return $this->value;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get either list of values, or null
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function arrayValue()
|
||||
{
|
||||
if (is_array($this->value)) {
|
||||
return $this->value;
|
||||
}
|
||||
|
||||
$value = $this->dataValue();
|
||||
return $this->parseCreditCard($value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse credit card value into list of four four-digit values
|
||||
*
|
||||
* @param string $value
|
||||
* @return array|null
|
||||
*/
|
||||
protected function parseCreditCard($value)
|
||||
{
|
||||
if (preg_match("/([0-9]{4})([0-9]{4})([0-9]{4})([0-9]{4})/", $value, $parts)) {
|
||||
return [ $parts[1], $parts[2], $parts[3], $parts[4] ];
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public function validate($validator)
|
||||
{
|
||||
$value = $this->dataValue();
|
||||
if (empty($value)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Check if format is valid
|
||||
if ($this->parseCreditCard($value)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Format is invalid
|
||||
$validator->validationError(
|
||||
$this->name,
|
||||
_t(
|
||||
'SilverStripe\\Forms\\Form.VALIDATIONCREDIT',
|
||||
"Please ensure you have entered the credit card number correctly"
|
||||
),
|
||||
"validation"
|
||||
);
|
||||
return false;
|
||||
}
|
||||
}
|
@ -175,7 +175,11 @@ class FormAction extends FormField
|
||||
|
||||
public function getAttributes()
|
||||
{
|
||||
$type = (isset($this->attributes['src'])) ? 'image' : 'submit';
|
||||
if (isset($this->attributes['type'])) {
|
||||
$type = $this->attributes['type'];
|
||||
} else {
|
||||
$type = (isset($this->attributes['src'])) ? 'image' : 'submit';
|
||||
}
|
||||
|
||||
return array_merge(
|
||||
parent::getAttributes(),
|
||||
|
@ -1,55 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Forms;
|
||||
|
||||
use SilverStripe\View\Requirements;
|
||||
|
||||
/**
|
||||
* Render a button that will submit the form its contained in through ajax.
|
||||
*
|
||||
* Caution: The form field does not include any JavaScript or CSS when used outside of the CMS context,
|
||||
* since the required frontend dependencies are included through CMS bundling.
|
||||
*
|
||||
* @see framework/client/dist/js/InlineFormAction.js
|
||||
*/
|
||||
class InlineFormAction extends FormField
|
||||
{
|
||||
|
||||
/**
|
||||
* Create a new action button.
|
||||
*
|
||||
* @param string $action The method to call when the button is clicked
|
||||
* @param string $title The label on the button
|
||||
* @param string $extraClass A CSS class to apply to the button in addition to 'action'
|
||||
*/
|
||||
public function __construct($action, $title = "", $extraClass = '')
|
||||
{
|
||||
$this->extraClass = ' '.$extraClass;
|
||||
parent::__construct($action, $title);
|
||||
}
|
||||
|
||||
public function performReadonlyTransformation()
|
||||
{
|
||||
return $this->castedCopy('SilverStripe\\Forms\\InlineFormAction_ReadOnly');
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $properties
|
||||
* @return string
|
||||
*/
|
||||
public function Field($properties = array())
|
||||
{
|
||||
return FormField::create_tag('input', array(
|
||||
'type' => 'submit',
|
||||
'name' => sprintf('action_%s', $this->getName()),
|
||||
'value' => $this->title,
|
||||
'id' => $this->ID(),
|
||||
'class' => sprintf('action%s', $this->extraClass),
|
||||
));
|
||||
}
|
||||
|
||||
public function Title()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
@ -1,33 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Forms;
|
||||
|
||||
/**
|
||||
* Readonly version of {@link InlineFormAction}.
|
||||
*/
|
||||
class InlineFormAction_ReadOnly extends FormField
|
||||
{
|
||||
|
||||
protected $readonly = true;
|
||||
|
||||
/**
|
||||
* @param array $properties
|
||||
* @return string
|
||||
*/
|
||||
public function Field($properties = array())
|
||||
{
|
||||
return FormField::create_tag('input', array(
|
||||
'type' => 'submit',
|
||||
'name' => sprintf('action_%s', $this->name),
|
||||
'value' => $this->title,
|
||||
'id' => $this->ID(),
|
||||
'disabled' => 'disabled',
|
||||
'class' => 'action disabled ' . $this->extraClass,
|
||||
));
|
||||
}
|
||||
|
||||
public function Title()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
@ -1,279 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Forms;
|
||||
|
||||
use SilverStripe\ORM\DataObjectInterface;
|
||||
|
||||
/**
|
||||
* Field for displaying phone numbers. It separates the number, the area code and optionally the country code
|
||||
* and extension.
|
||||
*/
|
||||
class PhoneNumberField extends FieldGroup
|
||||
{
|
||||
|
||||
/**
|
||||
* Default area code
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $areaCode;
|
||||
|
||||
/**
|
||||
* Default country code
|
||||
* @var string
|
||||
*/
|
||||
protected $countryCode;
|
||||
|
||||
/**
|
||||
* Default extension
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $ext;
|
||||
|
||||
/**
|
||||
* @return NumericField
|
||||
*/
|
||||
public function getCountryField()
|
||||
{
|
||||
return $this->getChildField('Country');
|
||||
}
|
||||
|
||||
/**
|
||||
* @return NumericField
|
||||
*/
|
||||
public function getAreaField()
|
||||
{
|
||||
return $this->getChildField('Area');
|
||||
}
|
||||
|
||||
/**
|
||||
* @return NumericField
|
||||
*/
|
||||
public function getNumberField()
|
||||
{
|
||||
return $this->getChildField('Number');
|
||||
}
|
||||
|
||||
/**
|
||||
* @return NumericField
|
||||
*/
|
||||
public function getExtensionField()
|
||||
{
|
||||
/** @skipUpgrade */
|
||||
return $this->getChildField('Extension');
|
||||
}
|
||||
|
||||
protected function getChildField($name)
|
||||
{
|
||||
$endsWith = "[{$name}]";
|
||||
foreach ($this->getChildren() as $child) {
|
||||
|
||||
/** @var Formfield $child */
|
||||
if (substr($child->getName(), 0 - strlen($endsWith)) === $endsWith) {
|
||||
return $child;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public function __construct(
|
||||
$name,
|
||||
$title = null,
|
||||
$value = '',
|
||||
$extension = null,
|
||||
$areaCode = null,
|
||||
$countryCode = null
|
||||
) {
|
||||
$this->areaCode = $areaCode;
|
||||
$this->ext = $extension;
|
||||
$this->countryCode = $countryCode;
|
||||
|
||||
// Build fields
|
||||
$fields = new FieldList();
|
||||
if ($this->countryCode !== null) {
|
||||
$countryField = NumericField::create($name.'[Country]', false, $countryCode, 4)
|
||||
->addExtraClass('phonenumber-field__country');
|
||||
$fields->push($countryField);
|
||||
}
|
||||
|
||||
if ($this->areaCode !== null) {
|
||||
$areaField = NumericField::create($name.'[Area]', false, $areaCode, 4)
|
||||
->addExtraClass('phonenumber-field__area');
|
||||
$fields->push($areaField);
|
||||
}
|
||||
$numberField = NumericField::create($name.'[Number]', false, null, 10)
|
||||
->addExtraClass('phonenumber-field__number');
|
||||
$fields->push($numberField);
|
||||
|
||||
if ($this->ext !== null) {
|
||||
$extensionField = NumericField::create($name.'[Extension]', false, $extension, 6)
|
||||
->addExtraClass('phonenumber-field__extension');
|
||||
$fields->push($extensionField);
|
||||
}
|
||||
|
||||
parent::__construct($title, $fields);
|
||||
|
||||
$this->setName($name);
|
||||
if (isset($value)) {
|
||||
$this->setValue($value);
|
||||
}
|
||||
}
|
||||
|
||||
public function setName($name)
|
||||
{
|
||||
parent::setName($name);
|
||||
foreach ($this->getChildren() as $child) {
|
||||
/** @var FormField $child */
|
||||
$thisName = $child->getName();
|
||||
$thisName = preg_replace('/^.*(\[\\w+\\])$/', $name . '\\1', $thisName);
|
||||
$child->setName($thisName);
|
||||
}
|
||||
}
|
||||
|
||||
public function hasData()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $properties
|
||||
* @return string
|
||||
*/
|
||||
public function Field($properties = array())
|
||||
{
|
||||
foreach ($this->getChildren() as $field) {
|
||||
/** @var FormField $field */
|
||||
$field->setDisabled($this->isDisabled());
|
||||
$field->setReadonly($this->IsReadonly());
|
||||
$field->setForm($this->getForm());
|
||||
}
|
||||
return parent::Field($properties);
|
||||
}
|
||||
|
||||
public function setValue($value, $data = null)
|
||||
{
|
||||
$this->value = self::joinPhoneNumber($value);
|
||||
$parts = $this->parseValue();
|
||||
if ($countryField = $this->getCountryField()) {
|
||||
$countryField->setValue($parts['Country']);
|
||||
}
|
||||
if ($areaField = $this->getAreaField()) {
|
||||
$areaField->setValue($parts['Area']);
|
||||
}
|
||||
$this->getNumberField()->setValue($parts['Number']);
|
||||
if ($extensionField = $this->getExtensionField()) {
|
||||
/** @skipUpgrade */
|
||||
$extensionField->setValue($parts['Extension']);
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Join phone number into a string
|
||||
*
|
||||
* @param array|string $value Input
|
||||
* @return string
|
||||
*/
|
||||
public static function joinPhoneNumber($value)
|
||||
{
|
||||
if (is_array($value)) {
|
||||
$completeNumber = '';
|
||||
if (!empty($value['Country'])) {
|
||||
$completeNumber .= '+' . $value['Country'];
|
||||
}
|
||||
|
||||
if (!empty($value['Area'])) {
|
||||
$completeNumber .= '(' . $value['Area'] . ')';
|
||||
}
|
||||
|
||||
$completeNumber .= $value['Number'];
|
||||
|
||||
/** @skipUpgrade */
|
||||
if (!empty($value['Extension'])) {
|
||||
$completeNumber .= '#' . $value['Extension'];
|
||||
}
|
||||
|
||||
return $completeNumber;
|
||||
} else {
|
||||
return $value;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns array with parsed phone format
|
||||
*
|
||||
* @return array Array with Country, Area, Number, and Extension keys (in order)
|
||||
*/
|
||||
protected function parseValue()
|
||||
{
|
||||
if (is_array($this->value)) {
|
||||
return $this->value;
|
||||
}
|
||||
// Parse value in form "+ countrycode (areacode) phone # extension"
|
||||
$valid = preg_match(
|
||||
'/^(?:(?:\+(?<Country>\d+))?\s*\((?<Area>\d+)\))?\s*(?<Number>[0-9A-Za-z]*)\s*(?:[#]\s*(?<Extension>\d+))?$/',
|
||||
$this->value,
|
||||
$parts
|
||||
);
|
||||
if (!$valid) {
|
||||
$parts = [];
|
||||
}
|
||||
/** @skipUpgrade */
|
||||
return array(
|
||||
'Country' => isset($parts['Country']) ? $parts['Country'] : '',
|
||||
'Area' => isset($parts['Area']) ? $parts['Area'] : '',
|
||||
'Number' => isset($parts['Number']) ? $parts['Number'] : '',
|
||||
'Extension' => isset($parts['Extension']) ? $parts['Extension'] : '',
|
||||
);
|
||||
}
|
||||
|
||||
public function saveInto(DataObjectInterface $record)
|
||||
{
|
||||
$completeNumber = static::joinPhoneNumber($this->parseValue());
|
||||
$record->setCastedField($this->getName(), $completeNumber);
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate this field
|
||||
*
|
||||
* @todo Very basic validation at the moment
|
||||
*
|
||||
* @param Validator $validator
|
||||
* @return bool
|
||||
*/
|
||||
public function validate($validator)
|
||||
{
|
||||
$valid = preg_match(
|
||||
'/^[0-9\+\-\(\)\s\#]*$/',
|
||||
$this->joinPhoneNumber($this->value)
|
||||
);
|
||||
|
||||
if (!$valid) {
|
||||
$validator->validationError(
|
||||
$this->name,
|
||||
_t('SilverStripe\\Forms\\PhoneNumberField.VALIDATION', "Please enter a valid phone number"),
|
||||
"validation"
|
||||
);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public function performReadonlyTransformation()
|
||||
{
|
||||
// Just setReadonly without casting to NumericField_Readonly
|
||||
$clone = clone $this;
|
||||
$clone->setReadonly(true);
|
||||
return $clone;
|
||||
}
|
||||
|
||||
public function performDisabledTransformation()
|
||||
{
|
||||
// Just setDisabled without casting to NumericField_Disabled
|
||||
$clone = clone $this;
|
||||
$clone->setDisabled(true);
|
||||
return $clone;
|
||||
}
|
||||
}
|
@ -1,24 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Forms;
|
||||
|
||||
/**
|
||||
* Action that clears all fields on a form.
|
||||
* Inserts an input tag with type=reset.
|
||||
*/
|
||||
class ResetFormAction extends FormAction
|
||||
{
|
||||
|
||||
public function getAttributes()
|
||||
{
|
||||
return array_merge(
|
||||
parent::getAttributes(),
|
||||
array('type' => 'reset')
|
||||
);
|
||||
}
|
||||
|
||||
public function Type()
|
||||
{
|
||||
return 'resetformaction';
|
||||
}
|
||||
}
|
@ -1,9 +0,0 @@
|
||||
<span id="{$Name}_Holder" class="creditCardField">
|
||||
<input $getAttributesHTML('id', 'name', 'value', 'tabindex') name="{$Name}[0]" value="{$ValueOne}" $TabIndexHTML(0)/>
|
||||
-
|
||||
<input $getAttributesHTML('id', 'name', 'value', 'tabindex') name="{$Name}[1]" value="{$ValueTwo}" $TabIndexHTML(1)/>
|
||||
-
|
||||
<input $getAttributesHTML('id', 'name', 'value', 'tabindex') name="{$Name}[2]" value="{$ValueThree}" $TabIndexHTML(2)/>
|
||||
-
|
||||
<input $getAttributesHTML('id', 'name', 'value', 'tabindex') name="{$Name}[3]" value="{$ValueFour}" $TabIndexHTML(3)/>
|
||||
</span>
|
@ -1,25 +0,0 @@
|
||||
<?php
|
||||
|
||||
namespace SilverStripe\Forms\Tests;
|
||||
|
||||
use SilverStripe\Dev\SapphireTest;
|
||||
use SilverStripe\Forms\InlineFormAction;
|
||||
|
||||
/**
|
||||
* Tests {@see InlineFormAction}
|
||||
*/
|
||||
class InlineFormActionTest extends SapphireTest
|
||||
{
|
||||
|
||||
public function testField()
|
||||
{
|
||||
$action = new InlineFormAction('dothing', 'My Title', 'ss-action');
|
||||
$html = (string)$action->Field();
|
||||
$this->assertContains('<input', $html);
|
||||
$this->assertContains('type="submit"', $html);
|
||||
$this->assertContains('name="action_dothing"', $html);
|
||||
$this->assertContains('value="My Title"', $html);
|
||||
$this->assertContains('id="dothing"', $html);
|
||||
$this->assertContains('class="action ss-action"', $html);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user