В старых версиях продукта мы писали уведомления в живую ленту о новых файлах в группах соцсети. Это было неудобно при большом числе загружаемых файлов, и многие пользователи жаловались на захламленность живой ленты. Мы это восприняли как недоработку, и в текущей версии функционал убрали.
Оказалось, что ряд компаний использовали уведомления в живой ленте в рабочих процессах внутри компании. Мы будем возвращать этот функционал, но в другом виде: уведомления будут идти в виде нотификаторов в мессенджер и они будут гибко настраиваться.
Для тех, кого этот вариант не устраивает, предлагаю решение, которое не изменяя ядро продукта вернёт старое поведение уведомлений.
Для этого надо добавить один обработчик в файл /bitrix/php_interface/init.php.
Если этого файла нет, создайте его со следующим содержанием:
В результате после загрузки файла в группу увидим примерно следующее:
Оказалось, что ряд компаний использовали уведомления в живой ленте в рабочих процессах внутри компании. Мы будем возвращать этот функционал, но в другом виде: уведомления будут идти в виде нотификаторов в мессенджер и они будут гибко настраиваться.
Для тех, кого этот вариант не устраивает, предлагаю решение, которое не изменяя ядро продукта вернёт старое поведение уведомлений.
Для этого надо добавить один обработчик в файл /bitrix/php_interface/init.php.
Если этого файла нет, создайте его со следующим содержанием:
<? AddEventHandler("webdav", "OnFileAdd", "CustomSocnetLogFileAdd"); function CustomSocnetLogFileAdd($arParams, $file=null) { if (!CModule::IncludeModule('socialnetwork') || !CModule::IncludeModule('webdav')) return; global $USER; $obDavEventHandler = CWebDavSocNetEvent::GetRuntime(); if ($file === null) // webdav 11.0.0 { $file = array( "status" => "success", "hidden" => isset($arParams["ELEMENT"]["hidden"]) ? $arParams["ELEMENT"]["hidden"] : false, "dropped" => isset($arParams["ELEMENT"]["dropped"]) ? $arParams["ELEMENT"]["dropped"] : false, "title" => $arParams["ELEMENT"]["name"], "id" => $arParams["ELEMENT"]["id"] ); $arWDAttributes = $arParams["OBJECT"]["ATTRIBUTES"]; } else { $arWDAttributes = $arParams['ATTRIBUTES']; } if ($file['dropped']) // don't notificate about attached files return; if ( isset($arParams['ELEMENT']['element']['element_array']['BP_PUBLISHED']) && $arParams['ELEMENT']['element']['element_array']['BP_PUBLISHED'] == 'N' ) return; $bIsGroup = isset($arWDAttributes['group_id']); $bIsUser = isset($arWDAttributes['user_id']); if ($bIsUser) return false; if ($bIsGroup) CSocNetGroup::SetLastActivity(intval($arWDAttributes['group_id']), false); $sAuthorName = GetMessage("SONET_LOG_GUEST"); $sAuthorUrl = ""; if ($USER->IsAuthorized()) { $sAuthorName = trim($USER->GetFormattedName(false)); $sAuthorName = (empty($sAuthorName) ? $USER->GetLogin() : $sAuthorName); $sAuthorUrl = CComponentEngine::MakePathFromTemplate($obDavEventHandler->arPath["PATH_TO_USER"], array("USER_ID" => $USER->GetID())); } if ($file["status"] == "success" && !$file['hidden']) { if ($bIsGroup) { $url = $obDavEventHandler->arPath["PATH_TO_GROUP_FILES_ELEMENT"]; if (IsModuleInstalled("extranet") && strlen($obDavEventHandler->arPath["SEF_FOLDER"]) > 0 && strpos($url, $obDavEventHandler->arPath["SEF_FOLDER"]) === 0) $url = str_replace($obDavEventHandler->arPath["SEF_FOLDER"], "#GROUPS_PATH#", $url); $arFields = array( "ENTITY_TYPE" => SONET_ENTITY_GROUP, "EVENT_ID" => ENTITY_FILES_SOCNET_EVENT_ID, "ENTITY_ID" => intval($arWDAttributes['group_id']) ); } else { $url = $obDavEventHandler->arPath["PATH_TO_FILES_ELEMENT"]; $arFields = array( "ENTITY_TYPE" => SONET_SUBSCRIBE_ENTITY_FILES, "EVENT_ID" => ENTITY_FILES_COMMON_EVENT_ID, "ENTITY_ID" => $arParams['OBJECT']['IBLOCK_ID'] ); } $urlParams = array( "SECTION_ID" => isset($arParams["OBJECT"]["SECTION_ID"])? $arParams["OBJECT"]["SECTION_ID"]: $arParams["section_id"], "ELEMENT_ID" => $file["id"], "element_id" => $file["id"], "ID" => $file["id"] ); if ($bIsGroup) $urlParams['group_id'] = $urlParams['GROUP_ID'] = intval($arWDAttributes['group_id']); if ((strpos($url, "#PATH#") !== false) && ($obDavEventHandler->object != null)) $urlParams['PATH'] = $obDavEventHandler->object->GetObjectPath($obDavEventHandler->object->GetObject(array("element_id" => $file['id']))); $arFields = array_merge($arFields, array( "=LOG_DATE" => $GLOBALS["DB"]->CurrentTimeFunction(), "TITLE_TEMPLATE" => str_replace("#AUTHOR_NAME#", $sAuthorName, GetMessage("SONET_FILES_LOG")), "TITLE" => $file["title"], "URL" => str_replace(array('///','//'), '/', CComponentEngine::MakePathFromTemplate($url, $urlParams)), "MODULE_ID" => false, "CALLBACK_FUNC" => false, "SOURCE_ID" => $file["id"], "RATING_TYPE_ID" => "IBLOCK_ELEMENT", "RATING_ENTITY_ID" => intval($arParams["ELEMENT"]["id"]) )); if (intval($obDavEventHandler->forumID) > 0) $arFields["PARAMS"] = "forum_id=".intval($obDavEventHandler->forumID); if ($USER->IsAuthorized()) $arFields["USER_ID"] = $USER->GetID(); if (IsModuleInstalled("extranet")) $serverName = "#SERVER_NAME#"; else $serverName = (defined("SITE_SERVER_NAME") && strLen(SITE_SERVER_NAME) > 0) ? SITE_SERVER_NAME : COption::GetOptionString("main", "server_name"); $arFields["MESSAGE"] = str_replace(array("#AUTHOR_NAME#", "#AUTHOR_URL#"), array(htmlspecialcharsEx($sAuthorName), $sAuthorUrl), ($USER->IsAuthorized() ? GetMessage("SONET_LOG_TEMPLATE_AUTHOR") : GetMessage("SONET_LOG_TEMPLATE_GUEST")).""); $arFields["TEXT_MESSAGE"] = str_replace(array("#URL#", "#TITLE#"), array("http://".$serverName.$arFields["URL"], $arFields["TITLE"]), GetMessage("SONET_FILES_LOG_TEXT")); $logID = CSocNetLog::Add($arFields, false); if (intval($logID) > 0) { CSocNetLog::Update($logID, array("TMP_ID" => $logID)); if (isset($arParams['ELEMENT']['id'])) { $obDavEventHandler->SocnetLogUpdateRights($arParams['ELEMENT']['id'], $arParams['OBJECT']['IBLOCK_ID'] /*$obDavEventHandler->IBlockID*/, $obDavEventHandler->event_id, false); } CSocNetLog::SendEvent($logID, "SONET_NEW_EVENT", $logID); } else { global $APPLICATION; if($ex = $APPLICATION->GetException()) { $strError = $ex->GetString(); } } } } ?> |
В результате после загрузки файла в группу увидим примерно следующее: