Your IP : 3.145.91.78


Current Path : /home/bitrix/ext_www/ballu.in.ua/bitrix/modules/form/classes/general/
Upload File :
Current File : //home/bitrix/ext_www/ballu.in.ua/bitrix/modules/form/classes/general/form_callformoutput.php

<?
/**
 * Form output class - templates management & final output
 *
 */
class CAllFormOutput extends CFormOutput_old
{
	var $__cache_path = "";
	var $__cache_file_header = "<?if(!defined(\"B_PROLOG_INCLUDED\") || B_PROLOG_INCLUDED!==true)die();?><?=\$FORM->ShowFormHeader();?>";
	var $__cache_file_footer = "<?=\$FORM->ShowFormFooter();?>";

	var $__admin;

	var $WEB_FORM_ID;
	var $WEB_FORM_NAME;

	var $arParams;
	var $arForm;
	var $arQuestions;
	var $arAnswers;
	var $arDropDown;
	var $arMultiSelect;

	var $arrRESULT_PERMISSION = array();

	var $arrVALUES;

	var $RESULT_ID;
	var $arResult;

	var $strFormNote;

	var $F_RIGHT;
	var $CAPTCHACode;

	var $bSimple;

	var $__error_msg = "";
	var $__form_validate_errors = "";
	var $__cache_file_name;

	var $__form_image_cache = "";
	var $__form_image_path_cache = "";
	var $__form_input_caption_image_cache = array();
	var $__form_input_caption_image_path_cache = array();

	var $comp2 = false;

	var $bIsFormValidateErrors = false;

	function CAllFormOutput()
	{
		$this->__cache_path = BX_PERSONAL_ROOT."/tmp/form";
	}

	function InitializeTemplate($arParams, $arResult)
	{
		$this->WEB_FORM_ID = $arParams["WEB_FORM_ID"];
		$this->RESULT_ID = $arParams["RESULT_ID"];

		$this->arParams 	= $arParams;
		$this->arForm 		= $arResult["arForm"];
		$this->arQuestions 	= $arResult["arQuestions"];
		$this->arAnswers 	= $arResult["arAnswers"];
		$this->arDropDown 	= $arResult["arDropDown"];
		$this->arMultiSelect = $arResult["arMultiSelect"];

		$this->arrVALUES = $arResult["arrVALUES"];

		$this->F_RIGHT = $arResult["F_RIGHT"];
		if ($this->RESULT_ID)
		{
			if ($this->isAccessFormResult($arResult['arResultData']))
			{
				$this->arrRESULT_PERMISSION = CFormResult::GetPermissions($this->RESULT_ID, $v);
				$this->arResult = $arResult['arResultData'];
			}
		}

		$this->strFormNote = $arResult["FORM_NOTE"];
		$this->__form_validate_errors = $arResult["FORM_ERRORS"];
		$this->bIsFormValidateErrors = $arResult['isFormErrors'] == 'Y';

		$this->bSimple = (COption::GetOptionString("form", "SIMPLE", "Y") == "Y") ? true : false;

		$this->WEB_FORM_NAME = $arResult["arForm"]["SID"];

		if ($this->arForm["USE_CAPTCHA"] == "Y")
		{
			$this->CAPTCHACode = $arResult["CAPTCHACode"];
		}
	}

	function IncludeFormCustomTemplate()
	{
		if ($this->__check_form_cache())
		{
			$FORM =& $this; // create interface for template
			ob_start();
			eval('?>'.$this->__cache_tpl.'<?');
			$strReturn = ob_get_contents();
			ob_end_clean();

			return $strReturn;
		}
		else
		{
			return false;
		}
	}

	function IncludeFormTemplate()
	{
		global $APPLICATION;
		if ($this->__check_form_cache())
		{
			$APPLICATION->SetTemplateCSS("form/form.css");
			$FORM =& $this;
			eval($this->__cache_tpl);

			return true;
		}
		else
		{
			return false;
		}
	}

	function isStatisticIncluded()
	{
		return CModule::IncludeModule("statistic");
	}

	/**
	 * Private method used to check out for template and template cache file
	 * Returns true whether tpl file exists and puts its path to private
	 * property __cache_file_name. Otherwise returns false
	 *
	 * @return bool
	 */
	function __check_form_cache()
	{
		global $CACHE_MANAGER;

		// if no tpl at all - return false
		if (strlen($this->arForm["FORM_TEMPLATE"]) <= 0 || $this->arForm["USE_DEFAULT_TEMPLATE"] != "N")
		{
			$this->arForm["USE_DEFAULT_TEMPLATE"] = "Y";
			return false;
		}

		$this->__cache_tpl = '';

		$cache_dir = '/form/templates/'.$this->arForm['ID'];
		$cache_id = 'form|template|'.$this->arForm['ID'];

		$obCache = new CPHPCache();

		if ($obCache->InitCache(30*86400, $cache_id, $cache_dir))
		{
			$res = $obCache->GetVars();
			$this->__cache_tpl = $res['FORM_TEMPLATE'];
		}
		else
		{
			$obCache->StartDataCache();

			$CACHE_MANAGER->StartTagCache($cache_dir);

			$CACHE_MANAGER->RegisterTag('forms');
			$CACHE_MANAGER->RegisterTag('form_'.$this->arForm['ID']);

			$this->__cache_tpl = $res['FORM_TEMPLATE'] = $this->__cache_file_header.$this->arForm['FORM_TEMPLATE'].$this->__cache_file_footer;

			$CACHE_MANAGER->EndTagCache();
			$obCache->EndDataCache(array('FORM_TEMPLATE' => $this->__cache_tpl));
		}

		return true;
	}

