3declare(strict_types=1);
5namespace Bitrix\Socialnetwork\Collab\Entity\Event;
7use Bitrix\Im\V2\Integration\Socialnetwork\Collab\Collab;
8use Bitrix\Main\Engine\CurrentUser;
9use Bitrix\Main\DI\ServiceLocator;
11use Bitrix\Main\Loader;
12use Bitrix\SocialNetwork\Collab\Access\CollabAccessController;
13use Bitrix\SocialNetwork\Collab\Access\CollabDictionary;
14use Bitrix\Socialnetwork\Collab\Activity\LastActivityTrigger;
15use Bitrix\Socialnetwork\Collab\Control\Event\CollabUpdateEvent;
16use Bitrix\Socialnetwork\Collab\Entity\CollabEntity;
17use Bitrix\Socialnetwork\Collab\Entity\CollabEntityFactory;
18use Bitrix\Socialnetwork\Collab\Entity\Type\EntityType;
19use Bitrix\Socialnetwork\Collab\Integration\IM\ActionType;
20use Bitrix\Socialnetwork\Collab\Integration\IM\ActionMessageFactory;
21use Bitrix\Socialnetwork\Collab\Internals\CollabLogTable;
22use Bitrix\Socialnetwork\Collab\Log\Entry\AddCalendarEventLogEntry;
23use Bitrix\Socialnetwork\Collab\Log\Entry\AddFileLogEntry;
24use Bitrix\Socialnetwork\Collab\Log\Entry\AddFilePublicLinkLogEntry;
25use Bitrix\Socialnetwork\Collab\Log\Entry\AddTaskLogEntry;
26use Bitrix\Socialnetwork\Collab\Log\Entry\CompleteTaskLogEntry;
27use Bitrix\Socialnetwork\Collab\Log\Entry\DeleteCalendarEventLogEntry;
28use Bitrix\Socialnetwork\Collab\Log\Entry\DeleteFileLogEntry;
29use Bitrix\Socialnetwork\Collab\Log\Entry\DeleteTaskLogEntry;
30use Bitrix\Socialnetwork\Collab\Log\Entry\MoveFileToRecyclebinLogEntry;
31use Bitrix\Socialnetwork\Collab\Provider\CollabProvider;
32use Bitrix\Socialnetwork\Collab\Log\Entry\CopyInvitationLinkLogEntry;
33use Bitrix\Socialnetwork\Collab\Registry\CollabRegistry;
34use Bitrix\Socialnetwork\Collab\User\Stepper\SendCollabLeaveMessageStepper;
35use Bitrix\Socialnetwork\ComponentHelper;
36use Bitrix\Socialnetwork\Integration\Disk\ObjectType;
37use Bitrix\Socialnetwork\Integration\Tasks\TaskStatus;
43 if (Loader::includeModule(
'im'))
45 Collab::onEntityCountersUpdate($collabId,
$counters, $entityType);
57 $collabId =
$entity->getCollab()->getId();
58 $executorId = (int)($parameters[
'USER_ID'] ?? 0);
61 LastActivityTrigger::execute($executorId, $collabId);
64 $service = ServiceLocator::getInstance()->get(
'socialnetwork.collab.log.service');
74 self::sendUpdateEvent($changes,
$entity);
78 $collabId =
$entity->getCollab()->getId();
79 $executorId = (int)($changes[
'STATUS_CHANGED_BY'] ??
null);
87 $service = ServiceLocator::getInstance()->get(
'socialnetwork.collab.log.service');
94 $oldGroupId = (int)(
$fields[
'GROUP_ID'] ?? 0);
103 $isCollab = CollabRegistry::getInstance()->get($oldGroupId) !==
null;
106 self::sendUpdateEvent($changes);
118 self::sendDeleteEvent(
$entity);
120 $userId = $parameters[
'USER_ID'] ??
null;
127 $collabId =
$entity->getCollab()->getId();
129 $service = ServiceLocator::getInstance()->get(
'socialnetwork.collab.log.service');
148 $collabId =
$entity->getCollab()->getId();
149 $executorId = (int)(
$message[
'AUTHOR_ID'] ?? 0);
152 LastActivityTrigger::execute($executorId, $collabId);
157 $eventId = (int)(
$fields[
'ID'] ??
null);
158 if (empty($eventId) || !$isNew)
169 $collabId =
$entity->getCollab()->getId();
172 LastActivityTrigger::execute(
$userId, $collabId);
174 $collabId =
$entity->getCollab()->getId();
176 $service = ServiceLocator::getInstance()->get(
'socialnetwork.collab.log.service');
187 LastActivityTrigger::remove(userIds: [
$userId]);
189 $userCollabs = CollabProvider::getInstance()->getListByUserId(
$userId)->getIdList();
192 SendCollabLeaveMessageStepper::bind(0, [
$userId, (
int)CurrentUser::get()->getId(), serialize($userCollabs),]);
197 $file =
$event->getParameter(0);
199 $fileId = (int)$file->getFileId();
200 $userId = (int)$file->getCreateUser()->getId();
202 if (empty($fileId) || empty(
$userId))
213 $collabId =
$entity->getCollab()->getId();
216 LastActivityTrigger::execute(
$userId, $collabId);
220 $service = ServiceLocator::getInstance()->get(
'socialnetwork.collab.log.service');
228 $fileId = (int)(
$params[0] ??
null);
229 $deletedBy = (int)(
$params[1] ??
null);
231 if ($fileId <= 0 || $deletedBy <= 0)
236 $fileLog = CollabLogTable::query()
237 ->setSelect([
'ID',
'COLLAB_ID'])
238 ->where(
'ENTITY_ID', $fileId)
239 ->where(
'ENTITY_TYPE', EntityType::File->value)
248 $logEntry =
new DeleteFileLogEntry(userId: $deletedBy, collabId: $fileLog->getCollabId());
249 $logEntry->setFileId($fileId);
250 $service = ServiceLocator::getInstance()->get(
'socialnetwork.collab.log.service');
260 $type = (int)$file?->getType();
274 $collabId =
$entity->getCollab()->getId();
278 $service = ServiceLocator::getInstance()->get(
'socialnetwork.collab.log.service');
284 [$file, $deletedBy, $deletedType] =
$event->getParameters();
285 $deletedBy = (int)$deletedBy;
286 $type = (int)$file?->getType();
290 if ($deletedBy <= 0 || !$isFile)
301 $collabId =
$entity->getCollab()->getId();
305 $service = ServiceLocator::getInstance()->get(
'socialnetwork.collab.log.service');
318 $collabId =
$entity->getCollab()->getId();
320 $service = ServiceLocator::getInstance()->get(
'socialnetwork.collab.log.service');
326 $afterMembers =
$event->getCollabAfter()->getUserMemberIds();
327 $beforeMembers =
$event->getCollabBefore()->getUserMemberIds();
328 $excludedMembers = array_values(array_diff($beforeMembers, $afterMembers));
330 if (!empty($excludedMembers))
332 LastActivityTrigger::remove(
$event->getCollabAfter()->getId(), $excludedMembers);
339 $collabId = (int)
$event->getParameter(
'collabId');
341 if (!CollabAccessController::can(
$userId, CollabDictionary::COPY_LINK, $collabId))
346 ActionMessageFactory::getInstance()
347 ->getActionMessage(ActionType::CopyLink, $collabId,
$userId)
352 $service = ServiceLocator::getInstance()->get(
'socialnetwork.collab.log.service');
359 $collabId = (int)
$event->getParameter(
'collabId');
361 if (
$userId <= 0 || $collabId <= 0)
366 ActionMessageFactory::getInstance()
367 ->getActionMessage(ActionType::RegenerateLink, $collabId,
$userId)
386 private static function sendDeleteEvent(CollabEntity
$entity): void
if(! $messageFields||!isset($messageFields['message_id'])||!isset($messageFields['status'])||!CModule::IncludeModule("messageservice")) $messageId
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
static getByInternalObject(mixed $internalObject, EntityType|string $type)
static getById(int $id, EntityType|string $type)
static onCopyCollabInviteLink(Event $event)
static onAfterAddExternalLinkToObject(Event $event)
static OnAfterCommentAdd(Event $event)
static onCollabUpdate(CollabUpdateEvent $event)
static onCountersRecount(int $collabId, array $counters, string $entityType)
static onAfterUserDelete(int $userId)
static onRegenerateCollabInviteLink(Event $event)
static onTaskAdd(int $taskId, array $fields=[], array $parameters=[])
static onAfterDeleteFile(Event $event)
static OnAfterCalendarEventEdit(array $fields, bool $isNew, int $userId)
static onTaskUpdate(int $taskId, array $changes=[], array $fields=[], array $parameters=[])
static onTaskDelete(int $taskId, array $parameters)
static onAfterCalendarEventDelete(int $eventId, array $entryFields, int $userId)
static onAfterMarkDeletedObject(Event $event)
static onAfterAddFile(Event $event)
static getCompletedStatus()
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']