static function processCrmBlogPostRights($logId, $logFields = array(), $blogPostFields = array(), $action = 'new')
{
global $USER;
$logId = intval($logId);
if (
$logId > 0
&& Main\Loader::includeModule('socialnetwork')
)
{
$bOldCrm = ($logFields['ENTITY_TYPE'] == CCrmLiveFeedEntity::Contact);
$bNewCrm = false;
$bindings = array();
$communications = array();
$sonetRights = array();
$logRightsToAdd = array();
$rsLogRights = CSocNetLogRights::GetList(
array(),
array(
'LOG_ID' => $logId
)
);
while($arLogRights = $rsLogRights->fetch())
{
$sonetRights[] = $arLogRights['GROUP_CODE'];
}
foreach ($sonetRights as $rightCode)
{
if (preg_match('/^CRMCONTACT(\d+)$/', $rightCode, $matches))
{
$entityId = intval($matches[1]);
$bNewCrm = true;
$bindings = self::mergeBindings($bindings, array(array(
'OWNER_ID' => $entityId,
'OWNER_TYPE_ID' => CCrmOwnerType::Contact
)));
$rsUser = \Bitrix\Main\UserTable::getList(array(
'order' => array(),
'filter' => array(
'UF_USER_CRM_ENTITY' => 'C_'.$entityId,
'=EXTERNAL_AUTH_ID' => 'email'
),
'select' => array('ID', 'EMAIL')
));
if ($arUser = $rsUser->fetch())
{
$communications = self::mergeCommunications($communications, array(array(
'ID' => 0,
'TYPE' => 'EMAIL',
'VALUE' => $arUser['EMAIL'],
'ENTITY_ID' => $entityId,
'ENTITY_TYPE_ID' => CCrmOwnerType::Contact
)));
}
}
elseif (preg_match('/^U(\d+)$/', $rightCode, $matches))
{
$rsUser = \Bitrix\Main\UserTable::getList(array(
'order' => array(),
'filter' => array(
'ID' => intval($matches[1]),
'=EXTERNAL_AUTH_ID' => 'email'
),
'select' => array('ID', 'EMAIL', 'UF_USER_CRM_ENTITY')
));
if (
($arUser = $rsUser->fetch())
&& !empty($arUser["UF_USER_CRM_ENTITY"])
&& preg_match('/^C_(\d+)$/', $arUser["UF_USER_CRM_ENTITY"], $matches2)
)
{
$bNewCrm = true;
$entityId = intval($matches2[1]);
$bindings = self::mergeBindings($bindings, array(array(
'OWNER_ID' => $entityId,
'OWNER_TYPE_ID' => CCrmOwnerType::Contact
)));
$communications = self::mergeCommunications($communications, array(array(
'ID' => 0,
'TYPE' => 'EMAIL',
'VALUE' => $arUser['EMAIL'],
'ENTITY_ID' => $entityId,
'ENTITY_TYPE_ID' => CCrmOwnerType::Contact
)));
$newRight = CCrmLiveFeedEntity::Contact.$entityId;
if (!in_array($newRight, $sonetRights))
{
$logRightsToAdd[] = $newRight;
}
}
}
}
if ($bNewCrm && !$bOldCrm)
{
CSocNetLog::Update($logId, array(
"ENTITY_TYPE" => CCrmLiveFeedEntity::Contact,
"ENTITY_ID" => $entityId
));
}
if (
$action === 'new'
&& $bNewCrm
)
{
CSocNetLogRights::DeleteByLogID($logId);
CSocNetLogRights::Add($logId, array_merge($sonetRights, $logRightsToAdd));
}
elseif (
$action === 'edit'
&& ($bNewCrm || $bOldCrm)
)
{
CSocNetLogRights::DeleteByLogID($logId);
CSocNetLogRights::Add($logId, array_merge($sonetRights, $logRightsToAdd));
if ($bOldCrm && !$bNewCrm)
{
$arActivityIdToDelete = array();
$rsActivity = CCrmActivity::GetList(
array(),
array("ASSOCIATED_ENTITY_ID" => $logId),
false,
false,
array("ID")
);
while($arActivity = $rsActivity->fetch())
{
$arActivityIdToDelete[] = $arActivity["ID"];
}
foreach($arActivityIdToDelete as $activityId)
{
CCrmActivity::Delete($activityId, false);
}
CSocNetLog::Update($logId, array(
"ENTITY_TYPE" => SONET_ENTITY_USER,
"ENTITY_ID" => $logFields['USER_ID']
));
}
}
elseif (
$action == 'share'
&& ($bNewCrm || $bOldCrm)
)
{
CSocNetLogRights::DeleteByLogID($logId);
CSocNetLogRights::Add($logId, array_merge($sonetRights, $logRightsToAdd));
}
if ($bNewCrm && !$bOldCrm)
{
\Bitrix\Crm\Activity\Provider\Livefeed::addActivity(array(
"TYPE" => "BLOG_POST",
"COMMUNICATIONS" => $communications,
"BINDINGS" => $bindings,
"TITLE" => ($blogPostFields['MICRO'] === 'Y' ? '' : $blogPostFields['TITLE']),
"MESSAGE" => $blogPostFields['DETAIL_TEXT'],
"USER_ID" => (isset($blogPostFields['AUTHOR_ID']) ? $blogPostFields['AUTHOR_ID'] : $USER->getId()),
"ENTITY_ID" => $logId
));
CCrmLiveFeed::CounterIncrement(array(
"USER_ID" => (is_array($logFields["USER_ID"]) && isset($logFields["USER_ID"]) ? $logFields["USER_ID"] : $USER->getId()),
"ENTITY_TYPE" => CCrmLiveFeedEntity::Contact,
"ENTITY_ID" => $entityId,
"LOG_ID" => $logId,
"EVENT_ID" => (is_array($logFields["EVENT_ID"]) && isset($logFields["EVENT_ID"]) ? $logFields["EVENT_ID"] : 'blog_post')
));
}
elseif ($bOldCrm && $bNewCrm)
{
$rsActivity = CCrmActivity::GetList(
array(),
array(
'ASSOCIATED_ENTITY_ID' => $logId
),
false,
array('nTopCount' => 1)
);
if ($arActivity = $rsActivity->fetch())
{
CCrmActivity::SaveBindings($arActivity['ID'], self::mergeBindings($bindings, CCrmActivity::GetBindings($arActivity['ID'])), false, false);
CCrmActivity::SaveCommunications($arActivity['ID'], self::mergeCommunications($communications, CCrmActivity::GetCommunications($arActivity['ID'])), $arActivity, true, false);
}
}
}
}