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/agent.php

<?
IncludeModuleLangFile($_SERVER["DOCUMENT_ROOT"].BX_ROOT."/modules/main/classes/general/agent.php");
class CAllAgent
{
	function AddAgent(
		$name,			// èìÿ PHP-ôóíêöèè
		$module="",		// èäåíòèôèêàòîð ìîäóëÿ
		$period="N",		// êðèòè÷íîñòü ê îáÿçàòåëüíîìó êîë-âó çàïóñêîâ àãåíòà
		$interval=86400,	// èíòåðâàë çàïóñêà àãåíòà
		$datecheck="",		// äàòà ïåðâîé ïðîâåðêè íà çàïóñê
		$active="Y",		// ôëàã àêòèâíîñòè àãåíòà
		$next_exec="",		// äàòà ïåðâîãî çàïóñêà àãåíòà
		$sort=100,		// ñîðòèðîâêà
		$user_id=false		// èäåíòèôèêàòîð ïîëüçîâàòåëÿ
		)
	{
		global $DB;
		$ID=false;

		$err_mess = "FILE: ".__FILE__."<br>LINE: ";
		$strSql = "SELECT 'x' FROM b_agent WHERE NAME='".$DB->ForSql($name, 2000)."' AND USER_ID".($user_id ? "=".intval($user_id) : " IS NULL");
		$z = $DB->Query($strSql, false, $err_mess);
		if (!($zr = $z->Fetch()))
		{
			$arFields =
				Array(
					"MODULE_ID" => $module,
					"SORT"		=> $sort,
					"NAME"		=> $name,
					"ACTIVE"	=> $active,
					//"DATE_CHECK"		=> (strlen(trim($datecheck))<=0) ? "null" : $DB->CharToDateFunction($datecheck),
					"AGENT_INTERVAL"	=> $interval,
					"IS_PERIOD"			=> $period,
					"USER_ID"			=> $user_id
				);

			if(strlen($next_exec)>0)
				$arFields["NEXT_EXEC"]=$next_exec;

			$ID = CAgent::Add($arFields);
		}
		else
		{
			$e = new CAdminException(array(array("id" => "agent_exist", "text" => GetMessage("MAIN_AGENT_ERROR_EXIST"))));
			$GLOBALS["APPLICATION"]->ThrowException($e);
			return false;
		}
		return $ID;
	}

