🆙 Final fix delete storage link to fix news_images and logs 🆙

This commit is contained in:
Remco
2026-01-07 20:29:24 +01:00
parent 65ea6c167f
commit acf2d7e661
447 changed files with 208 additions and 66965 deletions
@@ -1,230 +0,0 @@
<x-dynamic-component
:component="$getFieldWrapperView()"
:id="$getId()"
:label="$getLabel()"
:label-sr-only="$isLabelHidden()"
:helper-text="$getHelperText()"
:hint="$getHint()"
:hint-icon="$getHintIcon()"
:required="$isRequired()"
:state-path="$getStatePath()"
class="relative z-0"
>
<div x-data="{ state: $wire.{{ $applyStateBindingModifiers('entangle(\'' . $getStatePath() . '\')') }}, initialized: false, editorChanged: false }"
x-init="(() => {
window.addEventListener('DOMContentLoaded', () => initCKEditor())
$nextTick(() => initCKEditor())
const initCKEditor = () => {
if(initialized) return
if(typeof CKEDITOR === undefined || !$refs.ckeditor) {
console.error('[CKEDITOR] not found or [CKEDITOR element] not found')
return
}
CKEDITOR.ClassicEditor.create($refs.ckeditor, {
toolbar: {
items: [
'exportPDF',
'exportWord',
'|',
'findAndReplace',
'selectAll',
'heading',
'|',
'bold',
'italic',
'strikethrough',
'underline',
'code',
'subscript',
'superscript',
'removeFormat',
'|',
'bulletedList',
'numberedList',
'outdent',
'indent',
'|',
'undo',
'redo',
'fontSize',
'fontFamily',
'fontColor',
'fontBackgroundColor',
'highlight',
'|',
'alignment',
'link',
'insertImage',
'blockQuote',
'insertTable',
'mediaEmbed',
'codeBlock',
'htmlEmbed',
'specialCharacters',
'horizontalLine',
'pageBreak',
'|',
'sourceEditing',
],
shouldNotGroupWhenFull: true,
},
list: {
properties: {
styles: true,
startIndex: true,
reversed: true,
},
},
heading: {
options: [
{
model: 'paragraph',
title: 'Paragraph',
class: 'ck-heading_paragraph',
},
{
model: 'heading1',
view: 'h1',
title: 'Heading 1',
class: 'ck-heading_heading1',
},
{
model: 'heading2',
view: 'h2',
title: 'Heading 2',
class: 'ck-heading_heading2',
},
{
model: 'heading3',
view: 'h3',
title: 'Heading 3',
class: 'ck-heading_heading3',
},
{
model: 'heading4',
view: 'h4',
title: 'Heading 4',
class: 'ck-heading_heading4',
},
{
model: 'heading5',
view: 'h5',
title: 'Heading 5',
class: 'ck-heading_heading5',
},
{
model: 'heading6',
view: 'h6',
title: 'Heading 6',
class: 'ck-heading_heading6',
},
],
},
placeholder: '. . .',
fontFamily: {
options: [
'default',
'Arial, Helvetica, sans-serif',
'Courier New, Courier, monospace',
'Georgia, serif',
'Lucida Sans Unicode, Lucida Grande, sans-serif',
'Tahoma, Geneva, sans-serif',
'Times New Roman, Times, serif',
'Trebuchet MS, Helvetica, sans-serif',
'Verdana, Geneva, sans-serif',
'Montserrat, sans-serif'
],
supportAllValues: true,
},
htmlSupport: {
allow: [
{
name: /.*/,
attributes: true,
classes: true,
styles: true,
},
],
},
htmlEmbed: {
showPreviews: true,
},
link: {
decorators: {
addTargetToExternalLinks: true,
defaultProtocol: 'https://',
toggleDownloadable: {
mode: 'manual',
label: 'Downloadable',
attributes: {
download: 'file',
},
},
},
},
removePlugins: [
'CKBox',
'CKFinder',
'EasyImage',
'RealTimeCollaborativeComments',
'RealTimeCollaborativeTrackChanges',
'RealTimeCollaborativeRevisionHistory',
'PresenceList',
'Comments',
'TrackChanges',
'TrackChangesData',
'RevisionHistory',
'Pagination',
'WProofreader',
'MathType',
],
}).then(editor => {
if(state) editor.setData(state)
editor.model.document.on('change:data', () => { editorChanged = true })
editor.ui.focusTracker.on('change:isFocused', (evt, name, isFocused) => {
if(isFocused || !editorChanged) return
state = editor.getData()
editorChanged = false
})
});
initialized = true
}
})()"
x-cloak
wire:ignore
>
@unless($isDisabled())
<input
id="ck-editor-{{ $getId() }}"
type="hidden"
x-ref="ckeditor"
placeholder="{{ $getPlaceholder() }}"
>
@else
<div
x-html="state"
style="font-size: 13px"
@class([
'prose ck-content block w-full max-w-none rounded-lg border border-gray-300 bg-white p-3 opacity-70 shadow-sm transition duration-75',
'dark:prose-invert dark:bg-gray-700 dark:border-gray-600 dark:text-white' => true,
])
></div>
@endunless
</div>
</x-dynamic-component>
@once
@push('scripts')
<script src="https://cdn.ckeditor.com/ckeditor5/35.4.0/super-build/ckeditor.js"></script>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;500;600;700;800;900&display=swap" rel="stylesheet">
@endpush
@endonce
@@ -1,57 +0,0 @@
@php
use Filament\Infolists\Components\IconEntry\IconEntrySize;
@endphp
<x-dynamic-component :component="$getEntryWrapperView()" :entry="$entry">
<div
{{
$attributes
->merge($getExtraAttributes(), escape: false)
->class([
'absolute flex items-center justify-center w-6 h-6 bg-gray-200 rounded-full -start-3 ring-4 ring-white dark:bg-gray-700 dark:ring-gray-900',
])
}}
>
@if (count($arrayState = \Illuminate\Support\Arr::wrap($getState())))
@foreach ($arrayState as $state)
@if ($icon = $getIcon($state))
@php
$color = $getColor($state) ?? 'gray';
$size = $getSize($state) ?? IconEntrySize::Large;
@endphp
<x-filament::icon
:icon="$icon"
@class([
'fi-in-icon-item',
match ($size) {
IconEntrySize::ExtraSmall, 'xs' => 'fi-in-icon-item-size-xs h-3 w-3',
IconEntrySize::Small, 'sm' => 'fi-in-icon-item-size-sm h-4 w-4',
IconEntrySize::Medium, 'md' => 'fi-in-icon-item-size-md h-5 w-5',
IconEntrySize::Large, 'lg' => 'fi-in-icon-item-size-lg h-6 w-6',
IconEntrySize::ExtraLarge, 'xl' => 'fi-in-icon-item-size-xl h-7 w-7',
IconEntrySize::TwoExtraLarge, IconEntrySize::ExtraExtraLarge, '2xl' => 'fi-in-icon-item-size-2xl h-8 w-8',
default => $size,
},
match ($color) {
'gray' => 'fi-color-gray text-gray-400 dark:text-gray-500',
default => 'fi-color-custom text-custom-500 dark:text-custom-400',
},
])
@style([
\Filament\Support\get_color_css_variables(
$color,
shades: [400, 500],
alias: 'infolists::components.icon-entry.item',
) => $color !== 'gray',
])
/>
@endif
@endforeach
@elseif (($placeholder = $getPlaceholder()) !== null)
<div class="text-gray-500 text-sm p-4">
{{ $placeholder }}
</div>
@endif
</div>
</x-dynamic-component>
@@ -1,7 +0,0 @@
<x-dynamic-component :component="$getEntryWrapperView()" :entry="$entry">
<div>
{{ $getModifiedState() ?? (!is_array($getState()) ? $getState() ?? $getPlaceholder() : null) }}
</div>
</x-dynamic-component>
@@ -1,53 +0,0 @@
@php
$isContained = $isContained();
@endphp
<div x-data="{}"
x-load-css="[@js(\Filament\Support\Facades\FilamentAsset::getStyleHref('activitylog-styles', package: 'rmsramos/activitylog'))]"
>
</div>
<x-dynamic-component :component="$getEntryWrapperView()" :entry="$entry">
<div
{{
$attributes
->merge([
'id' => $getId(),
], escape: false)
->merge($getExtraAttributes(), escape: false)
->class([
'fi-in-repeatable',
'fi-contained' => $isContained,
])
}}
>
@if (count($childComponentContainers = $getChildComponentContainers()))
<ol class="relative border-gray-200 border-s dark:border-gray-700">
<x-filament-schemas::grid
:default="$getGridColumns('default')"
:sm="$getGridColumns('sm')"
:md="$getGridColumns('md')"
:lg="$getGridColumns('lg')"
:xl="$getGridColumns('xl')"
:two-xl="$getGridColumns('2xl')"
class="gap-2"
>
@foreach ($childComponentContainers as $container)
<li
@class([
'mb-4 ms-6',
'fi-in-repeatable-item block',
'rounded-xl bg-white p-4 shadow-sm ring-1 ring-gray-950/5 dark:bg-white/5 dark:ring-white/10' => $isContained,
])
>
{{ $container }}
</li>
@endforeach
</x-filament-schemas::grid>
</ol>
@elseif (($placeholder = $getPlaceholder()) !== null)
<div class="text-gray-500 text-sm p-4">
{{ $placeholder }}
</div>
@endif
</div>
</x-dynamic-component>
@@ -1,13 +0,0 @@
<x-dynamic-component :component="$getEntryWrapperView()" :entry="$entry">
<div
{{
$attributes
->merge($getExtraAttributes(), escape: false)
->class(['fi-in-text w-full -mt-6'])
}}
>
{{ $getModifiedState() }}
</div>
</x-dynamic-component>
@@ -1,3 +0,0 @@
<x-filament-panels::page>
{{ $this->form }}
</x-filament-panels::page>
@@ -1,93 +0,0 @@
<x-filament::page>
<div class="flex items-center justify-between gap-2">
<div class="w-full mr-2">
{{ $this->search }}
</div>
@if(config('filament-log-manager.allow_delete'))
<div class="w-auto ml-2">
<x-filament::button
x-on:click="window.dispatchEvent(new CustomEvent('open-modal', { detail: { id: 'filament-log-manager-delete-log-file-modal' } }));"
:disabled="is_null($this->logFile)"
type="button"
color="danger"
>
{{ __('filament-log-manager::translations.delete') }}
</x-filament::button>
</div>
@endif
@if(config('filament-log-manager.allow_download'))
<div class="w-auto ml-2">
<x-filament::button
wire:click="download"
:disabled="is_null($this->logFile)"
type="button"
color="primary"
>
{{ __('filament-log-manager::translations.download') }}
</x-filament::button>
</div>
@endif
</div>
<hr class="dark:border-gray-700">
<div>
<div>
<div x-data="{ isCardOpen: null }" class="flex flex-col">
@forelse($this->getLogs() as $key => $log)
<div
class="rounded-xl relative mb-2 py-3 px-3 bg-{{ $log['level_class'] }}"
:class="{'no-bottom-radius mb-0': isCardOpen == {{$key}}}"
>
<a
@click="isCardOpen = isCardOpen == {{$key}} ? null : {{$key}} "
style="cursor: pointer;"
class="block overflow-hidden rounded-t-xl text-white"
>
<span>[{{ $log['date'] }}]</span>
{{ Str::limit($log['text'], 100) }}
</a>
</div>
<div x-show="isCardOpen=={{$key}}" class="mb-2 px-4 py-4 bg-white dark:bg-gray-800 text-gray-900 dark:text-white rounded-xl no-top-radius">
<div class="space-y-2">
<p>{{$log['text']}}</p>
@if(!empty($log['stack']))
<div class="bg-gray-100 dark:bg-gray-900 !mt-4 p-4 text-sm opacity-40">
<pre style="overflow-x: scroll;"><code>{{ trim($log['stack']) }}</code></pre>
</div>
@endif
</div>
</div>
@empty
<h3 class="text-center">{{ __('filament-log-manager::translations.no_logs') }}</h3>
@endforelse
</div>
</div>
</div>
<x-filament::modal id="filament-log-manager-delete-log-file-modal">
<x-slot name="heading">
{{ __('filament-log-manager::translations.modal_delete_heading') }}
</x-slot>
<x-slot name="description">
{{ __('filament-log-manager::translations.modal_delete_subheading') }}
</x-slot>
<x-slot name="footerActions">
<x-filament::button
type="button"
x-on:click="isOpen = false"
color="secondary"
outlined="true"
class="filament-page-modal-button-action"
>
{{ __('filament-log-manager::translations.modal_delete_action_cancel') }}
</x-filament::button>
<x-filament::button
wire:click="delete"
x-on:click="isOpen = false"
type="button"
color="danger"
class="filament-page-modal-button-action"
>
{{ __('filament-log-manager::translations.modal_delete_action_confirm') }}
</x-filament::button>
</x-slot>
</x-filament::modal>
</x-filament::page>
@@ -1,14 +0,0 @@
<x-filament::page>
<div class="space-y-4">
<h2 class="text-lg font-bold">Upload a New Badge</h2>
{{-- Render the form --}}
<form wire:submit.prevent="save" class="space-y-4">
{{ $this->form }}
<x-filament::button type="submit">
Upload Badge
</x-filament::button>
</form>
</div>
</x-filament::page>
@@ -1,19 +0,0 @@
<div class="my-2 text-sm tracking-tight">
@foreach($getState() as $key => $value)
<span class="inline-block p-1 mr-1 font-medium text-gray-700 whitespace-normal rounded-md dark:text-gray-200 bg-gray-500/10">
{{ $key }}
</span>
@if(is_array($value))
<span class="whitespace-normal divide-x divide-gray-200 divide-solid dark:divide-gray-700">
@foreach ($value as $nestedKey => $nestedValue)
<span class="inline-block mr-1">
{{ $nestedKey }}: {{ is_array($nestedValue) ? json_encode($nestedValue) : $nestedValue }}
</span>
@endforeach
</span>
@else
<span class="whitespace-normal">{{ $value }}</span>
@endif
@endforeach
</div>
@@ -1,3 +0,0 @@
<div>
<img loading="lazy" src="{{ $getBadgePath() }}" alt="{{ $getBadgeName() }}" />
</div>
@@ -1,3 +0,0 @@
<div class="pl-3" style="image-rendering: pixelated">
<img loading="lazy" src="{{ $column->getAvatarUrl() }}" alt="{{ $column->getRecord()->name }}" />
</div>
@@ -1,5 +0,0 @@
<x-filament-widgets::widget>
<x-filament::section>
{{-- Widget content --}}
</x-filament::section>
</x-filament-widgets::widget>
@@ -1,5 +0,0 @@
<x-filament-widgets::widget>
<x-filament::section>
{{-- Widget content --}}
</x-filament::section>
</x-filament-widgets::widget>