📂 File Browser

/applications/includes
🌙 Dark Mode
🎯 Quick Launch:

📁 Directories

📄 Files

🐘 auth.php
▶ Open 📄 View Source
🐘 config.php
▶ Open 📄 View Source
🐘 functions.php
▶ Open 📄 View Source

📄 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