%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();
?>