Compare commits

...

5 Commits

Author SHA1 Message Date
Will Rossiter ca1197e0f2
Merge 75c1f677eb into 0c8fcfb54c 2024-05-08 05:30:35 +12:00
Guy Sartorelli 0c8fcfb54c
Merge pull request #11213 from creative-commoners/pulls/5/required-has-one
FIX Handle getting HasOneRelationFieldInterface passed as an array
2024-05-07 13:01:59 +12:00
Guy Sartorelli 3449d8bf21
FIX Revert "ENH Add Nice to DBField" (#11222)
This reverts commit b167f470d7.
2024-05-07 11:45:48 +12:00
Steve Boyd b8f0b8ca4f FIX Handle getting HasOneRelationFieldInterface passed as an array 2024-05-02 12:06:43 +12:00
Will Rossiter 75c1f677eb
FIX mark a successful login attempt when completing a password reset (#10100) 2024-03-14 15:21:25 +13:00
5 changed files with 45 additions and 13 deletions

View File

@ -113,7 +113,12 @@ class RequiredFields extends Validator
if ($formField instanceof FileField && isset($value['error']) && $value['error']) {
$error = true;
} else {
$error = (count($value ?? [])) ? false : true;
if (is_a($formField, HasOneRelationFieldInterface::class) && isset($value['value'])) {
$stringValue = (string) $value['value'];
$error = in_array($stringValue, ['0', '']);
} else {
$error = (count($value ?? [])) ? false : true;
}
}
} else {
$stringValue = (string) $value;

View File

@ -5,8 +5,9 @@ namespace SilverStripe\Forms;
use SilverStripe\Dev\Deprecation;
use SilverStripe\Forms\DropdownField;
use SilverStripe\ORM\DataList;
use SilverStripe\Forms\HasOneRelationFieldInterface;
class SearchableDropdownField extends DropdownField
class SearchableDropdownField extends DropdownField implements HasOneRelationFieldInterface
{
use SearchableDropdownTrait;

View File

@ -516,14 +516,6 @@ abstract class DBField extends ViewableData implements DBIndexable
return $this->XML();
}
/**
* @return string
*/
public function Nice()
{
return $this->XML();
}
/**
* Returns the value to be set in the database to blank this field.
* Usually it's a choice between null, 0, and ''

View File

@ -13,6 +13,7 @@ use SilverStripe\ORM\FieldType\DBField;
use SilverStripe\ORM\ValidationException;
use SilverStripe\Security\Authenticator;
use SilverStripe\Security\IdentityStore;
use SilverStripe\Security\LoginAttempt;
use SilverStripe\Security\Member;
use SilverStripe\Security\Security;
@ -267,6 +268,19 @@ class ChangePasswordHandler extends RequestHandler
// Clear locked out status
$member->LockedOutUntil = null;
$member->FailedLoginCount = null;
// Create a successful 'LoginAttempt' as the password is reset
$loginAttempt = LoginAttempt::create();
$loginAttempt->Status = LoginAttempt::SUCCESS;
$loginAttempt->MemberID = $member->ID;
if ($member->Email) {
$loginAttempt->setEmail($member->Email);
}
$loginAttempt->IP = $this->getRequest()->getIP();
$loginAttempt->write();
// Clear the members login hashes
$member->AutoLoginHash = null;
$member->AutoLoginExpired = DBDatetime::create()->now();

View File

@ -5,6 +5,7 @@ namespace SilverStripe\Forms\Tests;
use SilverStripe\Dev\SapphireTest;
use SilverStripe\Forms\RequiredFields;
use SilverStripe\Forms\Form;
use SilverStripe\Forms\SearchableDropdownField;
use SilverStripe\Forms\TreeDropdownField;
use SilverStripe\Security\Group;
@ -289,16 +290,35 @@ class RequiredFieldsTest extends SapphireTest
);
}
public function testTreedropFieldValidation()
public function provideHasOneRelationFieldInterfaceValidation(): array
{
return [
[
'className' => TreeDropdownField::class,
],
[
'className' => SearchableDropdownField::class,
]
];
}
/**
* @dataProvider provideHasOneRelationFieldInterfaceValidation
*/
public function testHasOneRelationFieldInterfaceValidation(string $className)
{
$form = new Form();
$field = new TreeDropdownField('TestField', 'TestField', Group::class);
$param = $className === TreeDropdownField::class ? Group::class : Group::get();
$field = new $className('TestField', 'TestField', $param);
$form->Fields()->push($field);
$validator = new RequiredFields('TestField');
$validator->setForm($form);
// blank string and '0' are fail required field validation
// blank string and 0 and '0' and array with value of 0 fail required field validation
$this->assertFalse($validator->php(['TestField' => '']));
$this->assertFalse($validator->php(['TestField' => 0]));
$this->assertFalse($validator->php(['TestField' => '0']));
$this->assertFalse($validator->php(['TestField' => ['value' => 0]]));
$this->assertFalse($validator->php(['TestField' => ['value' => '0']]));
// '1' passes required field validation
$this->assertTrue($validator->php(['TestField' => '1']));
}