%PDF- %PDF-
| Direktori : /home/bitrix/www/bitrix/components/bitrix/event_list/ |
| Current File : //home/bitrix/www/bitrix/components/bitrix/event_list/component.php |
<?php
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)
die();
/**
* Bitrix vars
* @global CUser $USER
* @global CMain $APPLICATION
* @var array $arParams
* @var array $arResult
* @var CBitrixComponent $this
*/
if(!$USER->CanDoOperation('view_event_log'))
$APPLICATION->AuthForm(GetMessage("ACCESS_DENIED"));
/** @var CEventMain[] $arModuleObjects */
$arModuleObjects = array();
$arAllFilter = array();
$currentTemplateName = $this->getTemplateName();
if ($currentTemplateName == "grid")
{
$arResult["GRID_ID"] = "event_list_grid";
$arResult["ELEMENTS_ROWS"] = array();
$grid = new CGridOptions($arResult["GRID_ID"]);
$nav = $grid->GetNavParams();
$arParams["PAGE_NUM"] = $nav["nPageSize"];
}
foreach(GetModuleEvents("main", "OnEventLogGetAuditHandlers", true) as $arEvent)
{
$ModuleEvent = ExecuteModuleEventEx($arEvent);
$arModuleObjects[] = $ModuleEvent;
$arAllFilter = $arAllFilter + $ModuleEvent->GetFilter();
}
if (is_array($arParams["FILTER"]))
{
foreach($arParams["FILTER"] as $key => $val)
{
$arResult["ActiveFeatures"][$val] = $arAllFilter[$val];
}
}
if (is_array($arResult["ActiveFeatures"]) && count($arResult["ActiveFeatures"]) > 0)
{
$arResult["NO_ACTIVE_FEATURES"] = false;
if (!isset($_REQUEST["flt_event_id"]))
{
$arParams["EVENT_ID"] = CUserOptions::GetOption("main", "~event_list");
$flt_event_id = (empty($arParams["EVENT_ID"])) ? $arParams["FILTER"] : $arParams["EVENT_ID"];
}
else
{
$arResult["flt_event_id"] = $_REQUEST["flt_event_id"];
if (array_key_exists("flt_event_id_all", $_REQUEST) && $_REQUEST["flt_event_id_all"] == "Y")
{
$arParams["EVENT_ID"] = "";
$flt_event_id = $arParams["FILTER"];
if($USER->IsAuthorized() && check_bitrix_sessid())
CUserOptions::DeleteOption("main", "~event_list");
}
else
{
$flt_event_id = $_REQUEST["flt_event_id"]; // checked events
foreach($flt_event_id as $key => $val)
$flt_event_id[$key] = htmlspecialcharsbx($val);
$arParams["EVENT_ID"] = $flt_event_id;
if($USER->IsAuthorized() && check_bitrix_sessid())
CUserOptions::SetOption("main", "~event_list", $arParams["EVENT_ID"]);
}
}
$arObjectTypes = array(
"USER_AUTHORIZE" => "[USER_AUTHORIZE] ".GetMessage("MAIN_EVENTLOG_USER_AUTHORIZE"),
"USER_DELETE" => "[USER_DELETE] ".GetMessage("MAIN_EVENTLOG_USER_DELETE"),
"USER_INFO" => "[USER_INFO] ".GetMessage("MAIN_EVENTLOG_USER_INFO"),
"USER_LOGIN" => "[USER_LOGIN] ".GetMessage("MAIN_EVENTLOG_USER_LOGIN"),
"USER_LOGINBYHASH" => "[USER_LOGINBYHASH] ".GetMessage("MAIN_EVENTLOG_USER_LOGINBYHASH_FAILED"),
"USER_LOGOUT" => "[USER_LOGOUT] ".GetMessage("MAIN_EVENTLOG_USER_LOGOUT"),
"USER_PASSWORD_CHANGED" => "[USER_PASSWORD_CHANGED] ".GetMessage("MAIN_EVENTLOG_USER_PASSWORD_CHANGED"),
"USER_REGISTER" => "[USER_REGISTER] ".GetMessage("MAIN_EVENTLOG_USER_REGISTER"),
"USER_REGISTER_FAIL" => "[USER_REGISTER_FAIL] ".GetMessage("MAIN_EVENTLOG_USER_REGISTER_FAIL"),
"USER_GROUP_CHANGED" => "[USER_GROUP_CHANGED] ".GetMessage("MAIN_EVENTLOG_GROUP"),
"GROUP_POLICY_CHANGED" => "[GROUP_POLICY_CHANGED] ".GetMessage("MAIN_EVENTLOG_GROUP_POLICY"),
"MODULE_RIGHTS_CHANGED" => "[MODULE_RIGHTS_CHANGED] ".GetMessage("MAIN_EVENTLOG_MODULE"),
"FILE_PERMISSION_CHANGED" => "[FILE_PERMISSION_CHANGED] ".GetMessage("MAIN_EVENTLOG_FILE"),
"TASK_CHANGED" => "[TASK_CHANGED] ".GetMessage("MAIN_EVENTLOG_TASK"),
"MP_MODULE_INSTALLED" => "[MP_MODULE_INSTALLED] ".GetMessage("MAIN_EVENTLOG_MP_MODULE_INSTALLED"),
"MP_MODULE_UNINSTALLED" => "[MP_MODULE_UNINSTALLED] ".GetMessage("MAIN_EVENTLOG_MP_MODULE_UNINSTALLED"),
"MP_MODULE_DELETED" => "[MP_MODULE_DELETED] ".GetMessage("MAIN_EVENTLOG_MP_MODULE_DELETED"),
"MP_MODULE_DOWNLOADED" => "[MP_MODULE_DOWNLOADED] ".GetMessage("MAIN_EVENTLOG_MP_MODULE_DOWNLOADED"),
);
$arFilter["MODULE_ITEM"] = array(); //filter for GetList
if (\Bitrix\Main\ModuleManager::isModuleInstalled("bitrix24"))
{
$arFilter["MODULE_ITEM"][] = array(
"AUDIT_TYPE_ID" => "USER_AUTHORIZE"
);
}
else
{
foreach($arModuleObjects as $key => $val)
{
$arObjectTypes = array_merge($arObjectTypes, $val->GetAuditTypes());
$ar = $val->GetFilter();
$filters = array_keys($ar);
$var = array_intersect($filters, $flt_event_id);
if ($var)
{
if(isset($ar["IBLOCK"]))
{
//iblock has more complex structure because logs are kept for individual blocks
$var = $filters;
}
$arFilter["MODULE_ITEM"] = array_merge($arFilter["MODULE_ITEM"], $val->GetFilterSQL($var));
}
}
}
//USER
if (is_array($_REQUEST["flt_created_by_id"]))
$_REQUEST["flt_created_by_id"] = $_REQUEST["flt_created_by_id"][0];
$find_user_id = "";
if (intval($_REQUEST["flt_created_by_id"]) > 0)
{
$find_user_id = $_REQUEST["flt_created_by_id"];
}
else
{
if (CModule::IncludeModule("socialnetwork"))
{
$arFoundUsers = CSocNetUser::SearchUser($_REQUEST["flt_created_by_id"], false);
if (is_array($arFoundUsers) && count($arFoundUsers) > 0)
$find_user_id = key($arFoundUsers);
}
}
// for date
if (
array_key_exists("flt_date_datesel", $_REQUEST)
&& strlen($_REQUEST["flt_date_datesel"]) > 0
)
{
$_REQUEST["flt_date_datesel"] = htmlspecialcharsbx($_REQUEST["flt_date_datesel"]);
switch($_REQUEST["flt_date_datesel"])
{
case "today":
$arParams["LOG_DATE_FROM"] = ConvertTimeStamp(MakeTimeStamp(date("d.m.Y 00:00:00"), "DD.MM.YYYY HH:MI:SS"), "FULL");
$arParams["LOG_DATE_TO"] = ConvertTimeStamp(time(), "FULL");
break;
case "yesterday":
$arParams["LOG_DATE_FROM"] = ConvertTimeStamp(MakeTimeStamp(date("d.m.Y 00:00:00", time() - 86400), "DD.MM.YYYY HH:MI:SS"), "FULL");
$arParams["LOG_DATE_TO"] = ConvertTimeStamp(MakeTimeStamp(date("d.m.Y 23:59:59", time() - 86400), "DD.MM.YYYY HH:MI:SS"), "FULL");
break;
case "week":
$day = date("w");
if($day == 0)
$day = 7;
$arParams["LOG_DATE_FROM"] = ConvertTimeStamp(time()-($day-1)*86400, "FULL");
$arParams["LOG_DATE_TO"] = ConvertTimeStamp(time()+(7-$day)*86400, "FULL");
break;
case "week_ago":
$day = date("w");
if($day == 0)
$day = 7;
$arParams["LOG_DATE_FROM"] = ConvertTimeStamp(time()-($day-1+7)*86400, "FULL");
$arParams["LOG_DATE_TO"] = ConvertTimeStamp(time()-($day)*86400, "FULL");
break;
case "month":
$arParams["LOG_DATE_FROM"] = ConvertTimeStamp(mktime(0, 0, 0, date("n"), 1), "FULL");
$arParams["LOG_DATE_TO"] = ConvertTimeStamp(mktime(0, 0, 0, date("n")+1, 0), "FULL");
break;
case "month_ago":
$arParams["LOG_DATE_FROM"] = ConvertTimeStamp(mktime(0, 0, 0, date("n")-1, 1), "FULL");
$arParams["LOG_DATE_TO"] = ConvertTimeStamp(mktime(0, 0, 0, date("n"), 0), "FULL");
break;
case "days":
$arParams["LOG_DATE_FROM"] = ConvertTimeStamp(time() - intval($_REQUEST["flt_date_days"])*86400, "FULL");
$arParams["LOG_DATE_TO"] = "";
break;
case "exact":
$day = ConvertDateTime($_REQUEST["flt_date_from"], "DD.MM.YYYY");
$arParams["LOG_DATE_FROM"] = ConvertTimeStamp(MakeTimeStamp($day." 00:00:00", "DD.MM.YYYY HH:MI:SS"), "FULL");
$arParams["LOG_DATE_TO"] = ConvertTimeStamp(MakeTimeStamp($day." 23:59:59", "DD.MM.YYYY HH:MI:SS"), "FULL");
break;
case "after":
$arParams["LOG_DATE_FROM"] = $_REQUEST["flt_date_from"];
$arParams["LOG_DATE_TO"] = "";
break;
case "before":
$arParams["LOG_DATE_FROM"] = "";
$arParams["LOG_DATE_TO"] = $_REQUEST["flt_date_to"];
break;
case "interval":
$dayFrom = ConvertDateTime($_REQUEST["flt_date_from"], "DD.MM.YYYY");
$dayTo = ConvertDateTime($_REQUEST["flt_date_to"], "DD.MM.YYYY");
$arParams["LOG_DATE_FROM"] = ConvertTimeStamp(MakeTimeStamp($dayFrom." 00:00:00", "DD.MM.YYYY HH:MI:SS"), "FULL");
$arParams["LOG_DATE_TO"] = ConvertTimeStamp(MakeTimeStamp($dayTo." 23:59:59", "DD.MM.YYYY HH:MI:SS"), "FULL");
break;
}
}
elseif (array_key_exists("flt_date_datesel", $_REQUEST))
{
$arParams["LOG_DATE_FROM"] = "";
$arParams["LOG_DATE_TO"] = "";
}
else
{
if (array_key_exists("flt_date_from", $_REQUEST))
{
$_REQUEST["flt_date_from"] = htmlspecialcharsbx($_REQUEST["flt_date_from"]);
$arParams["LOG_DATE_FROM"] = trim($_REQUEST["flt_date_from"]);
}
if (array_key_exists("flt_date_to", $_REQUEST))
{
$_REQUEST["flt_date_to"] = htmlspecialcharsbx($_REQUEST["flt_date_to"]);
$arParams["LOG_DATE_TO"] = trim($_REQUEST["flt_date_to"]);
}
}
//=============End date
if (
array_key_exists("flt_ip", $_REQUEST)
&& strlen($_REQUEST["flt_ip"]) > 0
)
{
$ip = htmlspecialcharsbx($_REQUEST["flt_ip"]);
$arParams["IP"] = trim($ip);
}
function CheckFilter()
{
if(strlen($_REQUEST["flt_date_from"])>0)
{
if(!CheckDateTime($_REQUEST["flt_date_from"], CSite::GetDateFormat("FULL")))
return false;
}
if(strlen($_REQUEST["flt_date_to"])>0)
{
if(!CheckDateTime($_REQUEST["flt_date_to"], CSite::GetDateFormat("FULL")))
return false;
}
return true;
}
if(CheckFilter())
{
if ($arFilter["MODULE_ITEM"] != "")
$arEventFilter["=MODULE_ITEM"] = $arFilter["MODULE_ITEM"];
if ($arParams["LOG_DATE_FROM"] != "")
$arEventFilter["TIMESTAMP_X_1"] = $arParams["LOG_DATE_FROM"];
if ($arParams["LOG_DATE_TO"] != "")
$arEventFilter["TIMESTAMP_X_2"] = $arParams["LOG_DATE_TO"];
if ($arParams["IP"] != "")
$arEventFilter["REMOTE_ADDR"] = $arParams["IP"];
$arEventFilter["USER_ID"] = ($find != '' && $find_type == "user_id" ? $find : $find_user_id);
$nameFormat = CSite::GetNameFormat(false);
$arUsersTmp = array();
$arNavParams = array("nPageSize"=>$arParams["PAGE_NUM"], "bShowAll"=>false);
$arSort = array('TIMESTAMP_X' => 'DESC');
if ($currentTemplateName == "grid")
{
$arSort = $grid->GetSorting(array('sort' => array('TIMESTAMP_X' => 'DESC')));
$arSort = $arSort['sort'];
}
$arResult['SORT'] = $arSort;
$results = CEventLog::GetList($arResult['SORT'], $arEventFilter, $arNavParams);
$results->NavStart($arNavParams); //page navigation
$arResult["NAV"] = $results;
while($row = $results->NavNext())
{
if (!isset($arUsersTmp[$row['USER_ID']]))
{
$arUserInfo = array();
$rsUser = CUser::GetList(($by=""), ($ord=""),
array("ID_EQUAL_EXACT" => intval($row['USER_ID'])),
array("FIELDS" => array('ID', 'NAME', 'LAST_NAME', 'SECOND_NAME', 'LOGIN', 'EMAIL', 'PERSONAL_PHOTO', 'EXTERNAL_AUTH_ID'))
);
if($arUser = $rsUser->GetNext())
{
if (in_array($arUser["EXTERNAL_AUTH_ID"], array("bot", "email", "controller", "replica", "imconnector")))
{
continue;
}
$arUserInfo["ID"] = $row['USER_ID'];
$arUserInfo["FULL_NAME"] = CUser::FormatName($nameFormat, $arUser, true, false);
$arUserInfo['avatar'] = CFile::ResizeImageGet(
$arUser["PERSONAL_PHOTO"],
array("width"=>30, "height"=>30),
BX_RESIZE_IMAGE_EXACT,
false
);
$arUsersTmp[$row['USER_ID']] = $arUserInfo;
}
}
else
{
$arUserInfo = $arUsersTmp[$row['USER_ID']];
}
$dateFormated = FormatDateFromDB($row["TIMESTAMP_X"], CSite::GetDateFormat('SHORT'));
$time = FormatDateFromDB($row["TIMESTAMP_X"], CSite::GetTimeFormat());
foreach($arModuleObjects as $key => $val)
{
if (isset($arObjectTypes[$row['AUDIT_TYPE_ID']]))
{
$res = $val->GetEventInfo($row, $arParams, $arUserInfo, $arResult["ActiveFeatures"]);
$eventName = preg_replace("/^\\[.*?\\]\\s+/", "", $arObjectTypes[$row['AUDIT_TYPE_ID']]);
if (in_array($row['AUDIT_TYPE_ID'], array("PAGE_EDIT", "PAGE_ADD", "PAGE_DELETE")))
{
$path = unserialize($row["DESCRIPTION"]);
$path = $path["path"];
if ($path)
{
$eventName.= ": ".$path;
}
}
//for grid template
if ($currentTemplateName == "grid")
{
$userPath = CComponentEngine::MakePathFromTemplate($arParams["USER_PATH"], array("user_id" => $arUserInfo["ID"], "SITE_ID" => SITE_DIR));
$userVal = "<a href=\"".$userPath."\">".$arUserInfo["FULL_NAME"]."</a>";
$arResult["ELEMENTS_ROWS"][] = array("data" => array(
"ID" => $row["ID"],
"IP" => $row["REMOTE_ADDR"],
"DATE_TIME" => FormatDateFromDB($row["TIMESTAMP_X"], CSite::GetDateFormat()),
"USER_NAME" => $userVal,
"EVENT_NAME" => $eventName
));
}
else //for default template
{
$res['user'] = array(
"name" => $arUserInfo["FULL_NAME"],
"id" => $arUserInfo["ID"],
"avatar" => $arUserInfo["avatar"]["src"]
);
if (empty($res["eventType"]))
{
$res["eventType"] = $eventName;
}
$arResult['EVENT'][$dateFormated][] = $res;
}
break;
}
}
}
}
}
else
{
$arResult["NO_ACTIVE_FEATURES"] = true;
}
$this->IncludeComponentTemplate();