public static function onSearchIndex($userField) { $values = $userField['VALUE']; if (!is_array($values)) { $values = array($userField['VALUE']); } $searchData = array(); $fileIdsForLoad = array(); $attachedIdsForLoad = array(); foreach ($values as $value) { list($type, $realValue) = self::detectType($value); if ($type == self::TYPE_NEW_OBJECT) { if (self::isLoadedFile($realValue)) { $searchData[] = self::getFileById($realValue)->getName(); } else { $fileIdsForLoad[] = $realValue; } } else { $attachedIdsForLoad[] = $realValue; } } unset($value); if ($attachedIdsForLoad) { $query = AttachedObject::getList(array('select' => array('NAME' => 'OBJECT.NAME'), 'filter' => array('ID' => $attachedIdsForLoad))); while ($attachedItem = $query->fetch()) { $searchData[] = Ui\Text::cleanTrashCanSuffix($attachedItem['NAME']); } unset($attachedItem, $attachedIdsForLoad); } if ($fileIdsForLoad) { $query = File::getList(array('select' => array('NAME'), 'filter' => array('ID' => $fileIdsForLoad))); while ($fileItem = $query->fetch()) { $searchData[] = Ui\Text::cleanTrashCanSuffix($fileItem['NAME']); } unset($fileItem, $fileIdsForLoad); } return implode("\r\n", $searchData); }
public static function collectUFValues($rows, $columnInfo, $total) { // uf columns $fileColumns = array(); $diskFileColumns = array(); $employeeColumns = array(); $crmColumns = array(); $crmStatusColumns = array(); $iblockElementColumns = array(); $iblockSectionColumns = array(); if (is_array($columnInfo)) { foreach ($columnInfo as $k => $cInfo) { if ($cInfo['isUF'] && is_array($cInfo['ufInfo']) && isset($cInfo['ufInfo']['USER_TYPE_ID'])) { switch ($cInfo['ufInfo']['USER_TYPE_ID']) { case 'file': $fileColumns[$k] = true; break; case 'disk_file': $diskFileColumns[$k] = true; break; case 'employee': $employeeColumns[$k] = true; break; case 'crm': $crmColumns[$k] = true; break; case 'crm_status': $crmStatusColumns[$k] = true; break; case 'iblock_element': $iblockElementColumns[$k] = true; break; case 'iblock_section': $iblockSectionColumns[$k] = true; break; } } } } $arFileID = array(); $arDiskFileID = array(); $arEmployeeID = array(); $arCrmID = array(); $arCrmStatusID = array(); $arCrmStatusEntityType = array(); $arIblockElementID = array(); $arIblockSectionID = array(); if (count($fileColumns) > 0 || count($diskFileColumns) > 0 || count($employeeColumns) > 0 || count($crmColumns) > 0 || count($crmStatusColumns) > 0 || count($iblockElementColumns) > 0 || count($iblockSectionColumns) > 0) { foreach ($rows as $row) { foreach ($row as $k => $v) { // file if (isset($fileColumns[$k])) { if (is_array($v)) { foreach ($v as $subv) { $value = intval($subv); if ($value > 0) { $arFileID[] = $value; } } } else { $value = intval($v); if ($value > 0) { $arFileID[] = $value; } } } // disk file if (isset($diskFileColumns[$k])) { if (is_array($v)) { foreach ($v as $subv) { $value = intval($subv); if ($value > 0) { $arDiskFileID[] = $value; } } } else { $value = intval($v); if ($value > 0) { $arDiskFileID[] = $value; } } } // employee if (isset($employeeColumns[$k])) { if (is_array($v)) { foreach ($v as $subv) { $value = intval($subv); if ($value > 0) { $arEmployeeID[] = $value; } } } else { $value = intval($v); if ($value > 0) { $arEmployeeID[] = $value; } } } // crm if (isset($crmColumns[$k])) { $prefixByType = array('lead' => 'L', 'contact' => 'C', 'company' => 'CO', 'deal' => 'D', 'quote' => 'Q'); $maxPrefixLength = 2; // 'CO' $singleTypePrefix = ''; if (is_array($columnInfo[$k]['ufInfo']['SETTINGS'])) { $supportedTypes = array(); foreach ($columnInfo[$k]['ufInfo']['SETTINGS'] as $type => $supported) { if ($supported === 'Y') { $supportedTypes[$type] = true; } } $supportedTypes = array_keys($supportedTypes); if (count($supportedTypes) === 1) { if (isset($prefixByType[strtolower($supportedTypes[0])])) { $singleTypePrefix = $prefixByType[strtolower($supportedTypes[0])]; } } unset($supportedTypes, $type, $supported); } if (is_array($v)) { foreach ($v as $subv) { if (strlen($subv) > 0) { $prefix = ''; if (($pos = strpos(substr($subv, 0, $maxPrefixLength + 1), '_')) !== false && $pos > 0) { $prefix = substr($subv, 0, $pos); } if (empty($prefix)) { $subv = $singleTypePrefix . '_' . $subv; } unset($prefix, $pos); $value = explode('_', trim(strval($subv))); if (strlen($value[0]) > 0 && strlen($value[1]) > 0) { if (!is_array($arCrmID[$value[0]])) { $arCrmID[$value[0]] = array(); } $arCrmID[$value[0]][] = $value[1]; } } } } else { if (strlen($v) > 0) { $prefix = ''; if (($pos = strpos(substr($v, 0, $maxPrefixLength + 1), '_')) !== false && $pos > 0) { $prefix = substr($v, 0, $pos); } if (empty($prefix)) { $v = $singleTypePrefix . '_' . $v; } unset($prefix, $pos); $value = explode('_', trim(strval($v))); if (strlen($value[0]) > 0 && strlen($value[1]) > 0) { if (!is_array($arCrmID[$value[0]])) { $arCrmID[$value[0]] = array(); } $arCrmID[$value[0]][] = $value[1]; } } } unset($maxPrefixLength); } // crm_status if (isset($crmStatusColumns[$k])) { if (!isset($arCrmStatusEntityType[$k])) { if (isset($columnInfo[$k]['ufInfo']['SETTINGS']['ENTITY_TYPE'])) { $arCrmStatusEntityType[$k] = strval($columnInfo[$k]['ufInfo']['SETTINGS']['ENTITY_TYPE']); } } if (!empty($arCrmStatusEntityType[$k])) { if (is_array($v)) { foreach ($v as $subv) { if (strlen($subv) > 0) { if (!is_array($arCrmStatusID[$arCrmStatusEntityType[$k]])) { $arCrmStatusID[$arCrmStatusEntityType[$k]] = array(); } $arCrmStatusID[$arCrmStatusEntityType[$k]][] = $subv; } } } else { if (strlen($v) > 0) { if (!is_array($arCrmStatusID[$arCrmStatusEntityType[$k]])) { $arCrmStatusID[$arCrmStatusEntityType[$k]] = array(); } $arCrmStatusID[$arCrmStatusEntityType[$k]][] = $v; } } } } // iblock_element if (isset($iblockElementColumns[$k])) { if (is_array($v)) { foreach ($v as $subv) { $value = intval($subv); if ($value > 0) { $arIblockElementID[] = $value; } } } else { $value = intval($v); if ($value > 0) { $arIblockElementID[] = $value; } } } // iblock_section if (isset($iblockSectionColumns[$k])) { if (is_array($v)) { foreach ($v as $subv) { $value = intval($subv); if ($value > 0) { $arIblockSectionID[] = $value; } } } else { $value = intval($v); if ($value > 0) { $arIblockSectionID[] = $value; } } } } } } // collect files if (count($fileColumns) > 0) { if (count($arFileID) > 0) { $arFileID = array_unique($arFileID); } $i = 0; $cnt = 0; $stepCnt = 500; $nIDs = count($arFileID); $arID = array(); $file = new CFile(); foreach ($arFileID as $fileID) { $arID[$cnt++] = $fileID; $i++; if ($cnt === $stepCnt || $i === $nIDs) { $res = $file->GetList(array(), array('@ID' => implode(',', $arID))); if (is_object($res)) { while ($arFile = $res->Fetch()) { if ($arFile) { if (array_key_exists("~src", $arFile)) { if ($arFile["~src"]) { $arFile["SRC"] = $arFile["~src"]; } else { $arFile["SRC"] = $file->GetFileSRC($arFile, false, false); } } else { $arFile["SRC"] = $file->GetFileSRC($arFile, false); } self::$ufFiles[intval($arFile['ID'])] = $arFile; } } } $cnt = 0; $arID = array(); } } } // collect disk files if (count($diskFileColumns) > 0) { if (count($arDiskFileID) > 0) { $arDiskFileID = array_unique($arDiskFileID); } $i = 0; $cnt = 0; $stepCnt = 500; $nIDs = count($arDiskFileID); $arID = array(); foreach ($arDiskFileID as $diskFileID) { $arID[$cnt++] = $diskFileID; $i++; if ($cnt === $stepCnt || $i === $nIDs) { $res = \Bitrix\Disk\AttachedObject::getList(array('filter' => array('ID' => $arID), 'select' => array('ID', 'NAME' => 'OBJECT.NAME', 'SIZE' => 'OBJECT.SIZE'))); $urlManager = \Bitrix\Disk\Driver::getInstance()->getUrlManager(); if (is_object($res)) { while ($arDiskFile = $res->Fetch()) { if ($arDiskFile) { $arDiskFile['DOWNLOAD_URL'] = $urlManager->getUrlUfController('download', array('attachedId' => $arDiskFile['ID'])); self::$ufDiskFiles[intval($arDiskFile['ID'])] = $arDiskFile; } } } $cnt = 0; $arID = array(); } } } // collect employees if (count($employeeColumns) > 0) { if (count($arEmployeeID) > 0) { $arEmployeeID = array_unique($arEmployeeID); } $i = 0; $cnt = 0; $stepCnt = 500; $nIDs = count($arEmployeeID); $arID = array(); foreach ($arEmployeeID as $employeeID) { $arID[$cnt++] = $employeeID; $i++; if ($cnt === $stepCnt || $i === $nIDs) { $res = \Bitrix\Main\UserTable::getList(array('filter' => array('ID' => $arID), 'select' => array('ID', 'LOGIN', 'NAME', 'LAST_NAME', 'SECOND_NAME', 'TITLE'))); if (is_object($res)) { while ($arUser = $res->fetch()) { self::$ufEmployees[intval($arUser['ID'])] = $arUser; } } $cnt = 0; $arID = array(); } } } // collect crm elements if (count($crmColumns) > 0 && CModule::IncludeModule('crm')) { foreach ($arCrmID as $typeIndex => $arSubID) { if (count($arSubID) > 0) { $arCrmID[$typeIndex] = array_unique($arSubID); } $i = 0; $cnt = 0; $stepCnt = 500; $nIDs = count($arSubID); $arID = array(); foreach ($arSubID as $crmID) { $arID[$cnt++] = $crmID; $i++; if ($cnt === $stepCnt || $i === $nIDs) { $res = null; switch ($typeIndex) { case 'L': $res = CCrmLead::GetList(array('ID' => 'DESC'), array('ID' => $arID), array('ID', 'TITLE', 'FULL_NAME', 'STATUS_ID')); break; case 'C': $res = CCrmContact::GetList(array('ID' => 'DESC'), array('ID' => $arID), array('ID', 'NAME', 'SECOND_NAME', 'LAST_NAME', 'FULL_NAME', 'COMPANY_TITLE', 'PHOTO')); break; case 'CO': $res = CCrmCompany::GetList(array('ID' => 'DESC'), array('ID' => $arID), array('ID', 'TITLE', 'COMPANY_TYPE', 'INDUSTRY', 'LOGO')); break; case 'D': $res = CCrmDeal::GetList(array('ID' => 'DESC'), array('ID' => $arID), array('ID', 'TITLE', 'STAGE_ID', 'COMPANY_TITLE', 'CONTACT_FULL_NAME')); break; } if (is_object($res)) { while ($arCrmElement = $res->Fetch()) { self::$ufCrmElements[$typeIndex . '_' . $arCrmElement['ID']] = $arCrmElement; } } $cnt = 0; $arID = array(); } } } } // collect crm statuses if (count($crmStatusColumns) > 0 && CModule::IncludeModule('crm')) { foreach ($arCrmStatusID as $entityType => $arSubID) { if (count($arSubID) > 0) { $arCrmID[$entityType] = array_unique($arSubID); } $res = null; $res = CCrmStatus::GetStatusList($entityType); if (is_array($res) && count($res) > 0) { foreach ($arSubID as $crmStatusID) { if (isset($res[$crmStatusID])) { if (!isset(self::$ufCrmStatuses[$entityType])) { self::$ufCrmStatuses[$entityType] = array(); } } self::$ufCrmStatuses[$entityType][$crmStatusID] = $res[$crmStatusID]; } } } } // collect iblock elements if (count($iblockElementColumns) > 0 && CModule::IncludeModule('iblock')) { if (count($arIblockElementID) > 0) { $arIblockElementID = array_unique($arIblockElementID); } $i = 0; $cnt = 0; $stepCnt = 500; $nIDs = count($arIblockElementID); $arID = array(); foreach ($arIblockElementID as $iblockElementID) { $arID[$cnt++] = $iblockElementID; $i++; if ($cnt === $stepCnt || $i === $nIDs) { $res = CIBlockElement::GetList(array('SORT' => 'ASC'), array('=ID' => $arID)); if (is_object($res)) { while ($arIblockElement = $res->GetNext()) { self::$ufIblockElements[intval($arIblockElement['ID'])] = $arIblockElement; } } $cnt = 0; $arID = array(); } } } // collect iblock sections if (count($iblockSectionColumns) > 0 && CModule::IncludeModule('iblock')) { if (count($arIblockSectionID) > 0) { $arIblockSectionID = array_unique($arIblockSectionID); } $i = 0; $cnt = 0; $stepCnt = 500; $nIDs = count($arIblockSectionID); $arID = array(); foreach ($arIblockSectionID as $iblockSectionID) { $arID[$cnt++] = $iblockSectionID; $i++; if ($cnt === $stepCnt || $i === $nIDs) { $res = CIBlockSection::GetList(array('left_margin' => 'asc'), array('ID' => $arID), false, array('ID', 'NAME', 'SECTION_PAGE_URL')); if (is_object($res)) { while ($arIblockSection = $res->GetNext()) { self::$ufIblockSections[intval($arIblockSection['ID'])] = $arIblockSection; } } $cnt = 0; $arID = array(); } } } }