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

#1 8 октября 2019 в 19:26
Как мне выполнить какой-нибудь хук после обновления данных?
Например в своем компоненте?
Пользователь обновил данные и хук выполнился.
Посмотрел по cmsEventsManager::hook в юзерах там про обновление нет ничего… для удаления юзеров средств выполнения хуков полно… а для обновления нет ничего… как быть?
#2 8 октября 2019 в 20:04
  1. $is_allowed = cmsEventsManager::hookAll('user_profile_update', $profile, true);
\system\controllers\users\actions\profile_edit.php 87-я строка
#3 9 октября 2019 в 23:28
Спасибо! Опробую!
#4 10 октября 2019 в 13:16
  1.  
  2. <?php
  3.  
  4. class onUsersUserProfileUpdate extends cmsAction {
  5.  
  6. public function run($item){
  7.  
  8. // Группа в которую переносим
  9. $group_to_id = 4;
  10.  
  11. // Если автор еще не в нужной группе
  12. if (in_array($group_to_id, $item['groups']) === false ){
  13.  
  14. // Добавляем нужную группу
  15. $user['groups'][] = $group_to_id;
  16.  
  17. // Удаляем повторения в массиве
  18. $user['groups'] = array_unique($user['groups']);
  19.  
  20. // Обновляем группы в профиле автора
  21. $this->model->updateUser($item['id'], array(
  22. 'groups' => $user['groups'],
  23. 'date_group' => null
  24. ));
  25.  
  26. }
  27. return $item;
  28.  
  29. }
  30. }
  31.  
Не работает, точнее работает с ошибками…

Если return $item; выдает ошибку

Notice: Array to string conversion in templates/default/assets/ui/form_fields.tpl.php on line 93
Array

Но работу выполняет..
А если return; то ничего не происходит.

Что я делаю не так?
#5 12 октября 2019 в 08:05
И что, никто не может помочь в этом вопросе???
Что делать-то? Как мне при заполнении одного из обязательных полей перевести пользователя в другую группу?
Может есть решение другое, например стандартными методами???
Кстати неплохо бы было в "Профили пользователей" где переводы, типа зависимые от времени добавить фигню какую-нибудь… по заполнению каких-то полей или выполнению каких=то действий… Время это просто время, а вот стимул это выполнение действия.
#6 12 октября 2019 в 10:01

Что делать-то?

Рачей
Смотреть почему в строке 93 у файла templates/default/assets/ui/form_fields.tpl.php приходит массив, а не строка
#7 14 октября 2019 в 01:29
потому что там приходит массив картинок у аватарки. по идее должна приходить одна которая показывается..

  1.  
  2. (
  3. [normal] => 000/u2/000/33aee11d.jpg
  4. [small] => 000/u2/000/3c70a9cb.jpg
  5. [micro] => 000/u2/000/5f9e66a8.jpg
  6. )
  7.  
А где копать почему вместо одной массив приходит я хз… возможно это надо разработчиков просить найти где это?
#8 15 октября 2019 в 09:50

А где копать

Рачей
Сначала надо определить, в каком хуке идет изменение данных. Для это надо по очереди отключать события в Админка — Компоненты — Управление событиями и смотреть на проявление ошибки. И начать надо со своих или измененных событий. После этого уже можно будет более детально разбираться в ситуации.
#9 16 октября 2019 в 03:03


Сначала надо определить, в каком хуке идет изменение данных. Для это надо по очереди отключать события в Админка — Компоненты — Управление событиями и смотреть на проявление ошибки. И начать надо со своих или измененных событий. После этого уже можно будет более детально разбираться в ситуации.

Loadырь
все стандартно, за исключением того что я написал выше. кроме этого хука ничего нет. значит надо искать в системных событиях?
#10 19 октября 2019 в 13:05
В итоге у меня нифига не выходит. Я не понимаю в чем проблема… Никто не может помочь. Звиздец какой-то… Моих знаний не хвататет что бы разобраться в этой канители.
И что вот теперь делать?
#11 19 октября 2019 в 18:03

В итоге у меня нифига не выходит. Я не понимаю в чем проблема… Никто не может помочь

Рачей
Так Вы же скрываете, что хотите сделать.
Скажите открытым текстом, что должно произойти при обновлении пользователя и Вам сразу помогут.
Я например помогу.
#12 20 октября 2019 в 04:00

Так Вы же скрываете, что хотите сделать.

Ris
Как же скрываю-то? Я написал что после Заполнения определенного поля профиля его необходимо проверить это поле и при удачном ответе пользователь перейдёт в другую группу.

Изначально все пользователи в группе Новые. Если он добавит в поле информацию и она будет правильной, то его переведёт в группу Пользователи. Хук выше по идее должен это сделать… Но что-то идёт не так.
#13 20 октября 2019 в 12:36
Рачей,
Из вашего хука непонятно, при каком условии обновляется группа юзера.
Но всё равно, попробуйте так:
  1. <?php
  2.  
  3. class onUsersUserProfileUpdate extends cmsAction {
  4.  
  5. public function run($profile){
  6.  
  7. // Группа в которую переносим
  8. $group_to_id = 4;
  9.  
  10. // Если автор еще не в нужной группе
  11. if (in_array($group_to_id, $profile['groups']) === false ){
  12.  
  13. // Добавляем нужную группу
  14. $user['groups'][] = $group_to_id;
  15.  
  16. // Удаляем повторения в массиве
  17. $user['groups'] = array_unique($user['groups']);
  18.  
  19. // Обновляем группы в профиле автора
  20. $this->model->updateUser($profile['id'], array(
  21. 'groups' => $user['groups'],
  22. 'date_group' => null
  23. ));
  24.  
  25. }
  26.  
  27. if (!$profile) { return array('csrf_token'=>''); }
  28.  
  29. $success = array();
  30.  
  31. if ($this->cms_user->is_admin) { return $success; }
  32.  
  33. if (!$this->isEmailAllowed($profile['email'])){
  34. $success['email'] = sprintf(LANG_AUTH_RESTRICTED_EMAIL, $profile['email']);
  35. }
  36.  
  37. if (!$this->isNameAllowed($profile['nickname'])){
  38. $success['nickname'] = sprintf(LANG_AUTH_RESTRICTED_NAME, $profile['nickname']);
  39. }
  40.  
  41. return $success;
  42.  
  43. }
  44. }
#14 20 октября 2019 в 15:33
Да извиняюсь, переносится если заполнено поле "basecode" например! Ну или любое другое
#15 5 ноября 2019 в 10:10
Как обратить внимание разработчиков на эту проблему неработоспособности хука после обновления пользователя????
Вставьте туда что угодно и результата не будет.
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.