Your IP : 3.147.66.200


Current Path : /home/bitrix/ext_www/coffe.land/bitrix/modules/learning/classes/general/
Upload File :
Current File : /home/bitrix/ext_www/coffe.land/bitrix/modules/learning/classes/general/testmark.php

<?
// 2012-04-13 Checked/modified for compatibility with new data model
class CLTestMark
{
	// 2012-04-13 Checked/modified for compatibility with new data model
	function CheckFields(&$arFields, $ID = false)
	{
		global $DB;
		$arMsg = Array();

		if ( (is_set($arFields, "MARK") || $ID === false) && strlen($arFields["MARK"]) <= 0)
			$arMsg[] = array("id"=>"MARK", "text"=> GetMessage("LEARNING_BAD_MARK"));


		if (
			($ID === false && !is_set($arFields, "TEST_ID"))
			||
			(is_set($arFields, "TEST_ID") && intval($arFields["TEST_ID"]) < 1)
			)
		{
			$arMsg[] = array("id"=>"TEST_ID", "text"=> GetMessage("LEARNING_BAD_TEST_ID"));
		}
		elseif (is_set($arFields, "TEST_ID"))
		{
			$res = CTest::GetByID($arFields["TEST_ID"]);
			if(!$arRes = $res->Fetch())
				$arMsg[] = array("id"=>"TEST_ID", "text"=> GetMessage("LEARNING_BAD_TEST_ID"));
		}

		if (!is_set($arFields, "SCORE") || intval($arFields["SCORE"]) > 100 || intval($arFields["SCORE"]) < 1)
		{
			$arMsg[] = array("id"=>"SCORE", "text"=> GetMessage("LEARNING_BAD_MARK_SCORE"));
		}

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

		return true;
	}


	// 2012-04-13 Checked/modified for compatibility with new data model
	function Add($arFields)
	{
		global $DB;

		if($this->CheckFields($arFields))
		{
			unset($arFields["ID"]);

			$ID = $DB->Add("b_learn_test_mark", $arFields, Array("DESCRIPTION"), "learning");

			return $ID;
		}

		return false;
	}


	// 2012-04-13 Checked/modified for compatibility with new data model
	function Update($ID, $arFields)
	{
		global $DB;

		$ID = intval($ID);
		if ($ID < 1) return false;


		if ($this->CheckFields($arFields, $ID))
		{
			unset($arFields["ID"]);

			$arBinds=Array(
				"DESCRIPTION"=>$arFields["DESCRIPTION"]
			);

			$strUpdate = $DB->PrepareUpdate("b_learn_test_mark", $arFields, "learning");
			$strSql = "UPDATE b_learn_test_mark SET ".$strUpdate." WHERE ID=".$ID;
			$DB->QueryBind($strSql, $arBinds, false, "File: ".__FILE__."<br>Line: ".__LINE__);

			return true;
		}
		return false;
	}


	// 2012-04-13 Checked/modified for compatibility with new data model
	function Delete($ID)
	{
		global $DB;

		$ID = intval($ID);
		if ($ID < 1) return false;

		$strSql = "DELETE FROM b_learn_test_mark WHERE ID = ".$ID;

		if (!$DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__))
			return false;

		return true;
	}


	// 2012-04-13 Checked/modified for compatibility with new data model
	function GetByID($ID)
	{
		return CLTestMark::GetList($arOrder=Array(), $arFilter=Array("ID" => $ID));
	}


	// 2012-04-13 Checked/modified for compatibility with new data model
	function GetByPercent($TEST_ID, $PERCENT)
	{
		global $DB;

		$PERCENT = intval($PERCENT);
		if ($PERCENT < 0 || $PERCENT > 100)
			return false;

		$TEST_ID = intval($TEST_ID);
		if ($TEST_ID <= 0)
			return false;

		$arFilter = array(
			">=SCORE" => $PERCENT,
			"TEST_ID" => $TEST_ID
		);

		$arOrder = array(
			"SCORE" => "ASC"
		);

		$rsMark = CLTestMark::GetList($arOrder, $arFilter);

		if ($arMark = $rsMark->GetNext())
			return $arMark["MARK"];
		else
			return false;
	}


	// 2012-04-13 Checked/modified for compatibility with new data model
	function GetFilter($arFilter)
	{
		if (!is_array($arFilter))
			$arFilter = Array();

		$arSqlSearch = Array();

		foreach ($arFilter as $key => $val)
		{
			$res = CLearnHelper::MkOperationFilter($key);
			$key = $res["FIELD"];
			$cOperationType = $res["OPERATION"];

			$key = strtoupper($key);

			switch ($key)
			{
				case "ID":
				case "SCORE":
				case "TEST_ID":
					$arSqlSearch[] = CLearnHelper::FilterCreate("TM.".$key, $val, "number", $bFullJoin, $cOperationType);
					break;
			}

		}

		return $arSqlSearch;
	}


	// 2012-04-13 Checked/modified for compatibility with new data model
	function GetList($arOrder=Array(), $arFilter=Array())
	{
		global $DB, $USER;

		$arSqlSearch = CLTestMark::GetFilter($arFilter);

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

		$strSql =
		"SELECT TM.* ".
		"FROM b_learn_test_mark TM ".
		"WHERE 1=1 ".
		$strSqlSearch;

		if (!is_array($arOrder))
			$arOrder = Array();

		foreach($arOrder as $by=>$order)
		{
			$by = strtolower($by);
			$order = strtolower($order);
			if ($order!="asc")
				$order = "desc";

			if ($by == "id") $arSqlOrder[] = " TM.ID ".$order." ";
			elseif ($by == "mark") $arSqlOrder[] = " TM.MARK ".$order." ";
			elseif ($by == "score") $arSqlOrder[] = " TM.SCORE ".$order." ";
			elseif ($by == "rand") $arSqlOrder[] = CTest::GetRandFunction();
			else
			{
				$arSqlOrder[] = " TM.ID ".$order." ";
				$by = "id";
			}
		}

		$strSqlOrder = "";
		DelDuplicateSort($arSqlOrder);
		for ($i=0; $i<count($arSqlOrder); $i++)
		{
			if($i==0)
				$strSqlOrder = " ORDER BY ";
			else
				$strSqlOrder .= ",";

			$strSqlOrder .= $arSqlOrder[$i];
		}

		$strSql .= $strSqlOrder;

		//echo $strSql;

		return $DB->Query($strSql, false, "File: ".__FILE__."<br>Line: ".__LINE__);
	}
}