PageRenderTime 48ms CodeModel.GetById 11ms RepoModel.GetById 1ms app.codeStats 0ms

/components/bitrix/form.result.view/component.php

https://gitlab.com/alexprowars/bitrix
PHP | 409 lines | 333 code | 62 blank | 14 comment | 77 complexity | 4a89bd5d4d8ed9289b217726a4e18780 MD5 | raw file
  1. <?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?><?
  2. if (CModule::IncludeModule("form"))
  3. {
  4. $arDefaultComponentParameters = array(
  5. "RESULT_ID" => $_REQUEST["RESULT_ID"],
  6. "SHOW_ADDITIONAL" => "N",
  7. "SHOW_ANSWER_VALUE" => "N",
  8. "SHOW_STATUS" => "Y",
  9. "EDIT_URL" => $arParams["SEF_MODE"] == "Y" ? "edit/#RESULT_ID#/" : "result_edit.php",
  10. );
  11. foreach ($arDefaultComponentParameters as $key => $value) if (!is_set($arParams, $key)) $arParams[$key] = $value;
  12. $arDefaultUrl = array(
  13. 'EDIT_URL' => $arParams["SEF_MODE"] == "Y" ? "edit/#RESULT_ID#/" : "result_edit.php",
  14. );
  15. foreach ($arDefaultUrl as $action => $url)
  16. {
  17. if ($arParams[$action.'_URL'] == '')
  18. {
  19. if (!is_set($arParams, 'SHOW_'.$action.'_PAGE') || $arParams['SHOW_'.$action.'_PAGE'] == 'Y')
  20. $arParams[$action.'_URL'] = $url;
  21. }
  22. }
  23. if ($arParams["SEF_MODE"] == "Y" && empty($arParams["RESULT_ID"]))
  24. {
  25. $arDefaultUrlTemplates404 = array(
  26. "view" => "#RESULT_ID#/",
  27. );
  28. $arDefaultVariableAliases404 = array(
  29. );
  30. $arDefaultVariableAliases = array();
  31. $arComponentVariables = array("RESULT_ID");
  32. $arUrlTemplates = CComponentEngine::MakeComponentUrlTemplates($arDefaultUrlTemplates404, $arParams["SEF_URL_TEMPLATES"]);
  33. $arVariableAliases = CComponentEngine::MakeComponentVariableAliases($arDefaultVariableAliases404, $arParams["VARIABLE_ALIASES"]);
  34. CComponentEngine::ParseComponentPath($arParams["SEF_FOLDER"], $arUrlTemplates, $arVariables);
  35. $arParams["WEB_FORM_ID"] = intval($arVariables["WEB_FORM_ID"]);
  36. $arParams["RESULT_ID"] = intval($arVariables["RESULT_ID"]);
  37. }
  38. $arParams['NAME_TEMPLATE'] = empty($arParams['NAME_TEMPLATE'])
  39. ? (method_exists('CSite', 'GetNameFormat') ? CSite::GetNameFormat() : "#NAME# #LAST_NAME#")
  40. : $arParams["NAME_TEMPLATE"];
  41. $arResult["FORM_SIMPLE"] = (COption::GetOptionString("form", "SIMPLE", "Y") == "Y") ? true : false;
  42. $arResult["bAdmin"] = defined("ADMIN_SECTION") && ADMIN_SECTION===true ? "Y" : "N";
  43. if ($arResult["bAdmin"] == "Y")
  44. {
  45. $FORM_RIGHT = $APPLICATION->GetGroupRight("form");
  46. if($FORM_RIGHT<="D") $APPLICATION->AuthForm(GetMessage("ACCESS_DENIED"));
  47. }
  48. // if there's result ID try to get form ID
  49. if (intval($arParams["RESULT_ID"]) > 0)
  50. {
  51. $DBRes = CFormResult::GetByID($arParams["RESULT_ID"]);
  52. if ($arResultData = $DBRes->Fetch())
  53. {
  54. $arParams["WEB_FORM_ID"] = intval($arResultData["FORM_ID"]);
  55. }
  56. }
  57. // if there's no WEB_FORM_ID, try to get it from $_REQUEST;
  58. if (intval($arParams["WEB_FORM_ID"]) <= 0)
  59. $arParams["WEB_FORM_ID"] = intval($_REQUEST["WEB_FORM_ID"]);
  60. // check WEB_FORM_ID and get web form data
  61. $arParams["WEB_FORM_ID"] = CForm::GetDataByID($arParams["WEB_FORM_ID"], $arResult["arForm"], $arResult["arQuestions"], $arResult["arAnswers"], $arResult["arDropDown"], $arResult["arMultiSelect"], $arResult["bAdmin"] == "Y" || $arParams["SHOW_ADDITIONAL"] == "Y" || $arParams["EDIT_ADDITIONAL"] == "Y" ? "ALL" : "N");
  62. $arResult["WEB_FORM_NAME"] = $arResult["arForm"]["SID"];
  63. // if wrong WEB_FORM_ID return error;
  64. if ($arParams["WEB_FORM_ID"] > 0)
  65. {
  66. // insert chain item
  67. if ($arParams["CHAIN_ITEM_TEXT"] <> '')
  68. {
  69. $APPLICATION->AddChainItem($arParams["CHAIN_ITEM_TEXT"], $arParams["CHAIN_ITEM_LINK"]);
  70. }
  71. // check web form rights;
  72. $arResult["F_RIGHT"] = intval(CForm::GetPermission($arParams["WEB_FORM_ID"]));
  73. // in no form access - return error
  74. if ($arResult["F_RIGHT"] >= 15)
  75. {
  76. if ($arParams["RESULT_ID"])
  77. {
  78. if ($arResult["F_RIGHT"]>=20 || ($arResult["F_RIGHT"]>=15 && $USER->GetID()==$arResultData["USER_ID"]))
  79. {
  80. $arResult["arrRESULT_PERMISSION"] = CFormResult::GetPermissions($arParams["RESULT_ID"]);
  81. // check result rights
  82. if (!in_array("VIEW",$arResult["arrRESULT_PERMISSION"]))
  83. {
  84. $arResult["ERROR"] = "FORM_RESULT_ACCESS_DENIED";
  85. }
  86. else
  87. {
  88. if (!$arResultData)
  89. {
  90. $z = CFormResult::GetByID($arParams["RESULT_ID"]);
  91. $arResult["arResultData"] = $z->Fetch();
  92. }
  93. else
  94. {
  95. $arResult["arResultData"] = $arResultData;
  96. }
  97. if ($arResult["arResultData"])
  98. {
  99. CForm::GetResultAnswerArray($arParams["WEB_FORM_ID"], $arResult["arrResultColumns"], $arResult["arrVALUES"], $arResult["arrResultAnswersSID"], array("RESULT_ID" => $arParams["RESULT_ID"]));
  100. $arResult["arrVALUES"] = $arResult["arrVALUES"][$arParams["RESULT_ID"]];
  101. }
  102. else
  103. {
  104. $arResult["arrVALUES"] = CFormResult::GetDataByIDForHTML($arResult["RESULT_ID"], $arParams["SHOW_ADDITIONAL"]);
  105. }
  106. }
  107. }
  108. else
  109. {
  110. $arResult["ERROR"] = "FORM_ACCESS_DENIED";
  111. }
  112. }
  113. else
  114. {
  115. $arResult["ERROR"] = "FORM_RECORD_NOT_FOUND";
  116. }
  117. }
  118. else
  119. {
  120. $arResult["ERROR"] = "FORM_ACCESS_DENIED";
  121. }
  122. }
  123. else
  124. {
  125. $arResult["ERROR"] = "FORM_NOT_FOUND";
  126. } // endif ($WEB_FORM_ID>0);
  127. if ($arResult["ERROR"] == '')
  128. {
  129. $arParams["SHOW_STATUS"] = ($arParams["SHOW_STATUS"]=="Y" && !$arResult["FORM_SIMPLE"] == "Y") ? "Y" : "N";
  130. // append view data to arResult
  131. $arResult = array_merge(
  132. $arResult,
  133. array(
  134. "RESULT_ID" => $arParams["RESULT_ID"], // web form id
  135. "WEB_FORM_ID" => $arParams["WEB_FORM_ID"], // web form id
  136. "isAccessFormParams" => $arResult["F_RIGHT"] >= 25 ? "Y" : "N",
  137. "isAccessFormResultEdit" => in_array("EDIT", $arResult["arrRESULT_PERMISSION"]) ? "Y" : "N",
  138. "isStatisticIncluded" => CModule::IncludeModule("statistic") ? "Y" : "N",
  139. "FORM_TITLE" => trim(htmlspecialcharsbx($arResult["arForm"]["NAME"])),
  140. "FORM_DESCRIPTION" => $arResult["arForm"]["DESCRIPTION_TYPE"] == "html" ? trim($arParams["arForm"]["DESCRIPTION"]) : nl2br(htmlspecialcharsbx(trim($arParams["arForm"]["DESCRIPTION"]))),
  141. "isFormImage" => intval($arResult["arForm"]["IMAGE_ID"]) > 0 ? "Y" : "N",
  142. "REQUIRED_SIGN" => CForm::ShowRequired("Y"), // "required" sign - for manual template customization
  143. "RESULT_STATUS" => "<span class='".$arResult["arResultData"]["STATUS_CSS"]."'>".$arResult["arResultData"]["STATUS_TITLE"]."</span>", // formatted result status
  144. "RESULT_STATUS_CSS" => $arResult["arResultData"]["STATUS_CSS"],
  145. "RESULT_STATUS_TITLE" => $arResult["arResultData"]["STATUS_TITLE"],
  146. "RESULT_USER_AUTH" => $arResult["arResultData"]["USER_AUTH"] == "Y" ? "Y" : "N",
  147. "RESULT_DATE_CREATE" => $arResult["arResultData"]["DATE_CREATE"],
  148. "RESULT_TIMESTAMP_X" => $arResult["arResultData"]["TIMESTAMP_X"],
  149. "RESULT_STAT_GUEST_ID" => $arResult["arResultData"]["STAT_GUEST_ID"],
  150. "RESULT_STAT_SESSION_ID" => $arResult["arResultData"]["STAT_SESSION_ID"],
  151. )
  152. );
  153. $arResult["isFormTitle"] = $arResult["FORM_TITLE"] <> '' ? "Y" : "N";
  154. $arResult["isFormDescription"] = $arResult["FORM_DESCRIPTION"] <> '' ? "Y" : "N";
  155. //append user data to arResult
  156. if (intval($arResult["arResultData"]["USER_ID"])>0)
  157. {
  158. $rsUser = CUser::GetByID($arResult["arResultData"]["USER_ID"]);
  159. $arUser = $rsUser->Fetch();
  160. $arResult["RESULT_USER_ID"] = $arResult["arResultData"]["USER_ID"];
  161. $arResult["RESULT_USER_LOGIN"] = $arUser["LOGIN"];
  162. $arResult["RESULT_USER_EMAIL"] = $arUser["USER_EMAIL"];
  163. $arResult["RESULT_USER_FIRST_NAME"] = $arUser["NAME"];
  164. $arResult["RESULT_USER_LAST_NAME"] = $arUser["LAST_NAME"];
  165. $arResult["RESULT_USER_SECOND_NAME"] = $arUser["SECOND_NAME"];
  166. }
  167. // append result data to arResult
  168. $arResult["RESULT"] = array();
  169. foreach ($arResult["arQuestions"] as $arQuestion)
  170. {
  171. $FIELD_SID = $arQuestion["SID"];
  172. $arResult["RESULT"][$FIELD_SID] = array(
  173. "CAPTION" => // field caption
  174. $arResult["arQuestions"][$FIELD_SID]["TITLE_TYPE"] == "html" ?
  175. $arResult["arQuestions"][$FIELD_SID]["TITLE"] :
  176. nl2br(htmlspecialcharsbx($arResult["arQuestions"][$FIELD_SID]["TITLE"])),
  177. "IS_HTML_CAPTION" => $arResult["arQuestions"][$FIELD_SID]["TITLE_TYPE"] == "html" ? "Y" : "N",
  178. "REQUIRED" => $arResult["arQuestions"][$FIELD_SID]["REQUIRED"] == "Y" ? "Y" : "N",
  179. "IS_INPUT_CAPTION_IMAGE" => intval($arResult["arQuestions"][$FIELD_SID]["IMAGE_ID"]) > 0 ? "Y" : "N",
  180. "ANSWER_VALUE" => $arResult["arrVALUES"][$arQuestion["ID"]], // answer data - for manual customization
  181. );
  182. $out = "";
  183. $arResultAnswers = array();
  184. if (is_array($arResult["RESULT"][$FIELD_SID]["ANSWER_VALUE"]))
  185. {
  186. foreach ($arResult["RESULT"][$FIELD_SID]["ANSWER_VALUE"] as $key => $arrA)
  187. {
  188. $arResultAnswer = array();
  189. if (trim($arrA["USER_TEXT"]) <> '')
  190. {
  191. if (intval($arrA["USER_FILE_ID"])>0)
  192. {
  193. if ($arrA["USER_FILE_IS_IMAGE"]=="Y" && $USER->IsAdmin())
  194. {
  195. $arResultAnswer["USER_TEXT"] = htmlspecialcharsbx($arrA["USER_TEXT"]);
  196. }
  197. }
  198. else
  199. {
  200. $arResultAnswer["USER_TEXT"] = TxtToHTML(trim($arrA["USER_TEXT"]),true,50);
  201. }
  202. }
  203. if (trim($arrA["ANSWER_TEXT"]) <> '')
  204. {
  205. $arResultAnswer["ANSWER_TEXT"] = TxtToHTML(trim($arrA["ANSWER_TEXT"]),true,50);
  206. }
  207. if (trim($arrA["USER_DATE"]) <> '')
  208. {
  209. $arResultAnswer["USER_TEXT"] = $DB->FormatDate(
  210. $arrA["USER_DATE"],
  211. FORMAT_DATETIME,
  212. (MakeTimeStamp($arrA["USER_TEXT"])+date('Z'))%86400 == 0 ? FORMAT_DATE : FORMAT_DATETIME
  213. );
  214. }
  215. if ($arParams["SHOW_ANSWER_VALUE"]=="Y")
  216. {
  217. $arResultAnswer["ANSWER_VALUE"] = TxtToHTML(trim($arrA["ANSWER_VALUE"]),true,50);
  218. }
  219. if (intval($arrA["USER_FILE_ID"])>0)
  220. {
  221. if ($arrA["USER_FILE_IS_IMAGE"]=="Y")
  222. {
  223. $arResultAnswer["ANSWER_IMAGE"] = array();
  224. $arResultAnswer["ANSWER_IMAGE"]["ID"] = $arrA["USER_FILE_ID"];
  225. $arImage = CFile::GetFileArray($arrA["USER_FILE_ID"]);
  226. $arResultAnswer["ANSWER_IMAGE"]["URL"] = $arImage["SRC"];
  227. if(mb_substr($arImage["SRC"], 0, 1) == "/")
  228. {
  229. $arSize = CFile::GetImageSize($_SERVER["DOCUMENT_ROOT"].$arImage["SRC"]);
  230. if (is_array($arSize))
  231. {
  232. list(
  233. $arResultAnswer["ANSWER_IMAGE"]["WIDTH"],
  234. $arResultAnswer["ANSWER_IMAGE"]["HEIGHT"],
  235. $arResultAnswer["ANSWER_IMAGE"]["TYPE"],
  236. $arResultAnswer["ANSWER_IMAGE"]["ATTR"]
  237. ) = $arSize;
  238. }
  239. }
  240. else
  241. {
  242. $arResultAnswer["ANSWER_IMAGE"]["WIDTH"] = $arImage["WIDTH"];
  243. $arResultAnswer["ANSWER_IMAGE"]["HEIGHT"] = $arImage["HEIGHT"];
  244. $arResultAnswer["ANSWER_IMAGE"]["TYPE"] = false;
  245. $arResultAnswer["ANSWER_IMAGE"]["ATTR"] = false;
  246. }
  247. $out = "";
  248. $arQuestion = $arResult["arQuestions"][$FIELD_SID];
  249. $arrResultAnswer = $arResult["arrVALUES"][$arQuestion["ID"]];
  250. if (is_array($arrResultAnswer))
  251. {
  252. foreach ($arrResultAnswer as $key => $arrAns)
  253. {
  254. if (trim($arrAns["USER_TEXT"]) <> '')
  255. {
  256. if (intval($arrAns["USER_FILE_ID"])>0)
  257. {
  258. if ($arrAns["USER_FILE_IS_IMAGE"]=="Y" && $USER->IsAdmin())
  259. $out .= htmlspecialcharsbx($arrAns["USER_TEXT"])."<br />";
  260. }
  261. else $out .= TxtToHTML($arrAns["USER_TEXT"],true,50)."<br />";
  262. }
  263. if (trim($arrAns["ANSWER_TEXT"]) <> '')
  264. {
  265. $answer = "[<span class='form-anstext'>".TxtToHTML($arrAns["ANSWER_TEXT"],true,50)."</span>]";
  266. if (trim($arrAns["ANSWER_VALUE"]) <> '') $answer .= "&nbsp;"; else $answer .= "<br />";
  267. $out .= $answer;
  268. }
  269. if ($arParams["SHOW_ANSWER_VALUE"]=="Y")
  270. {
  271. if (trim($arrAns["ANSWER_VALUE"]) <> '')
  272. $out .= "(<span class='form-ansvalue'>".TxtToHTML($arrAns["ANSWER_VALUE"],true,50)."</span>)<br />";
  273. }
  274. if (intval($arrAns["USER_FILE_ID"])>0)
  275. {
  276. if ($arrAns["USER_FILE_IS_IMAGE"]=="Y")
  277. {
  278. $out .= CFile::ShowImage($arrAns["USER_FILE_ID"], 0, 0, "border=0", "", true);
  279. }
  280. else
  281. {
  282. $file_link = "/bitrix/tools/form_show_file.php?rid=".$arParams["RESULT_ID"]."&hash=".$arrAns["USER_FILE_HASH"]."&lang=".LANGUAGE_ID;
  283. $out .= "<a title=\"".GetMessage("FORM_VIEW_FILE")."\" target=\"_blank\" href=\"".$file_link."\">".htmlspecialcharsbx($arrAns["USER_FILE_NAME"])."</a><br />(";
  284. $out .= CFile::FormatSize($arrAns["USER_FILE_SIZE"]);
  285. $out .= ")<br />[&nbsp;<a title=\"".str_replace("#FILE_NAME#", $arrAns["USER_FILE_NAME"], GetMessage("FORM_DOWNLOAD_FILE"))."\" href=\"".$file_link."&action=download\">".GetMessage("FORM_DOWNLOAD")."</a>&nbsp;]";
  286. } //endif;
  287. } //endif;
  288. } //endforeach;
  289. } //endif;
  290. $arResultAnswer["ANSWER_IMAGE"]["HTML_CODE"] = $out;
  291. }
  292. else
  293. {
  294. $arResultAnswer["ANSWER_FILE"] = array();
  295. $arResultAnswer["ANSWER_FILE"]["URL"] = "/bitrix/tools/form_show_file.php?rid=".$arParams["RESULT_ID"]."&hash=".$arrA["USER_FILE_HASH"]."&lang=".LANGUAGE_ID;
  296. $arResultAnswer["ANSWER_FILE"]["NAME"] = htmlspecialcharsbx($arrA["USER_FILE_NAME"]);
  297. $arResultAnswer["ANSWER_FILE"]["SIZE"] = $arrA["USER_FILE_SIZE"];
  298. $arResultAnswer["ANSWER_FILE"]["SIZE_FORMATTED"] = CFile::FormatSize($arrA["USER_FILE_SIZE"]);
  299. } //endif;
  300. } //endif;
  301. $arResultAnswers[] = $arResultAnswer;
  302. } //endforeach;
  303. } //endif (is_array());
  304. $arResult["RESULT"][$FIELD_SID]["ANSWER_VALUE"] = $arResultAnswers;//count($arResultAnswers) > 1 ? $arResultAnswers : $arResultAnswers[0];
  305. // field image. not used in default template, but may be inserted in custom
  306. if (intval($arResult["arQuestions"][$FIELD_SID]["IMAGE_ID"])>0)
  307. {
  308. $arResult["QUESTIONS"][$FIELD_SID]["IMAGE"]["ID"] = $arResult["arQuestions"][$FIELD_SID]["IMAGE_ID"]; // image id
  309. $arImage = CFile::GetFileArray($arResult["QUESTIONS"][$FIELD_SID]["IMAGE"]["ID"]);
  310. $arResult["QUESTIONS"][$FIELD_SID]["IMAGE"]["URL"] = $arImage["SRC"]; // image url
  311. // image params
  312. if (mb_substr($arImage["SRC"], 0, 1) == "/")
  313. {
  314. $arSize = CFile::GetImageSize($_SERVER["DOCUMENT_ROOT"].$arImage["SRC"]);
  315. if (is_array($arSize))
  316. {
  317. list(
  318. $arResult["QUESTIONS"][$FIELD_SID]["IMAGE"]["WIDTH"],
  319. $arResult["QUESTIONS"][$FIELD_SID]["IMAGE"]["HEIGHT"],
  320. $arResult["QUESTIONS"][$FIELD_SID]["IMAGE"]["TYPE"],
  321. $arResult["QUESTIONS"][$FIELD_SID]["IMAGE"]["ATTR"]
  322. ) = $arSize;
  323. }
  324. }
  325. else
  326. {
  327. $arResult["QUESTIONS"][$FIELD_SID]["IMAGE"]["WIDTH"] = $arImage["WIDTH"];
  328. $arResult["QUESTIONS"][$FIELD_SID]["IMAGE"]["HEIGHT"] = $arImage["HEIGHT"];
  329. $arResult["QUESTIONS"][$FIELD_SID]["IMAGE"]["TYPE"] = false;
  330. $arResult["QUESTIONS"][$FIELD_SID]["IMAGE"]["ATTR"] = false;
  331. }
  332. $arResult["QUESTIONS"][$FIELD_SID]["IMAGE"]["HTML_CODE"] = CFile::ShowImage($arResult["arQuestions"][$FIELD_SID]["IMAGE_ID"]); // formatted image code
  333. }
  334. }
  335. // go
  336. $this->IncludeComponentTemplate();
  337. }
  338. else
  339. {
  340. echo ShowError(GetMessage($arResult["ERROR"]));
  341. }
  342. }
  343. else
  344. {
  345. echo ShowError(GetMessage("FORM_MODULE_NOT_INSTALLED"));
  346. }
  347. ?>