• Модуль: crm
  • Путь к файлу: ~/bitrix/modules/crm/lib/agent/files/clearunregisteredlogo.php
  • Класс: Bitrix\Crm\Agent\Files\ClearUnregisteredLogo
  • Вызов: ClearUnregisteredLogo::doRun
static function doRun()
{
	$limit = (int)static::$limit;
	if ($limit <= 0)
	{
		$limit = 100;
	}
	$timeLimit = (int)static::$timeLimit;
	if (defined('START_EXEC_TIME') && START_EXEC_TIME > 0)
	{
		$startTime = (int)START_EXEC_TIME;
	}
	else
	{
		$startTime = time();
	}

	$connection = Application::getConnection();

	$workLoad = false;

	$sqlDisk = $sqlActivityDisk = '';
	$diskAvailable = Main\ModuleManager::isModuleInstalled('disk') &&
					 Main\Loader::includeModule('disk');

	if ($diskAvailable)
	{
		$sqlDisk = "
			AND ID NOT IN (SELECT FILE_ID FROM b_disk_version ) 
			AND ID NOT IN (SELECT FILE_ID FROM b_disk_object 
							WHERE TYPE = '".\Bitrix\Disk\Internals\ObjectTable::TYPE_FILE."' 
									AND ID = REAL_OBJECT_ID AND FILE_ID IS NOT NULL)
		";

		// activity disk file
		$sqlActivityDisk = "
			AND ID NOT IN(
				SELECT FILE_ID FROM b_disk_object 
				WHERE TYPE = '".\Bitrix\Disk\Internals\ObjectTable::TYPE_FILE."' 
					AND ID IN(SELECT ELEMENT_ID FROM b_crm_act_elem where STORAGE_TYPE_ID = '".\Bitrix\Crm\Integration\StorageType::Disk."')
			)
		";
	}



	$ufFieldSql = '';
	$ufFieldQueries = static::prepareUserFieldQuery();
	foreach ($ufFieldQueries as $queryStr)
	{
		$ufFieldSql .= " AND ID NOT IN({$queryStr}) ";
	}

	for ($i = 2, $auxiliaries = ['1 as n']; $i <= 50; $i++)
	{
		$auxiliaries[] = $i;
	}
	$auxiliarySql = implode(' union select ', $auxiliaries);

	$storageTypeFile = \Bitrix\Crm\Integration\StorageType::File;

	$result = $connection->query("
		select ID
		from b_file 
		where 
			MODULE_ID = 'crm'
			-- image
			and CONTENT_TYPE like 'image/%'
			-- activity file
			AND ID NOT IN (SELECT ELEMENT_ID FROM b_crm_act_elem where STORAGE_TYPE_ID = '{$storageTypeFile}') 
			-- activity disk file
			{$sqlActivityDisk}
			-- event file
			and id not in (select  
							CAST(SUBSTRING_INDEX(SUBSTRING_INDEX(src.fids, ' ', NS.n), ' ', -1) AS UNSIGNED) as FILE_ID
						from (
							select {$auxiliarySql}
						) NS
						inner join
						(
							select
								@xml := replace(replace(replace(replace(e.FILES,'a:',''),';}