%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/bitrix/www/bitrix/modules/support/classes/general/
Upload File :
Create Path :
Current File : /home/bitrix/www/bitrix/modules/support/classes/general/dictionary.php

<?
IncludeModuleLangFile(__FILE__);

class CAllTicketDictionary
{
	function err_mess()
	{
		$module_id = "support";
		@include($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/".$module_id."/install/version.php");
		return "<br>Module: ".$module_id." <br>Class: CAllTicketDictionary<br>File: ".__FILE__;
	}

	function GetDefault($type, $siteID=SITE_ID)
	{
		if ($siteID=="all")
		{
			$siteID = "";
		}
		$arFilter = array("DEFAULT" => "Y", "TYPE" => $type, "SITE" => $siteID);
		$v2 = $v3 = null;
		$rs = CTicketDictionary::GetList(($v1="s_dropdown"), $v2, $arFilter, $v3);
		$ar = $rs->Fetch();
		return $ar["ID"];
	}

	function GetNextSort($typeID)
	{
		global $DB;
		$err_mess = (CAllTicketDictionary::err_mess())."<br>Function: GetNextSort<br>Line: ";
		$strSql = "SELECT max(C_SORT) MAX_SORT FROM b_ticket_dictionary WHERE C_TYPE='".$DB->ForSql($typeID,5)."'";
		$z = $DB->Query($strSql, false, $err_mess.__LINE__);
		$zr = $z->Fetch();
		return intval($zr["MAX_SORT"])+100;
	}

	function GetDropDown($type="C", $siteID=false, $sla_id=false)
	{
		$err_mess = (CAllTicketDictionary::err_mess())."<br>Function: GetDropDown<br>Line: ";
		global $DB;
		if ($siteID==false || $siteID=="all")
		{
			$siteID = "";
		}
		$arFilter = array("TYPE" => $type, "SITE" => $siteID);
		$v2 = $v3 = null;
		$rs = CTicketDictionary::GetList(($v1="s_dropdown"), $v2, $arFilter, $v3);
		
		$oldFunctionality = COption::GetOptionString( "support", "SUPPORT_OLD_FUNCTIONALITY", "Y" );
		if( intval( $sla_id ) <= 0 || $oldFunctionality != "Y" || ( $type != "C" && $type!="K" && $type!="M" ) ) return $rs;
		
		switch($type)
		{
			case "C": $strSql = "SELECT CATEGORY_ID as DID FROM b_ticket_sla_2_category WHERE SLA_ID=" . intval( $sla_id ); break;
			case "K": $strSql = "SELECT CRITICALITY_ID as DID FROM b_ticket_sla_2_criticality WHERE SLA_ID=" . intval( $sla_id ); break;
			case "M": $strSql = "SELECT MARK_ID as DID FROM b_ticket_sla_2_mark WHERE SLA_ID=" . intval( $sla_id ); break;
		}
		$r = $DB->Query( $strSql, false, $err_mess . __LINE__ );
		while( $a = $r->Fetch() ) $arDID[] = $a["DID"];
		$arRecords = array();
		while( $ar = $rs->Fetch() ) if( is_array( $arDID ) && ( in_array( $ar["ID"], $arDID ) || in_array( 0,$arDID ) ) ) $arRecords[] = $ar;
		
		$rs = new CDBResult;
		$rs->InitFromArray($arRecords);
		
		return $rs;
	}


	function GetDropDownArray($siteID = false, $SLA_ID = false, $arUnsetType = Array("F"))
	{
		//M, C, K, S, SR, D, F
		global $DB;
		$err_mess = (CAllTicketDictionary::err_mess())."<br>Function: GetDropDownArray<br>Line: ";

		if ($siteID == false || $siteID == "all")
			$siteID = "";

		$arFilter = Array("SITE" => $siteID);

		$arReturn = Array();
		$v2 = $v3 = null;
		$rs = CTicketDictionary::GetList(($v1="s_dropdown"), $v2, $arFilter, $v3);
		while ($ar = $rs->Fetch())
		{
			if (in_array($ar["C_TYPE"], $arUnsetType))
				continue;

			$arReturn[$ar["C_TYPE"]][$ar["ID"]] = $ar;
		}
		
		$oldFunctionality = COption::GetOptionString( "support", "SUPPORT_OLD_FUNCTIONALITY", "Y" );
		if( intval($SLA_ID) > 0 && $oldFunctionality == "Y" )
		{
			$SLA_ID = intval($SLA_ID);

			$strSql = "SELECT 'M' as C_TYPE, SLA_ID, MARK_ID as DIC_ID FROM b_ticket_sla_2_mark WHERE SLA_ID = ".$SLA_ID."
						UNION ALL
						SELECT 'K' as C_TYPE, SLA_ID, CRITICALITY_ID as DIC_ID FROM b_ticket_sla_2_criticality WHERE SLA_ID = ".$SLA_ID."
						UNION ALL
						SELECT 'C' as C_TYPE, SLA_ID, CATEGORY_ID as DIC_ID FROM b_ticket_sla_2_category WHERE SLA_ID = ".$SLA_ID;

			$r = $DB->Query($strSql, false, $err_mess.__LINE__);

			$arUnset = Array();
			while ($ar = $r->Fetch())
			{
				if ($ar["DIC_ID"] == 0)
					continue;
				else
					$arUnset[$ar["C_TYPE"]][] = $ar["DIC_ID"];
			}

			if (!empty($arUnset) && !empty($arReturn))
			{
				foreach ($arReturn as $type => $arID)
				{
					if (!array_key_exists($type, $arUnset))
						continue;

					$arID = array_keys($arID);
					$arID = array_diff($arID, $arUnset[$type]);
					foreach ($arID as $val)
						unset($arReturn[$type][$val]);
				}
			}
		}
		
		return $arReturn;
	}

	// get array of languages related to contract
	function GetSiteArray($DICTIONARY_ID)
	{
		$err_mess = (CAllTicketDictionary::err_mess())."<br>Function: GetSiteArray<br>Line: ";
		global $DB;
		$DICTIONARY_ID = intval($DICTIONARY_ID);
		if ($DICTIONARY_ID<=0) return false;
		$arrRes = array();
		$strSql = "
			SELECT
				DS.SITE_ID
			FROM
				b_ticket_dictionary_2_site DS
			WHERE
				DS.DICTIONARY_ID = $DICTIONARY_ID
			";

		$rs = $DB->Query($strSql, false, $err_mess.__LINE__);
		while ($ar = $rs->Fetch()) $arrRes[] = $ar["SITE_ID"];
		return $arrRes;
	}

	function GetSiteArrayForAllDictionaries()
	{
		static $GetSiteArrayForAllDictCache;
		if(is_array($GetSiteArrayForAllDictCache))
		{
			return $GetSiteArrayForAllDictCache;
		}

		$err_mess = (CAllTicketDictionary::err_mess())."<br>Function: GetSiteArrayForAllDictionaries<br>Line: ";
		global $DB;
		$GetSiteArrayForAllDictCache = array();
		$strSql = "
			SELECT
				DS.SITE_ID,
				DS.DICTIONARY_ID
			FROM
				b_ticket_dictionary_2_site DS
			";
		$rs = $DB->Query($strSql, false, $err_mess.__LINE__);
		while ($ar = $rs->Fetch())
		{
			$GetSiteArrayForAllDictCache[$ar["DICTIONARY_ID"]][] = $ar["SITE_ID"];
		}
		return $GetSiteArrayForAllDictCache;
	}

	function GetTypeList()
	{
		$arr = array(
			"reference"=>array(
				GetMessage("SUP_CATEGORY"),
				GetMessage("SUP_CRITICALITY"),
				GetMessage("SUP_STATUS"),
				GetMessage("SUP_MARK"),
				GetMessage("SUP_FUA"),
				GetMessage("SUP_SOURCE"),
				GetMessage("SUP_DIFFICULTY")
				),
			"reference_id"=>array(
				"C",
				"K",
				"S",
				"M",
				"F",
				"SR",
				"D")
			);
		return $arr;
	}

	function GetTypeNameByID($id)
	{
		$arr = CTicketDictionary::GetTypeList();
		$KEY = array_search($id, $arr["reference_id"]);
		return $arr["reference"][$KEY];
	}

	function GetByID($id)
	{
		$err_mess = (CAllTicketDictionary::err_mess())."<br>Function: GetByID<br>Line: ";
		global $DB;
		$id = intval($id);
		if ($id<=0)
		{
			return;
		}
		$by = $order = $is_filtered = null;
		$res = CTicketDictionary::GetList($by, $order, array("ID" => $id), $is_filtered);
		return $res;
	}

	function GetBySID($sid, $type, $siteID=SITE_ID)
	{
		$err_mess = (CAllTicketDictionary::err_mess())."<br>Function: GetBySID<br>Line: ";
		global $DB;
		$v1 = $v2 = $v3 = null;
		$rs = CTicketDictionary::GetList($v1, $v2, array("SITE_ID"=>$siteID, "TYPE"=>$type, "SID"=>$sid), $v3);
		return $rs;
	}

	function Delete($id, $CHECK_RIGHTS="Y")
	{
		$err_mess = (CAllTicketDictionary::err_mess())."<br>Function: Delete<br>Line: ";
		global $DB, $APPLICATION;
		$id = intval($id);
		if ($id<=0)
		{
			return;
		}
		$bAdmin = "N";
		if ($CHECK_RIGHTS=="Y")
		{
			$bAdmin = (CTicket::IsAdmin()) ? "Y" : "N";
		}
		else
		{
			$bAdmin = "Y";
		}
		if ($bAdmin=="Y")
		{
			$DB->Query("DELETE FROM b_ticket_dictionary WHERE ID='$id'", false, $err_mess.__LINE__);
			$DB->Query('DELETE FROM b_ticket_dictionary_2_site WHERE DICTIONARY_ID=' . $id, false, $err_mess.__LINE__);
		}
	}

	function CheckFields($arFields, $id = false)
	{
		$arMsg = Array();

		if ( $id ===false && !(array_key_exists('NAME', $arFields) && strlen($arFields['NAME']) > 0) )
		{
			$arMsg[] = array("id"=>"NAME", "text"=> GetMessage("SUP_FORGOT_NAME"));
		}

		if ($id !== false)
		{
			$rs = CTicketDictionary::GetByID($id);
			if (!$rs->Fetch())
			{
				$arMsg[] = array("id"=>"ID", "text"=> GetMessage("SUP_UNKNOWN_ID", array('#ID#' => $id)));
			}
		}

		if ( array_key_exists('SID', $arFields) && preg_match("#[^A-Za-z_0-9]#", $arFields['SID']) )
		{
			$arMsg[] = array("id"=>"SID", "text"=> GetMessage("SUP_INCORRECT_SID"));
		}
		elseif (
				strlen($arFields['SID']) > 0 && array_key_exists('arrSITE', $arFields) &&
				is_array($arFields['arrSITE']) && count($arFields['arrSITE']) > 0
			)
		{
			$arFilter = array(
				"TYPE"	=> $arFields['C_TYPE'],
				"SID"	=> $arFields['SID'],
				"SITE"	=> $arFields['arrSITE'],
			);
			if (intval($id) > 0)
			{
				$arFilter['ID'] = '~'.intval($id);
			}

			$v1 = $v2 = $v3 = null;
			$z = CTicketDictionary::GetList($v1, $v2, $arFilter, $v3);
			if ($zr = $z->Fetch())
			{
				$arMsg[] = array(
							"id"=>"SID",
							"text"=> GetMessage(
									'SUP_SID_ALREADY_IN_USE',
									array(
										'#TYPE#' => CTicketDictionary::GetTypeNameByID($arFields['C_TYPE']),
										'#LANG#' => strlen($zr['LID']) > 0? $zr['LID']: $zr['SITE_ID'],
										'#RECORD_ID#' => $zr['ID'],
									)
							)
					);
			}
		}

		if (count($arMsg) > 0)
		{
			$e = new CAdminException($arMsg);
			$GLOBALS['APPLICATION']->ThrowException($e);
			return false;
		}

		return true;
	}

	function Add($arFields)
	{
		global $DB;
		$DB->StartTransaction();
		if (!CTicketDictionary::CheckFields($arFields))
		{
			$DB->Rollback();
			return false;
		}

		CTicketDictionary::__CleanDefault($arFields);

		$id = intval($DB->Add('b_ticket_dictionary', $arFields));
		if ($id > 0)
		{
			CTicketDictionary::__SetSites($id, $arFields);
			$DB->Commit();
			return $id;
		}

		$DB->Rollback();
		$GLOBALS['APPLICATION']->ThrowException(GetMessage('SUP_ERROR_ADD_DICTONARY'));
		return false;
	}

	function Update($id, $arFields)
	{
		global $DB;
		$DB->StartTransaction();
		$id = intval($id);
		if (!CTicketDictionary::CheckFields($arFields, $id))
		{
			$DB->Rollback();
			return false;
		}

		CTicketDictionary::__CleanDefault($arFields);

		$strUpdate = $DB->PrepareUpdate('b_ticket_dictionary', $arFields);
		$rs = $DB->Query('UPDATE b_ticket_dictionary SET ' . $strUpdate . ' WHERE ID=' . $id);
		if ($rs->AffectedRowsCount() > 0);
		{
			CTicketDictionary::__SetSites($id, $arFields);
			$DB->Commit();
			return true;
		}

		$DB->Rollback();
		$GLOBALS['APPLICATION']->ThrowException(GetMessage('SUP_ERROR_UPDATE_DICTONARY'));
		return false;
	}

	function __CleanDefault(&$arFields)
	{
		if (
				array_key_exists('SET_AS_DEFAULT', $arFields) && $arFields['SET_AS_DEFAULT'] == 'Y' &&
				array_key_exists('arrSITE', $arFields) && array_key_exists('C_TYPE',  $arFields)
			)
		{
			global $DB;
			$arFilter = array(
				'TYPE'	=> $arFields['C_TYPE'],
				'SITE'	=> $arFields['arrSITE']
				);
			$v1 = $v2 = $v3 = null;
			$z = CTicketDictionary::GetList($v1, $v2, $arFilter, $v3);
			while ($zr = $z->Fetch())
			{
				$DB->Update('b_ticket_dictionary', array('SET_AS_DEFAULT' => "'N'"), 'WHERE ID=' . $zr['ID'], '', false, false, false);
			}
		}
		elseif (array_key_exists('SET_AS_DEFAULT', $arFields))
		{
			$arFields['SET_AS_DEFAULT'] = 'N';
		}
	}

	function __SetSites($id, $arFields)
	{
		global $DB;
		if (!array_key_exists('arrSITE', $arFields))
		{
			return ;
		}
		$id = intval($id);
		$DB->Query('DELETE FROM b_ticket_dictionary_2_site WHERE DICTIONARY_ID=' . $id);
		if (is_array($arFields['arrSITE']) && count($arFields['arrSITE']) > 0)
		{
			foreach($arFields['arrSITE'] as $sid)
			{
				$strSql = "INSERT INTO b_ticket_dictionary_2_site (DICTIONARY_ID, SITE_ID) VALUES ($id, '".$DB->ForSql($sid, 2)."')";
				$DB->Query($strSql);
			}
		}
	}
}

?>

Zerion Mini Shell 1.0