	/*
	function __clear_form_cache_files()
	{
		$path = $_SERVER['DOCUMENT_ROOT'].$this->__cache_path;
		$fname_mask = "form_".$this->WEB_FORM_ID;

		if ($dh = @opendir($path))
		{
			while (($fname = @readdir($dh)) !== false)
			{
				if (substr($fname, 0, strlen($fname_mask)) == $fname_mask) @unlink($path."/".$fname);
			}
			closedir($dh);
		}
	}
	*/

	/**
	 * Public method used to check whether there were some form validation errors
	 * Use: <?if($FORM->isFormErrors()):?>There're some errors!<?endif?>
	 *
	 * @return bool
	 */
	function isFormErrors()
	{
		if (is_array($this->__form_validate_errors))
			return count($this->__form_validate_errors) > 0;
		else
			return strlen($this->__form_validate_errors) > 0;
	}

	/**
	 * Public method used to show formatted form errors
	 * Use: <?=$FORM->ShowFormErrors()?>
	 *
	 * @return string
	 */
	function ShowFormErrors()
	{
		ob_start();

		if ($this->arParams['USE_EXTENDED_ERRORS'] == 'N')
			ShowError($this->__form_validate_errors);
		elseif (is_array($this->__form_validate_errors))
			ShowError(implode('<br />', $this->__form_validate_errors));

		$ret = ob_get_contents();
		ob_end_clean();

		return $ret;
	}

	/**
	 * Public method used to show unformatted form errors
	 * Use: <font color="red"><?=$FORM->ShowFormErrorsText()?></font>
	 *
	 * @return string
	 */
	function ShowFormErrorsText()
	{
		if ($this->arParams['USE_EXTENDED_ERRORS'] == 'N')
			return $this->__form_validate_errors;
		else
			return implode('<br />', $this->__form_validate_errors);
	}

	/**
	 * Public: shows form note formatted string if any (like 'Changes saved')
	 *
	 * @return string
	 */
	function ShowFormNote()
	{
		ob_start();
		ShowNote($this->strFormNote);
		$ob = ob_get_contents();
		ob_end_clean();
		return $ob;
	}

	/**
	 * Public: shows form note unformatted string if any (like 'Changes saved')
	 *
	 * @return string
	 */
	function ShowFormNoteText()
	{
		return $this->strFormNote;
	}

	/**
	 * Public: check whether form has note string (like 'Changes saved')
	 *
	 * @return bool
	 */
	function isFormNote()
	{
		return strlen($this->strFormNote) > 0;
	}

	/**
	 * Get current form runtime error code string
	 * use $MESS from lang file to customize error messages
	 *
	 * @return string
	 */
	function ShowErrorMsg()
	{
		return $this->__error_msg;
	}

	/**
	 * Public method used to put form header (<form> tag and hidden fields)
	 * Added to form template automatically
	 *
	 * @return string
	 */
	function ShowFormHeader()
	{
		global $APPLICATION;

		$res = sprintf(
			"<form name=\"%s\" action=\"%s\" method=\"%s\" enctype=\"multipart/form-data\">",
			$this->arForm["SID"],
			//$APPLICATION->GetCurPage(),
			POST_FORM_ACTION_URI,
			"POST"
		);

		$res .= bitrix_sessid_post();

		$arHiddenInputs["WEB_FORM_ID"] = $this->WEB_FORM_ID;
		if (!empty($this->RESULT_ID)) $arHiddenInputs["RESULT_ID"] = $this->RESULT_ID;
		$arHiddenInputs["lang"] = LANGUAGE_ID;

		foreach ($arHiddenInputs as $name => $value)
		{
			$res .= sprintf(
			"<input type=\"hidden\" name=\"%s\" value=\"%s\" />",
			$name, $value
			);
		}

		return $res;
	}

	/**
	 * Public method used to put form footer (end <form> tag)
	 * Added to form template automatically
	 *
	 * @return string
	 */
	function ShowFormFooter()
	{
		return "</form>";
	}

	function __admin_GetInputType($FIELD_SID)
	{
		if (is_array($this->arAnswers[$FIELD_SID]))
		{
			$type = "";
			foreach ($this->arAnswers[$FIELD_SID] as $key=>$arAnswer)
			{
				if ($type == "")
				{
					$type = $arAnswer["FIELD_TYPE"];
				}
				elseif ($type != $arAnswer["FIELD_TYPE"])
					return "multiple";
			}

			return $type;
		}
		else return "none";
	}

	function __admin_GetInputAnswersStructure($FIELD_SID)
	{
		if (is_array($this->arAnswers[$FIELD_SID]))
		{
			$out = array();
			$csort_max = 0;
			foreach ($this->arAnswers[$FIELD_SID] as $key => $arAnswer)
			{
				$last = $arAnswer;
				if ($csort_max < $arAnswer["C_SORT"]) $csort_max = $arAnswer["C_SORT"];
				$ans = array();
				foreach ($arAnswer as $key=>$value)
				{
					$ans[] = $key.":'".CUtil::JSEscape($value)."'";
				}

				$ans[] = "ANS_NEW:false";

				$out[] = "{".implode(",", $ans)."}";
			}

			$imax = 0;
			if (in_array($last['FIELD_TYPE'], array('checkbox', 'dropdown', 'multiselect', 'radio'))) $imax = 5;
			for ($i=0; $i<$imax; $i++)
			{
				$ans = array();
				$csort_max += 100;

				foreach ($last as $key=>$value)
				{
					if ($key == "ACTIVE")
						$ans[] = $key.":'Y'";
					elseif ($key == "C_SORT")
						$ans[] = $key.":'".$csort_max."'";
					else
						$ans[] = $key.":'".(in_array($key, array('FIELD_TYPE', 'FIELD_ID', 'QUESTION_ID')) ? CUtil::JSEscape($value) : "")."'";
				}

				$ans[] = "ANS_NEW:true";

				$out[] = "{".implode(",", $ans)."}";
			}

			return "[".implode(",", $out)."]";
		}
		else
			return "[]";
	}

