<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
if (!CModule::IncludeModule("forum")):
	ShowError(GetMessage("F_NO_MODULE"));
	return 0;
endif;
/********************************************************************
				Input params
********************************************************************/
/***************** BASE ********************************************/
	$arParams["SEND_MAIL"] = (in_array($arParams["SEND_MAIL"], array("A", "E", "U", "Y")) ? $arParams["SEND_MAIL"] : "E");
	$arParams["SEND_ICQ"] = (in_array($arParams["SEND_ICQ"], array("A", "E", "U", "Y")) ? $arParams["SEND_ICQ"] : "A");
	$arParams["SHOW_USER_STATUS"] = ($arParams["SHOW_USER_STATUS"] == "Y" ? "Y" : "N");
/***************** Sorting *****************************************/
	InitSorting($GLOBALS["APPLICATION"]->GetCurPage()."?PAGE_NAME=user_list");
	global $by, $order;
/***************** URL *********************************************/
	$URL_NAME_DEFAULT = array(
			"message_send" => "PAGE_NAME=message_send&TYPE=#TYPE#&UID=#UID#",
			"pm_edit" => "PAGE_NAME=pm_edit&FID=#FID#&MID=#MID#&UID=#UID#&mode=#mode#",
			"profile_view" => "PAGE_NAME=profile_view&UID=#UID#",
			"user_post" => "PAGE_NAME=user_post&UID=#UID#&mode=#mode#");
	foreach ($URL_NAME_DEFAULT as $URL => $URL_VALUE)
	{
		if (strLen(trim($arParams["URL_TEMPLATES_".strToUpper($URL)])) <= 0)
			$arParams["URL_TEMPLATES_".strToUpper($URL)] = $APPLICATION->GetCurPage()."?".$URL_VALUE;
		$arParams["~URL_TEMPLATES_".strToUpper($URL)] = $arParams["URL_TEMPLATES_".strToUpper($URL)];
		$arParams["URL_TEMPLATES_".strToUpper($URL)] = htmlspecialcharsbx($arParams["~URL_TEMPLATES_".strToUpper($URL)]);
	}
/***************** ADDITIONAL **************************************/
	// Page elements
	$arParams["USERS_PER_PAGE"] = (intVal($arParams["USERS_PER_PAGE"]) > 0 ? intVal($arParams["USERS_PER_PAGE"]) : 20);
	// Data and data-time format
	$arParams["DATE_FORMAT"] = trim(empty($arParams["DATE_FORMAT"]) ? $DB->DateFormatToPHP(CSite::GetDateFormat("SHORT")) : $arParams["DATE_FORMAT"]);
	$arParams["DATE_TIME_FORMAT"] = trim(empty($arParams["DATE_TIME_FORMAT"]) ? $DB->DateFormatToPHP(CSite::GetDateFormat("FULL")) : $arParams["DATE_TIME_FORMAT"]);
	$arParams["NAME_TEMPLATE"] = (!empty($arParams["NAME_TEMPLATE"]) ? $arParams["NAME_TEMPLATE"] : false);
	$arParams["PAGE_NAVIGATION_TEMPLATE"] = trim($arParams["PAGE_NAVIGATION_TEMPLATE"]);
	$arParams["WORD_LENGTH"] = intVal($arParams["WORD_LENGTH"]);
/***************** STANDART ****************************************/
	$arParams["SET_TITLE"] = ($arParams["SET_TITLE"] == "N" ? "N" : "Y");
	$arParams["SET_NAVIGATION"] = ($arParams["SET_NAVIGATION"] == "N" ? "N" : "Y");
	// $arParams["DISPLAY_PANEL"] = ($arParams["DISPLAY_PANEL"] == "Y" ? "Y" : "N");
	if ($arParams["CACHE_TYPE"] == "Y" || ($arParams["CACHE_TYPE"] == "A" && COption::GetOptionString("main", "component_cache_on", "Y") == "Y"))
		$arParams["CACHE_TIME"] = intval($arParams["CACHE_TIME"]);
	else
		$arParams["CACHE_TIME"] = 0;
