Drupal 8 profile validation not finding the right profile when validating submission on CMS user tabs
In drupal 8/9, like in drupal 7, the CMS user record by default has the Name and Address profile available for editing on the CMS side. As noted in passing at #117 (comment 40124) the validation for this form isn't working fully in drupal 8/9.
It appears to be a name vs label problem. The drupal 8 implementation uses the label to look up the profile. I have a quickie fix below but am mulling it over a bit since there's a lot of other things wrong with this form, e.g.
index 37e7ead..b18bb04 100644
--- a/src/Form/UserProfile.php
+++ b/src/Form/UserProfile.php
@@ -75,7 +75,12 @@ class UserProfile extends FormBase {
$this->profile = $profile;
// Search for the profile form, otherwise generate a 404.
- $uf_groups = \CRM_Core_BAO_UFGroup::getModuleUFGroup('User Account');
+ $uf_groups = \CRM_Core_BAO_UFGroup::getModuleUFGroup('User Account', 0, TRUE, \CRM_Core_Permission::VIEW, array(
+ 'id',
+ 'name',
+ 'title',
+ 'is_active',
+ ));
if (empty($uf_groups[$profile])) {
throw new ResourceNotFoundException();
}
@@ -109,7 +114,7 @@ class UserProfile extends FormBase {
* {@inheritdoc}
*/
public function validateForm(array &$form, FormStateInterface $form_state) {
- $errors = \CRM_Core_BAO_UFGroup::isValid($this->contactId, $this->ufGroup['title']);
+ $errors = \CRM_Core_BAO_UFGroup::isValid($this->contactId, $this->ufGroup['name']);
if (is_array($errors)) {
foreach ($errors as $name => $error) {
Relatedly, this seems an odd return value if it couldn't find the profile. Shouldn't it return an error? https://github.com/civicrm/civicrm-core/blob/a7b9631b60548092f8c3056c375dd4b81606dbd4/CRM/Core/BAO/UFGroup.php#L785