Бортовой журнал Ктулху

Битрикс: добавление подписчика при помощи API

Делал в корзине подтверждение подписки на новости для текущего пользователя.

Шаблон

В шаблон оформления заказа добавлем чекбокс с ajax обработчиком.

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

CModule::IncludeModule('subscribe');
 //активные и подтвержденные адреса, подписанные на рубрики
 $subscr = CSubscription::GetList(
 array(),
 array()
 );
 while(($subscr_arr = $subscr->Fetch())) {
 $aEmail = $subscr_arr["EMAIL"];
 if($aEmail == $USER->GetEmail()) {
 $subscribe_array = $subscr_arr;
break;
 }
 }
// чекбокс со статусом в зависимости от того подписан или нет
 if($aEmail == $USER->GetEmail()) {
 ?><p class="subscribe"><input id="subscribe" type="checkbox" name="subscribe" value="2" checked=checked>Рассылка</p><?
 } else {
 ?><p class="subscribe"><input id="subscribe" type="checkbox" name="subscribe" value="1">Подписаться на рассылку</p><?
 }
 ?>
<script type="text/javascript">
$(document).ready(function(){
 $('input#subscribe').click(function(){
 var status = $('input#subscribe').val();
 var subid = '<?=$subscribe_array['ID']?>';
$.ajax({
 type: "POST",
 data: {s:status,subid:subid},
 url: '/test.php', // обработчик
 success: function(data){
 alert(data);
 }
 });

 });
});
</script>

Обработчик

Файл subscribe.php.

require_once($_SERVER['DOCUMENT_ROOT'] . "/bitrix/modules/main/include/prolog_before.php");
// require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
// $APPLICATION->SetTitle("test");
CModule::IncludeModule('subscribe');
global $USER;
 
if($_POST['s'] !== '') {
############ НЕ ПОДПИСАН ли УЖЕ? ############
 $subscr = CSubscription::GetList(
 array(),
 array()
 );
 while(($subscr_arr = $subscr->Fetch()))
 $aEmail[] = $subscr_arr["EMAIL"];

 if(!in_array($USER->GetEmail(), $aEmail) && $_POST['s'] == 1) {
# пидпысаты нахiй
 // запрос всех рубрик
 $rub = CRubric::GetList(
 array("LID"=>"ASC","SORT"=>"ASC","NAME"=>"ASC"),
 array("ACTIVE"=>"Y", "LID"=>LANG)
 );
 $arRubIDS = array();
 while ($arRub = $rub->Fetch()){
 $arRubIDS[] = $arRub['ID'];
 }
 
 // формируем массив с полями для создания подписки
 $arFields = Array(
 "USER_ID" => $USER->GetID(),
 "FORMAT" => "html",
 "EMAIL" => $USER->GetEmail(),
 "ACTIVE" => "Y",
 "RUB_ID" => $arRubIDS,
 "SEND_CONFIRM" => 'N'
 );
$subscr = new CSubscription;
// создаем подписку
 $ID = $subscr->Add($arFields);
 if ($ID > 0){
 $arResult['status'] = 'ok';
 } else {
 $arResult['status'] = 'error';
 $arResult['msg'] = str_replace("<br>","",$subscr->LAST_ERROR);
 }
 
 $subscr->Update($ID, array("ACTIVE"=>"Y", "CONFIRM"=>"Y"));
echo "вы подписались на рассылку";
 } elseif(in_array($USER->GetEmail(), $aEmail) && $_POST['s'] == 2) {
 
 # видпысаты нахiй
 if (($res = CSubscription::Delete($_POST['subid'])) && $res->AffectedRowsCount() < 1 || $res == false){
 echo "Error deleting subscription.";
 } else {
 echo "Subscription deleted.";
 }
 }

 } else {
 echo "error";
 }