3namespace Bitrix\Socialnetwork\Livefeed;
5use Bitrix\Forum\Comments\Service\Manager;
6use Bitrix\Forum\ForumTable;
7use Bitrix\Forum\TopicTable;
8use Bitrix\Main\Config\Option;
10use Bitrix\Main\Localization\Loc;
11use Bitrix\Forum\MessageTable;
12use Bitrix\Main\UrlPreview\UrlPreview;
13use Bitrix\Main\Web\Json;
14use Bitrix\Socialnetwork\LogCommentTable;
15use Bitrix\Main\ORM\Fields\Relations\Reference;
16use Bitrix\Main\ORM\Query\Join;
17use Bitrix\Socialnetwork\CommentAux;
19Loc::loadMessages(__FILE__);
28 public static function getId(): string
30 return self::PROVIDER_ID;
39 'timeman_entry_comment',
43 'lists_new_element_comment',
44 'crm_activity_add_comment',
60 return 'FORUM_MESSAGE';
67 'EV' => CalendarEvent::CONTENT_TYPE_ID,
83 || !Loader::includeModule(
'forum')
89 $res = MessageTable::getList([
93 'select' => [
'ID',
'POST_MESSAGE',
'SERVICE_TYPE',
'SERVICE_DATA',
'POST_DATE',
'AUTHOR_ID',
'TOPIC_ID' ]
103 'SHARE_DEST' =>
$message[
'SERVICE_DATA'],
114 'select' => [
'ID',
'LOG_ID',
'SHARE_DEST',
'MESSAGE',
'EVENT_ID',
'RATING_TYPE_ID']
116 if ($logComentFields =
$res->fetch())
118 $logId = (int)$logComentFields[
'LOG_ID'];
120 $auxData[
'ID'] = (int)$logComentFields[
'ID'];
121 $auxData[
'LOG_ID'] =
$logId;
129 $CBXSanitizer = new \CBXSanitizer;
130 $CBXSanitizer->delAllTags();
147 $res = \CSocNetLog::getList(
154 [
'ID',
'EVENT_ID' ],
156 'CHECK_RIGHTS' =>
'Y',
158 'USE_SUBSCRIBE' =>
'N',
161 if ($logFields =
$res->fetch())
167 !empty($logComentFields)
172 $auxData[
'SHARE_DEST'] =
'';
173 $auxData[
'EVENT_ID'] = $logComentFields[
'EVENT_ID'];
175 $auxData[
'RATING_TYPE_ID'] = $logComentFields[
'RATING_TYPE_ID'];
197 'userFieldEntity' =>
'FORUM_MESSAGE',
198 'userFieldCode' =>
'UF_FORUM_MESSAGE_DOC',
210 return self::PERMISSION_READ;
215 static $urlCache = [];
224 if (isset($urlCache[
$logId]))
226 $entityUrl = $urlCache[
$logId];
230 $res = self::$logTable::getList([
234 'select' => [
'ENTITY_ID',
'EVENT_ID',
'SOURCE_ID',
'RATING_TYPE_ID',
'RATING_ENTITY_ID',
'PARAMS' ],
236 if ($logEntryFields =
$res->fetch())
241 if (in_array((
string)$logEntryFields[
'EVENT_ID'], $providerTasksTask->getEventId(),
true))
243 $entityId = (int)$logEntryFields[
'SOURCE_ID'];
244 if ($logEntryFields[
'EVENT_ID'] ===
'crm_activity_add')
246 if ($logEntryFields[
'RATING_TYPE_ID'] ===
'TASK')
248 $entityId = (int)$logEntryFields[
'RATING_ENTITY_ID'];
251 $logEntryFields[
'RATING_TYPE_ID'] ===
'LOG_ENTRY'
252 && Loader::includeModule(
'crm')
253 && (
$activity = \CCrmActivity::getById($logEntryFields[
'ENTITY_ID'],
false))
254 && (
int)
$activity[
'TYPE_ID'] === \CCrmActivityType::Task
268 $provider->setOption(
'checkAccess',
false);
275 $entityUrl = $postUrl.(mb_strpos($postUrl,
'?') ===
false ?
'?' :
'&').
'commentId='.$this->
getEntityId().
'#com'.$this->
getEntityId();
282 if (in_array($logEntryFields[
'EVENT_ID'], $providerCalendarEvent->getEventId(),
true))
285 $provider->setEntityId((
int)$logEntryFields[
'SOURCE_ID']);
290 $entityUrl = $postUrl.(mb_strpos($postUrl,
'?') ===
false ?
'?' :
'&').
'commentId='.$this->
getEntityId().
'#com'.$this->
getEntityId();
297 if (in_array($logEntryFields[
'EVENT_ID'], $providerTimemanEntry->getEventId(),
true))
300 $provider->setEntityId((
int)$logEntryFields[
'SOURCE_ID']);
303 $entityUrl =
$provider->getLiveFeedUrl();
310 if (in_array($logEntryFields[
'EVENT_ID'], $providerTimemanReport->getEventId(),
true))
313 $provider->setEntityId((
int)$logEntryFields[
'SOURCE_ID']);
316 $entityUrl =
$provider->getLiveFeedUrl();
323 if (in_array($logEntryFields[
'EVENT_ID'], $providerPhotogalleryPhoto->getEventId(),
true))
326 $provider->setEntityId((
int)$logEntryFields[
'SOURCE_ID']);
329 $entityUrl =
$provider->getLiveFeedUrl();
335 $providerWiki =
new Wiki();
336 if (in_array($logEntryFields[
'EVENT_ID'], $providerWiki->getEventId(),
true))
339 $provider->setEntityId((
int)($logEntryFields[
'SOURCE_ID']));
342 $entityUrl =
$provider->getLiveFeedUrl();
349 if (in_array($logEntryFields[
'EVENT_ID'], $providerListsItem->getEventId(),
true))
352 $provider->setEntityId((
int)($logEntryFields[
'SOURCE_ID']));
363 !empty($logEntryFields[
'PARAMS'])
364 && unserialize($logEntryFields[
'PARAMS'], [
'allowed_classes' =>
false])
365 && in_array($logEntryFields[
'EVENT_ID'], $providerForumTopic->getEventId(),
true)
368 $paramsList = unserialize($logEntryFields[
"PARAMS"], [
'allowed_classes' =>
false]);
369 if (!empty($paramsList[
"PATH_TO_MESSAGE"]))
379 if (!empty($entityUrl))
394 if (in_array(
$logEventId, $providerTasksTask->getEventId(),
true))
400 if (in_array(
$logEventId, $providerCalendarEvent->getEventId(),
true))
406 if (in_array(
$logEventId, $providerForumTopic->getEventId(),
true))
408 return 'FORUM_TOPIC';
412 if (in_array(
$logEventId, $providerTimemanEntry->getEventId(),
true))
414 return 'TIMEMAN_ENTRY';
418 if (in_array(
$logEventId, $providerTimemanReport->getEventId(),
true))
420 return 'TIMEMAN_REPORT';
424 if (in_array(
$logEventId, $providerPhotogalleryPhoto->getEventId(),
true))
426 return 'PHOTO_PHOTO';
429 $providerWiki =
new Wiki();
430 if (in_array(
$logEventId, $providerWiki->getEventId(),
true))
436 if (in_array(
$logEventId, $providerListsItem->getEventId(),
true))
438 return 'LISTS_NEW_ELEMENT';
453 static $parser =
null;
464 && (int)
$params[
'AUTHOR_ID'] > 0
473 || !Loader::includeModule(
'forum')
483 if (empty($feedParams))
488 $forumId = self::getForumId(array_merge($feedParams, [
497 $feed = new \Bitrix\Forum\Comments\Feed(
503 $forumMessageFields = [
505 'AUTHOR_ID' => $authorId,
513 $forumMessageFields[
'SERVICE_DATA'] = Json::encode(isset(
$params[
'AUX_DATA']) && is_array(
$params[
'AUX_DATA']) ?
$params[
'AUX_DATA'] : []);
516 ])->getText($forumMessageFields[
'SERVICE_DATA']);
521 && !empty(
$params[
'AUX_DATA'][
'entityType'])
522 && (
int)
$params[
'AUX_DATA'][
'entityId'] > 0
526 $entityLivefeedPovider->setEntityId((
int)
$params[
'AUX_DATA'][
'entityId']);
527 $entityLivefeedPovider->initSourceFields();
529 $url = $entityLivefeedPovider->getLiveFeedUrl();
532 $metaData = UrlPreview::getMetadataAndHtmlByUrl(
$url,
true,
false);
536 && !empty($metaData[
'ID'])
537 && (
int)$metaData[
'ID'] > 0
540 $signer = new \Bitrix\Main\Security\Sign\Signer();
541 $forumMessageFields[
'UF_FORUM_MES_URL_PRV'] = $signer->sign($metaData[
'ID'] .
'', UrlPreview::SIGN_SALT);
549 $forumMessageFields[
'SERVICE_DATA'] = Json::encode(isset(
$params[
'AUX_DATA']) && is_array(
$params[
'AUX_DATA']) ?
$params[
'AUX_DATA'] : []);
552 ])->getText($forumMessageFields[
'SERVICE_DATA']);
556 $forumComment = $feed->add($forumMessageFields);
563 $sonetCommentId =
false;
569 if ($parser ===
null)
571 $parser = new \CTextParser();
574 $sonetCommentFields = [
577 "EVENT_ID" => $this->getCommentEventId(),
579 "TEXT_MESSAGE" => $parser->convert4mail(
$message),
580 "MODULE_ID" => $this->getModuleId(),
581 "SOURCE_ID" => $forumComment[
'ID'],
583 "RATING_TYPE_ID" =>
"FORUM_POST",
584 "RATING_ENTITY_ID" => $forumComment[
'ID'],
585 "USER_ID" => $authorId,
586 "=LOG_DATE" => \CDatabase::currentTimeFunction(),
589 if (!empty(
$params[
'SHARE_DEST']))
591 $sonetCommentFields[
'SHARE_DEST'] =
$params[
'SHARE_DEST'];
594 if (!empty($forumMessageFields[
'UF_FORUM_MES_URL_PRV']))
596 $sonetCommentFields[
'UF_SONET_COM_URL_PRV'] = $forumMessageFields[
'UF_FORUM_MES_URL_PRV'];
599 $sonetCommentId = \CSocNetLogComments::add($sonetCommentFields,
false,
false);
605 'EVENT_ID' => $this->getCommentEventId(),
606 'SOURCE_ID' => $forumComment[
'ID'],
608 'select' => [
'ID' ],
610 if ($sonetCommentFields =
$res->fetch())
612 $sonetCommentId = $sonetCommentFields[
'ID'];
618 'sonetCommentId' => $sonetCommentId,
619 'sourceCommentId' => $forumComment[
'ID']
623 private static function getForumId(
$params = [])
642 && Loader::includeModule(
'forum')
645 $res = ForumTable::getList([
647 '=XML_ID' =>
'intranet_tasks',
649 'select' => [
'ID' ],
651 if ($forumFields =
$res->fetch())
653 $result = (int)$forumFields[
'ID'];
663 $res = ForumTable::getList([
665 '=XML_ID' =>
'bizproc_workflow',
667 'select' => [
'ID' ],
669 if ($forumFields =
$res->fetch())
671 $result = (int)$forumFields[
'ID'];
681 && Loader::includeModule(
'calendar')
684 $calendarSettings = \CCalendar::getSettings();
685 $result = $calendarSettings[
"forum_id"];
689 && Loader::includeModule(
'forum')
694 '=XML_ID' =>
'PHOTOGALLERY_COMMENTS'
696 'select' =>
array(
'ID')
698 if ($forumFields =
$res->fetch())
700 $result = (int)$forumFields[
'ID'];
711 '=XML_ID' =>
'USERS_AND_GROUPS'
713 'select' =>
array(
'ID')
715 if ($forumFields =
$res->fetch())
717 $result = (int)$forumFields[
'ID'];
725 private function getCommentEventId()
738 'tasks' =>
'tasks_comment',
739 'crm_activity_add' =>
'crm_activity_add_comment',
740 'calendar' =>
'calendar_comment',
742 'timeman_entry' =>
'timeman_entry_comment',
743 'report' =>
'report_comment',
744 'photo_photo' =>
'photo_comment',
745 'wiki' =>
'wiki_comment',
746 'lists_new_element' =>
'lists_new_element_comment',
751 private function getModuleId()
764 'calendar' =>
'calendar',
766 'timeman_entry' =>
'timeman',
767 'photo_photo' =>
'photogallery',
803 'select' =>
array(
'EVENT_ID',
'SOURCE_ID')
807 ($logFields =
$res->fetch())
808 && (!empty($logFields[
'EVENT_ID']))
809 && ((
int)$logFields[
'SOURCE_ID'] > 0)
815 if (in_array($logFields[
'EVENT_ID'], $providerTasksTask->getEventId(),
true))
817 $entityType = $providerTasksTask->getContentTypeId();
818 $entityId = (int)$logFields[
'SOURCE_ID'];
824 if (in_array($logFields[
'EVENT_ID'], $providerCalendarEvent->getEventId(),
true))
826 $entityType = $providerCalendarEvent->getContentTypeId();
827 $entityId = (int)$logFields[
'SOURCE_ID'];
834 if (in_array($logFields[
'EVENT_ID'], $providerForumTopic->getEventId(),
true))
836 $entityType = $providerForumTopic->getContentTypeId();
837 $entityId = (int)$logFields[
'SOURCE_ID'];
844 if (in_array($logFields[
'EVENT_ID'], $providerTimemanEntry->getEventId(),
true))
846 $entityType = $providerTimemanEntry->getContentTypeId();
847 $entityId = (int)$logFields[
'SOURCE_ID'];
854 if (in_array($logFields[
'EVENT_ID'], $providerTimemanReport->getEventId(),
true))
856 $entityType = $providerTimemanReport->getContentTypeId();
857 $entityId = (int)$logFields[
'SOURCE_ID'];
864 if (in_array($logFields[
'EVENT_ID'], $providerPhotogalleryPhoto->getEventId(),
true))
866 $entityType = $providerPhotogalleryPhoto->getContentTypeId();
867 $entityId = (int)$logFields[
'SOURCE_ID'];
873 $providerWiki =
new Wiki();
874 if (in_array($logFields[
'EVENT_ID'], $providerWiki->getEventId(),
true))
876 $entityType = $providerWiki->getContentTypeId();
877 $entityId = (int)$logFields[
'SOURCE_ID'];
884 if (in_array($logFields[
'EVENT_ID'], $providerListsItem->getEventId(),
true))
886 $entityType = $providerListsItem->getContentTypeId();
887 $entityId = (int)$logFields[
'SOURCE_ID'];
906 $xmlId =
'TASK_'.$entityId;
908 case CalendarEvent::CONTENT_TYPE_ID:
911 is_array($entityData)
912 && !empty($entityData[
'parentId'])
913 && !empty($entityData[
'dateFrom'])
914 && Loader::includeModule(
'calendar')
917 $calendarEntry = \CCalendarEvent::getEventForViewInterface($entityData[
'parentId'], [
918 'eventDate' => $entityData[
'dateFrom'],
919 'userId' =>
$USER->getId(),
924 $xmlId = \CCalendarEvent::getEventCommentXmlId($calendarEntry);
929 $xmlId =
'TOPIC_'.$entityId;
932 $xmlId =
'TIMEMAN_ENTRY_'.$entityId;
935 $xmlId =
'TIMEMAN_REPORT_'.$entityId;
938 $xmlId =
'PHOTO_'.$entityId;
941 $xmlId =
'IBLOCK_'.$entityId;
945 Loader::includeModule(
'bizproc')
949 $xmlId =
'WF_' . $workflowId;
972 || !Loader::includeModule(
'forum')
978 $res = MessageTable::getList([
982 'select' =>
array(
'ID',
'USE_SMILES')
997 if (!Loader::includeModule(
'forum'))
1002 $logEventsData = (isset(
$params[
'logEventsData']) && is_array(
$params[
'logEventsData']) ?
$params[
'logEventsData'] : []);
1004 $forumCommentEventIdList = $this->
getEventId();
1009 $commentEvent = \CSocNetLogTools::findLogCommentEventByLogEventID(
$logEventId);
1010 if (empty($commentEvent[
'EVENT_ID']))
1015 if (in_array($commentEvent[
'EVENT_ID'], $forumCommentEventIdList,
true))
1021 if (!empty($logIdList))
1023 $query = MessageTable::query();
1024 $query->setSelect([
'ID',
'POST_MESSAGE',
'SERVICE_DATA',
'SERVICE_TYPE' ]);
1026 $query->registerRuntimeField(
1028 'LOG_COMMENT', LogCommentTable::class, Join::on(
'this.ID',
'ref.SOURCE_ID'), [
'join_type' =>
'INNER' ]
1031 $query->whereIn(
'LOG_COMMENT.LOG_ID', $logIdList);
1053 return (self::$auxCommentsCache[
$messageId] ?? []);
1071 $res = TopicTable::getList([
1075 'select' => [
'XML_ID' ],
1078 ($topic =
$res->fetch())
1079 && !empty($topic[
'XML_ID'])
1082 if (preg_match(
'/^(TASK|EVENT|TOPIC|TIMEMAN_ENTRY|TIMEMAN_REPORT|PHOTO|IBLOCK)_(\d+)$/i', $topic[
'XML_ID'],
$matches))
1087 preg_match(
'/^(WF)_(.+)$/i', $topic[
'XML_ID'],
$matches)
1088 && Loader::includeModule(
'bizproc')
if($_SERVER $defaultValue['REQUEST_METHOD']==="GET" &&!empty($RestoreDefaults) && $bizprocPerms==="W" &&check_bitrix_sessid())
if(!Loader::includeModule('messageservice')) $provider
if(! $messageFields||!isset($messageFields['message_id'])||!isset($messageFields['status'])||!CModule::IncludeModule("messageservice")) $messageId
static getList(array $parameters=array())
static clear(string $text='')
getAdditionalData($params=array())
getAuxCommentCachedData(int $messageId=0)
getPermissions(array $post)
getAttachedDiskObjects($clone=false)
warmUpAuxCommentsStaticCache(array $params=[])
getSuffix($defaultValue='')
setSourceFields(array $fields)
setSourceAuxData($auxData)
checkAdditionalDataParams(&$params)
static getProvider($entityType)
setSourceDateTime(DateTime $datetime)
setSourceDiskObjects(array $files)
setSourceAttachedDiskObjects(array $diskAttachedObjects)
getEntityAttachedDiskObjects(array $params=[])
setSourceAuthorId($authorId=0)
setSourceOriginalText($text)
setLogEventId($eventId='')
setSourceDescription($description)
getDiskObjects($entityId, $clone=false)
static getWorkflowIntegerId($workflowId)
static getWorkflowByIntegerId($integerId)
static makePathFromTemplate($template, $arParams=array())
static clearAllTags($text)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
htmlspecialcharsback($str)
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)
if($inWords) echo htmlspecialcharsbx(Number2Word_Rus(roundEx($totalVatSum $params['CURRENCY']