...Человеческий поиск в разработке...
- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/agent/files/clearunregisteredlogo.php
- Класс: Bitrix\Crm\Agent\Files\ClearUnregisteredLogo
- Вызов: ClearUnregisteredLogo::prepareUserFieldQuery
static function prepareUserFieldQuery() { $diskAvailable = \Bitrix\Main\ModuleManager::isModuleInstalled('disk') && \Bitrix\Main\Loader::includeModule('disk'); $userTypeField = array(\CUserTypeFile::USER_TYPE_ID); if ($diskAvailable) { $userTypeField[] = \Bitrix\Disk\Uf\FileUserType::USER_TYPE_ID; $userTypeField[] = \Bitrix\Disk\Uf\VersionUserType::USER_TYPE_ID; } $userFieldList = \Bitrix\Main\UserFieldTable::getList(array( 'filter' => array( 'ENTITY_ID' => 'CRM_%', '=USER_TYPE_ID' => $userTypeField, ), 'select' => array( 'ID', 'ENTITY_ID', 'USER_TYPE_ID', 'FIELD_NAME', 'MULTIPLE', ), )); $userFieldInformation[] = array(); if ($userFieldList->getSelectedRowsCount() > 0) { foreach ($userFieldList as $userField) { $userFieldInformation[] = $userField; } } if (empty($userFieldInformation)) { return []; } $connection = \Bitrix\Main\Application::getConnection(); $tablesInformation = array(); $result = $connection->query(" SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA = '".$connection->getDatabase()."' AND ( TABLE_NAME LIKE 'b_uts_crm_%' OR TABLE_NAME LIKE 'b_utm_crm_%' OR TABLE_NAME LIKE 'b_uts_order' OR TABLE_NAME LIKE 'b_utm_order' ) "); while ($row = $result->fetch()) { $tablesInformation[] = $row['TABLE_NAME']; } if (empty($tablesInformation)) { return []; } $querySql = []; foreach ($userFieldInformation as $userField) { $ufName = $userField['ENTITY_ID']; $ufType = $userField['USER_TYPE_ID']; if ($userField['MULTIPLE'] === 'Y') { $ufId = $userField['ID']; $utmEntityTableName = 'b_utm_'.mb_strtolower($ufName); if (in_array($utmEntityTableName, $tablesInformation)) { if ( $diskAvailable && $ufType === \Bitrix\Disk\Uf\FileUserType::USER_TYPE_ID ) { $querySql[] = " SELECT files.FILE_ID as FILE_ID FROM {$utmEntityTableName} ufsrc INNER JOIN b_disk_attached_object attached ON attached.ID = ufsrc.VALUE_INT AND ufsrc.FIELD_ID = '{$ufId}' INNER JOIN b_disk_object files ON files.ID = attached.OBJECT_ID AND files.ID = files.REAL_OBJECT_ID AND files.TYPE = '".\Bitrix\Disk\Internals\ObjectTable::TYPE_FILE."' "; } elseif ( $diskAvailable && $ufType === \Bitrix\Disk\Uf\VersionUserType::USER_TYPE_ID ) { $querySql[] = " SELECT versions.FILE_ID as FILE_ID FROM {$utmEntityTableName} ufsrc INNER JOIN b_disk_attached_object attached ON attached.ID = ufsrc.VALUE_INT AND ufsrc.FIELD_ID = '{$ufId}' INNER JOIN b_disk_version versions ON versions.ID = attached.VERSION_ID INNER JOIN b_disk_object files ON files.ID = versions.OBJECT_ID AND files.ID = attached.OBJECT_ID AND files.ID = files.REAL_OBJECT_ID AND files.TYPE = '".\Bitrix\Disk\Internals\ObjectTable::TYPE_FILE."' "; } elseif ( $ufType === \CUserTypeFile::USER_TYPE_ID ) { $querySql[] = " SELECT ufsrc.VALUE_INT as FILE_ID FROM {$utmEntityTableName} ufsrc WHERE ufsrc.FIELD_ID = '{$ufId}' AND ufsrc.VALUE_INT IS NOT NULL "; } } } else { $ufEntityTableFieldName = $userField['FIELD_NAME']; $utsEntityTableName = 'b_uts_'.mb_strtolower($ufName); if (in_array($utsEntityTableName, $tablesInformation)) { if ( $diskAvailable && $ufType === \Bitrix\Disk\Uf\FileUserType::USER_TYPE_ID ) { $querySql[] = " SELECT files.FILE_ID as FILE_ID FROM {$utsEntityTableName} ufsrc INNER JOIN b_disk_attached_object attached ON attached.ID = cast(ufsrc.{$ufEntityTableFieldName} as UNSIGNED) and ufsrc.{$ufEntityTableFieldName} REGEXP '^[0-9]+$' INNER JOIN b_disk_object files ON files.ID = attached.OBJECT_ID AND files.ID = files.REAL_OBJECT_ID AND files.TYPE = '".\Bitrix\Disk\Internals\ObjectTable::TYPE_FILE."' "; } elseif ( $diskAvailable && $ufType === \Bitrix\Disk\Uf\VersionUserType::USER_TYPE_ID ) { $querySql[] = " SELECT versions.FILE_ID as FILE_ID FROM {$utsEntityTableName} ufsrc INNER JOIN b_disk_attached_object attached ON attached.ID = cast(ufsrc.{$ufEntityTableFieldName} as UNSIGNED) and ufsrc.{$ufEntityTableFieldName} REGEXP '^[0-9]+$' INNER JOIN b_disk_version versions ON versions.ID = attached.VERSION_ID INNER JOIN b_disk_object files ON files.ID = versions.OBJECT_ID AND files.ID = attached.OBJECT_ID AND files.ID = files.REAL_OBJECT_ID AND files.TYPE = '".\Bitrix\Disk\Internals\ObjectTable::TYPE_FILE."' "; } elseif ( $ufType === \CUserTypeFile::USER_TYPE_ID ) { $querySql[] = " SELECT CAST(ufsrc.{$ufEntityTableFieldName} as UNSIGNED) as FILE_ID FROM {$utsEntityTableName} ufsrc WHERE ufsrc.{$ufEntityTableFieldName} IS NOT NULL AND ufsrc.{$ufEntityTableFieldName} REGEXP '^[0-9]+$' "; } } } } return $querySql; }