2namespace Bitrix\Calendar\Sharing\Link;
4use Bitrix\Calendar\Internals\SharingLinkTable;
5use Bitrix\Main\ArgumentException;
6use Bitrix\Main\Type\DateTime;
7use Bitrix\Calendar\Sharing;
8use Bitrix\Calendar\Sharing\Link\Member\Member;
9use Bitrix\Main\UserTable;
19 protected const SELECT = [
'*',
'MEMBERS',
'MEMBERS.USER',
'MEMBERS.IMAGE'];
26 if (self::$instance ===
null)
28 self::$instance =
new self();
31 return self::$instance;
50 return $this->getCrmDealLinkMapper()->convertToArray($sharingLink);
53 if ($sharingLink instanceof
UserLink)
55 return $this->getUserLinkMapper()->convertToArray($sharingLink);
60 return $this->getEventLinkMapper()->convertToArray($sharingLink);
65 return $this->getGroupLinkMapper()->convertToArray($sharingLink);
82 $sharingLinkEO = SharingLinkTable::query()
83 ->setSelect(self::SELECT)
84 ->where(
'HASH',
$hash)
85 ->exec()->fetchObject()
88 if ($sharingLinkEO ===
null)
93 $mapper = match ($sharingLinkEO->getObjectType())
95 Helper::USER_SHARING_TYPE => $this->getUserLinkMapper(),
96 Helper::EVENT_SHARING_TYPE => $this->getEventLinkMapper(),
97 Helper::CRM_DEAL_SHARING_TYPE => $this->getCrmDealLinkMapper(),
98 Helper::GROUP_SHARING_TYPE => $this->getGroupLinkMapper(),
102 return $mapper?->getByEntityObject($sharingLinkEO);
113 return $this->getUserLinkMapper()->getMap([
115 '=OBJECT_TYPE' => Helper::USER_SHARING_TYPE,
130 return $this->getUserLinkMapper()->getMap([
132 '=OBJECT_TYPE' => Helper::USER_SHARING_TYPE,
134 '=MEMBERS_HASH' =>
null,
148 return $this->getUserLinkMapper()->getMap([
150 '=OBJECT_TYPE' => Helper::USER_SHARING_TYPE,
152 '!=MEMBERS_HASH' =>
null,
158 return $this->getGroupLinkMapper()->getMap([
159 '=OBJECT_ID' => $groupId,
161 '=OBJECT_TYPE' => Helper::GROUP_SHARING_TYPE,
163 '=MEMBERS_HASH' =>
null,
182 $rule = (
new Rule\Factory())->getRuleBySharingLink($userLink);
183 $userLink->setSharingRule($rule);
185 $this->getUserLinkMapper()->create($userLink);
204 ->setEventId(
$params[
'eventId'])
207 ->setParentLinkHash(
$params[
'parentLinkHash'])
209 ->setDateExpire(
$params[
'expiryDate'] ??
null)
210 ->setExternalUserName(
$params[
'externalUserName'] ??
null)
213 $this->getEventLinkMapper()->create($eventLink);
233 ?
array $memberIds = [],
234 ?
int $contactId =
null,
235 ?
int $contactType =
null,
237 ?
string $senderId =
null,
243 ->setOwnerId($ownerId)
245 ->setContactType($contactType)
246 ->setContactId($contactId)
248 ->setSenderId($senderId)
251 Sharing\Helper::createSharingLinkExpireDate(
259 if ($memberHash !==
null)
262 ->setMembers($this->getMembersFromIds($memberIds))
263 ->setMembersHash($memberHash)
267 $rule = (
new Rule\Factory())->getRuleBySharingLink($crmDealLink);
268 $crmDealLink->setSharingRule($rule);
270 $this->getCrmDealLinkMapper()->create($crmDealLink);
281 SharingLinkTable::update($existJointLink->getId(), [
282 'FREQUENT_USE' => $existJointLink->getFrequentUse() + 1,
285 return $existJointLink;
294 if ($memberHash !==
null)
297 ->setMembers($this->getMembersFromIds($memberIds))
298 ->setMembersHash($memberHash)
302 $this->getUserLinkMapper()->create($userJointLink);
304 return $userJointLink;
311 ->setMembers($this->getMembersFromIds($memberIds))
315 $this->getCrmDealLinkMapper()->create($crmDealLink);
323 ->setObjectId($groupId)
329 $rule = (
new Rule\Factory())->getRuleBySharingLink($groupLink);
330 $groupLink->setSharingRule($rule);
332 $this->getGroupLinkMapper()->create($groupLink);
343 SharingLinkTable::update($existJointLink->getId(), [
344 'DATE_EXPIRE' =>
Sharing\Helper::createSharingLinkExpireDate(
350 return $existJointLink;
354 ->setObjectId($groupId)
358 Sharing\Helper::createSharingLinkExpireDate(
365 if ($memberHash !==
null)
368 ->setMembers($this->getMembersFromIds($memberIds))
369 ->setMembersHash($memberHash)
373 $this->getGroupLinkMapper()->create($groupJointLink);
375 return $groupJointLink;
378 private function getMembersFromIds(
array $memberIds):
array
380 $memberIds = array_map(
static function ($memberId) {
381 return (
int)$memberId;
385 $users = UserTable::query()
386 ->whereIn(
'ID', $memberIds)
387 ->where(
'IS_REAL_USER',
'Y')
388 ->setSelect([
'NAME',
'LAST_NAME',
'ID',
'PERSONAL_PHOTO'])
393 foreach ($users as
$user)
396 if (!empty(
$user->getPersonalPhoto()))
398 $file = \CFile::ResizeImageGet(
399 $user->getPersonalPhoto(),
400 [
'width' => 100,
'height' => 100],
403 $avatar = !empty($file[
'src']) ? $file[
'src'] :
'';
406 $member =
new Member();
408 ->setId(
$user->getId())
409 ->setName(
$user->getName())
410 ->setLastName(
$user->getLastName())
421 if (empty($memberIds))
426 $memberIds = array_map(
static function ($memberId) {
427 return (
int)$memberId;
431 $implodedUsers = $prefix . implode(
'|', $memberIds) .
'|' .
$userId;
433 return md5($implodedUsers);
447 $query = SharingLinkTable::query()
449 ->where(
'OBJECT_ID', $eventId)
450 ->where(
'OBJECT_TYPE', Helper::EVENT_SHARING_TYPE)
453 if ($searchActiveOnly)
455 $query->where(
'ACTIVE',
'Y');
458 $sharingLinkEO =
$query->exec()->fetchObject();
460 if ($sharingLinkEO ===
null)
465 return $this->getEventLinkMapper()->getByEntityObject($sharingLinkEO);
479 $sharingLinkEO = SharingLinkTable::query()
480 ->setSelect(self::SELECT)
481 ->where(
'OBJECT_ID', $eventId)
482 ->where(
'OBJECT_TYPE', Helper::EVENT_SHARING_TYPE)
483 ->exec()->fetchObject();
485 if ($sharingLinkEO ===
null)
490 return $this->getEventLinkMapper()->getByEntityObject($sharingLinkEO);
508 ?
array $memberIds = [],
509 ?
int $contactId =
null,
510 ?
int $contactType =
null,
515 $sharingLinkEO = SharingLinkTable::query()
516 ->setSelect(self::SELECT)
518 ->where(
'OBJECT_TYPE', Helper::CRM_DEAL_SHARING_TYPE)
519 ->where(
'ACTIVE',
'Y')
520 ->where(
'OWNER_ID', $ownerId)
521 ->where(
'CONTACT_ID', $contactId)
522 ->where(
'CONTACT_TYPE', $contactType)
523 ->where(
'DATE_CREATE',
'>=', (
new DateTime())->setTime(0, 0))
524 ->where(
'MEMBERS_HASH', $memberHash)
525 ->exec()->fetchObject();
527 if ($sharingLinkEO ===
null)
532 return $this->getCrmDealLinkMapper()->getByEntityObject($sharingLinkEO);
537 $sharingLinkEO = SharingLinkTable::query()
539 ->where(
'OBJECT_TYPE', Helper::CRM_DEAL_SHARING_TYPE)
540 ->where(
'OWNER_ID', $ownerId)
541 ->whereNotNull(
'CONTACT_ID')
542 ->whereNotNull(
'CONTACT_TYPE')
543 ->setOrder([
'ID' =>
'desc'])
545 ->exec()->fetchObject();
547 if ($sharingLinkEO ===
null)
552 return $this->getCrmDealLinkMapper()->getByEntityObject($sharingLinkEO);
557 $sharingLinkEO = SharingLinkTable::query()
558 ->setSelect(self::SELECT)
559 ->where(
'MEMBERS_HASH', $membersHash)
560 ->where(
'ACTIVE',
'Y')
561 ->where(
'OBJECT_TYPE', Helper::USER_SHARING_TYPE)
562 ->exec()->fetchObject()
565 if ($sharingLinkEO ===
null)
570 return $this->getUserLinkMapper()->getByEntityObject($sharingLinkEO);
575 $sharingLinkEO = SharingLinkTable::query()
576 ->setSelect(self::SELECT)
577 ->where(
'OBJECT_ID', $groupId)
578 ->where(
'MEMBERS_HASH', $membersHash)
579 ->where(
'ACTIVE',
'Y')
580 ->where(
'OBJECT_TYPE', Helper::GROUP_SHARING_TYPE)
581 ->exec()->fetchObject()
584 if ($sharingLinkEO ===
null)
589 return $this->getGroupLinkMapper()->getByEntityObject($sharingLinkEO);
594 $entityObject = SharingLinkTable::query()
595 ->setSelect([
'PARENT_LINK_HASH'])
596 ->where(
'CONFERENCE_ID', $conferenceId)
597 ->exec()->fetchObject()
600 if (is_null($entityObject))
605 $parentLink = $this->
getLinkByHash($entityObject->getParentLinkHash());
613 ?
int $contactId =
null,
614 ?
int $contactType =
null
617 $sharingLinkEO = SharingLinkTable::query()
618 ->setSelect(self::SELECT)
620 ->where(
'OBJECT_TYPE', Helper::CRM_DEAL_SHARING_TYPE)
621 ->where(
'ACTIVE',
'Y')
622 ->where(
'OWNER_ID', $ownerId)
623 ->where(
'CONTACT_ID', $contactId)
624 ->where(
'CONTACT_TYPE', $contactType)
625 ->whereNotNull(
'MEMBERS.MEMBER_ID')
626 ->exec()->fetchObject();
628 if ($sharingLinkEO ===
null)
633 return $this->getCrmDealLinkMapper()->getByEntityObject($sharingLinkEO);
638 if (self::$userLinkMapper ===
null)
643 return self::$userLinkMapper;
646 private function getEventLinkMapper(): EventLinkMapper
648 if (self::$eventLinkMapper ===
null)
650 self::$eventLinkMapper =
new EventLinkMapper();
653 return self::$eventLinkMapper;
656 private function getCrmDealLinkMapper(): CrmDealLinkMapper
658 if (self::$crmDealLinkMapper ===
null)
660 self::$crmDealLinkMapper =
new CrmDealLinkMapper();
663 return self::$crmDealLinkMapper;
666 private function getGroupLinkMapper(): GroupLinkMapper
668 if (self::$groupLinkMapper ===
null)
670 self::$groupLinkMapper =
new GroupLinkMapper();
673 return self::$groupLinkMapper;
if(empty( $fields)) foreach($fields as $field) $channelId
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
getEventLinkByEventId(int $eventId, bool $searchActiveOnly=true)
getLinkArrayByHash(string $hash)
getCrmDealLink(int $entityId, int $ownerId, ?array $memberIds=[], ?int $contactId=null, ?int $contactType=null,)
getAllUserLinks(int $userId)
getUserJointLinks($userId)
static CrmDealLinkMapper $crmDealLinkMapper
getGroupJointLinkByMembersHash(int $groupId, string $membersHash)
getGroupLinks(int $groupId, int $userId)
createUserLink(int $userId)
getLinkByHash(string $hash)
createGroupLink(int $groupId, int $userId)
createUserJointLink(int $userId, array $memberIds)
getJointLinkByMembersHash(string $membersHash)
static EventLinkMapper $eventLinkMapper
createEventLink(array $params)
generateMembersHash(int $userId, array $memberIds, string $prefix='')
getLastSentCrmDealLink(int $ownerId)
getParentLinkByConferenceId(string $conferenceId)
createCrmDealJointLink(CrmDealLink $crmDealLink, array $memberIds)
createCrmDealLink(int $ownerId, int $entityId, ?array $memberIds=[], ?int $contactId=null, ?int $contactType=null, ?string $channelId=null, ?string $senderId=null,)
getCrmDealJointLink(int $entityId, int $ownerId, ?int $contactId=null, ?int $contactType=null)
createGroupJointLink(int $groupId, array $memberIds)
static GroupLinkMapper $groupLinkMapper
static UserLinkMapper $userLinkMapper
getDeletedEventLinkByEventId(int $eventId)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
const BX_RESIZE_IMAGE_EXACT
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']