Поддержка серверов

CCrmLiveFeedComponent::processCrmBlogPostRights: метод Битрикс

Постоянная ссылка: http://bxapi.ru/src/?id=369416

//    CCrmLiveFeedComponent::processCrmBlogPostRights()
//    /bitrix/modules/crm/classes/general/livefeed.php:7174

    public 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);
                }
            }
        }
    }

Блог разработчика

9 августа 2016 ResizeImageGet и простой водяной знак налету

Сегодня поговорим о том как проще всего воткнуть водяной знак на картинки в Битрикс. Например, на все изображения каталога.

21 июля 2016 Добавление вкладки в CRM коробки Битрикс24

В этом посте я покажу, как легко и просто добавить вкладку в сущность CRM. И не просто добавить, а вывести там свой контент.

21 июля 2016 Как просто обращаться из коробки Битрикс24 на сайт на базе Битрикс

К примеру вам хочется внутренним скриптом дернуть с сайта-магазина информацию, которая там, в свою очередь, закрыта некоторыми правами. Например, админскими. Можно конечно мутить свой REST, или иной формат общения, но проще всего воспользоваться штатным инструментом:

Текст сообщения*
Загрузить изображение