/** * */ public static function checkConnectors() { $connectorList = \Bitrix\Sender\ConnectorManager::getConnectorList(); /** @var \Bitrix\Sender\Connector $connector */ foreach ($connectorList as $connector) { if ($connector->requireConfigure()) { continue; } static::addFromConnector($connector); } }
/** * @param $postingId * @param bool $checkDuplicate * @return bool * @throws \Bitrix\Main\ArgumentException */ public static function initGroupRecipients($postingId, $checkDuplicate = false) { $arPosting = \Bitrix\Sender\PostingTable::getRowById(array('ID' => $postingId)); if (!$arPosting) { return false; } $checkRecipientDuplicate = $checkDuplicate; if (!$checkDuplicate) { if ($arPosting['STATUS'] == \Bitrix\Sender\PostingTable::STATUS_NEW) { $primary = array('POSTING_ID' => $postingId); \Bitrix\Sender\PostingRecipientTable::delete($primary); $checkRecipientDuplicate = false; } } // fetch all unsubscribed emails of current mailing for excluding from recipients $arEmailNotSend = array(); $recipientUnsubDb = \Bitrix\Sender\PostingUnsubTable::getList(array('select' => array('EMAIL' => 'POSTING_RECIPIENT.EMAIL'), 'filter' => array('POSTING.MAILING_ID' => $arPosting['MAILING_ID']))); while ($recipientUnsub = $recipientUnsubDb->fetch()) { $arEmailNotSend[] = $recipientUnsub['EMAIL']; } $groupConnectorsDataCount = array(); $connection = \Bitrix\Main\Application::getConnection(); $conHelper = $connection->getSqlHelper(); $statusRecipientNone = \Bitrix\Sender\PostingRecipientTable::SEND_RESULT_NONE; // fetch all connectors for getting emails $groupDb = \Bitrix\Sender\MailingGroupTable::getList(array('select' => array('INCLUDE', 'CONNECTOR_ENDPOINT' => 'GROUP.GROUP_CONNECTOR.ENDPOINT', 'GROUP_ID'), 'filter' => array('MAILING_ID' => $arPosting['MAILING_ID']), 'order' => array('INCLUDE' => 'DESC', 'GROUP_ID' => 'ASC'))); while ($group = $groupDb->fetch()) { $connector = \Bitrix\Sender\ConnectorManager::getConnector($group['CONNECTOR_ENDPOINT']); if (!$connector) { continue; } $connectorDataCount = 0; $connector->setFieldValues($group['CONNECTOR_ENDPOINT']['FIELDS']); $connectorDataDb = $connector->getData(); while (true) { $emailList = array(); $connectorDataList = array(); $maxPart = 200; while ($arConnectorData = $connectorDataDb->Fetch()) { // collect connectors counter of addresses $connectorDataCount++; // exclude unsubscribed addresses $arConnectorData['EMAIL'] = trim(strtolower($arConnectorData['EMAIL'])); if (strlen($arConnectorData['EMAIL']) <= 0 || in_array($arConnectorData['EMAIL'], $arEmailNotSend)) { continue; } $emailList[] = $arConnectorData['EMAIL']; $connectorDataList[$arConnectorData['EMAIL']] = $arConnectorData; $maxPart--; if ($maxPart == 0) { break; } } if (empty($emailList)) { break; } foreach ($emailList as &$email) { $email = $conHelper->forSql($email); } $emailListString = "'" . implode("', '", $emailList) . "'"; if ($group['INCLUDE']) { // add address if not exists if ($checkRecipientDuplicate) { $recipientEmailDb = $connection->query("select EMAIL from b_sender_posting_recipient where EMAIL in (" . $emailListString . ") and POSTING_ID=" . intval($postingId)); while ($recipientEmail = $recipientEmailDb->fetch()) { unset($connectorDataList[$recipientEmail['EMAIL']]); } } if (!empty($connectorDataList)) { foreach ($connectorDataList as $email => $arConnectorData) { $arRecipient = array('NAME' => "'" . $conHelper->forSql($arConnectorData['NAME']) . "'", 'EMAIL' => "'" . $conHelper->forSql($arConnectorData['EMAIL']) . "'", 'STATUS' => "'" . $statusRecipientNone . "'", 'POSTING_ID' => intval($postingId)); if (array_key_exists('USER_ID', $arConnectorData) && intval($arConnectorData['USER_ID']) > 0) { $arRecipient['USER_ID'] = intval($arConnectorData['USER_ID']); } $insertColumnNamesString = implode(", ", array_keys($arRecipient)); $insertColumnValuesString = implode(", ", array_values($arRecipient)); $connection->query("insert into b_sender_posting_recipient(" . $insertColumnNamesString . ") values(" . $insertColumnValuesString . ")"); } } } else { // delete address from posting $connection->query("delete from b_sender_posting_recipient where EMAIL in (" . $emailListString . ") and POSTING_ID=" . intval($postingId)); } } //\Bitrix\Sender\GroupConnectorTable::update(array('ID' => $group['GROUP_CONNECTOR_ID']), array('ADDRESS_COUNT' => $connectorDataCount)); // collect groups counter of addresses if (array_key_exists($group['GROUP_ID'], $groupConnectorsDataCount)) { $groupConnectorsDataCount[$group['GROUP_ID']] += $connectorDataCount; } else { $groupConnectorsDataCount[$group['GROUP_ID']] = $connectorDataCount; } } // update group counter of addresses foreach ($groupConnectorsDataCount as $groupId => $groupDataCount) { \Bitrix\Sender\GroupTable::update($groupId, array('ADDRESS_COUNT' => $groupDataCount)); } return true; }
?> </td> </tr> <?php $oFilter->Buttons(array("table_id" => $sTableID, "url" => $APPLICATION->GetCurPage(), "form" => "find_form")); $oFilter->End(); ?> </form> <?php //****************************** // Import addresses from connectors //****************************** if ($_REQUEST['action'] == "pull") { $connectorClassList = \Bitrix\Sender\ConnectorManager::getConnectorClassList(); if (!empty($connectorClassList)) { $arConnectors = array(); /** @var \Bitrix\Sender\Connector $connector */ foreach ($connectorClassList as $connectorClass) { if ($connectorClass['MODULE_ID'] != 'sender' && !$connectorClass['REQUIRE_CONFIGURE']) { $arConnectors[] = array('CODE' => $connectorClass['CODE'], 'MODULE_ID' => $connectorClass['MODULE_ID']); } } $arMessages = array('CONTACT_ADM_PULL_FROM' => GetMessage('CONTACT_ADM_PULL_FROM')); ?> <div id="progress_message"></div> <script> BX.message(<?php echo CUtil::PhpToJSObject($arMessages); ?>
} } if ($bVarsFromForm) { $DB->InitTableVarsForEdit("b_sender_group", "", "str_"); } if (isset($CONNECTOR_SETTING)) { $arConnectorSettings = $CONNECTOR_SETTING; } else { $arConnectorSettings = array(); } if (count($endpointList) > 0) { $arConnectorSettings = \Bitrix\Sender\ConnectorManager::getFieldsFromEndpoint($endpointList); } $arAvailableConnectors = array(); $arExistedConnectors = array(); $arConnector = \Bitrix\Sender\ConnectorManager::getConnectorList(); /** @var \Bitrix\Sender\Connector $connector */ foreach ($arConnector as $connector) { if (array_key_exists($connector->getModuleId(), $arConnectorSettings)) { $arFieldsValues = $arConnectorSettings[$connector->getModuleId()][$connector->getCode()]; } else { $arFieldsValues = array(); } $connector->setFieldPrefix('CONNECTOR_SETTING'); $connectorIdCount = 0; $arAvailableConnectors[$connector->getId()] = array('ID' => $connector->getId(), 'NAME' => $connector->getName(), 'FORM' => $connector->getForm() . '<input type="hidden" name="' . $connector->getFieldName('bx_aux_hidden_field') . '" value="0">'); if (array_key_exists($connector->getModuleId(), $arConnectorSettings)) { if (array_key_exists($connector->getCode(), $arConnectorSettings[$connector->getModuleId()])) { $connectorIdCount = 0; $arFieldsValuesConnector = $arConnectorSettings[$connector->getModuleId()][$connector->getCode()]; foreach ($arFieldsValuesConnector as $fieldValues) {
<?php define("ADMIN_MODULE_NAME", "sender"); require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_before.php"; if (!\Bitrix\Main\Loader::includeModule("sender")) { ShowError(\Bitrix\Main\Localization\Loc::getMessage("MAIN_MODULE_NOT_INSTALLED")); } IncludeModuleLangFile(__FILE__); $POST_RIGHT = $APPLICATION->GetGroupRight("sender"); if ($POST_RIGHT == "D") { $APPLICATION->AuthForm(GetMessage("ACCESS_DENIED")); } $arResult = array('COUNT' => '0'); if (isset($CONNECTOR_SETTING) && is_array($CONNECTOR_SETTING)) { $arEndpointList = \Bitrix\Sender\ConnectorManager::getEndpointFromFields($CONNECTOR_SETTING); foreach ($arEndpointList as $endpoint) { $connector = \Bitrix\Sender\ConnectorManager::getConnector($endpoint); if ($connector) { $connector->setFieldValues($endpoint['FIELDS']); $arResult['COUNT'] = $connector->getDataCount(); break; } } } echo CUtil::PhpToJSObject($arResult); exit;
public static function getPersonalizeList($id) { $result = array(); // fetch all connectors for getting emails $groupConnectorDb = \Bitrix\Sender\MailingGroupTable::getList(array('select' => array('CONNECTOR_ENDPOINT' => 'GROUP.GROUP_CONNECTOR.ENDPOINT', 'GROUP_ID'), 'filter' => array('MAILING_ID' => $id, 'INCLUDE' => true), 'order' => array('GROUP_ID' => 'ASC'))); while ($groupConnector = $groupConnectorDb->fetch()) { $connector = null; if (is_array($groupConnector['CONNECTOR_ENDPOINT'])) { $connector = \Bitrix\Sender\ConnectorManager::getConnector($groupConnector['CONNECTOR_ENDPOINT']); } if (!$connector) { continue; } $result = array_merge($result, $connector->getPersonalizeList()); } return $result; }