	/**
	 * Public method used to put input field title to template
	 * Use: <?=$FORM->ShowInputCaption('MYFIELD_5')?>
	 *
	 * @param string $FIELD_SID
	 * @param string $caption_css_class
	 * @return string
	 */
	function ShowInputCaption($FIELD_SID, $css_style = "")
	{
		$ret = "";
		if (empty($this->arQuestions[$FIELD_SID])) $ret = "";
		else
		{
			if ($this->arQuestions[$FIELD_SID]["TITLE_TYPE"]=="html")
			{
				$ret = $this->arQuestions[$FIELD_SID]["TITLE"].CForm::ShowRequired($this->arQuestions[$FIELD_SID]["REQUIRED"]);
			}
			else
			{
				if ($this->arQuestions[$FIELD_SID]["ADDITIONAL"]=="Y")
				{
					$ret = "<b>".$this->arQuestions[$FIELD_SID]["TITLE"]."</b>".CForm::ShowRequired($this->arQuestions[$FIELD_SID]["REQUIRED"]);
				}
				else
				{
					$ret = htmlspecialcharsbx($this->arQuestions[$FIELD_SID]["TITLE"]).CForm::ShowRequired($this->arQuestions[$FIELD_SID]["REQUIRED"]);
				}
			}
		}

		if (strlen($css_style) > 0) $ret = "<span class=\"".$css_style."\">".$ret."</span>";

		if (is_array($this->__form_validate_errors) && array_key_exists($FIELD_SID, $this->__form_validate_errors))
			$ret = '<span class="form-error-fld" title="'.htmlspecialcharsbx($this->__form_validate_errors[$FIELD_SID]).'"></span>'."\r\n".$ret;

		return $ret;
	}


	function __admin_ShowInputCaption($FIELD_SID, $caption_css_class = "", $unform = false)
	{
		if (empty($this->arQuestions[$FIELD_SID])) return "";
		if ($unform) return $this->arQuestions[$FIELD_SID]["TITLE"];
		if ($this->arQuestions[$FIELD_SID]["TITLE_TYPE"]=="html")
		{
			return $this->arQuestions[$FIELD_SID]["TITLE"]. CForm::ShowRequired($this->arQuestions[$FIELD_SID]["REQUIRED"]);
		}
		else
		{
			if ($this->arQuestions[$FIELD_SID]["ADDITIONAL"]=="Y")
			{
				return "<span class=\"".$caption_css_class."\"><b>".$this->arQuestions[$FIELD_SID]["TITLE"]."</b></span>".CForm::ShowRequired($this->arQuestions[$FIELD_SID]["REQUIRED"]);
			}
			else
			{
				return "<span class=\"".$caption_css_class."\">".$this->arQuestions[$FIELD_SID]["TITLE"]."</span>". CForm::ShowRequired($this->arQuestions[$FIELD_SID]["REQUIRED"]);
			}
		}
	}


	/**
	 * Public method used to put question image if exists onto form
	 * Use: <?=$FORM->ShowInputCaptionImage('MYFIELD_5', 50, 50, "hspace=\"0\" vspace=\"0\" align=\"left\" border=\"0\"", "", true, GetMessage("FORM_ENLARGE"))?>
	 * params like CFile::ShowImage()
	 * Returns image code if image exists and empty string otherwise
	 *
	 * @param string $FIELD_SID
	 * @param int $iMaxW
	 * @param int $iMaxH
	 * @param string $sParams
	 * @param string $strImageUrl
	 * @param bool $bPopup
	 * @param string $strPopupTitle

	 * @return string
	 */
	function ShowInputCaptionImage($FIELD_SID, $sAlign = "", $iMaxW="", $iMaxH="", $bPopup="N", $strPopupTitle="", $sHSpace = "", $sVSpace = "", $sBorder = "")
	{
		if ($this->isInputCaptionImage($FIELD_SID))
		{
			$arImageParams = array();

			if (strlen($sAlign) > 0) $arImageParams[] = sprintf("align=\"%s\"", $sAlign);
			if (strlen($sHSpace) > 0) $arImageParams[] = sprintf("hspace=\"%s\"", $sHSpace);
			if (strlen($sVSpace) > 0) $arImageParams[] = sprintf("vspace=\"%s\"", $sVSpace);
			if (strlen($sBorder) > 0) $arImageParams[] = sprintf("border=\"%s\"", $sBorder);
			else $arImageParams[] = "border=\"0\"";

			if (strlen($strPopupTitle) <= 0) $strPopupTitle = false;

			if (empty($this->__form_input_caption_image_cache[$FIELD_SID]))
			{
				$this->__form_input_caption_image_cache[$FIELD_SID] = CFile::ShowImage($this->arQuestions[$FIELD_SID]["IMAGE_ID"], $iMaxW, $iMaxH, implode(" ", $arImageParams), $strImageUrl, $bPopup == "Y", $strPopupTitle);
			}

			$ret = $this->__form_input_caption_image_cache[$FIELD_SID];

			if (strtoupper($sAlign) == "CENTER") $ret = "<div align=\"center\">".$ret."</div>";

			return $ret;
		}
		else
		{
			return "";
		}
	}

