1C-Bitrix 25.700.0
Загрузка...
Поиск...
Не найдено
FileService.php
См. документацию.
1<?php
2
3namespace Bitrix\Im\V2\Link\File;
4
5use Bitrix\Disk\Driver;
6use Bitrix\Disk\File;
7use Bitrix\Disk\Security\DiskSecurityContext;
8use Bitrix\Im\Model\MessageParamTable;
9use Bitrix\Im\V2\Common\ContextCustomer;
10use Bitrix\Im\V2\Link\Push;
11use Bitrix\Im\V2\Message;
12use Bitrix\Im\V2\Result;
13use Bitrix\Main\Config\Option;
14use Bitrix\Main\ORM\Query\Query;
15
17{
18 use ContextCustomer;
19
20 protected const ADD_FILE_EVENT = 'fileAdd';
21 protected const DELETE_FILE_EVENT = 'fileDelete';
22
23 protected bool $isMigrationFinished;
24
25 public function __construct()
26 {
27 $this->isMigrationFinished = Option::get('im', 'im_link_file_migration', 'N') === 'Y';
28 }
29
30 public function save(Message $message): Result
31 {
32 $files = $message->getFiles();
33 $links = FileCollection::linkEntityToMessage($files, $message);
34
35 return $this->saveInternal($links);
36 }
37
43 public function saveFilesFromMessage(array $files, Message $message): Result
44 {
45 $result = new Result();
46
47 if (empty($files))
48 {
49 return $result;
50 }
51
52 $entities = new \Bitrix\Im\V2\Entity\File\FileCollection($files, $message->getChatId());
54 $links = FileCollection::linkEntityToMessage($entities, $message);
55
56 return $this->saveInternal($links);
57 }
58
59 protected function saveInternal(FileCollection $links): Result
60 {
61 $result = new Result();
62 $saveResult = $links->save();
63
64 if ($links->count() === 0)
65 {
66 return $result;
67 }
68
69 if (!$saveResult->isSuccess())
70 {
71 $result->addErrors($saveResult->getErrors());
72 }
73
74 if ($saveResult->isSuccess())
75 {
76 foreach ($links as $link)
77 {
79 ->setContext($this->context)
80 ->sendFull($link, self::ADD_FILE_EVENT, ['CHAT_ID' => $link->getChatId()])
81 ;
82 }
83 }
84
85 return $result;
86 }
87
88 public function deleteFilesByDiskFileId(int $diskFileId): Result
89 {
90 $links = FileCollection::getByDiskFileId($diskFileId);
91
92 return $this->deleteFiles($links);
93 }
94
95 public function deleteFilesByMessageIds(array $messageIds): Result
96 {
97 $links = FileCollection::getByMessageIds($messageIds);
98
99 return $this->deleteFiles($links);
100 }
101
102 protected function deleteFiles(FileCollection $links): Result
103 {
104 $result = new Result();
105
106 if ($links->isEmpty())
107 {
108 return $result;
109 }
110
111 $deleteResult = $links->delete();
112
113 if (!$deleteResult->isSuccess())
114 {
115 return $result->addErrors($deleteResult->getErrors());
116 }
117
118 if (!$this->isMigrationFinished)
119 {
120 return $result;
121 }
122
123 foreach ($links as $link)
124 {
126 ->setContext($this->context)
127 ->sendIdOnly($link, self::DELETE_FILE_EVENT, ['CHAT_ID' => $link->getChatId()])
128 ;
129 }
130
131 return $result;
132 }
133
134 public function isMigrationFinished(): bool
135 {
137 }
138
139 public function getFilesBeforeMigrationFinished(int $chatId, int $limit, ?int $lastId = null, ?string $filename = null): \Bitrix\Im\V2\Entity\File\FileCollection
140 {
141 $folderModel = \CIMDisk::getFolderModel($chatId, false);
142 if ($folderModel === false)
143 {
144 return new \Bitrix\Im\V2\Entity\File\FileCollection();
145 }
146 $relation = \CIMChat::GetRelationById($chatId, $this->getContext()->getUserId(), true, false);
147 $filter = Query::filter()
148 ->where('PARENT_ID', $folderModel->getId())
149 ->where('STORAGE_ID', $folderModel->getStorageId())
150 ->where('ID', '>', $relation['LAST_FILE_ID'])
151 ;
152 if (isset($lastId))
153 {
154 $filter->where('ID', '<', $lastId);
155 }
156 if (isset($filename))
157 {
158 $clearFileName = str_replace("%", '', $filename);
159 $filter->whereLike('NAME', "$clearFileName%");
160 }
161 $parameters = [
162 'filter' => $filter,
163 'with' => ['CREATE_USER'],
164 'limit' => $limit,
165 'order' => ['ID' => 'DESC']
166 ];
167 $securityContext = new DiskSecurityContext($this->getContext()->getUserId());
168 $parameters = Driver::getInstance()->getRightsManager()->addRightsCheck($securityContext, $parameters, ['ID', 'CREATED_BY']);
169 $diskFiles = File::getModelList($parameters);
170
171 return new \Bitrix\Im\V2\Entity\File\FileCollection($diskFiles, $chatId);
172 }
173}
isEmpty()
Определения Registry.php:71
Определения result.php:20
if(!\Bitrix\Main\Loader::includeModule('clouds')) $lastId
Определения sync.php:68
$filename
Определения file_edit.php:47
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
Определения file_new.php:804
$result
Определения get_property_values.php:14
$filter
Определения iblock_catalog_list.php:54
Определения Uuid.php:3
Определения ActionUuid.php:3
Определения ufield.php:9
Определения Image.php:9
$files
Определения mysql_to_pgsql.php:30
$message
Определения payment.php:8