Тема: СМС оповещения, логика + описания к дополнительным полям профиля

Здравствуйте.
Хотел сделать смс оповещения и зарегистрировался на сайте смсуслуги, модуль которого у вас написан. Все вроде отлично и сервис понравился, но беда в том, что без договора с ними, отправлять смс на боевом сервере нельзя и сообщения блокируют. Тут я полез в гугл и увидел, что смс пользователю без его согласия отправлять нельзя, вообще никакое, иначе штраф. Далее полез в код и нашел поле в базе subscribe_on, но оно нигде не используется. Хотел его добавить например в профиль пользователя, для редактирования, но не получается т.к. в action вначале стоит фильтр post данных

$user = clone \RS\Application\Auth::getCurrentUser();
$user->usePostKeys(array('is_company', 'company', 'company_inn', 
                        'name', 'surname', 'midname', 'phone', 
                        'e_mail', 'openpass', 'captcha', 'data', 'changepass'));

Просто так добавить туда дополнительное поле на сколько понял нельзя. Перекрывать контроллер тоже не хочется из за одной строчки. В общем я так понял, нужно дать возможного патча.
Но нашел временное решение, на мой взгляд очень костыльное. Добавил доп. булевое поле в профиль пользователя с идентификатором sms_info и сделал альтернативный модуль отправки смс, который будет проверять это поле и если "1", то отправлять смс. Есть ли какое то альтернативное и менее костыльное решение?
P.S. Еще очень не хватает описания к дополнительным полям пользователя. Например мне надо поле "Вконтакте" а в описании указать, что нужно вставлять ссылку, а не ФИ.

Повысить оценку Понизить оценку

2

Re: СМС оповещения, логика + описания к дополнительным полям профиля

Если у вас задача: Использовать собственный код в контроллере регистрации, то

перегрузить стандартный контроллер можно двумя способами (оба описаны в нашей статье - http://readyscript.ru/text-blog/Kak-pra … yScript/):

1. Перегрузкой маршрута (рекомендуется)
2. Подменой класса (.my.inc.php)
--------------------------------------------------------------------

Если у вас задача - вставить при отправке SMS проверку разрешения от пользователя, то мне кажется вы выбрали оптимальный путь (доработав всего один класс (смс-транспорт) и полностью сохранив возможность обновления):

1. Создали доп. поле стандартными средствами в настройках модуля Пользователь. (насколько я понял)
2. Создали свой транспортный модуль для SMS, который проверяет данное поле. (это все равно нужно было бы делать, т.к. стандартный модуль не делает проверку на разрешение пользователя)

Не совсем понятно в чем костыльность вашего решения? (Возможно задача бы решалась проще, если бы было какое-нибудь событие перед отправкой SMS, которое бы можно было перехватывать и останавливать отправку.)
Или опишите, как бы вы хотели видеть реализацию вашей задачи?

Повысить оценку Понизить оценку

Re: СМС оповещения, логика + описания к дополнительным полям профиля

admin пишет:

Если у вас задача: Использовать собственный код в контроллере регистрации, то

перегрузить стандартный контроллер можно двумя способами (оба описаны в нашей статье - http://readyscript.ru/text-blog/Kak-pra … yScript/):

1. Перегрузкой маршрута (рекомендуется)
2. Подменой класса (.my.inc.php)
--------------------------------------------------------------------

Если у вас задача - вставить при отправке SMS проверку разрешения от пользователя, то мне кажется вы выбрали оптимальный путь (доработав всего один класс (смс-транспорт) и полностью сохранив возможность обновления):

1. Создали доп. поле стандартными средствами в настройках модуля Пользователь. (насколько я понял)
2. Создали свой транспортный модуль для SMS, который проверяет данное поле. (это все равно нужно было бы делать, т.к. стандартный модуль не делает проверку на разрешение пользователя)

Не совсем понятно в чем костыльность вашего решения? (Возможно задача бы решалась проще, если бы было какое-нибудь событие перед отправкой SMS, которое бы можно было перехватывать и останавливать отправку.)
Или опишите, как бы вы хотели видеть реализацию вашей задачи?

Я бы хотел:
Вынести переменные, которые фильтруют получаемые значения, чтобы можно было их исправлять из дочернего (своего) контроллера.

$user->usePostKeys(array('is_company', 'company', 'company_inn', 
                        'name', 'surname', 'midname', 'phone', 
                        'e_mail', 'openpass', 'captcha', 'data', 'changepass'));

В данный момент, чтобы добавить туда какое то поле, мне нужно полностью дублировать indexAction в свой контроллер, что не очень хорошо, если в каком нибудь новом патче будут изменения этого action.

Это позволило бы мне использовать поле subscribe_on т.к. оно больше не используется в системе.
А костыльность заключается в том, что идеально бы иметь поле в таблице users, а не отдельным, которое тоже нужно добавить пользователем. Вот например я захочу сделать расширение, решающее эту проблему отправки смс, а ему для того, чтобы оно заработало, нужно добавить поле с определенным идентификатором и потом еще его случайно не удалить. В общем оно должно быть изолировано от пользователя.

Вы пишите про событие. Я еще только разбираюсь в вашей системе. Но было бы здорово иметь события типа beforeSend, это так же позволило бы не дублировать код.

Повысить оценку Понизить оценку