/********************************************************************
				/Input params
********************************************************************/

/********************************************************************
				Default params
********************************************************************/
$arResult["SHOW_RESULT"] = "N";
$arResult["SHOW_ICQ"] = (COption::GetOptionString("forum", "SHOW_ICQ_CONTACT", "N") != "Y") ? "N" : ($arParams["SEND_ICQ"] > "A" ? "Y" : "N");
$arResult["SHOW_PM"] = $USER->IsAuthorized() ? "Y" : "N";
$arResult["SHOW_MAIL"] = $arParams["SHOW_MAIL"] = (($arParams["SEND_MAIL"] <= "A" || ($arParams["SEND_MAIL"] <= "E" && !$GLOBALS['USER']->IsAuthorized())) ? "N" : "Y");
$arResult["SHOW_VOTES"] = COption::GetOptionString("forum", "SHOW_VOTES", "Y")=="Y" ? "Y" : "N";
$arResult["USERS"] = array();
/*************** Options and default settings **********************/
$parser = new forumTextParser(false, false, false, "light");
$parser->MaxStringLen = $arParams["WORD_LENGTH"];
/******************************************************************/
$strError = "";
$cache = new CPHPCache();
$cache_path_main = str_replace(array(":", "//"), "/", "/".SITE_ID."/".$componentName."/");
/********************************************************************
				/Default params
********************************************************************/

/********************************************************************
				Data
********************************************************************/
$cache_id = "forum_forums_listex_".(($tzOffset = CTimeZone::GetOffset()) <> 0 ? "_".$tzOffset : "");
$cache_path = $cache_path_main."forums";
if ($arParams["CACHE_TIME"] > 0 && $cache->InitCache($arParams["CACHE_TIME"], $cache_id, $cache_path))
{
	$res = $cache->GetVars();
	if (is_array($res["arForums"]))
		$arForums = CForumCacheManager::Expand($res["arForums"]);
}
if (!is_array($arForums) || empty($arForums))
{
	$db_res = CForumNew::GetListEx();
	while ($res = $db_res->GetNext())
		$arForums[$res["ID"]] = array("ID" => $res["ID"], "NAME" => $res["NAME"]);

	if ($arParams["CACHE_TIME"] > 0):
		$cache->StartDataCache($arParams["CACHE_TIME"], $cache_id, $cache_path);
		$cache->EndDataCache(array("arForums" => CForumCacheManager::Compress($arForums)));
	endif;
}
/******************************************************************/
$arFilter = array("SHOW_ABC" => "");
if (!$USER->IsAdmin())
	$arFilter["ACTIVE"] = "Y";
if (strLen($_REQUEST["del_filter"]) <= 0 && strLen($_REQUEST["set_filter"]) > 0)
{
	if (strlen($_REQUEST["date_last_visit1"])>0 && !$GLOBALS["DB"]->IsDate($_REQUEST["date_last_visit1"]))
		$strError .= GetMessage("LU_INCORRECT_LAST_MESSAGE_DATE");
	elseif (strlen($_REQUEST["date_last_visit2"])>0 && !$GLOBALS["DB"]->IsDate($_REQUEST["date_last_visit2"]))
		$strError .= GetMessage("LU_INCORRECT_LAST_MESSAGE_DATE");
	if (empty($strError))
	{
		if (intVal($_REQUEST["date_last_visit1_DAYS_TO_BACK"]) > 0)
			$_REQUEST["date_last_visit1"] = GetTime(time()-86400*intval($_REQUEST["date_last_visit1_DAYS_TO_BACK"]));
		if (strlen($_REQUEST["date_last_visit1"])>0)
			$arFilter[">=LAST_VISIT"] = $_REQUEST["date_last_visit1"];
		if (strlen($_REQUEST["date_last_visit2"])>0)
			$arFilter["<=LAST_VISIT"] = $_REQUEST["date_last_visit2"];
	}
	$_REQUEST["user_name"] = trim($_REQUEST["user_name"]);
	if (!empty($_REQUEST["user_name"]))
		$arFilter["SHOW_ABC"] = $_REQUEST["user_name"];
	if ($_REQUEST["avatar"] == "Y")
		$arFilter[">=AVATAR"] = 1;
	if (($_REQUEST["allow_post"] == "Y" || $_REQUEST["allow_post"] == "N") && $GLOBALS["APPLICATION"]->GetGroupRight("forum") >= "W")
		$arFilter["ALLOW_POST"] = $_REQUEST["allow_post"];
/************** For custom ****************************************/
	$arResult["filter"]["date_last_visit"] = CalendarPeriod("date_last_visit1", $_REQUEST["date_last_visit1"], "date_last_visit2",
		$_REQUEST["date_last_visit2"], "form1", "Y", "", "");
	$arResult["filter"]["~user_name"] = $_REQUEST["user_name"];
	$arResult["filter"]["user_name"] = htmlspecialcharsbx($_REQUEST["user_name"]);
/************** For custom/****************************************/
}
elseif (strLen($_REQUEST["del_filter"]) > 0)
{
	unset($_REQUEST["user_name"]);
	unset($_REQUEST["date_last_visit2"]);
	unset($_REQUEST["date_last_visit1"]);
	unset($_REQUEST["avatar"]);
	unset($_REQUEST["sort"]);
/************** For custom ****************************************/
	unset($GLOBALS["date_last_visit1_DAYS_TO_BACK"]);
	$arResult["filter"] = array();
	$arResult["filter"]["date_last_visit"] = CalendarPeriod("date_last_visit1", "", "date_last_visit2", "", "form1", "Y", "", "");
/************** For custom/****************************************/
}
if (!$by && !is_set($_REQUEST, "sort"))
{
	$by = "NUM_POSTS"; $order = "DESC";
	$_REQUEST["sort"] = "NUM_POSTS";
}
elseif (!$by && is_set($_REQUEST, "sort"))
{
	$by = $_REQUEST["sort"];
	$order = ($_REQUEST["sort"] == "SHOW_ABC" ? "ASC" : "DESC");
}
/******************************************************************/
$arResult["ERROR_MESSAGE"] = $strError;
CPageOption::SetOptionString("main", "nav_page_in_session", "N");
$db_res = CForumUser::GetList(array($by => $order), $arFilter,
	array("bDescPageNumbering" => false,
		"nPageSize"=>$arParams["USERS_PER_PAGE"],
		"bShowAll" => false,
		"sNameTemplate" => $arParams["NAME_TEMPLATE"]));
