Your IP : 172.28.240.42


Current Path : /var/www/html/clients/old.e-nkama.ru/e-nkama_bitrix/bitrix/modules/vote/classes/general/
Upload File :
Current File : /var/www/html/clients/old.e-nkama.ru/e-nkama_bitrix/bitrix/modules/vote/classes/general/answer.php

<?
##############################################
# Bitrix Site Manager Forum                  #
# Copyright (c) 2002-2009 Bitrix             #
# http://www.bitrixsoft.com                  #
# mailto:admin@bitrixsoft.com                #
##############################################
IncludeModuleLangFile(__FILE__); 

class CAllVoteAnswer
{
	function err_mess()
	{
		$module_id = "vote";
		return "<br>Module: ".$module_id."<br>Class: CAllVoteAnswer<br>File: ".__FILE__;
	}
	
	function CheckFields($ACTION, &$arFields, $ID = 0)
	{
		$aMsg = array();
		$ID = intVal($ID);
		$ACTION = ($ID > 0 && $ACTION == "UPDATE" ? "UPDATE" : "ADD");
		
		unset($arFields["ID"]);
		if (is_set($arFields, "QUESTION_ID") || $ACTION == "ADD"):
			$arFields["QUESTION_ID"] = intVal($arFields["QUESTION_ID"]);
			if ($arFields["QUESTION_ID"] <= 0):
				$aMsg[] = array(
					"id" => "QUESTION_ID", 
					"text" => GetMessage("VOTE_FORGOT_QUESTION_ID"));
			endif;
		endif;
		
		if (is_set($arFields, "MESSAGE") || $ACTION == "ADD"):
			$arFields["MESSAGE"] = trim($arFields["MESSAGE"]);
			if (strlen($arFields["MESSAGE"]) <= 0):
				$aMsg[] = array(
					"id" => "MESSAGE", 
					"text" => GetMessage("VOTE_FORGOT_MESSAGE"));
			endif;
			$arFields["MESSAGE"] = substr($arFields["MESSAGE"], 0, 2000);
		endif;
		
		if (is_set($arFields, "ACTIVE") || $ACTION == "ADD") { $arFields["ACTIVE"] = ($arFields["ACTIVE"] == "N" ? "N" : "Y"); }
		unset($arFields["TIMESTAMP_X"]);
		if (is_set($arFields, "C_SORT") || $ACTION == "ADD") { $arFields["C_SORT"] = (intVal($arFields["C_SORT"]) > 0 ? intVal($arFields["C_SORT"]) : 100); }
		if (is_set($arFields, "COUNTER") || $ACTION == "ADD") { $arFields["COUNTER"] = intVal($arFields["COUNTER"]); }
		if (is_set($arFields, "FIELD_TYPE") || $ACTION == "ADD") { $arFields["FIELD_TYPE"] = intVal($arFields["FIELD_TYPE"]); }
		if (is_set($arFields, "FIELD_WIDTH") || $ACTION == "ADD") { $arFields["FIELD_WIDTH"] = intVal($arFields["FIELD_WIDTH"]); }
		if (is_set($arFields, "FIELD_HEIGHT") || $ACTION == "ADD") { $arFields["FIELD_HEIGHT"] = intVal($arFields["FIELD_HEIGHT"]); }
		
		if (is_set($arFields, "FIELD_PARAM") || $ACTION == "ADD") { $arFields["FIELD_PARAM"] = substr(trim($arFields["FIELD_PARAM"]), 0, 255); }
		if (is_set($arFields, "COLOR") || $ACTION == "ADD") { $arFields["COLOR"] = substr(trim($arFields["COLOR"]), 0, 7); }
		
		if(!empty($aMsg))
		{
			$e = new CAdminException(array_reverse($aMsg));
			$GLOBALS["APPLICATION"]->ThrowException($e);
			return false;
		}
		return true;
	}

