Skip to content

[Bug] Не сохраняются TV-поля пользователя при создании, если они зависят от выбранной роли #564

@wrkandreev

Description

@wrkandreev

Summary

При создании нового пользователя не сохраняются значения TV-полей, привязанных к выбранной роли пользователя.
После создания, если открыть этого же пользователя на редактирование и сохранить повторно, значения сохраняются корректно.

Steps to reproduce.

  1. Создать роль пользователя, к которой привязано одно или несколько TV-полей.
  2. Открыть форму создания нового пользователя.
  3. Выбрать эту роль.
  4. Заполнить одно из привязанных TV-полей.
  5. Сохранить пользователя.
  6. Открыть созданного пользователя на редактирование.

Observed behavior

Значения TV-полей отсутствуют. При повторном сохранении значения уже сохраняются корректно.

EvoCMS version

3.1.30

Any relevant information

При создании пользователя EditOrNewUser сначала делает UserManager::create($userData), потом сразу вызывает UserManager::saveValues($values) и только после этого меняет роль через UserManager::setRole(...) в core/src/Controllers/Users/EditOrNewUser.php:49, core/src/Controllers/Users/EditOrNewUser.php:136, core/src/Controllers/Users/EditOrNewUser.php:142.

saveValues() берет роль не из формы, а из БД: UserAttribute::select('role')->where('internalKey', $id)->value('role') в core/vendor/evocms-services/user-manager/src/Services/Users/UserSaveValues.php:101.

У нового пользователя роль в этот момент еще 0, потому что в UserAttribute поле role вообще не mass-assignable: его нет в $fillable в core/src/Models/UserAttribute.php:80.

Из-за этого при первом сохранении saveValues() ищет ТВ не для роли expert, а для роли 0, не находит expert_by_year, и год не сохраняется.

При последующем редактировании уже работает, потому что к тому моменту роль успевает записаться через setRole(), и saveValues() видит правильную роль.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions