Your IP : 172.28.240.42


Current Path : /var/www/html/clients/amz.e-nk.ru/bitrix/modules/main/classes/general/
Upload File :
Current File : /var/www/html/clients/amz.e-nk.ru/bitrix/modules/main/classes/general/favorites.php

<?
IncludeModuleLangFile(__FILE__);

class CFavorites
{
	function err_mess()
	{
		return "<br>Class: CFavorites<br>File: ".__FILE__;
	}

	function GetByID($ID)
	{
		global $DB;
		$ID = intval($ID);
		if($ID<=0)
			return false;
		return ($DB->Query("
			SELECT F.*,
				".$DB->DateToCharFunction("F.TIMESTAMP_X")." as TIMESTAMP_X,
				".$DB->DateToCharFunction("F.DATE_CREATE")." as	DATE_CREATE
			FROM b_favorite F
			WHERE ID=".$ID,
			false, "File: ".__FILE__."<br>Line: ".__LINE__));
	}

	function GetList($aSort=array(), $arFilter=Array())
	{
		$err_mess = (CFavorites::err_mess())."<br>Function: GetList<br>Line: ";
		global $DB, $USER;
		$arSqlSearch = Array();
		$strSqlSearch = "";
		if (is_array($arFilter))
		{
			$filter_keys = array_keys($arFilter);
			for ($i=0; $i<count($filter_keys); $i++)
			{
				$val = $arFilter[$filter_keys[$i]];
				if (strlen($val)<=0 || $val=="NOT_REF") continue;
				switch(strtoupper($filter_keys[$i]))
				{
				case "ID":
					$arSqlSearch[] = GetFilterQuery("F.ID",$val,"N");
					break;
				case "USER_ID":
					$arSqlSearch[] = "F.USER_ID = ".intval($val);
					break;
				case "MENU_FOR_USER":
					$arSqlSearch[] = "(F.USER_ID=".intval($val)." OR F.COMMON='Y')";
					break;
				case "COMMON":
					$arSqlSearch[] = "F.COMMON = '".$DB->ForSql($val,1)."'";
					break;
				case "LANGUAGE_ID":
					$arSqlSearch[] = "F.LANGUAGE_ID = '".$DB->ForSql($val,2)."'";
					break;
				case "DATE1":
					$arSqlSearch[] = "F.TIMESTAMP_X >= FROM_UNIXTIME('".MkDateTime(FmtDate($val,"D.M.Y"),"d.m.Y")."')";
					break;
				case "DATE2":
					$arSqlSearch[] = "F.TIMESTAMP_X <= FROM_UNIXTIME('".MkDateTime(FmtDate($val,"D.M.Y")." 23:59:59","d.m.Y")."')";
					break;
				case "MODIFIED":
					$arSqlSearch[] = GetFilterQuery("UM.ID, UM.LOGIN, UM.LAST_NAME, UM.NAME", $val);
					break;
				case "MODIFIED_ID":
					$arSqlSearch[] = "F.MODIFIED_BY = ".intval($val);
					break;
				case "CREATED":
					$arSqlSearch[] = GetFilterQuery("UC.ID, UC.LOGIN, UC.LAST_NAME, UC.NAME", $val);
					break;
				case "CREATED_ID":
					$arSqlSearch[] = "F.CREATED_BY = ".intval($val);
					break;
				case "KEYWORDS":
					$arSqlSearch[] = GetFilterQuery("F.COMMENTS", $val);
					break;
				case "NAME":
					$arSqlSearch[] = GetFilterQuery("F.NAME", $val);
					break;
				case "URL":
					$arSqlSearch[] = GetFilterQuery("F.URL", $val);
					break;
				case "MODULE_ID":
					$arSqlSearch[] = "F.MODULE_ID='".$DB->ForSql($val,50)."'";
					break;
				}
			}
		}

		$sOrder = "";
		foreach($aSort as $key=>$val)
		{
			$ord = (strtoupper($val) <> "ASC"? "DESC":"ASC");
			switch (strtoupper($key))
			{
				case "ID":		$sOrder .= ", F.ID ".$ord; break;
				case "LANGUAGE_ID":	$sOrder .= ", F.LANGUAGE_ID ".$ord; break;
				case "COMMON":	$sOrder .= ", F.COMMON ".$ord; break;
				case "USER_ID":	$sOrder .= ", F.USER_ID ".$ord; break;
				case "TIMESTAMP_X":	$sOrder .= ", F.TIMESTAMP_X ".$ord; break;
				case "MODIFIED_BY":	$sOrder .= ", F.MODIFIED_BY ".$ord; break;
				case "NAME":	$sOrder .= ", F.NAME ".$ord; break;
				case "URL":	$sOrder .= ", F.URL ".$ord; break;
				case "SORT":		$sOrder .= ", F.C_SORT ".$ord; break;
				case "MODULE_ID":		$sOrder .= ", F.MODULE_ID ".$ord; break;
			}
		}
		if (strlen($sOrder)<=0)
			$sOrder = "F.ID DESC";
		$strSqlOrder = " ORDER BY ".TrimEx($sOrder,",");

		$strSqlSearch = GetFilterSqlSearch($arSqlSearch);
		$strSql = "
			SELECT
				F.ID, F.C_SORT, F.NAME, F.URL, F.MODIFIED_BY, F.CREATED_BY, F.MODULE_ID, F.LANGUAGE_ID,
				F.COMMENTS, F.COMMON, F.USER_ID, UM.LOGIN AS M_LOGIN, UC.LOGIN as C_LOGIN, U.LOGIN,
				".$DB->DateToCharFunction("F.TIMESTAMP_X")."	TIMESTAMP_X,
				".$DB->DateToCharFunction("F.DATE_CREATE")."	DATE_CREATE,
				".$DB->Concat($DB->IsNull("UM.NAME", "''"), "' '", $DB->IsNull("UM.LAST_NAME", "''"))." as M_USER_NAME,
				".$DB->Concat($DB->IsNull("UC.NAME", "''"), "' '", $DB->IsNull("UC.LAST_NAME", "''"))." as C_USER_NAME,
				".$DB->Concat($DB->IsNull("U.NAME", "''"), "' '", $DB->IsNull("U.LAST_NAME", "''"))." as USER_NAME
			FROM
				b_favorite F
				LEFT JOIN b_user UM ON (UM.ID = F.MODIFIED_BY)
				LEFT JOIN b_user UC ON (UC.ID = F.CREATED_BY)
				LEFT JOIN b_user U ON (U.ID = F.USER_ID)
			WHERE
			".$strSqlSearch."
			".$strSqlOrder;

		//echo "<pre>".$strSql."</pre>";
		$res = $DB->Query($strSql, false, $err_mess.__LINE__);
		return $res;
	}

	function CheckFields($arFields) // ïðîâåðêà íà íàëè÷èå îáÿçàòåëüíûõ ïîëåé
	{
		$aMsg = array();
		if(is_set($arFields, "NAME") && trim($arFields["NAME"])=="")
			$aMsg[] = array("id"=>"NAME", "text"=>GetMessage("fav_general_err_name"));
		if(is_set($arFields, "URL") && trim($arFields["URL"])=="")
			$aMsg[] = array("id"=>"URL", "text"=>GetMessage("fav_general_err_url"));
		if(is_set($arFields, "USER_ID"))
		{
			if(intval($arFields["USER_ID"]) > 0)
			{
				$res = CUser::GetByID(intval($arFields["USER_ID"]));
				if(!$res->Fetch())
					$aMsg[] = array("id"=>"USER_ID", "text"=>GetMessage("fav_general_err_user"));
			}
			elseif($arFields["COMMON"] == "N")
				$aMsg[] = array("id"=>"USER_ID", "text"=>GetMessage("fav_general_err_user1"));
		}
		if(is_set($arFields, "LANGUAGE_ID"))
		{
			if($arFields["LANGUAGE_ID"] <> "")
			{
				$res = CLanguage::GetByID($arFields["LANGUAGE_ID"]);
				if(!$res->Fetch())
					$aMsg[] = array("id"=>"LANGUAGE_ID", "text"=>GetMessage("fav_general_err_lang"));
			}
			else
				$aMsg[] = array("id"=>"LANGUAGE_ID", "text"=>GetMessage("fav_general_err_lang1"));
		}

		if(!empty($aMsg))
		{
			$e = new CAdminException($aMsg);
			$GLOBALS["APPLICATION"]->ThrowException($e);
			return false;
		}
		return true;
	}

	//Addition
	function Add($arFields)
	{
		global $DB;

		if(!CFavorites::CheckFields($arFields))
			return false;

		$ID = $DB->Add("b_favorite", $arFields);
		return $ID;
	}

	//Update
	function Update($ID, $arFields)
	{
		global $DB;
		$ID = intval($ID);

		if(!CFavorites::CheckFields($arFields))
			return false;

		$strUpdate = $DB->PrepareUpdate("b_favorite", $arFields);
		if($strUpdate!="")
		{
			$strSql = "UPDATE b_favorite SET ".$strUpdate." WHERE ID=".$ID;
			if(!$DB->Query($strSql))
				return false;
		}
		return true;
	}

	// delete by ID
	function Delete($ID)
	{
		global $DB;
		return ($DB->Query("DELETE FROM b_favorite WHERE ID='".intval($ID)."'", false, "File: ".__FILE__."<br>Line: ".__LINE__));
	}

	//*****************************
	// Events
	//*****************************

	//user deletion event
	function OnUserDelete($user_id)
	{
		global $DB;
		return ($DB->Query("DELETE FROM b_favorite WHERE USER_ID=". intval($user_id), false, "File: ".__FILE__."<br>Line: ".__LINE__));
	}

	//interface language delete event
	function OnLanguageDelete($language_id)
	{
		global $DB;
		return ($DB->Query("DELETE FROM b_favorite WHERE LANGUAGE_ID='".$DB->ForSQL($language_id, 2)."'", false, "File: ".__FILE__."<br>Line: ".__LINE__));
	}
}

global $__USER_OPTIONS_CACHE;
$__USER_OPTIONS_CACHE = array();
class CUserOptions
{
	function GetList($arOrder = array("ID" => "ASC"), $arFilter = array())
	{
		global $DB;
		$arSqlSearch = Array();

		$filter_keys = Array_Keys($arFilter);
		for ($i = 0; $i < Count($filter_keys); $i++)
		{
			$val = $arFilter[$filter_keys[$i]];
			$key = StrToUpper($filter_keys[$i]);
			switch ($key)
			{
				case "ID":
					$arSqlSearch[] = "UO.ID = ".IntVal($val);
					break;
				case "USER_ID":
					$arSqlSearch[] = "UO.USER_ID = ".IntVal($val);
					break;
				case "USER_ID_EXT":
					$arSqlSearch[] = "(UO.USER_ID = ".IntVal($val)." OR UO.COMMON='Y')";
					break;
				case "CATEGORY":
					$arSqlSearch[] = "UO.CATEGORY = '".$DB->ForSql($val)."'";
					break;
				case "NAME":
					$arSqlSearch[] = "UO.NAME = '".$DB->ForSql($val)."'";
					break;
				case "COMMON":
					$arSqlSearch[] = "UO.COMMON = '".$DB->ForSql($val)."'";
					break;
			}
		}

		$strSqlSearch = "";
		for ($i = 0; $i < Count($arSqlSearch); $i++)
			if (StrLen($arSqlSearch[$i]) > 0)
				$strSqlSearch .= " AND  (".$arSqlSearch[$i].") ";

		$strSql =
			"SELECT UO.ID, UO.USER_ID, UO.CATEGORY, UO.NAME, UO.COMMON, UO.VALUE ".
			"FROM b_user_option UO ".
			"WHERE 1 = 1 ".
			$strSqlSearch;

		$arSqlOrder = array();
		if (Is_Array($arOrder))
		{
			foreach ($arOrder as $by => $order)
			{
				$by = StrToUpper($by);
				$order = StrToUpper($order);
				if ($order != "ASC")
					$order = "DESC";

				if ($by == "ID")
					$arSqlOrder[$by] = " UO.ID ".$order." ";
				elseif ($by == "USER_ID")
					$arSqlOrder[$by] = " UO.USER_ID ".$order." ";
				elseif ($by == "CATEGORY")
					$arSqlOrder[$by] = " UO.CATEGORY ".$order." ";
				elseif ($by == "NAME")
					$arSqlOrder[$by] = " UO.NAME ".$order." ";
				elseif ($by == "COMMON")
					$arSqlOrder[$by] = " UO.COMMON ".$order." ";
			}
		}

		if (count($arSqlOrder) > 0)
			$strSqlOrder = " ORDER BY ".implode(",", $arSqlOrder);
		else
			$strSqlOrder = "";

		$res = $DB->Query($strSql.$strSqlOrder, false, "FILE: ".__FILE__."<br> LINE: ".__LINE__);

		return $res;
	}

	function GetOption($category, $name, $default_value=false, $user_id=false)
	{
		global $DB, $USER, $__USER_OPTIONS_CACHE;

		if($user_id === false)
			$user_id = $USER->GetID();
		$user_id = intval($user_id);

		if(!isset($__USER_OPTIONS_CACHE[$user_id]))
		{
			//user (or default) options
			$res = $DB->Query(
				"SELECT CATEGORY, NAME, VALUE, COMMON FROM b_user_option ".
				"WHERE (USER_ID=".$user_id." OR USER_ID IS NULL AND COMMON='Y') ");

			while($res_array = $res->Fetch())
			{
				$row_cache_key = $res_array["CATEGORY"].".".$res_array["NAME"];
				if(!isset($__USER_OPTIONS_CACHE[$user_id][$row_cache_key]) || $res_array["COMMON"] <> 'Y')
					$__USER_OPTIONS_CACHE[$user_id][$row_cache_key] = unserialize($res_array["VALUE"]);
			}
		}

		$cache_key = $category.".".$name;
		if(!isset($__USER_OPTIONS_CACHE[$user_id][$cache_key]))
			$__USER_OPTIONS_CACHE[$user_id][$cache_key] = $default_value;

		return $__USER_OPTIONS_CACHE[$user_id][$cache_key];
	}