	function Add($arFields)
	{
		global $DB;
		$arBinds = array();
		
		if (!CVoteAnswer::CheckFields("ADD", $arFields))
			return false;
/***************** Event onBeforeVoteAnswerAdd *********************/
		$events = GetModuleEvents("vote", "onBeforeVoteAnswerAdd");
		while ($arEvent = $events->Fetch())
			ExecuteModuleEventEx($arEvent, array(&$arFields));
/***************** /Event ******************************************/
		if (empty($arFields))
			return false;
		
		$arFields["~TIMESTAMP_X"] = $DB->GetNowFunction();
		$arBinds["MESSAGE"] = $arFields["MESSAGE"];

		$ID = $DB->Add("b_vote_answer", $arFields, $arBinds);
/***************** Event onAfterVoteAnswerAdd **********************/
		$events = GetModuleEvents("vote", "onAfterVoteAnswerAdd");
		while ($arEvent = $events->Fetch())
			ExecuteModuleEventEx($arEvent, array($ID, $arFields));
/***************** /Event ******************************************/
		return $ID;
	}

	function Update($ID, $arFields)
	{
		global $DB;
		$arBinds = array();
		$ID = intVal($ID);
		$err_mess = (CAllVoteQuestion::err_mess())."<br>Function: Update<br>Line: ";

		if ($ID <= 0 || !CVoteAnswer::CheckFields("UPDATE", $arFields, $ID))
			return false;
/***************** Event onBeforeVoteQuestionUpdate ****************/
		$events = GetModuleEvents("vote", "onBeforeVoteAnswerUpdate");
		while ($arEvent = $events->Fetch())
			ExecuteModuleEventEx($arEvent, array(&$arFields));
/***************** /Event ******************************************/
		if (empty($arFields))
			return false;
			
		$arFields["~TIMESTAMP_X"] = $DB->GetNowFunction();
		$strUpdate = $DB->PrepareUpdate("b_vote_answer", $arFields);
		if (is_set($arFields, "MESSAGE"))
			$arBinds["MESSAGE"] = $arFields["MESSAGE"];
		
		if (!empty($strUpdate)):
			$strSql = "UPDATE b_vote_answer SET ".$strUpdate." WHERE ID=".$ID;
/*			$DB->QueryBind($strSql, $arBinds);*/
			$DB->Query($strSql, false, $err_mess);
		endif;
/***************** Event onAfterVoteAnswerUpdate *******************/
		$events = GetModuleEvents("vote", "onAfterVoteAnswerUpdate");
		while ($arEvent = $events->Fetch())
			ExecuteModuleEventEx($arEvent, array($ID, $arFields));
/***************** /Event ******************************************/
		return $ID;
	}

