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

 
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 3627
Рачей, событие на обновление пользователя работает. Пропишите вместо
Код PHP:
  1. return $item;
это
Код PHP:
  1. return false;
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатийПочетный донор проекта
Сообщений: 2762
Loadырь,
Вся беда в том, что этот хук уже задействован в компоненте auth. И он, в случае успеха, возвращает массив
Код PHP:
  1. array(['email'] => sprintf(LANG_AUTH_RESTRICTED_EMAIL, $profile['email']), ['nickname'] => sprintf(LANG_AUTH_RESTRICTED_NAME, $profile['nickname']));
Соответственно, если после него сработает какой-то свой хук (а он обязательно сработает после) и вернёт false, то вся операция прервется.
Я уже писал Рачею https://instantcms.ru/forum/thread32380-1.html#317878 что надо добавить в конец хука, чтобы он выдал то, что нужно.
Но Рачей почему-то не захотел об этом слушать.
Реклама
cms
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 3627
Ris, когда идет вызов "hookAll" всем до "фени", что возвращают другие. Они работают "одновременно", а не последовательно.
Посетитель
small user social cms
Медаль
Сообщений: 447
Loadырь:

Код PHP:
  1. return false;

Я пробовал с этим создав хук у юзера, сейчас попробую в auth
Посетитель
small user social cms
Медаль
Сообщений: 447
Не работает никак. Делал здесь
class onAuthUserProfileUpdate extends cmsAction {
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 3627
А после создания новых хуков "События" обновляли?
Посетитель
small user social cms
Медаль
Сообщений: 447
Loadырь:

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

Конечно. Там отрабатывает только в одном случае.
Если завершить хук.
Вместо
return
поставить
exit;
Тогда весь скрипт который туда дописываешь работает как надо.
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 3627
Вероятно, есть такие же события в других компонентах, они и перезаписывают данные.
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатийПочетный донор проекта
Сообщений: 2762
Рачей,
Попробуйте просто
Код PHP:
  1. return array();
Посетитель
small user social cms
Медаль
Сообщений: 447
Loadырь:

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

Я создал новое поле и в него вносил информацию... если бы переписывалось, то в стандартных полях
Посетитель
small user social cms
Медаль
Сообщений: 447
Ris:

Рачей,
Попробуйте просто
Код PHP:
  1. return array();

Неа, не срабатывает.. только exit;
И только при создании хука в компоненте user
Редактировалось: 1 раз (Последний: 6 ноября 2019 в 21:42)
Посетитель
small user social cms
Медаль
Сообщений: 447
Ну и что, вариантов больше ни у кого нет?
InstantCMS Team
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 4436
Хуков, как вы и заметили, для данной цели нет. В новой версии я добавлю. А пока вы можете у себя открыть файл /system/controllers/users/actions/profile_edit.php и строки

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

Код PHP:
  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]);
После чего спокойно использовать эти хуки.
Видео каталог для InstantCMS | Аудио каталог для InstantCMS | Мы Вконтакте | Предложение для спонсоров
Посетитель
small user social cms
Медаль
Сообщений: 447
Fuze, спасибо. Это уже лучше. Но есть непонятка.
Зачем возвращается массив из 2 завистей о данных пользователя?
Получается повтор одного и того же

Создал хук смотрю что там пришло. В принципе с этим уже можно работать.
Код PHP:
  1.  
  2. class onUsersUsersAfterUpdate extends cmsAction {
  3. public function run($profile) {
  4. echo '<pre>';
  5. print_r($profile);
  6.  
Я сейчас сделаю как мне надо, но если вы что-то поменяете в будущем, сообщите что бы я исправил у себя. Не думаю что сейчас все ломануться делать такие хуки smile
Посетитель
small user social cms
Медаль
Сообщений: 447
Сделал хук, все работает. Вдруг кому понадобится.
Код PHP:
  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.  
В начало страницы
Предыдущая темаСледующая тема Перейти на форум:
Страницы: Первая Предыдущая 1 2
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.