%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/modules/sender/lib/integration/crm/connectors/ |
Current File : //home/bitrix/www/bitrix/modules/sender/lib/integration/crm/connectors/querydata.php |
<?php /** * Bitrix Framework * @package bitrix * @subpackage sender * @copyright 2001-2012 Bitrix */ namespace Bitrix\Sender\Integration\Crm\Connectors; use Bitrix\Main\Localization\Loc; use Bitrix\Main\Entity; use Bitrix\Main\DB\Result; use Bitrix\Sender\Recipient; use Bitrix\Sender\UI\PageNavigation; Loc::loadMessages(__FILE__); /** * Class QueryData * @package Bitrix\Sender\Integration\Crm\Connectors */ class QueryData { /** * Get unionized data. * * @param Entity\Query[] $queries Queries. * @param integer $dataTypeId Data type ID. * @param PageNavigation $nav Nav. * @return Entity\Query */ public static function getUnionizedQuery(array $queries, $dataTypeId = null, PageNavigation $nav = null) { foreach ($queries as $query) { self::prepare($query, $dataTypeId); } $query = array_pop($queries); foreach ($queries as $unionQuery) { $query->unionAll($unionQuery); } if ($nav) { if (empty($queries)) { $query->setOffset($nav->getOffset()); $query->setLimit($nav->getLimit()); } else { $query->setUnionOffset($nav->getOffset()); $query->setUnionLimit($nav->getLimit()); } } return $query; } /** * Get unionized data. * * @param Entity\Query $query Query. * @return Result */ public static function getUnionizedData(Entity\Query $query) { return self::exec($query); } private static function prepare(Entity\Query $query, $dataTypeId = null) { $fields = self::getSelectFields(); foreach ($fields as $alias => $field) { if (is_numeric($alias)) { $alias = ''; } $query->addSelect($field, $alias); } return Helper::prepareQuery($query, $dataTypeId); } private static function exec(Entity\Query $query) { $result = $query->exec(); $result->addFetchDataModifier( function ($data) { if (!isset($data['EMAIL']) || !$data['EMAIL']) { if (isset($data['EMAIL_HOME']) && $data['EMAIL_HOME']) { $data['EMAIL'] = $data['EMAIL_HOME']; } else if (isset($data['EMAIL_WORK']) && $data['EMAIL_WORK']) { $data['EMAIL'] = $data['EMAIL_WORK']; } } if (!isset($data['PHONE']) || !$data['PHONE']) { if (isset($data['PHONE_MOBILE']) && $data['PHONE_MOBILE']) { $data['PHONE'] = $data['PHONE_MOBILE']; } else if (isset($data['PHONE_WORK']) && $data['PHONE_WORK']) { $data['PHONE'] = $data['PHONE_WORK']; } } return $data; } ); return $result; } /** * Get data. * * @param Entity\Query $query Query. * @param integer $dataTypeId Data type ID. * @return Result */ public static function getData(Entity\Query $query, $dataTypeId = null) { self::prepare($query, $dataTypeId); return self::exec($query); } protected static function getSelectFields($dataTypeId = null) { $fields = array(); $map = array( Recipient\Type::EMAIL => array('EMAIL'), //array('EMAIL_HOME', 'EMAIL_WORK'), Recipient\Type::PHONE => array('PHONE'), //array('PHONE_WORK', 'PHONE_MOBILE'), Recipient\Type::IM => array('IM' => 'IMOL'), Recipient\Type::CRM_CONTACT_ID => array('CRM_CONTACT_ID'), Recipient\Type::CRM_COMPANY_ID => array('CRM_COMPANY_ID'), ); if ($dataTypeId) { if (isset($map[$dataTypeId])) { $fields = $map[$dataTypeId]; } } else { $fields = call_user_func_array('array_merge', array_values($map)); } return $fields; } }