🆙 Added fixed cms

This commit is contained in:
Remco
2026-01-07 19:32:43 +01:00
parent fdb0dc276d
commit 711fa2c29e
3992 changed files with 183381 additions and 0 deletions
@@ -0,0 +1,50 @@
<?php
namespace Database\Seeders;
// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*/
public function run(): void
{
$this->call([
// General seeders
WebsiteSettingsSeeder::class,
WebsiteLanguageSeeder::class,
WebsitePermissionSeeder::class,
WebsiteWordfilterSeeder::class,
WebsiteMaintenanceTasksSeeder::class,
WebsiteArticleSeeder::class,
WebsiteTeamSeeder::class,
// Shop
WebsiteShopCategoriesSeeder::class,
WebsiteShopArticleSeeder::class,
// Help center
WebsiteRuleCategorySeeder::class,
WebsiteRuleSeeder::class,
WebsiteHelperCenterCategorySeeder::class,
WebsiteHelperCenterCategorySeeder::class,
// Values
WebsiteRareValuesCategorySeeder::class,
// Housekeeping permissions
HousekeepingPermissionSeeder::class,
]);
// \App\Models\User::factory(10)->create();
// \App\Models\User::factory()->create([
// 'name' => 'Test User',
// 'email' => 'test@example.com',
// ]);
}
}
@@ -0,0 +1,168 @@
<?php
namespace Database\Seeders;
use App\Models\WebsiteHousekeepingPermission;
use Illuminate\Database\Seeder;
class HousekeepingPermissionSeeder extends Seeder
{
public function run()
{
$permissions = [
[
'permission' => 'can_access_housekeeping',
'min_rank' => 6,
'description' => 'The minimum rank required before being able to login to the housekeeping',
],
[
'permission' => 'edit_user',
'min_rank' => 6,
'description' => 'The minimum rank required before being able to edit a user',
],
[
'permission' => 'reset_user_password',
'min_rank' => 6,
'description' => 'The minimum rank required before being able to reset the password for a user',
],
[
'permission' => 'delete_user',
'min_rank' => 7,
'description' => 'The minimum rank required before being able to delete a user',
],
[
'permission' => 'write_article',
'min_rank' => 6,
'description' => 'The minimum rank required before being able to write an article',
],
[
'permission' => 'edit_article',
'min_rank' => 6,
'description' => 'The minimum rank required before being able to edit an article',
],
[
'permission' => 'delete_article',
'min_rank' => 6,
'description' => 'The minimum rank required before being able to delete an article',
],
[
'permission' => 'manage_wordfilter',
'min_rank' => 6,
'description' => 'The minimum rank required before being able to manage the wordfilter',
],
[
'permission' => 'manage_bans',
'min_rank' => 6,
'description' => 'The minimum rank required before being able to manage the bans',
],
[
'permission' => 'manage_room_chatlogs',
'min_rank' => 6,
'description' => 'The minimum rank required before being able to read room chatlogs',
],
[
'permission' => 'manage_private_chatlogs',
'min_rank' => 6,
'description' => 'The minimum rank required before being able to read private chatlogs',
],
[
'permission' => 'manage_catalog_pages',
'min_rank' => 6,
'description' => 'The minimum rank required before being able to manage catalog pages',
],
[
'permission' => 'delete_catalog_pages',
'min_rank' => 6,
'description' => 'The minimum rank required before being able to delete catalog pages',
],
[
'permission' => 'manage_emulator_settings',
'min_rank' => 6,
'description' => 'The minimum rank required before being able to manage emulator settings',
],
[
'permission' => 'manage_emulator_texts',
'min_rank' => 6,
'description' => 'The minimum rank required before being able to manage emulator texts',
],
[
'permission' => 'manage_website_settings',
'min_rank' => 6,
'description' => 'The minimum rank required before being able to manage website settings',
],
[
'permission' => 'manage_website_blacklists',
'min_rank' => 6,
'description' => 'The minimum rank required before being able to manage website blacklists',
],
[
'permission' => 'manage_website_whitelists',
'min_rank' => 6,
'description' => 'The minimum rank required before being able to manage website whitelists',
],
[
'permission' => 'view_activity_logs',
'min_rank' => 7,
'description' => 'The minimum rank required before being able to view activity logs',
],
[
'permission' => 'manage_staff_applications',
'min_rank' => 7,
'description' => 'The minimum rank required before being able to manage staff applications',
],
[
'permission' => 'delete_website_settings',
'min_rank' => 7,
'description' => 'The minimum rank required before being able to delete website settings',
],
[
'permission' => 'manage_permissions',
'min_rank' => 7,
'description' => 'The minimum rank required before being able to manage hotel rank permissions',
],
[
'permission' => 'delete_permissions',
'min_rank' => 7,
'description' => 'The minimum rank required before being able to delete hotel rank permissions',
],
[
'permission' => 'manage_article_tags',
'min_rank' => 6,
'description' => 'The minimum rank required before being able to manage article tags',
],
[
'permission' => 'manage_teams',
'min_rank' => 6,
'description' => 'The minimum rank required before being able to manage teams',
],
[
'permission' => 'manage_achievements',
'min_rank' => 7,
'description' => 'The minimum rank required before being able to manage achievements',
],
[
'permission' => 'manage_commandlogs',
'min_rank' => 7,
'description' => 'The minimum rank required before being able to manage command logs',
],
[
'permission' => 'manage_camera_web',
'min_rank' => 7,
'description' => 'The minimum rank required before being able to manage published camera photos',
],
[
'permission' => 'manage_housekeeping_permissions',
'min_rank' => 7,
'description' => 'The minimum rank required before being able to manage housekeeping permissions',
],
];
foreach ($permissions as $permission) {
WebsiteHousekeepingPermission::query()->firstOrCreate(['permission' => $permission['permission']], [
'permission' => $permission['permission'],
'min_rank' => $permission['min_rank'],
'description' => $permission['description'],
]);
}
}
}
@@ -0,0 +1,23 @@
<?php
namespace Database\Seeders;
use App\Models\Miscellaneous\WebsiteInstallation;
use Illuminate\Database\Seeder;
class TestingSeeder extends Seeder
{
/**
* Seed the application's database.
*/
public function run(): void
{
WebsiteInstallation::query()->insert(['completed' => true, 'installation_key' => 'key']);
$this->call([
WebsiteSettingsSeeder::class,
WebsiteLanguageSeeder::class,
WebsitePermissionSeeder::class,
]);
}
}
@@ -0,0 +1,103 @@
<?php
namespace Database\Seeders;
use App\Models\Shop\WebsiteShopArticle;
use App\Models\Shop\WebsiteShopArticleFeature;
use Illuminate\Database\Seeder;
class WebsiteArticleFeatureSeeder extends Seeder
{
public function run(): void
{
$articles = WebsiteShopArticle::all();
$firstArticle = $articles[0];
$secondArticle = $articles[1];
$thirdArticle = $articles[2];
if (! $firstArticle || ! $secondArticle || ! $thirdArticle) {
return;
}
$features = [
[
'article_id' => $firstArticle->id,
'content' => 'Bronze VIP badge',
],
[
'article_id' => $firstArticle->id,
'content' => 'Bronze VIP catalogue',
],
[
'article_id' => $firstArticle->id,
'content' => 'Bronze VIP commands',
],
[
'article_id' => $firstArticle->id,
'content' => '350 credits every 15 minutes',
],
[
'article_id' => $firstArticle->id,
'content' => '350 duckets every 15 minutes',
],
[
'article_id' => $firstArticle->id,
'content' => '1 diamond every hour',
],
// Silver VIP
[
'article_id' => $secondArticle->id,
'content' => 'Silver VIP badge',
],
[
'article_id' => $secondArticle->id,
'content' => 'Silver VIP catalogue',
],
[
'article_id' => $secondArticle->id,
'content' => 'Silver VIP commands',
],
[
'article_id' => $secondArticle->id,
'content' => '450 credits every 15 minutes',
],
[
'article_id' => $secondArticle->id,
'content' => '450 duckets every 15 minutes',
],
[
'article_id' => $secondArticle->id,
'content' => '3 diamond every hour',
],
// Gold VIP
[
'article_id' => $thirdArticle->id,
'content' => 'Gold VIP badge',
],
[
'article_id' => $thirdArticle->id,
'content' => 'Gold VIP catalogue',
],
[
'article_id' => $thirdArticle->id,
'content' => 'Gold VIP commands',
],
[
'article_id' => $thirdArticle->id,
'content' => '550 credits every 15 minutes',
],
[
'article_id' => $thirdArticle->id,
'content' => '550 duckets every 15 minutes',
],
[
'article_id' => $thirdArticle->id,
'content' => '5 diamond every hour',
],
];
WebsiteShopArticleFeature::insert($features, ['article_id']);
}
}
@@ -0,0 +1,30 @@
<?php
namespace Database\Seeders;
use App\Models\Articles\WebsiteArticle;
use App\Models\User;
use Illuminate\Database\Seeder;
use Illuminate\Support\Str;
class WebsiteArticleSeeder extends Seeder
{
public function run(): void
{
if (User::count() === 0) {
User::factory()->create();
}
$title = 'Atom CMS has been installed';
$slug = Str::slug($title);
WebsiteArticle::firstOrCreate(['slug' => $slug], [
'slug' => $slug,
'title' => $title,
'short_story' => 'Welcome to your new hotel, we are super happy that you chose to use Atom CMS!',
'full_story' => sprintf('<strong>Welcome to your new hotel</strong>!<br><br>First of all thank you for using Atom CMS - it truly means a lot❤️<br><br>We built Atom CMS for you and your users to get the best possible experience when it comes to visiting %s, and we hope the journey has been a pleasure for you so far.<br><br>We have used modern and industry approved technologies (Laravel & Tailwind CSS) in order to give you the most secure & robust CMS possible.<br><br>Our idea of a good CMS is <strong>accessibility</strong> and just that, is what we have tried to make Atom CMS, so that you can be able to customise it without being a PHP expert or frontend guru. <br/><br/><strong>Some of the built in features</strong><br/>Atom CMS comes packed with tons of features, we will however only mention a few that might help to improve your hotel further!<br/><ul><li>- <a style="color: #42b0f5; text-decoration: underline;" href="https://retros.guide/docs/atom-cms/vpn-block" target="_blank">VPN / IP manager</a> - Allows you to whitelist & blacklist specific IPs or ASNs</li><li>- <a style="color: #42b0f5; text-decoration: underline;" href="https://retros.guide/docs/atom-cms/themes" target="_blank">Theme system</a> - Switch between themes easily or built your own with the simplicity of running a single command!</li><li>- <a style="color: #42b0f5; text-decoration: underline;" href="https://retros.guide/docs/atom-cms/recaptcha" target="_blank">Google ReCaptcha</a> - Keep bots away from your site, by simply enabling Googles recaptcha</li><li>- Built in <a style="color: #42b0f5; text-decoration: underline;" href="https://retros.guide/docs/atom-cms/language" target="_blank">multi language support</a> - Allow your users to browse your site in their preferred language</li></ul><br/><strong>Built in theme system!</strong><br/> Atom CMS has its own theme system, making it an absolute breeze to brew up a new theme or switch themes between the existing ones. If you wish to build your own theme, but is a bit unsure how to start, then head over to the <a style="color: #42b0f5; text-decoration: underline;" href="https://retros.guide/docs/atom-cms/themes" target="__blank">Our documentation site</a>. It gives you a good idea on how to use the theming system and tons of other aspects of running your hotel✨<br><br>With everything being said it is time to wrap up the introduction, but before we do that we want to <strong>wish you the best of luck with your hotel</strong>!', setting('hotel_name')),
'user_id' => User::first()->id,
'image' => 'website_news_images/default.png',
]);
}
}
@@ -0,0 +1,83 @@
<?php
namespace Database\Seeders;
use App\Models\Help\WebsiteHelpCenterCategory;
use Illuminate\Database\Seeder;
class WebsiteHelperCenterCategorySeeder extends Seeder
{
public function run(): void
{
$categories = [
[
'name' => config('habbo.site.default_name') . ' Way',
'content' => 'Welcome to the ' . config('habbo.site.default_name') . " Hotel, where fun and excitement are always around the corner! 🎉 To ensure that everyone has the best experience possible, we've created The " . config('habbo.site.default_name') . " Way - our special set of rules that keeps our community safe and friendly. 🌈<br/><br/>It's important to know that these rules and regulations can change without notice. As a member of our awesome " . config('habbo.site.default_name') . " community, you agree to follow these terms and conditions. 😊 If you don't, there may be sanctions applied to your account.<br/><br/>But don't worry! If you have any questions or concerns about The " . config('habbo.site.default_name') . ' Way, our friendly Hotel Staff are always here to help. 💬 Now, go ahead and click the button below to read The ' . config('habbo.site.default_name') . ' Way and join us in creating a fantastic environment for all! 🚀',
'image_url' => 'safety_tips_1.png',
'button_text' => config('habbo.site.default_name') . ' Way',
'button_url' => '/help-center/rules',
'position' => 1,
],
[
'name' => 'Ban Appeals',
'content' => "If you think you've been unfairly banned from our super cool hotel, no worries - we're here to help! 🌟 All you need to do is submit a ticket 🎟️ and let us know what happened.<br/><br/>We'll check it out and give you a fair chance to return to the awesome world of " . config('habbo.site.default_name') . "! 🕺💃 So go ahead, share your side of the story, and let's get you back in on the fun! 😄",
'image_url' => 'safety_tips_5.png',
'button_text' => 'Submit a ban appeal',
'button_url' => '/help-center/tickets/create',
'position' => 2,
],
[
'name' => 'VPN Unblock',
'content' => "We know that sometimes you might need to use a VPN or proxy connection while visiting our fantastic hotel! 🏨 But since we want to keep our community safe and free from toxicity, we block these connections by default. 🛡️<br/><br/>However, we understand that there are exceptions, and we're here to help! 🌟 If you find yourself in one of these situations, you can request VPN unblocking:<br/><br/><div style='margin-left: 15px;'><strong>1.</strong> You're not using a VPN but still got flagged somehow. 🚩<br/><strong>2.</strong> You're at school or university and need a VPN to access " . config('habbo.site.default_name') . ". 🏫<br /><strong>3.</strong> You're on public connections that might be flagged as a VPN.</div> 📱<br/><br/>Please note that if using a VPN is optional for you, we usually deny the request. This is just to make sure we maintain a positive and friendly environment for all our users! 😄<br/><br/>To request VPN unblocking, simply submit a ticket with an explanation of your situation, and we'll do our best to help you out! Together, let's keep the " . config('habbo.site.default_name') . ' Hotel experience amazing for everyone! 🎉',
'image_url' => 'safety_tips_2.png',
'button_text' => 'Submit Unblock request',
'button_url' => '/help-center/tickets/create',
'position' => 3,
],
[
'name' => 'Scam Reports',
'content' => 'Hey ' . config('habbo.site.default_name') . " buddies! 🎉 We know that sometimes, unfortunately, users might try to scam others out of their coins, diamonds, or furniture. 😢 But don't worry, we've got your back! We don't tolerate this kind of behavior, and we're here to help you report it. 🌟<br/><br/>Have you been scammed? 😨<br/><br/>If so, we're here to assist! Just follow the template below and include it in a ticket under the 'Scam Reports' option:<br/><br/><div style='margin-left: 15px;'><strong>1.</strong> Scammed by:<br/><strong>2.</strong> Date of Scam:<br/><strong>3.</strong> Items Scammed:<br/><strong>4.</strong> Evidence (if available):</div><br/><br/>Remember, it's important to be honest and true to yourself! 🌈 Nobody likes a trickster, and stealing won't make you rich - it makes you a criminal. 😔 By reporting scams, we can work together to keep the " . config('habbo.site.default_name') . ' Hotel a fun, safe, and amazing place for everyone! 🎊',
'image_url' => 'safety_tips_7.png',
'button_text' => 'Submit scam report',
'position' => 4,
],
// Left side boxes
/*
* [
'name' => "GOTW Rules",
'content' => "GOTW, or Gamer of the Week is all about celebrating the top events players from the past seven days. 🏆 For every hotel alerted event you win, you'll earn both GOTW points and diamonds! 💎 So put your gaming skills to the test and aim for the top!<br/><br/>Curious about the rules? No problem! Click the link below & you'll find all the information you need to become a GOTW pro.<br/><br/>Get ready to shine as the next Gamer of the Week! 🚀",
'button_text' => "GOTW Rules",
'position' => 1,
'small_box' => true,
],
* */
[
'name' => 'Room Ads',
'content' => 'Hey there, ' . config('habbo.site.default_name') . " friends! 🌟 Did you know that you can make your room even cooler by displaying images in it? 😮 That's right! With room background furniture, you can embed images directly into your room on the hotel! 🖼️<br/><br/>However, by default, you won't have the furniture access or permission to do this. But no worries, you can apply for it! 🎉 All you need to do is submit a ticket and let us know why you'd like to have these awesome room ad rights. 📝<br/><br/>Once you've got the permission, you'll be able to customize your room and make it truly one-of-a-kind! 🌈 So go ahead and tell us why you need those rights, and let's take your room to the next level together! 🚀",
'button_text' => 'Submit a ticket',
'button_url' => '/help-center/tickets/create',
'position' => 1,
'small_box' => true,
],
[
'name' => 'Something else?',
'content' => "We know that sometimes you might have questions, concerns, or just need a little help that doesn't fit into any specific category. No worries, we've got you covered! 🌟<br/><br/>For anything else that you need assistance with, simply select the 'Other' option when submitting a ticket. 📝<br/><br/>Our friendly and helpful Hotel Staff will be more than happy to get in touch and provide the support you need. 🤗 So go ahead, reach out to us for any reason, big or small, and let's make your " . config('habbo.site.default_name') . ' experience the best it can be! 🚀',
'button_text' => 'Submit a ticket',
'button_url' => '/help-center/tickets/create',
'position' => 2,
'small_box' => true,
],
];
foreach ($categories as $category) {
$attributes = [];
foreach ($category as $key => $value) {
$attributes[$key] = $value;
}
WebsiteHelpCenterCategory::updateOrCreate(['name' => $category['name']], $attributes);
}
}
}
@@ -0,0 +1,29 @@
<?php
namespace Database\Seeders;
use App\Models\Miscellaneous\WebsiteLanguage;
use Illuminate\Database\Seeder;
class WebsiteLanguageSeeder extends Seeder
{
public function run(): void
{
$languages = [
['country_code' => 'en', 'language' => 'English'],
['country_code' => 'da', 'language' => 'Danish'],
['country_code' => 'fi', 'language' => 'Finnish'],
['country_code' => 'de', 'language' => 'German'],
['country_code' => 'fr', 'language' => 'French'],
['country_code' => 'tr', 'language' => 'Turkish'],
['country_code' => 'se', 'language' => 'Swedish'],
['country_code' => 'nl', 'language' => 'Netherland'],
['country_code' => 'br', 'language' => 'Portuguese (Brazil)'],
['country_code' => 'it', 'language' => 'Italy'],
['country_code' => 'es', 'language' => 'Spain'],
['country_code' => 'no', 'language' => 'Norwegian'],
];
WebsiteLanguage::query()->upsert($languages, ['country_code']);
}
}
@@ -0,0 +1,42 @@
<?php
namespace Database\Seeders;
use App\Models\Game\Permission;
use App\Models\Miscellaneous\WebsiteMaintenanceTask;
use App\Models\User;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Str;
class WebsiteMaintenanceTasksSeeder extends Seeder
{
public function run(): void
{
$permission = Permission::orderByDesc('id')->first();
$user = User::where('rank', $permission->id)->first();
if ($user === null) {
$user = User::create([
'username' => 'Admin',
'mail' => 'admin@example.com',
'password' => Hash::make(Str::password()),
'account_created' => time(),
'last_login' => time(),
'motto' => 'Atom',
'look' => 'fa-201407-1324.hr-828-1035.ch-3001-1261-1408.sh-3068-92-1408.cp-9032-1308.lg-270-1281.hd-209-3',
'credits' => 0,
'ip_register' => '127.0.0.1',
'ip_current' => '127.0.0.1',
'auth_ticket' => '',
'home_room' => 0,
'rank' => $permission?->id ?? 1,
]);
}
WebsiteMaintenanceTask::firstOrCreate(['task' => 'Working on the hotel'], [
'user_id' => $user->id,
'completed' => false,
]);
}
}
@@ -0,0 +1,63 @@
<?php
namespace Database\Seeders;
use App\Models\Miscellaneous\WebsitePermission;
use Illuminate\Database\Seeder;
class WebsitePermissionSeeder extends Seeder
{
public function run(): void
{
$permissions = [
[
'permission' => 'bypass_vpn',
'min_rank' => '6',
'description' => 'Min rank to bypass vpn blocker check',
],
[
'permission' => 'view_server_logs',
'min_rank' => '7',
'description' => 'Minimum required rank to access the log viewer',
],
[
'permission' => 'housekeeping_access',
'min_rank' => '7',
'description' => 'Minimum required rank to access the log viewer',
],
[
'permission' => 'delete_article_comments',
'min_rank' => '7',
'description' => 'Minimum required rank to delete article comments without being the author',
],
[
'permission' => 'manage_website_tickets',
'min_rank' => '7',
'description' => 'Minimum required rank to view and reply to others tickets',
],
[
'permission' => 'delete_website_tickets',
'min_rank' => '7',
'description' => 'Minimum required rank to delete others tickets',
],
[
'permission' => 'delete_website_ticket_replies',
'min_rank' => '7',
'description' => 'Minimum required rank to delete replies on a ticket',
],
[
'permission' => 'generate_logo',
'min_rank' => '7',
'description' => 'Minimum required rank to use the logo generator',
],
];
foreach ($permissions as $permission) {
WebsitePermission::firstOrCreate(['permission' => $permission['permission']], [
'permission' => $permission['permission'],
'min_rank' => $permission['min_rank'],
'description' => $permission['description'],
]);
}
}
}
@@ -0,0 +1,37 @@
<?php
namespace Database\Seeders;
use App\Models\Community\RareValue\WebsiteRareValueCategory;
use Illuminate\Database\Seeder;
class WebsiteRareValuesCategorySeeder extends Seeder
{
public function run(): void
{
$categories = [
[
'name' => 'Limited Edition',
'badge' => 'hotel-icon',
'priority' => 1,
],
[
'name' => 'Ultra rares',
'badge' => 'hotel-icon',
'priority' => 2,
],
[
'name' => 'Super rares',
'badge' => 'hotel-icon',
'priority' => 3,
],
[
'name' => 'Regulars',
'badge' => 'hotel-icon',
'priority' => 4,
],
];
WebsiteRareValueCategory::upsert($categories, ['name'], ['name', 'badge', 'priority']);
}
}
@@ -0,0 +1,38 @@
<?php
namespace Database\Seeders;
use App\Models\Help\WebsiteRuleCategory;
use Illuminate\Database\Seeder;
class WebsiteRuleCategorySeeder extends Seeder
{
public function run(): void
{
$categories = [
[
'name' => 'General Rules',
'description' => 'The general rules of the hotel',
'badge' => 'hotel-icon',
'created_at' => now(),
'updated_at' => now(),
],
[
'name' => 'Account Rules',
'description' => 'The general account rules on Habbo',
'badge' => 'hotel-icon',
'created_at' => now(),
'updated_at' => now(),
],
[
'name' => 'Hotel',
'description' => 'Hotel rules & guidelines',
'badge' => 'hotel-icon',
'created_at' => now(),
'updated_at' => now(),
],
];
WebsiteRuleCategory::upsert($categories, ['name']);
}
}
@@ -0,0 +1,202 @@
<?php
namespace Database\Seeders;
use App\Models\Help\WebsiteRule;
use App\Models\Help\WebsiteRuleCategory;
use Illuminate\Database\Seeder;
class WebsiteRuleSeeder extends Seeder
{
public function run(): void
{
$categories = WebsiteRuleCategory::all()->pluck('id');
$rules = [
// General rules
[
'category_id' => $categories[0],
'paragraph' => '1.1',
'rule' => 'Do not abuse the Call for Help (CFH) system; it should be used during emergency purposes only.',
'created_at' => now(),
'updated_at' => now(),
],
[
'category_id' => $categories[0],
'paragraph' => '1.2',
'rule' => 'Do not advertise other Habbo Retros; hotel links or purposely mentioning the name of another hotel with the intentions of advertising is not permitted.',
'created_at' => now(),
'updated_at' => now(),
],
[
'category_id' => $categories[0],
'paragraph' => '1.3',
'rule' => 'Do not attempt to or scam credits or furniture from other users through betting, gaming, or trading.',
'created_at' => now(),
'updated_at' => now(),
],
[
'category_id' => $categories[0],
'paragraph' => '1.4',
'rule' => 'Do not bully, harass, or abuse other users; avoid violent or aggressive behavior.',
'created_at' => now(),
'updated_at' => now(),
],
[
'category_id' => $categories[0],
'paragraph' => '1.5',
'rule' => 'Do not disclose any personal information of another user (e.g., address, IP Address, phone number, school, private images etc.) without their consent.',
'created_at' => now(),
'updated_at' => now(),
],
[
'category_id' => $categories[0],
'paragraph' => '1.6',
'rule' => 'Do not excessively repeat identical or similar statements (spamming).',
'created_at' => now(),
'updated_at' => now(),
],
[
'category_id' => $categories[0],
'paragraph' => '1.7',
'rule' => 'Users are to not participate in any sexual, inappropriate, or generally objective acts towards other users without their prior consent.',
'created_at' => now(),
'updated_at' => now(),
],
[
'category_id' => $categories[0],
'paragraph' => '1.8',
'rule' => 'Do not make rooms with inappropriate or abusive names.',
'created_at' => now(),
'updated_at' => now(),
],
[
'category_id' => $categories[0],
'paragraph' => '1.9',
'rule' => 'Do not attempt to or successfully harm a users home internet connection.',
'created_at' => now(),
'updated_at' => now(),
],
[
'category_id' => $categories[0],
'paragraph' => '1.10',
'rule' => 'Do not disrupt events with explicit language or negative behavior.',
'created_at' => now(),
'updated_at' => now(),
],
// Accounts rules
[
'category_id' => $categories[1],
'paragraph' => '2.1',
'rule' => 'Do not attempt to or give away, buy, sell, or trade your Habbo account and/or items for virtual items from another game, accounts from another game, cash, or vice versa without permission from an Administrator. This includes giving away, buying, selling or trading furniture/currency for Habbo furniture/currency or vice versa. ',
'created_at' => now(),
'updated_at' => now(),
],
[
'category_id' => $categories[1],
'paragraph' => '2.2',
'rule' => 'Do not create a username with an offensive name that is insulting, racist, harassing, or generally objectionable.',
'created_at' => now(),
'updated_at' => now(),
],
[
'category_id' => $categories[1],
'paragraph' => '2.3',
'rule' => 'Do not evade an IP Address ban.',
'created_at' => now(),
'updated_at' => now(),
],
[
'category_id' => $categories[1],
'paragraph' => '2.4',
'rule' => 'Do not share your account with other users.',
'created_at' => now(),
'updated_at' => now(),
],
[
'category_id' => $categories[1],
'paragraph' => '2.5',
'rule' => 'Do not threaten to, attempt to, or hack other users accounts.',
'created_at' => now(),
'updated_at' => now(),
],
[
'category_id' => $categories[1],
'paragraph' => '2.6',
'rule' => 'Do not create multiple accounts for the purpose of taking an advantage over gaining more in-game currency and/or rares of any kind.',
'created_at' => now(),
'updated_at' => now(),
],
[
'category_id' => $categories[1],
'paragraph' => '2.7',
'rule' => 'Do not re-appeal your ban unless stated otherwise. This means if you re-appeal in 2 days after your first appeal was denied and you were told to re-appeal in 2-3 weeks, you will be banned from the forum as well as the hotel.',
'created_at' => now(),
'updated_at' => now(),
],
[
'category_id' => $categories[1],
'paragraph' => '2.8',
'rule' => 'Accounts are limited to 2 per person. This means, only 1 Alt acc is acceptable. Anything more than this, will result in a full account wipe including credits, and rares.',
'created_at' => now(),
'updated_at' => now(),
],
// Hotel rules
[
'category_id' => $categories[2],
'paragraph' => '3.1',
'rule' => 'Do not attempt to or exploit errors of Habbo; report it to the Administration immediately.',
'created_at' => now(),
'updated_at' => now(),
],
[
'category_id' => $categories[2],
'paragraph' => '3.2',
'rule' => 'Do not attempt to or refund your VIP Membership or donation to Habbo at any given time; all payments are final.',
'created_at' => now(),
'updated_at' => now(),
],
[
'category_id' => $categories[2],
'paragraph' => '3.3',
'rule' => 'Do not intentionally give wrong or misleading information to staff members in reports about rule violations, complaints, bug reports, or support requests.',
'created_at' => now(),
'updated_at' => now(),
],
[
'category_id' => $categories[2],
'paragraph' => '3.4',
'rule' => 'Do not make false statements against Habbo or any other part of its services.',
'created_at' => now(),
'updated_at' => now(),
],
[
'category_id' => $categories[2],
'paragraph' => '3.5',
'rule' => 'Do not pretend to be a representative of Habbo. This includes mimicing, acting like them, and or claim to have staff powers.',
'created_at' => now(),
'updated_at' => now(),
],
[
'category_id' => $categories[2],
'paragraph' => '3.6',
'rule' => 'Do not threaten to, attempt to, or use any scripts or third party software to enter, disrupt, or modify Habbo.',
'created_at' => now(),
'updated_at' => now(),
],
[
'category_id' => $categories[2],
'paragraph' => '3.7',
'rule' => 'Non-harmful auto-typing, auto-clicking and other programs can only be used if you are the room owner or with permission from the room owner.',
'created_at' => now(),
'updated_at' => now(),
],
];
if (WebsiteRule::doesntExist()) {
WebsiteRule::insert($rules);
}
}
}
@@ -0,0 +1,312 @@
<?php
namespace Database\Seeders;
use App\Models\Miscellaneous\WebsiteSetting;
use Illuminate\Database\Seeder;
class WebsiteSettingsSeeder extends Seeder
{
public function run(): void
{
$settings = [
[
'key' => 'theme',
'value' => 'dusk',
'comment' => 'Specifies the active CMS theme (dusk, atom)',
],
[
'key' => 'hotel_name',
'value' => 'Atom',
'comment' => 'Specifies the name of the hotel',
],
[
'key' => 'rcon_ip',
'value' => '127.0.0.1',
'comment' => 'Specifies the RCON IP used for the CMS to perform RCON commands',
],
[
'key' => 'rcon_port',
'value' => '3001',
'comment' => 'Specifies the RCON port used for the CMS to perform RCON commands',
],
[
'key' => 'start_motto',
'value' => sprintf('I love %s hotel', setting('hotel_name') ?? config('habbo.site.default_name')),
'comment' => 'Specifies the start motto the user gets assigned upon registration',
],
[
'key' => 'start_credits',
'value' => '5000',
'comment' => 'Specifies the amount of credits a user receives upon registration',
],
[
'key' => 'start_duckets',
'value' => '5000',
'comment' => 'Specifies the amount of duckets a user receives upon registration',
],
[
'key' => 'start_diamonds',
'value' => '100',
'comment' => 'Specifies the amount of diamonds a user receives upon registration',
],
[
'key' => 'start_points',
'value' => '0',
'comment' => 'Specifies the amount of points a user receives upon registration',
],
[
'key' => 'avatar_imager',
'value' => 'https://www.habbo.com/habbo-imaging/avatarimage?figure=',
'comment' => 'The base url for the imager used to render avatars on the CMS',
],
[
'key' => 'start_look',
'value' => 'fa-201407-1324.hr-828-1035.ch-3001-1261-1408.sh-3068-92-1408.cp-9032-1308.lg-270-1281.hd-209-3',
'comment' => 'Sets the starting outfit for any new user registering',
],
[
'key' => 'referrals_needed',
'value' => '5',
'comment' => 'Specifies the amount of referrals needed before being able to claim the referral reward',
],
[
'key' => 'referral_reward_amount',
'value' => '30',
'comment' => 'Specifies the reward amount when a user claims a reward',
],
[
'key' => 'referral_reward_currency_type',
'value' => 'diamonds',
'comment' => 'Specify what type of currency that are given upon referral reward claim (credits, duckets, diamonds, points)',
],
[
'key' => 'point_currency_number',
'value' => '101',
'comment' => 'Determines what number the points currency type is',
],
[
'key' => 'discord_invitation_link',
'value' => 'https://discord.gg/rX3aShUHdg',
'comment' => 'The link used to invite people to your Discord server',
],
[
'key' => 'discord_widget_id',
'value' => '1008150166521524264',
'comment' => 'The Discord widget ID you want to show on the CMS',
],
[
'key' => 'min_staff_rank',
'value' => '4',
'comment' => 'The minimum rank before being considered a staff member',
],
[
'key' => 'min_rank_to_see_hidden_staff',
'value' => '6',
'comment' => 'The minimum rank to enable seeing hidden staff ranks & members',
],
[
'key' => 'badges_path',
'value' => '/client/flash/c_images/album1584',
'comment' => 'The path to the badges folder, for the frontend',
],
[
'key' => 'badge_path_filesystem',
'value' => '/var/www/gamedata/c_images/album1584',
'comment' => 'The path to the badges folder, for the backend',
],
[
'key' => 'group_badge_path',
'value' => '/client/flash/c_images/Badgeparts/generated',
'comment' => 'The path that contains all the generated group badges',
],
[
'key' => 'ads_path_filesystem',
'value' => '/var/www/gamedata/custom',
'comment' => 'The path for loading ADS from disk - for the Backend',
],
[
'key' => 'ads_picture_path',
'value' => '/gamedata/custom',
'comment' => 'The path for loading ADS from the CMS - for the Frontend',
],
[
'key' => 'nitro_external_texts_file',
'value' => '/var/www/gamedata/config/ExternalTexts.json',
'comment' => 'The path for loading ExternalTexts',
],
[
'key' => 'maintenance_enabled',
'value' => '0',
'comment' => 'Determines whether maintenance is enabled or not',
],
[
'key' => 'min_maintenance_login_rank',
'value' => '5',
'comment' => 'The minimum rank required to login to the hotel during maintenance',
],
[
'key' => 'maintenance_message',
'value' => "We're working very hard on making " . setting('hotel_name') . ' the best possible version of itself 💛<br><br> We want to make sure ' . setting('hotel_name') . ' lives up to the standards you deserve, hence we currently have no ETA for when we can open our doors.<br><br>We promise that once we feel confident that ' . setting('hotel_name') . " is ready for launch, we'll let everyone know about it.<br><br>- The " . setting('hotel_name') . ' team ⭐',
'comment' => 'The maintenance message displayed to users while maintenance is activated',
],
[
'key' => 'username_regex',
'value' => '/^[a-zA-Z0-9_.-]+$/u',
'comment' => 'The regex used to validate username input fields',
],
[
'key' => 'min_housekeeping_rank',
'value' => '6',
'comment' => 'The minimum rank required to see the housekeeping button',
],
[
'key' => 'housekeeping_url',
'value' => '/housekeeping',
'comment' => 'The url to the housekeeping page',
],
[
'key' => 'max_accounts_per_ip',
'value' => '2',
'comment' => 'The maximum allowed accounts registered per IP address',
],
[
'key' => 'google_recaptcha_enabled',
'value' => '0',
'comment' => 'Toggles whether google recaptcha is enabled or not - Do not enable if turnstile is enabled',
],
[
'key' => 'cloudflare_turnstile_enabled',
'value' => '1',
'comment' => 'Determines whether cloudflare turnstile is enabled or not - Do not enable if google recaptche is enabled',
],
[
'key' => 'vpn_block_enabled',
'value' => '0',
'comment' => 'Toggles whether the VPN blocker is enabled or not',
],
[
'key' => 'ipdata_api_key',
'value' => 'ADD-API-KEY-HERE',
'comment' => 'The API key needed from ipdata.co to block VPNs (Only necessary if vpn block is enabled)',
],
[
'key' => 'cms_logo',
'value' => '/assets/images/kasja_atomlogo.png',
'comment' => 'Default logo for the cms',
],
[
'key' => 'cms_header',
'value' => '/assets/images/kasja_mepage_header.png',
'comment' => 'Default header for the me page',
],
[
'key' => 'cms_me_backdrop',
'value' => '/assets/images/kasja_mepage_image.png',
'comment' => 'Default backdrop header for the me page',
],
[
'key' => 'room_thumbnail_path',
'value' => '/client/flash/c_images/rooms',
'comment' => 'Path to room thumbnails',
],
[
'key' => 'hotel_home_room',
'value' => '0',
'comment' => 'The homeroom every new users will be assigned to, leave as 0 if you do not wish to assign any home room',
],
[
'key' => 'cms_color_mode',
'value' => 'light',
'comment' => 'Determines the color mode of the CMS (light = normal, dark = dark mode)',
],
[
'key' => 'force_staff_2fa',
'value' => '0',
'comment' => 'If set to 1 every staff will be forced to apply 2FA before being able to visit any other page',
],
[
'key' => 'website_wordfilter_enabled',
'value' => '1',
'comment' => 'Determines whether the wordfilter on the CMS will be enabled or not',
],
[
'key' => 'requires_beta_code',
'value' => '0',
'comment' => 'Determines whether users need a beta code to register or not (0 for no & 1 for yes)',
],
[
'key' => 'disable_registration',
'value' => '0',
'comment' => 'Determines whether registration is enabled or not (0 for no & 1 for yes)',
],
[
'key' => 'give_hc_on_register',
'value' => '0',
'comment' => 'Determines whether the registered user will receive HC upon registration',
],
[
'key' => 'hc_on_register_duration',
'value' => '315569260',
'comment' => 'Specifies the amount of time a user receives their HC subscription for (The default amount is 10 years)',
],
[
'key' => 'max_comment_per_article',
'value' => '2',
'comment' => 'Specifies the amount of times a user can comment per article',
],
[
'key' => 'furniture_icons_path',
'value' => '/client/flash/dcr/hof_furni/icons',
'comment' => 'The path used to display furniture icons - eg. on rare values',
],
[
'key' => 'nitro_path',
'value' => '/client/nitro/nitro-react/dist',
'comment' => 'The path in which your index.html for nitro is located',
],
[
'key' => 'enable_discord_webhook',
'value' => '0',
'comment' => 'Specify whether Discord webhooks will be sent or not (0 for disabled, 1 for enabled)',
],
[
'key' => 'discord_webhook_url',
'value' => '',
'comment' => 'The URL provided by discord to send a webhook request',
],
[
'key' => 'max_guestbook_posts_per_profile',
'value' => '3',
'comment' => 'The amount of guestbook posts a user can post on each user profile',
],
[
'key' => 'tinymce_api_key',
'value' => 'API-KEY-HERE',
'comment' => 'The API key necessary in order to use TinyMCE',
],
];
foreach ($settings as $setting) {
WebsiteSetting::firstOrCreate(['key' => $setting['key']], [
'key' => $setting['key'],
'value' => $setting['value'],
'comment' => $setting['comment'],
]);
}
$recaptchaEnabled = WebsiteSetting::where('key', 'google_recaptcha_enabled')->first();
// This is done to update the rare values key for existing applications
WebsiteSetting::where('key', 'rare_values_icons_path')->update([
'key' => 'furniture_icons_path',
]);
// Disables cloudflare turnstile if the seeder is run while having google recaptcha enabled.
if ($recaptchaEnabled->value === '1') {
WebsiteSetting::where('key', 'cloudflare_turnstile_enabled')->update([
'value' => '0',
]);
}
}
}
@@ -0,0 +1,130 @@
<?php
namespace Database\Seeders;
use App\Models\Shop\WebsiteShopArticle;
use App\Models\Shop\WebsiteShopCategory;
use Illuminate\Database\Seeder;
class WebsiteShopArticleSeeder extends Seeder
{
public function run(): void
{
$vipCategory = WebsiteShopCategory::where('name', 'VIP')->firstOrCreate(['slug' => 'vip'], [
'name' => 'VIP',
'icon_url' => 'https://i.imgur.com/5NBdR0z.gif',
]);
$articles = [
[
'website_shop_category_id' => $vipCategory->id,
'name' => 'Bronze Package',
'info' => 'Embark on your Habbo adventure with the Bronze Package your essential starter kit for the virtual world. Start building your dream rooms, customize your avatar, and get access to basic perks that will make your stay more enjoyable.',
'icon_url' => 'https://i.imgur.com/1VGFYSL.gif',
'color' => '#c5630f',
'costs' => 500,
'give_rank' => 2,
'credits' => 5000,
'duckets' => 5000,
'diamonds' => 100,
'badges' => 'VipParties2',
'furniture' => null,
],
[
'website_shop_category_id' => $vipCategory->id,
'name' => 'Silver Package',
'info' => 'The Silver Package is designed for Habbos who are ready to take their experience up a notch. Enjoy a substantial boost of in-game currency and exclusive access to items that will set you apart from the crowd.',
'icon_url' => 'https://i.imgur.com/5NBdR0z.gif',
'color' => '#dddddd',
'costs' => 1000,
'give_rank' => 3,
'credits' => 10000,
'duckets' => 10000,
'diamonds' => 300,
'badges' => 'VipParties2_Top100',
'furniture' => null,
],
[
'website_shop_category_id' => $vipCategory->id,
'name' => 'Gold VIP',
'info' => 'The Gold VIP package is the epitome of Habbo luxury, reserved for those who crave the ultimate in virtual prestige. Enjoy unparalleled access to exclusive items, premium features, and a status symbol that will make heads turn wherever you go in the Hotel.',
'icon_url' => 'https://i.imgur.com/NiVvRrs.gif',
'color' => '#E4A317FF',
'costs' => 1500,
'give_rank' => 4,
'credits' => 15000,
'duckets' => 15000,
'diamonds' => 500,
'badges' => 'VipParties2_Top10',
'furniture' => null,
],
// Example for furniture pack
/*
[
'name' => 'Furniture Pack #1',
'info' => 'The perfect pack for the casino builder',
'icon' => 'gold',
'color' => '#E4A317FF',
'costs' => 750,
'badges' => 'VipParties2_Top100',
'furniture' => json_encode([
[
'item_id' => 202,
'amount' => 5,
],
[
'item_id' => 212,
'amount' => 2,
],
[
'item_id' => 230,
'amount' => 2,
],
]),
],
*/
// Example for badge pack
/*
[
'name' => 'Badge Pack #1',
'info' => 'The perfect pack for the badge collector',
'icon' => 'gold',
'color' => '#E4A317FF',
'costs' => 250,
'badges' => 'BADGE_CODE_1;BADGE_CODE_2;BADGE_CODE_3;BADGE_CODE_4;BADGE_CODE_5',
],
*/
// Example for currency pack
/*
[
'name' => 'Currency Pack #1',
'info' => 'The perfect pack to boost your account',
'icon' => 'gold',
'color' => '#E4A317FF',
'costs' => 250,
'credits' => 25000,
'duckets' => 35000,
'diamonds' => 2500,
],
*/
];
foreach ($articles as $article) {
WebsiteShopArticle::updateOrCreate(['name' => $article['name']], [
'website_shop_category_id' => $vipCategory->id,
'name' => $article['name'],
'info' => $article['info'],
'icon_url' => $article['icon_url'],
'color' => $article['color'],
'costs' => $article['costs'],
'give_rank' => $article['give_rank'] ?? null,
'credits' => $article['credits'] ?? null,
'duckets' => $article['duckets'] ?? null,
'diamonds' => $article['diamonds'] ?? null,
'badges' => $article['badges'] ?? null,
'furniture' => $article['furniture'] ?? null,
]);
}
}
}
@@ -0,0 +1,37 @@
<?php
namespace Database\Seeders;
use App\Models\Shop\WebsiteShopCategory;
use Illuminate\Database\Seeder;
class WebsiteShopCategoriesSeeder extends Seeder
{
public function run(): void
{
$categories = [
[
'name' => 'VIP',
'slug' => 'vip',
'icon' => 'https://i.imgur.com/YiI0I1i.png',
],
[
'name' => 'Currency',
'slug' => 'currency',
'icon' => 'https://i.imgur.com/YiI0I1i.png',
],
[
'name' => 'Badges',
'slug' => 'badges',
'icon' => 'https://i.imgur.com/YiI0I1i.png',
],
[
'name' => 'Rares',
'slug' => 'rares',
'icon' => 'https://i.imgur.com/YiI0I1i.png',
],
];
WebsiteShopCategory::upsert($categories, ['slug'], ['name', 'icon']);
}
}
@@ -0,0 +1,20 @@
<?php
namespace Database\Seeders;
use App\Models\Community\Staff\WebsiteTeam;
use Illuminate\Database\Seeder;
class WebsiteTeamSeeder extends Seeder
{
public function run(): void
{
$teams = [
['rank_name' => 'DJ'],
['rank_name' => 'Wired Expert'],
['rank_name' => 'Event planner'],
];
WebsiteTeam::query()->upsert($teams, ['rank_name']);
}
}
@@ -0,0 +1,78 @@
<?php
namespace Database\Seeders;
use App\Models\Miscellaneous\WebsiteWordfilter;
use Carbon\Carbon;
use Illuminate\Database\Seeder;
class WebsiteWordfilterSeeder extends Seeder
{
public function run(): void
{
$words = [
[
'word' => 'fuck',
'created_at' => Carbon::now(),
'updated_at' => Carbon::now(),
],
[
'word' => 'idiot',
'created_at' => Carbon::now(),
'updated_at' => Carbon::now(),
],
[
'word' => 'hotel',
'created_at' => Carbon::now(),
'updated_at' => Carbon::now(),
],
[
'word' => 'nigger',
'created_at' => Carbon::now(),
'updated_at' => Carbon::now(),
],
[
'word' => 'nigga',
'created_at' => Carbon::now(),
'updated_at' => Carbon::now(),
],
[
'word' => 'retard',
'created_at' => Carbon::now(),
'updated_at' => Carbon::now(),
],
[
'word' => 'faggot',
'created_at' => Carbon::now(),
'updated_at' => Carbon::now(),
],
[
'word' => 'tranny',
'created_at' => Carbon::now(),
'updated_at' => Carbon::now(),
],
[
'word' => 'bitch',
'created_at' => Carbon::now(),
'updated_at' => Carbon::now(),
],
[
'word' => 'cunt',
'created_at' => Carbon::now(),
'updated_at' => Carbon::now(),
],
[
'word' => 'cock',
'created_at' => Carbon::now(),
'updated_at' => Carbon::now(),
],
[
'word' => 'pussy',
'created_at' => Carbon::now(),
'updated_at' => Carbon::now(),
],
];
WebsiteWordfilter::query()->upsert($words, ['word']);
}
}