%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/modules/sender/lib/integration/crm/preset/ |
Current File : //home/bitrix/www/bitrix/modules/sender/lib/integration/crm/preset/segment.php |
<?php /** * Bitrix Framework * @package bitrix * @subpackage sender * @copyright 2001-2012 Bitrix */ namespace Bitrix\Sender\Integration\Crm\Preset; use Bitrix\Main\Loader; use Bitrix\Main\Localization\Loc; use Bitrix\Main\DB\SqlQueryException; use Bitrix\Sender\Preset; use Bitrix\Sender\Entity; use Bitrix\Sender\Integration\Crm\Connectors; Loc::loadMessages(__FILE__); /** * class Segment * @package Bitrix\Sender\Integration\Crm\Preset */ class Segment implements Preset\Installation\iInstallable { /** * Get installable ID. * * @return string */ public function getId() { return 'crm-segment'; } /** * Return true if it is installed. * * @return bool */ public function isInstalled() { $list = Entity\Segment::getList(array( 'select' => array('ID'), 'filter' => array( '=IS_SYSTEM' => true, '%CODE' => 'crm_%' ), 'limit' => 1 )); return ($list->fetch()) ? true : false; } /** * Install. * * @return bool * @throws SqlQueryException */ public function install() { Loader::includeModule('crm'); foreach ($this->getSegments() as $data) { if ($this->getInstalledSegment($data['CODE'])) { continue; } $data['IS_SYSTEM'] = 'Y'; try { $segment = new Entity\Segment; $segment->mergeData($data)->save(); } catch (SqlQueryException $exception) { if (strpos($exception->getDatabaseMessage(), '(1062)') === false) { throw $exception; } } } return true; } /** * Uninstall. * * @return bool */ public function uninstall() { $segments = Entity\Segment::getList(array( 'select' => array('ID'), 'filter' => array( '=IS_SYSTEM' => true, '%CODE' => 'crm_%' ) )); foreach ($segments as $segment) { if (Entity\Segment::removeById($segment['ID'])) { continue; } return false; } return true; } private function getSegments() { $endpointsAll = array(); $list = array(); $connector = new Connectors\Lead; foreach (Connectors\Lead::getUiFilterPresets() as $code => $data) { if (empty($data['sender_segment_name'])) { continue; } $segmentCode = $code; if (!empty($data['sender_segment_business_case'])) { $segmentCode = "case_" . $segmentCode; } $fields = $data['fields']; $fields['BX_PRESET_ID'] = $code; $item = array( 'CODE' => $segmentCode, 'NAME' => $data['sender_segment_name'], 'SORT' => 100, 'ENDPOINTS' => array( array( 'MODULE_ID' => 'sender', 'CODE' => $connector->getCode(), 'FIELDS' => self::convertPresetFields($fields) ) ) ); $list[] = $item; if ($item['CODE'] === 'crm_lead_all') { $endpointsAll = array_merge($endpointsAll, $item['ENDPOINTS']); } } $connector = new Connectors\Client; foreach (Connectors\Client::getUiFilterPresets() as $code => $data) { if (empty($data['sender_segment_name'])) { continue; } $segmentCode = $code; if (!empty($data['sender_segment_business_case'])) { $segmentCode = "case_" . $segmentCode; } $fields = $data['fields']; $fields['BX_PRESET_ID'] = $code; $item = array( 'CODE' => $segmentCode, 'NAME' => $data['sender_segment_name'], 'SORT' => 100, 'ENDPOINTS' => array( array( 'MODULE_ID' => 'sender', 'CODE' => $connector->getCode(), 'FIELDS' => self::convertPresetFields($fields) ) ) ); $list[] = $item; if ($item['CODE'] === 'crm_client_all') { $endpointsAll = array_merge($endpointsAll, $item['ENDPOINTS']); } } if (count($endpointsAll) > 1) { $list[] = array( 'CODE' => Entity\Segment::CODE_ALL, 'NAME' => Loc::getMessage('SENDER_INTEGRATION_CRM_PRESET_SEGMENT_ALL'), 'SORT' => 50, 'ENDPOINTS' => $endpointsAll ); } return $list; } private static function convertPresetFields($fields) { if (!is_array($fields)) { return $fields; } $codes = ['allow_year', 'datesel', 'from', 'to', 'days']; $result = []; foreach ($fields as $key => $value) { $baseKey = null; foreach ($codes as $code) { $code = "_" . $code; if (substr($key, -strlen($code)) == $code) { $baseKey = substr($key, 0, -strlen($code)); break; } } if ($baseKey) { if (empty($result[$baseKey])) { $result[$baseKey] = []; } $result[$baseKey][$key] = $value; } else { $result[$key] = $value; } } return $result; } private function getInstalledSegment($code = null) { $filter = array( '=IS_SYSTEM' => true, ); if ($code) { $filter['=CODE'] = $code; } else { $filter['CODE'] = 'crm_%'; } $list = Entity\Segment::getList(array( 'select' => array('ID'), 'filter' => $filter, 'limit' => 1 )); if ($segment = $list->fetch()) { return $segment['ID']; } else { return null; } } }