	/**
	 * Public method used to check wheter current question has image
	 * Use: <?=($FORM->isInputCaptionImage('MYFIELD_5') ? "image: ".$FORM->ShowInputCaptionImage('MYFIELD_5') : "no image")?>
	 *
	 * @param string $FIELD_SID
	 * @return bool
	 */
	function isInputCaptionImage($FIELD_SID)
	{
		return intval($this->arQuestions[$FIELD_SID]["IMAGE_ID"])>0;
	}

	/**
	 * Public method used to put input fields to template
	 * Use: <?=$FORM->ShowInput('MYFIELD_5')?>
	 *
	 * @param string $FIELD_SID
	 * @param string $caption_css_class
	 * @return string
	 */
	function ShowInput($FIELD_SID, $caption_css_class = '')
	{
		$arrVALUES = $this->arrVALUES;

		if (is_array($this->arAnswers[$FIELD_SID]))
		{
			$res = "";

			reset($this->arAnswers[$FIELD_SID]);
			if (is_array($this->arDropDown[$FIELD_SID])) reset($this->arDropDown[$FIELD_SID]);
			if (is_array($this->arMutiselect[$FIELD_SID])) reset($this->arMutiselect[$FIELD_SID]);

			while (list($key, $arAnswer) = each($this->arAnswers[$FIELD_SID]))
			{
				if ($arAnswer["FIELD_TYPE"]=="dropdown" && $show_dropdown=="Y") continue;
				if ($arAnswer["FIELD_TYPE"]=="multiselect" && $show_multiselect=="Y") continue;

				if ($key > 0) $res .= "<br />";

				switch ($arAnswer["FIELD_TYPE"])
				{
					case "radio":
						$ans_id = "form_checkbox_".$FIELD_SID."_".$arAnswer['ID'];
						$arAnswer['FIELD_PARAM'] .= ' id="'.$ans_id.'"';

						$value = CForm::GetRadioValue($FIELD_SID, $arAnswer, $arrVALUES);
						$input = CForm::GetRadioField(
							$FIELD_SID,
							$arAnswer["ID"],
							$value,
							$arAnswer["FIELD_PARAM"]
						);

						if (strlen($ans_id) > 0)
						{
							$res .= $input;
							$res .= "<label for=\"".$ans_id."\">";
							$res .= "<span class=\"".$caption_css_class."\">&nbsp;".$arAnswer["MESSAGE"]."</span></label>";
						}
						else
						{
							$res .= "<label>";
							$res .= $input;
							$res .= "<span class=\"".$caption_css_class."\">&nbsp;".$arAnswer["MESSAGE"]."</span></label>";
						}

						break;
					case "checkbox":

						$ans_id = "form_checkbox_".$FIELD_SID."_".$arAnswer['ID'];
						$arAnswer['FIELD_PARAM'] .= ' id="'.$ans_id.'"';

						$value = CForm::GetCheckBoxValue($FIELD_SID, $arAnswer, $arrVALUES);
						$input = CForm::GetCheckBoxField(
							$FIELD_SID,
							$arAnswer["ID"],
							$value,
							$arAnswer["FIELD_PARAM"]
						);

						if (strlen($ans_id) > 0)
						{
							$res .= $input;
							$res .= "<label for=\"".$ans_id."\">";
							$res .= "<span class=\"".$caption_css_class."\">&nbsp;".$arAnswer["MESSAGE"]."</span></label>";
						}
						else
						{
							$res .= "<label>";
							$res .= $input;
							$res .= "<span class=\"".$caption_css_class."\">&nbsp;".$arAnswer["MESSAGE"]."</span></label>";
						}

						break;
					case "dropdown":
						if ($show_dropdown!="Y")
						{
							$value = CForm::GetDropDownValue($FIELD_SID, $this->arDropDown, $arrVALUES);
							$res .= CForm::GetDropDownField(
								$FIELD_SID,
								$this->arDropDown[$FIELD_SID],
								$value,
								$arAnswer["FIELD_PARAM"]);
							$show_dropdown = "Y";
						}
						break;
					case "multiselect":
						if ($show_multiselect!="Y")
						{
							$value = CForm::GetMultiSelectValue($FIELD_SID, $this->arMultiSelect, $arrVALUES);
							$res .= CForm::GetMultiSelectField(
								$FIELD_SID,
								$this->arMultiSelect[$FIELD_SID],
								$value,
								$arAnswer["FIELD_HEIGHT"],
								$arAnswer["FIELD_PARAM"]);
							$show_multiselect = "Y";
						}
						break;
					case "text":
						if (strlen(trim($arAnswer["MESSAGE"]))>0)
						{
							$res .= "<span class=\"".$caption_css_class."\">".$arAnswer["MESSAGE"]."</span><br />";
						}

						$value = CForm::GetTextValue($arAnswer["ID"], $arAnswer, $arrVALUES);
						$res .= CForm::GetTextField(
							$arAnswer["ID"],
							$value,
							$arAnswer["FIELD_WIDTH"],
							$arAnswer["FIELD_PARAM"]);
						break;

					case "hidden":
						/*
						if (strlen(trim($arAnswer["MESSAGE"]))>0)
						{
							$res .= "<span class=\"".$caption_css_class."\">".$arAnswer["MESSAGE"]."</span><br />";
						}
						*/

						$value = CForm::GetHiddenValue($arAnswer["ID"], $arAnswer, $arrVALUES);
						$res .= CForm::GetHiddenField(
							$arAnswer["ID"],
							$value,
							$arAnswer["FIELD_PARAM"]);
						break;

					case "password":
						if (strlen(trim($arAnswer["MESSAGE"]))>0)
						{
							$res .= "<span class=\"".$caption_css_class."\">".$arAnswer["MESSAGE"]."</span><br />";
						}
						$value = CForm::GetPasswordValue($arAnswer["ID"], $arAnswer, $arrVALUES);
						$res .= CForm::GetPasswordField(
							$arAnswer["ID"],
							$value,
							$arAnswer["FIELD_WIDTH"],
							$arAnswer["FIELD_PARAM"]);
						break;
					case "email":
						if (strlen(trim($arAnswer["MESSAGE"]))>0)
						{
							$res .= "<span class=\"".$caption_css_class."\">".$arAnswer["MESSAGE"]."</span><br />";
						}
						$value = CForm::GetEmailValue($arAnswer["ID"], $arAnswer, $arrVALUES);
						$res .= CForm::GetEmailField(
							$arAnswer["ID"],
							$value,
							$arAnswer["FIELD_WIDTH"],
							$arAnswer["FIELD_PARAM"]);
						break;
					case "url":
						if (strlen(trim($arAnswer["MESSAGE"]))>0)
						{
							$res .= "<span class=\"".$caption_css_class."\">".$arAnswer["MESSAGE"]."</span><br />";
						}
						$value = CForm::GetUrlValue($arAnswer["ID"], $arAnswer, $arrVALUES);
						$res .= CForm::GetUrlField(
							$arAnswer["ID"],
							$value,
							$arAnswer["FIELD_WIDTH"],
							$arAnswer["FIELD_PARAM"]);
						break;
					case "textarea":
						if (strlen(trim($arAnswer["MESSAGE"]))>0)
						{
							$res .= "<span class=\"".$caption_css_class."\">".$arAnswer["MESSAGE"]."</span><br />";
						}
						$value = CForm::GetTextAreaValue($arAnswer["ID"], $arAnswer, $arrVALUES);
						$res .= CForm::GetTextAreaField(
							$arAnswer["ID"],
							$arAnswer["FIELD_WIDTH"],
							$arAnswer["FIELD_HEIGHT"],
							$arAnswer["FIELD_PARAM"],
							$value
							);
						break;
					case "date":
						if (strlen(trim($arAnswer["MESSAGE"]))>0)
						{
							$res .= "<span class=\"".$caption_css_class."\">".$arAnswer["MESSAGE"]." (".CSite::GetDateFormat("SHORT").")</span><br />";
						}
						$value = CForm::GetDateValue($arAnswer["ID"], $arAnswer, $arrVALUES);
						$res .= CForm::GetDateField(
							$arAnswer["ID"],
							$this->arForm["SID"],
							$value,
							$arAnswer["FIELD_WIDTH"],
							$arAnswer["FIELD_PARAM"]);
						break;
					case "image":
						if (strlen(trim($arAnswer["MESSAGE"]))>0)
						{
							$res .= "<span class=\"".$caption_css_class."\">".$arAnswer["MESSAGE"]."</span><br />";
						}

						if ($this->RESULT_ID)
						{
							if ($arFile = CFormResult::GetFileByAnswerID($this->RESULT_ID, $arAnswer["ID"]))
							{
								if (intval($arFile["USER_FILE_ID"])>0)
								{
									if ($arFile["USER_FILE_IS_IMAGE"]=="Y")
									{
										$res .= CFile::ShowImage($arFile["USER_FILE_ID"], 0, 0, "border=0", "", true);
										$res .= "<br />";
									} //endif;
								} //endif;
							} // endif
						} // endif

						$res .= CForm::GetFileField(
							$arAnswer["ID"],
							$arAnswer["FIELD_WIDTH"],
							"IMAGE",
							0,
							"",
							$arAnswer["FIELD_PARAM"]);
						break;
					case "file":
						if (strlen(trim($arAnswer["MESSAGE"]))>0)
						{
							$res .= "<span class=\"".$caption_css_class."\">".$arAnswer["MESSAGE"]."</span><br />";
						}

						if ($this->RESULT_ID)
						{
							if ($arFile = CFormResult::GetFileByAnswerID($this->RESULT_ID, $arAnswer["ID"]))
							{
								if (intval($arFile["USER_FILE_ID"])>0)
								{
									$res .= "<a title=\"".GetMessage("FORM_VIEW_FILE")."\" target=\"_blank\" class=\"tablebodylink\" href=\"/bitrix/tools/form_show_file.php?rid=".$this->RESULT_ID."&hash=".$arFile["USER_FILE_HASH"]."&lang=".LANGUAGE_ID."\">".htmlspecialcharsbx($arFile["USER_FILE_NAME"])."</a>&nbsp;(";
									$res .= CFile::FormatSize($arFile["USER_FILE_SIZE"]);
									$res .= ")&nbsp;&nbsp;[&nbsp;<a title=\"".str_replace("#FILE_NAME#", $arFile["USER_FILE_NAME"], GetMessage("FORM_DOWNLOAD_FILE"))."\" class=\"tablebodylink\" href=\"/bitrix/tools/form_show_file.php?rid=".$this->RESULT_ID."&hash=".$arFile["USER_FILE_HASH"]."&lang=".LANGUAGE_ID."&action=download\">".GetMessage("FORM_DOWNLOAD")."</a>&nbsp;]";
									$res .= "<br /><br />";
								} //endif;
							} //endif;
						}

						$res .= CForm::GetFileField(
							$arAnswer["ID"],
							$arAnswer["FIELD_WIDTH"],
							"FILE",
							0,
							"",
							$arAnswer["FIELD_PARAM"]);
						break;
				} //endswitch;
			} //endwhile;

			return $res;
		} //endif(is_array($arAnswers[$FIELD_SID]));
		elseif (is_array($this->arQuestions[$FIELD_SID]) && $this->arQuestions[$FIELD_SID]["ADDITIONAL"] == "Y")
		{
			$res = "";
			switch ($this->arQuestions[$FIELD_SID]["FIELD_TYPE"])
			{
				case "text":
					$value = CForm::GetTextAreaValue("ADDITIONAL_".$this->arQuestions[$FIELD_SID]["ID"], array(), $this->arrVALUES);
					$res .= CForm::GetTextAreaField(
						"ADDITIONAL_".$this->arQuestions[$FIELD_SID]["ID"],
						"60",
						"5",
						"",
						$value
						);
					break;
				case "integer":
					$value = CForm::GetTextValue("ADDITIONAL_".$this->arQuestions[$FIELD_SID]["ID"], array(), $this->arrVALUES);
					$res .= CForm::GetTextField(
						"ADDITIONAL_".$this->arQuestions[$FIELD_SID]["ID"],
						$value);
					break;
				case "date":
					$value = CForm::GetDateValue("ADDITIONAL_".$this->arQuestions[$FIELD_SID]["ID"], array(), $this->arrVALUES);
					$res .= CForm::GetDateField(
						"ADDITIONAL_".$this->arQuestions[$FIELD_SID]["ID"],
						$arForm["SID"],
						$value);
					break;
			} //endswitch;

			return $res;
		}
		else return "";
	}

