85 $fileNameSearchList = [];
87 foreach ($urls as
$path)
98 $fileNameList[] =
$url[0];
99 if (array_key_exists(
$url[0], static::$fileList))
104 $fileNameSearchList[] =
$url[0];
109 $useSenderFileInfoTable = \COption::GetOptionString(
'sender',
'sender_file_info_load_completed',
'N') ===
'Y';
110 $attachmentFileIds = [];
111 $attachmentFiles = [];
114 && $useSenderFileInfoTable
117 $attachmentFiles = self::getMessageAttachmentFiles(
$entityId);
119 if (!empty($attachmentFiles))
121 foreach ($attachmentFiles as $attachmentFile)
123 $attachmentFileIds[] = (int)$attachmentFile[
'ID'];
130 if (!empty($fileNameSearchList))
133 if ($useSenderFileInfoTable)
136 ->setSelect([
'ID',
'FILE_NAME'])
137 ->whereIn(
'FILE_NAME', $fileNameSearchList)
138 ->setOrder([
'ID' =>
'ASC'])
144 $selectedFiles = \Bitrix\Main\FileTable::getList([
145 'select' => [
'ID',
'FILE_NAME'],
147 '=MODULE_ID' =>
'sender',
148 '@FILE_NAME' => $fileNameSearchList,
158 if (empty($selectedFiles))
169 $currentFiles = array_column(self::getCurrentFiles(
$entityId, $entityType),
'FILE_ID');
172 $alreadyAttachedFileIds = [];
173 foreach ($currentFiles as $fileId)
175 if (in_array((
int)$fileId, $attachmentFileIds,
true))
177 $alreadyAttachedFileIds[] = (int)$fileId;
181 $preparedFiles[$fileId] = $fileId;
192 if (!$onDeleteEntity && in_array((
int)$file[
'ID'], $attachmentFileIds,
true))
197 if (!isset(static::$fileList[$file[
'FILE_NAME']]))
199 static::$fileList[$file[
'FILE_NAME']] = $file;
202 if ($onDeleteEntity && in_array($file[
'ID'], $preparedFiles))
204 $filesToDelete[] = $file[
'ID'];
205 unset($preparedFiles[$file[
'ID']]);
209 if (in_array($file[
'ID'], $preparedFiles))
211 unset($preparedFiles[$file[
'ID']]);
215 if (isset($batchData[$file[
'FILE_NAME']]))
217 $filesToDelete[] = $file[
'ID'];
226 'ENTITY_TYPE' => $entityType,
228 'FILE_ID' => $file[
'ID'],
235 foreach ($attachmentFiles as $file)
237 if (in_array((
int)$file[
'ID'], $alreadyAttachedFileIds,
true))
242 $batchData[
'ATTACHMENT_FILE' . $file[
'ID']] = [
243 'ENTITY_TYPE' => $entityType,
245 'FILE_ID' => $file[
'ID'],
250 foreach ($preparedFiles as $file)
252 self::deleteIfCan($file,
$entityId, $entityType, $deleteFiles);
255 foreach ($filesToDelete as $file)
257 self::deleteIfCan($file,
$entityId, $entityType, $deleteFiles);
259 SqlBatch::insert(self::getTableName(), $batchData);