Файл: CMS/core/admin/votes.php
Строк: 214
<?php
if (!defined('CMS')) { die('Access Denied!'); }
if (is_admin(array(101, 102, 103))) {
if (!empty($_GET['del'])) {
if (!empty($_GET['rnd']) && $_GET['rnd'] == $_SESSION['token']) {
if (is_admin(array(101))) {
$vote_id = (int) $db->selectCell("SELECT `vote_id` FROM ?_vote WHERE `vote_id` = ? LIMIT 1;", num($_GET['del']));
if ($vote_id > 0) {
$db->query( "DELETE FROM ?_vote WHERE `vote_id` = ?;", $vote_id );
$db->query( "DELETE FROM ?_vote_answer WHERE `answer_vote_id` = ?;", $vote_id );
$db->query( "DELETE FROM ?_vote_poll WHERE `poll_vote_id` = ?;", $vote_id );
$db->query( "OPTIMIZE TABLE ?_vote, ?_vote_answer, ?_vote_poll");
$inSes->addMessage('Голосование успешно удалено!', 'ok');
redirect('?m=votes&' . RND);
}
else $inSes->addMessage('Ошибка! Данного голосования не существует!');
}
else $inSes->addMessage('Ошибка! Удалять голосования могут только суперадмины!');
}
else $inSes->addMessage('Ошибка! Неверный идентификатор сессии, повторите действие!');
}
if (!empty($_GET['do'])) {
$do = check($_GET['do']);
if (!empty($_GET['rnd']) && $_GET['rnd'] == $_SESSION['token']) {
$vote_id = (int) $db->selectCell( "SELECT `vote_id` FROM ?_vote WHERE `vote_id` = ? LIMIT 1;", $id );
if ($vote_id > 0) {
if ($do == 'close') {
$db->query( "UPDATE ?_vote SET `vote_closed` = '1' WHERE `vote_id` = ?;", $id );
$db->query( "DELETE FROM ?_vote_poll WHERE `poll_vote_id` = ?;", $id );
$inSes->addMessage('Голосование успешно закрыто!', 'ok');
redirect('?m=history_votes&' . RND);
}
else if ($do == 'open') {
$db->query("UPDATE ?_vote SET `vote_closed` = '0' WHERE `vote_id` = ?;", $id );
$inSes->addMessage('Голосование успешно открыто!', 'ok');
redirect('?m=votes&' . RND);
}
else $inSes->addMessage('Ошибка! Не выбрано действие для голосования!');
}
else $inSes->addMessage('Ошибка! Данного голосования не существует!');
}
else $inSes->addMessage('Ошибка! Неверный идентификатор сессии, повторите действие!');
}
if (!empty($_GET['restatement'])) {
if (!empty($_GET['rnd']) && $_GET['rnd'] == $_SESSION['token']) {
if (is_admin(array(101))) {
$db->query("UPDATE ?_vote SET `vote_count` = (SELECT SUM(`answer_result`) FROM ?_vote_answer
WHERE ?_vote.`vote_id` = ?_vote_answer.`answer_vote_id`) WHERE `vote_closed` = '0';");
$inSes->addMessage('Все данные успешно пересчитаны!', 'ok');
}
else $inSes->addMessage('Ошибка! Пересчитывать голосования могут только суперадмины!');
}
else $inSes->addMessage('Ошибка! Неверный идентификатор сессии, повторите действие!');
}
switch ($mod):
default:
show_header('Управление голосованием');
$rows = $db->select("SELECT * FROM ?_vote WHERE `vote_closed` = '0' ORDER BY `vote_time` DESC;");
if (!empty($rows)) {
foreach($rows as $row) {
echo '<div class="b"><div class="right">';
echo '<a href="?m=edit_votes&id=' . $row['vote_id'] . '&' . RND . '">Изменить</a>';
echo ' | <a href="?m=votes&do=close&id=' . $row['vote_id'] . '&rnd=' . $_SESSION['token'] . '&' . RND . '">Закрыть</a>';
if (is_admin(array(101))) {
echo ' | <a href="?m=votes&del=' . $row['vote_id'] . '&rnd=' . $_SESSION['token'] . '&' . RND . '" onclick="return confirm('Вы подтверждаете удаление голосования?')">Удалить</a>';
}
echo '</div>' . icon('stat.png');
echo '<a href="/votes/' . gen_uri('poll', $row['vote_id'], RND) . '"><b>' . $row['vote_title'] . '</b></a><br />';
echo '- Создано: ' . get_date($row['vote_time']) . '<br />';
echo '- Всего голосов: ' . $row['vote_count'] . '</div>';
}
}
else {
show_error('Открытых голосований еще нет!');
}
echo '<div class="b">' . icon('add.png');
echo '<a href="?m=new_votes&' . RND . '">Создать голосование</a> | ';
echo '<a href="?m=history_votes&' . RND . '">История голосований</a><br /></div>';
if (is_admin(array(101))) {
echo '<div class="b">' . icon('mail.png');
echo ' <a href="?m=votes&restatement=1&rnd=' . $_SESSION['token'] . '">Пересчитать</a></div>';
}
break;
case 'new_votes':
if (!empty($_POST['cancel'])) {
redirect('?m=votes&' . RND);
}
if (!empty($_POST['submit'])) {
$title = !empty($_POST['title']) ? check($_POST['title']) : '';
$answer = !empty($_POST['answer']) ? check($_POST['answer']) : '';
if (!empty($_GET['rnd']) && $_GET['rnd'] == $_SESSION['token']) {
if (cms_strlen($title) >= 3 && cms_strlen($title) <= 100) {
$answer = array_diff($answer, array(''));
if (count($answer) > 0) {
$lastid = (int) $db->query("INSERT INTO ?_vote (`vote_title`, `vote_time`) VALUES (?, ?);", $title, SITE_TIME);
foreach($answer as $data) {
$db->query("INSERT INTO ?_vote_answer (`answer_vote_id`, `answer_option`) VALUES (?, ?);", $lastid, $data);
}
$inSes->addMessage('Голосование успешно создано!', 'ok');
redirect('?m=votes&' . RND);
}
else $inSes->addMessage('Ошибка! Отсутствуют варианты ответов!');
}
else $inSes->addMessage('Ошибка! Слишком длинный или короткий вопрос (от 3 до 100 символов)!');
}
else $inSes->addMessage('Ошибка! Неверный идентификатор сессии, повторите действие!');
}
show_header('Новый опрос');
$form = new cmsForm('?m=new_votes&rnd=' . $_SESSION['token'] . '&' . RND, 'post');
$form->addText(blink('*') . 'Вопрос:', 'title', request('title'), ' style="width:98%"');
$text = '<a href="#fl" onclick="set_vote(1);">[+]</a> | ';
$text .= '<a href="#fl" onclick="set_vote(0);">[-]</a><br/>';
$text .= '<div id="fl"><input type="text" name="answer[]" style="width:98%" /><br/></div>';
$form->addCode('Ответ:' . $text);
echo $form->Submit(array('Создать','Отмена'), array('submit','cancel'));
echo <<<HTML
<script language="javascript" type="text/javascript">
<!--
function set_vote(type) {
var f = document.createElement("input");
f.setAttribute("name","answer[]");
f.setAttribute("type","text");
f.setAttribute("style","width:98%");
var fl=document.getElementById("fl");
if(type==1) {
fl.insertBefore(f,null);
fl.appendChild(document.createElement("br"));
} else {
var input=fl.getElementsByTagName("input");
var br=fl.getElementsByTagName("br");
if(input.length>0) {
var el=input[input.length-1];
el.parentNode.removeChild(el);
var el2=br[br.length-1];
el2.parentNode.removeChild(el2);
}
}
}
//-->
</script>
HTML;
break;
case 'edit_votes':
$row = $db->selectRow( "SELECT * FROM ?_vote WHERE `vote_id` = ? LIMIT 1;", $id );
if (!empty($row)) {
if (!empty($_POST['cancel'])) {
redirect('?m=votes&' . RND);
}
if (!empty($_POST['submit'])) {
$title = !empty($_POST['title']) ? check($_POST['title']) : '';
$answer = !empty($_POST['answer']) ? check($_POST['answer']) : '';
if (!empty($_GET['rnd']) && $_GET['rnd'] == $_SESSION['token']) {
if (cms_strlen($title) >= 3 && cms_strlen($title) <= 100) {
if (!in_array('', $answer)) {
$db->query("UPDATE ?_vote SET `vote_title` = ? WHERE `vote_id` = ?;", $title, $id );
foreach($answer as $key => $data) {
$db->query("UPDATE ?_vote_answer SET `answer_option` = ? WHERE `answer_id` = ?;", $data, $key );
}
if (!empty($_POST['newanswer'])) {
$newanswer = check($_POST['newanswer']);
$newanswer = array_diff($newanswer, array(''));
if (count($newanswer) > 0) {
foreach ($newanswer as $data) {
$db->query( "INSERT INTO ?_vote_answer (`answer_vote_id`, `answer_option`) VALUES (?, ?);", $id, $data );
}
}
}
$inSes->addMessage('Голосование успешно изменено!', 'ok');
redirect('?m=votes&' . RND);
}
else $inSes->addMessage('Ошибка! Не заполнены все обязательные поля с ответами!');
}
else $inSes->addMessage('Ошибка! Слишком длинный или короткий вопрос (от 3 до 100 символов)!');
}
else $inSes->addMessage('Ошибка! Неверный идентификатор сессии, повторите действие!');
}
show_header('Редактирование');
$form = new cmsForm('?m=edit_votes&id=' . $id . '&rnd=' . $_SESSION['token'] . '&' . RND, 'post');
$form->addText('Вопрос:', 'title', $row['vote_title'], ' style="width:98%"');
$answer = $db->select("SELECT * FROM ?_vote_answer WHERE `answer_vote_id` = ? ORDER BY `answer_id`;", $id);
$v = '';
for ($i = 0; $i < 10; $i++) {
if (!empty($answer[$i])) {
$v .= '<span style="color:#ff0000">Ответ ' . ($i + 1) . ':</span><br />';
$v .= '<input type="text" name="answer[' . $answer[$i]['answer_id'] . ']" style="width:98%" value="' . $answer[$i]['answer_option'] . '" /><br />';
}
else {
$v .= 'Ответ ' . ($i + 1) . ':<br /><input type="text" name="newanswer[]" style="width:98%" /><br />';
}
}
$form->addCode($v);
echo $form->Submit(array('Изменить', 'Отмена'), array('submit','cancel'));
unset($form);
echo '<div class="b">' . blink('[!]') . ' Поля отмеченные красным цветом обязательны для заполнения!</div>';
}
else {
$inSes->addMessage('Ошибка! Данного голосования не существует!');
redirect('?m=votes&' . RND);
}
break;
case 'history_votes':
show_header('История голосований');
$onpage = !empty($config['forumpost']) ? (int) $config['forumpost'] : 10;
if ($page > 1) $from = ($page - 1) * $onpage; else $from = 0;
$rows = $db->selectPage( $total, "SELECT * FROM ?_vote
WHERE `vote_closed` = '1' ORDER BY `vote_time` DESC LIMIT ?d, ?d", $from, $onpage );
if (!empty($rows) && $total > 0) {
foreach($rows as $row) {
echo '<div class="b"><div class="right">';
echo '<a href="?m=votes&do=open&id=' . $row['vote_id'] . '&rnd=' . $_SESSION['token'] . '&' . RND . '">Открыть</a>';
if (is_admin(array(101))) {
echo ' | <a href="?m=votes&id=' . $row['vote_id'] . '&rnd=' . $_SESSION['token'] . '&' . RND . '" onclick="return confirm('Вы подтверждаете удаление голосования?')">Удалить</a>';
}
echo '</div>' . icon('stat.png');
echo '<b><a href="/votes/' . gen_uri('historyr', $row['vote_id'], RND) . '">' . $row['vote_title'] . '</a></b><br />';
echo '- Создано: ' . get_date($row['vote_time']) . '<br />';
echo '- Всего голосов: <b>' . $row['vote_count'] . '</b></div>';
}
echo show_pages('?m=history_votes');
}
else {
show_error('Голосований в архиве еще нет!');
}
echo '<div class="b">' . icon('return.png');
echo ' <a href="?m=votes&' . RND . '">Список голосований</a><br /></div>';
break;
endswitch;
echo '<div class="b">' . icon('return.png') . ' <a href="?' . RND . '">В админку</a><br /></div>';
show_footer();
}
else {
redirect('/?' . RND);
}
?>