Раскопки...
1. Есть раздел /bitrix/admin/cat_subscription_list.php?lang=ru , где видно кто на что подписался, который заполняется примерно таким кодом:
Код |
---|
$subscribeManager = new \Bitrix\Catalog\Product\SubscribeManager;
$result = $subscribeManager->addSubscribe(
array(
'USER_CONTACT' => $email,
'ITEM_ID' => $id,
'SITE_ID' => 's1',
'CONTACT_TYPE' => 1,
'USER_ID' => ($USER->IsAuthorized()) ? $USER->GetID() : false
)
);
|
Если изменить количество товара с нуля на любое положительное число, то оповещение не срабатывает.
2. Ок, кладем товар в корзину с параметром SUBSCRIBE => Y:
Код |
---|
if (CModule::IncludeModule("sale") && CModule::IncludeModule("catalog")) {
$PRODUCT_ID = 307;
Add2BasketByProductID(
$PRODUCT_ID,
1,
array("QUANTITY" => 1,"SUBSCRIBE" => "Y", "LID"=>"s1"),
array()
);
}
|
Если изменить количество товара с нуля на любое положительное число, то оповещение срабатывает, отправляя письмо по типу события SALE_SUBSCRIBE_PRODUCT.
Но! При этом таблица из пункта 1 не трогается и подписка пользователя не деактивируется в таблице из п. 1.
Более того, есть подозрение, что подписаться на товар неавторизованный пользователь не может, т.к. при появлении товара срабатывает метод CAllSaleBasket::ProductSubscribe() из файла /bitrix/modules/sale/general/basket.php, который по коду вытаскивает email из профиля пользователя.
Не совсем тогда понятно каким образом работает оповещение по таблице из пункта 1, куда можно добавить и неавторизованного пользователя?
UPD спустя пару часов:Нашел как это работает. Есть агент \Bitrix\Catalog\SubscribeTable::sendNotice();, который запускается каждые 10 секунд, и который из раздела /bitrix/admin/cat_subscription_list.php?lang=ru отправляет письма после того, как изменили количество доступного товара с нуля на любое положительное число. Но с одним нюансом - после отправки письма в этом разделе в колонке "Активность" продолжает стоять "Да" и колонка "Дата окончания подписки" остается пустой. Оказывается, этот агент после отправки всех писем прописывает в БД в таблицу b_catalog_subscribe параметр "N" в поле "NEED_SENDING".
А я смотрю, что "Активность" продолжает оставаться "Да" и делаю вывод, что письма не отправились. В b_event при этом ничего не падало, т.к. разработка была на тестовом сервере, агенты были на кроне, а крон не был настроен. При ручном запуске агента из консоли битрикса заработало.
Шаблон письма, которое отправляется, привязан к типу событий "CATALOG_PRODUCT_SUBSCRIBE_NOTIFY".