	function SetOption($category, $name, $value, $bCommon=false, $user_id=false)
	{
		global $DB, $USER, $__USER_OPTIONS_CACHE;

		if($user_id === false)
			$user_id = $USER->GetID();
		$user_id = intval($user_id);

		$arFields = array(
			"USER_ID"=>($bCommon? false:$user_id),
			"CATEGORY"=>$category,
			"NAME"=>$name,
			"VALUE"=>serialize($value),
			"COMMON"=>($bCommon? "Y":"N"),
		);
		$res = $DB->Query(
			"SELECT ID FROM b_user_option ".
			"WHERE ".
			($bCommon? "USER_ID IS NULL AND COMMON='Y' ":"USER_ID=".$user_id).
			"	AND CATEGORY='".$DB->ForSql($category, 50)."' ".
			"	AND NAME='".$DB->ForSql($name, 255)."'");
		if($res_array = $res->Fetch())
		{
			$strUpdate = $DB->PrepareUpdate("b_user_option", $arFields);
			if($strUpdate!="")
			{
				$strSql = "UPDATE b_user_option SET ".$strUpdate." WHERE ID=".$res_array["ID"];
				if(!$DB->QueryBind($strSql, array("VALUE"=>$arFields["VALUE"])))
					return false;
			}
		}
		else
		{
			if(!$DB->Add("b_user_option", $arFields, array("VALUE")))
				return false;
		}
		$__USER_OPTIONS_CACHE = array();
		return true;
	}

	function SetOptionsFromArray($aOptions)
	{
		foreach($aOptions as $opt)
		{
			if($opt["c"] <> "" && $opt["n"] <> "")
			{
				$val = $opt["v"];
				if(is_array($opt["v"]))
				{
					$val = CUserOptions::GetOption($opt["c"], $opt["n"], array());
					foreach($opt["v"] as $k=>$v)
						$val[$k] = $v;
				}
				CUserOptions::SetOption($opt["c"], $opt["n"], $val);
				if($opt["d"] == "Y" && $GLOBALS["USER"]->CanDoOperation('edit_other_settings'))
					CUserOptions::SetOption($opt["c"], $opt["n"], $val, true);
			}
		}
	}

	function DeleteOption($category, $name, $bCommon=false, $user_id=false)
	{
		global $DB, $USER, $__USER_OPTIONS_CACHE;

		if($user_id === false)
			$user_id = $USER->GetID();
		$user_id = intval($user_id);

		$strSql =
			"DELETE FROM b_user_option ".
			"WHERE ".($bCommon? "USER_ID IS NULL AND COMMON='Y' ":"USER_ID=".$user_id).
			"	AND CATEGORY='".$DB->ForSql($category, 50)."' ".
			"	AND NAME='".$DB->ForSql($name, 255)."'";
		if($DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__))
		{
			$__USER_OPTIONS_CACHE = array();
			return true;
		}
		return false;
	}

	function DeleteCommonOptions()
	{
		global $DB, $__USER_OPTIONS_CACHE;
		if($DB->Query("DELETE FROM b_user_option WHERE COMMON='Y' AND NAME NOT LIKE '~%'", false, "File: ".__FILE__."<br>Line: ".__LINE__))
		{
			$__USER_OPTIONS_CACHE = array();
			return true;
		}
		return false;
	}

	function DeleteUsersOptions($user_id=false)
	{
		global $DB, $__USER_OPTIONS_CACHE;
		if($DB->Query("DELETE FROM b_user_option WHERE USER_ID IS NOT NULL AND NAME NOT LIKE '~%'  ".($user_id <> false? " AND USER_ID=".intval($user_id):""), false, "File: ".__FILE__."<br>Line: ".__LINE__))
		{
			$__USER_OPTIONS_CACHE = array();
			return true;
		}
		return false;
	}

	//*****************************
	// Events
	//*****************************

	//user deletion event
	function OnUserDelete($user_id)
	{
		global $DB;
		return ($DB->Query("DELETE FROM b_user_option WHERE USER_ID=". intval($user_id), false, "File: ".__FILE__."<br>Line: ".__LINE__));
	}
}
?>