Esempio n. 1
0
 /** @return bool */
 protected final function filterConnectorData()
 {
     $result = true;
     $endpoint = $this->getConnector();
     if (is_array($endpoint) && !empty($endpoint['CODE'])) {
         // do not send mails if connector will not found
         $result = false;
         // try to find connector
         $connector = ConnectorManager::getConnector($endpoint);
         $this->connector = $connector;
     } elseif (is_object($endpoint) && $endpoint instanceof Connector) {
         $this->connector = $endpoint;
     }
     if ($this->connector) {
         // merge connector filter and proxy fields. proxy fields have priority
         $connectorFields = $this->getProxyFieldsFromEventToConnector();
         if (!empty($connectorFields)) {
             $connectorFields = $connectorFields + $this->getFields();
         }
         // set fields to connector
         $this->connector->setFieldValues($connectorFields);
         $result = false;
         // add recipient from data if connector get it
         $recipientDb = $this->connector->getData();
         if ($recipient = $recipientDb->Fetch()) {
             $this->recipient = $recipient;
             $result = true;
         }
     }
     return $result;
 }
Esempio n. 2
0
 /**
  * @return \Bitrix\Sender\ConnectorResult
  */
 public function getRecipientResult()
 {
     $result = parent::getRecipientResult();
     if (!$this->connector) {
         return $result;
     }
     $personalizeList = array();
     $connectorPersonalizeList = $this->connector->getPersonalizeList();
     foreach ($connectorPersonalizeList as $tag) {
         if (strlen($tag['CODE']) > 0) {
             $personalizeList[] = $tag['CODE'];
         }
     }
     $result->setFilterFields(array_merge($result->getFilterFields(), $personalizeList));
     return $result;
 }
Esempio n. 3
0
 /**
  * @param Connector $connector
  * @param null $pageNumber
  * @param int $timeout
  * @return array
  * @throws \Bitrix\Main\ArgumentException
  */
 public static function addFromConnector(Connector $connector, $pageNumber = null, $timeout = 0)
 {
     $startTime = getmicrotime();
     $withoutNav = empty($pageNumber);
     $result = false;
     $onlyOneLoop = false;
     $rowsInPage = 5;
     $countAll = 0;
     $countProcessed = 0;
     $countUpdated = 0;
     $countAdded = 0;
     $countError = 0;
     $dataDb = $connector->getResult();
     if ($dataDb->resourceCDBResult) {
         $dataDb = $dataDb->resourceCDBResult;
     } elseif ($dataDb->resource) {
         $dataDb = new \CDBResult($dataDb->resource);
     } else {
         $dataDb = new \CDBResult();
         $dataDb->InitFromArray(array());
     }
     if (!is_subclass_of($dataDb, 'CDBResultMysql')) {
         $rowsInPage = 50;
         $onlyOneLoop = true;
     }
     while ($timeout == 0 || getmicrotime() - $startTime < $timeout) {
         if (!$withoutNav) {
             $dataDb->NavStart($rowsInPage, false, $pageNumber);
             $countAll = $dataDb->SelectedRowsCount();
         }
         $listId = null;
         while ($arData = $dataDb->Fetch()) {
             if ($withoutNav) {
                 $countAll++;
             }
             $countProcessed++;
             if (!$listId) {
                 $listId = ListTable::addIfNotExist($connector->getModuleId() . '_' . $connector->getCode(), Loc::getMessage('CONTACT_PULL_LIST_PREFIX') . $connector->getName());
             }
             $id = null;
             $contactDb = ContactTable::getList(array('select' => array('ID'), 'filter' => array('EMAIL' => $arData['EMAIL'])));
             if ($arContact = $contactDb->fetch()) {
                 $id = $arContact['ID'];
                 $countUpdated++;
             } else {
                 $resultAdd = static::add(array('NAME' => $arData['NAME'], 'EMAIL' => $arData['EMAIL'], 'USER_ID' => $arData['USER_ID']));
                 if ($resultAdd->isSuccess()) {
                     $id = $resultAdd->getId();
                     $countAdded++;
                 } else {
                     $countError++;
                 }
             }
             if ($id) {
                 ContactListTable::addIfNotExist($id, $listId);
             }
         }
         if ($withoutNav) {
             $result = false;
             break;
         }
         if ($dataDb->NavPageCount <= $pageNumber) {
             $result = false;
             break;
         } else {
             $pageNumber++;
             $result = $pageNumber;
         }
         if ($onlyOneLoop) {
             break;
         }
     }
     if ($withoutNav) {
         $countProgress = $countAll;
     } else {
         $countProgress = ($pageNumber - 1) * $dataDb->NavPageSize;
         if (!$result || $countProgress > $countAll) {
             $countProgress = $countAll;
         }
     }
     return array('STATUS' => $result, 'COUNT_ALL' => $countAll, 'COUNT_PROGRESS' => $countProgress, 'COUNT_PROCESSED' => $countProcessed, 'COUNT_NEW' => $countAdded, 'COUNT_ERROR' => $countError);
 }