Файл: mpanel/votes.php
Строк: 271
<?php
include('../core/core.php');
include(MAINDIR.'style/head.php');
function redirect($url, $permanent = false){
if ($permanent){
header('HTTP/1.1 301 Moved Permanently');
}
header('Location: '.$url);
exit();
}
function date_fixed($timestamp, $format = "d.m.y / H:i") {
//global $config;
if (!is_numeric($timestamp)) {
$timestamp = time();
}
$shift = 0 * 3600;
$datestamp = date($format, $timestamp + $shift);
$today = date("d.m.y", time() + $shift);
$yesterday = date("d.m.y", strtotime("-1 day") + $shift);
$datestamp = str_replace($today, 'Сегодня', $datestamp);
$datestamp = str_replace($yesterday, 'Вчера', $datestamp);
$search = array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');
$replace = array('Января', 'Февраля', 'Марта', 'Апреля', 'Мая', 'Июня', 'Июля', 'Августа', 'Сентября', 'Октября', 'Ноября', 'Декабря');
$datestamp = str_replace($search, $replace, $datestamp);
return $datestamp;
}
function show_error($error){
echo'<div class="error">'.$error.'</div>';
}
if (isset($_GET['act'])) {
$act = check($_GET['act']);
} else {
$act = 'index';
}
if (isset($_GET['id'])) {
$id = abs(intval($_GET['id']));
} else {
$id = 0;
}
if (isset($_GET['start'])) {
$start = abs(intval($_GET['start']));
} else {
$start = 0;
}
if (is_admin(array(101, 102, 103))) {
title('Управление голосованием');
switch ($act):
############################################################################################
## Главная страница ##
############################################################################################
case 'index':
$queryvote = DB::run() -> query("SELECT * FROM `vote` WHERE `vote_closed`=? OR `vote_closed`=? ORDER BY `vote_time` DESC;", array(0,1));
$votes = $queryvote -> fetchAll();
if (count($votes) > 0) {
foreach($votes as $valvote) {
echo '<div class="menu">';
echo '<img src="../images/stat.gif" alt="image" /> <b><a href="../votes/index.php?act=poll&id='.$valvote['vote_id'].'&'.SID.'">'.$valvote['vote_title'].'</a></b><br />';
echo '<a href="votes.php?act=edit&id='.$valvote['vote_id'].'&'.SID.'">Изменить</a>';
if($valvote['vote_closed'] == 0) { echo ' / <a href="votes.php?act=action&do=close&id='.$valvote['vote_id'].'&uid='.$_SESSION['token'].'&'.SID.'">Закрыть</a>';} else {
echo ' / <a href="votes.php?act=action&do=open&id='.$valvote['vote_id'].'&uid='.$_SESSION['token'].'&'.SID.'">Открыть</a>';
}
if (is_admin(array(101))) {
echo ' / <a href="votes.php?act=del&id='.$valvote['vote_id'].'&uid='.$_SESSION['token'].'&'.SID.'" onclick="return confirm('Вы подтверждаете удаление голосования?')">Удалить</a>';
}
echo '</div>';
echo '<div><div class="menu">Создано: '.date_fixed($valvote['vote_time']).'<br />';
echo 'Всего голосов: '.$valvote['vote_count'].'</div>';
}
echo '';
} else {
show_error('Открытых голосований еще нет!');
}
echo'<div class="menu_2">';
echo '<img src="../images/stat.gif" alt="image" /> <a href="votes.php?act=new&'.SID.'">Создать голосование</a><br />';
echo '<img src="../images/luggage.gif" alt="image" /> <a href="votes.php?act=history&'.SID.'">История голосований</a><br />';
if (is_admin(array(101))) {
echo '<img src="../images/reload.gif" alt="image" /> <a href="votes.php?act=rest&uid='.$_SESSION['token'].'&'.SID.'">Пересчитать</a><br />';
}
echo'</div>';
break;
############################################################################################
## Создание ##
############################################################################################
case 'new':
echo '<div class="menu">';
echo '<form action="votes.php?act=add&uid='.$_SESSION['token'].'&'.SID.'" method="post">';
echo 'Вопрос:<br />';
echo '<input type="text" name="title" size="50" maxlength="100" /><br />';
echo 'Ответ 1:<br /><input type="text" name="answer[]" maxlength="50" /><br />';
echo 'Ответ 2:<br /><input type="text" name="answer[]" maxlength="50" /><br />';
echo 'Ответ 3:<br /><input type="text" name="answer[]" maxlength="50" /><br />';
echo 'Ответ 4:<br /><input type="text" name="answer[]" maxlength="50" /><br />';
echo 'Ответ 5:<br /><input type="text" name="answer[]" maxlength="50" /><br />';
echo 'Ответ 6:<br /><input type="text" name="answer[]" maxlength="50" /><br />';
echo 'Ответ 7:<br /><input type="text" name="answer[]" maxlength="50" /><br />';
echo 'Ответ 8:<br /><input type="text" name="answer[]" maxlength="50" /><br />';
echo 'Ответ 9:<br /><input type="text" name="answer[]" maxlength="50" /><br />';
echo 'Ответ 10:<br /><input type="text" name="answer[]" maxlength="50" /><br />';
echo '<input type="submit" value="Создать" /></form></div><br />';
echo '<img src="../images/back.gif" alt="image" /> <a href="votes.php?'.SID.'">Вернуться</a><br />';
break;
############################################################################################
## Создание ##
############################################################################################
case 'add':
$uid = check($_GET['uid']);
$title = check($_POST['title']);
$answer = check($_POST['answer']);
if ($uid == $_SESSION['token']) {
if (mb_strlen($title) >= 3 && mb_strlen($title) <= 100) {
$answer = array_diff($answer, array(''));
if (count($answer) > 0) {
DB::run() -> query("INSERT INTO `vote` (`vote_title`, `vote_time`) VALUES (?, ?);", array($title, time()));
$lastid = DB::run() -> lastInsertId();
$dbr = DB::run() -> prepare("INSERT INTO `voteanswer` (`answer_vote_id`, `answer_option`) VALUES (?, ?);");
foreach ($answer as $data) {
$dbr -> execute($lastid, $data);
}
$_SESSION['note'] = 'Голосование успешно создано!';
redirect("votes.php?".SID);
} else {
show_error('Ошибка! Отсутствуют варианты ответов!');
}
} else {
show_error('Ошибка! Слишком длинный или короткий вопрос (от 3 до 100 символов)!');
}
} else {
show_error('Ошибка! Неверный идентификатор сессии, повторите действие!');
}
echo '<img src="../images/img/back.gif" alt="image" /> <a href="votes.php?act=new&'.SID.'">Вернуться</a><br />';
echo '<img src="../images/img/stat.gif" alt="image" /> <a href="votes.php?'.SID.'">К голосованиям</a><br />';
break;
############################################################################################
## Редактирование ##
############################################################################################
case 'edit':
$votes = DB::run() -> queryFetch("SELECT * FROM `vote` WHERE `vote_id`=? LIMIT 1;", array($id));
if (!empty($votes)) {
echo '<div class="menu">';
echo '<form action="votes.php?act=change&id='.$id.'&uid='.$_SESSION['token'].'&'.SID.'" method="post">';
echo 'Вопрос:<br />';
echo '<input type="text" name="title" size="50" maxlength="100" value="'.$votes['vote_title'].'" /><br />';
$queryanswer = DB::run() -> query("SELECT * FROM `voteanswer` WHERE `answer_vote_id`=? ORDER BY `answer_id`;", array($id));
$answer = $queryanswer -> fetchAll();
for ($i = 0; $i < 10; $i++) {
if (!empty($answer[$i])) {
echo '<span style="color:#ff0000">Ответ '.($i + 1).':</span><br /><input type="text" name="answer['.$answer[$i]['answer_id'].']" maxlength="50" value="'.$answer[$i]['answer_option'].'" /><br />';
} else {
echo 'Ответ '.($i + 1).':<br /><input type="text" name="newanswer[]" maxlength="50" /><br />';
}
}
echo '<input type="submit" value="Изменить" /></form></div>';
echo'<div class="menu_2">';
echo 'Поля отмеченные красным цветом обязательны для заполнения!<br />';
} else {
show_error('Ошибка! Данного голосования не существует!');
}
echo '<img src="../images/back.gif" alt="image" /> <a href="votes.php?'.SID.'">Вернуться</a></div>';
break;
############################################################################################
## Редактирование ##
############################################################################################
case 'change':
$uid = check($_GET['uid']);
$title = check($_POST['title']);
$answer = check($_POST['answer']);
if ($uid == $_SESSION['token']) {
if (mb_strlen($title) >= 3 && mb_strlen($title) <= 100) {
$queryvote = DB::run() -> querySingle("SELECT `vote_id` FROM `vote` WHERE `vote_id`=? LIMIT 1;", array($id));
if (!empty($queryvote)) {
if (!in_array('', $answer)) {
DB::run() -> query("UPDATE `vote` SET `vote_title`=? WHERE `vote_id`=?;", array($title, $id));
$dbr = DB::run() -> prepare("UPDATE `voteanswer` SET `answer_option`=? WHERE `answer_id`=?;");
foreach ($answer as $key => $data) {
$dbr -> execute($data, $key);
}
if (isset($_POST['newanswer'])) {
$newanswer = check($_POST['newanswer']);
$newanswer = array_diff($newanswer, array(''));
if (count($newanswer) > 0) {
$dbr = DB::run() -> prepare("INSERT INTO `voteanswer` (`answer_vote_id`, `answer_option`) VALUES (?, ?);");
foreach ($newanswer as $data) {
$dbr -> execute($id, $data);
}
}
}
$_SESSION['note'] = 'Голосование успешно изменено!';
redirect("votes.php?".SID);
} else {
show_error('Ошибка! Не заполнены все обязательные поля с ответами!');
}
} else {
show_error('Ошибка! Данного голосования не существует!');
}
} else {
show_error('Ошибка! Слишком длинный или короткий вопрос (от 3 до 100 символов)!');
}
} else {
show_error('Ошибка! Неверный идентификатор сессии, повторите действие!');
}
echo '<img src="../images/back.gif" alt="image" /> <a href="votes.php?act=edit&id='.$id.'&'.SID.'">Вернуться</a><br />';
echo '<img src="../images/stat.gif" alt="image" /> <a href="votes.php?'.SID.'">К голосованиям</a>';
break;
############################################################################################
## Закрытие ##
############################################################################################
case 'action':
$uid = check($_GET['uid']);
$do = check($_GET['do']);
if ($uid == $_SESSION['token']) {
if ($do == 'close' || $do == 'open') {
$queryvote = DB::run() -> querySingle("SELECT `vote_id` FROM `vote` WHERE `vote_id`=? LIMIT 1;", array($id));
if (!empty($queryvote)) {
if ($do == 'close') {
DB::run() -> query("UPDATE `vote` SET `vote_closed`=? WHERE `vote_id`=?;", array(1, $id));
DB::run() -> query("DELETE FROM `votepoll` WHERE `poll_vote_id`=?;", array($id));
$_SESSION['note'] = 'Голосование успешно закрыто!';
redirect("votes.php?".SID);
}
if ($do == 'open') {
DB::run() -> query("UPDATE `vote` SET `vote_closed`=? WHERE `vote_id`=?;", array(0, $id));
$_SESSION['note'] = 'Голосование успешно открыто!';
redirect("votes.php?act=index&".SID);
}
} else {
show_error('Ошибка! Данного голосования не существует!');
}
} else {
show_error('Ошибка! Не выбрано действие для голосования!');
}
} else {
show_error('Ошибка! Неверный идентификатор сессии, повторите действие!');
}
echo '<img src="../images/img/back.gif" alt="image" /> <a href="votes.php?'.SID.'">Вернуться</a>';
break;
############################################################################################
## Удаление ##
############################################################################################
case 'del':
$uid = check($_GET['uid']);
if ($uid == $_SESSION['token']) {
if (is_admin(array(101))) {
$queryvote = DB::run() -> querySingle("SELECT `vote_id` FROM `vote` WHERE `vote_id`=? LIMIT 1;", array($id));
if (!empty($queryvote)) {
DB::run() -> query("DELETE FROM `vote` WHERE `vote_id`=?;", array($id));
DB::run() -> query("DELETE FROM `voteanswer` WHERE `answer_vote_id`=?;", array($id));
DB::run() -> query("DELETE FROM `votepoll` WHERE `poll_vote_id`=?;", array($id));
$_SESSION['note'] = 'Голосование успешно удалено!';
redirect("votes.php?".SID);
} else {
show_error('Ошибка! Данного голосования не существует!');
}
} else {
show_error('Ошибка! Удалять голосования могут только суперадмины!');
}
} else {
show_error('Ошибка! Неверный идентификатор сессии, повторите действие!');
}
echo '<img src="../images/back.gif" alt="image" /> <a href="votes.php?'.SID.'">Вернуться</a>';
break;
############################################################################################
## Пересчет счетчиков ##
############################################################################################
case 'rest':
$uid = check($_GET['uid']);
if ($uid == $_SESSION['token']) {
if (is_admin(array(101))) {
DB::run() -> query("UPDATE `vote` SET `vote_count`=(SELECT SUM(`answer_result`) FROM `voteanswer` WHERE `vote`.vote_id=`voteanswer`.`answer_vote_id`) WHERE `vote_closed`=?;", array(0));
$_SESSION['note'] = 'Все данные успешно пересчитаны!';
redirect("votes.php?".SID);
} else {
show_error('Ошибка! Пересчитывать голосования могут только суперадмины!');
}
} else {
show_error('Ошибка! Неверный идентификатор сессии, повторите действие!');
}
echo '<img src="../images/back.gif" alt="image" /> <a href="votes.php?'.SID.'">Вернуться</a>';
break;
############################################################################################
## История ##
############################################################################################
/*case 'history':
function page_strnavigation($link, $posts, $start, $total, $range = 3){
if ($total > 0) {
$pg_cnt = ceil($total / $posts);
$cur_page = ceil(($start + 1) / $posts);
$idx_fst = max($cur_page - $range, 1);
$idx_lst = min($cur_page + $range, $pg_cnt);
$res = 'Страницы: ';
if ($cur_page != 1) {
$res .='<a href="'.$link.'start='.($cur_page - 2) * $posts.'&'.SID.'" title="Назад">«</a> ';
}
if (($start - $posts) >= 0) {
if ($cur_page > ($range + 1)) {
$res .= ' <a href="'.$link.'start=0&'.SID.'">1</a> ';
if ($cur_page != ($range + 2)) {
$res .= ' ... ';
}
}
}
for ($i = $idx_fst; $i <= $idx_lst; $i++) {
$offset_page = ($i - 1) * $posts;
if ($i == $cur_page) {
$res .= ' <span class="navcurrent">'.$i.'</span> ';
} else {
$res .= ' <a href="'.$link.'start='.$offset_page.'&'.SID.'">'.$i.'</a> ';
}
}
if (($start + $posts) < $total) {
if ($cur_page < ($pg_cnt - $range)) {
if ($cur_page != ($pg_cnt - $range - 1)) {
$res .= ' ... ';
}
$res .= ' <a href="'.$link.'start='.($pg_cnt - 1) * $posts.'&'.SID.'">'.$pg_cnt.'</a> ';
}
}
if ($cur_page != $pg_cnt) {
$res .= ' <a href="'.$link.'start='.($cur_page * $posts).'&'.SID.'" title="Вперед">»</a>';
}
echo '<hr /><div class="nav">'.$res.'</div>';
}
}
$total = DB::run() -> querySingle("SELECT count(*) FROM `vote` WHERE `vote_closed`=? ORDER BY `vote_time`;", array(1));
if ($total > 0) {
if ($start >= $total) {
$start = 0;
}
$queryvote = DB::run() -> query("SELECT * FROM `vote` WHERE `vote_closed`=? ORDER BY `vote_time` DESC LIMIT ".$start.", ".$config['allvotes'].";", array(1));
while ($data = $queryvote -> fetch()) {
echo '<div class="menu">';
echo '<img src="../images/luggage.gif" alt="image" /> <b><a href="../votes/history.php?act=result&id='.$data['vote_id'].'&start='.$start.'&'.SID.'">'.$data['vote_title'].'</a></b><br />';
echo '<a href="votes.php?act=action&do=open&id='.$data['vote_id'].'&uid='.$_SESSION['token'].'&'.SID.'">Открыть</a>';
if (is_admin(array(101))) {
echo ' / <a href="votes.php?act=del&id='.$data['vote_id'].'&uid='.$_SESSION['token'].'&'.SID.'" onclick="return confirm('Вы подтверждаете удаление голосования?')">Удалить</a>';
}
echo '</div>';
echo '<div>Создано: '.date_fixed($data['vote_time']).'<br />';
echo 'Всего голосов: '.$data['vote_count'].'</div>';
}
page_strnavigation('votes.php?act=history&', $config['allvotes'], $start, $total);
} else {
show_error('Голосований в архиве еще нет!');
}
echo '<img src="../images/stat.gif" alt="image" /> <a href="votes.php?'.SID.'">Список голосований</a>';
break;*/
default:
redirect("votes.php?".SID);
endswitch;
echo '<div class="menu_2"><img src="../images/panel.gif" alt="image" /> <a href="index.php?'.SID.'">В админку</a></div>';
} else {
redirect(BASEDIR.'index.php?'.SID);
}
include(MAINDIR.'style/foot.php');
?>