- Модуль: crm
- Путь к файлу: ~/bitrix/modules/crm/lib/activity/provider/livefeed.php
- Класс: Bitrix\Crm\Activity\Provider\Livefeed
- Вызов: Livefeed::addActivity
static function addActivity($fields)
{
global $USER_FIELD_MANAGER;
$result = false;
$type = (
!empty($fields["TYPE"])
? $fields["TYPE"]
: 'ENTRY'
);
$communications = (
!empty($fields["COMMUNICATIONS"])
&& is_array($fields["COMMUNICATIONS"])
? $fields["COMMUNICATIONS"]
: array()
);
$bindings = (
!empty($fields["BINDINGS"])
&& is_array($fields["BINDINGS"])
? $fields["BINDINGS"]
: array()
);
$message = (
!empty($fields["MESSAGE"])
? $fields["MESSAGE"]
: ''
);
$title = (
!empty($fields["TITLE"])
? $fields["TITLE"]
: ''
);
$userId = (
!empty($fields["USER_ID"])
? intval($fields["USER_ID"])
: 0
);
$responsibleUserId = (
!empty($fields["RESPONSIBLE_USER_ID"])
? intval($fields["RESPONSIBLE_USER_ID"])
: $userId
);
$entityId = (
!empty($fields["ENTITY_ID"])
? intval($fields["ENTITY_ID"])
: 0
);
$parentId = (
!empty($fields["PARENT_ID"])
? intval($fields["PARENT_ID"])
: 0
);
if (
empty($communications)
|| empty($message)
|| $userId <= 0
|| $responsibleUserId <= 0
|| $entityId <= 0
)
{
return $result;
}
if (!empty($bindings))
{
switch($type)
{
case 'COMMENT_IN':
case 'BLOG_COMMENT_IN':
$subject = Loc::getMessage('CRM_ACTIVITY_PROVIDER_LIVEFEED_TITLE_COMMENT_IN');
$endTime = '';
$completed = 'N';
$direction = \CCrmActivityDirection::Incoming;
$providerTypeId = self::PROVIDER_TYPE_ID_COMMENT;
$ufEntity = ($type == 'BLOG_COMMENT_IN' ? 'BLOG_COMMENT' : 'SONET_COMMENT');
$ufEntityId = $entityId;
$entityId = ($type == 'BLOG_COMMENT_IN' ? self::getLogCommentId($entityId, 'blog_comment') : $entityId);
$ufCode = ($type == 'BLOG_COMMENT_IN' ? 'UF_BLOG_COMMENT_FILE' : 'UF_SONET_COM_DOC');
break;
case 'COMMENT_OUT':
case 'BLOG_COMMENT_OUT':
$subject = Loc::getMessage('CRM_ACTIVITY_PROVIDER_LIVEFEED_TITLE_COMMENT_OUT');
$endTime = '';
$completed = 'Y';
$direction = \CCrmActivityDirection::Outgoing;
$providerTypeId = self::PROVIDER_TYPE_ID_COMMENT;
$ufEntity = ($type == 'BLOG_COMMENT_OUT' ? 'BLOG_COMMENT' : 'SONET_COMMENT');
$ufEntityId = $entityId;
$entityId = ($type == 'BLOG_COMMENT_OUT' ? self::getLogCommentId($entityId, 'blog_comment') : $entityId);
$ufCode = ($type == 'BLOG_COMMENT_OUT' ? 'UF_BLOG_COMMENT_FILE' : 'UF_SONET_COM_DOC');
break;
case 'ENTRY':
case 'BLOG_POST':
$subject = (!empty($title) ? $title : Loc::getMessage('CRM_ACTIVITY_PROVIDER_LIVEFEED_TITLE_ENTRY'));
$endTime = null;
$completed = 'Y';
$direction = \CCrmActivityDirection::Outgoing;
$providerTypeId = self::PROVIDER_TYPE_ID_ENTRY;
$ufEntity = ($type == 'BLOG_POST' ? 'BLOG_POST' : 'SONET_LOG');
$ufEntityId = ($type == 'BLOG_POST' ? self::getSourceEntryId($entityId) : $entityId);
$ufCode = ($type == 'BLOG_POST' ? 'UF_BLOG_POST_FILE' : 'UF_SONET_LOG_DOC');
break;
default:
}
$uf = ($ufEntityId > 0 ? $USER_FIELD_MANAGER->getUserFields($ufEntity, $ufEntityId, LANGUAGE_ID, 0) : null);
$fileIdList = array();
if (
is_array($uf)
&& isset($uf[$ufCode])
&& !empty($uf[$ufCode]["VALUE"])
&& Loader::includeModule('disk')
)
{
foreach ($uf[$ufCode]["VALUE"] as $attachedObjectId)
{
$attachedObject = \Bitrix\Disk\AttachedObject::loadById($attachedObjectId);
if ($attachedObject)
{
$fileIdList[] = $attachedObject->getObjectId();
}
}
}
$activityFields = array(
'TYPE_ID' => \CCrmActivityType::Provider,
'PROVIDER_ID' => self::PROVIDER_ID,
'SUBJECT' => $subject,
'START_TIME' => convertTimeStamp((time() + \CTimeZone::getOffset()), 'FULL', SITE_ID),
'END_TIME' => $endTime,
'COMPLETED' => $completed,
'PRIORITY' => \CCrmActivityPriority::Medium,
'DESCRIPTION' => $message,
'DESCRIPTION_TYPE' => \CCrmContentType::BBCode,
'LOCATION' => '',
'DIRECTION' => $direction,
'NOTIFY_TYPE' => \CCrmActivityNotifyType::None,
'BINDINGS' => $bindings,
'SETTINGS' => array(),
'AUTHOR_ID' => $userId,
'RESPONSIBLE_ID' => $responsibleUserId,
'PROVIDER_TYPE_ID' => $providerTypeId,
'ASSOCIATED_ENTITY_ID' => $entityId,
'PARENT_ID' => $parentId
);
if (!empty($fileIdList))
{
$activityFields['STORAGE_TYPE_ID'] = \CCrmActivity::getDefaultStorageTypeID();
$activityFields['STORAGE_ELEMENT_IDS'] = $fileIdList;
}
$activityId = \CCrmActivity::add($activityFields, false, true, array('REGISTER_SONET_EVENT' => false));
if($activityId > 0)
{
\CCrmActivity::saveCommunications($activityId, $communications, $activityFields, true, false);
$result = $activityId;
}
}
return $result;
}