From 6187002fb189cdfcc59a81aae7d217bcf7baaa85 Mon Sep 17 00:00:00 2001 From: Morven Lewis-Everley Date: Sat, 28 Apr 2018 15:08:03 +0100 Subject: [PATCH] Switch to generating edit account based on Member::frontendFields --- _config/config.yml | 7 +++- changelog.md | 7 +++- code/forms/Users_EditAccountForm.php | 63 +++++++++++++++++++--------- 3 files changed, 55 insertions(+), 22 deletions(-) diff --git a/_config/config.yml b/_config/config.yml index 72b234b..cca95d1 100755 --- a/_config/config.yml +++ b/_config/config.yml @@ -2,9 +2,12 @@ Group: extensions: - Ext_Users_Group Member: + required_fields: + - "FirstName" + - "Surname" + - "Email" extensions: - Ext_Users_Member Controller: extensions: - - Ext_Users_Controller - + - Ext_Users_Controller \ No newline at end of file diff --git a/changelog.md b/changelog.md index 4d154b4..3566d32 100644 --- a/changelog.md +++ b/changelog.md @@ -37,4 +37,9 @@ Minor update to: # 1.2.1 -* Add additional extension hooks when edit form submitted \ No newline at end of file +* Add additional extension hooks when edit form submitted + +# 1.3.0 + +* Switch to using frontend form fields to generate the "Edit Account Details" form +* Add better error handling on edit account submission \ No newline at end of file diff --git a/code/forms/Users_EditAccountForm.php b/code/forms/Users_EditAccountForm.php index 09508af..e7d3ad3 100755 --- a/code/forms/Users_EditAccountForm.php +++ b/code/forms/Users_EditAccountForm.php @@ -3,21 +3,48 @@ class Users_EditAccountForm extends Form { + /** + * These fields will be ignored by the `Users_EditAccountForm` + * when generating fields + */ + private static $ignore_member_fields = array( + "LastVisited", + "FailedLoginCount", + "DateFormat", + "TimeFormat", + "VerificationCode", + "Password", + "HasConfiguredDashboard", + "URLSegment", + "BlogProfileSummary", + "BlogProfileImage" + ); + public function __construct($controller, $name = "Users_EditAccountForm") { - $fields = new FieldList( - HiddenField::create("ID"), - TextField::create( - "FirstName", - _t('Member.FIRSTNAME', "First Name") - ), - TextField::create( - "Surname", - _t('Member.SURNAME', "Surname") - ), - EmailField::create( - "Email", - _t("Member.EMAIL", "Email") + $member = Member::singleton(); + $hidden_fields = array_merge( + $member->config()->hidden_fields, + static::config()->ignore_member_fields + ); + + $fields = $member->getFrontEndFields(); + + // Remove all "hidden fields" + foreach ($hidden_fields as $field_name) { + $fields->removeByName($field_name); + } + + // Add the current member ID + $fields->add(HiddenField::create("ID")); + + // Switch locale field + $fields->replaceField( + 'Locale', + DropdownField::create( + "Locale", + $member->fieldLabel("Locale"), + i18n::get_existing_translations() ) ); @@ -37,11 +64,9 @@ public function __construct($controller, $name = "Users_EditAccountForm") $this->extend("updateFormActions", $actions); - $required = new RequiredFields(array( - "FirstName", - "Surname", - "Email" - )); + $required = new RequiredFields( + $member->config()->required_fields + ); $this->extend("updateRequiredFields", $required); @@ -68,7 +93,7 @@ public function doUpdate($data) $this->extend("onBeforeUpdate", $data); - // Check that a mamber isn't trying to mess up another users profile + // Check that a member isn't trying to mess up another users profile if (Member::currentUserID() && $member->canEdit(Member::currentUser())) { // Save member $this->saveInto($member);