$arParams["SHOW_USER_STATUS"] = "Y";
if($db_res)
{
	$db_res->NavStart($arParams["USERS_PER_PAGE"], false);
	$arResult["NAV_STRING"] = $db_res->GetPageNavStringEx($navComponentObject, GetMessage("LU_TITLE_USER"), $arParams["PAGE_NAVIGATION_TEMPLATE"]);
	$arResult["NAV_RESULT"] = $db_res;
	$arResult["SHOW_RESULT"] = "Y";
	$arResult["SortingEx"]["SHOW_ABC"] = SortingEx("SHOW_ABC", $APPLICATION->GetCurPageParam());
	$arResult["SortingEx"]["NUM_POSTS"] = SortingEx("NUM_POSTS", $APPLICATION->GetCurPageParam());
	$arResult["SortingEx"]["POINTS"] = SortingEx("POINTS", $APPLICATION->GetCurPageParam());
	$arResult["SortingEx"]["DATE_REGISTER"] = SortingEx("DATE_REGISTER", $APPLICATION->GetCurPageParam());
	$arResult["SortingEx"]["LAST_VISIT"] = SortingEx("LAST_VISIT", $APPLICATION->GetCurPageParam());

	if ($res = $db_res->GetNext())
	{
		do
		{
			$arUserGroup = array();
			$UserPerm = array();
			$res["AUTHOR_STATUS"] = ""; $res["AUTHOR_STATUS_CODE"] = "";
			// geting max permisson of User from all forums
			if ($arParams["SHOW_USER_STATUS"] == "Y")
			{
				$arUserGroup = CUser::GetUserGroup($res["USER_ID"]);
				sort($arUserGroup);
				foreach ($arForums as $forum)
					$UserPerm[] = CForumNew::GetUserPermission($forum["ID"], $arUserGroup);
				rsort($UserPerm);
				list($res["AUTHOR_STATUS_CODE"], $res["AUTHOR_STATUS"]) = ForumGetUserForumStatus($res["USER_ID"], $UserPerm[0]);
			}
			$res["UserStatus"] = $res["AUTHOR_STATUS"];
			$res["URL"] = array(
				"AUTHOR" => CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_PROFILE_VIEW"], array("UID" => $res["USER_ID"])),
				"~AUTHOR" => CComponentEngine::MakePathFromTemplate($arParams["~URL_TEMPLATES_PROFILE_VIEW"], array("UID" => $res["USER_ID"])),
				"POSTS" => CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_USER_POST"], array("UID" => $res["USER_ID"], "mode" => "all")),
				"~POSTS" => CComponentEngine::MakePathFromTemplate($arParams["~URL_TEMPLATES_USER_POST"], array("UID" => $res["USER_ID"], "mode" => "all")));

			$res["profile_view"] = $res["URL"]["AUTHOR"];
			$res["user_post"] = $res["URL"]["POSTS"];
			$res["pm_edit"] = CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_PM_EDIT"], array("FID" => 0, "MID" => 0, "mode" => "new", "UID" => $res["USER_ID"]));
			$res["mail"] =  CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_MESSAGE_SEND"], array("TYPE" => "mail", "UID" => $res["USER_ID"]));
			$res["DATE_REG"] = !empty($res["DATE_REGISTER_SHORT"]) ? CForumFormat::DateFormat($arParams["DATE_FORMAT"], MakeTimeStamp($res["DATE_REGISTER_SHORT"], CSite::GetDateFormat())) : "";
			$res["LAST_VISIT"] = !empty($res["LAST_VISIT"]) ? CForumFormat::DateFormat($arParams["DATE_TIME_FORMAT"], MakeTimeStamp($res["LAST_VISIT"], CSite::GetDateFormat())) : "";
			$res["icq"] =  CComponentEngine::MakePathFromTemplate($arParams["URL_TEMPLATES_MESSAGE_SEND"], array("TYPE" => "icq", "UID" => $res["USER_ID"]));

			if (strLen($res["AVATAR"])>0)
			{
				$res["~AVATAR"] = array("ID" => $res["AVATAR"], "FILE" => CFile::GetFileArray($res["AVATAR"]));
				$res["~AVATAR"]["HTML"] = CFile::ShowImage($res["~AVATAR"]["FILE"],
					COption::GetOptionString("forum", "avatar_max_width", 90),
					COption::GetOptionString("forum", "avatar_max_height", 90),
					"border=\"0\"", "", true);
				$res["~AVATAR"]["HTML_SMALL"] = CFile::ShowImage($res["~AVATAR"]["FILE"], 20, 20, "border=0 alt=\"\"", "", true);
				$res["AVATAR_ARRAY"] = $res["~AVATAR"];
				$res["AVATAR"] = $res["~AVATAR"]["HTML_SMALL"];
			}
			$res["SHOW_ABC"] = $parser->wrap_long_words($res["SHOW_ABC"]);
			$arResult["USERS"][] = $res;
		}while($res = $db_res->GetNext());
	}
}
/********************************************************************
				/Data
********************************************************************/
$this->IncludeComponentTemplate();
if ($arParams["SET_NAVIGATION"] != "N")
	$APPLICATION->AddChainItem(GetMessage("LU_TITLE_USER"));
if ($arParams["SET_TITLE"] != "N")
	$APPLICATION->SetTitle(GetMessage("LU_TITLE_USER"));
/******************************************************************/
?>