PageRenderTime 30ms CodeModel.GetById 20ms RepoModel.GetById 1ms app.codeStats 0ms

/components/bitrix/voting.result/component.php

https://gitlab.com/alexprowars/bitrix
PHP | 247 lines | 197 code | 22 blank | 28 comment | 54 complexity | 873b2094d2a35b68288a829eabab5a33 MD5 | raw file
  1. <?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
  2. if (!IsModuleInstalled("vote")):
  3. ShowError(GetMessage("VOTE_MODULE_IS_NOT_INSTALLED"));
  4. return;
  5. elseif ($arParams["VOTE_ID"] <= 0):
  6. ShowError(GetMessage("VOTE_EMPTY"));
  7. return false;
  8. endif;
  9. require_once($_SERVER["DOCUMENT_ROOT"].$componentPath."/functions.php");
  10. global $arrSaveColor;
  11. require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/img.php");
  12. /********************************************************************
  13. Input params
  14. ********************************************************************/
  15. /************** BASE ***********************************************/
  16. $arParams["VOTE_ID"] = intval($arParams["VOTE_ID"]);
  17. $arParams["PERMISSION"] = (isset($arParams["PERMISSION"]) && ($arParams["PERMISSION"] > 0 || $arParams["PERMISSION"] === 0) ?
  18. intval($arParams["PERMISSION"]) : false);
  19. /************** URL ************************************************/
  20. $URL_NAME_DEFAULT = array(
  21. "vote_form" => "PAGE_NAME=vote_new&VOTE_ID=#VOTE_ID#",
  22. "vote_result" => "PAGE_NAME=vote_result&VOTE_ID=#VOTE_ID#");
  23. foreach ($URL_NAME_DEFAULT as $URL => $URL_VALUE):
  24. if (trim($arParams[mb_strtoupper($URL)."_TEMPLATE"]) == '')
  25. $arParams[mb_strtoupper($URL)."_TEMPLATE"] = $APPLICATION->GetCurPage()."?".$URL_VALUE;
  26. $arParams["~".mb_strtoupper($URL)."_TEMPLATE"] = $arParams[mb_strtoupper($URL)."_TEMPLATE"];
  27. $arParams[mb_strtoupper($URL)."_TEMPLATE"] = htmlspecialcharsbx($arParams["~".mb_strtoupper($URL)."_TEMPLATE"]);
  28. endforeach;
  29. /************** ADDITIONAL *****************************************/
  30. $arParams["NEED_SORT"] = ($arParams["NEED_SORT"] == "N" ? "N" : "Y");
  31. /************** CACHE **********************************************/
  32. if ($arParams["CACHE_TYPE"] == "Y" || ($arParams["CACHE_TYPE"] == "A" && COption::GetOptionString("main", "component_cache_on", "Y") == "Y"))
  33. $arParams["CACHE_TIME"] = intval($arParams["CACHE_TIME"]);
  34. else
  35. $arParams["CACHE_TIME"] = 0;
  36. $arParams["ADDITIONAL_CACHE_ID"] = (isset($arParams["ADDITIONAL_CACHE_ID"]) && $arParams["ADDITIONAL_CACHE_ID"] <> '' ?
  37. $arParams["ADDITIONAL_CACHE_ID"] : $USER->GetGroups() );
  38. /********************************************************************
  39. /Input params
  40. ********************************************************************/
  41. /********************************************************************
  42. Default values
  43. ********************************************************************/
  44. $arResult["CHANNEL"] = array();
  45. $arResult["VOTE"] = array();
  46. $arResult["QUESTIONS"] = array();
  47. $arResult["GROUP_ANSWERS"] = array();
  48. $arResult["LAST_VOTE"] = false;
  49. $arResult["~CURRENT_PAGE"] = $APPLICATION->GetCurPageParam("", array("VOTE_ID","VOTING_OK","VOTE_SUCCESSFULL"));
  50. $arResult["CURRENT_PAGE"] = htmlspecialcharsbx($arResult["~CURRENT_PAGE"]);
  51. /********************************************************************
  52. /Default values
  53. ********************************************************************/
  54. /********************************************************************
  55. Data
  56. ********************************************************************/
  57. $obCache = new CPHPCache;
  58. $cache_id = "vote_result_".serialize(array(
  59. $arParams["VOTE_ID"],
  60. $arParams["ADDITIONAL_CACHE_ID"],
  61. $arParams["VOTE_ALL_RESULTS"],
  62. (isset($arParams["PERMISSION"]) ? $arParams["PERMISSION"] : array()))).
  63. ((($tzOffset = CTimeZone::GetOffset()) <> 0) ? "_".$tzOffset : "");
  64. $cache_path = str_replace(array(":", "//"), "/", "/".SITE_ID."/".$componentName."/".$arParams["VOTE_ID"]);
  65. if ($obCache->InitCache($arParams["CACHE_TIME"], $cache_id, $cache_path))
  66. {
  67. $arVars = $obCache->GetVars();
  68. $arResult = $arVars["arResult"];
  69. }
  70. elseif (CModule::IncludeModule("vote"))
  71. {
  72. $arAnswers = $arDropDown = $arMultiSelect = array();
  73. $arParams["VOTE_ID"] = GetVoteDataByID(
  74. $arParams["VOTE_ID"],
  75. $arResult["CHANNEL"],
  76. $arResult["VOTE"],
  77. $arResult["QUESTIONS"],
  78. $arAnswers, $arDropDown, $arMultiSelect,
  79. $arResult["GROUP_ANSWERS"],
  80. array(
  81. "bGetMemoStat" => $arParams["VOTE_ALL_RESULTS"]
  82. )
  83. );
  84. if ($arParams["VOTE_ID"] <= 0):
  85. ShowError(GetMessage("VOTE_NOT_FOUND"));
  86. return;
  87. endif;
  88. $counter = intval($arResult["VOTE"]["COUNTER"]);
  89. $counter = ($counter <= 0 ? 1 : $counter);
  90. if ($arParams["VOTE_ALL_RESULTS"] == "Y" && !empty($arResult["GROUP_ANSWERS"]))
  91. {
  92. foreach ($arResult["GROUP_ANSWERS"] as $answerId => $answerOptions)
  93. {
  94. $userAnswerSum = 0;
  95. foreach ($answerOptions as $answerOption)
  96. {
  97. $userAnswerSum += $answerOption["COUNTER"];
  98. }
  99. $ucolor = "\n";
  100. foreach ($answerOptions as $aID => $answerOption)
  101. {
  102. $ucolor = GetNextRGB($ucolor, count($answerOptions));
  103. $arResult["GROUP_ANSWERS"][$answerId][$aID]["COLOR"] = $ucolor;
  104. $arResult["GROUP_ANSWERS"][$answerId][$aID]["PERCENT"] = ($userAnswerSum > 0 ? round($answerOption["COUNTER"]*100/$userAnswerSum) : 0);
  105. }
  106. }
  107. }
  108. foreach ($arResult["QUESTIONS"] as $qID => $arQuestion)
  109. {
  110. //Include in the result chart
  111. if ($arQuestion["DIAGRAM"] == "N")
  112. {
  113. unset($arAnswers[$qID]);
  114. unset($arResult["QUESTIONS"][$qID]);
  115. continue;
  116. }
  117. elseif (empty($arQuestion["ANSWERS"]))
  118. {
  119. unset($arResult["QUESTIONS"][$qID]);
  120. continue;
  121. }
  122. //Calculating the sum and maximum value
  123. $counterSum = $counterMax = 0;
  124. foreach ($arQuestion["ANSWERS"] as $aID => $arAnswer)
  125. {
  126. if ($arAnswer["MESSAGE"] == "")
  127. unset($arQuestion["ANSWERS"][$aID]);
  128. $counterSum += $arAnswer["COUNTER"];
  129. $counterMax = max(intval($arAnswer["COUNTER"]), $counterMax);
  130. }
  131. if ($arParams["NEED_SORT"] != "N")
  132. uasort($arQuestion["ANSWERS"], "_vote_answer_sort");
  133. $color = "";
  134. $sum1 = $sum2 = $sum3 = 0;
  135. foreach ($arQuestion["ANSWERS"] as $aID => $arAnswer)
  136. {
  137. $arResult["LAST_VOTE"] = ($arResult["LAST_VOTE"] === false ? $arAnswer["LAST_VOTE"] : $arResult["LAST_VOTE"]);
  138. $arResult["LAST_VOTE"] = min($arResult["LAST_VOTE"], $arAnswer["LAST_VOTE"]);
  139. $arAnswer["PERCENT"] = $arAnswer["PERCENT2"] = $arAnswer["PERCENT3"];
  140. if ($counterSum > 0)
  141. {
  142. $arAnswer["PERCENT"] = $arAnswer["PERCENT2"] = $arAnswer["PERCENT3"] = $percentage = ($arAnswer["COUNTER"]*100/$counter);
  143. if (is_float($percentage))
  144. {
  145. $arAnswer["PERCENT"] = number_format($percentage, 0, ".", "");
  146. $arAnswer["PERCENT2"] = number_format($percentage, 1, ".", "");
  147. if ($arAnswer["PERCENT2"] != $percentage)
  148. $arAnswer["PERCENT3"] = number_format($percentage, 2, ".", "");
  149. }
  150. $sum1 += $arAnswer["PERCENT"];
  151. $sum2 += $arAnswer["PERCENT2"];
  152. $sum3 += $arAnswer["PERCENT3"];
  153. }
  154. $arAnswer["BAR_PERCENT"] = round($arAnswer["PERCENT"]);
  155. $arAnswer["COLOR"] = (empty($arAnswer["COLOR"]) && ($color = GetNextRGB($color, count($arQuestion["ANSWERS"]))) ?
  156. $color : TrimEx($arAnswer["COLOR"], "#"));
  157. $arQuestion["ANSWERS"][$aID] = $arAnswer;
  158. }
  159. $var = ($sum1 == 100 ? 1 : ($sum2 == 100 ? 2 : 3));
  160. if ($var > 1)
  161. {
  162. foreach ($arQuestion["ANSWERS"] as $aID => $arAnswer)
  163. {
  164. $arQuestion["ANSWERS"][$aID]["PERCENT"] = $arQuestion["ANSWERS"][$aID]["PERCENT".$var];
  165. }
  166. }
  167. $arResult["QUESTIONS"][$qID]["COUNTER_SUM"] = $counterSum;
  168. $arResult["QUESTIONS"][$qID]["COUNTER_MAX"] = $counterMax;
  169. //Images
  170. $arResult["QUESTIONS"][$qID]["IMAGE"] = CFile::GetFileArray($arResult["QUESTIONS"][$qID]["IMAGE_ID"]);
  171. //Diagram type
  172. if (!empty($arParams["QUESTION_DIAGRAM_".$qID]) && $arParams["QUESTION_DIAGRAM_".$qID]!="-")
  173. $arResult["QUESTIONS"][$qID]["DIAGRAM_TYPE"] = trim($arParams["QUESTION_DIAGRAM_".$qID]);
  174. //Answers
  175. $arResult["QUESTIONS"][$qID]["ANSWERS"] = $arQuestion["ANSWERS"];
  176. }
  177. //Vote Image
  178. $arResult["VOTE"]["IMAGE"] = CFile::GetFileArray($arResult["VOTE"]["IMAGE_ID"]);
  179. $obCache->StartDataCache();
  180. CVoteCacheManager::SetTag($cache_path, array(
  181. "C" => $arResult["VOTE"]["CHANNEL_ID"],
  182. "V" => $arResult["VOTE"]["ID"],
  183. "Q" => array_keys($arResult["QUESTIONS"])));
  184. $obCache->EndDataCache(array("arResult" => $arResult));
  185. }
  186. $arParams["PERMISSION"] = (($arParams["PERMISSION"] === false && CModule::IncludeModule("vote")) ?
  187. CVoteChannel::GetGroupPermission($arResult["CHANNEL"]["ID"]) : $arParams["PERMISSION"]);
  188. if ($arParams["PERMISSION"] < 1):
  189. ShowError(GetMessage("VOTE_ACCESS_DENIED"));
  190. return false;
  191. endif;
  192. if ($_REQUEST["VOTE_ID"] == $arParams["VOTE_ID"])
  193. {
  194. $arError = array(); $arNote = array();
  195. if ($GLOBALS["VOTING_OK"] == "Y" || $_REQUEST["VOTE_SUCCESSFULL"] == "Y")
  196. $arNote[] = array("id" => "ok", "text" => GetMessage("VOTE_OK"));
  197. if ($GLOBALS["USER_ALREADY_VOTE"] == "Y")
  198. $arError[] = array("id" => "already vote", "text" => GetMessage("VOTE_ALREADY_VOTE"));
  199. if ($GLOBALS["VOTING_LAMP"] == "red")
  200. $arError[] = array("id" => "red lamp", "text" => GetMessage("VOTE_RED_LAMP"));
  201. if (!empty($arNote)):
  202. $e = new CAdminException($arNote);
  203. $arResult["OK_MESSAGE"] = $e->GetString();
  204. endif;
  205. if (!empty($arError)):
  206. $e = new CAdminException($arError);
  207. $arResult["ERROR_MESSAGE"] = $e->GetString();
  208. endif;
  209. }
  210. /********************************************************************
  211. /Data
  212. ********************************************************************/
  213. if ($this->__templateName == "main_page.blue"):
  214. $this->__templateName = "main_page";
  215. $arParams["THEME"] = "blue";
  216. elseif ($this->__templateName == "main_page.green"):
  217. $this->__templateName = "main_page";
  218. $arParams["THEME"] = "green";
  219. endif;
  220. if ($this->__parent)
  221. $this->__parent->arResult["VOTING.RESULT"] = array('arParams' => $arParams, 'arResult' => $arResult);
  222. $this->IncludeComponentTemplate();
  223. if (!empty($arParams["RETURN"]))
  224. return $arParams["RETURN"];
  225. ?>