📄 Source: db.php
<?php
// JSON Database operations
require_once 'config.php';
function readJSON($filename) {
$file = DATA_DIR . $filename;
if (!file_exists($file)) {
return [];
}
$content = file_get_contents($file);
return json_decode($content, true) ?: [];
}
function writeJSON($filename, $data) {
$file = DATA_DIR . $filename;
file_put_contents($file, json_encode($data, JSON_PRETTY_PRINT));
return true;
}
// User functions
function getUser($userId) {
$users = readJSON('users.json');
foreach ($users as $user) {
if ($user['id'] === $userId) {
return $user;
}
}
return null;
}
function getUserByUsername($username) {
$users = readJSON('users.json');
foreach ($users as $user) {
if (strtolower($user['username']) === strtolower($username)) {
return $user;
}
}
return null;
}
function getUserByDiscordId($discordId) {
$users = readJSON('users.json');
foreach ($users as $user) {
if (isset($user['discord_id']) && $user['discord_id'] === $discordId) {
return $user;
}
}
return null;
}
function getUserByGoogleId($googleId) {
$users = readJSON('users.json');
foreach ($users as $user) {
if (isset($user['google_id']) && $user['google_id'] === $googleId) {
return $user;
}
}
return null;
}
function createUser($username, $password = null, $discordId = null, $googleId = null, $discordData = null) {
$users = readJSON('users.json');
if (getUserByUsername($username)) {
return false;
}
$userId = uniqid('user_');
$newUser = [
'id' => $userId,
'username' => $username,
'password' => $password ? password_hash($password, PASSWORD_DEFAULT) : null,
'discord_id' => $discordId,
'google_id' => $googleId,
'discord_data' => $discordData,
'created_at' => date('Y-m-d H:i:s'),
// No global admin/staff flags anymore - permissions are per-forum
];
$users[] = $newUser;
writeJSON('users.json', $users);
return $userId;
}
function updateUser($userId, $data) {
$users = readJSON('users.json');
foreach ($users as &$user) {
if ($user['id'] === $userId) {
foreach ($data as $key => $value) {
$user[$key] = $value;
}
writeJSON('users.json', $users);
return true;
}
}
return false;
}
// Forum functions
function getForums() {
$forums = readJSON('forums.json');
usort($forums, function($a, $b) {
return strtotime($b['created_at']) - strtotime($a['created_at']);
});
return $forums;
}
function getForum($forumId) {
$forums = readJSON('forums.json');
foreach ($forums as $forum) {
if ($forum['id'] === $forumId) {
return $forum;
}
}
return null;
}
function createForum($data) {
$forums = readJSON('forums.json');
$forumId = uniqid('forum_');
// In createForum(), add discord_server_id to forum data
$forum = array_merge([
'id' => $forumId,
'created_at' => date('Y-m-d H:i:s'),
'submissions' => [],
'status' => 'open',
'admins' => [],
'discord_server_id' => null, // Store the Discord server ID
'discord_roles' => [] // Store available roles
], $data);
// Owner is automatically an admin
if (!in_array($data['created_by'], $forum['admins'])) {
$forum['admins'][] = $data['created_by'];
}
$forums[] = $forum;
writeJSON('forums.json', $forums);
return $forumId;
}
function updateForum($forumId, $data) {
$forums = readJSON('forums.json');
foreach ($forums as &$forum) {
if ($forum['id'] === $forumId) {
foreach ($data as $key => $value) {
$forum[$key] = $value;
}
writeJSON('forums.json', $forums);
return true;
}
}
return false;
}
function deleteForum($forumId) {
$forums = readJSON('forums.json');
$forums = array_filter($forums, function($forum) use ($forumId) {
return $forum['id'] !== $forumId;
});
writeJSON('forums.json', array_values($forums));
return true;
}
function addForumAdmin($forumId, $userId) {
$forum = getForum($forumId);
if (!$forum) return false;
if (!in_array($userId, $forum['admins'])) {
$forum['admins'][] = $userId;
return updateForum($forumId, ['admins' => $forum['admins']]);
}
return true;
}
function removeForumAdmin($forumId, $userId) {
$forum = getForum($forumId);
if (!$forum) return false;
// Can't remove the owner
if ($userId === $forum['created_by']) {
return false;
}
$forum['admins'] = array_filter($forum['admins'], function($id) use ($userId) {
return $id !== $userId;
});
return updateForum($forumId, ['admins' => array_values($forum['admins'])]);
}
function isForumOwner($forumId, $userId) {
$forum = getForum($forumId);
if (!$forum) return false;
return $forum['created_by'] === $userId;
}
function isForumAdmin($forumId, $userId) {
$forum = getForum($forumId);
if (!$forum) return false;
return in_array($userId, $forum['admins']);
}
function canManageForum($forumId, $userId) {
return isForumOwner($forumId, $userId) || isForumAdmin($forumId, $userId);
}
function getForumsByUser($userId) {
$forums = getForums();
$userForums = [];
foreach ($forums as $forum) {
if ($forum['created_by'] === $userId || in_array($userId, $forum['admins'])) {
$userForums[] = $forum;
}
}
return $userForums;
}
// Application submission functions
function getSubmissions($forumId) {
$forum = getForum($forumId);
return $forum ? $forum['submissions'] : [];
}
function addSubmission($forumId, $submission) {
$forum = getForum($forumId);
if (!$forum) return false;
$submission['id'] = uniqid('sub_');
$submission['submitted_at'] = date('Y-m-d H:i:s');
$submission['status'] = 'pending';
$submission['reviewed_by'] = null;
$submission['reviewed_at'] = null;
$submission['note'] = '';
$forum['submissions'][] = $submission;
return updateForum($forumId, ['submissions' => $forum['submissions']]);
}
function updateSubmission($forumId, $submissionId, $data) {
$forum = getForum($forumId);
if (!$forum) return false;
foreach ($forum['submissions'] as &$sub) {
if ($sub['id'] === $submissionId) {
foreach ($data as $key => $value) {
$sub[$key] = $value;
}
return updateForum($forumId, ['submissions' => $forum['submissions']]);
}
}
return false;
}
function getUserSubmissions($userId) {
$forums = getForums();
$userSubmissions = [];
foreach ($forums as $forum) {
foreach ($forum['submissions'] as $sub) {
if ($sub['user_id'] === $userId) {
$sub['forum_title'] = $forum['title'];
$sub['forum_id'] = $forum['id'];
$userSubmissions[] = $sub;
}
}
}
usort($userSubmissions, function($a, $b) {
return strtotime($b['submitted_at']) - strtotime($a['submitted_at']);
});
return $userSubmissions;
}
function hasUserSubmitted($forumId, $userId) {
$forum = getForum($forumId);
if (!$forum) return false;
foreach ($forum['submissions'] as $sub) {
if ($sub['user_id'] === $userId) {
return true;
}
}
return false;
}
?>
← Back