	/**
	 * Public method used to check whether current form uses captcha.
	 * Use: <?if($FORM->isUseCaptcha()):?>form uses CAPTCHA<?else:?>form doesnt use CAPTCHA<?endif;?>
	 *
	 * @return bool
	 */
	function isUseCaptcha()
	{
		return $this->arForm["USE_CAPTCHA"] == "Y" && strlen($this->CAPTCHACode) > 0;
	}

	/**
	 * Public method used to put CAPTCHA image onto form.
	 * Use: <?=$FORM->ShowCaptchaImage()?>
	 *
	 * @return string
	 */
	function ShowCaptchaImage()
	{

		if ($this->isUseCaptcha())
			return "<input type=\"hidden\" name=\"captcha_sid\" value=\"".htmlspecialcharsbx($this->CAPTCHACode)."\" /><img src=\"/bitrix/tools/captcha.php?captcha_sid=".htmlspecialcharsbx($this->CAPTCHACode)."\" width=\"180\" height=\"40\" />";
		else return "";
	}

	/**
	 * Public method used to put CAPTCHA input field onto form.
	 * Use: <?=$FORM->ShowCaptchaField()?>
	 *
	 * @return string
	 */
	function ShowCaptchaField()
	{
		if ($this->isUseCaptcha())
			return "<input type=\"text\" name=\"captcha_word\" size=\"30\" maxlength=\"50\" value=\"\" class=\"inputtext\" />";
		else return "";
	}

