🆙 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,141 @@
<x-app-layout>
@push('title', $article->title)
<div class="col-span-12 rounded space-y-3 md:col-span-3">
<x-community.staff-card :user="$article->user" />
<x-content.content-card icon="article-icon">
<x-slot:title>
{{ __('Other articles') }}
</x-slot:title>
<x-slot:under-title>
{{ __('Our most recent articles') }}
</x-slot:under-title>
<div class="flex flex-col gap-y-2">
@forelse($otherArticles as $art)
<a href="{{ route('article.show', $art->slug) }}"
style="background: rgba(0, 0, 0, 0.5) url({{ $art->image }}) center;"
class="w-full rounded h-12 bg-blue-200 transition ease-in-out duration-200 hover:scale-[103%] text-white flex justify-center items-center font-bold recent-articles">
{{ Str::limit($art->title, 20) }}
</a>
@empty
<p class="dark:text-gray-400">
{{ __('There is currently no other articles') }}
</p>
@endforelse
</div>
</x-content.content-card>
</div>
<div class="col-span-12 space-y-4 md:col-span-9">
<div
class="relative flex flex-col gap-y-8 overflow-hidden rounded p-3 shadow bg-gray-800 text-gray-100">
<div class="relative flex h-24 flex-col items-center justify-center gap-y-1 overflow-hidden rounded px-2 text-white"
style="background: url({{ asset('storage/' . $article->image ) }}) center; background-size: cover;">
<div class="absolute h-full w-full bg-black bg-opacity-50"></div>
<p class="relative w-full truncate text-center text-xl font-semibold lg:text-2xl xl:text-3xl">
{{ $article->title }}</p>
<p class="relative w-full truncate text-center">{{ $article->short_story }}</p>
</div>
<div class="px-2" id="article-content">
{!! $article->full_story !!}
</div>
@include('community.partials.article-reactions')
</div>
@if ($article->can_comment)
@if (auth()->check() && !$article->userHasReachedArticleCommentLimit())
<x-content.content-card icon="hotel-icon">
<x-slot:title>
{{ __('Post a comment') }}
</x-slot:title>
<x-slot:under-title>
{{ __('Post a comment on the article, to let us know what you think about it') }}
</x-slot:under-title>
<div class="text-sm dark:text-gray-200">
<form action="{{ route('article.comment.store', $article) }}" method="POST">
@csrf
<textarea name="comment"
class="focus:ring-0 rounded focus:border-[#eeb425] w-full min-h-[100px] max-h-[100px] bg-gray-800 @error('comment') border-red-600 ring-red-500 @enderror"></textarea>
<x-form.primary-button classes="mt-2">
{{ __('Post comment') }}
</x-form.primary-button>
</form>
</div>
</x-content.content-card>
@endif
@if(count($article->comments))
<x-content.content-card icon="hotel-icon">
<x-slot:title>
{{ __('Comments') }}
</x-slot:title>
<x-slot:under-title>
{{ __('Below you will see all the comments, written on this article') }}
</x-slot:under-title>
<div class="px-1 dark:text-gray-200 space-y-[13px]">
@foreach ($article->comments->sortByDesc('created_at') as $comment)
<div
class="relative w-full rounded bg-[#21242e] p-4 h-[90px] overflow-hidden flex items-center shadow">
<a href="{{ route('profile.show', $comment->user) }}"
class="absolute top-2 left-1 drop-shadow">
<img style="image-rendering: pixelated;"
class="transition duration-300 ease-in-out hover:scale-105"
src="{{ setting('avatar_imager') }}{{ $comment->user->look }}&direction=2&head_direction=3&gesture=sml&action=wav"
alt="">
</a>
<div class="flex justify-between ml-[60px] w-full">
<div class="text-sm">
<a href="{{ route('profile.show', $comment->user) }}"
class="font-semibold text-[#89cdf0] dark:text-blue-300 hover:underline">
{{ $comment->user->username }}
</a>
<p class="block dark:text-gray-200">
{{ $comment->comment }}
</p>
</div>
<div class="flex gap-x-2">
<p class="text-xs dark:text-gray-200">
{{ $comment->created_at->diffForHumans() }}
</p>
@if ($comment->canBeDeleted())
<form action="{{ route('article.comment.destroy', $comment) }}" method="POST"
class="cursor-pointer transition duration-200 ease-in-out hover:scale-105">
@method('DELETE')
@csrf
<button type="submit">
<svg xmlns="http://www.w3.org/2000/svg" fill="none"
viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor"
class="h-4 w-4">
<path stroke-linecap="round" stroke-linejoin="round"
d="M14.74 9l-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 01-2.244 2.077H8.084a2.25 2.25 0 01-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 00-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 013.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 00-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 00-7.5 0" />
</svg>
</button>
</form>
@endif
</div>
</div>
</div>
@endforeach
</div>
</x-content.content-card>
@endif
@endif
</div>
</x-app-layout>
@@ -0,0 +1,28 @@
<x-app-layout>
@push('title', __('Articles'))
<div class="col-span-12">
<x-page-header>
<x-slot:icon>
<img src="{{ asset('/assets/images/dusk/news_icon.png') }}" alt="">
</x-slot:icon>
News
</x-page-header>
<div class=" grid grid-cols-1 gap-4 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 mt-4">
@forelse($articles as $article)
<div class="h-[250px]">
<x-article-card :article="$article" />
</div>
@empty
<x-filler-article-card />
@endforelse
</div>
<div class="mt-4">
{{ $articles->links() }}
</div>
</div>
</x-app-layout>
@@ -0,0 +1,76 @@
<x-modals.modal-wrapper>
<div class="select-none"
x-data='reactions(@json($myReactions), @json($articleReactions), "{{ route('article.toggle-reaction', $article->slug) }}")'>
<div class="mt-4 flex w-full flex-wrap gap-2 rounded-lg p-2 bg-gray-900">
<div x-show="isAuthenticated"
class="px-2 hover:scale-110 transition-all font-semibold h-8 flex items-center justify-center border-2 text-xs border-yellow-400 cursor-pointer bg-[#eeb425] text-white rounded-lg"
x-on:click="open = true">
{{ __('Add') }}
</div>
<template x-for="articleReaction in articleReactions">
<div>
<div class="flex h-8 w-12 items-center justify-center gap-2 rounded-lg border-2 text-sm font-bold border-gray-800 hover:bg-gray-700 cursor-pointer"
:class="{
bg-gray-800 border-gray-700': userHasReaction(
articleReaction),
'cursor-pointer hover:scale-110 transition-all hover:bg-gray-700': isAuthenticated
}"
@click="toggleReaction(articleReaction.name)" :data-popover-target="articleReaction.id">
<img :src="'/assets/images/icons/reactions/' + articleReaction.name + '.png'"
:alt="articleReaction.name">
<span x-text="articleReaction.count"></span>
</div>
<div data-popover :id="articleReaction.id" role="tooltip"
class="invisible absolute z-10 inline-block w-64 rounded-lg border border-gray-200 bg-white text-sm font-light text-gray-500 opacity-0 shadow-sm transition-opacity duration-300 dark:border-gray-600 dark:bg-gray-800 dark:text-gray-400">
<div
class="rounded-t-lg border-b border-gray-200 bg-gray-100 px-3 py-2 dark:border-gray-600 dark:bg-gray-700">
<div
class="flex w-full items-center justify-center font-semibold text-gray-900 dark:text-white">
{{ __('Reactions with') }} <img
:src="'/assets/images/icons/reactions/' + articleReaction.name + '.png'"
class="ml-1" :alt="articleReaction.name">
</div>
</div>
<div class="overflow-y-auto px-3 py-2" style="max-height: 200px">
<template x-for="user in articleReaction.users">
<p class="w-full text-center" x-text="user"></p>
</template>
</div>
<div data-popper-arrow></div>
</div>
</div>
</template>
</div>
<div x-show="isAuthenticated">
<x-modals.regular-modal>
<x-slot name="title">
<h2 class="text-2xl">
{{ __('Insert Reaction') }}
</h2>
</x-slot>
<div class="flex w-full flex-wrap justify-center gap-3 p-2">
<template x-for="defaultReaction in allReactions">
<div class="cursor-pointer rounded-lg border-2 px-3 py-2 hover:bg-gray-700 hover:border-g border-gray-800"
x-show="canAddReactionFromModal(defaultReaction)" @click="toggleReaction(defaultReaction)">
<img :src="'/assets/images/icons/reactions/' + defaultReaction + '.png'"
:alt="defaultReaction">
</div>
</template>
</div>
</x-modals.regular-modal>
</div>
</div>
</x-modals.modal-wrapper>
@push('scripts')
<script>
window.App = {
defaultReactions: @json(config('habbo.reactions')),
isAuthenticated: @json(auth()->check())
}
</script>
@endpush
@@ -0,0 +1,19 @@
<x-app-layout>
@push('title', __('Photos'))
<div class="col-span-12 space-y-6">
<x-page-header>
<x-slot:icon>
<img src="{{ asset('/assets/images/dusk/camera_icon.png') }}" alt="">
</x-slot:icon>
Photos
</x-page-header>
<div class="col-span-12 grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4">
@foreach ($photos as $photo)
<x-photo :photo="$photo" />
@endforeach
</div>
</div>
</x-app-layout>
@@ -0,0 +1,63 @@
<x-app-layout>
@push('title', __('Staff'))
<div class="col-span-12 lg:col-span-9 lg:w-[96%]">
<x-content.staff-content-section :badge="$position->permission->badge" :color="$position->permission->staff_color">
<x-slot:title>
{{ __('You are applying for :position', ['position' => $position->permission->rank_name]) }}
</x-slot:title>
<x-slot:under-title>
{{ __('Please fill out the fields below to apply for :position', ['position' => $position->permission->rank_name]) }}
</x-slot:under-title>
<form class="flex flex-col gap-y-3" action="{{ route('staff-applications.store', $position) }}" method="POST">
@csrf
<div>
<x-form.label for="username" disabled>
{{ __('Username') }}
</x-form.label>
<x-form.input classes="bg-red-200" name="username" value="{{ auth()->user()->username }}"
:readonly="true" />
</div>
<div>
<x-form.label for="username" disabled>
{{ __('About you') }}
</x-form.label>
<textarea name="content"
class="focus:ring-0 border-4 border-gray-200 rounded dark:bg-gray-800 dark:border-gray-700 dark:text-gray-200 focus:border-[#eeb425] w-full min-h-[180px]"></textarea>
</div>
@if (setting('google_recaptcha_enabled'))
<div class="g-recaptcha" data-sitekey="{{ config('habbo.site.recaptcha_site_key') }}"></div>
@endif
<x-form.primary-button>
{{ __('Apply for :position', ['position' => $position->permission->rank_name]) }}
</x-form.primary-button>
</form>
</x-content.staff-content-section>
</div>
<div class="col-span-12 lg:col-span-3 lg:w-[110%] space-y-4 lg:-ml-[32px]">
<x-content.content-card icon="hotel-icon" classes="border dark:border-gray-900">
<x-slot:title>
{{ __('Applying for :position', ['position' => $position->permission->rank_name]) }}
</x-slot:title>
<x-slot:under-title>
{{ __('Read before applying') }}
</x-slot:under-title>
<div class="px-2 text-sm space-y-4 dark:text-gray-200">
<p>
{{ __('Please field out all the fields to apply for :position. Remember when applying for a position here at :hotel you must be fully transparent and honest. If found out the information provided is false or incorrect you might risk losing your position if hired.', ['position' => $position->permission->rank_name, 'hotel' => setting('hotel_name')]) }}
</p>
</div>
</x-content.content-card>
</div>
</x-app-layout>
@@ -0,0 +1,73 @@
<x-app-layout>
@push('title', __('Staff'))
<div class="col-span-12 lg:col-span-9 lg:w-[96%]">
<div class="grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-2">
@forelse($positions as $position)
<x-content.staff-content-section :badge="$position->permission->badge" :color="$position->permission->staff_color">
<x-slot:title>
{{ $position->permission->rank_name }}
</x-slot:title>
<x-slot:under-title>
{{ $position->permission->job_description }}
</x-slot:under-title>
<div class="text-center dark:text-gray-400">
<div class="mb-4 text-sm">
{!! $position->description !!}
</div>
</div>
<div class="flex justify-between">
@if (auth()->user()->hasAppliedForPosition($position->permission->id))
<x-form.danger-button>
{{ __('You have already applied for :position', ['position' => $position->permission->rank_name]) }}
</x-form.danger-button>
@else
<a href="{{ route('staff-applications.show', $position) }}" class="w-full">
<x-form.secondary-button>
{{ __('Apply for :position', ['position' => $position->permission->rank_name]) }}
</x-form.secondary-button>
</a>
@endif
</div>
</x-content.staff-content-section>
@empty
<x-content.content-card icon="lighthouse-icon" classes="col-span-full">
<x-slot:title>
{{ __('No positions open') }}
</x-slot:title>
<x-slot:under-title>
{{ __('There is currently no positions open') }}
</x-slot:under-title>
<div class="px-2 text-sm space-y-4 dark:text-gray-200">
<p>
{{ __('Please come back at a later time to check if we have any positions open by then! Thank you for your interest.', ['hotel' => setting('hotel_name')]) }}
</p>
</div>
</x-content.content-card>
@endforelse
</div>
</div>
<div class="col-span-12 lg:col-span-3 lg:w-[110%] space-y-4 lg:-ml-[32px]">
<x-content.content-card icon="chat-icon">
<x-slot:title>
{{ __('Apply for :hotel staff', ['hotel' => setting('hotel_name')]) }}
</x-slot:title>
<x-slot:under-title>
{{ __('Select position to get started', ['hotel' => setting('hotel_name')]) }}
</x-slot:under-title>
<div class="px-2 text-sm space-y-4 dark:text-gray-200">
<p>
{{ __('Here at :hotel we open up for staff applications every now and then. Sometimes you will find this page empty other times it might be filled with positions, if you ever come across a position you feel you would fit perfectly into, then do not hesitate to apply for it.', ['hotel' => setting('hotel_name')]) }}
</p>
</div>
</x-content.content-card>
</div>
</x-app-layout>
@@ -0,0 +1,73 @@
<x-app-layout>
@push('title', __('Staff'))
<div class="col-span-12 lg:col-span-9">
@foreach ($employees as $employee)
<x-page-header sub-header="{{ $employee->job_description }}">
<x-slot:icon>
<img src="{{ setting('badges_path') }}/{{ $employee->badge }}.gif" alt="" onerror="this.onerror=null;this.src='{{ asset('/assets/images/dusk/ADM.gif') }}';">
</x-slot:icon>
{{ $employee->rank_name }}
</x-page-header>
@if (count($employee->users) > 0)
<div class="grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3 mt-4 mb-5">
@foreach ($employee->users as $staff)
<x-community.staff-card :user="$staff" />
@endforeach
</div>
@else
<div class="bg-gray-700/40 w-full py-3 flex items-center justify-center rounded-lg text-gray-500 mt-4 mb-6">
{{ __('We currently have no staff in this position') }}
</div>
@endif
@endforeach
</div>
<div class="col-span-12 lg:col-span-3 space-y-6">
<x-content.content-card icon="chat-icon">
<x-slot:title>
{{ __(':hotel staff', ['hotel' => setting('hotel_name')]) }}
</x-slot:title>
<x-slot:under-title>
{{ __('About the :hotel staff', ['hotel' => setting('hotel_name')]) }}
</x-slot:under-title>
<div class="px-2 text-sm space-y-4 dark:text-gray-200">
<p>
{{ __('The :hotel staff team is one big happy family, each staff member has a different role and duties to fulfill.', ['hotel' => setting('hotel_name')]) }}
</p>
<p>
{{ __('Most of our team usually consists of players that have been around :hotel for quite a while, but this does not mean we only recruit old & known players, we recruit those who shine out to us!', ['hotel' => setting('hotel_name')]) }}
</p>
</div>
</x-content.content-card>
<x-content.content-card icon="chat-icon">
<x-slot:title>
{{ __('Apply for staff') }}
</x-slot:title>
<x-slot:under-title>
{{ __('How to join the staff team', ['hotel' => setting('hotel_name')]) }}
</x-slot:under-title>
<div class="px-2 text-sm space-y-4 dark:text-gray-200">
<p>
{{ __('Every now and then staff applications may open up. Once they do we always make sure to post a news article explaining the process - So make sure you keep an eye out for those in you are interested in joining the :hotel staff team.', ['hotel' => setting('hotel_name')]) }}
</p>
<p>
{!! __(
'You can occasionally also look at the :startTag Staff application page :endTag which will show you all of our current open positions.',
['startTag' => '<a href="/community/staff-applications" class="underline">', 'endTag' => '</a>'],
) !!}
</p>
</div>
</x-content.content-card>
</div>
</x-app-layout>
@@ -0,0 +1,28 @@
<x-app-layout>
@push('title', __('Staff'))
<div class="col-span-12">
<div class="flex flex-col gap-y-4">
@foreach ($employees as $employee)
<x-page-header sub-header="{{ $employee->job_description }}">
<x-slot:icon>
<img src="{{ setting('badges_path') }}/{{ $employee->badge }}" alt="" onerror="this.onerror=null;this.src='{{ asset('/assets/images/dusk/ADM.gif') }}';">
</x-slot:icon>
{{ $employee->rank_name }}
</x-page-header>
@if (count($employee->users) > 0)
<div class="grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3 mt-4 mb-5">
@foreach ($employee->users as $staff)
<x-community.staff-card :user="$staff" />
@endforeach
</div>
@else
<div class="bg-gray-700/40 w-full py-3 flex items-center justify-center rounded-lg text-gray-500 mt-4 mb-6">
{{ __('We currently have no staff in this position') }}
</div>
@endif
@endforeach
</div>
</x-app-layout>