Хук после обновления пользователя

#16 5 ноября 2019 в 10:50
Рачей, событие на обновление пользователя работает. Пропишите вместо
  1. return $item;
это
  1. return false;
#17 5 ноября 2019 в 11:42
Loadырь,
Вся беда в том, что этот хук уже задействован в компоненте auth. И он, в случае успеха, возвращает массив
  1. array(['email'] => sprintf(LANG_AUTH_RESTRICTED_EMAIL, $profile['email']), ['nickname'] => sprintf(LANG_AUTH_RESTRICTED_NAME, $profile['nickname']));
Соответственно, если после него сработает какой-то свой хук (а он обязательно сработает после) и вернёт false, то вся операция прервется.
Я уже писал Рачею /forum/thread32380-1.html#317878 что надо добавить в конец хука, чтобы он выдал то, что нужно.
Но Рачей почему-то не захотел об этом слушать.
#18 5 ноября 2019 в 13:17
Ris, когда идет вызов "hookAll" всем до "фени", что возвращают другие. Они работают "одновременно", а не последовательно.
#19 6 ноября 2019 в 01:40


  1. return false;

Loadырь

Я пробовал с этим создав хук у юзера, сейчас попробую в auth
#20 6 ноября 2019 в 02:02
Не работает никак. Делал здесь
class onAuthUserProfileUpdate extends cmsAction {
#21 6 ноября 2019 в 07:38
А после создания новых хуков "События" обновляли?
#22 6 ноября 2019 в 10:48


А после создания новых хуков "События" обновляли?

Loadырь

Конечно. Там отрабатывает только в одном случае.
Если завершить хук.
Вместо
return
поставить
exit;
Тогда весь скрипт который туда дописываешь работает как надо.
#23 6 ноября 2019 в 12:14
Вероятно, есть такие же события в других компонентах, они и перезаписывают данные.
#24 6 ноября 2019 в 12:20
Рачей,
Попробуйте просто
  1. return array();
#25 6 ноября 2019 в 21:34


Вероятно, есть такие же события в других компонентах, они и перезаписывают данные.

Loadырь

Я создал новое поле и в него вносил информацию… если бы переписывалось, то в стандартных полях
#26 6 ноября 2019 в 21:38


Рачей,
Попробуйте просто

  1. return array();

Ris

Неа, не срабатывает… только exit;
И только при создании хука в компоненте user
#27 9 ноября 2019 в 13:42
Ну и что, вариантов больше ни у кого нет?
#28 10 ноября 2019 в 00:29
Хуков, как вы и заметили, для данной цели нет. В новой версии я добавлю. А пока вы можете у себя открыть файл /system/controllers/users/actions/profile_edit.php и строки

  1. // Обновляем профиль и редиректим на его просмотр
  2. $this->model->updateUser($profile['id'], $profile);
заменить на

  1. list($profile, $old) = cmsEventsManager::hook('users_before_update', [$profile, $old]);
  2.  
  3. // Обновляем профиль и редиректим на его просмотр
  4. $this->model->updateUser($profile['id'], $profile);
  5.  
  6. list($profile, $old) = cmsEventsManager::hook('users_after_update', [$profile, $old]);
После чего спокойно использовать эти хуки.
#29 10 ноября 2019 в 14:31
Fuze, спасибо. Это уже лучше. Но есть непонятка.
Зачем возвращается массив из 2 завистей о данных пользователя?
Получается повтор одного и того же

Создал хук смотрю что там пришло. В принципе с этим уже можно работать.
  1.  
  2. class onUsersUsersAfterUpdate extends cmsAction {
  3. public function run($profile) {
  4. echo '<pre>';
  5. print_r($profile);
  6.  
Я сейчас сделаю как мне надо, но если вы что-то поменяете в будущем, сообщите что бы я исправил у себя. Не думаю что сейчас все ломануться делать такие хуки😊
#30 10 ноября 2019 в 14:37
Сделал хук, все работает. Вдруг кому понадобится.
  1.  
  2.  
  3. <?php
  4. class onUsersUsersAfterUpdate extends cmsAction {
  5. public function run($profile) {
  6. /// только сам
  7. if($profile[0]['id'] == $this->cms_user->id) {
  8. $users_model = cmsCore::getModel('users');
  9. $group_to_id = 4;
  10. /// Добавляем нужную группу
  11. $profile[0]['groups'][] = $group_to_id;
  12. /// Удаляем повторения в массиве
  13. $profile[0]['groups'] = array_unique($profile[0]['groups']);
  14. $users_model->updateUser($profile[0]['id'], array(
  15. 'groups' => $profile[0]['groups'],
  16. 'date_group' => null
  17. ));
  18. }
  19. return $profile;
  20. }
  21. }
  22.  
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.