Добавляем согласие на обработку персональных данных в собственный компонент

Добавляем согласие на обработку персональных данных в собственный компонент
Добавляем согласие на обработку персональных данных в собственный компонент

Добавляем согласие на обработку персональных данных в собственный компонент

Просмотров: 0
Комментариев: 0
Согласно ФЗ-152 «О персональных данных» пользователь должен дать согласие на обработку своих персональных данных заполняя форму на сайте перед ее отправкой, а так же по его первому требованию администратор сайта должен удалить всю информацию о нем с сайта.


Для того то бы реализовать данную возможность на сайте нам надо открыть страницу  Соглашения (Настройки > Настройки продукта > Соглашения), тут выводятся все созданные и используемые соглашения и с неё же можно перейти к списку полученных соглашений от пользователей.

antfas"Казначеев".png


Соглашение - текст, который должен прочитать пользователь и согласится с ним. В дистрибутиве есть стандартный вариант соглашения, но у администратора всегда есть возможность создать свой текст соглашения. Для этого на странице Соглашения воспользуйтесь кнопкой Добавить.

antfas


Создание соглашение - несложный процесс. Несколько особенностей:

  • Если нужно нестандартный текст соглашения - используйте тип Собственный.
  • Если нужно просто модифицировать стандартное соглашение, то используйте тип Стандартный, а в открывшихся полях укажите свои варианты текста. Они подменят собой в соглашении аналогичные стандартные блоки.
  • Если компаний в системе несколько, то лучше использовать ручной ввод данных в поле Источник данных. По умолчанию система выводит все компании, которые есть.
  • Если не заполнено поле Email-адрес для жалоб, то система будет использовать адрес по умолчанию из настроек главного модуля.

Для каждого соглашения можно просмотреть список согласий .

antfas antfas

Список согласий не подразумевает удаления согласия. Фильтр поможет найти нужное согласие в общем списке

Для получения согласия пользователя в компоненте включите опцию Запрашивать согласие (на примере sale.order.ajax):


Добавляем согласие на обработку персональных данный в собственный компонент:


Но не все компоненты с формами имеют поддержку на обработку соглашения пользовательских данных. Тут нам и поможет отдельный компонент "Форма подписи" для обработки персональных данных на сайте. 


В файле параметров вашего компонента .parameters.php достаточно объявить параметр "USER_CONSENT" => array() и появится раздел с параметрами настройки:
<? if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die(); $arComponentParameters = array( "GROUPS" => array( ), "PARAMETERS" => array( "AJAX_MODE" => array(), "USER_CONSENT" => array(), ) ); ?>

Теперь в настройках компонента появились секция Согласие пользователя:

antfas


Вывод в форме

Для вывода используется компонент main.userconsent.request . Компонент умеет сохранять полученное согласие. Он выводит чекбокс с подписью, по нажатию на которую выводится окно с текстом соглашения. Окно с текстом адаптивное и уже сделано и под мобильные устройства:

Компонент main.userconsent.request нужно подключить в шаблоне вашего компонента перед кнопкой отправки формы. Есть два вида форм:

  • стандартная get/post отправка формы с событием submit;
  • отправка через ajax и иные механизмы, реализованные в js, то есть без события submit у формы.

В этих формах компонент используется по разному.


Простая форма с событием submit

В этом случае подключаем компонент перед кнопкой отправки формы:

<form method="POST"> <input name="EMAIL" placeholder="Email"> <input name="PHONE" placeholder="Телефон"> <input name="NAME" placeholder="Имя"> <br> <?if ($arParams['USER_CONSENT'] == 'Y'):?> <?$APPLICATION->IncludeComponent( "bitrix:main.userconsent.request", "", array( "ID" => $arParams["USER_CONSENT_ID"], "IS_CHECKED" => $arParams["USER_CONSENT_IS_CHECKED"], "AUTO_SAVE" => "Y", "IS_LOADED" => $arParams["USER_CONSENT_IS_LOADED"], "REPLACE" => array( 'button_caption' => 'Подписаться!', 'fields' => array('Email', 'Телефон', 'Имя') ), ) );?> <?endif;?> <input type="submit" name="subscribe" value="Подписаться!"> </form>


Указанные в примере параметры $arParams появятся в шаблоне вашего компонента при наличии в .parameters.php блока "USER_CONSENT" => array().

В параметре REPLACE передается:

  • button_caption - название кнопки отправки формы;
  • fields - массив названий полей, которые попадут в текст соглашения.

Форма без события submit(ajax и другие)

В компонент в параметре SUBMIT_EVENT_NAME передаётся название события, при котором появится окно запроса согласия.

Далее, добавляется обработчик события принятия соглашения. Если обработчик поймает событие - значит, согласие получено и можно отправлять форму/данные или выполнять какое-то действие.

<div id="my_container"> <input type="text" placeholder="Электронный адрес" name="EMAIL"> <input type="submit" id="fire_event" value="Отправить"> <br> <?if ($arParams['USER_CONSENT'] == 'Y'):?> <?$APPLICATION->IncludeComponent( "bitrix:main.userconsent.request", "", array( 'ID' => $arParams["USER_CONSENT_ID"], "IS_CHECKED" => $arParams["USER_CONSENT_IS_CHECKED"], "IS_LOADED" => "Y", "AUTO_SAVE" => "N", 'SUBMIT_EVENT_NAME' => 'my-event-name', 'REPLACE' => array( 'button_caption' => 'Отправить', 'fields' => array('Электронный адрес') ), ) );?> <?endif;?> </div> <script type="text/javascript"> BX.ready(function () { var submitBtn = BX('fire_event'); BX.bind(submitBtn, 'click', function(){ BX.onCustomEvent('my-event-name', []); }); if (!BX.UserConsent) { return; } var control = BX.UserConsent.load(BX('my_container')); if (!control) { return; } BX.addCustomEvent( control, BX.UserConsent.events.save, function (data) { console.log('js event:', 'save', data); // успешно! // отправляем ajax // или другие действия } ); }); </script>
В параметрах компонента есть параметр AUTO_SAVE. Если его значение равно Y, то согласие автоматически сохраняется компонентом. Если вам нужно сохранить согласие самим, топередайте значение N. А для ручного добавления согласия вызовите следующий код:
\Bitrix\Main\UserConsent\Consent::addByContext( $arParams["USER_CONSENT_ID"] );
Записная книжка:

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