Files
easystream-main/f_core/f_classes/class.polls.php
SamiAhmed7777 0b7e2d0a5b feat: Add comprehensive documentation suite and reorganize project structure
- Created complete documentation in docs/ directory
- Added PROJECT_OVERVIEW.md with feature highlights and getting started guide
- Added ARCHITECTURE.md with system design and technical details
- Added SECURITY.md with comprehensive security implementation guide
- Added DEVELOPMENT.md with development workflows and best practices
- Added DEPLOYMENT.md with production deployment instructions
- Added API.md with complete REST API documentation
- Added CONTRIBUTING.md with contribution guidelines
- Added CHANGELOG.md with version history and migration notes
- Reorganized all documentation files into docs/ directory for better organization
- Updated README.md with proper documentation links and quick navigation
- Enhanced project structure with professional documentation standards
2025-10-21 00:39:45 -07:00

118 lines
4.0 KiB
PHP

<?php
/*******************************************************************************************************************
| Polls Management Class
| Handles creating and managing polls for community engagement
|*******************************************************************************************************************/
defined('_ISVALID') or header('Location: /error');
class VPolls
{
public static function createPoll($usr_id, $question, $options, $duration_days = null)
{
global $class_database;
$expires_at = $duration_days ? date('Y-m-d H:i:s', strtotime("+{$duration_days} days")) : null;
$sql = "INSERT INTO `db_polls` (`usr_id`, `question`, `expires_at`)
VALUES (%d, '%s', %s)";
$class_database->doQuery($sql,
$usr_id,
$class_database->safe_input($question),
$expires_at ? "'$expires_at'" : 'NULL'
);
$poll_id = $class_database->insert_id();
// Add options
foreach ($options as $index => $option) {
$sql = "INSERT INTO `db_poll_options` (`poll_id`, `option_text`, `display_order`)
VALUES (%d, '%s', %d)";
$class_database->doQuery($sql, $poll_id, $class_database->safe_input($option), $index);
}
return ['success' => true, 'poll_id' => $poll_id];
}
public static function vote($poll_id, $option_id, $usr_id)
{
global $class_database;
// Check if already voted
$sql = "SELECT COUNT(*) as count FROM `db_poll_votes` WHERE `poll_id` = %d AND `usr_id` = %d";
$result = $class_database->doQuery($sql, $poll_id, $usr_id);
$row = $result->fetch_assoc();
if ($row['count'] > 0) {
return ['success' => false, 'error' => 'Already voted'];
}
// Add vote
$sql = "INSERT INTO `db_poll_votes` (`poll_id`, `option_id`, `usr_id`) VALUES (%d, %d, %d)";
$class_database->doQuery($sql, $poll_id, $option_id, $usr_id);
// Update vote counts
$sql = "UPDATE `db_poll_options` SET `votes` = (SELECT COUNT(*) FROM `db_poll_votes` WHERE `option_id` = %d)
WHERE `option_id` = %d";
$class_database->doQuery($sql, $option_id, $option_id);
$sql = "UPDATE `db_polls` SET `total_votes` = (SELECT COUNT(*) FROM `db_poll_votes` WHERE `poll_id` = %d)
WHERE `poll_id` = %d";
$class_database->doQuery($sql, $poll_id, $poll_id);
return ['success' => true];
}
public static function getResults($poll_id)
{
global $class_database;
$sql = "SELECT p.*, po.option_id, po.option_text, po.votes, po.display_order
FROM `db_polls` p
LEFT JOIN `db_poll_options` po ON p.poll_id = po.poll_id
WHERE p.poll_id = %d
ORDER BY po.display_order ASC";
$result = $class_database->doQuery($sql, $poll_id);
$poll = null;
$options = [];
while ($row = $result->fetch_assoc()) {
if (!$poll) {
$poll = [
'poll_id' => $row['poll_id'],
'question' => $row['question'],
'total_votes' => $row['total_votes'],
'expires_at' => $row['expires_at'],
'closed' => $row['closed']
];
}
if ($row['option_id']) {
$options[] = [
'option_id' => $row['option_id'],
'option_text' => $row['option_text'],
'votes' => $row['votes'],
'percentage' => $poll['total_votes'] > 0 ? round(($row['votes'] / $poll['total_votes']) * 100, 1) : 0
];
}
}
$poll['options'] = $options;
return $poll;
}
public static function closePoll($poll_id, $usr_id)
{
global $class_database;
$sql = "UPDATE `db_polls` SET `closed` = 1 WHERE `poll_id` = %d AND `usr_id` = %d";
$class_database->doQuery($sql, $poll_id, $usr_id);
return ['success' => true];
}
}