	function Delete($ID, $QUESTION_ID = false, $VOTE_ID = false)
	{
		global $DB;
		$err_mess = (CAllVoteAnswer::err_mess())."<br>Function: Delete<br>Line: ";
		$bCanDelete = true;
/***************** Event OnBeforeVoteAnswerDelete ******************/
		$events = GetModuleEvents("vote", "OnBeforeVoteAnswerDelete");
		while ($arEvent = $events->Fetch()):
			if (ExecuteModuleEventEx($arEvent, array(&$ID, &$QUESTION_ID, &$VOTE_ID)) === false):
				$bCanDelete = false;
				break;
			endif;
		endwhile;
/***************** /Event ******************************************/
		if (!$bCanDelete):
			return false;
		endif;

		$ID = (intVal($ID) > 0 ? intVal($ID) : false);
		$QUESTION_ID = (intVal($QUESTION_ID) > 0 ? intVal($QUESTION_ID) : false);
		$VOTE_ID = (intVal($VOTE_ID) > 0 ? intVal($VOTE_ID) : false);
		$strSqlEventAnswer = "";
		$strSqlAnswer = "";
		if ($ID != false):
			$strSqlEventAnswer = "DELETE FROM b_vote_event_answer WHERE ANSWER_ID=".$ID;
			$strSqlAnswer = "DELETE FROM b_vote_answer WHERE ID=".$ID;
		elseif ($QUESTION_ID != false):
			$strSqlEventAnswer = "DELETE FROM b_vote_event_answer WHERE ANSWER_ID IN (
				SELECT VA.ID FROM b_vote_answer VA WHERE VA.QUESTION_ID = ".$QUESTION_ID.")";
			$strSqlAnswer = "DELETE FROM b_vote_answer WHERE QUESTION_ID = ".$QUESTION_ID;
		elseif ($VOTE_ID != false):
			$strSqlEventAnswer = "DELETE FROM b_vote_event_answer WHERE ANSWER_ID IN (
				SELECT VA.ID 
				FROM b_vote_answer VA, b_vote_question VQ 
				WHERE VA.QUESTION_ID = VQ.ID AND VQ.VOTE_ID = ".$VOTE_ID.")";
			$strSqlAnswer = "DELETE FROM b_vote_answer WHERE QUESTION_ID IN (
				SELECT VQ.ID FROM b_vote_question VQ WHERE VQ.VOTE_ID = ".$VOTE_ID.")";
		else:
			return false;
		endif;
		
		$DB->Query($strSqlEventAnswer, false, $err_mess.__LINE__);
		$DB->Query($strSqlAnswer, false, $err_mess.__LINE__);
/***************** Event OnAfterVoteAnswerDelete *******************/
		$events = GetModuleEvents("vote", "OnAfterVoteAnswerDelete");
		while ($arEvent = $events->Fetch()):
			ExecuteModuleEventEx($arEvent, array($ID, $QUESTION_ID, $VOTE_ID));
		endwhile;
