Bitrix

закон ФЗ-152

С 1 июля 2017 года существенно ужесточена административная ответственность за нарушения при взаимодействии с персональными данными физических лиц.
Мы надеемся, что вы уже ознакомлены с законом и ищете техническую информацию.
Данная статья расскажет, что для разработчика решений и компонентов в продукте есть инструменты для помощи в соответствии закону.

Каждая форма, которая собирает, к примеру, имя, фамилию, email или телефон, должна запрашивать согласие пользователя на обработку персональных данных.
В обновлении главного модуля 17.0.9 выпустили набор инструментов, который поможет соответствовать закону ФЗ-152 о персональных данных.
Начну с того, что в административном разделе в меню появился новый пункт: Настройки -> Настройки продукта -> Соглашения
В нем вы можете создать новое соглашение для запроса согласия на обработку персональных данных, используя стандартный текст, который уже включен в обновление.

Рассмотрим как включить поддержку соглашений в ваших компонентах на примере компонента подписки на рассылку sender.subscribe.

1. Выбор.

Сделаем в параметрах компонента выбор соглашения для вывода.
Для этого в файле параметров вашего компонента .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(),
    )
); 

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

2. Вывод в форме.

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

Также, компонент умеет сохранять полученное согласие.
Само согласие будет в списке, показываемым в по клику в пункте «Полученные согласия» в контекстом меню соглашения на списке.

Компонент main.userconsent.request нужно подключить в шаблоне вашего компонента перед кнопкой отправки формы.
Есть два вида форм:
— один стандартная get/post отправка формы с событием submit;
— отправка через ajax и иные механизмы, реализованные в js, то есть без события submit у формы.
Для них нужно по разному использовать компонент.

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

Подключаем компонент main.userconsent.request перед кнопкой отправки формы

<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, массив названий полей, которые попадут в текст соглашения.

2) Форма без события 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>

3. Сохранение согласия.

В параметрах компонента есть параметр AUTO_SAVE.
Если его значение равно Y, то согласие автоматически сохраняется компонентом.

Если вам нужно сохранить согласие самим, то передайте значение N.
А для ручного добавления согласия вызовите следующий код:

\Bitrix\Main\UserConsent\Consent::addByContext(
$arParams[«USER_CONSENT_ID»]
);

Теперь у вас есть инструмент, с помощью которого можно быстро привести свои компоненты в соответствие закону.

Отставить комментарий

Ваш электронный адрес не будет опубликован.Обязательные для заполнения поля отмечены *

3 × три =