	/**
	 * Public: show both CAPTCHA fields with default formating
	 *
	 * @return string
	 */
	function ShowCaptcha()
	{
		return $this->ShowCaptchaImage()."<br />".$this->ShowCaptchaField();
	}

	/**
	 * Public method used to put submit button onto form.
	 * Use: <?=$FORM->ShowSubmitButton()?>
	 *
	 * @return string
	 */
	function ShowSubmitButton($caption = "", $css_style = "")
	{
		$button_value = strlen(trim($caption)) > 0 ? trim($caption) : (strlen(trim($this->arForm["BUTTON"]))<=0 ? GetMessage("FORM_ADD") : $this->arForm["BUTTON"]);

		return "<input ".(intval($this->F_RIGHT)<10 ? "disabled" : "")." type=\"submit\" name=\"web_form_submit\" value=\"".htmlspecialcharsbx($button_value)."\"".(!empty($css_style) ? " class=\"".$css_style."\"" : "")." />";
	}

	/**
	 * Public method used to put apply button onto form.
	 * Use: <?=$FORM->ShowApplyButton()?>
	 *
	 * @return string
	 */
	function ShowApplyButton($caption = "", $css_style = "")
	{
		$button_value = strlen(trim($caption)) > 0 ? trim($caption) : GetMessage("FORM_APPLY");

		return "<input type=\"hidden\" name=\"web_form_apply\" value=\"Y\" /><input ".((intval($this->F_RIGHT)<10) ? "disabled" : "")." type=\"submit\" name=\"web_form_apply\" value=\"".htmlspecialcharsbx($button_value)."\"".(!empty($css_style) ? " class=\"".$css_style."\"" : "")." />";
	}

	/**
	 * Public method used to put reset button onto form.
	 * Use: <?=$FORM->ShowResetButton()?>
	 *
	 * @return string
	 */
	function ShowResetButton($caption = "", $css_style = "")
	{
		$button_value = strlen(trim($caption)) > 0 ? trim($caption) : GetMessage("FORM_RESET");

		return "<input type=\"reset\" value=\"".htmlspecialcharsbx($button_value)."\"".(!empty($css_style) ? " class=\"".$css_style."\"" : "")." />";
	}

	/**
	 * Public method used to put form description onto form page
	 * Use: <?=$FORM->ShowFormDescription()?>
	 *
	 * @return string
	 */
	function ShowFormDescription($css_style = "")
	{
		$ret = $this->arForm["DESCRIPTION_TYPE"] == "html" ? trim($this->arForm["DESCRIPTION"]) : nl2br(htmlspecialcharsbx(trim($this->arForm["DESCRIPTION"])));

		if (strlen($css_style) > 0) $ret = "<div class=\"".$css_style."\">".$ret."</div>";

		return $ret;
	}

	/**
	 * Public: check whether form has description
	 *
	 * @return bool
	 */
	function isFormDescription()
	{
		return strlen(trim($this->arForm["DESCRIPTION"])) > 0;
	}

