This repository has been archived on 2024-06-26. You can view files and clone it, but cannot push or open issues or pull requests.
sakura/app/Console/Command/SetupCommand.php

345 lines
12 KiB
PHP

<?php
/**
* Holds the setup command controller.
* @package Sakura
*/
namespace Sakura\Console\Command;
use CLIFramework\Command;
use Sakura\DB;
use Sakura\Net;
use Sakura\User;
/**
* The command that handles setting up the base data.
* @package Sakura
* @author Julian van de Groep <me@flash.moe>
*/
class SetupCommand extends Command
{
/**
* A quick description of this command.
* @return string.
*/
public function brief(): string
{
return 'Adds the required data to the tables, only needed once after the initial migration.';
}
/**
* Adds data to the database required to get everything running.
*/
public function execute(): void
{
// Check if the users table has user with id 1
$userCheck = DB::table('users')->where('user_id', 1)->count();
// If positive, stop
if ($userCheck > 0) {
$this->getLogger()->writeln("It appears that you've already done the setup already!");
$this->getLogger()->writeln("If this isn't the case, make sure your tables are empty.");
return;
}
// Rank data (uses column names)
$ranks = [
[
'rank_hierarchy' => 0,
'rank_name' => 'Inactive',
'rank_hidden' => 1,
'rank_colour' => '#555',
'rank_description' => 'Users that are yet to be activated or have deactivated their account.',
'rank_title' => 'Inactive',
],
[
'rank_hierarchy' => 1,
'rank_name' => 'Normal user',
'rank_multiple' => 's',
'rank_description' => 'Regular users with regular permissions.',
'rank_title' => 'Member',
],
[
'rank_hierarchy' => 3,
'rank_name' => 'Moderator',
'rank_multiple' => 's',
'rank_colour' => '#fa3703',
'rank_description' => 'Users with special permissions to keep the community at peace.',
'rank_title' => 'Moderator',
],
[
'rank_hierarchy' => 4,
'rank_name' => 'Administrator',
'rank_multiple' => 's',
'rank_colour' => '#824ca0',
'rank_description' => 'Users that manage the and everything around that.',
'rank_title' => 'Administrator',
],
[
'rank_hierarchy' => 1,
'rank_name' => 'Bot',
'rank_multiple' => 's',
'rank_hidden' => 1,
'rank_colour' => '#9e8da7',
'rank_description' => 'Reserved accounts for services.',
'rank_title' => 'Bot',
],
[
'rank_hierarchy' => 2,
'rank_name' => 'Premium',
'rank_colour' => '#ee9400',
'rank_description' => 'Users that purchased premium to help us keep the site and its service alive.',
'rank_title' => 'Premium',
],
[
'rank_hierarchy' => 1,
'rank_name' => 'Alumni',
'rank_colour' => '#ff69b4',
'rank_description' => 'Users who made big contributions to the site but have since moved on.',
'rank_title' => 'Alumni',
],
[
'rank_hierarchy' => 0,
'rank_name' => 'Banned',
'rank_colour' => '#666',
'rank_description' => 'Banned users.',
'rank_title' => 'Banned',
],
];
// Insert all the ranks into the database
foreach ($ranks as $rank) {
DB::table('ranks')->insert($rank);
}
// Permission data
$perms = [
[
'rank_id' => config('rank.regular'),
'perm_change_profile' => true,
'perm_change_avatar' => true,
'perm_change_userpage' => true,
'perm_change_signature' => true,
'perm_deactivate_account' => true,
'perm_view_user_links' => true,
'perm_manage_ranks' => true,
'perm_manage_friends' => true,
'perm_comments_create' => true,
'perm_comments_edit' => true,
'perm_comments_delete' => true,
'perm_comments_vote' => true,
],
[
'rank_id' => config('rank.mod'),
'perm_change_background' => true,
'perm_change_header' => true,
'perm_change_username' => true,
'perm_change_user_title' => true,
'perm_view_user_details' => true,
'perm_is_mod' => true,
'perm_can_restrict' => true,
'perm_manage_profile_images' => true,
],
[
'rank_id' => config('rank.admin'),
'perm_change_background' => true,
'perm_change_header' => true,
'perm_change_username' => true,
'perm_change_user_title' => true,
'perm_view_user_details' => true,
'perm_is_mod' => true,
'perm_is_admin' => true,
'perm_can_restrict' => true,
'perm_manage_profile_images' => true,
],
[
'rank_id' => config('rank.premium'),
'perm_change_background' => true,
'perm_change_header' => true,
'perm_change_username' => true,
'perm_change_user_title' => true,
],
[
'rank_id' => config('rank.banned'),
'perm_change_profile' => false,
'perm_change_avatar' => false,
'perm_change_background' => false,
'perm_change_header' => false,
'perm_change_userpage' => false,
'perm_change_signature' => false,
'perm_change_username' => false,
'perm_change_user_title' => false,
'perm_deactivate_account' => false,
'perm_view_user_links' => false,
'perm_view_user_details' => false,
'perm_manage_ranks' => false,
'perm_manage_friends' => false,
'perm_comments_create' => false,
'perm_comments_edit' => false,
'perm_comments_delete' => false,
'perm_comments_vote' => false,
'perm_is_mod' => false,
'perm_is_admin' => false,
'perm_can_restrict' => false,
'perm_manage_profile_images' => false,
],
];
// Insert all the permissions into the database
foreach ($perms as $perm) {
DB::table('perms')->insert($perm);
}
// Forum data
$forums = [
[
'forum_order' => 1,
'forum_name' => 'Your first category',
'forum_type' => 1,
],
[
'forum_order' => 1,
'forum_name' => 'Your first playpen',
'forum_desc' => 'Description of your first forum.',
'forum_category' => 1,
'forum_icon' => 'fa-smile-o',
],
[
'forum_order' => 2,
'forum_name' => 'Private',
'forum_type' => 1,
],
[
'forum_order' => 1,
'forum_name' => 'Trash',
'forum_desc' => 'Where the deleted topics go before being permanently removed.',
'forum_category' => 3,
'forum_icon' => 'fa-trash',
],
];
// Insert all the forums into the database
foreach ($forums as $forum) {
DB::table('forums')->insert($forum);
}
// Forum permission data
$forum_perms = [
[
'forum_id' => 1,
'rank_id' => config('rank.inactive'),
'perm_view' => true,
],
[
'forum_id' => 3,
'rank_id' => config('rank.inactive'),
'perm_view' => false,
],
[
'forum_id' => 1,
'rank_id' => config('rank.regular'),
'perm_view' => true,
'perm_reply' => true,
'perm_topic_create' => true,
'perm_edit' => true,
'perm_delete' => true,
],
[
'forum_id' => 1,
'rank_id' => config('rank.mod'),
'perm_topic_delete' => true,
'perm_topic_move' => true,
'perm_edit_any' => true,
'perm_delete_any' => true,
'perm_change_type' => true,
'perm_change_status' => true,
],
[
'forum_id' => 3,
'rank_id' => config('rank.mod'),
'perm_topic_delete' => true,
'perm_topic_move' => true,
'perm_edit_any' => true,
'perm_delete_any' => true,
'perm_change_type' => true,
],
[
'forum_id' => 0,
'rank_id' => config('rank.admin'),
'perm_view' => true,
'perm_reply' => true,
'perm_topic_create' => true,
'perm_topic_delete' => true,
'perm_topic_move' => true,
'perm_edit' => true,
'perm_edit_any' => true,
'perm_delete' => true,
'perm_delete_any' => true,
'perm_bypass_rules' => true,
'perm_change_type' => true,
'perm_change_status' => true,
],
[
'forum_id' => 0,
'rank_id' => config('rank.banned'),
'perm_reply' => false,
'perm_topic_create' => false,
'perm_topic_delete' => false,
'perm_topic_move' => false,
'perm_edit' => false,
'perm_edit_any' => false,
'perm_delete' => false,
'perm_delete_any' => false,
'perm_bypass_rules' => false,
'perm_change_type' => false,
'perm_change_status' => false,
],
[
'forum_id' => 1,
'rank_id' => config('rank.banned'),
'perm_view' => true,
],
[
'forum_id' => 3,
'rank_id' => config('rank.banned'),
'perm_view' => false,
],
];
// Insert all the forum permissions into the database
foreach ($forum_perms as $fperm) {
DB::table('forum_perms')->insert($fperm);
}
// Bot user
$botUserId = DB::table('users')->insertGetId([
'username' => 'Railgun',
'username_clean' => 'railgun',
'password' => password_hash('railgun', PASSWORD_BCRYPT),
'email' => config('mail.contact_address'),
'register_ip' => Net::pton('::1'),
'last_ip' => Net::pton('::1'),
'user_registered' => time(),
'user_last_online' => 0,
'user_country' => 'JP',
'user_activated' => true,
'user_verified' => true,
]);
// Create the actual user object
$botUser = User::construct($botUserId);
// Add ranks to the user
$botUser->addRanks([
config('rank.regular'),
config('rank.bot'),
config('rank.admin'),
]);
// Set the main rank to bot
$botUser->setMainRank(config('rank.bot'));
$this->getLogger()->writeln("Success! You can now start a development server use the serve command for mahou.");
$this->getLogger()->writeln("The default username and password are both railgun.");
}
}