%PDF- %PDF-
Direktori : /data/www_bck/varak.cloud_bck/tracker.varak.cloud/src/Legacy/ |
Current File : //data/www_bck/varak.cloud_bck/tracker.varak.cloud/src/Legacy/Poll.php |
<?php /** * TorrentPier – Bull-powered BitTorrent tracker engine * * @copyright Copyright (c) 2005-2018 TorrentPier (https://torrentpier.com) * @link https://github.com/torrentpier/torrentpier for the canonical source repository * @license https://github.com/torrentpier/torrentpier/blob/master/LICENSE MIT License */ namespace TorrentPier\Legacy; /** * Class Poll * @package TorrentPier\Legacy */ class Poll { public $err_msg = ''; public $poll_votes = []; public $max_votes = 0; public function __construct() { global $bb_cfg; $this->max_votes = $bb_cfg['max_poll_options']; } /** * Формирование результатов голосования * * @param $posted_data * @return string */ public function build_poll_data($posted_data) { $poll_caption = (string)@$posted_data['poll_caption']; $poll_votes = (string)@$posted_data['poll_votes']; $this->poll_votes = []; if (!$poll_caption = str_compact($poll_caption)) { global $lang; return $this->err_msg = $lang['EMPTY_POLL_TITLE']; } $this->poll_votes[] = $poll_caption; // заголовок имеет vote_id = 0 foreach (explode("\n", $poll_votes) as $vote) { if (!$vote = str_compact($vote)) { continue; } $this->poll_votes[] = $vote; } // проверять на "< 3" -- 2 варианта ответа + заголовок if (\count($this->poll_votes) < 3 || \count($this->poll_votes) > $this->max_votes + 1) { global $lang; return $this->err_msg = sprintf($lang['NEW_POLL_VOTES'], $this->max_votes); } } /** * Добавление голосов в базу данных * * @param int $topic_id */ public function insert_votes_into_db($topic_id) { $this->delete_votes_data($topic_id); $sql_ary = []; foreach ($this->poll_votes as $vote_id => $vote_text) { $sql_ary[] = [ 'topic_id' => (int)$topic_id, 'vote_id' => (int)$vote_id, 'vote_text' => (string)$vote_text, 'vote_result' => (int)0, ]; } $sql_args = DB()->build_array('MULTI_INSERT', $sql_ary); DB()->query("REPLACE INTO " . BB_POLL_VOTES . $sql_args); DB()->query("UPDATE " . BB_TOPICS . " SET topic_vote = 1 WHERE topic_id = $topic_id"); } /** * Удаление голосования * * @param int $topic_id */ public function delete_poll($topic_id) { DB()->query("UPDATE " . BB_TOPICS . " SET topic_vote = 0 WHERE topic_id = $topic_id"); $this->delete_votes_data($topic_id); } /** * Удаление информации о проголосовавших и голосов * * @param int $topic_id */ public function delete_votes_data($topic_id) { DB()->query("DELETE FROM " . BB_POLL_VOTES . " WHERE topic_id = $topic_id"); DB()->query("DELETE FROM " . BB_POLL_USERS . " WHERE topic_id = $topic_id"); CACHE('bb_poll_data')->rm("poll_$topic_id"); } }