	/**
	 * Public: shows form image; params like CFile::ShowImage()
	 * Use: <?=$FORM->ShowFormImage(250, 250, "hspace=\"0\" vspace=\"0\" align=\"left\" border=\"0\"", "", true, GetMessage("FORM_ENLARGE"))?>
	 * Returns image code if image exists and empty string otherwise
	 *
	 * @param int $iMaxW
	 * @param int $iMaxH
	 * @param string $sParams
	 * @param string $strImageUrl
	 * @param bool $bPopup
	 * @param mixed $strPopupTitle
	 * @return string
	 */
	//function ShowFormImage($iMaxW=0, $iMaxH=0, $sParams="border=\"0\"", $strImageUrl="", $bPopup=false, $strPopupTitle=false)
	function ShowFormImage($sAlign = "", $iMaxW="", $iMaxH="", $bPopup="N", $strPopupTitle="", $sHSpace = "", $sVSpace = "", $sBorder = "")
	{
		if ($this->isFormImage())
		{
			$arImageParams = array();

			if (strlen($sAlign) > 0) $arImageParams[] = sprintf("align=\"%s\"", $sAlign);
			if (strlen($sHSpace) > 0) $arImageParams[] = sprintf("hspace=\"%s\"", $sHSpace);
			if (strlen($sVSpace) > 0) $arImageParams[] = sprintf("vspace=\"%s\"", $sVSpace);
			if (strlen($sBorder) > 0) $arImageParams[] = sprintf("border=\"%s\"", $sBorder);
			else $arImageParams[] = "border=\"0\"";

			if (strlen($strPopupTitle) <= 0) $strPopupTitle = false;

			if (strlen($this->__form_image_cache) <= 0)
			{
				$this->__form_image_cache = CFile::ShowImage($this->arForm["IMAGE_ID"], $iMaxW, $iMaxH, implode(" ", $arImageParams), $strImageUrl, $bPopup == "Y", $strPopupTitle);
			}

			$ret = $this->__form_image_cache;

			if (strtoupper($sAlign) == "CENTER") $ret = "<div align=\"center\">".$ret."</div>";

			$this->__form_image_cache = $ret;

			return $ret;
		}
	}

	/**
	 * Public: check if form has image
	 *
	 * @return bool
	 */
	function isFormImage()
	{
		return intval($this->arForm["IMAGE_ID"])>0;
	}

	/**
	 * Public: shows current form title
	 *
	 * @return string
	 */
	function ShowFormTitle($css_style = "")
	{
		$ret = trim(htmlspecialcharsbx($this->arForm["NAME"]));

		if (strlen($css_style) > 0) $ret = "<div class=\"".$css_style."\">".$ret."</div>";

		return $ret;
	}

	/**
	 * Public: check whether current form has title string
	 *
	 * @return bool
	 */
	function isFormTitle()
	{
		return strlen(trim($this->arForm["NAME"])) > 0;
	}

	function ShowResultStatusForm()
	{
		if ($this->isResultStatusChangeAccess())
		{
			return SelectBox("status_".$this->arForm["SID"], CFormStatus::GetDropdown($this->WEB_FORM_ID, array("MOVE"), $this->arResult["USER_ID"]), " ", "", "");
		}
		else
			return "";
	}

	function ShowResultStatus($bNotShowCSS = "N")
	{
		if (intval($this->RESULT_ID) <= 0) return "";
		if ($bNotShowCSS != "N")
		{
			return "<span class='".$this->arResult["STATUS_CSS"]."'>".$this->arResult["STATUS_TITLE"]."</span>";
		}
		else
		{
			return $this->arResult["STATUS_TITLE"];
		}
	}

	function ShowResultStatusText()
	{
		return $this->arResult["STATUS_TITLE"];
	}

	function GetResultStatusCSSClass()
	{
		return $this->arResult["STATUS_CSS"];
	}

	function isResultStatusChangeAccess()
	{
		return (!empty($this->RESULT_ID) && in_array("EDIT", $this->arrRESULT_PERMISSION));
	}

	function ShowDateFormat($css_style = "")
	{
		$format = CLang::GetDateFormat("SHORT");

		if (strlen($css_style) > 0) return '<span class="'.$css_style.'">'.$format.'</span>';
		else return $format;
	}

	/**
	 * Public method used to show "required" label (red '*')
	 * Use: <?=$FORM->ShowRequired()?>
	 *
	 * @return string
	 */
	function ShowRequired()
	{
		return CForm::ShowRequired("Y");
	}

	function CheckTemplate($FORM_TEMPLATE, &$arrFS)
	{
		if (count($arrFS) > 0)
		{
			$arFldSIDs = array();
			$arInactiveFldSIDs = array();
			$str = "";
			foreach ($arrFS as $key => $arField)
			{
				$cur_str = "";
				if (strlen(trim($arField["FIELD_SID"]))<=0) $cur_str .= GetMessage("FORM_ERROR_FORGOT_SID")."<br>";
				elseif (preg_match("/[^A-Za-z_01-9]/",$arField["FIELD_SID"])) $cur_str .= GetMessage("FORM_ERROR_INCORRECT_SID")."<br>";
				elseif (in_array($arField['FIELD_SID'], $arFldSIDs))
				{
					$key = array_search($arField['FIELD_SID'], $arInactiveFldSIDs);
					if ($key)
					{
						unset($arrFS[$key]);
						unset($arInactiveFldSIDs[$key]);
						unset($arFldSIDs[$key]);
					}
					else
					{
						$s = str_replace("#TYPE#", GetMessage("FORM_TYPE_FIELD"), GetMessage("FORM_ERROR_WRONG_SID"));
						$s = str_replace("#ID#",$zr["ID"],$s);
						$cur_str .= $s."<br>";
					}
				}
				else
				{
					$arFldSIDs[$key] = $arField["FIELD_SID"];
					if (!CForm::isFieldInTemplate($arField["FIELD_SID"], $FORM_TEMPLATE))
						$arInactiveFldSIDs[$key] = $arField["FIELD_SID"];
				}

				if (!empty($cur_str))
				{
					$str .= $cur_str;
				}
			}

			if (!empty($str))
			{
				$_GLOBALS["strError"] .= $str;
				return false;
			}
			else return true;
		}
		return true;
	}

