_db = DB::getInstance(); $this->_cache = new Cache(['name' => 'nameless', 'extension' => '.cache', 'path' => ROOT_PATH . '/cache/']); } public static function runPreUser() { $instance = new self(); $instance->initialiseGroups(); $instance->initialiseLanguages(); $instance->initialiseModules(); $instance->initialiseIntegrations(); $instance->initialiseReactions(); $instance->initialiseSettings(); $instance->initialiseTasks(); $instance->initialiseTemplates(); $instance->initialiseWidgets(); } public static function runPostUser() { $instance = new self(); $instance->initialiseForum(); } private function initialiseGroups(): void { $this->_db->insert('groups', [ 'name' => 'Member', 'group_html' => 'Member', 'permissions' => '{"usercp.messaging":1,"usercp.signature":1,"usercp.nickname":1,"usercp.title":1,"usercp.private_profile":1,"usercp.profile_banner":1,"profile.post":1}', 'order' => 3, ]); $this->_db->insert('groups', [ 'name' => 'Admin', 'group_html' => 'Admin', 'group_username_color' => '#ff0000', 'group_username_css' => '', 'admin_cp' => true, 'permissions' => '{"administrator":1,"admincp.core":1,"admincp.core.api":1,"admincp.core.seo":1,"admincp.core.general":1,"admincp.core.avatars":1,"admincp.core.fields":1,"admincp.core.debugging":1,"admincp.core.emails":1,"admincp.core.queue":1,"admincp.core.navigation":1,"admincp.core.announcements":1,"admincp.core.reactions":1,"admincp.core.registration":1,"admincp.core.social_media":1,"admincp.core.terms":1,"admincp.errors":1,"admincp.core.placeholders":1,"admincp.members":1,"admincp.integrations":1,"admincp.integrations.edit":1,"admincp.discord":1,"admincp.minecraft":1,"admincp.minecraft.authme":1,"admincp.minecraft.servers":1,"admincp.minecraft.query_errors":1,"admincp.minecraft.banners":1,"admincp.modules":1,"admincp.pages":1,"admincp.security":1,"admincp.security.acp_logins":1,"admincp.security.template":1,"admincp.styles":1,"admincp.styles.panel_templates":1,"admincp.styles.templates":1,"admincp.styles.templates.edit":1,"admincp.styles.images":1,"admincp.update":1,"admincp.users":1,"admincp.users.edit":1,"admincp.groups":1,"admincp.groups.self":1,"admincp.widgets":1,"modcp.ip_lookup":1,"modcp.punishments":1,"modcp.punishments.warn":1,"modcp.punishments.ban":1,"modcp.punishments.banip":1,"modcp.punishments.revoke":1,"modcp.reports":1,"modcp.profile_banner_reset":1,"usercp.messaging":1,"usercp.signature":1,"admincp.forums":1,"usercp.private_profile":1,"usercp.nickname":1,"usercp.title":1,"usercp.profile_banner":1,"profile.private.bypass":1, "admincp.security.all":1,"admincp.core.hooks":1,"admincp.security.group_sync":1,"admincp.core.emails_mass_message":1,"modcp.punishments.reset_avatar":1,"usercp.gif_avatar":1,"profile.post":1}', 'order' => 1, 'staff' => true, ]); $this->_db->insert('groups', [ 'name' => 'Moderator', 'group_html' => 'Moderator', 'admin_cp' => true, 'permissions' => '{"modcp.ip_lookup":1,"modcp.punishments":1,"modcp.punishments.warn":1,"modcp.punishments.ban":1,"modcp.punishments.banip":1,"modcp.punishments.revoke":1,"modcp.reports":1,"admincp.users":1,"modcp.profile_banner_reset":1,"usercp.messaging":1,"usercp.signature":1,"usercp.private_profile":1,"usercp.nickname":1,"usercp.title":1,"usercp.profile_banner":1,"profile.private.bypass":1,"profile.post":1}', 'order' => 2, 'staff' => true, ]); $this->_db->insert('groups', [ 'name' => 'Unconfirmed Member', 'group_html' => 'Unconfirmed Member', 'group_username_color' => '#6c757d', 'permissions' => '{}', 'default_group' => true, 'order' => 4, ]); Settings::set('member_list_viewable_groups', json_encode([1, 2, 3, 4]), 'Members'); } private function initialiseLanguages(): void { foreach (Language::LANGUAGES as $short_code => $meta) { $this->_db->insert('languages', [ 'name' => $meta['name'], 'short_code' => $short_code, 'is_default' => (Session::get('default_language') == $short_code) ? 1 : 0, ]); } $this->_cache->setCache('languagecache'); $this->_cache->store('language', Session::get('default_language')); } private function initialiseModules(): void { $this->_db->insert('modules', [ 'name' => 'Core', 'enabled' => true, ]); $this->_db->insert('modules', [ 'name' => 'Forum', 'enabled' => true, ]); $this->_db->insert('modules', [ 'name' => 'Discord Integration', 'enabled' => true, ]); $this->_db->insert('modules', [ 'name' => 'Cookie Consent', 'enabled' => true, ]); $this->_db->insert('modules', [ 'name' => 'Members', 'enabled' => true, ]); $this->_cache->setCache('modulescache'); $this->_cache->store('enabled_modules', [ [ 'name' => 'Core', 'priority' => 1, ], [ 'name' => 'Forum', 'priority' => 4, ], [ 'name' => 'Discord Integration', 'priority' => 7, ], [ 'name' => 'Cookie Consent', 'priority' => 10, ], [ 'name' => 'Members', 'priority' => 13, ], ]); $this->_cache->store('module_core', true); $this->_cache->store('module_forum', true); } private function initialiseIntegrations(): void { $this->_db->insert('integrations', [ 'name' => 'Minecraft', 'enabled' => true, 'can_unlink' => false, 'required' => false, ]); // TODO: should this be in the DiscordIntegration module...? $this->_db->insert('integrations', [ 'name' => 'Discord', 'enabled' => true, 'can_unlink' => true, 'required' => false, ]); } private function initialiseReactions(): void { $this->_db->insert('reactions', [ 'name' => 'Like', 'html' => '👍', 'enabled' => true, 'type' => Reaction::TYPE_POSITIVE, ]); $this->_db->insert('reactions', [ 'name' => 'Dislike', 'html' => '👎', 'enabled' => true, 'type' => Reaction::TYPE_NEGATIVE, ]); $this->_db->insert('reactions', [ 'name' => 'Meh', 'html' => '😐', 'enabled' => true, 'type' => Reaction::TYPE_NEUTRAL, ]); $this->_db->insert('reactions', [ 'name' => 'Helpful', 'html' => '🛠️', 'enabled' => true, 'type' => Reaction::TYPE_POSITIVE, ]); $this->_db->insert('reactions', [ 'name' => 'Creative', 'html' => '🌈', 'enabled' => true, 'type' => Reaction::TYPE_POSITIVE, ]); $this->_db->insert('reactions', [ 'name' => 'Amazing', 'html' => '⭐', 'enabled' => true, 'type' => Reaction::TYPE_CUSTOM, 'custom_score' => 5, ]); } private function initialiseSettings(): void { Settings::set('registration_enabled', '1'); Settings::set('displaynames', '0'); Settings::set('uuid_linking', '1'); Settings::set('recaptcha', '0'); Settings::set('recaptcha_type', 'Recaptcha3'); Settings::set('recaptcha_login', '0'); Settings::set('email_verification', '1'); Settings::set('nameless_version', '2.2.5'); Settings::set('version_checked', date('U')); Settings::set('phpmailer', '0'); Settings::set('custom_avatars', '0'); Settings::set('default_avatar_type', 'minecraft'); Settings::set('default_avatar_source', 'cravatar'); Settings::set('default_avatar_perspective', 'face'); Settings::set('default_avatar_image', ''); Settings::set(Settings::MINECRAFT_INTEGRATION, '1'); Settings::set('discord_integration', '0'); Settings::set('home_type', 'news'); Settings::set('forum_reactions', '1'); Settings::set('error_reporting', '0'); Settings::set('page_loading', '0'); Settings::set('unique_id', substr(str_shuffle('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'), 0, 62)); Settings::set('use_api', 0); Settings::set('mc_api_key', SecureRandom::alphanumeric()); Settings::set('query_type', 'internal'); Settings::set('player_list_limit', '20'); Settings::set('timezone', $_SESSION['install_timezone']); Settings::set('maintenance', '0'); Settings::set('maintenance_message', 'This website is currently in maintenance mode.'); Settings::set('private_profile', '1'); Settings::set('validate_user_action', '{"action":"promote","group":1}'); Settings::set('login_method', 'email'); Settings::set('username_sync', '1'); Settings::set('status_page', '0'); Settings::set('placeholders', '0'); $this->_db->insert('privacy_terms', [ 'name' => 'terms', 'value' => '
You agree to be bound by our website rules and any laws which may apply to this website and your participation.
The website administration have the right to terminate your account at any time, delete any content you may have posted, and your IP address and any data you input to the website is recorded to assist the site staff with their moderation duties.
The site administration have the right to change these terms and conditions, and any site rules, at any point without warning. Whilst you may be informed of any changes, it is your responsibility to check these terms and the rules at any point.
', ]); $this->_db->insert('privacy_terms', [ 'name' => 'cookies', 'value' => 'What are cookies?' . $nameless_terms . '
'); } private function initialiseTasks(): void { GenerateSitemap::schedule(new Language('core', 'en_UK')); PurgeExpiredSessions::schedule(new Language('core', 'en_UK')); PurgeInactiveUsers::schedule(new Language('core', 'en_UK')); } private function initialiseTemplates(): void { $this->_db->insert('templates', [ 'name' => 'DefaultRevamp', 'enabled' => true, ]); Settings::set('default_template', 'DefaultRevamp'); $this->_db->insert('panel_templates', [ 'name' => 'Default', 'enabled' => true, ]); Settings::set('default_panel_template', 'Default'); $config_path = Config::get('core.path'); if (!empty($config_path)) { $config_path = '/' . trim($config_path, '/'); } Settings::set('banner_image_path', $config_path . '/uploads/template_banners/homepage_bg_trimmed.jpg'); } private function initialiseWidgets(): void { $this->_db->insert('widgets', [ 'name' => 'Online Staff', 'enabled' => true, 'pages' => '["index","forum"]', ]); $this->_db->insert('widgets', [ 'name' => 'Online Users', 'enabled' => true, 'pages' => '["index","forum"]', ]); $this->_db->insert('widgets', [ 'name' => 'Statistics', 'enabled' => true, 'pages' => '["index","forum"]', ]); $this->_cache->setCache('Core-widgets'); $this->_cache->store('enabled', [ 'Online Staff' => 1, 'Online Users' => 1, 'Statistics' => 1, ]); } private function initialiseForum() { $this->_db->insert('forums', [ 'forum_title' => 'Category', 'forum_description' => 'The first forum category!', 'forum_order' => 1, 'forum_type' => 'category', ]); $this->_db->insert('forums', [ 'forum_title' => 'Forum', 'forum_description' => 'The first discussion forum!', 'forum_order' => 2, 'parent' => 1, 'forum_type' => 'forum', 'news' => 1, ]); $this->_db->insert('topics', [ 'forum_id' => 2, 'topic_title' => 'Welcome to NamelessMC!', 'topic_creator' => 1, 'topic_last_user' => 1, 'topic_date' => date('U'), 'topic_reply_date' => date('U'), 'label' => null, ]); $this->_db->insert('posts', [ 'forum_id' => 2, 'topic_id' => 1, 'post_creator' => 1, 'post_content' => <<<'POST'Welcome!
To get started with NamelessMC, visit your StaffCP using the blue gear icon in the top right of your screen.
If you need support, visit our Discord server: https://discord.gg/nameless
Thank you and enjoy,
The NamelessMC Development team.
POST, 'post_date' => date('Y-m-d H:i:s'), 'created' => date('U'), ]); // Must be updated afterwards due to foreign key $this->_db->update('forums', 2, [ 'last_post_date' => date('U'), 'last_user_posted' => 1, 'last_topic_posted' => 1, ]); // Permissions for ($i = 0; $i < 4; $i++) { for ($n = 1; $n < 3; $n++) { $this->_db->insert('forums_permissions', [ 'group_id' => $i, 'forum_id' => $n, 'view' => true, 'create_topic' => ($i == 0 ? 0 : 1), 'edit_topic' => ($i == 0 ? 0 : 1), 'create_post' => ($i == 0 ? 0 : 1), 'view_other_topics' => true, 'moderate' => (($i == 2 || $i == 3) ? 1 : 0), ]); } } // Forum Labels $this->_db->insert('forums_labels', [ 'name' => 'Default', 'html' => '{x}', ]); $this->_db->insert('forums_labels', [ 'name' => 'Primary', 'html' => '{x}', ]); $this->_db->insert('forums_labels', [ 'name' => 'Success', 'html' => '{x}', ]); $this->_db->insert('forums_labels', [ 'name' => 'Info', 'html' => '{x}', ]); $this->_db->insert('forums_labels', [ 'name' => 'Warning', 'html' => '{x}', ]); $this->_db->insert('forums_labels', [ 'name' => 'Danger', 'html' => '{x}', ]); } }