- Модуль: 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;
}