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; }