private function setUserFormValidation(FormBuilder $form, $addusername = false)
{
$users = $this->users();
$form->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) use($addusername, $users) {
$form = $event->getForm();
$id = $form['id']->getData();
$pass1 = $form['password']->getData();
$pass2 = $form['password_confirmation']->getData();
// If adding a new user (empty $id) or if the password is not empty (indicating we want to change it),
// then make sure it's at least 6 characters long.
if ((empty($id) || !empty($pass1)) && strlen($pass1) < 6) {
$error = new FormError(Trans::__('page.edit-users.error.password-short'));
$form['password']->addError($error);
}
// Passwords must be identical.
if ($pass1 != $pass2) {
$form['password_confirmation']->addError(new FormError(Trans::__('page.edit-users.error.password-mismatch')));
}
if ($addusername) {
// Password must be different from username
$username = strtolower($form['username']->getData());
if (!empty($username) && strtolower($pass1) === $username) {
$form['password']->addError(new FormError(Trans::__('page.edit-users.error.password-different-username')));
}
// Password must not be contained in the display name
$displayname = strtolower($form['displayname']->getData());
if (!empty($displayname) && strrpos($displayname, strtolower($pass1)) !== false) {
$form['password']->addError(new FormError(Trans::__('page.edit-users.error.password-different-displayname')));
}
// Usernames must be unique.
if (!$users->checkAvailability('username', $form['username']->getData(), $id)) {
$form['username']->addError(new FormError(Trans::__('page.edit-users.error.username-used')));
}
}
// Email addresses must be unique.
if (!$users->checkAvailability('email', $form['email']->getData(), $id)) {
$form['email']->addError(new FormError(Trans::__('page.edit-users.error.email-used')));
}
// Displaynames must be unique.
if (!$users->checkAvailability('displayname', $form['displayname']->getData(), $id)) {
$form['displayname']->addError(new FormError(Trans::__('page.edit-users.error.displayname-used')));
}
});
return $form;
}