-
Notifications
You must be signed in to change notification settings - Fork 36
[Bug] Не сохраняются TV-поля пользователя при создании, если они зависят от выбранной роли #564
Description
Summary
При создании нового пользователя не сохраняются значения TV-полей, привязанных к выбранной роли пользователя.
После создания, если открыть этого же пользователя на редактирование и сохранить повторно, значения сохраняются корректно.
Steps to reproduce.
- Создать роль пользователя, к которой привязано одно или несколько TV-полей.
- Открыть форму создания нового пользователя.
- Выбрать эту роль.
- Заполнить одно из привязанных TV-полей.
- Сохранить пользователя.
- Открыть созданного пользователя на редактирование.
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() видит правильную роль.