Как работает хук user_profile_update.php?

 
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 1862
Большинство хуков которые работают на валидацию вводимых данных позволяют проверять вводимые данные и при необходимости хук кроме самих данных возвращает еще и ошибку $errors['.....'] для вывода в форму.

Но для чего работает хук при редактирования профиля пользователя user_profile_update.php?

Вот собственно вырезка из кода где хук используется: profile_edit.php

Код PHP:
  1. // Проверям правильность заполнения
  2. $errors = $form->validate($this, $profile);
  3.  
  4. if (!$errors){
  5. $is_allowed = cmsEventsManager::hookAll('user_profile_update', $profile, true);
  6. if ($is_allowed !== true && in_array(false, $is_allowed)) { $errors = true; }
  7. }
  8.  
  9. if (!$errors){
  10.  
  11. // Обновляем профиль и редиректим на его просмотр
  12. $this->model->updateUser($profile['id'], $profile);
Он либо возвращает true - значит все нормально, либо false, тогда на странице выводит ошибка в заполнении полей. А как указать какое поле именно вызвало ошибку? Где я что пропустил?

p.s. мне нужно сделать дополнительную валидацию полей при редактировании профиля.
з.ы. хаки не предлагать
Дополнения для InstantCMS
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 3770
kreator:
Но для чего работает хук при редактирования профиля пользователя user_profile_update.php?
Проверяет емаил и никнейм на отсутствие их в "чёрном списке".
Реклама
cms
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 1862
странно просто. во многих местах хук при валидации возвращает ошибки, а тут нет
Дополнения для InstantCMS
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 3770
Каждый хук пишется для своих целей. Вы можете написать свой хук user_profile_update и он параллельно обработает эти же данные, как вам надо и вернёт ошибки какие укажите, но вот только в файле profile_edit.php нужно будет делать хаки, чтобы обработать данные из вашего хука. А вам это уже не интересно.
Посетитель
small user social cms
МедальПочетный донор проектаКубок зрительских симпатий
Сообщений: 569
Событие "user_profile_update" в системе из коробки обрабатывает только один контроллер "auth" в \system\controllers\auth\hooks\user_profile_update.php.

Спойлер
Хук выводит описание ошибки на странице. Это сообщение о запрещённой почте:
Код PHP:
  1. cmsUser::addSessionMessage(sprintf(LANG_AUTH_RESTRICTED_EMAIL, $profile['email']), 'error');
А это - о запрещённом нике:
Код PHP:
  1. cmsUser::addSessionMessage(sprintf(LANG_AUTH_RESTRICTED_NAME, $profile['nickname']), 'error');
Непонятно, какую именно валидацию Вам нужно сделать, kreator. Но поскольку для вызова хука используется cmsEventsManager::hookAll(), то Вы действительно можете сделать свой обработчик с нужными проверками и он будет вызван до или после хука в user_profile_update.php. Если вызов будет после, то вы можете даже переопределить результат true от предыдущего обработчика на своё значение false. Если Ваш хук сработает первым и вернёт false, то true от следующих хуков Ваш false не изменят. Пока последовательность вызова обработчиков никак не регулируется. Судя по всему обработчики вызываются по алфавитной сортировке имён контроллеров. Но может быть и иначе, например, по расположению записей папок контроллеров в файловой системе.

Также в своём обработчике Вы тем же способом (через cmsUser::addSessionMessage) можете вывести желаемое сообщение пользователю.
В начало страницы
Предыдущая темаСледующая тема Перейти на форум:
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.