/*
##############################################
# Bitrix: SiteManager #
# Copyright (c) 2004 - 2016 Bitrix #
# http://www.bitrix.ru #
# mailto:admin@bitrix.ru #
##############################################
*/
/**
* @global CMain $APPLICATION
* @global CUser $USER
*/
use \Bitrix\Vote\Vote\EventLimits;
use \Bitrix\Vote\Vote\Option;
use \Bitrix\Main\Localization\Loc;
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_admin_before.php");
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/vote/prolog.php");
CModule::IncludeModule("vote");
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/vote/include.php");
IncludeModuleLangFile(__FILE__);
Loc::loadMessages(__FILE__);
$err_mess = "File: ".__FILE__."
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."©_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();
?>