Пример #1
0
 public static function PrepareClientInfos($IDs, $arOptions = null)
 {
     $nameTemplate = is_array($arOptions) && isset($arOptions['NAME_TEMPLATE']) && is_string($arOptions['NAME_TEMPLATE']) && $arOptions['NAME_TEMPLATE'] !== '' ? $arOptions['NAME_TEMPLATE'] : \Bitrix\Crm\Format\PersonNameFormatter::getFormat();
     $result = array();
     if (!is_array(self::$CLIENT_INFOS) || empty(self::$CLIENT_INFOS)) {
         $selectIDs = $IDs;
     } else {
         $selectIDs = array();
         foreach ($IDs as $ID) {
             if (!isset(self::$CLIENT_INFOS[$ID])) {
                 $selectIDs[] = $ID;
             } else {
                 $info = self::$CLIENT_INFOS[$ID];
                 if (isset($info['NAME_DATA']) && $nameTemplate !== $info['NAME_DATA']['NAME_TEMPLATE']) {
                     $nameData = $info['NAME_DATA'];
                     $info['TITLE'] = CUser::FormatName($nameTemplate, array('LOGIN' => '', 'NAME' => isset($nameData['NAME']) ? $nameData['NAME'] : '', 'LAST_NAME' => isset($nameData['LAST_NAME']) ? $nameData['LAST_NAME'] : '', 'SECOND_NAME' => isset($nameData['SECOND_NAME']) ? $nameData['SECOND_NAME'] : ''), false, false);
                 }
                 $result[$ID] = $info;
             }
         }
     }
     if (!empty($selectIDs)) {
         global $DB;
         $condition = implode(',', $selectIDs);
         $dbResult = $DB->Query("SELECT A.ID ACTIVITY_ID, A.OWNER_TYPE_ID, A.OWNER_ID, C3.ENTITY_ID, C3.ENTITY_TYPE_ID, C3.ENTITY_SETTINGS\n\t\t\t\tFROM b_crm_act A LEFT OUTER JOIN(\n\t\t\t\t\tSELECT C2.ID, C2.ACTIVITY_ID, C2.ENTITY_ID, C2.ENTITY_TYPE_ID, C2.ENTITY_SETTINGS\n\t\t\t\t\t\tFROM (SELECT ACTIVITY_ID, MIN(ID) ID FROM b_crm_act_comm WHERE ACTIVITY_ID IN({$condition}) GROUP BY ACTIVITY_ID) C1\n\t\t\t\t\t\t\tINNER JOIN b_crm_act_comm C2 ON C1.ID = C2.ID) C3 ON C3.ACTIVITY_ID = A.ID\n\t\t\t\tWHERE A.ID IN({$condition})");
         if (is_object($dbResult)) {
             if (self::$CLIENT_INFOS === null) {
                 self::$CLIENT_INFOS = array();
             }
             while ($comm = $dbResult->Fetch()) {
                 $ID = intval($comm['ACTIVITY_ID']);
                 $entityID = isset($comm['ENTITY_ID']) ? intval($comm['ENTITY_ID']) : 0;
                 $entityTypeID = isset($comm['ENTITY_TYPE_ID']) ? intval($comm['ENTITY_TYPE_ID']) : 0;
                 if ($entityID <= 0 || $entityTypeID <= 0) {
                     $entityID = isset($comm['OWNER_ID']) ? intval($comm['OWNER_ID']) : 0;
                     $entityTypeID = isset($comm['OWNER_TYPE_ID']) ? intval($comm['OWNER_TYPE_ID']) : 0;
                 }
                 if ($entityID <= 0 || $entityTypeID <= 0 || $entityTypeID === CCrmOwnerType::Deal) {
                     continue;
                 }
                 $info = array('ENTITY_ID' => $entityID, 'ENTITY_TYPE_ID' => $entityTypeID, 'TITLE' => '', 'SHOW_URL' => CCrmOwnerType::GetShowUrl($entityTypeID, $entityID, false));
                 $settings = isset($comm['ENTITY_SETTINGS']) ? unserialize($comm['ENTITY_SETTINGS']) : array();
                 if (empty($settings)) {
                     $customComm = array('ENTITY_ID' => $entityID, 'ENTITY_TYPE_ID' => $entityTypeID);
                     self::PrepareCommunicationSettings($customComm);
                     if (isset($customComm['ENTITY_SETTINGS'])) {
                         $settings = $customComm['ENTITY_SETTINGS'];
                     }
                 }
                 if ($entityTypeID === CCrmOwnerType::Lead) {
                     $info['TITLE'] = isset($settings['LEAD_TITLE']) ? $settings['LEAD_TITLE'] : '';
                 } elseif ($entityTypeID === CCrmOwnerType::Company) {
                     $info['TITLE'] = isset($settings['COMPANY_TITLE']) ? $settings['COMPANY_TITLE'] : '';
                 } elseif ($entityTypeID === CCrmOwnerType::Contact) {
                     $info['TITLE'] = CUser::FormatName($nameTemplate, array('LOGIN' => '', 'NAME' => isset($settings['NAME']) ? $settings['NAME'] : '', 'LAST_NAME' => isset($settings['LAST_NAME']) ? $settings['LAST_NAME'] : '', 'SECOND_NAME' => isset($settings['SECOND_NAME']) ? $settings['SECOND_NAME'] : ''), false, false);
                     $info['NAME_DATA'] = array('NAME_TEMPLATE' => $nameTemplate, 'NAME' => isset($settings['NAME']) ? $settings['NAME'] : '', 'LAST_NAME' => isset($settings['LAST_NAME']) ? $settings['LAST_NAME'] : '', 'SECOND_NAME' => isset($settings['SECOND_NAME']) ? $settings['SECOND_NAME'] : '');
                 }
                 $result[$ID] = self::$CLIENT_INFOS[$ID] = $info;
             }
         }
     }
     return $result;
 }