	function Add($arFields)
	{
		global $DB;

		if(CAgent::CheckFields($arFields))
		{
			if(!is_set($arFields, "NEXT_EXEC"))
				$arFields["~NEXT_EXEC"] = $DB->GetNowDate();

			if(CACHED_b_agent!==false)
				@unlink($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/managed_cache/".$DB->type."/b_agent");

			return $DB->Add("b_agent", $arFields);
		}
		return false;
	}

	function RemoveAgent($name, $module="", $user_id=false)
	{
		global $DB;

		$module = (strlen(trim($module))<=0) ? "AND (MODULE_ID is null or ".$DB->Length("MODULE_ID")."=0)" : "AND MODULE_ID='".$DB->ForSql($module,50)."'";
		$strSql = "DELETE FROM b_agent WHERE NAME='".$DB->ForSql($name, 2000)."' ".$module." AND  USER_ID".($user_id ? "=".intval($user_id) : " IS NULL");
		$DB->Query($strSql, false, "FILE: ".__FILE__."<br> LINE: ".__LINE__);
	}

	function Delete($id)
	{
		global $DB;
		$id = intval($id);
		if ($id<=0) return false;
		$DB->Query("DELETE FROM b_agent WHERE ID=$id", false, "FILE: ".__FILE__."<br>LINE: ");
		return true;
	}

	function RemoveModuleAgents($module)
	{
		global $DB;

		if (strlen($module)>0)
		{
			$strSql = "DELETE FROM b_agent WHERE MODULE_ID='".$DB->ForSql($module,255)."'";
			$DB->Query($strSql, false, "FILE: ".__FILE__."<br> LINE: ".__LINE__);
		}
	}

	function Update($ID, $arFields)
	{
		global $DB;
		$ign_name = false;

		$ID = intval($ID);

		if(is_set($arFields, "ACTIVE") && $arFields["ACTIVE"]!="Y")
			$arFields["ACTIVE"]="N";
		if(is_set($arFields, "IS_PERIOD") && $arFields["IS_PERIOD"]!="Y")
			$arFields["IS_PERIOD"]="N";
		if(!is_set($arFields, "NAME"))
			$ign_name = true;

		if(CAgent::CheckFields($arFields, $ign_name))
		{
			if(CACHED_b_agent!==false)
				@unlink($_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/managed_cache/".$DB->type."/b_agent");

			$strUpdate = $DB->PrepareUpdate("b_agent", $arFields);
			$strSql = "UPDATE b_agent SET ".$strUpdate." WHERE ID=".$ID;
			$res = $DB->Query($strSql, false, "FILE: ".__FILE__."<br> LINE: ".__LINE__);
			return $res;
		}

		return false;
	}

	function GetById($ID)
	{
		return CAgent::GetList(Array(), Array("ID"=>IntVal($ID)));
	}

	function GetList($arOrder = Array("ID" => "DESC"), $arFilter = array())
	{
		global $DB;
		$err_mess = "FILE: ".__FILE__."<br>LINE: ";

		$arSqlSearch = array();
		$arSqlOrder = array();

		$arOFields = array(
				"ID" => "A.ID",
				"ACTIVE" => "A.ACTIVE",
				"IS_PERIOD" => "A.IS_PERIOD",
				"NAME" => "A.NAME",
				"MODULE_ID" => "A.MODULE_ID",
				"USER_ID" => "A.USER_ID",
				"LAST_EXEC" => "A.LAST_EXEC",
				"AGENT_INTERVAL" => "A.AGENT_INTERVAL",
				"NEXT_EXEC" => "A.NEXT_EXEC",
				"SORT" => "A.SORT"
			);

		if(!is_array($arFilter))
			$filter_keys = array();
		else
			$filter_keys = array_keys($arFilter);

		for($i=0; $i<count($filter_keys); $i++)
		{
			$val = $arFilter[$filter_keys[$i]];
			$key = strtoupper($filter_keys[$i]);
			if(strlen($val)<=0 || ($key=="USER_ID" && $val!==false && $val!==null)) continue;
			switch($key)
			{
				case "ID":
					$arSqlSearch[] = "A.ID=".IntVal($val);
				case "ACTIVE":
					$t_val = strtoupper($val);
					if($t_val == "Y" || $t_val == "N")
						$arSqlSearch[] = "A.ACTIVE='".$t_val."'";
					break;
				case "IS_PERIOD":
					$t_val = strtoupper($val);
					if($t_val=="Y" || $t_val=="N")
						$arSqlSearch[] = "A.IS_PERIOD='".$t_val."'";
					break;
				case "NAME":
					$arSqlSearch[] = "A.NAME LIKE '".$DB->ForSQL($val)."'";
					break;
				case "MODULE_ID":
					$arSqlSearch[] = "A.MODULE_ID = '".$DB->ForSQL($val)."'";
					break;
				case "USER_ID":
					$arSqlSearch[] = "A.USER_ID ".(IntVal($val)<=0?"IS NULL":"=".IntVal($val));
					break;
				case "LAST_EXEC":
					$arr = ParseDateTime($val, CLang::GetDateFormat($format_type, $lang));
					if($arr)
					{
						$date2 = mktime(0, 0, 0, $arr["MM"], $arr["DD"]+1, $arr["YYYY"]);
						$arSqlSearch[] = "A.LAST_EXEC>=".$DB->CharToDateFunction($DB->ForSql($val), "SHORT")." AND A.LAST_EXEC<".$DB->CharToDateFunction(ConvertTimeStamp($date2));
					}
					break;
				case "NEXT_EXEC":
					$arr = ParseDateTime($val);
					if($arr)
					{
						$date2 = mktime(0, 0, 0, $arr["MM"], $arr["DD"]+1, $arr["YYYY"]);
						$arSqlSearch[] = "A.NEXT_EXEC>=".$DB->CharToDateFunction($DB->ForSql($val), "SHORT")." AND A.NEXT_EXEC<".$DB->CharToDateFunction(ConvertTimeStamp($date2));
					}

					break;
			}
		}

		foreach($arOrder as $by => $order)
		{
			$by = strtoupper($by);
			$order = strtoupper($order);
			if (array_key_exists($by, $arOFields))
			{
				if ($order != "ASC")
					$order = "DESC".($DB->type=="ORACLE" ? " NULLS LAST" : "");
				else
					$order = "ASC".($DB->type=="ORACLE" ? " NULLS FIRST" : "");
				$arSqlOrder[] = $arOFields[$by]." ".$order;
			}
		}

		$strSql = "SELECT A.ID, A.MODULE_ID, A.USER_ID, B.LOGIN, B.NAME as USER_NAME, B.LAST_NAME, A.SORT, ".
			"A.NAME, A.ACTIVE, ".
			$DB->DateToCharFunction("A.LAST_EXEC")." as LAST_EXEC, ".
			$DB->DateToCharFunction("A.NEXT_EXEC")." as NEXT_EXEC, ".
			"A.AGENT_INTERVAL, A.IS_PERIOD ".
			"FROM b_agent A LEFT JOIN b_user B ON(A.USER_ID = B.ID)";
		$strSql .= (count($arSqlSearch)>0) ? " WHERE ".implode(" AND ", $arSqlSearch) : "";
		$strSql .= (count($arSqlOrder)>0) ? " ORDER BY ".implode(", ", $arSqlOrder) : "";

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

	function CheckFields(&$arFields, $ign_name = false)
	{
		global $DB;
		$errMsg = array();

		if(!$ign_name && (!is_set($arFields, "NAME") || strlen(trim($arFields["NAME"])) <= 2))
			$errMsg[] = array("id" => "NAME", "text" => GetMessage("MAIN_AGENT_ERROR_NAME"));

		if(is_set($arFields, "NEXT_EXEC") && ($arFields["NEXT_EXEC"]=="" || !$DB->IsDate($arFields["NEXT_EXEC"], false, LANG, "FULL")))
			$errMsg[] = array("id" => "NEXT_EXEC", "text" => GetMessage("MAIN_AGENT_ERROR_NEXT_EXEC"));

		if($arFields["DATE_CHECK"]<>"" && !$DB->IsDate($arFields["DATE_CHECK"], false, LANG, "FULL"))
			$errMsg[] = array("id" => "DATE_CHECK", "text" => GetMessage("MAIN_AGENT_ERROR_DATE_CHECK"));

		if($arFields["LAST_EXEC"]<>"" && !$DB->IsDate($arFields["LAST_EXEC"], false, LANG, "FULL"))
			$errMsg[] = array("id" => "LAST_EXEC", "text" => GetMessage("MAIN_AGENT_ERROR_LAST_EXEC"));

		if($arFields["MODULE_ID"] <> '')
			if(!IsModuleInstalled($arFields["MODULE_ID"]))
				$errMsg[] = array("id" => "MODULE_ID", "text" => GetMessage("MAIN_AGENT_ERROR_MODULE"));

		if(count($errMsg)>0)
		{
			$e = new CAdminException($errMsg);
			$GLOBALS["APPLICATION"]->ThrowException($e);
			return false;
		}
		return true;
	}
}
?>