PageRenderTime 49ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 0ms

/components/bitrix/voting.current/component.php

https://gitlab.com/alexprowars/bitrix
PHP | 134 lines | 119 code | 6 blank | 9 comment | 72 complexity | f0e86ab97360c8dd29e744ccccda377a MD5 | raw file
  1. <?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
  2. if (!CModule::IncludeModule("vote")):
  3. ShowError(GetMessage("VOTE_MODULE_IS_NOT_INSTALLED"));
  4. return;
  5. endif;
  6. /********************************************************************
  7. Input params
  8. ********************************************************************/
  9. /************** BASE ***********************************************/
  10. $arParams["VOTE_ID"] = (isset($arParams["VOTE_ID"]) && !empty($arParams["VOTE_ID"]) ? intval($arParams["VOTE_ID"]) : false);
  11. $arParams["CHANNEL_SID"] = trim($arParams["CHANNEL_SID"]);
  12. $arParams["PERMISSION"] = (isset($arParams["PERMISSION"]) && ($arParams["PERMISSION"] > 0 || $arParams["PERMISSION"] === 0) ?
  13. intval($arParams["PERMISSION"]) : false);
  14. /************** ADDITIONAL *****************************************/
  15. $arParams["SHOW_RESULTS"] = ($arParams["SHOW_RESULTS"] == "Y" ? "Y" : "N");
  16. /************** CACHE **********************************************/
  17. if (!isset($arParams["CACHE_TIME"]))
  18. $arParams["CACHE_TIME"] = 3600;
  19. if ($arParams["CACHE_TYPE"] == "Y" || ($arParams["CACHE_TYPE"] == "A" && COption::GetOptionString("main", "component_cache_on", "Y") == "Y"))
  20. $arParams["CACHE_TIME"] = intval($arParams["CACHE_TIME"]);
  21. else
  22. $arParams["CACHE_TIME"] = 0;
  23. /********************************************************************
  24. /Input params
  25. ********************************************************************/
  26. $obCache = new CPHPCache;
  27. $cache_path = str_replace(array(":", "//"), "/", "/".SITE_ID."/".$componentName."/".$arParams["CHANNEL_SID"]."/");
  28. $cache_id = "vote_current_".serialize($arParams).(($tzOffset = CTimeZone::GetOffset()) <> 0 ? "_".$tzOffset : "");
  29. if (!$obCache->InitCache($arParams["CACHE_TIME"], $cache_id, $cache_path))
  30. {
  31. $db_res = false;
  32. if ($arParams["VOTE_ID"] > 0)
  33. {
  34. $db_res = CVote::GetByIDEx($arParams["VOTE_ID"]);
  35. }
  36. else
  37. {
  38. $obChannel = CVoteChannel::GetList('', '',
  39. array("SID"=> $arParams["CHANNEL_SID"], "SID_EXACT_MATCH" => "Y", "SITE" => SITE_ID, "ACTIVE" => "Y", "HIDDEN" => "N"));
  40. if ($obChannel && ($arChannel = $obChannel->Fetch()))
  41. {
  42. $db_res = CVote::GetList('', '', array("CHANNEL_ID"=>$arChannel["ID"], "LAMP" => "green"));
  43. }
  44. }
  45. $arVote = ($db_res ? $db_res->Fetch() : array());
  46. if (empty($arVote) || $arVote["CHANNEL_ACTIVE"] != "Y" || $arVote["ACTIVE"] != "Y")
  47. return false;
  48. $arResult = array(
  49. "VOTE" => $arVote,
  50. "VOTE_ID" => $arVote["ID"],
  51. "VOTE_RESULT_TEMPLATE" => $APPLICATION->GetCurPageParam("", array("VOTE_SUCCESSFULL", "VOTE_ID", "view_form")),
  52. "ADDITIONAL_CACHE_ID" => "current_vote");
  53. $obCache->StartDataCache();
  54. CVoteCacheManager::SetTag($cache_path, array("C" => $arVote["CHANNEL_ID"], "V" => $arVote["ID"]));
  55. $obCache->EndDataCache(array("arResult" => $arResult));
  56. }
  57. else
  58. {
  59. $arVars = $obCache->GetVars();
  60. $arResult = $arVars["arResult"];
  61. $this->SetTemplateCachedData($arVars["templateCachedData"]);
  62. }
  63. $arParams["PERMISSION"] = ($arParams["PERMISSION"] === false ? CVoteChannel::GetGroupPermission($arResult["VOTE"]["CHANNEL_ID"]) : $arParams["PERMISSION"]);
  64. if ($arParams["PERMISSION"] <= 0)
  65. {
  66. return false;
  67. }
  68. elseif ($GLOBALS["VOTING_OK"] == "Y" && $GLOBALS["VOTING_ID"] == $arParams["VOTE_ID"] && !empty($arParams["VOTE_RESULT_TEMPLATE"]))
  69. {
  70. $var = array("VOTE_ID", "VOTING_OK", "VOTE_SUCCESSFULL", "view_result", "view_form");
  71. $url = CComponentEngine::MakePathFromTemplate($arParams["VOTE_RESULT_TEMPLATE"], array("VOTE_ID" => $arResult["VOTE"]["ID"]));
  72. if (mb_strpos($url, "?") === false)
  73. {
  74. $url .= "?";
  75. }
  76. elseif (($token = mb_substr($url, (mb_strpos($url, "?") + 1))) && !empty($token) &&
  77. preg_match_all("/(?<=^|\&)\w+(?=$|\=)/is", $token, $matches))
  78. {
  79. $var = array_merge($var, $matches[0]);
  80. }
  81. $strNavQueryString = DeleteParam($var);
  82. LocalRedirect($url."&VOTE_SUCCESSFULL=Y&VOTE_ID=".intval($_REQUEST["VOTE_ID"]).($strNavQueryString <> "" ? "&" : "").$strNavQueryString);
  83. }
  84. else if ($arParams["PERMISSION"] >= 4 && $arParams["VOTE_ID"] > 0 && check_bitrix_sessid())
  85. {
  86. if ($this->request->getPost("stopVoting") == $arParams["VOTE_ID"])
  87. {
  88. \Bitrix\Vote\Vote::loadFromId($arParams["VOTE_ID"])->stop();
  89. $arResult["VOTE"]["LAMP"] = "red";
  90. }
  91. else if ($this->request->getPost("resumeVoting") == $arParams["VOTE_ID"])
  92. {
  93. \Bitrix\Vote\Vote::loadFromId($arParams["VOTE_ID"])->resume();
  94. $arResult["VOTE"]["LAMP"] = "green";
  95. }
  96. else if ($this->request->getQuery("exportVoting") == $arParams["VOTE_ID"])
  97. {
  98. \Bitrix\Vote\Vote::loadFromId($arParams["VOTE_ID"])->exportExcel();
  99. }
  100. }
  101. $arParams["VOTED"] = \Bitrix\Vote\User::getCurrent()->isVotedFor($arResult["VOTE"]["ID"]);
  102. $isUserCanVote = ($arParams["VOTED"] == false);
  103. $arParams["CAN_VOTE"] = $arResult["CAN_VOTE"] = ($isUserCanVote && $arParams["PERMISSION"] > 1 ? "Y" : "N");
  104. $arParams["CAN_REVOTE"] = ($arParams["VOTED"] == 8 && $USER->IsAuthorized() && $arParams["PERMISSION"] > 1 ? "Y" : "N");
  105. $bShowResult = ($arResult["VOTE"]["LAMP"] != "green" || ($arParams["CAN_VOTE"] != "Y" && $arParams["CAN_REVOTE"] != "Y"));
  106. if (!$bShowResult)
  107. {
  108. $bShowResult = ($_REQUEST["view_result"] == "Y" ||
  109. $GLOBALS["VOTING_OK"] == "Y" && $GLOBALS["VOTING_ID"] == $arResult["VOTE_ID"] ||
  110. $GLOBALS["USER_ALREADY_VOTE"] == "Y" && $arParams["CAN_REVOTE"] != "Y" ||
  111. $_REQUEST["VOTE_SUCCESSFULL"] == "Y" && $_REQUEST["VOTE_ID"] == $arResult["VOTE_ID"]);
  112. if ($_REQUEST["view_form"] == "Y")
  113. $bShowResult = false;
  114. else if (!$bShowResult)
  115. {
  116. $bShowResult = ($arParams["CAN_REVOTE"] == "Y");
  117. if ($bShowResult && $GLOBALS["VOTING_ID"] == $arResult["VOTE"]["ID"] && $GLOBALS["VOTING_OK"] != "Y")
  118. $bShowResult = false;
  119. }
  120. }
  121. $componentPage = ($bShowResult ? "result" : "form");
  122. ob_start();
  123. $this->IncludeComponentTemplate($componentPage);
  124. $res = ob_get_clean();
  125. $frame = $this->__template->createFrame()->begin("");
  126. echo $res;
  127. $frame->end();
  128. ?>