/***************** /Event ******************************************/

		return true;
	}

	function GetList($QUESTION_ID, $by="s_c_sort", $order="asc", $arFilter=array())
	{
		$err_mess = (CAllVoteAnswer::err_mess())."<br>Function: GetList<br>Line: ";
		global $DB;
		$QUESTION_ID = intval($QUESTION_ID);
		$arSqlSearch = Array();
		$strSqlSearch = "";
		$arFilter = (is_array($arFilter) ? $arFilter : array());
		foreach ($arFilter as $key => $val)
		{
			if(empty($val) || $val === "NOT_REF")
				continue;
			$key = strtoupper($key);
			switch($key)
			{
				case "ID":
				case "FIELD_TYPE":
					$match = ($arFilter[$key."_EXACT_MATCH"]=="N" ? "Y" : "N");
					$arSqlSearch[] = GetFilterQuery("A.".$key, $val, $match);
					break;
				case "MESSAGE":
				case "FIELD_PARAM":
					$match = ($arFilter[$key."_EXACT_MATCH"]=="Y" ? "N" : "Y");
					$arSqlSearch[] = GetFilterQuery("A.".$key, $val, $match);
					break;
				case "ACTIVE":
					$arSqlSearch[] = ($val=="Y") ? "A.ACTIVE='Y'" : "A.ACTIVE='N'";
					break;
			}
		}
		
		$order = ($order!="desc" ? "asc" : "desc");
		if ($by == "s_id")				$strSqlOrder = "ORDER BY A.ID";
		elseif ($by == "s_counter")		$strSqlOrder = "ORDER BY A.COUNTER";
		else 
		{
			$by = "s_c_sort";
			$strSqlOrder = "ORDER BY A.C_SORT";
		}
		$strSqlOrder .= " ".$order;
		
		$strSqlSearch = GetFilterSqlSearch($arSqlSearch);
		$strSql = "
			SELECT 
				A.* 
			FROM 
				b_vote_answer A
			WHERE 
			$strSqlSearch
			and	A.QUESTION_ID='$QUESTION_ID' 
			$strSqlOrder
			";
		$res = $DB->Query($strSql, false, $err_mess.__LINE__);
		return $res;
	}

	function GetListEx($arOrder = array("ID" => "ASC"), $arFilter=array())
	{
		$err_mess = (CAllVoteAnswer::err_mess())."<br>Function: GetListEx<br>Line: ";
		global $DB;
		
		$arSqlSearch = Array();
		$strSqlSearch = "";
		$arSqlOrder = Array();
		$strSqlOrder = "";
		
		$arFilter = (is_array($arFilter) ? $arFilter : array());
		foreach ($arFilter as $key => $val)
		{
			if(empty($val) || $val === "NOT_REF")
				continue;
			$key_res = VoteGetFilterOperation($key);
			$strNegative = $key_res["NEGATIVE"];
			$strOperation = $key_res["OPERATION"];
			$key = strtoupper($key_res["FIELD"]);
			
			switch($key)
			{
				case "ID":
				case "QUESTION_ID":
					if (strlen($val)<=0)
						$arSqlSearch[] = ($strNegative=="Y"?"NOT":"")."(VA.".$key." IS NULL OR VA.".$key."<=0)";
					else
						$arSqlSearch[] = ($strNegative=="Y"?" VA.".$key." IS NULL OR NOT ":"")."(VA.".$key." ".$strOperation." ".intVal($val).")";
					break;
				case "VOTE_ID":
					if (strlen($val)<=0)
						$arSqlSearch[] = ($strNegative=="Y"?"NOT":"")."(VQ.".$key." IS NULL OR VQ.".$key."<=0)";
					else
						$arSqlSearch[] = ($strNegative=="Y"?" VQ.".$key." IS NULL OR NOT ":"")."(VQ.".$key." ".$strOperation." ".intVal($val).")";
					break;
				case "ACTIVE":
					$arSqlSearch[] = ($val=="Y") ? "VA.ACTIVE='Y'" : "VA.ACTIVE='N'";
					break;
			}
		}
		if (count($arSqlSearch) > 0)
			$strSqlSearch = " AND (".implode(") AND (", $arSqlSearch).") ";
		
		foreach ($arOrder as $by => $order)
		{
			$by = strtoupper($by); $order = strtoupper($order);
			if ($order!="ASC") $order = "DESC";
			if ($by == "ID") $arSqlOrder[] = " VA.ID ".$order." ";
			elseif ($by == "ACTIVE") $arSqlOrder[] = " VA.ACTIVE ".$order." ";
			else
			{
				$arSqlOrder[] = " VA.ID ".$order." ";
				$by = "ID";
			}
		}
		DelDuplicateSort($arSqlOrder); 
		if (count($arSqlOrder) > 0)
			$strSqlOrder = " ORDER BY ".implode(", ", $arSqlOrder);
		
		$strSql = "
			SELECT VA.* 
			FROM 
				b_vote_answer VA, b_vote_question VQ
			WHERE VQ.ID = VA.QUESTION_ID ".
			$strSqlSearch."
			".$strSqlOrder;
		$res = $DB->Query($strSql, false, $err_mess.__LINE__);
		return $res;
	}

	function GetGroupAnswers($ANSWER_ID)
	{
		$err_mess = (CAllVoteAnswer::err_mess())."<br>Function: GetGroupAnswers<br>Line: ";
		global $DB;
		$ANSWER_ID = intval($ANSWER_ID);
		$strSql = "
			SELECT
				A.MESSAGE,
				count(A.ID) as COUNTER
			FROM
				b_vote_event_answer A,
				b_vote_event_question Q,
				b_vote_event E
			WHERE
				A.ANSWER_ID = '$ANSWER_ID'
			and Q.ID = A.EVENT_QUESTION_ID
			and E.ID = Q.EVENT_ID
			and E.VALID = 'Y'
			GROUP BY A.MESSAGE
			ORDER BY COUNTER desc
			";
		$res = $DB->Query($strSql, false, $err_mess.__LINE__);
		return $res;
	}
}
?>