%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/components/bitrix/socialnetwork.subscribe_list/ |
Current File : /home/bitrix/www/bitrix/components/bitrix/socialnetwork.subscribe_list/component.php |
<? if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die(); if (!CModule::IncludeModule("socialnetwork")) { ShowError(GetMessage("SONET_MODULE_NOT_INSTALL")); return; } $arSocNetFeaturesSettings = CSocNetAllowed::GetAllowedFeatures(); $arSocNetLogEvents = CSocNetAllowed::GetAllowedLogEvents(); $arResult["arSocNetAllowedSubscribeEntityTypesDesc"] = CSocNetAllowed::GetAllowedEntityTypesDesc(); $arResult["arSocNetAllowedSubscribeEntityTypes"] = CSocNetAllowed::GetAllowedEntityTypes(); require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/components/bitrix/socialnetwork.subscribe_list/include.php"); $arParams["USER_ID"] = IntVal($GLOBALS["USER"]->GetID()); $arParams["SET_NAV_CHAIN"] = ($arParams["SET_NAV_CHAIN"] == "N" ? "N" : "Y"); if (strLen($arParams["USER_VAR"]) <= 0) $arParams["USER_VAR"] = "user_id"; if (strLen($arParams["PAGE_VAR"]) <= 0) $arParams["PAGE_VAR"] = "page"; if (strLen($arParams["GROUP_VAR"]) <= 0) $arParams["GROUP_VAR"] = "group_id"; $arParams["PATH_TO_USER"] = trim($arParams["PATH_TO_USER"]); if (strlen($arParams["PATH_TO_USER"]) <= 0) $arParams["PATH_TO_USER"] = htmlspecialcharsbx($APPLICATION->GetCurPage()."?".$arParams["PAGE_VAR"]."=user&".$arParams["USER_VAR"]."=#user_id#"); $arParams["PATH_TO_GROUP"] = trim($arParams["PATH_TO_GROUP"]); if (strlen($arParams["PATH_TO_GROUP"]) <= 0) $arParams["PATH_TO_GROUP"] = htmlspecialcharsbx($APPLICATION->GetCurPage()."?".$arParams["PAGE_VAR"]."=group&".$arParams["GROUP_VAR"]."=#group_id#"); $arParams["PATH_TO_GROUP_SUBSCRIBE"] = trim($arParams["PATH_TO_GROUP_SUBSCRIBE"]); if (strlen($arParams["PATH_TO_GROUP_SUBSCRIBE"]) <= 0) $arParams["PATH_TO_GROUP_SUBSCRIBE"] = htmlspecialcharsbx($APPLICATION->GetCurPage()."?".$arParams["PAGE_VAR"]."=group_subscribe&".$arParams["GROUP_VAR"]."=#group_id#"); $arParams["PATH_TO_USER_SUBSCRIBE"] = trim($arParams["PATH_TO_USER_SUBSCRIBE"]); if (strlen($arParams["PATH_TO_USER_SUBSCRIBE"]) <= 0) $arParams["PATH_TO_USER_SUBSCRIBE"] = htmlspecialcharsbx($APPLICATION->GetCurPage()."?".$arParams["PAGE_VAR"]."=user_subscribe&".$arParams["USER_VAR"]."=#user_id#"); $arParams["ITEMS_COUNT"] = IntVal($arParams["ITEMS_COUNT"]); if ($arParams["ITEMS_COUNT"] <= 0) $arParams["ITEMS_COUNT"] = 30; $arParams["NAME_TEMPLATE"] = $arParams["NAME_TEMPLATE"] ? $arParams["NAME_TEMPLATE"] : CSite::GetNameFormat(); $arParams["NAME_TEMPLATE_WO_NOBR"] = str_replace( array("#NOBR#", "#/NOBR#"), array("", ""), $arParams["NAME_TEMPLATE"] ); $bUseLogin = $arParams["SHOW_LOGIN"] != "N" ? true : false; $arFilter["ENTITY_TYPE"] = Trim($arFilter["ENTITY_TYPE"]); if ($arFilter["ENTITY_TYPE"] != SONET_ENTITY_GROUP && $arFilter["ENTITY_TYPE"] != SONET_ENTITY_USER) $arFilter["ENTITY_TYPE"] = ""; if (StrLen($arParams["ENTITY_TYPE"]) <= 0) $arParams["ENTITY_TYPE"] = Trim($_REQUEST["flt_entity_type"]); if ($arFilter["ENTITY_TYPE"] != SONET_ENTITY_GROUP && $arFilter["ENTITY_TYPE"] != SONET_ENTITY_USER) $arFilter["ENTITY_TYPE"] = ""; if (!$GLOBALS["USER"]->IsAuthorized()) { $arResult["NEED_AUTH"] = "Y"; } else { if ($_SERVER["REQUEST_METHOD"]=="POST" && strlen($_POST["save"]) > 0 && check_bitrix_sessid()) { $errorMessage = ""; foreach($_POST as $key => $value) { if ($value == "I") continue; if ( strpos($key, "t_bx_sl_") === 0 || strpos($key, "t_cb_bx_sl_") === 0 || strpos($key, "v_bx_sl_") === 0 || strpos($key, "v_cb_bx_sl_") === 0 ) { if (preg_match("#(t_bx_sl|t_cb_bx_sl|v_bx_sl|v_cb_bx_sl)_([a-zA-Z0-9]+)_([0-9almy]+)_([a-zA-Z_]+)#i".BX_UTF_PCRE_MODIFIER, $key, $res) > 0) { $entity_type = $res[2]; if ($res[3] == "all") { $entity_id = 0; $entity_my = "N"; } elseif ($res[3] == "allmy") { $entity_id = 0; $entity_my = "Y"; } else { $entity_id = intval($res[3]); $entity_my = "N"; } if ($res[1] == "t_cb_bx_sl" || $res[1] == "v_cb_bx_sl") $entity_cb = "Y"; else $entity_cb = "N"; $event_id = $res[4]; if ($event_id == "cb_all") $event_id = "all"; $bFound = false; if (array_key_exists($event_id, $arSocNetLogEvents)) { if ( array_key_exists("ENTITIES", $arSocNetLogEvents[$event_id]) && array_key_exists($entity_type, $arSocNetLogEvents[$event_id]["ENTITIES"]) && array_key_exists("FULL_SET", $arSocNetLogEvents[$event_id]) ) { $arEventID = $arSocNetLogEvents[$event_id]["FULL_SET"]; $bFound = true; } } else { foreach($arSocNetFeaturesSettings as $arFeature) { if (array_key_exists("subscribe_events", $arFeature)) { foreach($arFeature["subscribe_events"] as $event_id_tmp => $arEvent) { if ($event_id_tmp == $event_id) { if ( array_key_exists("ENTITIES", $arEvent) && array_key_exists($entity_type, $arEvent["ENTITIES"]) && array_key_exists("FULL_SET", $arEvent) ) { $arEventID = $arEvent["FULL_SET"]; $bFound = true; } break; } } if ($bFound) break; } } } if (!$bFound) $arEventID = array($event_id); foreach($arEventID as $event_id) { $dbRes = CSocNetLogEvents::GetList( array(), array( "USER_ID" => $GLOBALS["USER"]->GetID(), "ENTITY_TYPE" => $entity_type, "ENTITY_ID" => $entity_id, "ENTITY_CB" => $entity_cb, "ENTITY_MY" => $entity_my, "EVENT_ID" => $event_id, "SITE_ID" => ( $entity_cb != "Y" && array_key_exists("HAS_SITE_ID", $arResult["arSocNetAllowedSubscribeEntityTypesDesc"][$entity_type]) && $arResult["arSocNetAllowedSubscribeEntityTypesDesc"][$entity_type]["HAS_SITE_ID"] == "Y" && defined("SITE_ID") && strlen(SITE_ID) > 0 ? SITE_ID : false ) ) ); $arFields = array( "USER_ID" => $GLOBALS["USER"]->GetID(), "ENTITY_TYPE" => $entity_type, "ENTITY_ID" => $entity_id, "ENTITY_CB" => $entity_cb, "ENTITY_MY" => $entity_my, "EVENT_ID" => $event_id, "SITE_ID" => ( $entity_cb != "Y" && array_key_exists("HAS_SITE_ID", $arResult["arSocNetAllowedSubscribeEntityTypesDesc"][$entity_type]) && $arResult["arSocNetAllowedSubscribeEntityTypesDesc"][$entity_type]["HAS_SITE_ID"] == "Y" && defined("SITE_ID") && strlen(SITE_ID) > 0 ? SITE_ID : false ) ); if ( strpos($key, "t_bx_sl_") === 0 || strpos($key, "t_cb_bx_sl_") === 0 ) $arFields["TRANSPORT"] = $value; elseif ( strpos($key, "v_bx_sl_") === 0 || strpos($key, "v_cb_bx_sl_") === 0 ) $arFields["VISIBLE"] = $value; if ($arRes = $dbRes->Fetch()) { $idTmp = CSocNetLogEvents::Update( $arRes["ID"], $arFields ); } else { if (isset($arFields["TRANSPORT"])) $arFields["VISIBLE"] = "I"; elseif (isset($arFields["VISIBLE"])) $arFields["TRANSPORT"] = "I"; $idTmp = CSocNetLogEvents::Add( $arFields ); } if (!$idTmp) { if ($e = $APPLICATION->GetException()) $errorMessage .= $e->GetString(); break; } } if (strlen($errorMessage) > 0) break; } } } if (strlen($errorMessage) > 0) { $arResult["ErrorMessage"] = $errorMessage; } else { LocalRedirect($APPLICATION->GetCurPage()); } } // get my entities of each types $arEntities = array(); foreach ($arResult["arSocNetAllowedSubscribeEntityTypes"] as $entity_type) { if ( is_array($arResult["arSocNetAllowedSubscribeEntityTypesDesc"][$entity_type]) && array_key_exists("TITLE_LIST", $arResult["arSocNetAllowedSubscribeEntityTypesDesc"][$entity_type]) && strlen($arResult["arSocNetAllowedSubscribeEntityTypesDesc"][$entity_type]["TITLE_LIST"]) > 0 ) $arEntities[$entity_type]["ALL"]["TITLE_LIST"] = $arResult["arSocNetAllowedSubscribeEntityTypesDesc"][$entity_type]["TITLE_LIST"]; if ( array_key_exists($entity_type, $arResult["arSocNetAllowedSubscribeEntityTypesDesc"]) && array_key_exists("HAS_MY", $arResult["arSocNetAllowedSubscribeEntityTypesDesc"][$entity_type]) && $arResult["arSocNetAllowedSubscribeEntityTypesDesc"][$entity_type]["HAS_MY"] == "Y" && array_key_exists("CLASS_MY", $arResult["arSocNetAllowedSubscribeEntityTypesDesc"][$entity_type]) && array_key_exists("METHOD_MY", $arResult["arSocNetAllowedSubscribeEntityTypesDesc"][$entity_type]) && strlen($arResult["arSocNetAllowedSubscribeEntityTypesDesc"][$entity_type]["CLASS_MY"]) > 0 && strlen($arResult["arSocNetAllowedSubscribeEntityTypesDesc"][$entity_type]["METHOD_MY"]) > 0 && method_exists($arResult["arSocNetAllowedSubscribeEntityTypesDesc"][$entity_type]["CLASS_MY"], $arResult["arSocNetAllowedSubscribeEntityTypesDesc"][$entity_type]["METHOD_MY"]) ) { if ( array_key_exists("TITLE_LIST_MY", $arResult["arSocNetAllowedSubscribeEntityTypesDesc"][$entity_type]) && strlen($arResult["arSocNetAllowedSubscribeEntityTypesDesc"][$entity_type]["TITLE_LIST_MY"]) > 0 ) { $arEntities[$entity_type]["ALL_MY"]["TITLE_LIST"] = $arResult["arSocNetAllowedSubscribeEntityTypesDesc"][$entity_type]["TITLE_LIST_MY"]; } $arEntities[$entity_type]["ALL_MY"]["ITEMS"] = call_user_func(array($arResult["arSocNetAllowedSubscribeEntityTypesDesc"][$entity_type]["CLASS_MY"], $arResult["arSocNetAllowedSubscribeEntityTypesDesc"][$entity_type]["METHOD_MY"])); } } $arResult["Urls"]["ViewAll"] = htmlspecialcharsbx($APPLICATION->GetCurPageParam("", array("flt_entity_type"))); if (CBXFeatures::IsFeatureEnabled("Workgroups")) $arResult["Urls"]["ViewGroups"] = htmlspecialcharsbx($APPLICATION->GetCurPageParam("flt_entity_type=".SONET_ENTITY_GROUP, array("flt_entity_type"))); else $arResult["Urls"]["ViewGroups"] = ""; $arResult["Urls"]["ViewUsers"] = htmlspecialcharsbx($APPLICATION->GetCurPageParam("flt_entity_type=".SONET_ENTITY_USER, array("flt_entity_type"))); if ($arParams["SET_TITLE"] == "Y") $APPLICATION->SetTitle(GetMessage("SONET_C30_PAGE_TITLE")); if ($arParams["SET_NAV_CHAIN"] != "N") $APPLICATION->AddChainItem(GetMessage("SONET_C30_PAGE_TITLE")); $arResult["Events"] = false; $arResult["EventsNew"] = array(); $arFilter = array("USER_ID" => $GLOBALS["USER"]->GetID()); if (StrLen($arParams["ENTITY_TYPE"]) > 0) $arFilter["ENTITY_TYPE"] = $arParams["ENTITY_TYPE"]; if ($arParams["ENTITY_TYPE"] == SONET_ENTITY_GROUP) $arFilter["GROUP_SITE_ID"] = SITE_ID; if (StrLen($arParams["ENTITY_TYPE"]) <= 0) { $arFilter["COMMON_GROUP_SITE_ID"] = SITE_ID; $arFilter["SITE_ID"] = array(SITE_ID, false); } $dbEvents = CSocNetLogEvents::GetList( array("ENTITY_TYPE" => "ASC", "ENTITY_ID" => "ASC"), $arFilter ); $arEntityID = array(); while ($arEvents = $dbEvents->GetNext()) { if ( $arEvents["EVENT_ID"] != "all" && !array_key_exists($arEvents["EVENT_ID"], $arSocNetLogEvents) && ( !array_key_exists($arEvents["EVENT_ID"], $arSocNetFeaturesSettings) || !array_key_exists("subscribe_events", $arSocNetFeaturesSettings[$arEvents["EVENT_ID"]]) || !is_array($arSocNetFeaturesSettings[$arEvents["EVENT_ID"]]["subscribe_events"]) || count($arSocNetFeaturesSettings[$arEvents["EVENT_ID"]]["subscribe_events"]) <= 0 ) ) continue; if ($arResult["Events"] == false) $arResult["Events"] = array(); if ($arResult["EventsNew"] == false) $arResult["EventsNew"] = array(); $arrayKey = $arEvents["ENTITY_TYPE"]."_".$arEvents["ENTITY_ID"]; $arrayKeyNew = $arEvents["ENTITY_ID"]; if (in_array($arEvents["ENTITY_TYPE"], array(SONET_ENTITY_GROUP, SONET_ENTITY_USER))) { if ($arEvents["EVENT_ID"] != "all" && !array_key_exists($arrayKey, $arResult["Events"])) { $arResult["Events"][$arrayKey] = array( "ENTITY_TYPE" => $arEvents["ENTITY_TYPE"], "ENTITY_ID" => $arEvents["ENTITY_ID"], ); if ( $arEvents["ENTITY_TYPE"] == SONET_ENTITY_GROUP && intval($arEvents["ENTITY_ID"]) > 0 ) { $arGroup = CSocNetGroup::GetByID($arEvents["ENTITY_ID"]); $path2Entity = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_GROUP"], array("group_id" => $arEvents["ENTITY_ID"])); $arResult["Events"][$arrayKey]["Group"] = $arGroup; $arResult["Events"][$arrayKey]["GroupUrl"] = $path2Entity; $arResult["Events"][$arrayKey]["EditUrl"] = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_GROUP_SUBSCRIBE"], array("group_id" => $arEvents["ENTITY_ID"])); } elseif (intval($arEvents["ENTITY_ID"]) > 0) { $dbUser = CUser::GetByID($arEvents["ENTITY_ID"]); $arUser = $dbUser->GetNext(); $path2Entity = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_USER"], array("user_id" => $arEvents["ENTITY_ID"])); $arResult["Events"][$arrayKey]["User"] = $arUser; $arResult["Events"][$arrayKey]["User"]["NAME_FORMATTED"] = CUser::FormatName($arParams['NAME_TEMPLATE'], $arUser, $bUseLogin); $arResult["Events"][$arrayKey]["UserUrl"] = $path2Entity; $arResult["Events"][$arrayKey]["EditUrl"] = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_USER_SUBSCRIBE"], array("user_id" => $arEvents["ENTITY_ID"])); } $arResult["Events"][$arrayKey]["EditUrl"] .= (strpos($arResult["Events"][$arrayKey]["EditUrl"], "?") !== false ? "&" : "?")."backurl=".$APPLICATION->GetCurPage(); } if ($arEvents["EVENT_ID"] != "all") $arResult["Events"][$arrayKey]["Items"][] = array( "EVENT_ID" => $arEvents["EVENT_ID"], "SITE_ID" => $arEvents["SITE_ID"], "MAIL_EVENT" => $arEvents["MAIL_EVENT"], "TRANSPORT" => $arEvents["TRANSPORT"], "VISIBLE" => $arEvents["VISIBLE"], ); } if (in_array($arEvents["ENTITY_TYPE"], $arResult["arSocNetAllowedSubscribeEntityTypes"])) { if ($arEvents["ENTITY_ID"] != 0) { if ($arEvents["ENTITY_CB"] == "Y") $key = $arEvents["ENTITY_TYPE"]."_CB"; elseif ( array_key_exists("ALL_MY", $arEntities[$arEvents["ENTITY_TYPE"]]) && array_key_exists("ITEMS", $arEntities[$arEvents["ENTITY_TYPE"]]["ALL_MY"]) && in_array($arEvents["ENTITY_ID"], $arEntities[$arEvents["ENTITY_TYPE"]]["ALL_MY"]["ITEMS"]) ) $key = $arEvents["ENTITY_TYPE"]."_My"; else $key = $arEvents["ENTITY_TYPE"]; } elseif($arEvents["ENTITY_MY"] == "Y") $key = $arEvents["ENTITY_TYPE"]."_MyCommon"; else $key = $arEvents["ENTITY_TYPE"]."_Common"; } if (!array_key_exists($key, $arResult["EventsNew"])) $arResult["EventsNew"][$key] = array(); // initialize entity description if (!array_key_exists($arrayKeyNew, $arResult["EventsNew"][$key])) { $arResult["EventsNew"][$key][$arrayKeyNew] = array( "ENTITY_TYPE" => $arEvents["ENTITY_TYPE"], "ENTITY_ID" => $arEvents["ENTITY_ID"], ); $arEntityTmp = call_user_func( array( $arResult["arSocNetAllowedSubscribeEntityTypesDesc"][$arEvents["ENTITY_TYPE"]]["CLASS_DESC_GET"], $arResult["arSocNetAllowedSubscribeEntityTypesDesc"][$arEvents["ENTITY_TYPE"]]["METHOD_DESC_GET"] ), $arEvents["ENTITY_ID"] ); $path2Entity = CComponentEngine::MakePathFromTemplate( $arParams[$arResult["arSocNetAllowedSubscribeEntityTypesDesc"][$arEvents["ENTITY_TYPE"]]["URL_PARAM_KEY"]], array( $arResult["arSocNetAllowedSubscribeEntityTypesDesc"][$arEvents["ENTITY_TYPE"]]["URL_PATTERN"] => $arEvents["ENTITY_ID"] ) ); $arResult["EventsNew"][$key][$arrayKeyNew]["ENTITY_DESC"] = $arEntityTmp; $arResult["EventsNew"][$key][$arrayKeyNew]["ENTITY_URL"] = $path2Entity; } $items_key = "Items"; $arResult["EventsNew"][$key][$arrayKeyNew][$items_key][] = array( "EVENT_ID" => $arEvents["EVENT_ID"], "SITE_ID" => $arEvents["SITE_ID"], "TRANSPORT" => $arEvents["TRANSPORT"], "VISIBLE" => $arEvents["VISIBLE"], ); if (!in_array(array("KEY" => $key, "ENTITY_ID" => $arEvents["ENTITY_ID"], "SITE_ID" => $arEvents["SITE_ID"]), $arEntityID)) $arEntityID[] = array("KEY" => $key, "ENTITY_ID" => $arEvents["ENTITY_ID"], "SITE_ID" => $arEvents["SITE_ID"]); } $arResult["Transport"] = array( "N" => GetMessage("SONET_C30_TRANSPORT_NONE"), "M" => GetMessage("SONET_C30_TRANSPORT_MAIL"), // "D" => GetMessage("SONET_C30_TRANSPORT_DIGEST"), // "E" => GetMessage("SONET_C30_TRANSPORT_DIGEST_WEEK") ); if (CBXFeatures::IsFeatureEnabled("WebMessenger")) $arResult["Transport"]["X"] = GetMessage("SONET_C30_TRANSPORT_XMPP"); $arResult["Visible"] = array( "Y" => GetMessage("SONET_C30_VISIBLE_VISUAL"), "N" => GetMessage("SONET_C30_VISIBLE_HIDDEN"), ); if (!function_exists("__SSL_cmp")) { function __SSL_cmp($a, $b) { return ($a < $b ? -1 : ($a > $b ? 1 : 0)); } } foreach ($arResult["arSocNetAllowedSubscribeEntityTypes"] as $entity_type) { if ( array_key_exists($entity_type, $arResult["EventsNew"]) && !empty($arResult["EventsNew"][$entity_type]) ) uksort($arResult["EventsNew"][$entity_type], "__SSL_cmp"); if ( array_key_exists($entity_type."_My", $arResult["EventsNew"]) && !empty($arResult["EventsNew"][$entity_type."_My"]) ) uksort($arResult["EventsNew"][$entity_type."_My"], "__SSL_cmp"); } } $arParams["NAME_TEMPLATE"] = $arParams["NAME_TEMPLATE_WO_NOBR"]; $arResult["ENTITY_TYPES"] = array(); foreach ($arSocNetLogEvents as $event_id_tmp => $arEventTmp) { if ( array_key_exists("HIDDEN", $arEventTmp) && $arEventTmp["HIDDEN"] ) continue; if ( array_key_exists("ENTITIES", $arEventTmp) && is_array($arEventTmp["ENTITIES"]) ) foreach ($arEventTmp["ENTITIES"] as $event_type_tmp => $arEntityTypeTmp) $arResult["ENTITY_TYPES"][$event_type_tmp][] = $event_id_tmp; } foreach ($arSocNetFeaturesSettings as $feature_tmp => $arFeatureTmp) { if ( !array_key_exists("subscribe_events", $arFeatureTmp) || !$arFeatureTmp["subscribe_events"] ) continue; if ($feature_tmp == "files") continue; foreach ($arFeatureTmp["subscribe_events"] as $event_id_tmp => $arEventTmp) { if ( array_key_exists("HIDDEN", $arEventTmp) && $arEventTmp["HIDDEN"] ) continue; if ( array_key_exists("ENTITIES", $arEventTmp) && is_array($arEventTmp["ENTITIES"]) ) foreach ($arEventTmp["ENTITIES"] as $event_type_tmp => $arEntityTypeTmp) $arResult["ENTITY_TYPES"][$event_type_tmp][] = $event_id_tmp; } } $this->IncludeComponentTemplate(); ?>