Работа с подписчиками средствами API UMI.CMS

Материал из Umicms
Перейти к:навигация, поиск

В некоторых случаях, когда очень много подписчиков, сложно выполнить однотипные операции для большого количества объектов, к примеру привязка все подписчиков к определенной рассылке. В статье рассмотрим два скрипта. Первый скрипт снимает привязку к рассылке для всех подписчиков:

<?php
header("Content-type: text/html; charset=utf-8");
include "standalone.php";

// поиск подписчиков, которые потом будут отписаны от всех рассылок
$subscribers = new selector('objects');
$subscribers->types('object-type')->name('dispatches', 'subscriber');
// подписчик должен быть подписан хотя бы на одну рассылку
$subscribers->where('subscriber_dispatches')->isnull();
$subscribers->limit(0, 50);
$total = $subscribers->length;
foreach($subscribers as $subscribers){
  $subscribers->setValue('subscriber_dispatches', array());
  $subscribers->commit();
}

if($total > 0){
  echo 'Отписка от рассылок еще 50-ти подписчиков выполнена';
}else echo 'Отписка всех подписчиков выполнена';

?>

создается файл, к примеру с названием set_null_dispath.php копируется в корень сайта и запускается. Второй скрипт привязывает всех подписчиков к указанным рассылкам:

// Рассылки, 324, 325 - object_id рассылок
$dispatchs[] = 324;
$dispatchs[] = 325;
<?php
header("Content-type: text/html; charset=utf-8");
include "standalone.php";

$dispatchs = array();
// Рассылки, 324, 325 - object_id рассылок
$dispatchs[] = 324;
$dispatchs[] = 325;

$objectTypes = umiObjectTypesCollection::getInstance();
$dispatchObjectTypeId = $objectTypes->getBaseType("dispatches", "dispatch");

$objects = umiObjectsCollection::getInstance();
$dispatchs_objects = array();
foreach($dispatchs as $dispatch_id){
  $object_dispatch = $objects->getObject($dispatch_id);
  if($object_dispatch && $object_dispatch->getTypeId() == $dispatchObjectTypeId) $dispatchs_objects[] = $object_dispatch;
}


// поиск подписчиков, которые не подписаны ни на одну из рассылок
$subscribers = new selector('objects');
$subscribers->types('object-type')->name('dispatches', 'subscriber');
$subscribers->where('subscriber_dispatches')->isnull(true);
$subscribers->limit(0, 50);
$total = $subscribers->length;

foreach($subscribers as $subscribers){
  $subscribers->setValue('subscriber_dispatches', $dispatchs_objects);
  $subscribers->commit();
}

if($total > 0){
  echo 'Подписаны следующие 50-ти подписчиков';
}else echo 'Выполнена подписка всех подписчиков';

?>