🆙 Added fixed cms

This commit is contained in:
Remco committed 2026-01-07 19:32:43 +01:00
1 parent fdb0dc276d
commit 711fa2c29e
3992 files changed
+183381

No files matched your search

@@ -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' => '[email protected]',
// ]);
}
}
@@ -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' => '[email protected]',
'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 user’s 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']);
}
}