Line: "; $old_module_version = \CVote::IsOldVersion(); $tabControl = new CAdminTabControl("tabControl", array( array("DIV" => "edit1", "TAB" => GetMessage("VOTE_VOTE"), "ICON" => "main_vote_edit", "TITLE" => GetMessage("VOTE_VOTE")), array("DIV" => "edit2", "TAB" => GetMessage("VOTE_PROP"), "ICON" => "main_vote_edit", "TITLE" => GetMessage("VOTE_PARAMS")), array("DIV" => "edit3", "TAB" => GetMessage("VOTE_UNIQUE_PARAMS"), "ICON" => "main_vote_edit", "TITLE" => GetMessage("VOTE_UNIQUE_PARAMS")))); //region Check access /* @var $request \Bitrix\Main\HttpRequest */ $request = \Bitrix\Main\Context::getCurrent()->getRequest(); $message = false; $channels = array(); $VOTE_RIGHT = $APPLICATION->GetGroupRight("vote"); $db_res = \Bitrix\Vote\Channel::getList(array( "select" => array("*"), "filter" => ($VOTE_RIGHT < "W" ? array( "ACTIVE" => "Y", "HIDDEN" => "N", ">=PERMISSION.PERMISSION" => 4, "PERMISSION.GROUP_ID" => $USER->GetUserGroupArray() ) : array()), "order" => array( "TITLE" => "ASC" ), "group" => array("ID") )); while ($res = $db_res->GetNext()) { $channels[$res["ID"]] = $res; } if (empty($channels)) { $APPLICATION->SetTitle(GetMessage("VOTE_NEW_RECORD")); require_once ($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php"); ShowError(GetMessage("VOTE_CHANNEL_NOT_FOUND")); require_once ($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php"); die(); } //endregion //region Actions try { $voteId = $request->getQuery("ID"); $copyVoteId = $request->getQuery("COPY_ID"); $channelId = $request->getQuery("channelId") ?: $request->getQuery("CHANNEL_ID"); $saveAction = false; $fields = array( "AUTHOR_ID" => 0, "CHANNEL_ID" => $channelId, "C_SORT" => null, "ACTIVE" => "Y", "ANONYMITY" => \Bitrix\Vote\Vote\Anonymity::PUBLICLY, "DATE_START" => null, "DATE_END" => null, "TITLE" => null, "DESCRIPTION" => null, "DESCRIPTION_TYPE" => "text", "IMAGE_ID" => null, "EVENT1" => "vote", "EVENT2" => null, "EVENT3" => null, "UNIQUE_TYPE" => EventLimits::BY_USER_ID|EventLimits::BY_IP, "KEEP_IP_SEC" => null, "OPTIONS" => Option::ALLOW_REVOTE, "NOTIFY" => null, "URL" => null, "TEMPLATE" => null, "RESULT_TEMPLATE" => null ); if ($request->getRequestMethod() == "POST" && ( ($request->getPost("save") || $request->getPost("apply")))) { if (!check_bitrix_sessid()) throw new \Bitrix\Main\ArgumentException("Bad sessid."); $saveAction = true; $voteId = $request->getPost("ID"); $copyVoteId = $request->getPost("COPY_ID"); $channelId = $request->getPost("CHANNEL_ID"); } if ($voteId > 0) { $vote = \Bitrix\Vote\Vote::loadFromId($voteId); if (!$vote->canEdit($USER->GetID())) throw new \Bitrix\Main\ArgumentException(GetMessage("ACCESS_DENIED"), "Access denied."); $channelId = ($saveAction ? $channelId : ($channelId ?: $vote->get("CHANNEL_ID"))); } else if ($copyVoteId > 0) { $copyVote = \Bitrix\Vote\Vote::loadFromId($copyVoteId); global $USER; if (!$copyVote->canRead($USER->GetID())) throw new \Bitrix\Main\ArgumentException(GetMessage("ACCESS_DENIED"), "Access denied."); $channelId = ($saveAction ? $channelId : ($channelId ?: $copyVote->get("CHANNEL_ID"))); } $fields["CHANNEL_ID"] = $channelId; /* @var \Bitrix\Vote\Channel $channel */ $channel = \Bitrix\Vote\Channel::loadFromId($channelId); if (!isset($vote) && !$channel->canEditVote($USER->getId())) throw new \Bitrix\Main\ArgumentException(GetMessage("ACCESS_DENIED"), "Access denied."); $t = (isset($vote)? $vote : (isset($copyVote) ? $copyVote : null)); if ($t) { foreach ($fields as $key => &$value) $value = $t->get($key); } if ($request->getRequestMethod() == "GET" && $request->get("action") == "reset") { if (!check_bitrix_sessid()) throw new \Bitrix\Main\ArgumentException("Bad sessid."); \CVote::Reset($voteId); $url = $APPLICATION->GetCurPage() . "?lang=" . LANGUAGE_ID . "&ID=" . $ID . "&" . $tabControl->ActiveTabParam() . (!empty($request->get("return_url")) ? "&return_url=" . urlencode($request->get("return_url")) : ""); LocalRedirect($url); } if ($saveAction) { foreach ($fields as $key => &$value) { if ($request->getPost($key) !== null) $value = $request->getPost($key); } $arIMAGE_ID = array(); if (array_key_exists("IMAGE_ID", $_FILES)) $arIMAGE_ID = $_FILES["IMAGE_ID"]; elseif ($request->getPost("IMAGE_ID")) { $arIMAGE_ID = CFile::MakeFileArray($_SERVER["DOCUMENT_ROOT"].$request->getPost("IMAGE_ID")); $arIMAGE_ID["COPY_FILE"] = "Y"; } $arIMAGE_ID["del"] = $request->getPost("IMAGE_ID_del"); $arIMAGE_ID["description"] = $request->getPost("IMAGE_ID_descr"); $fields["IMAGE_ID"] = $arIMAGE_ID; foreach (["UNIQUE_TYPE", "OPTIONS"] as $k) { $fields[$k] = 0; if (is_array($request->getPost($k))) { foreach ($request->getPost($k) as $v) { $fields[$k] |= $v; } } } $ID = isset($vote) ? $vote->getId() : 0; if ($ID <= 0) { $fields["AUTHOR_ID"] = $GLOBALS["USER"]->GetId(); $result = $ID = CVote::Add($fields); } else { $result = CVote::Update($ID, $fields); } if ($result) { if (isset($copyVote)) { global $DB; $newID = $ID; $DB->Update("b_vote", array("COUNTER" => "0"), "WHERE ID=" . $newID, $err_mess . __LINE__); if ($copyVote->get("IMAGE_ID") > 0 && empty($arIMAGE_ID["name"]) && $arIMAGE_ID["del"] != "Y" ) { $newImageId = CFile::CopyFile($copyVote->get("IMAGE_ID")); if ($newImageId) { $DB->Update("b_vote", array("IMAGE_ID" => $newImageId), "WHERE ID=" . $newID, $err_mess . __LINE__); } } $state = true; $rQuestions = CVoteQuestion::GetList($copyVote->getId()); while ($arQuestion = $rQuestions->Fetch()) { $state = $state && (CVoteQuestion::Copy($arQuestion["ID"], $newID) !== false); } } $url = $APPLICATION->GetCurPage() . "?lang=" . LANGUAGE_ID . "&ID=" . $ID . "&" . $tabControl->ActiveTabParam() . (!empty($_REQUEST["return_url"]) ? "&return_url=" . urlencode($_REQUEST["return_url"]) : ""); if ($request->getPost("save") !== null) { $url = ($request->getPost("return_url") ?: "vote_list.php?lang=" . LANGUAGE_ID . "&find_channel_id=" . $channelId . "&set_filter=Y"); } LocalRedirect($url); } $e = $APPLICATION->GetException(); $message = new CAdminMessage(GetMessage("VOTE_GOT_ERROR"), $e); } } catch(Exception $e) { $APPLICATION->SetTitle(GetMessage("VOTE_NEW_RECORD")); require_once ($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php"); ShowError($e->getMessage()); require_once ($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_admin.php"); die(); } //endregion $APPLICATION->SetTitle(isset($vote) ? GetMessage("VOTE_EDIT_RECORD", array("#ID#" => $vote->getId())) : GetMessage("VOTE_NEW_RECORD")); require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_after.php"); if (is_null($fields["C_SORT"])) $fields["C_SORT"] = CVote::GetNextSort($channel->getId()); if (is_null($fields["DATE_START"])) $fields["DATE_START"] = ($channel->get("VOTE_SINGLE") != "N" ? CVote::GetNextStartDate($channel->get("VOTE_SINGLE")) : ""); if (is_null($fields["EVENT2"])) $fields["EVENT2"] = $channel->get("SYMBOLIC_NAME"); $tmp = $fields; foreach ($tmp as $key => $val): $fields["~".$key] = $val; $fields[$key] = htmlspecialcharsEx($val); endforeach; //region Top menu /* @var $vote \Bitrix\Vote\Vote */ if (isset($vote)) { $ID = $vote->getId(); $toolbar = array( array( "TEXT" => GetMessage("VOTE_VOTE_LIST"), "TITLE" => GetMessage("VOTE_VOTE_LIST"), "LINK" => "vote_list.php?lang=".LANGUAGE_ID."&find_channel_id=".$fields["CHANNEL_ID"], "ICON" => "btn_list"), array( "TEXT" => GetMessage("VOTE_COPY"), "TITLE" => GetMessage("VOTE_COPY_TITLE"), "LINK" => "vote_edit.php?lang=".LANGUAGE_ID."&COPY_ID=$ID&".bitrix_sessid_get(), "ICON" => "btn_copy"), array( "TEXT" => GetMessage("VOTE_DELETE"), "TITLE" => GetMessage("VOTE_DELETE_RECORD"), "LINK" => "javascript:if(confirm('".GetMessage("VOTE_DELETE_RECORD_CONFIRM")."')) window.location='/bitrix/admin/vote_list.php?action=delete&ID=".$ID."&".bitrix_sessid_get()."&lang=".LANGUAGE_ID."';", "ICON" => "btn_delete")); if ($vote["COUNTER"] > 0) { array_push($toolbar, array( "TEXT" => GetMessage("VOTE_VOTES_DROPDOWN", array("COUNTER" => $vote["COUNTER"])), "MENU" => array( array( "TEXT" => GetMessage("VOTE_VOTES_GOTO_VIEW"), "LINK" => "/bitrix/admin/vote_results.php?lang=".LANGUAGE_ID."&VOTE_ID=".$ID), array( "TEXT" => GetMessage("VOTE_VOTES_GOTO_LIST"), "LINK" => "/bitrix/admin/vote_user_votes_table.php?lang=".LANGUAGE_ID."&VOTE_ID=".$ID, "ICON" => "btn_list"), array( "TEXT" => GetMessage("VOTE_VOTES_RESET"), "LINK" => "javascript:if(confirm('".GetMessage("VOTE_RESET_RECORD_CONFIRM")."')) window.location='/bitrix/admin/vote_edit.php?ID=".$ID."&action=reset&lang=".LANGUAGE_ID."&".bitrix_sessid_get()."';", "ICON" => "btn_refresh"), array( "TEXT" => GetMessage("VOTE_VOTES_EXPORT"), "LINK" => "vote_user_votes.php?lang=".LANGUAGE_ID."&find_vote_id=$ID&export=xls", "ICON" => "btn_excel"), array( "TEXT" => GetMessage("VOTE_VOTES_EXPORT_2"), "LINK" => "vote_user_votes_table.php?lang=".LANGUAGE_ID."&VOTE_ID=$ID&mode=excel", "ICON" => "btn_excel") )) ); } (new CAdminContextMenu($toolbar))->Show(); $cnt = count($vote->getQuestions()); $context = new CAdminContextMenu(array( array( "TEXT" => GetMessage("VOTE_QUESTIONS").($cnt > 0 ?" [".$cnt."]":""), "TITLE" => GetMessage("VOTE_QUESTIONS_TITLE"), "LINK" => "/bitrix/admin/vote_question_list.php?lang=".LANGUAGE_ID."&VOTE_ID=".$ID), array( "TEXT" => GetMessage("VOTE_QUESTIONS_ADD"), "TITLE" => GetMessage("VOTE_QUESTIONS_ADD_TITLE"), "LINK" => "/bitrix/admin/vote_question_edit.php?lang=".LANGUAGE_ID."&VOTE_ID=$ID", "ICON" => "btn_new"))); $context->Show(); } //endregion if ($message) echo $message->Show(); ?>