	function PrepareFormData($arrFS)
	{
		$out = "";
		$i = 0;
		if (is_array($arrFS))
		{
			foreach($arrFS as $key=>$arField)
			{
				if ($arField['isNew'] == "Y") $arField["CAPTION"] = $arField["isHTMLCaption"] == "Y" ? $arField["CAPTION_UNFORM"] : "<span class=\"tablebodytext\">".$arField["CAPTION_UNFORM"]."</span>".($arField["isRequired"] ? CFormOutput::ShowRequired() : "");
?>
arrInputObjects[<?=$i++?>] = new CFormAnswer(
	'<?=$arField["FIELD_SID"]?>',
	'<?=CUtil::JSEscape($arField["CAPTION"])?>',
	'<?=$arField["isHTMLCaption"]?>',
	'<?=CUtil::JSEscape("'", "\\'", $arField["CAPTION_UNFORM"])?>',
	'<?=$arField["isRequired"]?>',
	'<?=$arField["type"]?>',
	[<?
				foreach ($arField["structure"] as $key=>$arQuestion)
				{
					$arr = array();
					$cnt = 0;
					foreach ($arQuestion as $q_key=>$value)
					{
						$arr[] = $q_key.":'".($q_key == "ANS_NEW" ? ($value == "Y" ? 'true' : 'false') : str_replace("'", "\\'", $value))."'";
						if ($q_key == "ANS_NEW" && $value) $cnt++;
					}

					if ($key != 0) echo ",";
					echo "{";
					echo implode(",", $arr);
					echo "}";
				}
	?>],
	<?=$arField["isNew"] == "Y" ? 'true' : 'false'?>,
	<?=$arField["ID"] ? $arField["ID"] : '_global_newinput_counter++'?>,
	'<?=$arField["inResultsTable"]?>',
	'<?=$arField["inExcelTable"]?>'
);

<?
				if ($cnt > 0) echo "_global_newanswer_counter += ".$cnt.";\n";
			}
		}
	}

	function setError($error)
	{
		$this->__error_msg = $error;
	}

	function isAccessFormParams()
	{
		return $this->F_RIGHT >= 25;
	}

	function isAccessForm()
	{
		return $this->F_RIGHT >= 10;
	}

	function isAccessFormResult($arrResult)
	{
		global $USER;

		return $this->F_RIGHT>=20 || ($this->F_RIGHT>=15 && $USER->GetID()==$arrResult["USER_ID"]);
	}

	function isAccessFormResultEdit()
	{
		return in_array("EDIT",$this->arrRESULT_PERMISSION);
	}

	function isAccessFormResultView()
	{
		return in_array("VIEW",$this->arrRESULT_PERMISSION);
	}

	function isAccessFormResultList()
	{
		return $this->F_RIGHT >= 15;
	}

	function getFormImagePath()
	{
		if (!$this->isFormImage()) return false;
		if (empty($this->__form_image_path_cache))
			$this->__form_image_path_cache = CFile::GetPath($this->arForm["IMAGE_ID"]);

		return $this->__form_image_path_cache;
	}

	function getInputCaptionImagePath($FIELD_SID)
	{
		if (!$this->isInputCaptionImage($FIELD_SID)) return false;
		if (empty($this->__form_input_caption_image_path_cache[$FIELD_SID]))
			$this->__form_input_caption_image_path_cache[$FIELD_SID] = CFile::GetPath($this->arQuestions[$FIELD_SID]["IMAGE_ID"]);

		return $this->__form_input_caption_image_path_cache[$FIELD_SID];
	}

	function setInputDefaultValue($FIELD_SID, $value, $ANSWER_ID = false)
	{
		if (is_array($this->arAnswers) && is_array($this->arAnswers[$FIELD_SID]))
		{
			$type = $this->__admin_GetInputType($FIELD_SID);
			if ($type == "multiple" || $type == "file" || $type == "image")
			{
				return;
			}

			if (intval($ANSWER_ID) == 0)
			{
				if ($type == "checkbox" || $type == "multiselect")
				{
					if (is_array($value)) $this->arrVALUES["form_".$type."_".$FIELD_SID] = $value;
				}
				elseif ($type == "radio" || $type == "dropdown")
				{
					if (!is_array($value)) $this->arrVALUES["form_".$type."_".$FIELD_SID] = $value;
				}
				else
				{
					$ANSWER_ID = $this->arAnswers[$FIELD_SID][0]["ID"];
					$this->arrVALUES["form_".$type."_".$ANSWER_ID] = $value;
				}
			}
			elseif (is_array($ANSWER_ID))
			{
				if ($type == "checkbox" || $type == "multiselect")
					$this->arrVALUES["form_".$type."_".$FIELD_SID] = $value == "N" ? array() : $ANSWER_ID;
			}
			else
			{
				if ($type == "radio" || $type == "dropdown")
					$this->arrVALUES["form_".$type."_".$FIELD_SID] = $value == "N" ? "" : $ANSWER_ID;
				else
					$this->arrVALUES["form_".$type."_".$ANSWER_ID] = $value;
			}
		}
	}
}
?>