%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/modules/sender/lib/integration/crm/ |
| Current File : /home/bitrix/www/bitrix/modules/sender/lib/integration/crm/eventhandler.php |
<?php
/**
* Bitrix Framework
* @package bitrix
* @subpackage sender
* @copyright 2001-2012 Bitrix
*/
namespace Bitrix\Sender\Integration\Crm;
use Bitrix\Main\Loader;
use Bitrix\Main\Localization\Loc;
use Bitrix\Sender\Entity;
use Bitrix\Sender\Recipient;
use Bitrix\Crm\Integrity\ActualEntitySelector;
use Bitrix\Crm\Activity\BindingSelector;
Loc::loadMessages(__FILE__);
/**
* Class EventHandler
* @package Bitrix\Sender\Integration\Crm
*/
class EventHandler
{
/**
* Handler of event sender/OnAfterPostingSendRecipient.
*
* @param array $eventData Event.
* @param Entity\Letter $letter Letter.
*/
public static function onAfterPostingSendRecipient(array $eventData, Entity\Letter $letter)
{
if (!$eventData['SEND_RESULT'])
{
return;
}
static $isModuleIncluded = null;
if ($isModuleIncluded === null)
{
$isModuleIncluded = Loader::includeModule('crm');
}
if (!$isModuleIncluded)
{
return;
}
if ($letter->getMessage()->isReturnCustomer())
{
return;
}
$recipient = $eventData['RECIPIENT'];
$fields = $eventData['RECIPIENT']['FIELDS'];
$entityTypeId = $entityId = null;
if (isset($fields['CRM_ENTITY_TYPE_ID']) && $fields['CRM_ENTITY_TYPE_ID'])
{
$entityTypeId = $fields['CRM_ENTITY_TYPE_ID'];
}
if (isset($fields['CRM_ENTITY_ID']) && $fields['CRM_ENTITY_ID'])
{
$entityId = $fields['CRM_ENTITY_ID'];
}
if (!$entityTypeId || !$entityId)
{
$selector = self::getEntitySelectorByRecipient(
$eventData['RECIPIENT']['CONTACT_TYPE_ID'],
$eventData['RECIPIENT']['CONTACT_CODE']
);
}
else
{
$selector = self::getEntitySelectorById($entityTypeId, $entityId);
}
if (!$selector)
{
return;
}
if (!$selector->search()->hasEntities())
{
return;
}
self::addTimeLineEvent($selector, $letter, $recipient);
}
protected static function addTimeLineEvent(ActualEntitySelector $selector, Entity\Letter $letter, $recipient)
{
$isAd = $letter instanceof Entity\Ad;
$createdBy = $letter->get('CREATED_BY');
if (!$createdBy)
{
return;
}
// convert format to time line
$bindings = array();
$activityBindings = BindingSelector::findBindings($selector);
foreach ($activityBindings as $binding)
{
$binding['ENTITY_ID'] = $binding['OWNER_ID'];
$binding['ENTITY_TYPE_ID'] = $binding['OWNER_TYPE_ID'];
$bindings[] = array(
'ENTITY_TYPE_ID' => $binding['OWNER_TYPE_ID'],
'ENTITY_ID' => $binding['OWNER_ID'],
);
}
$parameters = array(
'ENTITY_TYPE_ID' => $selector->getPrimaryTypeId(),
'ENTITY_ID' => $selector->getPrimaryId(),
'TYPE_CATEGORY_ID' => $letter->getMessage()->getCode(),
'AUTHOR_ID' => $createdBy,
'SETTINGS' => array(
'letterId' => $letter->getId(),
'isAds' => $isAd,
'recipient' => array(
'id' => $recipient['ID'],
'typeId' => $recipient['CONTACT_TYPE_ID'],
'code' => $recipient['CONTACT_ID'],
),
),
'BINDINGS' => $bindings
);
Timeline\RecipientEntry::create($parameters);
}
protected static function getEntitySelector()
{
/** @var ActualEntitySelector $selector */
static $selector = null;
if (!$selector)
{
$selector = new ActualEntitySelector();
}
else
{
$selector->clear();
}
return $selector;
}
protected static function getEntitySelectorById($entityTypeId, $entityId)
{
return self::getEntitySelector()->setEntity($entityTypeId, $entityId);
}
protected static function getEntitySelectorByRecipient($recipientTypeId, $recipientCode)
{
$selector = self::getEntitySelector();
switch ($recipientTypeId)
{
case Recipient\Type::EMAIL:
$selector->appendEmailCriterion($recipientCode);
break;
case Recipient\Type::PHONE:
$selector->appendPhoneCriterion($recipientCode);
break;
default:
return null;
}
return $selector;
}
}