From a1e313cd2aa5eb766d182009d91cd23674cc48eb Mon Sep 17 00:00:00 2001 From: DariusIII Date: Fri, 26 Apr 2024 22:11:49 +0200 Subject: [PATCH 01/47] Update forum --- config/{forum.api.php => forum/api.php} | 32 +- config/{forum.web.php => forum/frontend.php} | 25 +- .../{forum.general.php => forum/general.php} | 2 +- .../integration.php} | 0 config/gearer.php | 24 -- resources/css/app.css | 0 resources/forum/blade-tailwind/css/forum.css | 35 ++ resources/forum/blade-tailwind/js/forum.js | 154 +++++++ .../views/category/index.blade.php | 20 + .../views/category/manage.blade.php | 115 ++++++ .../views/category/modals/create.blade.php | 31 ++ .../views/category/modals/delete.blade.php | 21 + .../views/category/modals/edit.blade.php | 40 ++ .../modals/mark-threads-as-read.blade.php | 16 + .../category/partials/inputs/color.blade.php | 5 + .../views/category/partials/list.blade.php | 75 ++++ .../views/category/partials/options.blade.php | 12 + .../views/category/show.blade.php | 248 +++++++++++ .../views/components/badge.blade.php | 27 ++ .../views/components/button-group.blade.php | 3 + .../views/components/button-link.blade.php | 3 + .../components/button-secondary.blade.php | 3 + .../views/components/button.blade.php | 3 + .../views/components/input.blade.php | 1 + .../views/components/label.blade.php | 3 + .../views/components/select.blade.php | 5 + .../views/components/textarea.blade.php | 1 + .../views/layouts/main.blade.php | 94 +++++ .../blade-tailwind/views/modal-form.blade.php | 30 ++ .../blade-tailwind/views/pagination.blade.php | 46 +++ .../views/partials/alert.blade.php | 18 + .../views/partials/alerts.blade.php | 11 + .../partials/breadcrumb-categories.blade.php | 4 + .../views/partials/breadcrumbs.blade.php | 16 + .../views/partials/timestamp.blade.php | 1 + .../views/post/confirm-delete.blade.php | 37 ++ .../views/post/confirm-restore.blade.php | 29 ++ .../views/post/create.blade.php | 32 ++ .../blade-tailwind/views/post/edit.blade.php | 29 ++ .../views/post/partials/actions.blade.php | 23 ++ .../views/post/partials/list.blade.php | 70 ++++ .../views/post/partials/quote.blade.php | 13 + .../blade-tailwind/views/post/show.blade.php | 14 + .../views/thread/create.blade.php | 25 ++ .../thread/modals/mark-as-read.blade.php | 14 + .../views/thread/partials/list.blade.php | 52 +++ .../views/thread/recent.blade.php | 21 + .../views/thread/show.blade.php | 391 ++++++++++++++++++ .../views/thread/unread.blade.php | 31 ++ .../forum/livewire-tailwind/css/forum.css | 83 ++++ resources/forum/livewire-tailwind/js/forum.js | 9 + .../views/components/alerts.blade.php | 64 +++ .../breadcrumb-categories.blade.php | 4 + .../views/components/breadcrumbs.blade.php | 23 ++ .../views/components/button.blade.php | 21 + .../views/components/category/card.blade.php | 103 +++++ .../category/draggable-items.blade.php | 18 + .../components/category/options.blade.php | 10 + .../views/components/form/error.blade.php | 3 + .../components/form/input-checkbox.blade.php | 11 + .../components/form/input-select.blade.php | 11 + .../components/form/input-text.blade.php | 11 + .../components/form/input-textarea.blade.php | 11 + .../views/components/group-button.blade.php | 14 + .../icons/arrow-down-mini.blade.php | 7 + .../icons/arrow-path-mini.blade.php | 7 + .../icons/arrow-right-mini.blade.php | 7 + .../icons/arrow-up-circle-mini.blade.php | 7 + .../components/icons/arrow-up-mini.blade.php | 7 + .../icons/book-open-outline.blade.php | 9 + .../icons/chat-bubble-text-mini.blade.php | 7 + .../icons/chat-bubble-text-outline.blade.php | 7 + .../icons/chat-bubbles-mini.blade.php | 8 + .../icons/chat-bubbles-outline.blade.php | 7 + .../icons/drag-area-vertical.blade.php | 7 + .../components/icons/home-mini.blade.php | 7 + .../icons/lock-closed-mini.blade.php | 7 + .../components/icons/lock-open-mini.blade.php | 7 + .../components/icons/pencil-mini.blade.php | 7 + .../components/icons/pencil-outline.blade.php | 7 + .../components/icons/sparkles-mini.blade.php | 7 + .../icons/squares-plus-outline.blade.php | 9 + .../components/icons/subcategory.blade.php | 7 + .../components/icons/trash-mini.blade.php | 7 + .../views/components/icons/x-mark.blade.php | 8 + .../views/components/link-button.blade.php | 19 + .../components/loading-overlay.blade.php | 15 + .../views/components/modal.blade.php | 21 + .../views/components/pagination.blade.php | 106 +++++ .../views/components/pill.blade.php | 14 + .../views/components/post/card.blade.php | 101 +++++ .../views/components/post/quote.blade.php | 16 + .../views/components/thread/card.blade.php | 95 +++++ .../views/components/timestamp.blade.php | 20 + .../views/layouts/main.blade.php | 137 ++++++ .../views/pages/category/create.blade.php | 60 +++ .../views/pages/category/edit.blade.php | 107 +++++ .../views/pages/category/index.blade.php | 23 ++ .../views/pages/category/manage.blade.php | 83 ++++ .../views/pages/category/show.blade.php | 197 +++++++++ .../views/pages/post/edit.blade.php | 75 ++++ .../views/pages/post/show.blade.php | 17 + .../views/pages/thread/create.blade.php | 36 ++ .../views/pages/thread/recent.blade.php | 22 + .../views/pages/thread/reply.blade.php | 36 ++ .../views/pages/thread/show.blade.php | 369 +++++++++++++++++ .../views/pages/thread/unread.blade.php | 66 +++ resources/js/app.js | 1 + resources/js/bootstrap.js | 4 + 109 files changed, 4046 insertions(+), 48 deletions(-) rename config/{forum.api.php => forum/api.php} (86%) rename config/{forum.web.php => forum/frontend.php} (69%) rename config/{forum.general.php => forum/general.php} (98%) rename config/{forum.integration.php => forum/integration.php} (100%) delete mode 100644 config/gearer.php create mode 100644 resources/css/app.css create mode 100644 resources/forum/blade-tailwind/css/forum.css create mode 100644 resources/forum/blade-tailwind/js/forum.js create mode 100644 resources/forum/blade-tailwind/views/category/index.blade.php create mode 100644 resources/forum/blade-tailwind/views/category/manage.blade.php create mode 100644 resources/forum/blade-tailwind/views/category/modals/create.blade.php create mode 100644 resources/forum/blade-tailwind/views/category/modals/delete.blade.php create mode 100644 resources/forum/blade-tailwind/views/category/modals/edit.blade.php create mode 100644 resources/forum/blade-tailwind/views/category/modals/mark-threads-as-read.blade.php create mode 100644 resources/forum/blade-tailwind/views/category/partials/inputs/color.blade.php create mode 100644 resources/forum/blade-tailwind/views/category/partials/list.blade.php create mode 100644 resources/forum/blade-tailwind/views/category/partials/options.blade.php create mode 100644 resources/forum/blade-tailwind/views/category/show.blade.php create mode 100644 resources/forum/blade-tailwind/views/components/badge.blade.php create mode 100644 resources/forum/blade-tailwind/views/components/button-group.blade.php create mode 100644 resources/forum/blade-tailwind/views/components/button-link.blade.php create mode 100644 resources/forum/blade-tailwind/views/components/button-secondary.blade.php create mode 100644 resources/forum/blade-tailwind/views/components/button.blade.php create mode 100644 resources/forum/blade-tailwind/views/components/input.blade.php create mode 100644 resources/forum/blade-tailwind/views/components/label.blade.php create mode 100644 resources/forum/blade-tailwind/views/components/select.blade.php create mode 100644 resources/forum/blade-tailwind/views/components/textarea.blade.php create mode 100644 resources/forum/blade-tailwind/views/layouts/main.blade.php create mode 100644 resources/forum/blade-tailwind/views/modal-form.blade.php create mode 100644 resources/forum/blade-tailwind/views/pagination.blade.php create mode 100644 resources/forum/blade-tailwind/views/partials/alert.blade.php create mode 100644 resources/forum/blade-tailwind/views/partials/alerts.blade.php create mode 100644 resources/forum/blade-tailwind/views/partials/breadcrumb-categories.blade.php create mode 100644 resources/forum/blade-tailwind/views/partials/breadcrumbs.blade.php create mode 100644 resources/forum/blade-tailwind/views/partials/timestamp.blade.php create mode 100644 resources/forum/blade-tailwind/views/post/confirm-delete.blade.php create mode 100644 resources/forum/blade-tailwind/views/post/confirm-restore.blade.php create mode 100644 resources/forum/blade-tailwind/views/post/create.blade.php create mode 100644 resources/forum/blade-tailwind/views/post/edit.blade.php create mode 100644 resources/forum/blade-tailwind/views/post/partials/actions.blade.php create mode 100644 resources/forum/blade-tailwind/views/post/partials/list.blade.php create mode 100644 resources/forum/blade-tailwind/views/post/partials/quote.blade.php create mode 100644 resources/forum/blade-tailwind/views/post/show.blade.php create mode 100644 resources/forum/blade-tailwind/views/thread/create.blade.php create mode 100644 resources/forum/blade-tailwind/views/thread/modals/mark-as-read.blade.php create mode 100644 resources/forum/blade-tailwind/views/thread/partials/list.blade.php create mode 100644 resources/forum/blade-tailwind/views/thread/recent.blade.php create mode 100644 resources/forum/blade-tailwind/views/thread/show.blade.php create mode 100644 resources/forum/blade-tailwind/views/thread/unread.blade.php create mode 100644 resources/forum/livewire-tailwind/css/forum.css create mode 100644 resources/forum/livewire-tailwind/js/forum.js create mode 100644 resources/forum/livewire-tailwind/views/components/alerts.blade.php create mode 100644 resources/forum/livewire-tailwind/views/components/breadcrumb-categories.blade.php create mode 100644 resources/forum/livewire-tailwind/views/components/breadcrumbs.blade.php create mode 100644 resources/forum/livewire-tailwind/views/components/button.blade.php create mode 100644 resources/forum/livewire-tailwind/views/components/category/card.blade.php create mode 100644 resources/forum/livewire-tailwind/views/components/category/draggable-items.blade.php create mode 100644 resources/forum/livewire-tailwind/views/components/category/options.blade.php create mode 100644 resources/forum/livewire-tailwind/views/components/form/error.blade.php create mode 100644 resources/forum/livewire-tailwind/views/components/form/input-checkbox.blade.php create mode 100644 resources/forum/livewire-tailwind/views/components/form/input-select.blade.php create mode 100644 resources/forum/livewire-tailwind/views/components/form/input-text.blade.php create mode 100644 resources/forum/livewire-tailwind/views/components/form/input-textarea.blade.php create mode 100644 resources/forum/livewire-tailwind/views/components/group-button.blade.php create mode 100644 resources/forum/livewire-tailwind/views/components/icons/arrow-down-mini.blade.php create mode 100644 resources/forum/livewire-tailwind/views/components/icons/arrow-path-mini.blade.php create mode 100644 resources/forum/livewire-tailwind/views/components/icons/arrow-right-mini.blade.php create mode 100644 resources/forum/livewire-tailwind/views/components/icons/arrow-up-circle-mini.blade.php create mode 100644 resources/forum/livewire-tailwind/views/components/icons/arrow-up-mini.blade.php create mode 100644 resources/forum/livewire-tailwind/views/components/icons/book-open-outline.blade.php create mode 100644 resources/forum/livewire-tailwind/views/components/icons/chat-bubble-text-mini.blade.php create mode 100644 resources/forum/livewire-tailwind/views/components/icons/chat-bubble-text-outline.blade.php create mode 100644 resources/forum/livewire-tailwind/views/components/icons/chat-bubbles-mini.blade.php create mode 100644 resources/forum/livewire-tailwind/views/components/icons/chat-bubbles-outline.blade.php create mode 100644 resources/forum/livewire-tailwind/views/components/icons/drag-area-vertical.blade.php create mode 100644 resources/forum/livewire-tailwind/views/components/icons/home-mini.blade.php create mode 100644 resources/forum/livewire-tailwind/views/components/icons/lock-closed-mini.blade.php create mode 100644 resources/forum/livewire-tailwind/views/components/icons/lock-open-mini.blade.php create mode 100644 resources/forum/livewire-tailwind/views/components/icons/pencil-mini.blade.php create mode 100644 resources/forum/livewire-tailwind/views/components/icons/pencil-outline.blade.php create mode 100644 resources/forum/livewire-tailwind/views/components/icons/sparkles-mini.blade.php create mode 100644 resources/forum/livewire-tailwind/views/components/icons/squares-plus-outline.blade.php create mode 100644 resources/forum/livewire-tailwind/views/components/icons/subcategory.blade.php create mode 100644 resources/forum/livewire-tailwind/views/components/icons/trash-mini.blade.php create mode 100644 resources/forum/livewire-tailwind/views/components/icons/x-mark.blade.php create mode 100644 resources/forum/livewire-tailwind/views/components/link-button.blade.php create mode 100644 resources/forum/livewire-tailwind/views/components/loading-overlay.blade.php create mode 100644 resources/forum/livewire-tailwind/views/components/modal.blade.php create mode 100644 resources/forum/livewire-tailwind/views/components/pagination.blade.php create mode 100644 resources/forum/livewire-tailwind/views/components/pill.blade.php create mode 100644 resources/forum/livewire-tailwind/views/components/post/card.blade.php create mode 100644 resources/forum/livewire-tailwind/views/components/post/quote.blade.php create mode 100644 resources/forum/livewire-tailwind/views/components/thread/card.blade.php create mode 100644 resources/forum/livewire-tailwind/views/components/timestamp.blade.php create mode 100644 resources/forum/livewire-tailwind/views/layouts/main.blade.php create mode 100644 resources/forum/livewire-tailwind/views/pages/category/create.blade.php create mode 100644 resources/forum/livewire-tailwind/views/pages/category/edit.blade.php create mode 100644 resources/forum/livewire-tailwind/views/pages/category/index.blade.php create mode 100644 resources/forum/livewire-tailwind/views/pages/category/manage.blade.php create mode 100644 resources/forum/livewire-tailwind/views/pages/category/show.blade.php create mode 100644 resources/forum/livewire-tailwind/views/pages/post/edit.blade.php create mode 100644 resources/forum/livewire-tailwind/views/pages/post/show.blade.php create mode 100644 resources/forum/livewire-tailwind/views/pages/thread/create.blade.php create mode 100644 resources/forum/livewire-tailwind/views/pages/thread/recent.blade.php create mode 100644 resources/forum/livewire-tailwind/views/pages/thread/reply.blade.php create mode 100644 resources/forum/livewire-tailwind/views/pages/thread/show.blade.php create mode 100644 resources/forum/livewire-tailwind/views/pages/thread/unread.blade.php create mode 100644 resources/js/app.js create mode 100644 resources/js/bootstrap.js diff --git a/config/forum.api.php b/config/forum/api.php similarity index 86% rename from config/forum.api.php rename to config/forum/api.php index e54d1807f7..75811cc2b2 100644 --- a/config/forum.api.php +++ b/config/forum/api.php @@ -4,10 +4,10 @@ /* |-------------------------------------------------------------------------- - | Enable/disable + | Enable/disable feature |-------------------------------------------------------------------------- | - | Set to false if you want to effectively disable the API. + | Whether or not to enable the API feature. | */ @@ -26,34 +26,34 @@ /* |-------------------------------------------------------------------------- - | Resources + | Router |-------------------------------------------------------------------------- | - | Override to return your own resources for API responses + | API router config. | */ - 'resources' => [ - 'category' => TeamTeaTime\Forum\Http\Resources\CategoryResource::class, - 'thread' => TeamTeaTime\Forum\Http\Resources\ThreadResource::class, - 'post' => TeamTeaTime\Forum\Http\Resources\PostResource::class, + 'router' => [ + 'prefix' => '/forum/api', + 'as' => 'forum.api.', + 'namespace' => '\\TeamTeaTime\\Forum\\Http\\Controllers\\Api', + 'middleware' => ['api', 'auth:api'], + 'auth_middleware' => ['auth:api'], ], /* |-------------------------------------------------------------------------- - | Router + | Resources |-------------------------------------------------------------------------- | - | API router config. + | Override to return your own resources for API responses. | */ - 'router' => [ - 'prefix' => '/forum/api', - 'as' => 'forum.api.', - 'namespace' => '\TeamTeaTime\Forum\Http\Controllers\Api', - 'middleware' => ['api', 'auth:api'], - 'auth_middleware' => ['auth:api'], + 'resources' => [ + 'category' => TeamTeaTime\Forum\Http\Resources\CategoryResource::class, + 'thread' => TeamTeaTime\Forum\Http\Resources\ThreadResource::class, + 'post' => TeamTeaTime\Forum\Http\Resources\PostResource::class, ], ]; diff --git a/config/forum.web.php b/config/forum/frontend.php similarity index 69% rename from config/forum.web.php rename to config/forum/frontend.php index 5cf84265b3..82433e8f25 100644 --- a/config/forum.web.php +++ b/config/forum/frontend.php @@ -4,28 +4,39 @@ /* |-------------------------------------------------------------------------- - | Enable/disable + | Enable/disable feature |-------------------------------------------------------------------------- | - | Set to false if you want to effectively disable the frontend. + | Whether or not to enable the frontend feature. | */ 'enable' => true, + /* + |-------------------------------------------------------------------------- + | Preset + |-------------------------------------------------------------------------- + | + | The frontend preset to use. Must be installed with the + | forum:preset-install command. + | + */ + + 'preset' => 'livewire-tailwind', + /* |-------------------------------------------------------------------------- | Router |-------------------------------------------------------------------------- | - | Web router config. + | Router config for the frontend routes. | */ 'router' => [ 'prefix' => '/forum', 'as' => 'forum.', - 'namespace' => '\TeamTeaTime\Forum\Http\Controllers\Web', 'middleware' => ['web'], 'auth_middleware' => ['auth'], ], @@ -35,7 +46,7 @@ | Route Prefixes |-------------------------------------------------------------------------- | - | Prefixes to use for each model. + | Prefixes to use for each model in frontend routes. | */ @@ -61,11 +72,11 @@ | Utility Class |-------------------------------------------------------------------------- | - | Here we specify the class to use for various web utility methods. + | Here we specify the class to use for various frontend utility methods. | This is automatically aliased to 'Forum' for ease of use in views. | */ - 'utility_class' => TeamTeaTime\Forum\Support\Web\Forum::class, + 'utility_class' => TeamTeaTime\Forum\Support\Frontend\Forum::class, ]; diff --git a/config/forum.general.php b/config/forum/general.php similarity index 98% rename from config/forum.general.php rename to config/forum/general.php index 776db8d37c..f95132fa3d 100644 --- a/config/forum.general.php +++ b/config/forum/general.php @@ -16,7 +16,7 @@ | */ - 'old_thread_threshold' => '30 days', + 'old_thread_threshold' => '7 days', /* |-------------------------------------------------------------------------- diff --git a/config/forum.integration.php b/config/forum/integration.php similarity index 100% rename from config/forum.integration.php rename to config/forum/integration.php diff --git a/config/gearer.php b/config/gearer.php deleted file mode 100644 index 2433d60c29..0000000000 --- a/config/gearer.php +++ /dev/null @@ -1,24 +0,0 @@ - env('MYCELIUM_GATEWAY_ID', ''), - 'gateway_secret' => env('MYCELIUM_GATEWAY_SECRET', ''), - - /* - |-------------------------------------------------------------------------- - | Default configuration - |-------------------------------------------------------------------------- - | - | Define default callback data that will be used before any custom data are set - */ - 'defaults' => [ - 'callback_data' => [ - //'foo' => 'bar' - ], - ], -]; diff --git a/resources/css/app.css b/resources/css/app.css new file mode 100644 index 0000000000..e69de29bb2 diff --git a/resources/forum/blade-tailwind/css/forum.css b/resources/forum/blade-tailwind/css/forum.css new file mode 100644 index 0000000000..6e72d22ceb --- /dev/null +++ b/resources/forum/blade-tailwind/css/forum.css @@ -0,0 +1,35 @@ +@import url('https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,300..800;1,300..800&display=swap'); + +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + .forum { + font-family: "Open Sans", sans-serif; + font-optical-sizing: auto; + font-weight: 400; + font-style: normal; + font-variation-settings: "wdth" 100; + } + + h1 { + @apply text-4xl my-6; + } + + h2 { + @apply text-2xl; + } + + h3 { + @apply text-xl; + } + + a { + @apply text-blue-500; + } + + a:hover { + @apply text-blue-800; + } +} diff --git a/resources/forum/blade-tailwind/js/forum.js b/resources/forum/blade-tailwind/js/forum.js new file mode 100644 index 0000000000..828787a005 --- /dev/null +++ b/resources/forum/blade-tailwind/js/forum.js @@ -0,0 +1,154 @@ +import feather from 'feather-icons'; +import { createApp, ref, reactive, watch } from 'vue/dist/vue.esm-bundler.js'; +import axios from 'axios'; +import Pickr from '@simonwep/pickr'; +import draggable from 'vuedraggable/src/vuedraggable'; + +import '@simonwep/pickr/dist/themes/classic.min.css'; + +window.axios = axios; +window.Vue = { createApp, ref, reactive, watch }; +window.VueDraggable = draggable; + +document.addEventListener('DOMContentLoaded', function () { + createApp({ + setup() { + const isCollapsed = ref(true); + const isUserDropdownCollapsed = ref(true); + + window.addEventListener('click', event => { + const ignore = ['navbar-toggler', 'navbar-toggler-icon', 'dropdown-toggle']; + if (ignore.some(className => event.target.classList.contains(className))) return; + if (!isCollapsed.value) isCollapsed.value = true; + if (!isUserDropdownCollapsed.value) isUserDropdownCollapsed.value = true; + }); + + return { + isCollapsed, + isUserDropdownCollapsed, + }; + } + }).mount('.v-navbar'); + + function findModal(key) + { + const modal = document.querySelector(`[data-modal=${key}]`); + + if (!modal) throw `Attempted to open modal '${key}' but no such modal found.`; + + return modal; + } + + function openModal(modal) + { + setTimeout(function() + { + modal.classList.remove('hidden'); + modal.classList.add('flex'); + }, 200); + } + + document.querySelectorAll('[data-open-modal]').forEach(item => + { + item.addEventListener('click', event => + { + event.preventDefault(); + + openModal(findModal(event.currentTarget.dataset.openModal)); + }); + }); + + document.querySelectorAll('[data-close-modal]').forEach(modalClose => + { + modalClose.addEventListener('click', event => + { + event.preventDefault + + setTimeout(function() + { + modalClose.closest('[data-modal]').classList.remove('flex'); + modalClose.closest('[data-modal]').classList.add('hidden'); + }, 200); + }); + }); + + document.querySelectorAll('[data-dismiss]').forEach(item => + { + item.addEventListener('click', event => event.currentTarget.parentElement.style.display = 'none'); + }); + + const hash = window.location.hash.substr(1); + if (hash.startsWith('modal=')) + { + openModal(findModal(hash.replace('modal=',''))); + } + + feather.replace(); + + const input = document.querySelector('input[name=color]'); + + if (!input) return; + + const pickr = Pickr.create({ + el: '.pickr', + theme: 'classic', + default: input.value || null, + + swatches: [ + window.defaultCategoryColor, + '#f44336', + '#e91e63', + '#9c27b0', + '#673ab7', + '#3f51b5', + '#2196f3', + '#03a9f4', + '#00bcd4', + '#009688', + '#4caf50', + '#8bc34a', + '#cddc39', + '#ffeb3b', + '#ffc107' + ], + + components: { + preview: true, + hue: true, + interaction: { + input: true, + save: true + } + }, + + strings: { + save: 'Apply' + } + }); + + pickr.on('save', instance => pickr.hide()) + .on('clear', instance => + { + input.value = ''; + input.dispatchEvent(new Event('change')); + }) + .on('cancel', instance => + { + const selectedColor = instance + .getSelectedColor() + .toHEXA() + .toString(); + + input.value = selectedColor; + input.dispatchEvent(new Event('change')); + }) + .on('change', (color, instance) => + { + const selectedColor = color + .toHEXA() + .toString(); + + input.value = selectedColor; + input.dispatchEvent(new Event('change')); + }); +}); diff --git a/resources/forum/blade-tailwind/views/category/index.blade.php b/resources/forum/blade-tailwind/views/category/index.blade.php new file mode 100644 index 0000000000..93eeb6de4e --- /dev/null +++ b/resources/forum/blade-tailwind/views/category/index.blade.php @@ -0,0 +1,20 @@ +{{-- $category is passed as NULL to the master layout view to prevent it from showing in the breadcrumbs --}} +@extends ('forum::layouts.main', ['category' => null]) + +@section ('content') +
+

{{ trans('forum::general.index') }}

+ + @can ('createCategories') + + {{ trans('forum::categories.create') }} + + + @include ('forum::category.modals.create') + @endcan +
+ + @foreach ($categories as $category) + @include ('forum::category.partials.list', ['titleClass' => 'lead']) + @endforeach +@stop diff --git a/resources/forum/blade-tailwind/views/category/manage.blade.php b/resources/forum/blade-tailwind/views/category/manage.blade.php new file mode 100644 index 0000000000..be48382b52 --- /dev/null +++ b/resources/forum/blade-tailwind/views/category/manage.blade.php @@ -0,0 +1,115 @@ +@extends ('forum::layouts.main', ['category' => null, 'thread' => null, 'breadcrumbs_append' => [trans('forum::general.manage')]]) + +@section ('content') +
+

{{ trans('forum::general.manage') }}

+ + @can ('createCategories') + + {{ trans('forum::categories.create') }} + + + @include ('forum::category.modals.create') + @endcan +
+ +
+ + + + + + +
+ +
+
+ + + + +@stop diff --git a/resources/forum/blade-tailwind/views/category/modals/create.blade.php b/resources/forum/blade-tailwind/views/category/modals/create.blade.php new file mode 100644 index 0000000000..6d8301610a --- /dev/null +++ b/resources/forum/blade-tailwind/views/category/modals/create.blade.php @@ -0,0 +1,31 @@ +@component('forum::modal-form') + @slot('key', 'create-category') + @slot('title', trans('forum::categories.create')) + @slot('route', Forum::route('category.store')) + +
+ {{ trans('forum::general.title') }} + +
+
+ {{ trans('forum::general.description') }} + +
+
+
+ + +
+
+
+
+ + +
+
+ @include ('forum::category.partials.inputs.color') + + @slot('actions') + {{ trans('forum::general.create') }} + @endslot +@endcomponent diff --git a/resources/forum/blade-tailwind/views/category/modals/delete.blade.php b/resources/forum/blade-tailwind/views/category/modals/delete.blade.php new file mode 100644 index 0000000000..e313edb404 --- /dev/null +++ b/resources/forum/blade-tailwind/views/category/modals/delete.blade.php @@ -0,0 +1,21 @@ +@component('forum::modal-form') + @slot('key', 'delete-category') + @slot('title', trans('forum::general.delete')) + @slot('route', Forum::route('category.delete', $category)) + @slot('method', 'DELETE') + + {{ trans('forum::general.generic_confirm') }} + + @if(!$category->isEmpty()) +
+ + +
+ @endif + + @slot('actions') + {{ trans('forum::general.delete') }} + @endslot +@endcomponent diff --git a/resources/forum/blade-tailwind/views/category/modals/edit.blade.php b/resources/forum/blade-tailwind/views/category/modals/edit.blade.php new file mode 100644 index 0000000000..c5a6ce3a0b --- /dev/null +++ b/resources/forum/blade-tailwind/views/category/modals/edit.blade.php @@ -0,0 +1,40 @@ +@component('forum::modal-form') + @slot('key', 'edit-category') + @slot('title', trans('forum::general.edit')) + @slot('route', Forum::route('category.update', $category)) + @slot('method', 'PATCH') + +
+ {{ trans('forum::general.title') }} + +
+
+ {{ trans('forum::general.description') }} + +
+
+
+ + accepts_threads ? 'checked' : '' }}> + +
+
+
+
+ + is_private ? 'checked' : '' }} {{ $privateAncestor != null ? 'disabled' : '' }}> + +
+
+ @if ($privateAncestor != null) + + @endif + + @include ('forum::category.partials.inputs.color') + + @slot('actions') + {{ trans('forum::general.save') }} + @endslot +@endcomponent diff --git a/resources/forum/blade-tailwind/views/category/modals/mark-threads-as-read.blade.php b/resources/forum/blade-tailwind/views/category/modals/mark-threads-as-read.blade.php new file mode 100644 index 0000000000..b2fc42d079 --- /dev/null +++ b/resources/forum/blade-tailwind/views/category/modals/mark-threads-as-read.blade.php @@ -0,0 +1,16 @@ +@component('forum::modal-form') + @slot('key', 'mark-threads-as-read') + @slot('title', trans('forum::categories.mark_read')) + @slot('route', Forum::route('unread.mark-as-read')) + @slot('method', 'PATCH') + + + +

{{ trans('forum::general.generic_confirm') }}

+ + @slot('actions') + + {{ trans('forum::general.mark_read') }} + + @endslot +@endcomponent diff --git a/resources/forum/blade-tailwind/views/category/partials/inputs/color.blade.php b/resources/forum/blade-tailwind/views/category/partials/inputs/color.blade.php new file mode 100644 index 0000000000..37f675ba8f --- /dev/null +++ b/resources/forum/blade-tailwind/views/category/partials/inputs/color.blade.php @@ -0,0 +1,5 @@ +
+ +
+ +
diff --git a/resources/forum/blade-tailwind/views/category/partials/list.blade.php b/resources/forum/blade-tailwind/views/category/partials/list.blade.php new file mode 100644 index 0000000000..b92a05463e --- /dev/null +++ b/resources/forum/blade-tailwind/views/category/partials/list.blade.php @@ -0,0 +1,75 @@ +
+
+
+
+
+ {{ $category->title }} +
+

{{ $category->description }}

+
+
+ @if ($category->accepts_threads) + + {{ trans_choice('forum::threads.thread', 2) }}: {{ $category->thread_count }} + + + {{ trans_choice('forum::posts.post', 2) }}: {{ $category->post_count }} + + @endif +
+
+ @if ($category->accepts_threads) + @if ($category->newestThread) +
+ {{ $category->newestThread->title }} + @include ('forum::partials.timestamp', ['carbon' => $category->newestThread->created_at]) +
+ @endif + @if ($category->latestActiveThread && $category->latestActiveThread->post_count > 1) +
+ Re: {{ $category->latestActiveThread->title }} + @include ('forum::partials.timestamp', ['carbon' => $category->latestActiveThread->lastPost->created_at]) +
+ @endif + @endif +
+
+
+ + @if ($category->children->count() > 0) +
+ @foreach ($category->children as $subcategory) +
+
+
+ {{ $subcategory->title }} +
{{ $subcategory->description }}
+
+
+ + {{ trans_choice('forum::threads.thread', 2) }}: {{ $subcategory->thread_count }} + + + {{ trans_choice('forum::posts.post', 2) }}: {{ $subcategory->post_count }} + +
+
+ @if ($subcategory->newestThread) +
+ {{ $subcategory->newestThread->title }} + @include ('forum::partials.timestamp', ['carbon' => $subcategory->newestThread->created_at]) +
+ @endif + @if ($subcategory->latestActiveThread && $subcategory->latestActiveThread->post_count > 1) +
+ Re: {{ $subcategory->latestActiveThread->title }} + @include ('forum::partials.timestamp', ['carbon' => $subcategory->latestActiveThread->lastPost->created_at]) +
+ @endif +
+
+
+ @endforeach +
+ @endif +
diff --git a/resources/forum/blade-tailwind/views/category/partials/options.blade.php b/resources/forum/blade-tailwind/views/category/partials/options.blade.php new file mode 100644 index 0000000000..338024af26 --- /dev/null +++ b/resources/forum/blade-tailwind/views/category/partials/options.blade.php @@ -0,0 +1,12 @@ +@foreach ($categories as $cat) + @if (!isset($hide) || (isset($hide) && $cat->id != $hide->id)) + + @endif + + @if ($cat->children) + @include ('forum::category.partials.options', ['categories' => $cat->children]) + @endif +@endforeach diff --git a/resources/forum/blade-tailwind/views/category/show.blade.php b/resources/forum/blade-tailwind/views/category/show.blade.php new file mode 100644 index 0000000000..e8f5591a7a --- /dev/null +++ b/resources/forum/blade-tailwind/views/category/show.blade.php @@ -0,0 +1,248 @@ +{{-- $thread is passed as NULL to the master layout view to prevent it from showing in the breadcrumbs --}} +@extends('forum::layouts.main', ['thread' => null]) + +@section('content') +
+

+ {{ $category->title }}   + @if ($category->description) + {{ $category->description }} + @endif +

+
+ +
+
+ @if ($category->accepts_threads) + @can ('createThreads', $category) + {{ trans('forum::threads.new_thread') }} + @endcan + @endif + + + @can ('editCategories') + @can ('edit', $category) + + {{ trans('forum::general.edit') }} + + @endcan + @endcan + +
+ + @if (!$category->children->isEmpty()) + @foreach ($category->children as $subcategory) + @include ('forum::category.partials.list', ['category' => $subcategory]) + @endforeach + @endif + + @if ($category->accepts_threads) + @if (!$threads->isEmpty()) +
+ {{ $threads->links('forum::pagination') }} +
+ + @if (count($selectableThreadIds) > 0) + @can ('manageThreads', $category) +
+ @csrf + + +
+
+ + +
+
+ @endcan + @endif + +
+ @foreach ($threads as $thread) + @include ('forum::thread.partials.list') + @endforeach +
+ + @if (count($selectableThreadIds) > 0) + @can ('manageThreads', $category) +
+
+
+ {{ trans('forum::general.with_selection') }} +
+
+
+
+ {{ trans_choice('forum::general.actions', 1) }} +
+ + + @can ('deleteThreads', $category) + + @endcan + @can ('restoreThreads', $category) + + @endcan + @can ('moveThreadsFrom', $category) + + @endcan + @can ('lockThreads', $category) + + + @endcan + @can ('pinThreads', $category) + + + @endcan + +
+ +
+
+ +
+ + @include ('forum::category.partials.options', [ + 'categories' => $threadDestinationCategories, + 'hide' => $category + ]) + +
+ + @if (config('forum.general.soft_deletes')) +
+ + +
+ @endif + +
+ +
+
+
+
+
+ @endcan + @endif + @else +
+
+ {{ trans('forum::threads.none_found') }} + @can ('createThreads', $category) +
+ {{ trans('forum::threads.post_the_first') }} + @endcan +
+
+ @endif + +
+
+ {{ $threads->links('forum::pagination') }} +
+
+ @if ($category->accepts_threads) + @can ('createThreads', $category) + {{ trans('forum::threads.new_thread') }} + @endcan + @endif +
+
+ @endif +
+ + @if (!$threads->isEmpty()) + @can ('markThreadsAsRead') +
+ + {{ trans('forum::general.mark_read') }} + +
+ + @include ('forum::category.modals.mark-threads-as-read') + @endcan + @endif + + @can ('editCategories') + @can ('edit', $category) + @include ('forum::category.modals.edit') + @endcan + @endcan + @can ('deleteCategories') + @can ('delete', $category) + @include ('forum::category.modals.delete') + @endcan + @endcan + + +@stop diff --git a/resources/forum/blade-tailwind/views/components/badge.blade.php b/resources/forum/blade-tailwind/views/components/badge.blade.php new file mode 100644 index 0000000000..652c1cc0b4 --- /dev/null +++ b/resources/forum/blade-tailwind/views/components/badge.blade.php @@ -0,0 +1,27 @@ +@props([ + 'type' => 'default' +]) + +@php +switch($type) { + case('info'): + $color = 'bg-blue-500'; + break; + + case('danger'): + $color = 'bg-red-500'; + break; + + case('warning'): + $color = 'bg-orange-500'; + break; + + default: + $color = 'bg-gray-400'; + break; +} +@endphp + +merge(['class' => "$color rounded-full px-2 py-1 text-white text-xs font-semibold"]) }}> + {{ $slot }} + diff --git a/resources/forum/blade-tailwind/views/components/button-group.blade.php b/resources/forum/blade-tailwind/views/components/button-group.blade.php new file mode 100644 index 0000000000..008539dc3d --- /dev/null +++ b/resources/forum/blade-tailwind/views/components/button-group.blade.php @@ -0,0 +1,3 @@ +
+ {{ $slot }} +
diff --git a/resources/forum/blade-tailwind/views/components/button-link.blade.php b/resources/forum/blade-tailwind/views/components/button-link.blade.php new file mode 100644 index 0000000000..6968d4e44c --- /dev/null +++ b/resources/forum/blade-tailwind/views/components/button-link.blade.php @@ -0,0 +1,3 @@ +merge(['class' => 'bg-blue-500 hover:bg-blue-400 text-white font-semibold hover:text-white px-3 py-2 rounded-md inline-block']) }}> + {{ $slot }} + diff --git a/resources/forum/blade-tailwind/views/components/button-secondary.blade.php b/resources/forum/blade-tailwind/views/components/button-secondary.blade.php new file mode 100644 index 0000000000..519f991faa --- /dev/null +++ b/resources/forum/blade-tailwind/views/components/button-secondary.blade.php @@ -0,0 +1,3 @@ + diff --git a/resources/forum/blade-tailwind/views/components/button.blade.php b/resources/forum/blade-tailwind/views/components/button.blade.php new file mode 100644 index 0000000000..afccd7b4e8 --- /dev/null +++ b/resources/forum/blade-tailwind/views/components/button.blade.php @@ -0,0 +1,3 @@ + diff --git a/resources/forum/blade-tailwind/views/components/input.blade.php b/resources/forum/blade-tailwind/views/components/input.blade.php new file mode 100644 index 0000000000..2e221f669f --- /dev/null +++ b/resources/forum/blade-tailwind/views/components/input.blade.php @@ -0,0 +1 @@ +merge(['type' => 'text', 'class' => 'px-3 py-1 border-gray-300 focus:border-blue-500 focus:ring-blue-500 rounded-md border shadow-sm']) }}> diff --git a/resources/forum/blade-tailwind/views/components/label.blade.php b/resources/forum/blade-tailwind/views/components/label.blade.php new file mode 100644 index 0000000000..4d9a6b565c --- /dev/null +++ b/resources/forum/blade-tailwind/views/components/label.blade.php @@ -0,0 +1,3 @@ + diff --git a/resources/forum/blade-tailwind/views/components/select.blade.php b/resources/forum/blade-tailwind/views/components/select.blade.php new file mode 100644 index 0000000000..2df5e15da4 --- /dev/null +++ b/resources/forum/blade-tailwind/views/components/select.blade.php @@ -0,0 +1,5 @@ +
+ +
diff --git a/resources/forum/blade-tailwind/views/components/textarea.blade.php b/resources/forum/blade-tailwind/views/components/textarea.blade.php new file mode 100644 index 0000000000..01483e3bd1 --- /dev/null +++ b/resources/forum/blade-tailwind/views/components/textarea.blade.php @@ -0,0 +1 @@ + diff --git a/resources/forum/blade-tailwind/views/layouts/main.blade.php b/resources/forum/blade-tailwind/views/layouts/main.blade.php new file mode 100644 index 0000000000..8457adbddd --- /dev/null +++ b/resources/forum/blade-tailwind/views/layouts/main.blade.php @@ -0,0 +1,94 @@ + + + + + + + + @if (isset($thread_title)) + {{ $thread_title }} — + @endif + @if (isset($category)) + {{ $category->title }} — + @endif + {{ trans('forum::general.home_title') }} + + + @vite(['resources/forum/blade-tailwind/css/forum.css', 'resources/forum/blade-tailwind/js/forum.js']) + + + + +
+ @include ('forum::partials.breadcrumbs') + @include ('forum::partials.alerts') + + @yield('content') +
+ + @yield('footer') + + + + diff --git a/resources/forum/blade-tailwind/views/modal-form.blade.php b/resources/forum/blade-tailwind/views/modal-form.blade.php new file mode 100644 index 0000000000..35d368f2cd --- /dev/null +++ b/resources/forum/blade-tailwind/views/modal-form.blade.php @@ -0,0 +1,30 @@ + diff --git a/resources/forum/blade-tailwind/views/pagination.blade.php b/resources/forum/blade-tailwind/views/pagination.blade.php new file mode 100644 index 0000000000..63c6f56b59 --- /dev/null +++ b/resources/forum/blade-tailwind/views/pagination.blade.php @@ -0,0 +1,46 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/forum/blade-tailwind/views/partials/alert.blade.php b/resources/forum/blade-tailwind/views/partials/alert.blade.php new file mode 100644 index 0000000000..e3c1b5dee4 --- /dev/null +++ b/resources/forum/blade-tailwind/views/partials/alert.blade.php @@ -0,0 +1,18 @@ +@php +$colorClasses = match ($type) { + 'primary', '', null => 'bg-blue-100 text-blue-700', + 'success', '', null => 'bg-green-100 text-green-700', + 'danger' => 'bg-orange-100 text-orange-700' +}; +@endphp + +
+
+ {!! $message !!} +
+ +
diff --git a/resources/forum/blade-tailwind/views/partials/alerts.blade.php b/resources/forum/blade-tailwind/views/partials/alerts.blade.php new file mode 100644 index 0000000000..e2a0e35a99 --- /dev/null +++ b/resources/forum/blade-tailwind/views/partials/alerts.blade.php @@ -0,0 +1,11 @@ +@if (Session::has('alerts')) + @foreach (Session::get('alerts') as $alert) + @include ('forum::partials.alert', $alert) + @endforeach +@endif + +@if (isset($errors) && !$errors->isEmpty()) + @foreach ($errors->all() as $error) + @include ('forum::partials.alert', ['type' => 'danger', 'message' => $error]) + @endforeach +@endif diff --git a/resources/forum/blade-tailwind/views/partials/breadcrumb-categories.blade.php b/resources/forum/blade-tailwind/views/partials/breadcrumb-categories.blade.php new file mode 100644 index 0000000000..521e552410 --- /dev/null +++ b/resources/forum/blade-tailwind/views/partials/breadcrumb-categories.blade.php @@ -0,0 +1,4 @@ +@if ($category->parent !== null) + @include ('forum::partials.breadcrumb-categories', ['category' => $category->parent]) +@endif +
  • {{ $category->title }}
  • diff --git a/resources/forum/blade-tailwind/views/partials/breadcrumbs.blade.php b/resources/forum/blade-tailwind/views/partials/breadcrumbs.blade.php new file mode 100644 index 0000000000..b606342756 --- /dev/null +++ b/resources/forum/blade-tailwind/views/partials/breadcrumbs.blade.php @@ -0,0 +1,16 @@ + diff --git a/resources/forum/blade-tailwind/views/partials/timestamp.blade.php b/resources/forum/blade-tailwind/views/partials/timestamp.blade.php new file mode 100644 index 0000000000..c01cce7a90 --- /dev/null +++ b/resources/forum/blade-tailwind/views/partials/timestamp.blade.php @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/forum/blade-tailwind/views/post/confirm-delete.blade.php b/resources/forum/blade-tailwind/views/post/confirm-delete.blade.php new file mode 100644 index 0000000000..ae71f083fd --- /dev/null +++ b/resources/forum/blade-tailwind/views/post/confirm-delete.blade.php @@ -0,0 +1,37 @@ +@extends ('forum::layouts.main', ['breadcrumbs_append' => [trans_choice('forum::posts.delete', 1)]]) + +@section ('content') +
    +

    {{ trans_choice('forum::posts.delete', 1) }}

    + +
    + + @include ('forum::post.partials.list', ['post' => $post, 'single' => true]) + +
    + @csrf + @method('DELETE') + +
    +
    + + @if (config('forum.general.soft_deletes')) +
    + + +
    + @else + {{ trans('forum::general.generic_confirm') }} + @endif +
    +
    + +
    + {{ trans('forum::general.cancel') }} + {{ trans('forum::general.delete') }} +
    +
    +
    +@stop diff --git a/resources/forum/blade-tailwind/views/post/confirm-restore.blade.php b/resources/forum/blade-tailwind/views/post/confirm-restore.blade.php new file mode 100644 index 0000000000..66d4deb9c4 --- /dev/null +++ b/resources/forum/blade-tailwind/views/post/confirm-restore.blade.php @@ -0,0 +1,29 @@ +@extends ('forum::layouts.main', ['breadcrumbs_append' => [trans_choice('forum::posts.restore', 1)]]) + +@section ('content') +
    +

    {{ trans_choice('forum::posts.restore', 1) }}

    + +
    + + @include ('forum::post.partials.list', ['post' => $post, 'single' => true]) + +
    + @csrf + @method('POST') + +
    +
    + {{ trans('forum::general.generic_confirm') }} +
    +
    + +
    + {{ trans('forum::general.cancel') }} + + {{ trans('forum::general.restore') }} + +
    +
    +
    +@stop diff --git a/resources/forum/blade-tailwind/views/post/create.blade.php b/resources/forum/blade-tailwind/views/post/create.blade.php new file mode 100644 index 0000000000..46bd4e78a4 --- /dev/null +++ b/resources/forum/blade-tailwind/views/post/create.blade.php @@ -0,0 +1,32 @@ +@extends ('forum::layouts.main', ['breadcrumbs_append' => [trans('forum::general.new_reply')]]) + +@section ('content') +
    +

    {{ trans('forum::general.new_reply') }} ({{ $thread->title }})

    + + @if ($post !== null && !$post->trashed()) +
    {{ trans('forum::general.replying_to', ['item' => $post->authorName]) }}:
    + + @include ('forum::post.partials.quote') + @endif + +
    + +
    + {!! csrf_field() !!} + + @if ($post !== null) + + @endif + +
    + {{ old('content') }} +
    + +
    + {{ trans('forum::general.cancel') }} + {{ trans('forum::general.reply') }} +
    +
    +
    +@stop diff --git a/resources/forum/blade-tailwind/views/post/edit.blade.php b/resources/forum/blade-tailwind/views/post/edit.blade.php new file mode 100644 index 0000000000..295b794879 --- /dev/null +++ b/resources/forum/blade-tailwind/views/post/edit.blade.php @@ -0,0 +1,29 @@ +@extends ('forum::layouts.main', ['breadcrumbs_append' => [trans('forum::posts.edit')]]) + +@section ('content') +
    +

    {{ trans('forum::posts.edit') }} ({{ $thread->title }})

    + +
    + + @if ($post->parent) +

    {{ trans('forum::general.response_to', ['item' => $post->parent->authorName]) }}...

    + + @include ('forum::post.partials.list', ['post' => $post->parent, 'single' => true]) + @endif + +
    + @csrf + @method('PATCH') + +
    + {{ old('content') !== null ? old('content') : $post->content }} +
    + +
    + {{ trans('forum::general.cancel') }} + {{ trans('forum::general.save') }} +
    +
    +
    +@stop diff --git a/resources/forum/blade-tailwind/views/post/partials/actions.blade.php b/resources/forum/blade-tailwind/views/post/partials/actions.blade.php new file mode 100644 index 0000000000..e7eb921ac9 --- /dev/null +++ b/resources/forum/blade-tailwind/views/post/partials/actions.blade.php @@ -0,0 +1,23 @@ +
    + +
    +
    +
    + + +
    +
    + +
    +
    diff --git a/resources/forum/blade-tailwind/views/post/partials/list.blade.php b/resources/forum/blade-tailwind/views/post/partials/list.blade.php new file mode 100644 index 0000000000..ecf26f53d0 --- /dev/null +++ b/resources/forum/blade-tailwind/views/post/partials/list.blade.php @@ -0,0 +1,70 @@ +
    trashed())id="post-{{ $post->sequence }}"@endif + class="bg-white border mb-2 rounded-md {{ $post->trashed() || $thread->trashed() ? 'opacity-50' : '' }}" + :class="{ 'border-blue-500': state.selectedPosts.includes({{ $post->id }}) }"> +
    + @if (!isset($single) || !$single) + + #{{ $post->sequence }} + @if ($post->sequence != 1) + @can ('deletePosts', $post->thread) + @can ('delete', $post) + + @endcan + @endcan + @endif + + @endif + +
    + {{ $post->authorName }} + + @include ('forum::partials.timestamp', ['carbon' => $post->created_at]) + @if ($post->hasBeenUpdated()) + ({{ trans('forum::general.last_updated') }} @include ('forum::partials.timestamp', ['carbon' => $post->updated_at])) + @endif + +
    +
    +
    + @if ($post->parent !== null) + @include ('forum::post.partials.quote', ['post' => $post->parent]) + @endif + + @if ($post->trashed()) + @can ('viewTrashedPosts') + {!! Forum::render($post->content) !!} +
    + @endcan + {{ trans('forum::general.deleted') }} + @else + {!! Forum::render($post->content) !!} + @endif + + @if (!isset($single) || !$single) +
    + @if (!$post->trashed()) + {{ trans('forum::general.permalink') }} + @if ($post->sequence != 1) + @can ('deletePosts', $post->thread) + @can ('delete', $post) + {{ trans('forum::general.delete') }} + @endcan + @endcan + @endif + @can ('edit', $post) + {{ trans('forum::general.edit') }} + @endcan + @can ('reply', $post->thread) + {{ trans('forum::general.reply') }} + @endcan + @else + @can ('restorePosts', $post->thread) + @can ('restore', $post) + {{ trans('forum::general.restore') }} + @endcan + @endcan + @endif +
    + @endif +
    +
    diff --git a/resources/forum/blade-tailwind/views/post/partials/quote.blade.php b/resources/forum/blade-tailwind/views/post/partials/quote.blade.php new file mode 100644 index 0000000000..9c7649f9e9 --- /dev/null +++ b/resources/forum/blade-tailwind/views/post/partials/quote.blade.php @@ -0,0 +1,13 @@ +
    +
    +
    + + #{{ $post->sequence }} + +
    + {{ $post->authorName }} {{ $post->posted }} +
    +
    + {!! \Illuminate\Support\Str::limit(Forum::render($post->content)) !!} +
    +
    diff --git a/resources/forum/blade-tailwind/views/post/show.blade.php b/resources/forum/blade-tailwind/views/post/show.blade.php new file mode 100644 index 0000000000..9e1d1b0566 --- /dev/null +++ b/resources/forum/blade-tailwind/views/post/show.blade.php @@ -0,0 +1,14 @@ +@extends ('forum::layouts.main', ['breadcrumbs_append' => [trans('forum::posts.view')]]) + +@section ('content') +
    +
    +

    {{ trans('forum::posts.view') }} ({{ $thread->title }})

    + {{ trans('forum::threads.view') }} +
    + +
    + + @include ('forum::post.partials.list', ['post' => $post, 'single' => true]) +
    +@stop diff --git a/resources/forum/blade-tailwind/views/thread/create.blade.php b/resources/forum/blade-tailwind/views/thread/create.blade.php new file mode 100644 index 0000000000..d9effc59f7 --- /dev/null +++ b/resources/forum/blade-tailwind/views/thread/create.blade.php @@ -0,0 +1,25 @@ +@extends ('forum::layouts.main', ['breadcrumbs_append' => [trans('forum::threads.new_thread')]]) + +@section ('content') +
    +

    {{ trans('forum::threads.new_thread') }} ({{ $category->title }})

    + +
    + @csrf + +
    + {{ trans('forum::general.title') }} + +
    + +
    + {{ old('content') }} +
    + +
    + {{ trans('forum::general.cancel') }} + {{ trans('forum::general.create') }} +
    +
    +
    +@stop diff --git a/resources/forum/blade-tailwind/views/thread/modals/mark-as-read.blade.php b/resources/forum/blade-tailwind/views/thread/modals/mark-as-read.blade.php new file mode 100644 index 0000000000..8c196ac65f --- /dev/null +++ b/resources/forum/blade-tailwind/views/thread/modals/mark-as-read.blade.php @@ -0,0 +1,14 @@ +@component('forum::modal-form') + @slot('key', 'mark-as-read') + @slot('title', trans('forum::general.mark_read')) + @slot('route', Forum::route('unread.mark-as-read')) + @slot('method', 'PATCH') + +

    {{ trans('forum::general.generic_confirm') }}

    + + @slot('actions') + + {{ trans('forum::general.mark_read') }} + + @endslot +@endcomponent diff --git a/resources/forum/blade-tailwind/views/thread/partials/list.blade.php b/resources/forum/blade-tailwind/views/thread/partials/list.blade.php new file mode 100644 index 0000000000..a30f82fa36 --- /dev/null +++ b/resources/forum/blade-tailwind/views/thread/partials/list.blade.php @@ -0,0 +1,52 @@ +
    +
    +
    + + {{ $thread->title }} + +
    + {{ $thread->authorName }} + @include ('forum::partials.timestamp', ['carbon' => $thread->created_at]) + + @if (!isset($category)) +
    + {{ $thread->category->title }} + @endif +
    + +
    + @if ($thread->pinned) + {{ trans('forum::threads.pinned') }} + @endif + @if ($thread->locked) + {{ trans('forum::threads.locked') }} + @endif + @if ($thread->userReadStatus !== null && !$thread->trashed()) + {{ trans($thread->userReadStatus) }} + @endif + @if ($thread->trashed()) + {{ trans('forum::general.deleted') }} + @endif + + {{ trans('forum::general.replies') }}: + {{ $thread->reply_count }} + +
    + + @if ($thread->lastPost) +
    + {{ trans('forum::posts.view') }} » +
    + {{ $thread->lastPost->authorName }} + @include ('forum::partials.timestamp', ['carbon' => $thread->lastPost->created_at]) +
    +
    + @endif + + @if (isset($category) && isset($selectableThreadIds) && in_array($thread->id, $selectableThreadIds)) +
    + +
    + @endif +
    +
    diff --git a/resources/forum/blade-tailwind/views/thread/recent.blade.php b/resources/forum/blade-tailwind/views/thread/recent.blade.php new file mode 100644 index 0000000000..b96988453e --- /dev/null +++ b/resources/forum/blade-tailwind/views/thread/recent.blade.php @@ -0,0 +1,21 @@ +@extends ('forum::layouts.main', ['thread' => null, 'breadcrumbs_append' => [trans('forum::threads.recent')]]) + +@section ('content') +
    +

    {{ trans('forum::threads.recent') }}

    + + @if (!$threads->isEmpty()) +
    + @foreach ($threads as $thread) + @include ('forum::thread.partials.list') + @endforeach +
    + @else +
    +
    + {{ trans('forum::threads.none_found') }} +
    +
    + @endif +
    +@stop diff --git a/resources/forum/blade-tailwind/views/thread/show.blade.php b/resources/forum/blade-tailwind/views/thread/show.blade.php new file mode 100644 index 0000000000..0e8afc3bdb --- /dev/null +++ b/resources/forum/blade-tailwind/views/thread/show.blade.php @@ -0,0 +1,391 @@ +@extends ('forum::layouts.main', ['thread' => null, 'breadcrumbs_append' => [$thread->title], 'thread_title' => $thread->title]) + +@section ('content') +
    +
    +

    {{ $thread->title }}

    + +
    + @if (Gate::allows('deleteThreads', $thread->category) && Gate::allows('delete', $thread)) + @if ($thread->trashed()) + + {{ trans('forum::general.perma_delete') }} + + @else + + {{ trans('forum::general.delete') }} + + @endif + @endif + @if ($thread->trashed() && Gate::allows('restoreThreads', $thread->category) && Gate::allows('restore', $thread)) + + {{ trans('forum::general.restore') }} + + @endif + + @if (Gate::allows('lockThreads', $category) + || Gate::allows('pinThreads', $category) + || Gate::allows('rename', $thread) + || Gate::allows('moveThreadsFrom', $category)) + + @if (!$thread->trashed()) + @can ('lockThreads', $category) + @if ($thread->locked) + + {{ trans('forum::threads.unlock') }} + + @else + + {{ trans('forum::threads.lock') }} + + @endif + @endcan + @can ('pinThreads', $category) + @if ($thread->pinned) + + {{ trans('forum::threads.unpin') }} + + @else + + {{ trans('forum::threads.pin') }} + + @endif + @endcan + @can ('rename', $thread) + + {{ trans('forum::general.rename') }} + + @endcan + @can ('moveThreadsFrom', $category) + + {{ trans('forum::general.move') }} + + @endcan + @endif + + @endcan +
    +
    + +
    + @if ($thread->trashed()) + {{ trans('forum::general.deleted') }} + @endif + @if ($thread->pinned) + {{ trans('forum::threads.pinned') }} + @endif + @if ($thread->locked) + {{ trans('forum::threads.locked') }} + @endif +
    + + @if ((count($posts) > 1 || $posts->currentPage() > 1) && (Gate::allows('deletePosts', $thread) || Gate::allows('restorePosts', $thread)) && count($selectablePosts) > 0) +
    + @csrf + + @endif + +
    +
    + {{ $posts->links('forum::pagination') }} +
    +
    + @if (!$thread->trashed()) + @can ('reply', $thread) + + + {{ trans('forum::general.new_reply') }} + + + {{ trans('forum::general.quick_reply') }} + + + @endcan + @endif +
    +
    + + @if ((count($posts) > 1 || $posts->currentPage() > 1) && (Gate::allows('deletePosts', $thread) || Gate::allows('restorePosts', $thread)) && count($selectablePosts) > 0) +
    +
    + + +
    +
    + @endif + + @foreach ($posts as $post) + @include ('forum::post.partials.list', compact('post')) + @endforeach + + @if ((count($posts) > 1 || $posts->currentPage() > 1) && (Gate::allows('deletePosts', $thread) || Gate::allows('restorePosts', $thread)) && count($selectablePosts) > 0) +
    +
    +
    + {{ trans('forum::general.with_selection') }} +
    +
    +
    +
    + {{ trans_choice('forum::general.actions', 1) }} +
    + + + + + +
    + + @if (config('forum.general.soft_deletes')) +
    + + +
    + @endif + +
    + {{ trans('forum::general.proceed') }} +
    +
    +
    +
    +
    + @endif + + {{ $posts->links('forum::pagination') }} + + @if (!$thread->trashed()) + @can ('reply', $thread) +

    {{ trans('forum::general.quick_reply') }}

    +
    +
    + @csrf + +
    + {{ old('content') }} +
    + +
    + {{ trans('forum::general.reply') }} +
    +
    +
    + @endcan + @endif +
    + + @if ($thread->trashed() && Gate::allows('restoreThreads', $thread->category) && Gate::allows('restore', $thread)) + @component('forum::modal-form') + @slot('key', 'restore-thread') + @slot('title', '' . trans('forum::general.restore')) + @slot('route', Forum::route('thread.restore', $thread)) + @slot('method', 'POST') + + {{ trans('forum::general.generic_confirm') }} + + @slot('actions') + {{ trans('forum::general.proceed') }} + @endslot + @endcomponent + @endif + + @if (Gate::allows('deleteThreads', $thread->category) && Gate::allows('delete', $thread)) + @component('forum::modal-form') + @slot('key', 'delete-thread') + @slot('title', '' . trans('forum::threads.delete')) + @slot('route', Forum::route('thread.delete', $thread)) + @slot('method', 'DELETE') + + @if (config('forum.general.soft_deletes')) +
    + + +
    + @else + {{ trans('forum::general.generic_confirm') }} + @endif + + @slot('actions') + {{ trans('forum::general.proceed') }} + @endslot + @endcomponent + + @if (config('forum.general.soft_deletes')) + @component('forum::modal-form') + @slot('key', 'perma-delete-thread') + @slot('title', '' . trans_choice('forum::threads.perma_delete', 1)) + @slot('route', Forum::route('thread.delete', $thread)) + @slot('method', 'DELETE') + + + + {{ trans('forum::general.generic_confirm') }} + + @slot('actions') + {{ trans('forum::general.proceed') }} + @endslot + @endcomponent + @endif + @endif + + @if (!$thread->trashed()) + @can ('lockThreads', $category) + @if ($thread->locked) + @component('forum::modal-form') + @slot('key', 'unlock-thread') + @slot('title', ' ' . trans('forum::threads.unlock')) + @slot('route', Forum::route('thread.unlock', $thread)) + @slot('method', 'POST') + + {{ trans('forum::general.generic_confirm') }} + + @slot('actions') + {{ trans('forum::general.proceed') }} + @endslot + @endcomponent + @else + @component('forum::modal-form') + @slot('key', 'lock-thread') + @slot('title', ' ' . trans('forum::threads.lock')) + @slot('route', Forum::route('thread.lock', $thread)) + @slot('method', 'POST') + + {{ trans('forum::general.generic_confirm') }} + + @slot('actions') + {{ trans('forum::general.proceed') }} + @endslot + @endcomponent + @endif + @endcan + + @can ('pinThreads', $category) + @if ($thread->pinned) + @component('forum::modal-form') + @slot('key', 'unpin-thread') + @slot('title', ' ' . trans('forum::threads.unpin')) + @slot('route', Forum::route('thread.unpin', $thread)) + @slot('method', 'POST') + + {{ trans('forum::general.generic_confirm') }} + + @slot('actions') + {{ trans('forum::general.proceed') }} + @endslot + @endcomponent + @else + @component('forum::modal-form') + @slot('key', 'pin-thread') + @slot('title', ' ' . trans('forum::threads.pin')) + @slot('route', Forum::route('thread.pin', $thread)) + @slot('method', 'POST') + + {{ trans('forum::general.generic_confirm') }} + + @slot('actions') + {{ trans('forum::general.proceed') }} + @endslot + @endcomponent + @endif + @endcan + + @can ('rename', $thread) + @component('forum::modal-form') + @slot('key', 'rename-thread') + @slot('title', ' ' . trans('forum::general.rename')) + @slot('route', Forum::route('thread.rename', $thread)) + @slot('method', 'POST') + +
    + {{ trans('forum::general.title') }} + +
    + + @slot('actions') + {{ trans('forum::general.proceed') }} + @endslot + @endcomponent + @endcan + + @can ('moveThreadsFrom', $category) + @component('forum::modal-form') + @slot('key', 'move-thread') + @slot('title', ' ' . trans('forum::general.move')) + @slot('route', Forum::route('thread.move', $thread)) + @slot('method', 'POST') + +
    +
    + +
    + +
    + + @slot('actions') + {{ trans('forum::general.proceed') }} + @endslot + @endcomponent + @endcan + @endif + + +@stop diff --git a/resources/forum/blade-tailwind/views/thread/unread.blade.php b/resources/forum/blade-tailwind/views/thread/unread.blade.php new file mode 100644 index 0000000000..560ac0eddc --- /dev/null +++ b/resources/forum/blade-tailwind/views/thread/unread.blade.php @@ -0,0 +1,31 @@ +@extends ('forum::layouts.main', ['thread' => null, 'breadcrumbs_append' => [trans('forum::threads.unread_updated')]]) + +@section ('content') +
    +

    {{ trans('forum::threads.unread_updated') }}

    + + @if (!$threads->isEmpty()) +
    + @foreach ($threads as $thread) + @include ('forum::thread.partials.list') + @endforeach +
    + @else +
    + {{ trans('forum::threads.none_found') }} +
    + @endif +
    + + @if (!$threads->isEmpty()) + @can ('markThreadsAsRead') +
    + + {{ trans('forum::general.mark_read') }} + +
    + + @include ('forum::thread.modals.mark-as-read') + @endcan + @endif +@stop diff --git a/resources/forum/livewire-tailwind/css/forum.css b/resources/forum/livewire-tailwind/css/forum.css new file mode 100644 index 0000000000..f1f6bcc750 --- /dev/null +++ b/resources/forum/livewire-tailwind/css/forum.css @@ -0,0 +1,83 @@ +@import url('https://fonts.googleapis.com/css2?family=Source+Sans+3:ital,wght@0,400;0,500;0,700;1,400&display=swap'); + +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + .forum { + font-family: "Source Sans 3", sans-serif; + font-optical-sizing: auto; + font-size: 18px; + @apply text-slate-900; + } + + .breadcrumbs ol li { + display: inline-block; + } + + .breadcrumbs ol li + li { + margin-left: .5rem; + } + + .breadcrumbs ol li + li::before { + float: left; + padding-right: .5rem; + color: #6c757d; + content: "/"; + } + + .forum .clr-field button { + @apply w-6 h-6 mr-2 rounded-full; + } + + .forum .nested-sort .ns-targeted { + @apply rounded-md border-green-500 outline outline-green-500; + } + + .bg-category { + background-color: var(--category-light); + } + + .text-category { + color: var(--category-light); + } + + div, p { + font-size: 1rem; + } + + h1 { + @apply text-4xl my-6; + } + + h2 { + @apply text-2xl; + } + + h3 { + @apply text-xl; + } + + a:not(.link-button):not(.group-button):not(.text-category) { + @apply text-slate-600 hover:text-slate-900; + } + + @media (prefers-color-scheme: dark) { + .forum { + @apply text-slate-400; + } + + .bg-category { + background-color: var(--category-dark); + } + + .text-category { + color: var(--category-dark); + } + + a:not(.link-button):not(.group-button):not(.text-category) { + @apply text-slate-300 hover:text-white; + } + } +} diff --git a/resources/forum/livewire-tailwind/js/forum.js b/resources/forum/livewire-tailwind/js/forum.js new file mode 100644 index 0000000000..1d0f672951 --- /dev/null +++ b/resources/forum/livewire-tailwind/js/forum.js @@ -0,0 +1,9 @@ +import { formatDistance } from 'date-fns'; +import '@melloware/coloris/dist/coloris.css'; +import Coloris from '@melloware/coloris'; +import NestedSort from 'nested-sort'; + +window.dateFormatDistance = formatDistance; +window.Coloris = Coloris; +window.Coloris.init(); +window.NestedSort = NestedSort; diff --git a/resources/forum/livewire-tailwind/views/components/alerts.blade.php b/resources/forum/livewire-tailwind/views/components/alerts.blade.php new file mode 100644 index 0000000000..56e135179f --- /dev/null +++ b/resources/forum/livewire-tailwind/views/components/alerts.blade.php @@ -0,0 +1,64 @@ +
    + +
    + +@script + +@endscript diff --git a/resources/forum/livewire-tailwind/views/components/breadcrumb-categories.blade.php b/resources/forum/livewire-tailwind/views/components/breadcrumb-categories.blade.php new file mode 100644 index 0000000000..cc919d74f0 --- /dev/null +++ b/resources/forum/livewire-tailwind/views/components/breadcrumb-categories.blade.php @@ -0,0 +1,4 @@ +@if ($category->parent !== null) + @include ('forum::components.breadcrumb-categories', ['category' => $category->parent]) +@endif + diff --git a/resources/forum/livewire-tailwind/views/components/breadcrumbs.blade.php b/resources/forum/livewire-tailwind/views/components/breadcrumbs.blade.php new file mode 100644 index 0000000000..d1d243464f --- /dev/null +++ b/resources/forum/livewire-tailwind/views/components/breadcrumbs.blade.php @@ -0,0 +1,23 @@ + diff --git a/resources/forum/livewire-tailwind/views/components/button.blade.php b/resources/forum/livewire-tailwind/views/components/button.blade.php new file mode 100644 index 0000000000..b0db803deb --- /dev/null +++ b/resources/forum/livewire-tailwind/views/components/button.blade.php @@ -0,0 +1,21 @@ +@php +$colorClasses = match ($intent) { + 'primary', '', null => 'text-white bg-blue-600 hover:text-white hover:bg-blue-500', + 'secondary' => 'text-zinc-800 bg-zinc-400/50 hover:bg-zinc-400/35 dark:text-slate-800 dark:bg-slate-400/50 dark:hover:bg-slate-400/65', + 'danger' => 'text-white bg-red-500 hover:bg-red-400' +}; + +$sizeClasses = match ($size) { + 'regular', '', null => 'min-w-36 px-4 py-2', + 'small' => 'px-4 py-1', +}; +@endphp + + diff --git a/resources/forum/livewire-tailwind/views/components/category/card.blade.php b/resources/forum/livewire-tailwind/views/components/category/card.blade.php new file mode 100644 index 0000000000..850278fe0e --- /dev/null +++ b/resources/forum/livewire-tailwind/views/components/category/card.blade.php @@ -0,0 +1,103 @@ +
    +
    + +
    +

    + {{ $category->title }} +

    +

    {{ $category->description }}

    +
    +
    + @if ($category->accepts_threads) + + + @endif +
    +
    + @if ($category->accepts_threads) + @if ($category->newestThread) +
    + @include ("forum::components.icons.chat-bubbles-mini") + + {{ $category->newestThread->title }} + + + + +
    + @endif + @if ($category->latestActiveThread && $category->latestActiveThread->reply_count > 1) +
    + @include ("forum::components.icons.chat-bubble-text-mini") + + Re: {{ $category->latestActiveThread->title }} + + + + +
    + @endif + @endif +
    +
    + + @if (count($category->children) > 0) + @foreach ($category->children as $subcategory) +
    +
    + @include ('forum::components.icons.subcategory', ['size' => '12']) +
    +
    +
    +

    + {{ $subcategory->title }} +

    +

    {{ $subcategory->description }}

    +
    +
    + @if ($subcategory->accepts_threads) + + + @endif +
    +
    + @if ($subcategory->accepts_threads) + @if ($subcategory->newestThread) +
    + @include ("forum::components.icons.chat-bubbles-mini") + + {{ $subcategory->newestThread->title }} + + + + +
    + @endif + @if ($subcategory->latestActiveThread && $subcategory->latestActiveThread->reply_count > 1) +
    + @include ("forum::components.icons.chat-bubble-text-mini") + + Re: {{ $subcategory->latestActiveThread->title }} + + + + +
    + @endif + @endif +
    +
    +
    + @endforeach + @endif +
    diff --git a/resources/forum/livewire-tailwind/views/components/category/draggable-items.blade.php b/resources/forum/livewire-tailwind/views/components/category/draggable-items.blade.php new file mode 100644 index 0000000000..4e05635c14 --- /dev/null +++ b/resources/forum/livewire-tailwind/views/components/category/draggable-items.blade.php @@ -0,0 +1,18 @@ +@foreach ($categories as $category) +
  • + + + @include ('forum::components.icons.drag-area-vertical') + + {{ $category->title }} + + {{ trans('forum::general.edit') }} + + + @if (count($category->children) > 0) +
      + @include ('forum::components.category.draggable-items', ['categories' => $category->children]) +
    + @endif +
  • +@endforeach diff --git a/resources/forum/livewire-tailwind/views/components/category/options.blade.php b/resources/forum/livewire-tailwind/views/components/category/options.blade.php new file mode 100644 index 0000000000..9736cda0ae --- /dev/null +++ b/resources/forum/livewire-tailwind/views/components/category/options.blade.php @@ -0,0 +1,10 @@ +@foreach ($categories as $category) + + + @if ($category->children) + @include ('forum::components.category.options', ['categories' => $category->children]) + @endif +@endforeach diff --git a/resources/forum/livewire-tailwind/views/components/form/error.blade.php b/resources/forum/livewire-tailwind/views/components/form/error.blade.php new file mode 100644 index 0000000000..ef252c72f8 --- /dev/null +++ b/resources/forum/livewire-tailwind/views/components/form/error.blade.php @@ -0,0 +1,3 @@ +
    + @error($id) {{ $message }} @enderror +
    diff --git a/resources/forum/livewire-tailwind/views/components/form/input-checkbox.blade.php b/resources/forum/livewire-tailwind/views/components/form/input-checkbox.blade.php new file mode 100644 index 0000000000..6b643223ff --- /dev/null +++ b/resources/forum/livewire-tailwind/views/components/form/input-checkbox.blade.php @@ -0,0 +1,11 @@ +
    + + @if (isset($label)) + + @endif +
    diff --git a/resources/forum/livewire-tailwind/views/components/form/input-select.blade.php b/resources/forum/livewire-tailwind/views/components/form/input-select.blade.php new file mode 100644 index 0000000000..c88db127a7 --- /dev/null +++ b/resources/forum/livewire-tailwind/views/components/form/input-select.blade.php @@ -0,0 +1,11 @@ +
    + + + + @include ('forum::components.form.error') +
    diff --git a/resources/forum/livewire-tailwind/views/components/form/input-text.blade.php b/resources/forum/livewire-tailwind/views/components/form/input-text.blade.php new file mode 100644 index 0000000000..f5531a4b58 --- /dev/null +++ b/resources/forum/livewire-tailwind/views/components/form/input-text.blade.php @@ -0,0 +1,11 @@ +
    + + + + @include ('forum::components.form.error') +
    diff --git a/resources/forum/livewire-tailwind/views/components/form/input-textarea.blade.php b/resources/forum/livewire-tailwind/views/components/form/input-textarea.blade.php new file mode 100644 index 0000000000..afb0004bfe --- /dev/null +++ b/resources/forum/livewire-tailwind/views/components/form/input-textarea.blade.php @@ -0,0 +1,11 @@ +
    + @if (isset($label)) + + @endif + + + @include ('forum::components.form.error') +
    diff --git a/resources/forum/livewire-tailwind/views/components/group-button.blade.php b/resources/forum/livewire-tailwind/views/components/group-button.blade.php new file mode 100644 index 0000000000..60dfea7b70 --- /dev/null +++ b/resources/forum/livewire-tailwind/views/components/group-button.blade.php @@ -0,0 +1,14 @@ +@php +$colorClasses = match ($intent) { + 'primary', '', null => 'text-white bg-blue-600 hover:text-white hover:bg-blue-500', + 'secondary' => 'text-zinc-800 bg-zinc-400/50 hover:bg-zinc-400/35 dark:text-slate-800 dark:bg-slate-400/50 dark:hover:bg-slate-400/65', + 'danger' => 'text-white bg-red-500 hover:bg-red-400' +}; +@endphp + + + @if (isset($icon) && !empty($icon)) + @include ("forum::components.icons.{$icon}", ['size' => '5']) + @endif + {{ $label }} + diff --git a/resources/forum/livewire-tailwind/views/components/icons/arrow-down-mini.blade.php b/resources/forum/livewire-tailwind/views/components/icons/arrow-down-mini.blade.php new file mode 100644 index 0000000000..94a3f2e414 --- /dev/null +++ b/resources/forum/livewire-tailwind/views/components/icons/arrow-down-mini.blade.php @@ -0,0 +1,7 @@ + + + diff --git a/resources/forum/livewire-tailwind/views/components/icons/arrow-path-mini.blade.php b/resources/forum/livewire-tailwind/views/components/icons/arrow-path-mini.blade.php new file mode 100644 index 0000000000..cc91c2a2d3 --- /dev/null +++ b/resources/forum/livewire-tailwind/views/components/icons/arrow-path-mini.blade.php @@ -0,0 +1,7 @@ + + + diff --git a/resources/forum/livewire-tailwind/views/components/icons/arrow-right-mini.blade.php b/resources/forum/livewire-tailwind/views/components/icons/arrow-right-mini.blade.php new file mode 100644 index 0000000000..ec405c168f --- /dev/null +++ b/resources/forum/livewire-tailwind/views/components/icons/arrow-right-mini.blade.php @@ -0,0 +1,7 @@ + + + diff --git a/resources/forum/livewire-tailwind/views/components/icons/arrow-up-circle-mini.blade.php b/resources/forum/livewire-tailwind/views/components/icons/arrow-up-circle-mini.blade.php new file mode 100644 index 0000000000..76fda48ea5 --- /dev/null +++ b/resources/forum/livewire-tailwind/views/components/icons/arrow-up-circle-mini.blade.php @@ -0,0 +1,7 @@ + + + diff --git a/resources/forum/livewire-tailwind/views/components/icons/arrow-up-mini.blade.php b/resources/forum/livewire-tailwind/views/components/icons/arrow-up-mini.blade.php new file mode 100644 index 0000000000..d0034033f0 --- /dev/null +++ b/resources/forum/livewire-tailwind/views/components/icons/arrow-up-mini.blade.php @@ -0,0 +1,7 @@ + + + diff --git a/resources/forum/livewire-tailwind/views/components/icons/book-open-outline.blade.php b/resources/forum/livewire-tailwind/views/components/icons/book-open-outline.blade.php new file mode 100644 index 0000000000..5e4afca6cf --- /dev/null +++ b/resources/forum/livewire-tailwind/views/components/icons/book-open-outline.blade.php @@ -0,0 +1,9 @@ + + + diff --git a/resources/forum/livewire-tailwind/views/components/icons/chat-bubble-text-mini.blade.php b/resources/forum/livewire-tailwind/views/components/icons/chat-bubble-text-mini.blade.php new file mode 100644 index 0000000000..04ad9f24bc --- /dev/null +++ b/resources/forum/livewire-tailwind/views/components/icons/chat-bubble-text-mini.blade.php @@ -0,0 +1,7 @@ + + + diff --git a/resources/forum/livewire-tailwind/views/components/icons/chat-bubble-text-outline.blade.php b/resources/forum/livewire-tailwind/views/components/icons/chat-bubble-text-outline.blade.php new file mode 100644 index 0000000000..9ddb8cb287 --- /dev/null +++ b/resources/forum/livewire-tailwind/views/components/icons/chat-bubble-text-outline.blade.php @@ -0,0 +1,7 @@ + + + diff --git a/resources/forum/livewire-tailwind/views/components/icons/chat-bubbles-mini.blade.php b/resources/forum/livewire-tailwind/views/components/icons/chat-bubbles-mini.blade.php new file mode 100644 index 0000000000..33905dd0fb --- /dev/null +++ b/resources/forum/livewire-tailwind/views/components/icons/chat-bubbles-mini.blade.php @@ -0,0 +1,8 @@ + + + + diff --git a/resources/forum/livewire-tailwind/views/components/icons/chat-bubbles-outline.blade.php b/resources/forum/livewire-tailwind/views/components/icons/chat-bubbles-outline.blade.php new file mode 100644 index 0000000000..f94d5de702 --- /dev/null +++ b/resources/forum/livewire-tailwind/views/components/icons/chat-bubbles-outline.blade.php @@ -0,0 +1,7 @@ + + + diff --git a/resources/forum/livewire-tailwind/views/components/icons/drag-area-vertical.blade.php b/resources/forum/livewire-tailwind/views/components/icons/drag-area-vertical.blade.php new file mode 100644 index 0000000000..be107bf128 --- /dev/null +++ b/resources/forum/livewire-tailwind/views/components/icons/drag-area-vertical.blade.php @@ -0,0 +1,7 @@ + + + diff --git a/resources/forum/livewire-tailwind/views/components/icons/home-mini.blade.php b/resources/forum/livewire-tailwind/views/components/icons/home-mini.blade.php new file mode 100644 index 0000000000..64ff3200fe --- /dev/null +++ b/resources/forum/livewire-tailwind/views/components/icons/home-mini.blade.php @@ -0,0 +1,7 @@ + + + diff --git a/resources/forum/livewire-tailwind/views/components/icons/lock-closed-mini.blade.php b/resources/forum/livewire-tailwind/views/components/icons/lock-closed-mini.blade.php new file mode 100644 index 0000000000..2a0be423cc --- /dev/null +++ b/resources/forum/livewire-tailwind/views/components/icons/lock-closed-mini.blade.php @@ -0,0 +1,7 @@ + + + diff --git a/resources/forum/livewire-tailwind/views/components/icons/lock-open-mini.blade.php b/resources/forum/livewire-tailwind/views/components/icons/lock-open-mini.blade.php new file mode 100644 index 0000000000..2bba2f0707 --- /dev/null +++ b/resources/forum/livewire-tailwind/views/components/icons/lock-open-mini.blade.php @@ -0,0 +1,7 @@ + + + diff --git a/resources/forum/livewire-tailwind/views/components/icons/pencil-mini.blade.php b/resources/forum/livewire-tailwind/views/components/icons/pencil-mini.blade.php new file mode 100644 index 0000000000..5889e13573 --- /dev/null +++ b/resources/forum/livewire-tailwind/views/components/icons/pencil-mini.blade.php @@ -0,0 +1,7 @@ + + + diff --git a/resources/forum/livewire-tailwind/views/components/icons/pencil-outline.blade.php b/resources/forum/livewire-tailwind/views/components/icons/pencil-outline.blade.php new file mode 100644 index 0000000000..39d34e482f --- /dev/null +++ b/resources/forum/livewire-tailwind/views/components/icons/pencil-outline.blade.php @@ -0,0 +1,7 @@ + + + diff --git a/resources/forum/livewire-tailwind/views/components/icons/sparkles-mini.blade.php b/resources/forum/livewire-tailwind/views/components/icons/sparkles-mini.blade.php new file mode 100644 index 0000000000..508d571504 --- /dev/null +++ b/resources/forum/livewire-tailwind/views/components/icons/sparkles-mini.blade.php @@ -0,0 +1,7 @@ + + + diff --git a/resources/forum/livewire-tailwind/views/components/icons/squares-plus-outline.blade.php b/resources/forum/livewire-tailwind/views/components/icons/squares-plus-outline.blade.php new file mode 100644 index 0000000000..dc17a13e87 --- /dev/null +++ b/resources/forum/livewire-tailwind/views/components/icons/squares-plus-outline.blade.php @@ -0,0 +1,9 @@ + + + diff --git a/resources/forum/livewire-tailwind/views/components/icons/subcategory.blade.php b/resources/forum/livewire-tailwind/views/components/icons/subcategory.blade.php new file mode 100644 index 0000000000..e9e7691ad6 --- /dev/null +++ b/resources/forum/livewire-tailwind/views/components/icons/subcategory.blade.php @@ -0,0 +1,7 @@ + + + diff --git a/resources/forum/livewire-tailwind/views/components/icons/trash-mini.blade.php b/resources/forum/livewire-tailwind/views/components/icons/trash-mini.blade.php new file mode 100644 index 0000000000..de2a9e41b0 --- /dev/null +++ b/resources/forum/livewire-tailwind/views/components/icons/trash-mini.blade.php @@ -0,0 +1,7 @@ + + + diff --git a/resources/forum/livewire-tailwind/views/components/icons/x-mark.blade.php b/resources/forum/livewire-tailwind/views/components/icons/x-mark.blade.php new file mode 100644 index 0000000000..ac9f2466a7 --- /dev/null +++ b/resources/forum/livewire-tailwind/views/components/icons/x-mark.blade.php @@ -0,0 +1,8 @@ + + + diff --git a/resources/forum/livewire-tailwind/views/components/link-button.blade.php b/resources/forum/livewire-tailwind/views/components/link-button.blade.php new file mode 100644 index 0000000000..06fcc448ed --- /dev/null +++ b/resources/forum/livewire-tailwind/views/components/link-button.blade.php @@ -0,0 +1,19 @@ +@php +$colorClasses = match ($intent) { + 'primary', '', null => 'text-white bg-blue-600 hover:text-white hover:bg-blue-500', + 'secondary' => 'text-zinc-800 bg-zinc-400/50 hover:bg-zinc-400/35 dark:text-slate-800 dark:bg-slate-400/50 dark:hover:bg-slate-400/65', + 'danger' => 'text-white bg-red-500 hover:bg-red-400' +}; + +$sizeClasses = match ($size) { + 'regular', '', null => 'min-w-36 px-4 py-2', + 'small' => 'px-4 py-1', +}; +@endphp + + + @if (isset($icon) && !empty($icon)) + @include ("forum::components.icons.{$icon}", ['size' => '5']) + @endif + {{ $label }} + diff --git a/resources/forum/livewire-tailwind/views/components/loading-overlay.blade.php b/resources/forum/livewire-tailwind/views/components/loading-overlay.blade.php new file mode 100644 index 0000000000..5432e33a60 --- /dev/null +++ b/resources/forum/livewire-tailwind/views/components/loading-overlay.blade.php @@ -0,0 +1,15 @@ +
    +
    + + + + + + + + + + + +
    +
    diff --git a/resources/forum/livewire-tailwind/views/components/modal.blade.php b/resources/forum/livewire-tailwind/views/components/modal.blade.php new file mode 100644 index 0000000000..2c3974dcdc --- /dev/null +++ b/resources/forum/livewire-tailwind/views/components/modal.blade.php @@ -0,0 +1,21 @@ +
    +
    +
    +
    +
    +

    {{ $heading }}

    +
    + @if (!empty($onClose)) + + @endif +
    +
    + {{ $slot }} +
    +
    +
    +
    diff --git a/resources/forum/livewire-tailwind/views/components/pagination.blade.php b/resources/forum/livewire-tailwind/views/components/pagination.blade.php new file mode 100644 index 0000000000..f8f1a3fc06 --- /dev/null +++ b/resources/forum/livewire-tailwind/views/components/pagination.blade.php @@ -0,0 +1,106 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/forum/livewire-tailwind/views/components/pill.blade.php b/resources/forum/livewire-tailwind/views/components/pill.blade.php new file mode 100644 index 0000000000..391726ed48 --- /dev/null +++ b/resources/forum/livewire-tailwind/views/components/pill.blade.php @@ -0,0 +1,14 @@ + + @if (isset($icon)) + @include ("forum::components.icons.{$icon}") + @endif + {{ $text }} + diff --git a/resources/forum/livewire-tailwind/views/components/post/card.blade.php b/resources/forum/livewire-tailwind/views/components/post/card.blade.php new file mode 100644 index 0000000000..03433ffe38 --- /dev/null +++ b/resources/forum/livewire-tailwind/views/components/post/card.blade.php @@ -0,0 +1,101 @@ +
    +
    + @if ($showAuthorPane) +
    +
    + {{ $post->authorName }} +
    +
    + @if (! isset($single) || ! $single) + #{{ $post->sequence }} + @endif +
    +
    + @endif +
    + @if (isset($post->parent)) + + @endif + +
    + @if ($post->trashed()) + @can ('viewTrashedPosts') +
    + {!! Forum::render($post->content) !!} +
    + @endcan + +
    + +
    + @else + {!! Forum::render($post->content) !!} + @endif +
    + +
    +
    + + @if ($post->hasBeenUpdated()) + + {{ trans('forum::general.last_updated') }} + @endif +
    + @if (!isset($single) || !$single) +
    + @if (!$post->trashed()) + + {{ trans('forum::general.permalink') }} + + @can ('edit', $post) + + {{ trans('forum::general.edit') }} + + @endcan + @can ('reply', $post->thread) + + {{ trans('forum::general.reply') }} + + @endcan + @endif + @if ($selectable) +
    + +
    + @endif +
    + @endif +
    +
    +
    +
    + + +@script + +@endscript diff --git a/resources/forum/livewire-tailwind/views/components/post/quote.blade.php b/resources/forum/livewire-tailwind/views/components/post/quote.blade.php new file mode 100644 index 0000000000..9f260440aa --- /dev/null +++ b/resources/forum/livewire-tailwind/views/components/post/quote.blade.php @@ -0,0 +1,16 @@ +
    + {!! Forum::render($post->content) !!} +
    +
    + + {{ $post->authorName }} + + + + +
    +
    + #{{ $post->sequence }} +
    +
    +
    diff --git a/resources/forum/livewire-tailwind/views/components/thread/card.blade.php b/resources/forum/livewire-tailwind/views/components/thread/card.blade.php new file mode 100644 index 0000000000..7186ab0cb0 --- /dev/null +++ b/resources/forum/livewire-tailwind/views/components/thread/card.blade.php @@ -0,0 +1,95 @@ +
    + +
    + +@script + +@endscript diff --git a/resources/forum/livewire-tailwind/views/components/timestamp.blade.php b/resources/forum/livewire-tailwind/views/components/timestamp.blade.php new file mode 100644 index 0000000000..1cabe43598 --- /dev/null +++ b/resources/forum/livewire-tailwind/views/components/timestamp.blade.php @@ -0,0 +1,20 @@ + + +@script + +@endscript diff --git a/resources/forum/livewire-tailwind/views/layouts/main.blade.php b/resources/forum/livewire-tailwind/views/layouts/main.blade.php new file mode 100644 index 0000000000..7fd2162a52 --- /dev/null +++ b/resources/forum/livewire-tailwind/views/layouts/main.blade.php @@ -0,0 +1,137 @@ + + + + + + + + + @if (isset($thread)) + {{ $thread->title }} — + @endif + @if (isset($category)) + {{ $category->title }} — + @endif + {{ trans('forum::general.home_title') }} + + + @vite([ + 'resources/forum/livewire-tailwind/css/forum.css', + 'resources/forum/livewire-tailwind/js/forum.js' + ]) + + +
    + +
    + +
    + {{ $slot }} +
    + + + + + + diff --git a/resources/forum/livewire-tailwind/views/pages/category/create.blade.php b/resources/forum/livewire-tailwind/views/pages/category/create.blade.php new file mode 100644 index 0000000000..af65f97813 --- /dev/null +++ b/resources/forum/livewire-tailwind/views/pages/category/create.blade.php @@ -0,0 +1,60 @@ +
    + @include ('forum::components.loading-overlay') + @include ('forum::components.breadcrumbs') + +
    +
    +

    {{ trans('forum::categories.create') }}

    + +
    +
    + + + + + + + + + @if ($categories->count() > 0) + + + @include ('forum::components.category.options', ['categories' => $categories]) + + @endif + + + + + +
    + +
    + +
    +
    +
    +
    diff --git a/resources/forum/livewire-tailwind/views/pages/category/edit.blade.php b/resources/forum/livewire-tailwind/views/pages/category/edit.blade.php new file mode 100644 index 0000000000..1261410c35 --- /dev/null +++ b/resources/forum/livewire-tailwind/views/pages/category/edit.blade.php @@ -0,0 +1,107 @@ +
    + @include ('forum::components.loading-overlay') + @include ('forum::components.breadcrumbs') + +
    +
    +

    {{ trans('forum::categories.edit') }}

    +

    {{ $category->title }}

    + +
    +
    + + + + + + + + + @if ($categories->count() > 0) + + + @include ('forum::components.category.options', ['categories' => $categories]) + + @endif + + + + + +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    + + + {{ trans('forum::categories.confirm_nonempty_delete') }} + +
    +
    + +
    +
    + +
    +
    +
    +
    + +@script + +@endscript diff --git a/resources/forum/livewire-tailwind/views/pages/category/index.blade.php b/resources/forum/livewire-tailwind/views/pages/category/index.blade.php new file mode 100644 index 0000000000..4e809f492f --- /dev/null +++ b/resources/forum/livewire-tailwind/views/pages/category/index.blade.php @@ -0,0 +1,23 @@ +
    + @include ('forum::components.loading-overlay') + @include ('forum::components.breadcrumbs') + +

    {{ trans('forum::general.index') }}

    + +
    +
    +
    +
    + @can ('createCategories') + + @endcan +
    +
    + + @foreach ($categories as $category) + + @endforeach +
    diff --git a/resources/forum/livewire-tailwind/views/pages/category/manage.blade.php b/resources/forum/livewire-tailwind/views/pages/category/manage.blade.php new file mode 100644 index 0000000000..2f95611930 --- /dev/null +++ b/resources/forum/livewire-tailwind/views/pages/category/manage.blade.php @@ -0,0 +1,83 @@ +
    + @include ('forum::components.loading-overlay') + @include ('forum::components.breadcrumbs') + +
    +
    +

    {{ trans('forum::general.manage') }}

    + + @can ('createCategories') +
    + +
    + @endcan + +
    +
      + @include ('forum::components.category.draggable-items', ['categories' => $categories]) +
    + +
    + +
    +
    +
    +
    +
    + +@script + +@endscript diff --git a/resources/forum/livewire-tailwind/views/pages/category/show.blade.php b/resources/forum/livewire-tailwind/views/pages/category/show.blade.php new file mode 100644 index 0000000000..0756ea1b5e --- /dev/null +++ b/resources/forum/livewire-tailwind/views/pages/category/show.blade.php @@ -0,0 +1,197 @@ +
    + @include ('forum::components.loading-overlay') + @include ('forum::components.breadcrumbs') + +

    {{ $category->title }}

    +

    {{ $category->description }}

    + +
    +
    + @can ('edit', $category) + + @endcan +
    + @can ('createCategories') +
    + +
    + @endcan +
    + + @foreach ($category->descendants as $child) + + @endforeach + +
    +
    +
    + @if ($category->accepts_threads) + @can ('createThreads', $category) +
    + +
    + @endcan + @endif +
    + + @if (count($selectableThreadIds) > 0) +
    + +
    + @endif + +
    + @foreach ($threads as $thread) + + @endforeach + + @if ($category->accepts_threads && $threads->count() == 0) +
    + {{ trans('forum::threads.none_found') }} +
    + @endif +
    + +
    +

    {{ trans('forum::general.with_selection') }}

    + + + + @can ('deleteThreads', $category) + + @endcan + @can ('restoreThreads', $category) + + @endcan + @can ('moveThreadsFrom', $category) + + @endcan + @can ('lockThreads', $category) + + + @endcan + @can ('pinThreads', $category) + + + @endcan + + + @if (config('forum.general.soft_deletes')) + + @endif + + + + @include ('forum::components.category.options', ['categories' => $threadDestinationCategories, 'disable' => $category->id]) + + + +
    + + {{ $threads->links('forum::components.pagination') }} +
    + +@script + +@endscript diff --git a/resources/forum/livewire-tailwind/views/pages/post/edit.blade.php b/resources/forum/livewire-tailwind/views/pages/post/edit.blade.php new file mode 100644 index 0000000000..4e02cbd818 --- /dev/null +++ b/resources/forum/livewire-tailwind/views/pages/post/edit.blade.php @@ -0,0 +1,75 @@ +
    + @include ('forum::components.loading-overlay') + @include ('forum::components.breadcrumbs') + +
    +
    +

    {{ trans('forum::posts.edit') }}

    +

    Re: {{ $post->thread->title }}

    + +
    + +
    + +
    +
    + + +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    + + + {{ trans_choice('forum::posts.confirm_delete', 1) }} + +
    +
    + +
    +
    + +
    +
    +
    +
    + +@script + +@endscript diff --git a/resources/forum/livewire-tailwind/views/pages/post/show.blade.php b/resources/forum/livewire-tailwind/views/pages/post/show.blade.php new file mode 100644 index 0000000000..71eace7eec --- /dev/null +++ b/resources/forum/livewire-tailwind/views/pages/post/show.blade.php @@ -0,0 +1,17 @@ +
    + @include ('forum::components.loading-overlay') + @include ('forum::components.breadcrumbs') + +
    +
    +

    {{ trans('forum::posts.view') }}

    +

    Re: {{ $post->thread->title }}

    + +
    + +
    + + +
    +
    +
    diff --git a/resources/forum/livewire-tailwind/views/pages/thread/create.blade.php b/resources/forum/livewire-tailwind/views/pages/thread/create.blade.php new file mode 100644 index 0000000000..03991d98b7 --- /dev/null +++ b/resources/forum/livewire-tailwind/views/pages/thread/create.blade.php @@ -0,0 +1,36 @@ +
    + @include ('forum::components.loading-overlay') + @include ('forum::components.breadcrumbs') + +
    +
    +

    {{ trans('forum::threads.new_thread') }} ({{ $category->title }})

    + +
    +
    + + + + +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    diff --git a/resources/forum/livewire-tailwind/views/pages/thread/recent.blade.php b/resources/forum/livewire-tailwind/views/pages/thread/recent.blade.php new file mode 100644 index 0000000000..a6f91509cd --- /dev/null +++ b/resources/forum/livewire-tailwind/views/pages/thread/recent.blade.php @@ -0,0 +1,22 @@ +
    + @include ('forum::components.loading-overlay') + @include ('forum::components.breadcrumbs') + +

    {{ trans('forum::threads.recent') }}

    + +
    + @foreach ($threads as $thread) + + @endforeach + + @if ($threads->count() == 0) +
    + {{ trans('forum::threads.none_found') }} +
    + @endif +
    +
    diff --git a/resources/forum/livewire-tailwind/views/pages/thread/reply.blade.php b/resources/forum/livewire-tailwind/views/pages/thread/reply.blade.php new file mode 100644 index 0000000000..09849db1a2 --- /dev/null +++ b/resources/forum/livewire-tailwind/views/pages/thread/reply.blade.php @@ -0,0 +1,36 @@ +
    + @include ('forum::components.loading-overlay') + @include ('forum::components.breadcrumbs') + +
    +
    +

    {{ trans('forum::general.reply') }}

    +

    Re: {{ $thread->title }}

    + + @if (isset($parent) && !$parent->trashed()) +

    {{ trans('forum::general.replying_to', ['item' => $parent->authorName]) }}

    + + @endif + +
    +
    + + +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    diff --git a/resources/forum/livewire-tailwind/views/pages/thread/show.blade.php b/resources/forum/livewire-tailwind/views/pages/thread/show.blade.php new file mode 100644 index 0000000000..53916f7a0c --- /dev/null +++ b/resources/forum/livewire-tailwind/views/pages/thread/show.blade.php @@ -0,0 +1,369 @@ +
    + @include ('forum::components.loading-overlay') + @include ('forum::components.breadcrumbs') + +

    {{ $thread->title }}

    + +
    +
    + @if ($thread->pinned) + + @endif + @if ($thread->locked) + + @endif + @if ($thread->trashed()) + + @endif +
    + + @if (count($selectablePostIds) > 0) +
    + +
    + @endif +
    + +
    +
    +
    + @if (Gate::allows('deleteThreads', $thread->category) && Gate::allows('delete', $thread)) + @if ($thread->trashed()) + + @else + + @endif + @endif + @if ($thread->trashed() && Gate::allows('restoreThreads', $thread->category) && Gate::allows('restore', $thread)) + + @endif + @if (!$thread->trashed()) + @can ('lockThreads', $thread->category) + @if ($thread->locked) + + @else + + @endif + @endcan + @can ('pinThreads', $thread->category) + @if ($thread->pinned) + + @else + + @endif + @endcan + @can ('rename', $thread) + + @endcan + @can ('moveThreadsFrom', $thread->category) + + @endcan + @endif +
    +
    + @if (!$thread->trashed()) + @can ('reply', $thread) +
    + + + +
    + @endcan + @endif +
    + +
    + @foreach ($posts as $post) + + @endforeach +
    + + {{ $posts->links('forum::components.pagination') }} + + @if (!$thread->trashed() && Gate::allows('reply', $thread)) +
    +

    {{ trans('forum::general.quick_reply') }}

    + +
    + + +
    + +
    +
    +
    + @endif + +
    +

    {{ trans('forum::general.with_selection') }}

    + + + + @can ('deletePosts', $thread) + + @endcan + @can ('restorePosts', $thread) + + @endcan + + + @if (config('forum.general.soft_deletes')) + + @endif + +
    + +
    +
    + + + + +
    + +
    + +
    + + + @include ('forum::components.category.options', ['categories' => $threadDestinationCategories, 'disable' => $thread->category->id]) + +
    + +
    +
    + +
    +
    + +
    +
    +
    + + + {{ trans('forum::general.generic_confirm') }} + +
    +
    + +
    +
    + +
    +
    +
    +
    + +@script + +@endscript diff --git a/resources/forum/livewire-tailwind/views/pages/thread/unread.blade.php b/resources/forum/livewire-tailwind/views/pages/thread/unread.blade.php new file mode 100644 index 0000000000..e80bc32a76 --- /dev/null +++ b/resources/forum/livewire-tailwind/views/pages/thread/unread.blade.php @@ -0,0 +1,66 @@ +
    + @include ('forum::components.loading-overlay') + @include ('forum::components.breadcrumbs') + +

    {{ trans('forum::threads.unread_updated') }}

    + +
    + @foreach ($threads as $thread) + + @endforeach + + @if ($threads->count() == 0) +
    + {{ trans('forum::threads.none_found') }} +
    + @else +
    + +
    + @endif +
    + + + {{ trans('forum::general.generic_confirm') }} + +
    +
    + +
    +
    + +
    +
    +
    +
    + +@script + +@endscript diff --git a/resources/js/app.js b/resources/js/app.js new file mode 100644 index 0000000000..e59d6a0adf --- /dev/null +++ b/resources/js/app.js @@ -0,0 +1 @@ +import './bootstrap'; diff --git a/resources/js/bootstrap.js b/resources/js/bootstrap.js new file mode 100644 index 0000000000..5f1390b015 --- /dev/null +++ b/resources/js/bootstrap.js @@ -0,0 +1,4 @@ +import axios from 'axios'; +window.axios = axios; + +window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; From 3988ecf9241838f66effad9079af6e18377fb7a9 Mon Sep 17 00:00:00 2001 From: DariusIII Date: Fri, 26 Apr 2024 22:12:08 +0200 Subject: [PATCH 02/47] Update config files --- composer.json | 20 +- composer.lock | 900 ++++++++++++++++++++------------------------------ package.json | 19 +- 3 files changed, 380 insertions(+), 559 deletions(-) diff --git a/composer.json b/composer.json index c40873e0aa..67280c30f5 100644 --- a/composer.json +++ b/composer.json @@ -46,7 +46,7 @@ "anhskohbo/no-captcha": "dev-master", "b3rs3rk/steamfront": "dev-master", "bacon/bacon-qr-code": "^3.0", - "bhuvidya/laravel-countries": "^10.0", + "bhuvidya/laravel-countries": "dev-master", "brick/math": "^0.11", "canihavesomecoffee/thetvdbapi": "^2.0", "dariusiii/php-itunes-api": "^1.0", @@ -62,13 +62,13 @@ "imdbphp/imdbphp": "^8.1", "intervention/image": "^3.3", "joshpinkney/tv-maze-php-api": "dev-master", - "jrean/laravel-user-verification": "^11.0", + "jrean/laravel-user-verification": "^12.0", "junaidnasir/larainvite": "^7.0", "kevinlebrun/colors.php": "^1.0", - "laravel/framework": "^10.45", + "laravel/framework": "^11.5", "laravel/horizon": "^5.23", "laravel/pulse": "^1.0@beta", - "laravel/sanctum": "^3.3", + "laravel/sanctum": "^4.0", "laravel/scout": "^10.0", "laravel/telescope": "^5.0", "laravel/tinker": "^2.8", @@ -92,7 +92,7 @@ "predis/predis": "^2.2", "propaganistas/laravel-disposable-email": "^2.2", "ramsey/uuid": "^4.7", - "riari/laravel-forum": "^5.6", + "riari/laravel-forum": "^6.0", "sentry/sentry-laravel": "^4.2", "smarty/smarty": "^4.3", "spatie/async": "^1.6", @@ -106,14 +106,14 @@ "stechstudio/laravel-zipstream": "^4.13", "symfony/http-client": "^7.0", "symfony/postmark-mailer": "^7.0", - "symfony/process": "^6.0", + "symfony/process": "^7.0", "vlucas/phpdotenv": "^5.6", "voku/simple_html_dom": "^4.8", "ytake/laravel-smarty": "^8.0" }, "require-dev": { "barryvdh/laravel-ide-helper": "^3.0", - "beyondcode/laravel-dump-server": "^1.9", + "beyondcode/laravel-dump-server": "^2.0", "captainhook/captainhook": "^5.1", "captainhook/plugin-composer": "^5.1", "driftingly/rector-laravel": "^0.29", @@ -124,7 +124,7 @@ "laravel/pint": "^1.6", "laravel/sail": "^1.21", "mockery/mockery": "^1.4.4", - "nunomaduro/collision": "^7.0", + "nunomaduro/collision": "^8.0", "php-coveralls/php-coveralls": "^2.0", "phpunit/phpunit": "^10.1", "rector/rector": "^0.18.13" @@ -146,6 +146,10 @@ { "type": "vcs", "url": "https://github.com/DariusIII/html" + }, + { + "type": "vcs", + "url": "https://github.com/DariusIII/laravel-user-verification" } ], "minimum-stability": "dev", diff --git a/composer.lock b/composer.lock index 0bbcf9cddd..600667a49f 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "c6f8193aa197a06890d90185df6215ab", + "content-hash": "c2de2786c7fe4baa536f6a0c177f329b", "packages": [ { "name": "aharen/omdbapi", @@ -219,23 +219,24 @@ }, { "name": "bhuvidya/laravel-countries", - "version": "v10.0", + "version": "dev-master", "source": { "type": "git", "url": "https://github.com/bhuvidya/laravel-countries.git", - "reference": "fd06f6173c0afa170bffd043bc0c76d073521e80" + "reference": "3b108146d3992c716e072f5b17e25c8e2e7bfef5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bhuvidya/laravel-countries/zipball/fd06f6173c0afa170bffd043bc0c76d073521e80", - "reference": "fd06f6173c0afa170bffd043bc0c76d073521e80", + "url": "https://api.github.com/repos/bhuvidya/laravel-countries/zipball/3b108146d3992c716e072f5b17e25c8e2e7bfef5", + "reference": "3b108146d3992c716e072f5b17e25c8e2e7bfef5", "shasum": "" }, "require": { - "illuminate/database": "^5.5|^6.0|^7.0|^8.0|^9.0|^10.0", - "illuminate/support": "^5.5|^6.0|^7.0|^8.0|^9.0|^10.0", + "illuminate/database": "^5.5|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", + "illuminate/support": "^5.5|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", "php": ">=7.0.0" }, + "default-branch": true, "type": "library", "extra": { "laravel": { @@ -272,7 +273,7 @@ "issues": "https://github.com/bhuvidya/laravel-countries/issues", "source": "https://github.com/bhuvidya/laravel-countries" }, - "time": "2023-03-11T02:43:43+00:00" + "time": "2024-04-26T00:19:45+00:00" }, { "name": "brick/math", @@ -640,26 +641,26 @@ }, { "name": "carbonphp/carbon-doctrine-types", - "version": "2.1.0", + "version": "3.2.0", "source": { "type": "git", "url": "https://github.com/CarbonPHP/carbon-doctrine-types.git", - "reference": "99f76ffa36cce3b70a4a6abce41dba15ca2e84cb" + "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/99f76ffa36cce3b70a4a6abce41dba15ca2e84cb", - "reference": "99f76ffa36cce3b70a4a6abce41dba15ca2e84cb", + "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/18ba5ddfec8976260ead6e866180bd5d2f71aa1d", + "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d", "shasum": "" }, "require": { - "php": "^7.4 || ^8.0" + "php": "^8.1" }, "conflict": { - "doctrine/dbal": "<3.7.0 || >=4.0.0" + "doctrine/dbal": "<4.0.0 || >=5.0.0" }, "require-dev": { - "doctrine/dbal": "^3.7.0", + "doctrine/dbal": "^4.0.0", "nesbot/carbon": "^2.71.0 || ^3.0.0", "phpunit/phpunit": "^10.3" }, @@ -689,7 +690,7 @@ ], "support": { "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues", - "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/2.1.0" + "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/3.2.0" }, "funding": [ { @@ -705,7 +706,7 @@ "type": "tidelift" } ], - "time": "2023-12-11T17:09:12+00:00" + "time": "2024-02-09T16:56:22+00:00" }, { "name": "clue/stream-filter", @@ -1251,142 +1252,44 @@ }, "time": "2020-02-06T21:58:50+00:00" }, - { - "name": "doctrine/cache", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/cache.git", - "reference": "1ca8f21980e770095a31456042471a57bc4c68fb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/1ca8f21980e770095a31456042471a57bc4c68fb", - "reference": "1ca8f21980e770095a31456042471a57bc4c68fb", - "shasum": "" - }, - "require": { - "php": "~7.1 || ^8.0" - }, - "conflict": { - "doctrine/common": ">2.2,<2.4" - }, - "require-dev": { - "cache/integration-tests": "dev-master", - "doctrine/coding-standard": "^9", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psr/cache": "^1.0 || ^2.0 || ^3.0", - "symfony/cache": "^4.4 || ^5.4 || ^6", - "symfony/var-exporter": "^4.4 || ^5.4 || ^6" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.", - "homepage": "https://www.doctrine-project.org/projects/cache.html", - "keywords": [ - "abstraction", - "apcu", - "cache", - "caching", - "couchdb", - "memcached", - "php", - "redis", - "xcache" - ], - "support": { - "issues": "https://github.com/doctrine/cache/issues", - "source": "https://github.com/doctrine/cache/tree/2.2.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache", - "type": "tidelift" - } - ], - "time": "2022-05-20T20:07:39+00:00" - }, { "name": "doctrine/dbal", - "version": "3.8.4", + "version": "4.0.2", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "b05e48a745f722801f55408d0dbd8003b403dbbd" + "reference": "61d79c6e379a39dc1fea6b4e50a23dfc3cd2076a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/b05e48a745f722801f55408d0dbd8003b403dbbd", - "reference": "b05e48a745f722801f55408d0dbd8003b403dbbd", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/61d79c6e379a39dc1fea6b4e50a23dfc3cd2076a", + "reference": "61d79c6e379a39dc1fea6b4e50a23dfc3cd2076a", "shasum": "" }, "require": { - "composer-runtime-api": "^2", - "doctrine/cache": "^1.11|^2.0", "doctrine/deprecations": "^0.5.3|^1", - "doctrine/event-manager": "^1|^2", - "php": "^7.4 || ^8.0", + "php": "^8.1", "psr/cache": "^1|^2|^3", "psr/log": "^1|^2|^3" }, "require-dev": { "doctrine/coding-standard": "12.0.0", "fig/log-test": "^1", - "jetbrains/phpstorm-stubs": "2023.1", + "jetbrains/phpstorm-stubs": "2023.2", "phpstan/phpstan": "1.10.58", + "phpstan/phpstan-phpunit": "1.3.15", "phpstan/phpstan-strict-rules": "^1.5", - "phpunit/phpunit": "9.6.16", + "phpunit/phpunit": "10.5.9", "psalm/plugin-phpunit": "0.18.4", "slevomat/coding-standard": "8.13.1", "squizlabs/php_codesniffer": "3.9.0", - "symfony/cache": "^5.4|^6.0|^7.0", - "symfony/console": "^4.4|^5.4|^6.0|^7.0", - "vimeo/psalm": "4.30.0" + "symfony/cache": "^6.3.8|^7.0", + "symfony/console": "^5.4|^6.3|^7.0", + "vimeo/psalm": "5.21.1" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." }, - "bin": [ - "bin/doctrine-dbal" - ], "type": "library", "autoload": { "psr-4": { @@ -1439,7 +1342,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.8.4" + "source": "https://github.com/doctrine/dbal/tree/4.0.2" }, "funding": [ { @@ -1455,7 +1358,7 @@ "type": "tidelift" } ], - "time": "2024-04-25T07:04:44+00:00" + "time": "2024-04-25T08:29:52+00:00" }, { "name": "doctrine/deprecations", @@ -1504,97 +1407,6 @@ }, "time": "2024-01-30T19:34:25+00:00" }, - { - "name": "doctrine/event-manager", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/event-manager.git", - "reference": "750671534e0241a7c50ea5b43f67e23eb5c96f32" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/event-manager/zipball/750671534e0241a7c50ea5b43f67e23eb5c96f32", - "reference": "750671534e0241a7c50ea5b43f67e23eb5c96f32", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "conflict": { - "doctrine/common": "<2.9" - }, - "require-dev": { - "doctrine/coding-standard": "^10", - "phpstan/phpstan": "^1.8.8", - "phpunit/phpunit": "^9.5", - "vimeo/psalm": "^4.28" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - }, - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com" - } - ], - "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.", - "homepage": "https://www.doctrine-project.org/projects/event-manager.html", - "keywords": [ - "event", - "event dispatcher", - "event manager", - "event system", - "events" - ], - "support": { - "issues": "https://github.com/doctrine/event-manager/issues", - "source": "https://github.com/doctrine/event-manager/tree/2.0.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fevent-manager", - "type": "tidelift" - } - ], - "time": "2022-10-12T20:59:15+00:00" - }, { "name": "doctrine/inflector", "version": "2.0.10", @@ -3278,29 +3090,28 @@ }, { "name": "jrean/laravel-user-verification", - "version": "v11.0.0", + "version": "v12.0.1", "source": { "type": "git", - "url": "https://github.com/jrean/laravel-user-verification.git", - "reference": "1e249ee09d3eefa33d1d7132d75822de5553a31f" + "url": "https://github.com/DariusIII/laravel-user-verification.git", + "reference": "20fe85f26d386c3bf0a697262d5d9acf5718b9e9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/jrean/laravel-user-verification/zipball/1e249ee09d3eefa33d1d7132d75822de5553a31f", - "reference": "1e249ee09d3eefa33d1d7132d75822de5553a31f", + "url": "https://api.github.com/repos/DariusIII/laravel-user-verification/zipball/20fe85f26d386c3bf0a697262d5d9acf5718b9e9", + "reference": "20fe85f26d386c3bf0a697262d5d9acf5718b9e9", "shasum": "" }, "require": { - "illuminate/support": "^6.0 || ^7.0 || ^8.0|^9.0|^10.0", + "illuminate/support": "^6.0 | ^7.0 | ^8.0| ^9.0| ^10.0| ^11.0", "php": ">=7.2.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^1.12|^3.5", - "fzaninotto/faker": "^1.9|^1.5", + "friendsofphp/php-cs-fixer": "^3.5", + "fzaninotto/faker": "^1.9", "mockery/mockery": "^1.3", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", - "satooshi/php-coveralls": "^2.0|^1.0", - "sllh/php-cs-fixer-styleci-bridge": "^2.1" + "php-coveralls/php-coveralls": "^2.7", + "phpunit/phpunit": "^7.0|^8.0|^9.0|^10.0|^11.0" }, "type": "library", "extra": { @@ -3318,7 +3129,6 @@ "Jrean\\UserVerification\\": "src/" } }, - "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], @@ -3338,10 +3148,9 @@ "user verification" ], "support": { - "issues": "https://github.com/jrean/laravel-user-verification/issues", - "source": "https://github.com/jrean/laravel-user-verification/tree/v11.0.0" + "source": "https://github.com/DariusIII/laravel-user-verification/tree/v12.0.1" }, - "time": "2023-02-16T05:22:21+00:00" + "time": "2024-04-25T20:43:47+00:00" }, { "name": "junaidnasir/larainvite", @@ -3587,16 +3396,16 @@ }, { "name": "laravel/framework", - "version": "v10.48.9", + "version": "v11.5.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "ad758500b47964d022addf119600a1b1b0230733" + "reference": "e3c24268f1404805e15099b9f035fe310cb30753" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/ad758500b47964d022addf119600a1b1b0230733", - "reference": "ad758500b47964d022addf119600a1b1b0230733", + "url": "https://api.github.com/repos/laravel/framework/zipball/e3c24268f1404805e15099b9f035fe310cb30753", + "reference": "e3c24268f1404805e15099b9f035fe310cb30753", "shasum": "" }, "require": { @@ -3612,40 +3421,39 @@ "ext-openssl": "*", "ext-session": "*", "ext-tokenizer": "*", - "fruitcake/php-cors": "^1.2", + "fruitcake/php-cors": "^1.3", + "guzzlehttp/guzzle": "^7.8", "guzzlehttp/uri-template": "^1.0", - "laravel/prompts": "^0.1.9", + "laravel/prompts": "^0.1.18", "laravel/serializable-closure": "^1.3", "league/commonmark": "^2.2.1", "league/flysystem": "^3.8.0", "monolog/monolog": "^3.0", - "nesbot/carbon": "^2.67", - "nunomaduro/termwind": "^1.13", - "php": "^8.1", + "nesbot/carbon": "^2.72.2|^3.0", + "nunomaduro/termwind": "^2.0", + "php": "^8.2", "psr/container": "^1.1.1|^2.0.1", "psr/log": "^1.0|^2.0|^3.0", "psr/simple-cache": "^1.0|^2.0|^3.0", "ramsey/uuid": "^4.7", - "symfony/console": "^6.2", - "symfony/error-handler": "^6.2", - "symfony/finder": "^6.2", - "symfony/http-foundation": "^6.4", - "symfony/http-kernel": "^6.2", - "symfony/mailer": "^6.2", - "symfony/mime": "^6.2", - "symfony/process": "^6.2", - "symfony/routing": "^6.2", - "symfony/uid": "^6.2", - "symfony/var-dumper": "^6.2", + "symfony/console": "^7.0", + "symfony/error-handler": "^7.0", + "symfony/finder": "^7.0", + "symfony/http-foundation": "^7.0", + "symfony/http-kernel": "^7.0", + "symfony/mailer": "^7.0", + "symfony/mime": "^7.0", + "symfony/polyfill-php83": "^1.28", + "symfony/process": "^7.0", + "symfony/routing": "^7.0", + "symfony/uid": "^7.0", + "symfony/var-dumper": "^7.0", "tijsverkoyen/css-to-inline-styles": "^2.2.5", "vlucas/phpdotenv": "^5.4.1", "voku/portable-ascii": "^2.0" }, "conflict": { - "carbonphp/carbon-doctrine-types": ">=3.0", - "doctrine/dbal": ">=4.0", "mockery/mockery": "1.6.8", - "phpunit/phpunit": ">=11.0.0", "tightenco/collect": "<5.5.33" }, "provide": { @@ -3685,36 +3493,35 @@ "illuminate/testing": "self.version", "illuminate/translation": "self.version", "illuminate/validation": "self.version", - "illuminate/view": "self.version" + "illuminate/view": "self.version", + "spatie/once": "*" }, "require-dev": { "ably/ably-php": "^1.0", "aws/aws-sdk-php": "^3.235.5", - "doctrine/dbal": "^3.5.1", "ext-gmp": "*", - "fakerphp/faker": "^1.21", - "guzzlehttp/guzzle": "^7.5", + "fakerphp/faker": "^1.23", "league/flysystem-aws-s3-v3": "^3.0", "league/flysystem-ftp": "^3.0", "league/flysystem-path-prefixing": "^3.3", "league/flysystem-read-only": "^3.3", "league/flysystem-sftp-v3": "^3.0", - "mockery/mockery": "^1.5.1", + "mockery/mockery": "^1.6", "nyholm/psr7": "^1.2", - "orchestra/testbench-core": "^8.23.4", - "pda/pheanstalk": "^4.0", + "orchestra/testbench-core": "^9.0.6", + "pda/pheanstalk": "^5.0", "phpstan/phpstan": "^1.4.7", - "phpunit/phpunit": "^10.0.7", + "phpunit/phpunit": "^10.5|^11.0", "predis/predis": "^2.0.2", - "symfony/cache": "^6.2", - "symfony/http-client": "^6.2.4", - "symfony/psr-http-message-bridge": "^2.0" + "resend/resend-php": "^0.10.0", + "symfony/cache": "^7.0", + "symfony/http-client": "^7.0", + "symfony/psr-http-message-bridge": "^7.0" }, "suggest": { "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.235.5).", - "brianium/paratest": "Required to run tests in parallel (^6.0).", - "doctrine/dbal": "Required to rename columns and drop SQLite columns (^3.5.1).", + "brianium/paratest": "Required to run tests in parallel (^7.0|^8.0).", "ext-apcu": "Required to use the APC cache driver.", "ext-fileinfo": "Required to use the Filesystem class.", "ext-ftp": "Required to use the Flysystem FTP driver.", @@ -3726,31 +3533,31 @@ "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).", "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", "filp/whoops": "Required for friendly error pages in development (^2.14.3).", - "guzzlehttp/guzzle": "Required to use the HTTP Client and the ping methods on schedules (^7.5).", "laravel/tinker": "Required to use the tinker console command (^2.0).", "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.0).", "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.0).", "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.3).", "league/flysystem-read-only": "Required to use read-only disks (^3.3)", "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.0).", - "mockery/mockery": "Required to use mocking (^1.5.1).", + "mockery/mockery": "Required to use mocking (^1.6).", "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", - "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", - "phpunit/phpunit": "Required to use assertions and run tests (^9.5.8|^10.0.7).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (^5.0).", + "phpunit/phpunit": "Required to use assertions and run tests (^10.5|^11.0).", "predis/predis": "Required to use the predis connector (^2.0.2).", "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).", - "symfony/cache": "Required to PSR-6 cache bridge (^6.2).", - "symfony/filesystem": "Required to enable support for relative symbolic links (^6.2).", - "symfony/http-client": "Required to enable support for the Symfony API mail transports (^6.2).", - "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^6.2).", - "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^6.2).", - "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0)." + "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0).", + "symfony/cache": "Required to PSR-6 cache bridge (^7.0).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^7.0).", + "symfony/http-client": "Required to enable support for the Symfony API mail transports (^7.0).", + "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^7.0).", + "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^7.0).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^7.0)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "10.x-dev" + "dev-master": "11.x-dev" } }, "autoload": { @@ -3790,7 +3597,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2024-04-23T15:01:33+00:00" + "time": "2024-04-23T15:11:31+00:00" }, { "name": "laravel/horizon", @@ -4017,37 +3824,35 @@ }, { "name": "laravel/sanctum", - "version": "v3.3.3", + "version": "v4.0.2", "source": { "type": "git", "url": "https://github.com/laravel/sanctum.git", - "reference": "8c104366459739f3ada0e994bcd3e6fd681ce3d5" + "reference": "9cfc0ce80cabad5334efff73ec856339e8ec1ac1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sanctum/zipball/8c104366459739f3ada0e994bcd3e6fd681ce3d5", - "reference": "8c104366459739f3ada0e994bcd3e6fd681ce3d5", + "url": "https://api.github.com/repos/laravel/sanctum/zipball/9cfc0ce80cabad5334efff73ec856339e8ec1ac1", + "reference": "9cfc0ce80cabad5334efff73ec856339e8ec1ac1", "shasum": "" }, "require": { "ext-json": "*", - "illuminate/console": "^9.21|^10.0", - "illuminate/contracts": "^9.21|^10.0", - "illuminate/database": "^9.21|^10.0", - "illuminate/support": "^9.21|^10.0", - "php": "^8.0.2" + "illuminate/console": "^11.0", + "illuminate/contracts": "^11.0", + "illuminate/database": "^11.0", + "illuminate/support": "^11.0", + "php": "^8.2", + "symfony/console": "^7.0" }, "require-dev": { - "mockery/mockery": "^1.0", - "orchestra/testbench": "^7.28.2|^8.8.3", + "mockery/mockery": "^1.6", + "orchestra/testbench": "^9.0", "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^9.6" + "phpunit/phpunit": "^10.5" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - }, "laravel": { "providers": [ "Laravel\\Sanctum\\SanctumServiceProvider" @@ -4079,7 +3884,7 @@ "issues": "https://github.com/laravel/sanctum/issues", "source": "https://github.com/laravel/sanctum" }, - "time": "2023-12-19T18:44:48+00:00" + "time": "2024-04-10T19:39:58+00:00" }, { "name": "laravel/scout", @@ -6167,33 +5972,32 @@ }, { "name": "nunomaduro/termwind", - "version": "v1.15.1", + "version": "v2.0.1", "source": { "type": "git", "url": "https://github.com/nunomaduro/termwind.git", - "reference": "8ab0b32c8caa4a2e09700ea32925441385e4a5dc" + "reference": "58c4c58cf23df7f498daeb97092e34f5259feb6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/8ab0b32c8caa4a2e09700ea32925441385e4a5dc", - "reference": "8ab0b32c8caa4a2e09700ea32925441385e4a5dc", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/58c4c58cf23df7f498daeb97092e34f5259feb6a", + "reference": "58c4c58cf23df7f498daeb97092e34f5259feb6a", "shasum": "" }, "require": { "ext-mbstring": "*", - "php": "^8.0", - "symfony/console": "^5.3.0|^6.0.0" + "php": "^8.2", + "symfony/console": "^7.0.4" }, "require-dev": { - "ergebnis/phpstan-rules": "^1.0.", - "illuminate/console": "^8.0|^9.0", - "illuminate/support": "^8.0|^9.0", - "laravel/pint": "^1.0.0", - "pestphp/pest": "^1.21.0", - "pestphp/pest-plugin-mock": "^1.0", - "phpstan/phpstan": "^1.4.6", - "phpstan/phpstan-strict-rules": "^1.1.0", - "symfony/var-dumper": "^5.2.7|^6.0.0", + "ergebnis/phpstan-rules": "^2.2.0", + "illuminate/console": "^11.0.0", + "laravel/pint": "^1.14.0", + "mockery/mockery": "^1.6.7", + "pestphp/pest": "^2.34.1", + "phpstan/phpstan": "^1.10.59", + "phpstan/phpstan-strict-rules": "^1.5.2", + "symfony/var-dumper": "^7.0.4", "thecodingmachine/phpstan-strict-rules": "^1.0.0" }, "type": "library", @@ -6202,6 +6006,9 @@ "providers": [ "Termwind\\Laravel\\TermwindServiceProvider" ] + }, + "branch-alias": { + "dev-2.x": "2.x-dev" } }, "autoload": { @@ -6233,7 +6040,7 @@ ], "support": { "issues": "https://github.com/nunomaduro/termwind/issues", - "source": "https://github.com/nunomaduro/termwind/tree/v1.15.1" + "source": "https://github.com/nunomaduro/termwind/tree/v2.0.1" }, "funding": [ { @@ -6249,7 +6056,7 @@ "type": "github" } ], - "time": "2023-02-08T01:06:31+00:00" + "time": "2024-03-06T16:17:14+00:00" }, { "name": "nyholm/psr7", @@ -8813,26 +8620,26 @@ }, { "name": "riari/laravel-forum", - "version": "5.6.2", + "version": "6.0.7", "source": { "type": "git", "url": "https://github.com/Team-Tea-Time/laravel-forum.git", - "reference": "cd77b22d037487f7a13bba7f1d26adc2dc8cf9a0" + "reference": "d0be151fa18ff15be8d3298ced08c023d11a4670" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Team-Tea-Time/laravel-forum/zipball/cd77b22d037487f7a13bba7f1d26adc2dc8cf9a0", - "reference": "cd77b22d037487f7a13bba7f1d26adc2dc8cf9a0", + "url": "https://api.github.com/repos/Team-Tea-Time/laravel-forum/zipball/d0be151fa18ff15be8d3298ced08c023d11a4670", + "reference": "d0be151fa18ff15be8d3298ced08c023d11a4670", "shasum": "" }, "require": { - "doctrine/dbal": "^3.5", + "doctrine/dbal": "^4.0", "kalnoy/nestedset": "^6.0", - "laravel/framework": "^10.0", - "php": "^8.1" + "laravel/framework": "^11.0", + "php": "^8.2" }, "require-dev": { - "orchestra/testbench": "^8.0" + "orchestra/testbench": "^9.0" }, "type": "library", "extra": { @@ -8863,20 +8670,18 @@ "email": "neehi@teamteatime.net" } ], - "description": "A Laravel 6/7/8/9 package providing a solid foundation for building discussion forums", + "description": "A Laravel package providing a solid foundation for building discussion forums", "keywords": [ "discuss", "forum", "laravel", - "laravel-6", - "laravel-7", - "laravel-8" + "laravel-11" ], "support": { "issues": "https://github.com/Team-Tea-Time/laravel-forum/issues", - "source": "https://github.com/Team-Tea-Time/laravel-forum/tree/5.6.2" + "source": "https://github.com/Team-Tea-Time/laravel-forum/tree/6.0.7" }, - "time": "2024-01-10T23:52:22+00:00" + "time": "2024-04-17T20:18:18+00:00" }, { "name": "seld/cli-prompt", @@ -10195,30 +10000,31 @@ }, { "name": "spatie/laravel-signal-aware-command", - "version": "1.3.0", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/spatie/laravel-signal-aware-command.git", - "reference": "46cda09a85aef3fd47fb73ddc7081f963e255571" + "reference": "49a5e671c3a3fd992187a777d01385fc6a84759d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-signal-aware-command/zipball/46cda09a85aef3fd47fb73ddc7081f963e255571", - "reference": "46cda09a85aef3fd47fb73ddc7081f963e255571", + "url": "https://api.github.com/repos/spatie/laravel-signal-aware-command/zipball/49a5e671c3a3fd992187a777d01385fc6a84759d", + "reference": "49a5e671c3a3fd992187a777d01385fc6a84759d", "shasum": "" }, "require": { - "illuminate/contracts": "^8.35|^9.0|^10.0", - "php": "^8.0", - "spatie/laravel-package-tools": "^1.4.3" + "illuminate/contracts": "^11.0", + "php": "^8.2", + "spatie/laravel-package-tools": "^1.4.3", + "symfony/console": "^7.0" }, "require-dev": { - "brianium/paratest": "^6.2", + "brianium/paratest": "^6.2|^7.0", "ext-pcntl": "*", - "nunomaduro/collision": "^5.3|^6.0", - "orchestra/testbench": "^6.16|^7.0|^8.0", - "pestphp/pest-plugin-laravel": "^1.3", - "phpunit/phpunit": "^9.5", + "nunomaduro/collision": "^5.3|^6.0|^7.0|^8.0", + "orchestra/testbench": "^9.0", + "pestphp/pest-plugin-laravel": "^1.3|^2.0", + "phpunit/phpunit": "^9.5|^10|^11", "spatie/laravel-ray": "^1.17" }, "type": "library", @@ -10257,7 +10063,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-signal-aware-command/issues", - "source": "https://github.com/spatie/laravel-signal-aware-command/tree/1.3.0" + "source": "https://github.com/spatie/laravel-signal-aware-command/tree/2.0.0" }, "funding": [ { @@ -10265,7 +10071,7 @@ "type": "github" } ], - "time": "2023-01-14T21:10:59+00:00" + "time": "2024-02-05T13:37:25+00:00" }, { "name": "spatie/temporary-directory", @@ -10616,47 +10422,46 @@ }, { "name": "symfony/console", - "version": "v6.4.6", + "version": "v7.0.6", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "a2708a5da5c87d1d0d52937bdeac625df659e11f" + "reference": "fde915cd8e7eb99b3d531d3d5c09531429c3f9e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/a2708a5da5c87d1d0d52937bdeac625df659e11f", - "reference": "a2708a5da5c87d1d0d52937bdeac625df659e11f", + "url": "https://api.github.com/repos/symfony/console/zipball/fde915cd8e7eb99b3d531d3d5c09531429c3f9e5", + "reference": "fde915cd8e7eb99b3d531d3d5c09531429c3f9e5", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony/polyfill-mbstring": "~1.0", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^5.4|^6.0|^7.0" + "symfony/string": "^6.4|^7.0" }, "conflict": { - "symfony/dependency-injection": "<5.4", - "symfony/dotenv": "<5.4", - "symfony/event-dispatcher": "<5.4", - "symfony/lock": "<5.4", - "symfony/process": "<5.4" + "symfony/dependency-injection": "<6.4", + "symfony/dotenv": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/lock": "<6.4", + "symfony/process": "<6.4" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", "symfony/http-foundation": "^6.4|^7.0", "symfony/http-kernel": "^6.4|^7.0", - "symfony/lock": "^5.4|^6.0|^7.0", - "symfony/messenger": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0", - "symfony/stopwatch": "^5.4|^6.0|^7.0", - "symfony/var-dumper": "^5.4|^6.0|^7.0" + "symfony/lock": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/var-dumper": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -10690,7 +10495,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.4.6" + "source": "https://github.com/symfony/console/tree/v7.0.6" }, "funding": [ { @@ -10706,7 +10511,7 @@ "type": "tidelift" } ], - "time": "2024-03-29T19:07:53+00:00" + "time": "2024-04-01T11:04:53+00:00" }, { "name": "symfony/css-selector", @@ -10842,22 +10647,22 @@ }, { "name": "symfony/error-handler", - "version": "v6.4.6", + "version": "v7.0.6", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "64db1c1802e3a4557e37ba33031ac39f452ac5d4" + "reference": "46a4cc138f799886d4bd70477c55c699d3e9dfc8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/64db1c1802e3a4557e37ba33031ac39f452ac5d4", - "reference": "64db1c1802e3a4557e37ba33031ac39f452ac5d4", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/46a4cc138f799886d4bd70477c55c699d3e9dfc8", + "reference": "46a4cc138f799886d4bd70477c55c699d3e9dfc8", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^5.4|^6.0|^7.0" + "symfony/var-dumper": "^6.4|^7.0" }, "conflict": { "symfony/deprecation-contracts": "<2.5", @@ -10866,7 +10671,7 @@ "require-dev": { "symfony/deprecation-contracts": "^2.5|^3", "symfony/http-kernel": "^6.4|^7.0", - "symfony/serializer": "^5.4|^6.0|^7.0" + "symfony/serializer": "^6.4|^7.0" }, "bin": [ "Resources/bin/patch-type-declarations" @@ -10897,7 +10702,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v6.4.6" + "source": "https://github.com/symfony/error-handler/tree/v7.0.6" }, "funding": [ { @@ -10913,7 +10718,7 @@ "type": "tidelift" } ], - "time": "2024-03-19T11:56:30+00:00" + "time": "2024-03-19T11:57:22+00:00" }, { "name": "symfony/event-dispatcher", @@ -11136,23 +10941,23 @@ }, { "name": "symfony/finder", - "version": "v6.4.0", + "version": "v7.0.0", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "11d736e97f116ac375a81f96e662911a34cd50ce" + "reference": "6e5688d69f7cfc4ed4a511e96007e06c2d34ce56" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/11d736e97f116ac375a81f96e662911a34cd50ce", - "reference": "11d736e97f116ac375a81f96e662911a34cd50ce", + "url": "https://api.github.com/repos/symfony/finder/zipball/6e5688d69f7cfc4ed4a511e96007e06c2d34ce56", + "reference": "6e5688d69f7cfc4ed4a511e96007e06c2d34ce56", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "symfony/filesystem": "^6.0|^7.0" + "symfony/filesystem": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -11180,7 +10985,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.4.0" + "source": "https://github.com/symfony/finder/tree/v7.0.0" }, "funding": [ { @@ -11196,7 +11001,7 @@ "type": "tidelift" } ], - "time": "2023-10-31T17:30:12+00:00" + "time": "2023-10-31T17:59:56+00:00" }, { "name": "symfony/http-client", @@ -11370,36 +11175,36 @@ }, { "name": "symfony/http-foundation", - "version": "v6.4.4", + "version": "v7.0.6", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "ebc713bc6e6f4b53f46539fc158be85dfcd77304" + "reference": "8789625dcf36e5fbf753014678a1e090f1bc759c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ebc713bc6e6f4b53f46539fc158be85dfcd77304", - "reference": "ebc713bc6e6f4b53f46539fc158be85dfcd77304", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/8789625dcf36e5fbf753014678a1e090f1bc759c", + "reference": "8789625dcf36e5fbf753014678a1e090f1bc759c", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony/polyfill-mbstring": "~1.1", "symfony/polyfill-php83": "^1.27" }, "conflict": { - "symfony/cache": "<6.3" + "doctrine/dbal": "<3.6", + "symfony/cache": "<6.4" }, "require-dev": { - "doctrine/dbal": "^2.13.1|^3|^4", + "doctrine/dbal": "^3.6|^4", "predis/predis": "^1.1|^2.0", - "symfony/cache": "^6.3|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4|^7.0", - "symfony/mime": "^5.4|^6.0|^7.0", - "symfony/rate-limiter": "^5.4|^6.0|^7.0" + "symfony/cache": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/rate-limiter": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -11427,7 +11232,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.4.4" + "source": "https://github.com/symfony/http-foundation/tree/v7.0.6" }, "funding": [ { @@ -11443,76 +11248,75 @@ "type": "tidelift" } ], - "time": "2024-02-08T15:01:18+00:00" + "time": "2024-03-19T11:46:48+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.4.6", + "version": "v7.0.6", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "060038863743fd0cd982be06acecccf246d35653" + "reference": "34c872391046d59af804af62d4573b829cfe4824" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/060038863743fd0cd982be06acecccf246d35653", - "reference": "060038863743fd0cd982be06acecccf246d35653", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/34c872391046d59af804af62d4573b829cfe4824", + "reference": "34c872391046d59af804af62d4573b829cfe4824", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "psr/log": "^1|^2|^3", - "symfony/deprecation-contracts": "^2.5|^3", "symfony/error-handler": "^6.4|^7.0", - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", "symfony/http-foundation": "^6.4|^7.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/browser-kit": "<5.4", - "symfony/cache": "<5.4", - "symfony/config": "<6.1", - "symfony/console": "<5.4", + "symfony/browser-kit": "<6.4", + "symfony/cache": "<6.4", + "symfony/config": "<6.4", + "symfony/console": "<6.4", "symfony/dependency-injection": "<6.4", - "symfony/doctrine-bridge": "<5.4", - "symfony/form": "<5.4", - "symfony/http-client": "<5.4", + "symfony/doctrine-bridge": "<6.4", + "symfony/form": "<6.4", + "symfony/http-client": "<6.4", "symfony/http-client-contracts": "<2.5", - "symfony/mailer": "<5.4", - "symfony/messenger": "<5.4", - "symfony/translation": "<5.4", + "symfony/mailer": "<6.4", + "symfony/messenger": "<6.4", + "symfony/translation": "<6.4", "symfony/translation-contracts": "<2.5", - "symfony/twig-bridge": "<5.4", + "symfony/twig-bridge": "<6.4", "symfony/validator": "<6.4", - "symfony/var-dumper": "<6.3", - "twig/twig": "<2.13" + "symfony/var-dumper": "<6.4", + "twig/twig": "<3.0.4" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/cache": "^1.0|^2.0|^3.0", - "symfony/browser-kit": "^5.4|^6.0|^7.0", - "symfony/clock": "^6.2|^7.0", - "symfony/config": "^6.1|^7.0", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/css-selector": "^5.4|^6.0|^7.0", + "symfony/browser-kit": "^6.4|^7.0", + "symfony/clock": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/css-selector": "^6.4|^7.0", "symfony/dependency-injection": "^6.4|^7.0", - "symfony/dom-crawler": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/dom-crawler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", "symfony/http-client-contracts": "^2.5|^3", - "symfony/process": "^5.4|^6.0|^7.0", - "symfony/property-access": "^5.4.5|^6.0.5|^7.0", - "symfony/routing": "^5.4|^6.0|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/routing": "^6.4|^7.0", "symfony/serializer": "^6.4.4|^7.0.4", - "symfony/stopwatch": "^5.4|^6.0|^7.0", - "symfony/translation": "^5.4|^6.0|^7.0", + "symfony/stopwatch": "^6.4|^7.0", + "symfony/translation": "^6.4|^7.0", "symfony/translation-contracts": "^2.5|^3", - "symfony/uid": "^5.4|^6.0|^7.0", + "symfony/uid": "^6.4|^7.0", "symfony/validator": "^6.4|^7.0", - "symfony/var-exporter": "^6.2|^7.0", - "twig/twig": "^2.13|^3.0.4" + "symfony/var-exporter": "^6.4|^7.0", + "twig/twig": "^3.0.4" }, "type": "library", "autoload": { @@ -11540,7 +11344,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v6.4.6" + "source": "https://github.com/symfony/http-kernel/tree/v7.0.6" }, "funding": [ { @@ -11556,43 +11360,43 @@ "type": "tidelift" } ], - "time": "2024-04-03T06:09:15+00:00" + "time": "2024-04-03T06:12:25+00:00" }, { "name": "symfony/mailer", - "version": "v6.4.6", + "version": "v7.0.6", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "677f34a6f4b4559e08acf73ae0aec460479e5859" + "reference": "eb0c3187c7ddfde12d8aa0e1fa5fb29e730a41e0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/677f34a6f4b4559e08acf73ae0aec460479e5859", - "reference": "677f34a6f4b4559e08acf73ae0aec460479e5859", + "url": "https://api.github.com/repos/symfony/mailer/zipball/eb0c3187c7ddfde12d8aa0e1fa5fb29e730a41e0", + "reference": "eb0c3187c7ddfde12d8aa0e1fa5fb29e730a41e0", "shasum": "" }, "require": { "egulias/email-validator": "^2.1.10|^3|^4", - "php": ">=8.1", + "php": ">=8.2", "psr/event-dispatcher": "^1", "psr/log": "^1|^2|^3", - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", - "symfony/mime": "^6.2|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", "symfony/service-contracts": "^2.5|^3" }, "conflict": { "symfony/http-client-contracts": "<2.5", - "symfony/http-kernel": "<5.4", - "symfony/messenger": "<6.2", - "symfony/mime": "<6.2", - "symfony/twig-bridge": "<6.2.1" + "symfony/http-kernel": "<6.4", + "symfony/messenger": "<6.4", + "symfony/mime": "<6.4", + "symfony/twig-bridge": "<6.4" }, "require-dev": { - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/http-client": "^5.4|^6.0|^7.0", - "symfony/messenger": "^6.2|^7.0", - "symfony/twig-bridge": "^6.2|^7.0" + "symfony/console": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/messenger": "^6.4|^7.0", + "symfony/twig-bridge": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -11620,7 +11424,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v6.4.6" + "source": "https://github.com/symfony/mailer/tree/v7.0.6" }, "funding": [ { @@ -11636,25 +11440,24 @@ "type": "tidelift" } ], - "time": "2024-03-27T21:14:17+00:00" + "time": "2024-03-28T09:20:36+00:00" }, { "name": "symfony/mime", - "version": "v6.4.6", + "version": "v7.0.6", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "14762b86918823cb42e3558cdcca62e58b5227fe" + "reference": "99362408c9abdf8c7cadcf0529b6fc8b16f5ace2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/14762b86918823cb42e3558cdcca62e58b5227fe", - "reference": "14762b86918823cb42e3558cdcca62e58b5227fe", + "url": "https://api.github.com/repos/symfony/mime/zipball/99362408c9abdf8c7cadcf0529b6fc8b16f5ace2", + "reference": "99362408c9abdf8c7cadcf0529b6fc8b16f5ace2", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony/polyfill-intl-idn": "^1.10", "symfony/polyfill-mbstring": "^1.0" }, @@ -11662,18 +11465,18 @@ "egulias/email-validator": "~3.0.0", "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", - "symfony/mailer": "<5.4", - "symfony/serializer": "<6.3.2" + "symfony/mailer": "<6.4", + "symfony/serializer": "<6.4" }, "require-dev": { "egulias/email-validator": "^2.1.10|^3.1|^4", "league/html-to-markdown": "^5.0", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.4|^7.0", - "symfony/property-access": "^5.4|^6.0|^7.0", - "symfony/property-info": "^5.4|^6.0|^7.0", - "symfony/serializer": "^6.3.2|^7.0" + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -11705,7 +11508,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.4.6" + "source": "https://github.com/symfony/mime/tree/v7.0.6" }, "funding": [ { @@ -11721,7 +11524,7 @@ "type": "tidelift" } ], - "time": "2024-03-21T19:36:20+00:00" + "time": "2024-03-21T19:37:36+00:00" }, { "name": "symfony/options-resolver", @@ -12573,20 +12376,20 @@ }, { "name": "symfony/process", - "version": "v6.4.4", + "version": "v7.0.4", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "710e27879e9be3395de2b98da3f52a946039f297" + "reference": "0e7727191c3b71ebec6d529fa0e50a01ca5679e9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/710e27879e9be3395de2b98da3f52a946039f297", - "reference": "710e27879e9be3395de2b98da3f52a946039f297", + "url": "https://api.github.com/repos/symfony/process/zipball/0e7727191c3b71ebec6d529fa0e50a01ca5679e9", + "reference": "0e7727191c3b71ebec6d529fa0e50a01ca5679e9", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "type": "library", "autoload": { @@ -12614,7 +12417,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.4.4" + "source": "https://github.com/symfony/process/tree/v7.0.4" }, "funding": [ { @@ -12630,7 +12433,7 @@ "type": "tidelift" } ], - "time": "2024-02-20T12:31:00+00:00" + "time": "2024-02-22T20:27:20+00:00" }, { "name": "symfony/property-access", @@ -12877,36 +12680,34 @@ }, { "name": "symfony/routing", - "version": "v6.4.6", + "version": "v7.0.6", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "f2591fd1f8c6e3734656b5d6b3829e8bf81f507c" + "reference": "cded64e5bbf9f31786f1055fcc76718fdd77519c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/f2591fd1f8c6e3734656b5d6b3829e8bf81f507c", - "reference": "f2591fd1f8c6e3734656b5d6b3829e8bf81f507c", + "url": "https://api.github.com/repos/symfony/routing/zipball/cded64e5bbf9f31786f1055fcc76718fdd77519c", + "reference": "cded64e5bbf9f31786f1055fcc76718fdd77519c", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/deprecation-contracts": "^2.5|^3" }, "conflict": { - "doctrine/annotations": "<1.12", - "symfony/config": "<6.2", - "symfony/dependency-injection": "<5.4", - "symfony/yaml": "<5.4" + "symfony/config": "<6.4", + "symfony/dependency-injection": "<6.4", + "symfony/yaml": "<6.4" }, "require-dev": { - "doctrine/annotations": "^1.12|^2", "psr/log": "^1|^2|^3", - "symfony/config": "^6.2|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^5.4|^6.0|^7.0", - "symfony/yaml": "^5.4|^6.0|^7.0" + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/yaml": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -12940,7 +12741,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.4.6" + "source": "https://github.com/symfony/routing/tree/v7.0.6" }, "funding": [ { @@ -12956,7 +12757,7 @@ "type": "tidelift" } ], - "time": "2024-03-28T13:28:49+00:00" + "time": "2024-03-28T21:02:11+00:00" }, { "name": "symfony/serializer", @@ -13399,24 +13200,24 @@ }, { "name": "symfony/uid", - "version": "v6.4.3", + "version": "v7.0.3", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "1d31267211cc3a2fff32bcfc7c1818dac41b6fc0" + "reference": "87cedaf3fabd7b733859d4d77aa4ca598259054b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/1d31267211cc3a2fff32bcfc7c1818dac41b6fc0", - "reference": "1d31267211cc3a2fff32bcfc7c1818dac41b6fc0", + "url": "https://api.github.com/repos/symfony/uid/zipball/87cedaf3fabd7b733859d4d77aa4ca598259054b", + "reference": "87cedaf3fabd7b733859d4d77aa4ca598259054b", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-uuid": "^1.15" }, "require-dev": { - "symfony/console": "^5.4|^6.0|^7.0" + "symfony/console": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -13453,7 +13254,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v6.4.3" + "source": "https://github.com/symfony/uid/tree/v7.0.3" }, "funding": [ { @@ -13469,38 +13270,36 @@ "type": "tidelift" } ], - "time": "2024-01-23T14:51:35+00:00" + "time": "2024-01-23T15:02:46+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.4.6", + "version": "v7.0.6", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "95bd2706a97fb875185b51ecaa6112ec184233d4" + "reference": "66d13dc207d5dab6b4f4c2b5460efe1bea29dbfb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/95bd2706a97fb875185b51ecaa6112ec184233d4", - "reference": "95bd2706a97fb875185b51ecaa6112ec184233d4", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/66d13dc207d5dab6b4f4c2b5460efe1bea29dbfb", + "reference": "66d13dc207d5dab6b4f4c2b5460efe1bea29dbfb", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "symfony/console": "<5.4" + "symfony/console": "<6.4" }, "require-dev": { "ext-iconv": "*", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/error-handler": "^6.3|^7.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0", - "symfony/uid": "^5.4|^6.0|^7.0", - "twig/twig": "^2.13|^3.0.4" + "symfony/console": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/uid": "^6.4|^7.0", + "twig/twig": "^3.0.4" }, "bin": [ "Resources/bin/var-dump-server" @@ -13538,7 +13337,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.4.6" + "source": "https://github.com/symfony/var-dumper/tree/v7.0.6" }, "funding": [ { @@ -13554,7 +13353,7 @@ "type": "tidelift" } ], - "time": "2024-03-19T11:56:30+00:00" + "time": "2024-03-19T11:57:22+00:00" }, { "name": "symfony/var-exporter", @@ -14218,28 +14017,31 @@ }, { "name": "beyondcode/laravel-dump-server", - "version": "1.9.0", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/beyondcode/laravel-dump-server.git", - "reference": "1f2452617afc64e47b3cf49978beb7beeef084df" + "reference": "e0dff1b2c7caf49d07ca5cb331fc7c5f1e52c715" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/beyondcode/laravel-dump-server/zipball/1f2452617afc64e47b3cf49978beb7beeef084df", - "reference": "1f2452617afc64e47b3cf49978beb7beeef084df", + "url": "https://api.github.com/repos/beyondcode/laravel-dump-server/zipball/e0dff1b2c7caf49d07ca5cb331fc7c5f1e52c715", + "reference": "e0dff1b2c7caf49d07ca5cb331fc7c5f1e52c715", "shasum": "" }, "require": { - "illuminate/console": "5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0|^9.0|^10.0", - "illuminate/http": "5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0|^9.0|^10.0", - "illuminate/support": "5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0|^9.0|^10.0", + "illuminate/console": "5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", + "illuminate/http": "5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", + "illuminate/support": "5.6.*|5.7.*|5.8.*|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0", "php": ">=7.2.5", - "symfony/var-dumper": "^5.0|^6.0" + "symfony/var-dumper": "^5.0|^6.0|^7.0" + }, + "conflict": { + "spatie/laravel-ray": "*" }, "require-dev": { "larapack/dd": "^1.0", - "phpunit/phpunit": "^7.0|^9.3" + "phpunit/phpunit": "^7.0|^9.3|^10.5" }, "type": "library", "extra": { @@ -14277,9 +14079,9 @@ ], "support": { "issues": "https://github.com/beyondcode/laravel-dump-server/issues", - "source": "https://github.com/beyondcode/laravel-dump-server/tree/1.9.0" + "source": "https://github.com/beyondcode/laravel-dump-server/tree/2.0.0" }, - "time": "2023-02-15T10:29:26+00:00" + "time": "2024-04-23T12:02:38+00:00" }, { "name": "captainhook/captainhook", @@ -15996,40 +15798,38 @@ }, { "name": "nunomaduro/collision", - "version": "v7.10.0", + "version": "v8.1.1", "source": { "type": "git", "url": "https://github.com/nunomaduro/collision.git", - "reference": "49ec67fa7b002712da8526678abd651c09f375b2" + "reference": "13e5d538b95a744d85f447a321ce10adb28e9af9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/collision/zipball/49ec67fa7b002712da8526678abd651c09f375b2", - "reference": "49ec67fa7b002712da8526678abd651c09f375b2", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/13e5d538b95a744d85f447a321ce10adb28e9af9", + "reference": "13e5d538b95a744d85f447a321ce10adb28e9af9", "shasum": "" }, "require": { - "filp/whoops": "^2.15.3", - "nunomaduro/termwind": "^1.15.1", - "php": "^8.1.0", - "symfony/console": "^6.3.4" + "filp/whoops": "^2.15.4", + "nunomaduro/termwind": "^2.0.1", + "php": "^8.2.0", + "symfony/console": "^7.0.4" }, "conflict": { - "laravel/framework": ">=11.0.0" + "laravel/framework": "<11.0.0 || >=12.0.0", + "phpunit/phpunit": "<10.5.1 || >=12.0.0" }, "require-dev": { - "brianium/paratest": "^7.3.0", - "laravel/framework": "^10.28.0", - "laravel/pint": "^1.13.3", - "laravel/sail": "^1.25.0", - "laravel/sanctum": "^3.3.1", - "laravel/tinker": "^2.8.2", - "nunomaduro/larastan": "^2.6.4", - "orchestra/testbench-core": "^8.13.0", - "pestphp/pest": "^2.23.2", - "phpunit/phpunit": "^10.4.1", - "sebastian/environment": "^6.0.1", - "spatie/laravel-ignition": "^2.3.1" + "larastan/larastan": "^2.9.2", + "laravel/framework": "^11.0.0", + "laravel/pint": "^1.14.0", + "laravel/sail": "^1.28.2", + "laravel/sanctum": "^4.0.0", + "laravel/tinker": "^2.9.0", + "orchestra/testbench-core": "^9.0.0", + "pestphp/pest": "^2.34.1 || ^3.0.0", + "sebastian/environment": "^6.0.1 || ^7.0.0" }, "type": "library", "extra": { @@ -16037,6 +15837,9 @@ "providers": [ "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" ] + }, + "branch-alias": { + "dev-8.x": "8.x-dev" } }, "autoload": { @@ -16088,7 +15891,7 @@ "type": "patreon" } ], - "time": "2023-10-11T15:45:01+00:00" + "time": "2024-03-06T16:20:09+00:00" }, { "name": "phar-io/manifest", @@ -18347,6 +18150,7 @@ "stability-flags": { "anhskohbo/no-captcha": 20, "b3rs3rk/steamfront": 20, + "bhuvidya/laravel-countries": 20, "joshpinkney/tv-maze-php-api": 20, "laravel/pulse": 10 }, diff --git a/package.json b/package.json index c8229d30fd..40f31ceff4 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,6 @@ { "private": true, + "type": "module", "scripts": { "dev": "npm run development", "development": "mix", @@ -9,7 +10,8 @@ "prod": "npm run production", "production": "mix --production", "format": "prettier --write 'resources/**/*.{css,js,vue}'", - "package-update": "ncu -u -x pnotify,tinymce" + "package-update": "ncu -u -x pnotify,tinymce", + "build": "vite build" }, "devDependencies": { "axios": "^1.6.8", @@ -20,13 +22,16 @@ "popper.js": "^1.16.1", "prettier": "^3.2.5", "resolve-url-loader": "^5.0.0", - "vue": "^3.4.23", + "vue": "^3.4.25", "webpack-cli": "^5.1.4" }, "dependencies": { "@fancyapps/fancybox": "^3.5.7", "@fortawesome/fontawesome-free": "^6.5.2", + "@melloware/coloris": "^0.24.0", "@popperjs/core": "^2.11.8", + "@simonwep/pickr": "^1.9.0", + "alpinejs": "^3.13.10", "animate.css": "^4.1.1", "autosize": "^6.0.1", "bootstrap": "^5.3.3", @@ -34,17 +39,25 @@ "bootstrap-hover-dropdown": "^2.2.1", "bootstrap-progressbar": "^0.9.0", "datatables": "^1.10.18", + "date-fns": "^3.6.0", + "feather-icons": "^4.29.1", "flexboxgrid2": "^7.2.1", "icheck": "^1.0.2", "jquery-colorbox": "^1.6.4", "jquery-goup": "^1.1.3", "jquery-migrate": "3.4.1", + "laravel-echo": "^1.16.1", + "nested-sort": "^5.2.0", "nonblockjs": "^1.0.8", "normalize.css": "^8.0.1", "npm": "^10.5.2", "npm-check-updates": "^16.14.18", "pace-js": "^1.2.4", "pnotify": "4.0.1", - "tinymce": "5.10.9" + "tailwindcss": "^3.4.3", + "tinymce": "5.10.9", + "vuedraggable": "^2.24.3", + "laravel-vite-plugin": "^1.0", + "vite": "^5.0" } } From 73f445af65fdf8d831c9895e47ba18a855f80819 Mon Sep 17 00:00:00 2001 From: DariusIII Date: Fri, 26 Apr 2024 22:16:08 +0200 Subject: [PATCH 03/47] Add vite config --- vite.config.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 vite.config.js diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 0000000000..2c5398be51 --- /dev/null +++ b/vite.config.js @@ -0,0 +1,18 @@ +import { defineConfig } from 'vite'; +import laravel from 'laravel-vite-plugin'; + +export default defineConfig({ + plugins: [ + laravel({ + input: [ + 'resources/css/app.css', + 'resources/js/app.js', + 'resources/forum/blade-tailwind/css/forum.css', + 'resources/forum/blade-tailwind/js/forum.js', + 'resources/forum/livewire-tailwind/css/forum.css', + 'resources/forum/livewire-tailwind/js/forum.js', + ], + refresh: true, + }), + ], +}); From 77ee96bb9d4e37702dde9b5dc1f75cdb6731d07c Mon Sep 17 00:00:00 2001 From: DariusIII Date: Fri, 26 Apr 2024 22:40:03 +0200 Subject: [PATCH 04/47] Update to carbon 3 --- Blacklight/Backfill.php | 2 +- Blacklight/Binaries.php | 16 +-- Blacklight/Music.php | 2 +- Blacklight/NameFixer.php | 2 +- Blacklight/ReleaseRemover.php | 4 +- Blacklight/libraries/Forking.php | 2 +- Blacklight/processing/ProcessReleases.php | 18 +-- app/Models/User.php | 2 +- composer.json | 2 +- composer.lock | 160 ++++++++++++++++------ misc/testing/Releases/recategorize.php | 2 +- misc/update/tmux/bin/update_groups.php | 2 +- 12 files changed, 143 insertions(+), 71 deletions(-) diff --git a/Blacklight/Backfill.php b/Blacklight/Backfill.php index 141a752d88..be71f19444 100755 --- a/Blacklight/Backfill.php +++ b/Blacklight/Backfill.php @@ -103,7 +103,7 @@ public function backfillAllGroups(string $groupName = '', int|string $articles = $counter++; } - $dMessage = 'Backfilling completed in '.now()->diffInSeconds($allTime).' seconds.'; + $dMessage = 'Backfilling completed in '.now()->diffInSeconds($allTime, true).' seconds.'; if ($this->_echoCLI) { $this->colorCli->primary($dMessage); diff --git a/Blacklight/Binaries.php b/Blacklight/Binaries.php index 9bd0df9bc5..e090f7caf9 100644 --- a/Blacklight/Binaries.php +++ b/Blacklight/Binaries.php @@ -227,7 +227,7 @@ public function updateAllGroups(int $maxHeaders = 100000): void $counter++; } - $endTime = now()->diffInSeconds($allTime); + $endTime = now()->diffInSeconds($allTime, true); $this->log( 'Updating completed in '.$endTime.Str::plural(' second', $endTime), __FUNCTION__, @@ -458,7 +458,7 @@ public function updateGroup(array $groupMySQL, int $maxHeaders = 0): void } if ($this->_echoCLI) { - $endGroup = now()->diffInSeconds($startGroup); + $endGroup = now()->diffInSeconds($startGroup, true); $this->colorCli->primary( PHP_EOL.'Group '.$groupMySQL['name'].' processed in '. $endGroup.Str::plural(' second', $endGroup) @@ -547,7 +547,7 @@ public function scan(array $groupMySQL, int $first, int $last, string $type = 'u $this->startCleaning = now(); // End of the getting data from usenet. - $this->timeHeaders = $this->startCleaning->diffInSeconds($this->startLoop); + $this->timeHeaders = $this->startCleaning->diffInSeconds($this->startLoop, true); // Check if we got headers. $msgCount = \count($headers); @@ -636,7 +636,7 @@ public function scan(array $groupMySQL, int $first, int $last, string $type = 'u $this->startPR = now(); // End of inserting. - $this->timeInsert = $this->startPR->diffInSeconds($this->startUpdate); + $this->timeInsert = $this->startPR->diffInSeconds($this->startUpdate, true); if ($partRepair && \count($headersRepaired) > 0) { $this->removeRepairedParts($headersRepaired, $this->groupMySQL['id']); @@ -853,7 +853,7 @@ protected function storeHeaders(array $headers = []): void $this->startUpdate = now(); // End of processing headers. - $this->timeCleaning = $this->startUpdate->diffInSeconds($this->startCleaning); + $this->timeCleaning = $this->startUpdate->diffInSeconds($this->startCleaning, true); $binariesQuery = $binariesCheck = 'INSERT INTO binaries (id, partsize, currentparts) VALUES '; foreach ($binariesUpdate as $binaryID => $binary) { $binariesQuery .= '('.$binaryID.','.$binary['Size'].','.$binary['Parts'].'),'; @@ -944,9 +944,9 @@ protected function outputHeaderDuration(): void $this->colorCli->primaryOver(' to process collections, '). $this->colorCli->alternateOver($this->timeInsert.'s'). $this->colorCli->primaryOver(' to insert binaries/parts, '). - $this->colorCli->alternateOver($currentMicroTime->diffInSeconds($this->startPR).'s'). + $this->colorCli->alternateOver($currentMicroTime->diffInSeconds($this->startPR, true).'s'). $this->colorCli->primaryOver(' for part repair, '). - $this->colorCli->alternateOver($currentMicroTime->diffInSeconds($this->startLoop).'s'). + $this->colorCli->alternateOver($currentMicroTime->diffInSeconds($this->startLoop, true).'s'). $this->colorCli->primary(' total.'); } } @@ -1236,7 +1236,7 @@ public function daytopost(int $days, array $data): string if ($this->_echoCLI) { $this->colorCli->primary( PHP_EOL.'Found article #'.$wantedArticle.' which has a date of '.date('r', $articleTime). - ', vs wanted date of '.date('r', $goalTime).'. Difference from goal is '.Carbon::createFromTimestamp($goalTime)->diffInDays(Carbon::createFromTimestamp($articleTime)).'days.' + ', vs wanted date of '.date('r', $goalTime).'. Difference from goal is '.Carbon::createFromTimestamp($goalTime)->diffInDays(Carbon::createFromTimestamp($articleTime), true).'days.' ); } diff --git a/Blacklight/Music.php b/Blacklight/Music.php index c0111bacf2..0b78684636 100755 --- a/Blacklight/Music.php +++ b/Blacklight/Music.php @@ -452,7 +452,7 @@ public function processMusicReleases(bool $local = false) // Sleep to not flood amazon. $sleeptime = $this->sleeptime / 1000; - $diff = now()->diffInSeconds($startTime); + $diff = now()->diffInSeconds($startTime, true); if ($sleeptime - $diff > 0 && $usedAmazon === true) { sleep($sleeptime - $diff); } diff --git a/Blacklight/NameFixer.php b/Blacklight/NameFixer.php index f46b311931..2fe3b6b8c5 100755 --- a/Blacklight/NameFixer.php +++ b/Blacklight/NameFixer.php @@ -1125,7 +1125,7 @@ public function getPreFileNames(array $args = []): void $this->colorCLI->climate()->info('Renamed Releases: ['.number_format($counted).'] '.(new ConsoleTools())->percentString(++$counter, $total)); } } - $this->colorCLI->climate()->info(PHP_EOL.'Renamed '.number_format($counted).' releases in '.now()->diffInSeconds($timeStart).' seconds'.'.'); + $this->colorCLI->climate()->info(PHP_EOL.'Renamed '.number_format($counted).' releases in '.now()->diffInSeconds($timeStart, true).' seconds'.'.'); } else { $this->colorCLI->climate()->info('Nothing to do.'); } diff --git a/Blacklight/ReleaseRemover.php b/Blacklight/ReleaseRemover.php index 04baea3ab6..134d05ca77 100755 --- a/Blacklight/ReleaseRemover.php +++ b/Blacklight/ReleaseRemover.php @@ -119,7 +119,7 @@ public function removeByCriteria(array $arguments): bool|string if ($this->echoCLI) { $this->colorCLI->headerOver(($this->delete ? 'Deleted ' : 'Would have deleted ').$this->deletedCount.' release(s). This script ran for '); - $this->colorCLI->header(now()->diffInSeconds($timeStart).' seconds', true); + $this->colorCLI->header(now()->diffInSeconds($timeStart, true).' seconds', true); } return true; @@ -239,7 +239,7 @@ public function removeCrap(bool $delete, int|string $time, string $type = '', in if ($this->echoCLI) { $this->colorCLI->headerOver(($this->delete ? 'Deleted ' : 'Would have deleted ').$this->deletedCount.' release(s). This script ran for '); - $this->colorCLI->header(now()->diffInSeconds($timeStart).' seconds', true); + $this->colorCLI->header(now()->diffInSeconds($timeStart, true).' seconds', true); } return true; diff --git a/Blacklight/libraries/Forking.php b/Blacklight/libraries/Forking.php index e8bd77e701..b1d9002219 100755 --- a/Blacklight/libraries/Forking.php +++ b/Blacklight/libraries/Forking.php @@ -323,7 +323,7 @@ private function safeBackfill(): void if ($backfill_days === 1) { $backfilldays = 'g.backfill_target'; } elseif ($backfill_days === 2) { - $backfilldays = now()->diffInDays(Carbon::createFromFormat('Y-m-d', Settings::settingValue('..safebackfilldate'))); + $backfilldays = now()->diffInDays(Carbon::createFromFormat('Y-m-d', Settings::settingValue('..safebackfilldate')), true); } $data = DB::select( diff --git a/Blacklight/processing/ProcessReleases.php b/Blacklight/processing/ProcessReleases.php index 2c48d9ff73..4e7fc45e6e 100755 --- a/Blacklight/processing/ProcessReleases.php +++ b/Blacklight/processing/ProcessReleases.php @@ -236,7 +236,7 @@ public function processIncompleteCollections($groupID): void } $count = $countQuery->count('id'); - $totalTime = now()->diffInSeconds($startTime); + $totalTime = now()->diffInSeconds($startTime, true); $this->colorCLI->primary( ($count ?? 0).' collections were found to be complete. Time: '. @@ -282,7 +282,7 @@ public function processCollectionSizes($groupID): void $checked.' collections set to filecheck = 3(size calculated)', true ); - $totalTime = now()->diffInSeconds($startTime); + $totalTime = now()->diffInSeconds($startTime, true); $this->colorCLI->primary($totalTime.Str::plural(' second', $totalTime), true); } }, 10); @@ -366,7 +366,7 @@ public function deleteUnwantedCollections($groupID): void } } - $totalTime = now()->diffInSeconds($startTime); + $totalTime = now()->diffInSeconds($startTime, true); if ($this->echoCLI) { $this->colorCLI->primary('Deleted '.($minSizeDeleted + $maxSizeDeleted + $minFilesDeleted).' collections: '.PHP_EOL.$minSizeDeleted.' smaller than, '.$maxSizeDeleted.' bigger than, '.$minFilesDeleted.' with less files than site/group settings in: '.$totalTime.Str::plural(' second', $totalTime), true); @@ -535,7 +535,7 @@ public function createReleases(int|string $groupID): array } } - $totalTime = now()->diffInSeconds($startTime); + $totalTime = now()->diffInSeconds($startTime, true); if ($this->echoCLI) { $this->colorCLI->primary( @@ -587,7 +587,7 @@ public function createNZBs(int|string $groupID): int } } - $totalTime = now()->diffInSeconds($startTime); + $totalTime = now()->diffInSeconds($startTime, true); if ($this->echoCLI) { $this->colorCLI->primary( @@ -625,7 +625,7 @@ public function categorizeReleases(int $categorize, int|string $groupID = ''): v $groupID ); - $totalTime = now()->diffInSeconds($startTime); + $totalTime = now()->diffInSeconds($startTime, true); if ($this->echoCLI) { $this->colorCLI->primary($totalTime.Str::plural(' second', $totalTime)); @@ -682,7 +682,7 @@ public function deleteCollections($groupID): void } $firstQuery = $fourthQuery = now(); - $totalTime = $firstQuery->diffInSeconds($startTime); + $totalTime = $firstQuery->diffInSeconds($startTime, true); if ($this->echoCLI) { $this->colorCLI->primary( @@ -729,8 +729,8 @@ public function deleteCollections($groupID): void } $deletedCount += $deleted; - $colDelTime = now()->diffInSeconds($fourthQuery); - $totalTime = $fourthQuery->diffInSeconds($startTime); + $colDelTime = now()->diffInSeconds($fourthQuery, true); + $totalTime = $fourthQuery->diffInSeconds($startTime, true); if ($this->echoCLI) { $this->colorCLI->primary('Finished deleting '.$deleted.' collections missed after NZB creation in '.$colDelTime.Str::plural(' second', $colDelTime).PHP_EOL.'Removed '.number_format($deletedCount).' parts/binaries/collection rows in '.$totalTime.Str::plural(' second', $totalTime), true); diff --git a/app/Models/User.php b/app/Models/User.php index e58b602435..8e0cbba2b1 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -363,7 +363,7 @@ public static function updateExpiredRoles(): void foreach ($period as $value) { $users = self::query()->whereDate('rolechangedate', '=', $value)->get(); - $days = $now->diffInDays($value); + $days = $now->diffInDays($value, true); foreach ($users as $user) { SendAccountWillExpireEmail::dispatch($user, $days)->onQueue('emails'); } diff --git a/composer.json b/composer.json index 67280c30f5..b001139300 100644 --- a/composer.json +++ b/composer.json @@ -82,7 +82,7 @@ "monicahq/laravel-cloudflare": "^3.5", "monolog/monolog": "^3.5", "mtownsend/xml-to-array": "^2.0", - "nesbot/carbon": "^2.71", + "nesbot/carbon": "^3.3", "opis/closure": "^3.6", "pear/net_nntp": "^1.6.0", "php-ffmpeg/php-ffmpeg": "^1.2", diff --git a/composer.lock b/composer.lock index 600667a49f..7a738dc530 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "c2de2786c7fe4baa536f6a0c177f329b", + "content-hash": "10739567a859ba1f69e3fd9b1e562e36", "packages": [ { "name": "aharen/omdbapi", @@ -5659,42 +5659,41 @@ }, { "name": "nesbot/carbon", - "version": "2.72.3", + "version": "3.3.0", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "0c6fd108360c562f6e4fd1dedb8233b423e91c83" + "reference": "7219739c4e01d4680c980545821733b6ed8ee880" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/0c6fd108360c562f6e4fd1dedb8233b423e91c83", - "reference": "0c6fd108360c562f6e4fd1dedb8233b423e91c83", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/7219739c4e01d4680c980545821733b6ed8ee880", + "reference": "7219739c4e01d4680c980545821733b6ed8ee880", "shasum": "" }, "require": { "carbonphp/carbon-doctrine-types": "*", "ext-json": "*", - "php": "^7.1.8 || ^8.0", + "php": "^8.1", "psr/clock": "^1.0", + "symfony/clock": "^6.3 || ^7.0", "symfony/polyfill-mbstring": "^1.0", - "symfony/polyfill-php80": "^1.16", - "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" + "symfony/translation": "^4.4.18 || ^5.2.1|| ^6.0 || ^7.0" }, "provide": { "psr/clock-implementation": "1.0" }, "require-dev": { - "doctrine/dbal": "^2.0 || ^3.1.4 || ^4.0", - "doctrine/orm": "^2.7 || ^3.0", - "friendsofphp/php-cs-fixer": "^3.0", - "kylekatarnls/multi-tester": "^2.0", - "ondrejmirtes/better-reflection": "*", - "phpmd/phpmd": "^2.9", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12.99 || ^1.7.14", - "phpunit/php-file-iterator": "^2.0.5 || ^3.0.6", - "phpunit/phpunit": "^7.5.20 || ^8.5.26 || ^9.5.20", - "squizlabs/php_codesniffer": "^3.4" + "doctrine/dbal": "^3.6.3 || ^4.0", + "doctrine/orm": "^2.15.2 || ^3.0", + "friendsofphp/php-cs-fixer": "^3.52.1", + "kylekatarnls/multi-tester": "^2.5.3", + "ondrejmirtes/better-reflection": "^6.25.0.4", + "phpmd/phpmd": "^2.15.0", + "phpstan/extension-installer": "^1.3.1", + "phpstan/phpstan": "^1.10.65", + "phpunit/phpunit": "^10.5.15", + "squizlabs/php_codesniffer": "^3.9.0" }, "bin": [ "bin/carbon" @@ -5702,8 +5701,8 @@ "type": "library", "extra": { "branch-alias": { - "dev-3.x": "3.x-dev", - "dev-master": "2.x-dev" + "dev-master": "3.x-dev", + "dev-2.x": "2.x-dev" }, "laravel": { "providers": [ @@ -5762,7 +5761,7 @@ "type": "tidelift" } ], - "time": "2024-01-25T10:35:09+00:00" + "time": "2024-04-18T16:35:06+00:00" }, { "name": "nette/schema", @@ -10420,6 +10419,80 @@ ], "time": "2024-01-23T13:51:25+00:00" }, + { + "name": "symfony/clock", + "version": "v7.0.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/clock.git", + "reference": "8b9d08887353d627d5f6c3bf3373b398b49051c2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/clock/zipball/8b9d08887353d627d5f6c3bf3373b398b49051c2", + "reference": "8b9d08887353d627d5f6c3bf3373b398b49051c2", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/clock": "^1.0", + "symfony/polyfill-php83": "^1.28" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/now.php" + ], + "psr-4": { + "Symfony\\Component\\Clock\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Decouples applications from the system clock", + "homepage": "https://symfony.com", + "keywords": [ + "clock", + "psr20", + "time" + ], + "support": { + "source": "https://github.com/symfony/clock/tree/v7.0.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-03-02T12:46:12+00:00" + }, { "name": "symfony/console", "version": "v7.0.6", @@ -13027,33 +13100,32 @@ }, { "name": "symfony/translation", - "version": "v6.4.4", + "version": "v7.0.4", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "bce6a5a78e94566641b2594d17e48b0da3184a8e" + "reference": "5b75e872f7d135d7abb4613809fadc8d9f3d30a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/bce6a5a78e94566641b2594d17e48b0da3184a8e", - "reference": "bce6a5a78e94566641b2594d17e48b0da3184a8e", + "url": "https://api.github.com/repos/symfony/translation/zipball/5b75e872f7d135d7abb4613809fadc8d9f3d30a0", + "reference": "5b75e872f7d135d7abb4613809fadc8d9f3d30a0", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony/polyfill-mbstring": "~1.0", "symfony/translation-contracts": "^2.5|^3.0" }, "conflict": { - "symfony/config": "<5.4", - "symfony/console": "<5.4", - "symfony/dependency-injection": "<5.4", + "symfony/config": "<6.4", + "symfony/console": "<6.4", + "symfony/dependency-injection": "<6.4", "symfony/http-client-contracts": "<2.5", - "symfony/http-kernel": "<5.4", + "symfony/http-kernel": "<6.4", "symfony/service-contracts": "<2.5", - "symfony/twig-bundle": "<5.4", - "symfony/yaml": "<5.4" + "symfony/twig-bundle": "<6.4", + "symfony/yaml": "<6.4" }, "provide": { "symfony/translation-implementation": "2.3|3.0" @@ -13061,17 +13133,17 @@ "require-dev": { "nikic/php-parser": "^4.18|^5.0", "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/console": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/finder": "^6.4|^7.0", "symfony/http-client-contracts": "^2.5|^3.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0", - "symfony/intl": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", "symfony/polyfill-intl-icu": "^1.21", - "symfony/routing": "^5.4|^6.0|^7.0", + "symfony/routing": "^6.4|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^5.4|^6.0|^7.0" + "symfony/yaml": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -13102,7 +13174,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.4.4" + "source": "https://github.com/symfony/translation/tree/v7.0.4" }, "funding": [ { @@ -13118,7 +13190,7 @@ "type": "tidelift" } ], - "time": "2024-02-20T13:16:58+00:00" + "time": "2024-02-22T20:27:20+00:00" }, { "name": "symfony/translation-contracts", diff --git a/misc/testing/Releases/recategorize.php b/misc/testing/Releases/recategorize.php index 0e4b0fe2ea..91a82f1165 100644 --- a/misc/testing/Releases/recategorize.php +++ b/misc/testing/Releases/recategorize.php @@ -39,7 +39,7 @@ function reCategorize($argv): void } $timeStart = now(); $chgCount = categorizeRelease($argv, true); - $time = now()->diffInSeconds($timeStart); + $time = now()->diffInSeconds($timeStart, true); if (! isset($argv[2])) { $colorCli->header('Finished re-categorizing '.number_format($chgCount).' releases in '.$time.' seconds, using the searchname.').PHP_EOL; } else { diff --git a/misc/update/tmux/bin/update_groups.php b/misc/update/tmux/bin/update_groups.php index 8fa4fa41e1..2774ebe8e1 100644 --- a/misc/update/tmux/bin/update_groups.php +++ b/misc/update/tmux/bin/update_groups.php @@ -48,7 +48,7 @@ } } - $colorCli->header('Running time: '.now()->diffInSeconds($start).' seconds'); + $colorCli->header('Running time: '.now()->diffInSeconds($start, true).' seconds'); } catch (ErrorException $e) { echo $e->getMessage(); } From f3a895117204036b92908351c40c9e3c1225e947 Mon Sep 17 00:00:00 2001 From: DariusIII Date: Fri, 26 Apr 2024 22:47:58 +0200 Subject: [PATCH 05/47] Update package.json --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 40f31ceff4..1c1900d7b4 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,8 @@ "production": "mix --production", "format": "prettier --write 'resources/**/*.{css,js,vue}'", "package-update": "ncu -u -x pnotify,tinymce", - "build": "vite build" + "build": "vite build", + "vitedev": "vite" }, "devDependencies": { "axios": "^1.6.8", From 67ec85125abe6305a1d0251479e76a0d22c2ec48 Mon Sep 17 00:00:00 2001 From: Shift Date: Sat, 27 Apr 2024 08:19:59 +0000 Subject: [PATCH 06/47] Use Faker methods Accessing Faker properties was deprecated in Faker 1.14. --- database/factories/ModelFactory.php | 4 ++-- database/factories/ReleaseFactory.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/database/factories/ModelFactory.php b/database/factories/ModelFactory.php index 8dd3fcdf03..ad3d27a334 100644 --- a/database/factories/ModelFactory.php +++ b/database/factories/ModelFactory.php @@ -20,8 +20,8 @@ static $password; return [ - 'name' => $faker->name, - 'email' => $faker->unique()->safeEmail, + 'name' => $faker->name(), + 'email' => $faker->unique()->safeEmail(), 'password' => $password ?: $password = bcrypt('secret'), 'remember_token' => Str::random(10), ]; diff --git a/database/factories/ReleaseFactory.php b/database/factories/ReleaseFactory.php index 833e8bc84e..6195ec47fd 100644 --- a/database/factories/ReleaseFactory.php +++ b/database/factories/ReleaseFactory.php @@ -20,7 +20,7 @@ class ReleaseFactory extends Factory public function definition(): array { return [ - 'name' => $this->faker->name, + 'name' => $this->faker->name(), 'searchname' => $this->faker->unique()->name(), 'fromname' => $this->faker->unique()->safeEmail(), 'postdate' => $this->faker->date(), From 0daa15ebffc65ae7c0ce47aee9ded3f5768cbc6e Mon Sep 17 00:00:00 2001 From: Shift Date: Sat, 27 Apr 2024 08:19:59 +0000 Subject: [PATCH 07/47] Remove unnecessary `$model` property --- database/factories/ReleaseFactory.php | 7 ------- 1 file changed, 7 deletions(-) diff --git a/database/factories/ReleaseFactory.php b/database/factories/ReleaseFactory.php index 6195ec47fd..6e0edf8bd7 100644 --- a/database/factories/ReleaseFactory.php +++ b/database/factories/ReleaseFactory.php @@ -7,13 +7,6 @@ class ReleaseFactory extends Factory { - /** - * The name of the factory's corresponding model. - * - * @var string - */ - protected $model = Release::class; - /** * Define the model's default state. */ From 755ba85436f53712657110f2df21cbc39919cd4a Mon Sep 17 00:00:00 2001 From: Shift Date: Sat, 27 Apr 2024 08:20:00 +0000 Subject: [PATCH 08/47] Move `resources/lang` folder --- {resources/lang => lang}/en/auth.php | 0 {resources/lang => lang}/en/pagination.php | 0 {resources/lang => lang}/en/passwords.php | 0 {resources/lang => lang}/en/validation.php | 0 {resources/lang => lang}/vendor/forum/.gitkeep | 0 {resources/lang => lang}/vendor/forum/de/categories.php | 0 {resources/lang => lang}/vendor/forum/de/general.php | 0 {resources/lang => lang}/vendor/forum/de/posts.php | 0 {resources/lang => lang}/vendor/forum/de/threads.php | 0 {resources/lang => lang}/vendor/forum/de/validation.php | 0 {resources/lang => lang}/vendor/forum/en/categories.php | 0 {resources/lang => lang}/vendor/forum/en/general.php | 0 {resources/lang => lang}/vendor/forum/en/posts.php | 0 {resources/lang => lang}/vendor/forum/en/threads.php | 0 {resources/lang => lang}/vendor/forum/en/validation.php | 0 {resources/lang => lang}/vendor/forum/es/categories.php | 0 {resources/lang => lang}/vendor/forum/es/general.php | 0 {resources/lang => lang}/vendor/forum/es/posts.php | 0 {resources/lang => lang}/vendor/forum/es/threads.php | 0 {resources/lang => lang}/vendor/forum/es/validation.php | 0 {resources/lang => lang}/vendor/forum/fr/categories.php | 0 {resources/lang => lang}/vendor/forum/fr/general.php | 0 {resources/lang => lang}/vendor/forum/fr/posts.php | 0 {resources/lang => lang}/vendor/forum/fr/threads.php | 0 {resources/lang => lang}/vendor/forum/fr/validation.php | 0 {resources/lang => lang}/vendor/forum/id/categories.php | 0 {resources/lang => lang}/vendor/forum/id/general.php | 0 {resources/lang => lang}/vendor/forum/id/posts.php | 0 {resources/lang => lang}/vendor/forum/id/threads.php | 0 {resources/lang => lang}/vendor/forum/id/validation.php | 0 {resources/lang => lang}/vendor/forum/it/categories.php | 0 {resources/lang => lang}/vendor/forum/it/general.php | 0 {resources/lang => lang}/vendor/forum/it/posts.php | 0 {resources/lang => lang}/vendor/forum/it/threads.php | 0 {resources/lang => lang}/vendor/forum/it/validation.php | 0 {resources/lang => lang}/vendor/forum/nl/categories.php | 0 {resources/lang => lang}/vendor/forum/nl/general.php | 0 {resources/lang => lang}/vendor/forum/nl/posts.php | 0 {resources/lang => lang}/vendor/forum/nl/threads.php | 0 {resources/lang => lang}/vendor/forum/nl/validation.php | 0 {resources/lang => lang}/vendor/forum/pt-br/categories.php | 0 {resources/lang => lang}/vendor/forum/pt-br/general.php | 0 {resources/lang => lang}/vendor/forum/pt-br/posts.php | 0 {resources/lang => lang}/vendor/forum/pt-br/threads.php | 0 {resources/lang => lang}/vendor/forum/pt-br/validation.php | 0 {resources/lang => lang}/vendor/forum/ro/categories.php | 0 {resources/lang => lang}/vendor/forum/ro/general.php | 0 {resources/lang => lang}/vendor/forum/ro/posts.php | 0 {resources/lang => lang}/vendor/forum/ro/threads.php | 0 {resources/lang => lang}/vendor/forum/ro/validation.php | 0 {resources/lang => lang}/vendor/forum/ru/categories.php | 0 {resources/lang => lang}/vendor/forum/ru/general.php | 0 {resources/lang => lang}/vendor/forum/ru/posts.php | 0 {resources/lang => lang}/vendor/forum/ru/threads.php | 0 {resources/lang => lang}/vendor/forum/ru/validation.php | 0 {resources/lang => lang}/vendor/forum/sr/categories.php | 0 {resources/lang => lang}/vendor/forum/sr/general.php | 0 {resources/lang => lang}/vendor/forum/sr/posts.php | 0 {resources/lang => lang}/vendor/forum/sr/threads.php | 0 {resources/lang => lang}/vendor/forum/sr/validation.php | 0 {resources/lang => lang}/vendor/forum/sv/categories.php | 0 {resources/lang => lang}/vendor/forum/sv/general.php | 0 {resources/lang => lang}/vendor/forum/sv/posts.php | 0 {resources/lang => lang}/vendor/forum/sv/threads.php | 0 {resources/lang => lang}/vendor/forum/sv/validation.php | 0 {resources/lang => lang}/vendor/forum/th/categories.php | 0 {resources/lang => lang}/vendor/forum/th/general.php | 0 {resources/lang => lang}/vendor/forum/th/posts.php | 0 {resources/lang => lang}/vendor/forum/th/threads.php | 0 {resources/lang => lang}/vendor/forum/th/validation.php | 0 {resources/lang => lang}/vendor/forum/tr/categories.php | 0 {resources/lang => lang}/vendor/forum/tr/general.php | 0 {resources/lang => lang}/vendor/forum/tr/posts.php | 0 {resources/lang => lang}/vendor/forum/tr/threads.php | 0 {resources/lang => lang}/vendor/forum/tr/validation.php | 0 {resources/lang => lang}/vendor/forum/zh/categories.php | 0 {resources/lang => lang}/vendor/forum/zh/general.php | 0 {resources/lang => lang}/vendor/forum/zh/posts.php | 0 {resources/lang => lang}/vendor/forum/zh/threads.php | 0 {resources/lang => lang}/vendor/forum/zh/validation.php | 0 80 files changed, 0 insertions(+), 0 deletions(-) rename {resources/lang => lang}/en/auth.php (100%) rename {resources/lang => lang}/en/pagination.php (100%) rename {resources/lang => lang}/en/passwords.php (100%) rename {resources/lang => lang}/en/validation.php (100%) rename {resources/lang => lang}/vendor/forum/.gitkeep (100%) rename {resources/lang => lang}/vendor/forum/de/categories.php (100%) rename {resources/lang => lang}/vendor/forum/de/general.php (100%) rename {resources/lang => lang}/vendor/forum/de/posts.php (100%) rename {resources/lang => lang}/vendor/forum/de/threads.php (100%) rename {resources/lang => lang}/vendor/forum/de/validation.php (100%) rename {resources/lang => lang}/vendor/forum/en/categories.php (100%) rename {resources/lang => lang}/vendor/forum/en/general.php (100%) rename {resources/lang => lang}/vendor/forum/en/posts.php (100%) rename {resources/lang => lang}/vendor/forum/en/threads.php (100%) rename {resources/lang => lang}/vendor/forum/en/validation.php (100%) rename {resources/lang => lang}/vendor/forum/es/categories.php (100%) rename {resources/lang => lang}/vendor/forum/es/general.php (100%) rename {resources/lang => lang}/vendor/forum/es/posts.php (100%) rename {resources/lang => lang}/vendor/forum/es/threads.php (100%) rename {resources/lang => lang}/vendor/forum/es/validation.php (100%) rename {resources/lang => lang}/vendor/forum/fr/categories.php (100%) rename {resources/lang => lang}/vendor/forum/fr/general.php (100%) rename {resources/lang => lang}/vendor/forum/fr/posts.php (100%) rename {resources/lang => lang}/vendor/forum/fr/threads.php (100%) rename {resources/lang => lang}/vendor/forum/fr/validation.php (100%) rename {resources/lang => lang}/vendor/forum/id/categories.php (100%) rename {resources/lang => lang}/vendor/forum/id/general.php (100%) rename {resources/lang => lang}/vendor/forum/id/posts.php (100%) rename {resources/lang => lang}/vendor/forum/id/threads.php (100%) rename {resources/lang => lang}/vendor/forum/id/validation.php (100%) rename {resources/lang => lang}/vendor/forum/it/categories.php (100%) rename {resources/lang => lang}/vendor/forum/it/general.php (100%) rename {resources/lang => lang}/vendor/forum/it/posts.php (100%) rename {resources/lang => lang}/vendor/forum/it/threads.php (100%) rename {resources/lang => lang}/vendor/forum/it/validation.php (100%) rename {resources/lang => lang}/vendor/forum/nl/categories.php (100%) rename {resources/lang => lang}/vendor/forum/nl/general.php (100%) rename {resources/lang => lang}/vendor/forum/nl/posts.php (100%) rename {resources/lang => lang}/vendor/forum/nl/threads.php (100%) rename {resources/lang => lang}/vendor/forum/nl/validation.php (100%) rename {resources/lang => lang}/vendor/forum/pt-br/categories.php (100%) rename {resources/lang => lang}/vendor/forum/pt-br/general.php (100%) rename {resources/lang => lang}/vendor/forum/pt-br/posts.php (100%) rename {resources/lang => lang}/vendor/forum/pt-br/threads.php (100%) rename {resources/lang => lang}/vendor/forum/pt-br/validation.php (100%) rename {resources/lang => lang}/vendor/forum/ro/categories.php (100%) rename {resources/lang => lang}/vendor/forum/ro/general.php (100%) rename {resources/lang => lang}/vendor/forum/ro/posts.php (100%) rename {resources/lang => lang}/vendor/forum/ro/threads.php (100%) rename {resources/lang => lang}/vendor/forum/ro/validation.php (100%) rename {resources/lang => lang}/vendor/forum/ru/categories.php (100%) rename {resources/lang => lang}/vendor/forum/ru/general.php (100%) rename {resources/lang => lang}/vendor/forum/ru/posts.php (100%) rename {resources/lang => lang}/vendor/forum/ru/threads.php (100%) rename {resources/lang => lang}/vendor/forum/ru/validation.php (100%) rename {resources/lang => lang}/vendor/forum/sr/categories.php (100%) rename {resources/lang => lang}/vendor/forum/sr/general.php (100%) rename {resources/lang => lang}/vendor/forum/sr/posts.php (100%) rename {resources/lang => lang}/vendor/forum/sr/threads.php (100%) rename {resources/lang => lang}/vendor/forum/sr/validation.php (100%) rename {resources/lang => lang}/vendor/forum/sv/categories.php (100%) rename {resources/lang => lang}/vendor/forum/sv/general.php (100%) rename {resources/lang => lang}/vendor/forum/sv/posts.php (100%) rename {resources/lang => lang}/vendor/forum/sv/threads.php (100%) rename {resources/lang => lang}/vendor/forum/sv/validation.php (100%) rename {resources/lang => lang}/vendor/forum/th/categories.php (100%) rename {resources/lang => lang}/vendor/forum/th/general.php (100%) rename {resources/lang => lang}/vendor/forum/th/posts.php (100%) rename {resources/lang => lang}/vendor/forum/th/threads.php (100%) rename {resources/lang => lang}/vendor/forum/th/validation.php (100%) rename {resources/lang => lang}/vendor/forum/tr/categories.php (100%) rename {resources/lang => lang}/vendor/forum/tr/general.php (100%) rename {resources/lang => lang}/vendor/forum/tr/posts.php (100%) rename {resources/lang => lang}/vendor/forum/tr/threads.php (100%) rename {resources/lang => lang}/vendor/forum/tr/validation.php (100%) rename {resources/lang => lang}/vendor/forum/zh/categories.php (100%) rename {resources/lang => lang}/vendor/forum/zh/general.php (100%) rename {resources/lang => lang}/vendor/forum/zh/posts.php (100%) rename {resources/lang => lang}/vendor/forum/zh/threads.php (100%) rename {resources/lang => lang}/vendor/forum/zh/validation.php (100%) diff --git a/resources/lang/en/auth.php b/lang/en/auth.php similarity index 100% rename from resources/lang/en/auth.php rename to lang/en/auth.php diff --git a/resources/lang/en/pagination.php b/lang/en/pagination.php similarity index 100% rename from resources/lang/en/pagination.php rename to lang/en/pagination.php diff --git a/resources/lang/en/passwords.php b/lang/en/passwords.php similarity index 100% rename from resources/lang/en/passwords.php rename to lang/en/passwords.php diff --git a/resources/lang/en/validation.php b/lang/en/validation.php similarity index 100% rename from resources/lang/en/validation.php rename to lang/en/validation.php diff --git a/resources/lang/vendor/forum/.gitkeep b/lang/vendor/forum/.gitkeep similarity index 100% rename from resources/lang/vendor/forum/.gitkeep rename to lang/vendor/forum/.gitkeep diff --git a/resources/lang/vendor/forum/de/categories.php b/lang/vendor/forum/de/categories.php similarity index 100% rename from resources/lang/vendor/forum/de/categories.php rename to lang/vendor/forum/de/categories.php diff --git a/resources/lang/vendor/forum/de/general.php b/lang/vendor/forum/de/general.php similarity index 100% rename from resources/lang/vendor/forum/de/general.php rename to lang/vendor/forum/de/general.php diff --git a/resources/lang/vendor/forum/de/posts.php b/lang/vendor/forum/de/posts.php similarity index 100% rename from resources/lang/vendor/forum/de/posts.php rename to lang/vendor/forum/de/posts.php diff --git a/resources/lang/vendor/forum/de/threads.php b/lang/vendor/forum/de/threads.php similarity index 100% rename from resources/lang/vendor/forum/de/threads.php rename to lang/vendor/forum/de/threads.php diff --git a/resources/lang/vendor/forum/de/validation.php b/lang/vendor/forum/de/validation.php similarity index 100% rename from resources/lang/vendor/forum/de/validation.php rename to lang/vendor/forum/de/validation.php diff --git a/resources/lang/vendor/forum/en/categories.php b/lang/vendor/forum/en/categories.php similarity index 100% rename from resources/lang/vendor/forum/en/categories.php rename to lang/vendor/forum/en/categories.php diff --git a/resources/lang/vendor/forum/en/general.php b/lang/vendor/forum/en/general.php similarity index 100% rename from resources/lang/vendor/forum/en/general.php rename to lang/vendor/forum/en/general.php diff --git a/resources/lang/vendor/forum/en/posts.php b/lang/vendor/forum/en/posts.php similarity index 100% rename from resources/lang/vendor/forum/en/posts.php rename to lang/vendor/forum/en/posts.php diff --git a/resources/lang/vendor/forum/en/threads.php b/lang/vendor/forum/en/threads.php similarity index 100% rename from resources/lang/vendor/forum/en/threads.php rename to lang/vendor/forum/en/threads.php diff --git a/resources/lang/vendor/forum/en/validation.php b/lang/vendor/forum/en/validation.php similarity index 100% rename from resources/lang/vendor/forum/en/validation.php rename to lang/vendor/forum/en/validation.php diff --git a/resources/lang/vendor/forum/es/categories.php b/lang/vendor/forum/es/categories.php similarity index 100% rename from resources/lang/vendor/forum/es/categories.php rename to lang/vendor/forum/es/categories.php diff --git a/resources/lang/vendor/forum/es/general.php b/lang/vendor/forum/es/general.php similarity index 100% rename from resources/lang/vendor/forum/es/general.php rename to lang/vendor/forum/es/general.php diff --git a/resources/lang/vendor/forum/es/posts.php b/lang/vendor/forum/es/posts.php similarity index 100% rename from resources/lang/vendor/forum/es/posts.php rename to lang/vendor/forum/es/posts.php diff --git a/resources/lang/vendor/forum/es/threads.php b/lang/vendor/forum/es/threads.php similarity index 100% rename from resources/lang/vendor/forum/es/threads.php rename to lang/vendor/forum/es/threads.php diff --git a/resources/lang/vendor/forum/es/validation.php b/lang/vendor/forum/es/validation.php similarity index 100% rename from resources/lang/vendor/forum/es/validation.php rename to lang/vendor/forum/es/validation.php diff --git a/resources/lang/vendor/forum/fr/categories.php b/lang/vendor/forum/fr/categories.php similarity index 100% rename from resources/lang/vendor/forum/fr/categories.php rename to lang/vendor/forum/fr/categories.php diff --git a/resources/lang/vendor/forum/fr/general.php b/lang/vendor/forum/fr/general.php similarity index 100% rename from resources/lang/vendor/forum/fr/general.php rename to lang/vendor/forum/fr/general.php diff --git a/resources/lang/vendor/forum/fr/posts.php b/lang/vendor/forum/fr/posts.php similarity index 100% rename from resources/lang/vendor/forum/fr/posts.php rename to lang/vendor/forum/fr/posts.php diff --git a/resources/lang/vendor/forum/fr/threads.php b/lang/vendor/forum/fr/threads.php similarity index 100% rename from resources/lang/vendor/forum/fr/threads.php rename to lang/vendor/forum/fr/threads.php diff --git a/resources/lang/vendor/forum/fr/validation.php b/lang/vendor/forum/fr/validation.php similarity index 100% rename from resources/lang/vendor/forum/fr/validation.php rename to lang/vendor/forum/fr/validation.php diff --git a/resources/lang/vendor/forum/id/categories.php b/lang/vendor/forum/id/categories.php similarity index 100% rename from resources/lang/vendor/forum/id/categories.php rename to lang/vendor/forum/id/categories.php diff --git a/resources/lang/vendor/forum/id/general.php b/lang/vendor/forum/id/general.php similarity index 100% rename from resources/lang/vendor/forum/id/general.php rename to lang/vendor/forum/id/general.php diff --git a/resources/lang/vendor/forum/id/posts.php b/lang/vendor/forum/id/posts.php similarity index 100% rename from resources/lang/vendor/forum/id/posts.php rename to lang/vendor/forum/id/posts.php diff --git a/resources/lang/vendor/forum/id/threads.php b/lang/vendor/forum/id/threads.php similarity index 100% rename from resources/lang/vendor/forum/id/threads.php rename to lang/vendor/forum/id/threads.php diff --git a/resources/lang/vendor/forum/id/validation.php b/lang/vendor/forum/id/validation.php similarity index 100% rename from resources/lang/vendor/forum/id/validation.php rename to lang/vendor/forum/id/validation.php diff --git a/resources/lang/vendor/forum/it/categories.php b/lang/vendor/forum/it/categories.php similarity index 100% rename from resources/lang/vendor/forum/it/categories.php rename to lang/vendor/forum/it/categories.php diff --git a/resources/lang/vendor/forum/it/general.php b/lang/vendor/forum/it/general.php similarity index 100% rename from resources/lang/vendor/forum/it/general.php rename to lang/vendor/forum/it/general.php diff --git a/resources/lang/vendor/forum/it/posts.php b/lang/vendor/forum/it/posts.php similarity index 100% rename from resources/lang/vendor/forum/it/posts.php rename to lang/vendor/forum/it/posts.php diff --git a/resources/lang/vendor/forum/it/threads.php b/lang/vendor/forum/it/threads.php similarity index 100% rename from resources/lang/vendor/forum/it/threads.php rename to lang/vendor/forum/it/threads.php diff --git a/resources/lang/vendor/forum/it/validation.php b/lang/vendor/forum/it/validation.php similarity index 100% rename from resources/lang/vendor/forum/it/validation.php rename to lang/vendor/forum/it/validation.php diff --git a/resources/lang/vendor/forum/nl/categories.php b/lang/vendor/forum/nl/categories.php similarity index 100% rename from resources/lang/vendor/forum/nl/categories.php rename to lang/vendor/forum/nl/categories.php diff --git a/resources/lang/vendor/forum/nl/general.php b/lang/vendor/forum/nl/general.php similarity index 100% rename from resources/lang/vendor/forum/nl/general.php rename to lang/vendor/forum/nl/general.php diff --git a/resources/lang/vendor/forum/nl/posts.php b/lang/vendor/forum/nl/posts.php similarity index 100% rename from resources/lang/vendor/forum/nl/posts.php rename to lang/vendor/forum/nl/posts.php diff --git a/resources/lang/vendor/forum/nl/threads.php b/lang/vendor/forum/nl/threads.php similarity index 100% rename from resources/lang/vendor/forum/nl/threads.php rename to lang/vendor/forum/nl/threads.php diff --git a/resources/lang/vendor/forum/nl/validation.php b/lang/vendor/forum/nl/validation.php similarity index 100% rename from resources/lang/vendor/forum/nl/validation.php rename to lang/vendor/forum/nl/validation.php diff --git a/resources/lang/vendor/forum/pt-br/categories.php b/lang/vendor/forum/pt-br/categories.php similarity index 100% rename from resources/lang/vendor/forum/pt-br/categories.php rename to lang/vendor/forum/pt-br/categories.php diff --git a/resources/lang/vendor/forum/pt-br/general.php b/lang/vendor/forum/pt-br/general.php similarity index 100% rename from resources/lang/vendor/forum/pt-br/general.php rename to lang/vendor/forum/pt-br/general.php diff --git a/resources/lang/vendor/forum/pt-br/posts.php b/lang/vendor/forum/pt-br/posts.php similarity index 100% rename from resources/lang/vendor/forum/pt-br/posts.php rename to lang/vendor/forum/pt-br/posts.php diff --git a/resources/lang/vendor/forum/pt-br/threads.php b/lang/vendor/forum/pt-br/threads.php similarity index 100% rename from resources/lang/vendor/forum/pt-br/threads.php rename to lang/vendor/forum/pt-br/threads.php diff --git a/resources/lang/vendor/forum/pt-br/validation.php b/lang/vendor/forum/pt-br/validation.php similarity index 100% rename from resources/lang/vendor/forum/pt-br/validation.php rename to lang/vendor/forum/pt-br/validation.php diff --git a/resources/lang/vendor/forum/ro/categories.php b/lang/vendor/forum/ro/categories.php similarity index 100% rename from resources/lang/vendor/forum/ro/categories.php rename to lang/vendor/forum/ro/categories.php diff --git a/resources/lang/vendor/forum/ro/general.php b/lang/vendor/forum/ro/general.php similarity index 100% rename from resources/lang/vendor/forum/ro/general.php rename to lang/vendor/forum/ro/general.php diff --git a/resources/lang/vendor/forum/ro/posts.php b/lang/vendor/forum/ro/posts.php similarity index 100% rename from resources/lang/vendor/forum/ro/posts.php rename to lang/vendor/forum/ro/posts.php diff --git a/resources/lang/vendor/forum/ro/threads.php b/lang/vendor/forum/ro/threads.php similarity index 100% rename from resources/lang/vendor/forum/ro/threads.php rename to lang/vendor/forum/ro/threads.php diff --git a/resources/lang/vendor/forum/ro/validation.php b/lang/vendor/forum/ro/validation.php similarity index 100% rename from resources/lang/vendor/forum/ro/validation.php rename to lang/vendor/forum/ro/validation.php diff --git a/resources/lang/vendor/forum/ru/categories.php b/lang/vendor/forum/ru/categories.php similarity index 100% rename from resources/lang/vendor/forum/ru/categories.php rename to lang/vendor/forum/ru/categories.php diff --git a/resources/lang/vendor/forum/ru/general.php b/lang/vendor/forum/ru/general.php similarity index 100% rename from resources/lang/vendor/forum/ru/general.php rename to lang/vendor/forum/ru/general.php diff --git a/resources/lang/vendor/forum/ru/posts.php b/lang/vendor/forum/ru/posts.php similarity index 100% rename from resources/lang/vendor/forum/ru/posts.php rename to lang/vendor/forum/ru/posts.php diff --git a/resources/lang/vendor/forum/ru/threads.php b/lang/vendor/forum/ru/threads.php similarity index 100% rename from resources/lang/vendor/forum/ru/threads.php rename to lang/vendor/forum/ru/threads.php diff --git a/resources/lang/vendor/forum/ru/validation.php b/lang/vendor/forum/ru/validation.php similarity index 100% rename from resources/lang/vendor/forum/ru/validation.php rename to lang/vendor/forum/ru/validation.php diff --git a/resources/lang/vendor/forum/sr/categories.php b/lang/vendor/forum/sr/categories.php similarity index 100% rename from resources/lang/vendor/forum/sr/categories.php rename to lang/vendor/forum/sr/categories.php diff --git a/resources/lang/vendor/forum/sr/general.php b/lang/vendor/forum/sr/general.php similarity index 100% rename from resources/lang/vendor/forum/sr/general.php rename to lang/vendor/forum/sr/general.php diff --git a/resources/lang/vendor/forum/sr/posts.php b/lang/vendor/forum/sr/posts.php similarity index 100% rename from resources/lang/vendor/forum/sr/posts.php rename to lang/vendor/forum/sr/posts.php diff --git a/resources/lang/vendor/forum/sr/threads.php b/lang/vendor/forum/sr/threads.php similarity index 100% rename from resources/lang/vendor/forum/sr/threads.php rename to lang/vendor/forum/sr/threads.php diff --git a/resources/lang/vendor/forum/sr/validation.php b/lang/vendor/forum/sr/validation.php similarity index 100% rename from resources/lang/vendor/forum/sr/validation.php rename to lang/vendor/forum/sr/validation.php diff --git a/resources/lang/vendor/forum/sv/categories.php b/lang/vendor/forum/sv/categories.php similarity index 100% rename from resources/lang/vendor/forum/sv/categories.php rename to lang/vendor/forum/sv/categories.php diff --git a/resources/lang/vendor/forum/sv/general.php b/lang/vendor/forum/sv/general.php similarity index 100% rename from resources/lang/vendor/forum/sv/general.php rename to lang/vendor/forum/sv/general.php diff --git a/resources/lang/vendor/forum/sv/posts.php b/lang/vendor/forum/sv/posts.php similarity index 100% rename from resources/lang/vendor/forum/sv/posts.php rename to lang/vendor/forum/sv/posts.php diff --git a/resources/lang/vendor/forum/sv/threads.php b/lang/vendor/forum/sv/threads.php similarity index 100% rename from resources/lang/vendor/forum/sv/threads.php rename to lang/vendor/forum/sv/threads.php diff --git a/resources/lang/vendor/forum/sv/validation.php b/lang/vendor/forum/sv/validation.php similarity index 100% rename from resources/lang/vendor/forum/sv/validation.php rename to lang/vendor/forum/sv/validation.php diff --git a/resources/lang/vendor/forum/th/categories.php b/lang/vendor/forum/th/categories.php similarity index 100% rename from resources/lang/vendor/forum/th/categories.php rename to lang/vendor/forum/th/categories.php diff --git a/resources/lang/vendor/forum/th/general.php b/lang/vendor/forum/th/general.php similarity index 100% rename from resources/lang/vendor/forum/th/general.php rename to lang/vendor/forum/th/general.php diff --git a/resources/lang/vendor/forum/th/posts.php b/lang/vendor/forum/th/posts.php similarity index 100% rename from resources/lang/vendor/forum/th/posts.php rename to lang/vendor/forum/th/posts.php diff --git a/resources/lang/vendor/forum/th/threads.php b/lang/vendor/forum/th/threads.php similarity index 100% rename from resources/lang/vendor/forum/th/threads.php rename to lang/vendor/forum/th/threads.php diff --git a/resources/lang/vendor/forum/th/validation.php b/lang/vendor/forum/th/validation.php similarity index 100% rename from resources/lang/vendor/forum/th/validation.php rename to lang/vendor/forum/th/validation.php diff --git a/resources/lang/vendor/forum/tr/categories.php b/lang/vendor/forum/tr/categories.php similarity index 100% rename from resources/lang/vendor/forum/tr/categories.php rename to lang/vendor/forum/tr/categories.php diff --git a/resources/lang/vendor/forum/tr/general.php b/lang/vendor/forum/tr/general.php similarity index 100% rename from resources/lang/vendor/forum/tr/general.php rename to lang/vendor/forum/tr/general.php diff --git a/resources/lang/vendor/forum/tr/posts.php b/lang/vendor/forum/tr/posts.php similarity index 100% rename from resources/lang/vendor/forum/tr/posts.php rename to lang/vendor/forum/tr/posts.php diff --git a/resources/lang/vendor/forum/tr/threads.php b/lang/vendor/forum/tr/threads.php similarity index 100% rename from resources/lang/vendor/forum/tr/threads.php rename to lang/vendor/forum/tr/threads.php diff --git a/resources/lang/vendor/forum/tr/validation.php b/lang/vendor/forum/tr/validation.php similarity index 100% rename from resources/lang/vendor/forum/tr/validation.php rename to lang/vendor/forum/tr/validation.php diff --git a/resources/lang/vendor/forum/zh/categories.php b/lang/vendor/forum/zh/categories.php similarity index 100% rename from resources/lang/vendor/forum/zh/categories.php rename to lang/vendor/forum/zh/categories.php diff --git a/resources/lang/vendor/forum/zh/general.php b/lang/vendor/forum/zh/general.php similarity index 100% rename from resources/lang/vendor/forum/zh/general.php rename to lang/vendor/forum/zh/general.php diff --git a/resources/lang/vendor/forum/zh/posts.php b/lang/vendor/forum/zh/posts.php similarity index 100% rename from resources/lang/vendor/forum/zh/posts.php rename to lang/vendor/forum/zh/posts.php diff --git a/resources/lang/vendor/forum/zh/threads.php b/lang/vendor/forum/zh/threads.php similarity index 100% rename from resources/lang/vendor/forum/zh/threads.php rename to lang/vendor/forum/zh/threads.php diff --git a/resources/lang/vendor/forum/zh/validation.php b/lang/vendor/forum/zh/validation.php similarity index 100% rename from resources/lang/vendor/forum/zh/validation.php rename to lang/vendor/forum/zh/validation.php From 5de0e71685729d1b55e975b814c83614b4d7b357 Mon Sep 17 00:00:00 2001 From: Shift Date: Sat, 27 Apr 2024 08:20:14 +0000 Subject: [PATCH 09/47] Remove default `app` files --- app/Http/Middleware/Authenticate.php | 19 ------------- app/Http/Middleware/EncryptCookies.php | 17 ----------- .../Middleware/RedirectIfAuthenticated.php | 23 --------------- app/Http/Middleware/TrimStrings.php | 18 ------------ app/Http/Middleware/TrustProxies.php | 28 ------------------- app/Http/Middleware/VerifyCsrfToken.php | 26 ----------------- app/Providers/AuthServiceProvider.php | 24 ---------------- app/Providers/BroadcastServiceProvider.php | 19 ------------- 8 files changed, 174 deletions(-) delete mode 100644 app/Http/Middleware/Authenticate.php delete mode 100644 app/Http/Middleware/EncryptCookies.php delete mode 100644 app/Http/Middleware/RedirectIfAuthenticated.php delete mode 100644 app/Http/Middleware/TrimStrings.php delete mode 100644 app/Http/Middleware/TrustProxies.php delete mode 100644 app/Http/Middleware/VerifyCsrfToken.php delete mode 100644 app/Providers/AuthServiceProvider.php delete mode 100644 app/Providers/BroadcastServiceProvider.php diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php deleted file mode 100644 index 9b131d0d98..0000000000 --- a/app/Http/Middleware/Authenticate.php +++ /dev/null @@ -1,19 +0,0 @@ -expectsJson()) { - return route('login'); - } - } -} diff --git a/app/Http/Middleware/EncryptCookies.php b/app/Http/Middleware/EncryptCookies.php deleted file mode 100644 index 033136ad12..0000000000 --- a/app/Http/Middleware/EncryptCookies.php +++ /dev/null @@ -1,17 +0,0 @@ -check()) { - return redirect()->to('/'); - } - - return $next($request); - } -} diff --git a/app/Http/Middleware/TrimStrings.php b/app/Http/Middleware/TrimStrings.php deleted file mode 100644 index 5a50e7b5c8..0000000000 --- a/app/Http/Middleware/TrimStrings.php +++ /dev/null @@ -1,18 +0,0 @@ - 'App\Policies\ModelPolicy', - ]; - - /** - * Register any authentication / authorization services. - */ - public function boot(): void - { - } -} diff --git a/app/Providers/BroadcastServiceProvider.php b/app/Providers/BroadcastServiceProvider.php deleted file mode 100644 index 2be04f5d9d..0000000000 --- a/app/Providers/BroadcastServiceProvider.php +++ /dev/null @@ -1,19 +0,0 @@ - Date: Sat, 27 Apr 2024 08:20:15 +0000 Subject: [PATCH 10/47] Shift core files --- artisan | 54 ++----------- lang/en/validation.php | 179 ++++++++++++++++++++++++++++------------- public/index.php | 60 +++----------- 3 files changed, 144 insertions(+), 149 deletions(-) diff --git a/artisan b/artisan index 0cf63cb67d..8e04b42240 100755 --- a/artisan +++ b/artisan @@ -1,53 +1,15 @@ #!/usr/bin/env php handleCommand(new ArgvInput); - /* - |-------------------------------------------------------------------------- - | Run The Artisan Application - |-------------------------------------------------------------------------- - | - | When we run the console application, the current CLI command will be - | executed in this console and the response sent back to a terminal - | or another output device for the developers. Here goes nothing! - | - */ - - $kernel = $app->make(Illuminate\Contracts\Console\Kernel::class); - - $status = $kernel->handle( - $input = new Symfony\Component\Console\Input\ArgvInput, - new Symfony\Component\Console\Output\ConsoleOutput - ); - - /* - |-------------------------------------------------------------------------- - | Shutdown The Application - |-------------------------------------------------------------------------- - | - | Once Artisan has finished running, we will fire off the shutdown events - | so that any final work may be done by the application before we shut - | down the process. This is the last thing to happen to the request. - | - */ - - $kernel->terminate($input, $status); - - exit($status); +exit($status); diff --git a/lang/en/validation.php b/lang/en/validation.php index b59ca31d6a..aea190d40f 100644 --- a/lang/en/validation.php +++ b/lang/en/validation.php @@ -13,80 +13,151 @@ | */ - 'accepted' => 'The :attribute must be accepted.', - 'active_url' => 'The :attribute is not a valid URL.', - 'after' => 'The :attribute must be a date after :date.', - 'after_or_equal' => 'The :attribute must be a date after or equal to :date.', - 'alpha' => 'The :attribute may only contain letters.', - 'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.', - 'alpha_num' => 'The :attribute may only contain letters and numbers.', - 'array' => 'The :attribute must be an array.', - 'before' => 'The :attribute must be a date before :date.', - 'before_or_equal' => 'The :attribute must be a date before or equal to :date.', + 'accepted' => 'The :attribute field must be accepted.', + 'accepted_if' => 'The :attribute field must be accepted when :other is :value.', + 'active_url' => 'The :attribute field must be a valid URL.', + 'after' => 'The :attribute field must be a date after :date.', + 'after_or_equal' => 'The :attribute field must be a date after or equal to :date.', + 'alpha' => 'The :attribute field must only contain letters.', + 'alpha_dash' => 'The :attribute field must only contain letters, numbers, dashes, and underscores.', + 'alpha_num' => 'The :attribute field must only contain letters and numbers.', + 'array' => 'The :attribute field must be an array.', + 'ascii' => 'The :attribute field must only contain single-byte alphanumeric characters and symbols.', + 'before' => 'The :attribute field must be a date before :date.', + 'before_or_equal' => 'The :attribute field must be a date before or equal to :date.', 'between' => [ - 'numeric' => 'The :attribute must be between :min and :max.', - 'file' => 'The :attribute must be between :min and :max kilobytes.', - 'string' => 'The :attribute must be between :min and :max characters.', - 'array' => 'The :attribute must have between :min and :max items.', + 'array' => 'The :attribute field must have between :min and :max items.', + 'file' => 'The :attribute field must be between :min and :max kilobytes.', + 'numeric' => 'The :attribute field must be between :min and :max.', + 'string' => 'The :attribute field must be between :min and :max characters.', ], 'boolean' => 'The :attribute field must be true or false.', - 'confirmed' => 'The :attribute confirmation does not match.', - 'date' => 'The :attribute is not a valid date.', - 'date_format' => 'The :attribute does not match the format :format.', - 'different' => 'The :attribute and :other must be different.', - 'digits' => 'The :attribute must be :digits digits.', - 'digits_between' => 'The :attribute must be between :min and :max digits.', - 'dimensions' => 'The :attribute has invalid image dimensions.', + 'can' => 'The :attribute field contains an unauthorized value.', + 'confirmed' => 'The :attribute field confirmation does not match.', + 'current_password' => 'The password is incorrect.', + 'date' => 'The :attribute field must be a valid date.', + 'date_equals' => 'The :attribute field must be a date equal to :date.', + 'date_format' => 'The :attribute field must match the format :format.', + 'decimal' => 'The :attribute field must have :decimal decimal places.', + 'declined' => 'The :attribute field must be declined.', + 'declined_if' => 'The :attribute field must be declined when :other is :value.', + 'different' => 'The :attribute field and :other must be different.', + 'digits' => 'The :attribute field must be :digits digits.', + 'digits_between' => 'The :attribute field must be between :min and :max digits.', + 'dimensions' => 'The :attribute field has invalid image dimensions.', 'distinct' => 'The :attribute field has a duplicate value.', - 'email' => 'The :attribute must be a valid email address.', + 'doesnt_end_with' => 'The :attribute field must not end with one of the following: :values.', + 'doesnt_start_with' => 'The :attribute field must not start with one of the following: :values.', + 'email' => 'The :attribute field must be a valid email address.', + 'ends_with' => 'The :attribute field must end with one of the following: :values.', + 'enum' => 'The selected :attribute is invalid.', 'exists' => 'The selected :attribute is invalid.', - 'file' => 'The :attribute must be a file.', + 'extensions' => 'The :attribute field must have one of the following extensions: :values.', + 'file' => 'The :attribute field must be a file.', 'filled' => 'The :attribute field must have a value.', - 'image' => 'The :attribute must be an image.', + 'gt' => [ + 'array' => 'The :attribute field must have more than :value items.', + 'file' => 'The :attribute field must be greater than :value kilobytes.', + 'numeric' => 'The :attribute field must be greater than :value.', + 'string' => 'The :attribute field must be greater than :value characters.', + ], + 'gte' => [ + 'array' => 'The :attribute field must have :value items or more.', + 'file' => 'The :attribute field must be greater than or equal to :value kilobytes.', + 'numeric' => 'The :attribute field must be greater than or equal to :value.', + 'string' => 'The :attribute field must be greater than or equal to :value characters.', + ], + 'hex_color' => 'The :attribute field must be a valid hexadecimal color.', + 'image' => 'The :attribute field must be an image.', 'in' => 'The selected :attribute is invalid.', - 'in_array' => 'The :attribute field does not exist in :other.', - 'integer' => 'The :attribute must be an integer.', - 'ip' => 'The :attribute must be a valid IP address.', - 'ipv4' => 'The :attribute must be a valid IPv4 address.', - 'ipv6' => 'The :attribute must be a valid IPv6 address.', - 'json' => 'The :attribute must be a valid JSON string.', + 'in_array' => 'The :attribute field must exist in :other.', + 'integer' => 'The :attribute field must be an integer.', + 'ip' => 'The :attribute field must be a valid IP address.', + 'ipv4' => 'The :attribute field must be a valid IPv4 address.', + 'ipv6' => 'The :attribute field must be a valid IPv6 address.', + 'json' => 'The :attribute field must be a valid JSON string.', + 'list' => 'The :attribute field must be a list.', + 'lowercase' => 'The :attribute field must be lowercase.', + 'lt' => [ + 'array' => 'The :attribute field must have less than :value items.', + 'file' => 'The :attribute field must be less than :value kilobytes.', + 'numeric' => 'The :attribute field must be less than :value.', + 'string' => 'The :attribute field must be less than :value characters.', + ], + 'lte' => [ + 'array' => 'The :attribute field must not have more than :value items.', + 'file' => 'The :attribute field must be less than or equal to :value kilobytes.', + 'numeric' => 'The :attribute field must be less than or equal to :value.', + 'string' => 'The :attribute field must be less than or equal to :value characters.', + ], + 'mac_address' => 'The :attribute field must be a valid MAC address.', 'max' => [ - 'numeric' => 'The :attribute may not be greater than :max.', - 'file' => 'The :attribute may not be greater than :max kilobytes.', - 'string' => 'The :attribute may not be greater than :max characters.', - 'array' => 'The :attribute may not have more than :max items.', + 'array' => 'The :attribute field must not have more than :max items.', + 'file' => 'The :attribute field must not be greater than :max kilobytes.', + 'numeric' => 'The :attribute field must not be greater than :max.', + 'string' => 'The :attribute field must not be greater than :max characters.', ], - 'mimes' => 'The :attribute must be a file of type: :values.', - 'mimetypes' => 'The :attribute must be a file of type: :values.', + 'max_digits' => 'The :attribute field must not have more than :max digits.', + 'mimes' => 'The :attribute field must be a file of type: :values.', + 'mimetypes' => 'The :attribute field must be a file of type: :values.', 'min' => [ - 'numeric' => 'The :attribute must be at least :min.', - 'file' => 'The :attribute must be at least :min kilobytes.', - 'string' => 'The :attribute must be at least :min characters.', - 'array' => 'The :attribute must have at least :min items.', + 'array' => 'The :attribute field must have at least :min items.', + 'file' => 'The :attribute field must be at least :min kilobytes.', + 'numeric' => 'The :attribute field must be at least :min.', + 'string' => 'The :attribute field must be at least :min characters.', ], + 'min_digits' => 'The :attribute field must have at least :min digits.', + 'missing' => 'The :attribute field must be missing.', + 'missing_if' => 'The :attribute field must be missing when :other is :value.', + 'missing_unless' => 'The :attribute field must be missing unless :other is :value.', + 'missing_with' => 'The :attribute field must be missing when :values is present.', + 'missing_with_all' => 'The :attribute field must be missing when :values are present.', + 'multiple_of' => 'The :attribute field must be a multiple of :value.', 'not_in' => 'The selected :attribute is invalid.', - 'numeric' => 'The :attribute must be a number.', + 'not_regex' => 'The :attribute field format is invalid.', + 'numeric' => 'The :attribute field must be a number.', + 'password' => [ + 'letters' => 'The :attribute field must contain at least one letter.', + 'mixed' => 'The :attribute field must contain at least one uppercase and one lowercase letter.', + 'numbers' => 'The :attribute field must contain at least one number.', + 'symbols' => 'The :attribute field must contain at least one symbol.', + 'uncompromised' => 'The given :attribute has appeared in a data leak. Please choose a different :attribute.', + ], 'present' => 'The :attribute field must be present.', - 'regex' => 'The :attribute format is invalid.', + 'present_if' => 'The :attribute field must be present when :other is :value.', + 'present_unless' => 'The :attribute field must be present unless :other is :value.', + 'present_with' => 'The :attribute field must be present when :values is present.', + 'present_with_all' => 'The :attribute field must be present when :values are present.', + 'prohibited' => 'The :attribute field is prohibited.', + 'prohibited_if' => 'The :attribute field is prohibited when :other is :value.', + 'prohibited_unless' => 'The :attribute field is prohibited unless :other is in :values.', + 'prohibits' => 'The :attribute field prohibits :other from being present.', + 'regex' => 'The :attribute field format is invalid.', 'required' => 'The :attribute field is required.', + 'required_array_keys' => 'The :attribute field must contain entries for: :values.', 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_if_accepted' => 'The :attribute field is required when :other is accepted.', 'required_unless' => 'The :attribute field is required unless :other is in :values.', 'required_with' => 'The :attribute field is required when :values is present.', - 'required_with_all' => 'The :attribute field is required when :values is present.', + 'required_with_all' => 'The :attribute field is required when :values are present.', 'required_without' => 'The :attribute field is required when :values is not present.', 'required_without_all' => 'The :attribute field is required when none of :values are present.', - 'same' => 'The :attribute and :other must match.', + 'same' => 'The :attribute field must match :other.', 'size' => [ - 'numeric' => 'The :attribute must be :size.', - 'file' => 'The :attribute must be :size kilobytes.', - 'string' => 'The :attribute must be :size characters.', - 'array' => 'The :attribute must contain :size items.', + 'array' => 'The :attribute field must contain :size items.', + 'file' => 'The :attribute field must be :size kilobytes.', + 'numeric' => 'The :attribute field must be :size.', + 'string' => 'The :attribute field must be :size characters.', ], - 'string' => 'The :attribute must be a string.', - 'timezone' => 'The :attribute must be a valid zone.', + 'starts_with' => 'The :attribute field must start with one of the following: :values.', + 'string' => 'The :attribute field must be a string.', + 'timezone' => 'The :attribute field must be a valid timezone.', 'unique' => 'The :attribute has already been taken.', 'uploaded' => 'The :attribute failed to upload.', - 'url' => 'The :attribute format is invalid.', + 'uppercase' => 'The :attribute field must be uppercase.', + 'url' => 'The :attribute field must be a valid URL.', + 'ulid' => 'The :attribute field must be a valid ULID.', + 'uuid' => 'The :attribute field must be a valid UUID.', /* |-------------------------------------------------------------------------- @@ -110,9 +181,9 @@ | Custom Validation Attributes |-------------------------------------------------------------------------- | - | The following language lines are used to swap attribute place-holders - | with something more reader friendly such as E-Mail Address instead - | of "email". This simply helps us make messages a little cleaner. + | The following language lines are used to swap our attribute placeholder + | with something more reader friendly such as "E-Mail Address" instead + | of "email". This simply helps us make our message more expressive. | */ diff --git a/public/index.php b/public/index.php index 58500ccd56..947d98963f 100644 --- a/public/index.php +++ b/public/index.php @@ -1,55 +1,17 @@ make(Kernel::class); - - $response = $kernel->handle( - $request = Request::capture() - )->send(); - - $kernel->terminate($request, $response); +// Bootstrap Laravel and handle the request... +(require_once __DIR__.'/../bootstrap/app.php') + ->handleRequest(Request::capture()); From d7e65c055795643f9104ecccdb526e4c2e9021a5 Mon Sep 17 00:00:00 2001 From: Shift Date: Sat, 27 Apr 2024 08:20:22 +0000 Subject: [PATCH 11/47] Streamline config files --- config/.gitkeep | 0 config/app.php | 201 ++-------------------------------------- config/auth.php | 91 +----------------- config/broadcasting.php | 58 ------------ config/cache.php | 87 ----------------- config/database.php | 77 +-------------- config/filesystems.php | 61 ------------ config/hashing.php | 45 --------- config/logging.php | 62 +------------ config/mail.php | 104 --------------------- config/queue.php | 79 ---------------- config/services.php | 22 ----- config/session.php | 196 --------------------------------------- config/view.php | 36 ------- 14 files changed, 16 insertions(+), 1103 deletions(-) create mode 100644 config/.gitkeep delete mode 100644 config/broadcasting.php delete mode 100644 config/cache.php delete mode 100644 config/hashing.php delete mode 100644 config/queue.php delete mode 100644 config/session.php delete mode 100644 config/view.php diff --git a/config/.gitkeep b/config/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/config/app.php b/config/app.php index 59821b34db..73ad85ac22 100644 --- a/config/app.php +++ b/config/app.php @@ -1,152 +1,14 @@ env('APP_NAME', 'NNTmux'), - - /* - |-------------------------------------------------------------------------- - | Application Environment - |-------------------------------------------------------------------------- - | - | This value determines the "environment" your application is currently - | running in. This may determine how you prefer to configure various - | services your application utilizes. Set this in your ".env" file. - | - */ - - 'env' => env('APP_ENV', 'production'), - - /* - |-------------------------------------------------------------------------- - | Application Debug Mode - |-------------------------------------------------------------------------- - | - | When your application is in debug mode, detailed error messages with - | stack traces will be shown on every error that occurs within your - | application. If disabled, a simple generic error page is shown. - | - */ - - 'debug' => env('APP_DEBUG', false), - - /* - |-------------------------------------------------------------------------- - | Application URL - |-------------------------------------------------------------------------- - | - | This URL is used by the console to properly generate URLs when using - | the Artisan command line tool. You should set this to the root of - | your application so that it is used when running Artisan tasks. - | - */ - - 'url' => env('APP_URL', 'http://localhost'), - - 'asset_url' => env('ASSET_URL', null), - - /* - |-------------------------------------------------------------------------- - | Application Timezone - |-------------------------------------------------------------------------- - | - | Here you may specify the default timezone for your application, which - | will be used by the PHP date and date-time functions. We have gone - | ahead and set this to a sensible default for you out of the box. - | - */ - - 'timezone' => env('APP_TZ', 'UTC'), +use Illuminate\Support\Facades\Facade; +use Illuminate\Support\ServiceProvider; - /* - |-------------------------------------------------------------------------- - | Application Locale Configuration - |-------------------------------------------------------------------------- - | - | The application locale determines the default locale that will be used - | by the translation service provider. You are free to set this value - | to any of the locales which will be supported by the application. - | - */ - - 'locale' => 'en', - - /* - |-------------------------------------------------------------------------- - | Application Fallback Locale - |-------------------------------------------------------------------------- - | - | The fallback locale determines the locale to use when the current one - | is not available. You may change the value to correspond to any of - | the language folders that are provided through your application. - | - */ - - 'fallback_locale' => 'en', - - /* - |-------------------------------------------------------------------------- - | Encryption Key - |-------------------------------------------------------------------------- - | - | This key is used by the Illuminate encrypter service and should be set - | to a random, 32 character string, otherwise these encrypted strings - | will not be safe. Please do this before deploying an application! - | - */ - - 'key' => env('APP_KEY'), - - 'cipher' => 'AES-256-CBC', - - /* - |-------------------------------------------------------------------------- - | Autoloaded Service Providers - |-------------------------------------------------------------------------- - | - | The service providers listed here will be automatically loaded on the - | request to your application. Feel free to add your own services to - | this array to grant expanded functionality to your applications. - | - */ - - 'providers' => [ +return [ + 'providers' => ServiceProvider::defaultProviders()->merge([ /* * Laravel Framework Service Providers... */ - Illuminate\Auth\AuthServiceProvider::class, - Illuminate\Broadcasting\BroadcastServiceProvider::class, - Illuminate\Bus\BusServiceProvider::class, - Illuminate\Cache\CacheServiceProvider::class, - Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, - Illuminate\Cookie\CookieServiceProvider::class, - Illuminate\Database\DatabaseServiceProvider::class, - Illuminate\Encryption\EncryptionServiceProvider::class, - Illuminate\Filesystem\FilesystemServiceProvider::class, - Illuminate\Foundation\Providers\FoundationServiceProvider::class, - Illuminate\Hashing\HashServiceProvider::class, - Illuminate\Mail\MailServiceProvider::class, - Illuminate\Notifications\NotificationServiceProvider::class, - Illuminate\Pagination\PaginationServiceProvider::class, - Illuminate\Pipeline\PipelineServiceProvider::class, - Illuminate\Queue\QueueServiceProvider::class, - Illuminate\Redis\RedisServiceProvider::class, - Illuminate\Auth\Passwords\PasswordResetServiceProvider::class, - Illuminate\Session\SessionServiceProvider::class, - Illuminate\Translation\TranslationServiceProvider::class, - Illuminate\Validation\ValidationServiceProvider::class, - Illuminate\View\ViewServiceProvider::class, /* * Package Service Providers... @@ -165,60 +27,11 @@ Jrean\UserVerification\UserVerificationServiceProvider::class, App\Providers\RouteServiceProvider::class, App\Providers\UserServiceProvider::class, + ])->toArray(), - ], - - /* - |-------------------------------------------------------------------------- - | Class Aliases - |-------------------------------------------------------------------------- - | - | This array of class aliases will be registered when this application - | is started. However, feel free to register as many as you wish as - | the aliases are "lazy" loaded so they don't hinder performance. - | - */ - - 'aliases' => [ - - 'App' => Illuminate\Support\Facades\App::class, - 'Arr' => Illuminate\Support\Arr::class, - 'Artisan' => Illuminate\Support\Facades\Artisan::class, - 'Auth' => Illuminate\Support\Facades\Auth::class, - 'Blade' => Illuminate\Support\Facades\Blade::class, - 'Broadcast' => Illuminate\Support\Facades\Broadcast::class, - 'Bus' => Illuminate\Support\Facades\Bus::class, - 'Cache' => Illuminate\Support\Facades\Cache::class, - 'Config' => Illuminate\Support\Facades\Config::class, - 'Cookie' => Illuminate\Support\Facades\Cookie::class, - 'Crypt' => Illuminate\Support\Facades\Crypt::class, - 'DB' => Illuminate\Support\Facades\DB::class, - 'Eloquent' => Illuminate\Database\Eloquent\Model::class, - 'Event' => Illuminate\Support\Facades\Event::class, - 'File' => Illuminate\Support\Facades\File::class, - 'Gate' => Illuminate\Support\Facades\Gate::class, - 'Hash' => Illuminate\Support\Facades\Hash::class, - 'Http' => Illuminate\Support\Facades\Http::class, - 'Js' => Illuminate\Support\Js::class, - 'Lang' => Illuminate\Support\Facades\Lang::class, - 'Log' => Illuminate\Support\Facades\Log::class, - 'Mail' => Illuminate\Support\Facades\Mail::class, - 'Notification' => Illuminate\Support\Facades\Notification::class, - 'Password' => Illuminate\Support\Facades\Password::class, - 'Queue' => Illuminate\Support\Facades\Queue::class, - 'Redirect' => Illuminate\Support\Facades\Redirect::class, + 'aliases' => Facade::defaultAliases()->merge([ 'RedisManager' => Illuminate\Support\Facades\Redis::class, - 'Request' => Illuminate\Support\Facades\Request::class, - 'Response' => Illuminate\Support\Facades\Response::class, - 'Route' => Illuminate\Support\Facades\Route::class, - 'Schema' => Illuminate\Support\Facades\Schema::class, - 'Session' => Illuminate\Support\Facades\Session::class, - 'Storage' => Illuminate\Support\Facades\Storage::class, - 'Str' => Illuminate\Support\Str::class, - 'URL' => Illuminate\Support\Facades\URL::class, - 'Validator' => Illuminate\Support\Facades\Validator::class, - 'View' => Illuminate\Support\Facades\View::class, 'UserVerification' => Jrean\UserVerification\Facades\UserVerification::class, - ], + ])->toArray(), ]; diff --git a/config/auth.php b/config/auth.php index 706ea97c85..5b47cf5aa8 100644 --- a/config/auth.php +++ b/config/auth.php @@ -2,106 +2,17 @@ return [ - /* - |-------------------------------------------------------------------------- - | Authentication Defaults - |-------------------------------------------------------------------------- - | - | This option controls the default authentication "guard" and password - | reset options for your application. You may change these defaults - | as required, but they're a perfect start for most applications. - | - */ - - 'defaults' => [ - 'guard' => 'web', - 'passwords' => 'users', - ], - - /* - |-------------------------------------------------------------------------- - | Authentication Guards - |-------------------------------------------------------------------------- - | - | Next, you may define every authentication guard for your application. - | Of course, a great default configuration has been defined for you - | here which uses session storage and the Eloquent user provider. - | - | All authentication drivers have a user provider. This defines how the - | users are actually retrieved out of your database or other storage - | mechanisms used by this application to persist your user's data. - | - | Supported: "session", "token" - | - */ - 'guards' => [ - 'web' => [ - 'driver' => 'session', - 'provider' => 'users', - ], - 'api' => [ 'driver' => 'token', 'provider' => 'users', 'hash' => false, ], + 'rss' => [ 'driver' => 'token', 'provider' => 'users', ], ], - /* - |-------------------------------------------------------------------------- - | User Providers - |-------------------------------------------------------------------------- - | - | All authentication drivers have a user provider. This defines how the - | users are actually retrieved out of your database or other storage - | mechanisms used by this application to persist your user's data. - | - | If you have multiple user tables or models you may configure multiple - | sources which represent each model / table. These sources may then - | be assigned to any extra authentication guards you have defined. - | - | Supported: "database", "eloquent" - | - */ - - 'providers' => [ - 'users' => [ - 'driver' => 'eloquent', - 'model' => App\Models\User::class, - ], - - // 'users' => [ - // 'driver' => 'database', - // 'table' => 'users', - // ], - ], - - /* - |-------------------------------------------------------------------------- - | Resetting Passwords - |-------------------------------------------------------------------------- - | - | You may specify multiple password reset configurations if you have more - | than one user table or model in the application and you want to have - | separate password reset settings based on the specific user types. - | - | The expire time is the number of minutes that the reset token should be - | considered valid. This security feature keeps tokens short-lived so - | they have less time to be guessed. You may change this as needed. - | - */ - - 'passwords' => [ - 'users' => [ - 'provider' => 'users', - 'table' => 'password_resets', - 'expire' => 60, - ], - ], - ]; diff --git a/config/broadcasting.php b/config/broadcasting.php deleted file mode 100644 index 5eecd2b266..0000000000 --- a/config/broadcasting.php +++ /dev/null @@ -1,58 +0,0 @@ - env('BROADCAST_DRIVER', 'null'), - - /* - |-------------------------------------------------------------------------- - | Broadcast Connections - |-------------------------------------------------------------------------- - | - | Here you may define all of the broadcast connections that will be used - | to broadcast events to other systems or over websockets. Samples of - | each available type of connection are provided inside this array. - | - */ - - 'connections' => [ - - 'pusher' => [ - 'driver' => 'pusher', - 'key' => env('PUSHER_APP_KEY'), - 'secret' => env('PUSHER_APP_SECRET'), - 'app_id' => env('PUSHER_APP_ID'), - 'options' => [ - // - ], - ], - - 'redis' => [ - 'driver' => 'redis', - 'connection' => 'default', - ], - - 'log' => [ - 'driver' => 'log', - ], - - 'null' => [ - 'driver' => 'null', - ], - - ], - -]; diff --git a/config/cache.php b/config/cache.php deleted file mode 100644 index 0a3b4136a4..0000000000 --- a/config/cache.php +++ /dev/null @@ -1,87 +0,0 @@ - env('CACHE_DRIVER', 'file'), - /* - |-------------------------------------------------------------------------- - | Cache Stores - |-------------------------------------------------------------------------- - | - | Here you may define all of the cache "stores" for your application as - | well as their drivers. You may even define multiple stores for the - | same cache driver to group types of items stored in your caches. - | - */ - 'stores' => [ - 'apc' => [ - 'driver' => 'apc', - ], - 'array' => [ - 'driver' => 'array', - ], - 'database' => [ - 'driver' => 'database', - 'table' => 'cache', - 'connection' => null, - ], - 'file' => [ - 'driver' => 'file', - 'path' => storage_path('framework/cache/data'), - ], - 'memcached' => [ - 'driver' => 'memcached', - 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'), - 'sasl' => [ - env('MEMCACHED_USERNAME'), - env('MEMCACHED_PASSWORD'), - ], - 'options' => [ - // Memcached::OPT_CONNECT_TIMEOUT => 2000, - ], - 'servers' => [ - [ - 'host' => env('MEMCACHED_HOST', '127.0.0.1'), - 'port' => env('MEMCACHED_PORT', 11211), - 'weight' => 100, - ], - ], - ], - 'redis' => [ - 'driver' => 'redis', - 'connection' => 'cache', - ], - 'dynamodb' => [ - 'driver' => 'dynamodb', - 'key' => env('AWS_ACCESS_KEY_ID'), - 'secret' => env('AWS_SECRET_ACCESS_KEY'), - 'region' => env('AWS_REGION', 'us-east-1'), - 'table' => env('DYNAMODB_CACHE_TABLE', 'cache'), - ], - ], - /* - |-------------------------------------------------------------------------- - | Cache Key Prefix - |-------------------------------------------------------------------------- - | - | When utilizing a RAM based store such as APC or Memcached, there might - | be other applications utilizing the same cache. So, we'll specify a - | value to get prefixed to all our keys so we can avoid collisions. - | - */ - 'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_cache'), -]; diff --git a/config/database.php b/config/database.php index afe35a1aa6..91cb847def 100644 --- a/config/database.php +++ b/config/database.php @@ -4,44 +4,7 @@ return [ - /* - |-------------------------------------------------------------------------- - | Default Database Connection Name - |-------------------------------------------------------------------------- - | - | Here you may specify which of the database connections below you wish - | to use as your default connection for all database work. Of course - | you may use many connections at once using the Database library. - | - */ - - 'default' => env('DB_CONNECTION', 'mysql'), - - /* - |-------------------------------------------------------------------------- - | Database Connections - |-------------------------------------------------------------------------- - | - | Here are each of the database connections setup for your application. - | Of course, examples of configuring each database platform that is - | supported by Laravel is shown below to make development simple. - | - | - | All database work in Laravel is done through the PHP PDO facilities - | so make sure you have the driver for your particular database of - | choice installed on your machine before you begin development. - | - */ - 'connections' => [ - - 'sqlite' => [ - 'driver' => 'sqlite', - 'url' => env('DATABASE_URL'), - 'database' => env('DB_DATABASE', database_path('database.sqlite')), - 'prefix' => '', - ], - 'mysql' => [ 'driver' => 'mysql', 'url' => env('DATABASE_URL'), @@ -75,18 +38,6 @@ 'sslmode' => 'prefer', ], - 'sqlsrv' => [ - 'driver' => 'sqlsrv', - 'url' => env('DATABASE_URL'), - 'host' => env('DB_HOST', 'localhost'), - 'port' => env('DB_PORT', '1433'), - 'database' => env('DB_DATABASE', 'nntmux'), - 'username' => env('DB_USERNAME', 'nntmux'), - 'password' => env('DB_PASSWORD', ''), - 'charset' => 'utf8', - 'prefix' => '', - ], - 'sphinx' => [ 'driver' => 'mysql', 'host' => env('MANTICORESEARCH_HOST', '127.0.0.1'), @@ -95,32 +46,12 @@ 'unix_socket' => '', 'charset' => 'utf8', ], - ], - /* - |-------------------------------------------------------------------------- - | Migration Repository Table - |-------------------------------------------------------------------------- - | - | This table keeps track of all the migrations that have already run for - | your application. Using this information, we can determine which of - | the migrations on disk haven't actually been run in the database. - | - */ - - 'migrations' => 'migrations', - - /* - |-------------------------------------------------------------------------- - | Redis Databases - |-------------------------------------------------------------------------- - | - | Redis is an open source, fast, and advanced key-value store that also - | provides a richer set of commands than a typical key-value systems - | such as APC or Memcached. Laravel makes it easy to dig right in. - | - */ + 'migrations' => [ + 'table' => 'migrations', + 'update_date_on_publish' => false, // disable to preserve original behavior for existing applications + ], 'redis' => [ 'client' => env('REDIS_CLIENT', 'phpredis'), diff --git a/config/filesystems.php b/config/filesystems.php index 4544f60c41..bf2c99cd40 100644 --- a/config/filesystems.php +++ b/config/filesystems.php @@ -2,67 +2,6 @@ return [ - /* - |-------------------------------------------------------------------------- - | Default Filesystem Disk - |-------------------------------------------------------------------------- - | - | Here you may specify the default filesystem disk that should be used - | by the framework. The "local" disk, as well as a variety of cloud - | based disks are available to your application. Just store away! - | - */ - - 'default' => env('FILESYSTEM_DRIVER', 'local'), - - /* - |-------------------------------------------------------------------------- - | Default Cloud Filesystem Disk - |-------------------------------------------------------------------------- - | - | Many applications store files both locally and in the cloud. For this - | reason, you may specify a default "cloud" driver here. This driver - | will be bound as the Cloud disk implementation in the container. - | - */ - 'cloud' => env('FILESYSTEM_CLOUD', 's3'), - /* - |-------------------------------------------------------------------------- - | Filesystem Disks - |-------------------------------------------------------------------------- - | - | Here you may configure as many filesystem "disks" as you wish, and you - | may even configure multiple disks of the same driver. Defaults have - | been setup for each driver as an example of the required options. - | - | Supported Drivers: "local", "ftp", "s3", "rackspace" - | - */ - - 'disks' => [ - - 'local' => [ - 'driver' => 'local', - 'root' => storage_path('app'), - ], - - 'public' => [ - 'driver' => 'local', - 'root' => storage_path('app/public'), - 'url' => env('APP_URL').'/storage', - 'visibility' => 'public', - ], - - 's3' => [ - 'driver' => 's3', - 'key' => env('AWS_KEY'), - 'secret' => env('AWS_SECRET'), - 'region' => env('AWS_REGION'), - 'bucket' => env('AWS_BUCKET'), - ], - - ], - ]; diff --git a/config/hashing.php b/config/hashing.php deleted file mode 100644 index 3ed4c3a170..0000000000 --- a/config/hashing.php +++ /dev/null @@ -1,45 +0,0 @@ - env('PASSWORD_HASH', 'argon'), - /* - |-------------------------------------------------------------------------- - | Bcrypt Options - |-------------------------------------------------------------------------- - | - | Here you may specify the configuration options that should be used when - | passwords are hashed using the Bcrypt algorithm. This will allow you - | to control the amount of time it takes to hash the given password. - | - */ - 'bcrypt' => [ - 'rounds' => env('BCRYPT_ROUNDS', 10), - ], - /* - |-------------------------------------------------------------------------- - | Argon Options - |-------------------------------------------------------------------------- - | - | Here you may specify the configuration options that should be used when - | passwords are hashed using the Argon algorithm. These will allow you - | to control the amount of time it takes to hash the given password. - | - */ - 'argon' => [ - 'memory' => 1024, - 'threads' => 2, - 'time' => 2, - ], -]; diff --git a/config/logging.php b/config/logging.php index 865d7310ae..452c5a01dc 100644 --- a/config/logging.php +++ b/config/logging.php @@ -4,32 +4,6 @@ use Monolog\Handler\SyslogUdpHandler; return [ - /* - |-------------------------------------------------------------------------- - | Default Log Channel - |-------------------------------------------------------------------------- - | - | This option defines the default log channel that gets used when writing - | messages to the logs. The name specified in this option should match - | one of the channels defined in the "channels" configuration array. - | - */ - 'default' => env('LOG_CHANNEL', 'stack'), - - /* - |-------------------------------------------------------------------------- - | Log Channels - |-------------------------------------------------------------------------- - | - | Here you may configure the log channels for your application. Out of - | the box, Laravel uses the Monolog PHP logging library. This gives - | you a variety of powerful log handlers / formatters to utilize. - | - | Available Drivers: "single", "daily", "slack", "syslog", - | "errorlog", "monolog", - | "custom", "stack" - | - */ 'channels' => [ 'stack' => [ @@ -38,6 +12,7 @@ 'channels' => ['daily', 'flare'], 'ignore_exceptions' => false, ], + 'single' => [ 'driver' => 'single', 'path' => storage_path('logs/laravel.log'), @@ -46,6 +21,7 @@ 'permission' => 0775, 'locking' => false, ], + 'daily' => [ 'driver' => 'daily', 'path' => storage_path('logs/laravel.log'), @@ -55,40 +31,10 @@ 'permission' => 0775, 'locking' => false, ], - 'slack' => [ - 'driver' => 'slack', - 'url' => env('LOG_SLACK_WEBHOOK_URL'), - 'username' => 'Laravel Log', - 'emoji' => ':boom:', - 'level' => 'critical', - ], - 'papertrail' => [ - 'driver' => 'monolog', - 'level' => 'debug', - 'handler' => SyslogUdpHandler::class, - 'handler_with' => [ - 'host' => env('PAPERTRAIL_URL'), - 'port' => env('PAPERTRAIL_PORT'), - ], - ], - 'stderr' => [ - 'driver' => 'monolog', - 'handler' => StreamHandler::class, - 'formatter' => env('LOG_STDERR_FORMATTER'), - 'with' => [ - 'stream' => 'php://stderr', - ], - ], - 'syslog' => [ - 'driver' => 'syslog', - 'level' => 'debug', - ], - 'errorlog' => [ - 'driver' => 'errorlog', - 'level' => 'debug', - ], + 'flare' => [ 'driver' => 'flare', ], ], + ]; diff --git a/config/mail.php b/config/mail.php index 608b00ac55..2b0c903856 100644 --- a/config/mail.php +++ b/config/mail.php @@ -2,122 +2,18 @@ return [ - /* - |-------------------------------------------------------------------------- - | Mail Driver - |-------------------------------------------------------------------------- - | - | Laravel supports both SMTP and PHP's "mail" function as drivers for the - | sending of e-mail. You may specify which one you're using throughout - | your application here. By default, Laravel is setup for SMTP mail. - | - | Supported: "smtp", "sendmail", "mailgun", "mandrill", "ses", - | "sparkpost", "postmark", "log", "array" - | - */ - 'driver' => env('MAIL_DRIVER', 'smtp'), - /* - |-------------------------------------------------------------------------- - | SMTP Host Address - |-------------------------------------------------------------------------- - | - | Here you may provide the host address of the SMTP server used by your - | applications. A default option is provided that is compatible with - | the Mailgun mail service which will provide reliable deliveries. - | - */ - 'host' => env('MAIL_HOST', 'smtp.mailgun.org'), - /* - |-------------------------------------------------------------------------- - | SMTP Host Port - |-------------------------------------------------------------------------- - | - | This is the SMTP port used by your application to deliver e-mails to - | users of the application. Like the host we have set this value to - | stay compatible with the Mailgun e-mail application by default. - | - */ - 'port' => env('MAIL_PORT', 587), - /* - |-------------------------------------------------------------------------- - | Global "From" Address - |-------------------------------------------------------------------------- - | - | You may wish for all e-mails sent by your application to be sent from - | the same address. Here, you may specify a name and address that is - | used globally for all e-mails that are sent by your application. - | - */ - - 'from' => [ - 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), - 'name' => env('MAIL_FROM_NAME', 'Example'), - ], - - /* - |-------------------------------------------------------------------------- - | E-Mail Encryption Protocol - |-------------------------------------------------------------------------- - | - | Here you may specify the encryption protocol that should be used when - | the application send e-mail messages. A sensible default using the - | transport layer security protocol should provide great security. - | - */ - 'encryption' => env('MAIL_ENCRYPTION', 'tls'), - /* - |-------------------------------------------------------------------------- - | SMTP Server Username - |-------------------------------------------------------------------------- - | - | If your SMTP server requires a username for authentication, you should - | set it here. This will get used to authenticate with your server on - | connection. You may also set the "password" value below this one. - | - */ - 'username' => env('MAIL_USERNAME'), 'password' => env('MAIL_PASSWORD'), - /* - |-------------------------------------------------------------------------- - | Sendmail System Path - |-------------------------------------------------------------------------- - | - | When using the "sendmail" driver to send e-mails, we will need to know - | the path to where Sendmail lives on this server. A default path has - | been provided here, which will work well on most of your systems. - | - */ - 'sendmail' => '/usr/sbin/sendmail -bs', - /* - |-------------------------------------------------------------------------- - | Markdown Mail Settings - |-------------------------------------------------------------------------- - | - | If you are using Markdown based email rendering, you may configure your - | theme and component paths here, allowing you to customize the design - | of the emails. Or, you may simply stick with the Laravel defaults! - | - */ - - 'markdown' => [ - 'theme' => 'default', - - 'paths' => [ - resource_path('views/vendor/mail'), - ], - ], - ]; diff --git a/config/queue.php b/config/queue.php deleted file mode 100644 index ff9b45bfa3..0000000000 --- a/config/queue.php +++ /dev/null @@ -1,79 +0,0 @@ - env('QUEUE_CONNECTION', 'sync'), - - /* - |-------------------------------------------------------------------------- - | Queue Connections - |-------------------------------------------------------------------------- - | - | Here you may configure the connection information for each server that - | is used by your application. A default configuration has been added - | for each back-end shipped with Laravel. You are free to add more. - | - */ - - 'connections' => [ - 'sync' => [ - 'driver' => 'sync', - ], - 'database' => [ - 'driver' => 'database', - 'table' => 'jobs', - 'queue' => 'default', - 'retry_after' => 90, - ], - 'beanstalkd' => [ - 'driver' => 'beanstalkd', - 'host' => 'localhost', - 'queue' => 'default', - 'retry_after' => 90, - 'block_for' => 0, - ], - 'sqs' => [ - 'driver' => 'sqs', - 'key' => env('AWS_ACCESS_KEY_ID'), - 'secret' => env('AWS_SECRET_ACCESS_KEY'), - 'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'), - 'queue' => env('SQS_QUEUE', 'your-queue-name'), - 'region' => env('AWS_REGION', 'us-east-1'), - ], - 'redis' => [ - 'driver' => 'redis', - 'connection' => 'default', - 'queue' => env('REDIS_QUEUE', 'default'), - 'retry_after' => 90, - 'block_for' => null, - ], - ], - /* - |-------------------------------------------------------------------------- - | Failed Queue Jobs - |-------------------------------------------------------------------------- - | - | These options configure the behavior of failed queue job logging so you - | can control which database and table are used to store the jobs that - | have failed. You may change them to any database / table you wish. - | - */ - 'failed' => [ - 'database' => env('DB_CONNECTION', 'mysql'), - 'table' => 'failed_jobs', - ], - -]; diff --git a/config/services.php b/config/services.php index e470f65987..cf345c69c9 100644 --- a/config/services.php +++ b/config/services.php @@ -2,34 +2,12 @@ return [ - /* - |-------------------------------------------------------------------------- - | Third Party Services - |-------------------------------------------------------------------------- - | - | This file is for storing the credentials for third party services such - | as Stripe, Mailgun, SparkPost and others. This file provides a sane - | default location for this type of information, allowing packages - | to have a conventional place to find your various credentials. - | - */ - 'mailgun' => [ 'domain' => env('MAILGUN_DOMAIN'), 'secret' => env('MAILGUN_SECRET'), 'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'), ], - 'postmark' => [ - 'token' => env('POSTMARK_TOKEN'), - ], - - 'ses' => [ - 'key' => env('SES_KEY'), - 'secret' => env('SES_SECRET'), - 'region' => env('SES_REGION', 'us-east-1'), - ], - 'sparkpost' => [ 'secret' => env('SPARKPOST_SECRET'), ], diff --git a/config/session.php b/config/session.php deleted file mode 100644 index f5f481c7ae..0000000000 --- a/config/session.php +++ /dev/null @@ -1,196 +0,0 @@ - env('SESSION_DRIVER', 'cookie'), - - /* - |-------------------------------------------------------------------------- - | Session Lifetime - |-------------------------------------------------------------------------- - | - | Here you may specify the number of minutes that you wish the session - | to be allowed to remain idle before it expires. If you want them - | to immediately expire on the browser closing, set that option. - | - */ - - 'lifetime' => 120, - - 'expire_on_close' => false, - - /* - |-------------------------------------------------------------------------- - | Session Encryption - |-------------------------------------------------------------------------- - | - | This option allows you to easily specify that all of your session data - | should be encrypted before it is stored. All encryption will be run - | automatically by Laravel and you can use the Session like normal. - | - */ - - 'encrypt' => env('SESSION_ENCRYPT', false), - - /* - |-------------------------------------------------------------------------- - | Session File Location - |-------------------------------------------------------------------------- - | - | When using the native session driver, we need a location where session - | files may be stored. A default has been set for you but a different - | location may be specified. This is only needed for file sessions. - | - */ - - 'files' => storage_path('framework/sessions'), - - /* - |-------------------------------------------------------------------------- - | Session Database Connection - |-------------------------------------------------------------------------- - | - | When using the "database" or "redis" session drivers, you may specify a - | connection that should be used to manage these sessions. This should - | correspond to a connection in your database configuration options. - | - */ - - 'connection' => 'session', - - /* - |-------------------------------------------------------------------------- - | Session Database Table - |-------------------------------------------------------------------------- - | - | When using the "database" session driver, you may specify the table we - | should use to manage the sessions. Of course, a sensible default is - | provided for you; however, you are free to change this as needed. - | - */ - - 'table' => 'sessions', - - /* - |-------------------------------------------------------------------------- - | Session Cache Store - |-------------------------------------------------------------------------- - | - | When using the "apc", "memcached", or "dynamodb" session drivers you may - | list a cache store that should be used for these sessions. This value - | must match with one of the application's configured cache "stores". - | - */ - 'store' => env('SESSION_STORE', null), - - /* - |-------------------------------------------------------------------------- - | Session Sweeping Lottery - |-------------------------------------------------------------------------- - | - | Some session drivers must manually sweep their storage location to get - | rid of old sessions from storage. Here are the chances that it will - | happen on a given request. By default, the odds are 2 out of 100. - | - */ - - 'lottery' => [2, 100], - - /* - |-------------------------------------------------------------------------- - | Session Cookie Name - |-------------------------------------------------------------------------- - | - | Here you may change the name of the cookie used to identify a session - | instance by ID. The name specified here will get used every time a - | new session cookie is created by the framework for every driver. - | - */ - 'cookie' => env( - 'SESSION_COOKIE', - Str::slug(env('APP_NAME', 'laravel'), '_').'_session' - ), - - /* - |-------------------------------------------------------------------------- - | Session Cookie Path - |-------------------------------------------------------------------------- - | - | The session cookie path determines the path for which the cookie will - | be regarded as available. Typically, this will be the root path of - | your application but you are free to change this when necessary. - | - */ - - 'path' => '/', - - /* - |-------------------------------------------------------------------------- - | Session Cookie Domain - |-------------------------------------------------------------------------- - | - | Here you may change the domain of the cookie used to identify a session - | in your application. This will determine which domains the cookie is - | available to in your application. A sensible default has been set. - | - */ - - 'domain' => env('SESSION_DOMAIN', null), - - /* - |-------------------------------------------------------------------------- - | HTTPS Only Cookies - |-------------------------------------------------------------------------- - | - | By setting this option to true, session cookies will only be sent back - | to the server if the browser has a HTTPS connection. This will keep - | the cookie from being sent to you if it can not be done securely. - | - */ - - 'secure' => env('SESSION_SECURE_COOKIE', false), - - /* - |-------------------------------------------------------------------------- - | HTTP Access Only - |-------------------------------------------------------------------------- - | - | Setting this value to true will prevent JavaScript from accessing the - | value of the cookie and the cookie will only be accessible through - | the HTTP protocol. You are free to modify this option if needed. - | - */ - - 'http_only' => false, - - /* - |-------------------------------------------------------------------------- - | Same-Site Cookies - |-------------------------------------------------------------------------- - | - | This option determines how your cookies behave when cross-site requests - | take place, and can be used to mitigate CSRF attacks. By default, we - | do not enable this as other CSRF protection services are in place. - | - | Supported: "lax", "strict", "none" - | - */ - 'same_site' => null, - -]; diff --git a/config/view.php b/config/view.php deleted file mode 100644 index 22b8a18d32..0000000000 --- a/config/view.php +++ /dev/null @@ -1,36 +0,0 @@ - [ - resource_path('views'), - ], - - /* - |-------------------------------------------------------------------------- - | Compiled View Path - |-------------------------------------------------------------------------- - | - | This option determines where all the compiled Blade templates will be - | stored for your application. Typically, this is within the storage - | directory. However, as usual, you are free to change this value. - | - */ - - 'compiled' => env( - 'VIEW_COMPILED_PATH', - realpath(storage_path('framework/views')) - ), - -]; From 40284c545d71deaeb7b06bbc992992a4944bf7af Mon Sep 17 00:00:00 2001 From: Shift Date: Sat, 27 Apr 2024 08:20:23 +0000 Subject: [PATCH 12/47] Set new `ENV` variables --- .env.example | 19 +++++++++++++++++-- config/database.php | 4 ++-- phpunit.xml | 2 +- 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/.env.example b/.env.example index 9932324f33..1b579ecebe 100644 --- a/.env.example +++ b/.env.example @@ -45,14 +45,25 @@ ADMIN_EMAIL= APP_NAME=NNTmux APP_ENV=production APP_DEBUG=false +APP_TIMEZONE=UTC APP_URL= + +APP_LOCALE=en +APP_FALLBACK_LOCALE=en +APP_FAKER_LOCALE=en_US + +APP_MAINTENANCE_DRIVER=file +APP_MAINTENANCE_STORE=database + +BCRYPT_ROUNDS=12 APP_TZ=Europe/Paris APP_KEY= LOG_CHANNEL=stack +LOG_STACK=single PASSWORD_HASH=argon2id -BROADCAST_DRIVER=log -CACHE_DRIVER=redis +BROADCAST_CONNECTION=log +CACHE_STORE=redis QUEUE_CONNECTION=sync REDIS_HOST=127.0.0.1 @@ -173,3 +184,7 @@ PURGE_INACTIVE_USERS=false OTP_ENABLED=false FLARE_KEY= + +SESSION_ENCRYPT=false +SESSION_PATH=/ +SESSION_DOMAIN=null diff --git a/config/database.php b/config/database.php index 91cb847def..bc7be74fa1 100644 --- a/config/database.php +++ b/config/database.php @@ -7,7 +7,7 @@ 'connections' => [ 'mysql' => [ 'driver' => 'mysql', - 'url' => env('DATABASE_URL'), + 'url' => env('DB_URL'), 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', 'nntmux'), @@ -26,7 +26,7 @@ 'pgsql' => [ 'driver' => 'pgsql', - 'url' => env('DATABASE_URL'), + 'url' => env('DB_URL'), 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '5432'), 'database' => env('DB_DATABASE', 'nntmux'), diff --git a/phpunit.xml b/phpunit.xml index 1e2c9a4490..888fcef4b2 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -14,7 +14,7 @@ - + From 091edebef073eee0e374a3144d7bd89aefbff6cc Mon Sep 17 00:00:00 2001 From: Shift Date: Sat, 27 Apr 2024 08:20:23 +0000 Subject: [PATCH 13/47] Default new `bootstrap/app.php` --- bootstrap/app.php | 72 +++++++++++------------------------------ bootstrap/providers.php | 5 +++ 2 files changed, 24 insertions(+), 53 deletions(-) create mode 100644 bootstrap/providers.php diff --git a/bootstrap/app.php b/bootstrap/app.php index 037e17df03..d5d7e70d2c 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -1,55 +1,21 @@ singleton( - Illuminate\Contracts\Http\Kernel::class, - App\Http\Kernel::class -); - -$app->singleton( - Illuminate\Contracts\Console\Kernel::class, - App\Console\Kernel::class -); - -$app->singleton( - Illuminate\Contracts\Debug\ExceptionHandler::class, - App\Exceptions\Handler::class -); - -/* -|-------------------------------------------------------------------------- -| Return The Application -|-------------------------------------------------------------------------- -| -| This script returns the application instance. The instance is given to -| the calling script so we can separate the building of the instances -| from the actual running of the application and sending responses. -| -*/ - -return $app; +use Illuminate\Foundation\Application; +use Illuminate\Foundation\Configuration\Exceptions; +use Illuminate\Foundation\Configuration\Middleware; + +return Application::configure(basePath: dirname(__DIR__)) + ->withProviders() + ->withRouting( + web: __DIR__.'/../routes/web.php', + // api: __DIR__.'/../routes/api.php', + commands: __DIR__.'/../routes/console.php', + // channels: __DIR__.'/../routes/channels.php', + health: '/up', + ) + ->withMiddleware(function (Middleware $middleware) { + // + }) + ->withExceptions(function (Exceptions $exceptions) { + // + })->create(); diff --git a/bootstrap/providers.php b/bootstrap/providers.php new file mode 100644 index 0000000000..38b258d185 --- /dev/null +++ b/bootstrap/providers.php @@ -0,0 +1,5 @@ + Date: Sat, 27 Apr 2024 08:20:23 +0000 Subject: [PATCH 14/47] Re-register HTTP middleware --- app/Http/Kernel.php | 69 --------------------------------------------- bootstrap/app.php | 29 ++++++++++++++++++- 2 files changed, 28 insertions(+), 70 deletions(-) delete mode 100644 app/Http/Kernel.php diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php deleted file mode 100644 index 5d1f256396..0000000000 --- a/app/Http/Kernel.php +++ /dev/null @@ -1,69 +0,0 @@ - [ - Middleware\EncryptCookies::class, - \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, - \Illuminate\Session\Middleware\StartSession::class, - \Illuminate\Session\Middleware\AuthenticateSession::class, - \Illuminate\View\Middleware\ShareErrorsFromSession::class, - Middleware\VerifyCsrfToken::class, - \Illuminate\Routing\Middleware\SubstituteBindings::class, - ], - - 'api' => [ - 'throttle:60,1', - 'bindings', - ], - ]; - - /** - * The application's route middleware. - * - * These middleware may be assigned to groups or used individually. - * - * @var array - */ - protected $middlewareAliases = [ - 'auth' => \Illuminate\Auth\Middleware\Authenticate::class, - 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, - 'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, - 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, - 'can' => \Illuminate\Auth\Middleware\Authorize::class, - 'guest' => Middleware\RedirectIfAuthenticated::class, - 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, - 'isVerified' => \Jrean\UserVerification\Middleware\IsVerified::class, - 'role' => \Spatie\Permission\Middleware\RoleMiddleware::class, - 'permission' => \Spatie\Permission\Middleware\PermissionMiddleware::class, - 'role_or_permission' => \Spatie\Permission\Middleware\RoleOrPermissionMiddleware::class, - 'clearance' => Middleware\ClearanceMiddleware::class, - '2fa' => Middleware\Google2FAMiddleware::class, - ]; -} diff --git a/bootstrap/app.php b/bootstrap/app.php index d5d7e70d2c..2de7e2d559 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -14,7 +14,34 @@ health: '/up', ) ->withMiddleware(function (Middleware $middleware) { - // + $middleware->redirectGuestsTo(fn () => route('login')); + $middleware->redirectUsersTo('/'); + + $middleware->validateCsrfTokens(except: [ + 'failed', + 'admin/*', + 'btcpay/webhook', + ]); + + $middleware->append([ + \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class, + \Monicahq\Cloudflare\Http\Middleware\TrustProxies::class, + \App\Http\Middleware\ForceJsonOnAPI::class, + ]); + + $middleware->web(\Illuminate\Session\Middleware\AuthenticateSession::class); + + $middleware->throttleApi('60,1'); + + $middleware->alias([ + '2fa' => \App\Http\Middleware\Google2FAMiddleware::class, + 'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, + 'clearance' => \App\Http\Middleware\ClearanceMiddleware::class, + 'isVerified' => \Jrean\UserVerification\Middleware\IsVerified::class, + 'permission' => \Spatie\Permission\Middleware\PermissionMiddleware::class, + 'role' => \Spatie\Permission\Middleware\RoleMiddleware::class, + 'role_or_permission' => \Spatie\Permission\Middleware\RoleOrPermissionMiddleware::class, + ]); }) ->withExceptions(function (Exceptions $exceptions) { // From f9d038146b0e9461fb3ad1c83977b99afdef5efe Mon Sep 17 00:00:00 2001 From: Shift Date: Sat, 27 Apr 2024 08:20:23 +0000 Subject: [PATCH 15/47] Consolidate service providers --- app/Providers/EventServiceProvider.php | 43 -------------------------- 1 file changed, 43 deletions(-) delete mode 100644 app/Providers/EventServiceProvider.php diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php deleted file mode 100644 index 3bd786af3c..0000000000 --- a/app/Providers/EventServiceProvider.php +++ /dev/null @@ -1,43 +0,0 @@ - [ - SendEmailVerificationNotification::class, - ], - - UserLoggedIn::class => [ - UpdateUserLoggedIn::class, - ], - - UserAccessedApi::class => [ - UpdateUserAccessedApi::class, - ], - ]; - - /** - * Register any events for your application. - */ - public function boot(): void - { - parent::boot(); - - // - } -} From 099db99025c79951bbaf777045252690fe5f3a20 Mon Sep 17 00:00:00 2001 From: Shift Date: Sat, 27 Apr 2024 08:20:23 +0000 Subject: [PATCH 16/47] Re-register service providers --- bootstrap/app.php | 5 ++++- bootstrap/providers.php | 4 ++++ config/app.php | 23 ----------------------- 3 files changed, 8 insertions(+), 24 deletions(-) diff --git a/bootstrap/app.php b/bootstrap/app.php index 2de7e2d559..dc804ae7e5 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -5,7 +5,10 @@ use Illuminate\Foundation\Configuration\Middleware; return Application::configure(basePath: dirname(__DIR__)) - ->withProviders() + ->withProviders([ + \Laravel\Tinker\TinkerServiceProvider::class, + \Jrean\UserVerification\UserVerificationServiceProvider::class, + ]) ->withRouting( web: __DIR__.'/../routes/web.php', // api: __DIR__.'/../routes/api.php', diff --git a/bootstrap/providers.php b/bootstrap/providers.php index 38b258d185..ffc860cbb1 100644 --- a/bootstrap/providers.php +++ b/bootstrap/providers.php @@ -2,4 +2,8 @@ return [ App\Providers\AppServiceProvider::class, + App\Providers\HorizonServiceProvider::class, + App\Providers\TelescopeServiceProvider::class, + App\Providers\RouteServiceProvider::class, + App\Providers\UserServiceProvider::class, ]; diff --git a/config/app.php b/config/app.php index 73ad85ac22..8021bd9a78 100644 --- a/config/app.php +++ b/config/app.php @@ -5,29 +5,6 @@ return [ - 'providers' => ServiceProvider::defaultProviders()->merge([ - /* - * Laravel Framework Service Providers... - */ - - /* - * Package Service Providers... - */ - Laravel\Tinker\TinkerServiceProvider::class, - - /* - * Application Service Providers... - */ - App\Providers\AppServiceProvider::class, - App\Providers\AuthServiceProvider::class, - // App\Providers\BroadcastServiceProvider::class, - App\Providers\EventServiceProvider::class, - App\Providers\HorizonServiceProvider::class, - App\Providers\TelescopeServiceProvider::class, - Jrean\UserVerification\UserVerificationServiceProvider::class, - App\Providers\RouteServiceProvider::class, - App\Providers\UserServiceProvider::class, - ])->toArray(), 'aliases' => Facade::defaultAliases()->merge([ 'RedisManager' => Illuminate\Support\Facades\Redis::class, From 424b56d8d0435d37bcdad5c4dbf8f8e2d124b523 Mon Sep 17 00:00:00 2001 From: Shift Date: Sat, 27 Apr 2024 08:20:27 +0000 Subject: [PATCH 17/47] Re-register routes --- bootstrap/app.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bootstrap/app.php b/bootstrap/app.php index dc804ae7e5..2219604d21 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -11,9 +11,9 @@ ]) ->withRouting( web: __DIR__.'/../routes/web.php', - // api: __DIR__.'/../routes/api.php', + api: __DIR__.'/../routes/api.php', commands: __DIR__.'/../routes/console.php', - // channels: __DIR__.'/../routes/channels.php', + channels: __DIR__.'/../routes/channels.php', health: '/up', ) ->withMiddleware(function (Middleware $middleware) { From 70d242d8d0324ba403283d93913ecf875c67f7a9 Mon Sep 17 00:00:00 2001 From: Shift Date: Sat, 27 Apr 2024 08:20:28 +0000 Subject: [PATCH 18/47] Re-register scheduled commands --- app/Console/Kernel.php | 48 ------------------------------------------ routes/console.php | 17 +++++++++++++++ 2 files changed, 17 insertions(+), 48 deletions(-) delete mode 100644 app/Console/Kernel.php diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php deleted file mode 100644 index 9b2a62220b..0000000000 --- a/app/Console/Kernel.php +++ /dev/null @@ -1,48 +0,0 @@ -command('disposable:update')->weekly(); - $schedule->command('clean:directories')->hourly()->withoutOverlapping(); - $schedule->command('nntmux:delete-unverified-users')->twiceDaily(1, 13); - $schedule->command('nntmux:update-expired-roles')->daily(); - $schedule->command('nntmux:remove-bad')->hourly()->withoutOverlapping(); - $schedule->command('telescope:prune')->daily(); - $schedule->command('horizon:snapshot')->everyFiveMinutes()->withoutOverlapping(); - $schedule->command('cloudflare:reload')->daily(); - $schedule->command('cache:prune-stale-tags')->hourly(); - if (config('nntmux.purge_inactive_users') === true) { - $schedule->job(new RemoveInactiveAccounts())->daily(); - } - } - - /** - * Register the commands for the application. - */ - protected function commands(): void - { - $this->load(__DIR__.'/Commands'); - - require base_path('routes/console.php'); - } -} diff --git a/routes/console.php b/routes/console.php index 0130cb393b..f12f8b9721 100644 --- a/routes/console.php +++ b/routes/console.php @@ -1,5 +1,8 @@ comment(Inspiring::quote()); })->purpose('Display an inspiring quote'); + + +Schedule::command('disposable:update')->weekly(); +Schedule::command('clean:directories')->hourly()->withoutOverlapping(); +Schedule::command('nntmux:delete-unverified-users')->twiceDaily(1, 13); +Schedule::command('nntmux:update-expired-roles')->daily(); +Schedule::command('nntmux:remove-bad')->hourly()->withoutOverlapping(); +Schedule::command('telescope:prune')->daily(); +Schedule::command('horizon:snapshot')->everyFiveMinutes()->withoutOverlapping(); +Schedule::command('cloudflare:reload')->daily(); +Schedule::command('cache:prune-stale-tags')->hourly(); +if (config('nntmux.purge_inactive_users') === true) { + Schedule::job(new RemoveInactiveAccounts())->daily(); +} From 62e68c9ace4bc44219d866b3d49ce8103c213f01 Mon Sep 17 00:00:00 2001 From: Shift Date: Sat, 27 Apr 2024 08:20:28 +0000 Subject: [PATCH 19/47] Bump Composer dependencies --- composer.json | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/composer.json b/composer.json index b001139300..2e4a0f9a7a 100644 --- a/composer.json +++ b/composer.json @@ -54,7 +54,7 @@ "dariusiii/tmdb-laravel": "^7.0", "dborsatto/php-giantbomb": "^2.2", "divineomega/php-cli-progress-bar": "^2.1", - "fakerphp/faker": "^1.12", + "fakerphp/faker": "^1.23", "genealabs/laravel-caffeine": "^11.0", "geoip2/geoip2": "^3.0", "google/recaptcha": "^1.3", @@ -67,19 +67,19 @@ "kevinlebrun/colors.php": "^1.0", "laravel/framework": "^11.5", "laravel/horizon": "^5.23", - "laravel/pulse": "^1.0@beta", + "laravel/pulse": "dev-validation-errors", "laravel/sanctum": "^4.0", - "laravel/scout": "^10.0", + "laravel/scout": "^10.8", "laravel/telescope": "^5.0", - "laravel/tinker": "^2.8", + "laravel/tinker": "^2.9", "laravel/ui": "^4.4", "laravelcollective/html": "^6.4", "league/climate": "^3.8", - "mailerlite/laravel-elasticsearch": "^11.0", + "mailerlite/laravel-elasticsearch": "^11.1", "manticoresoftware/manticoresearch-php": "^3.0", - "marcreichel/igdb-laravel": "^4.1", + "marcreichel/igdb-laravel": "^4.2", "mhor/php-mediainfo": "^5.6", - "monicahq/laravel-cloudflare": "^3.5", + "monicahq/laravel-cloudflare": "^3.6", "monolog/monolog": "^3.5", "mtownsend/xml-to-array": "^2.0", "nesbot/carbon": "^3.3", @@ -88,22 +88,22 @@ "php-ffmpeg/php-ffmpeg": "^1.2", "php-http/guzzle7-adapter": "^1.0", "php-http/message": "^1.16", - "pragmarx/google2fa-laravel": "^2.1", + "pragmarx/google2fa-laravel": "^2.2", "predis/predis": "^2.2", - "propaganistas/laravel-disposable-email": "^2.2", + "propaganistas/laravel-disposable-email": "^2.3", "ramsey/uuid": "^4.7", "riari/laravel-forum": "^6.0", - "sentry/sentry-laravel": "^4.2", + "sentry/sentry-laravel": "^4.3", "smarty/smarty": "^4.3", "spatie/async": "^1.6", "spatie/laravel-backup": "^8.6", - "spatie/laravel-directory-cleanup": "^1.9", - "spatie/laravel-fractal": "^6.0", + "spatie/laravel-directory-cleanup": "^1.10", + "spatie/laravel-fractal": "^6.1", "spatie/laravel-ignition": "^2.4", - "spatie/laravel-image-optimizer": "^1.7", + "spatie/laravel-image-optimizer": "^1.8", "spatie/laravel-permission": "^6.3", "sspat/es-query-sanitizer": "^1.0", - "stechstudio/laravel-zipstream": "^4.13", + "stechstudio/laravel-zipstream": "^4.14", "symfony/http-client": "^7.0", "symfony/postmark-mailer": "^7.0", "symfony/process": "^7.0", @@ -114,19 +114,19 @@ "require-dev": { "barryvdh/laravel-ide-helper": "^3.0", "beyondcode/laravel-dump-server": "^2.0", - "captainhook/captainhook": "^5.1", - "captainhook/plugin-composer": "^5.1", + "captainhook/captainhook": "^5.4", + "captainhook/plugin-composer": "^5.2", "driftingly/rector-laravel": "^0.29", "ergebnis/composer-normalize": "^2.30", "friendsofphp/php-cs-fixer": "^3.49", "jubeki/laravel-code-style": "^2.0", - "larastan/larastan": "^2.7", - "laravel/pint": "^1.6", - "laravel/sail": "^1.21", - "mockery/mockery": "^1.4.4", + "larastan/larastan": "^2.8", + "laravel/pint": "^1.13", + "laravel/sail": "^1.26", + "mockery/mockery": "^1.6", "nunomaduro/collision": "^8.0", - "php-coveralls/php-coveralls": "^2.0", - "phpunit/phpunit": "^10.1", + "php-coveralls/php-coveralls": "^2.4", + "phpunit/phpunit": "^10.5", "rector/rector": "^0.18.13" }, "suggest": { From fe642048f2567ed649f1f90778ad393c8599de1b Mon Sep 17 00:00:00 2001 From: Shift Date: Sat, 27 Apr 2024 08:20:32 +0000 Subject: [PATCH 20/47] Adopt Laravel type hints --- app/Console/Commands/CleanNZB.php | 2 +- app/Console/Commands/ImportNzbs.php | 2 +- app/Console/Commands/RecategorizeReleases.php | 2 +- app/Models/AnidbEpisode.php | 6 ++++-- app/Models/AnidbTitle.php | 5 +++-- app/Models/DnzbFailure.php | 5 +++-- app/Models/Genre.php | 3 ++- app/Models/Invitation.php | 3 ++- app/Models/MusicInfo.php | 3 ++- app/Models/Predb.php | 5 +++-- app/Models/Release.php | 2 +- app/Models/ReleaseNfo.php | 3 ++- app/Models/ReleasesGroups.php | 3 ++- app/Models/TvEpisode.php | 3 ++- app/Models/UsersRelease.php | 5 +++-- 15 files changed, 32 insertions(+), 20 deletions(-) diff --git a/app/Console/Commands/CleanNZB.php b/app/Console/Commands/CleanNZB.php index 7176637e41..edd7dfe7ff 100644 --- a/app/Console/Commands/CleanNZB.php +++ b/app/Console/Commands/CleanNZB.php @@ -34,7 +34,7 @@ class CleanNZB extends Command /** * Execute the console command. */ - public function handle() + public function handle(): void { // Check if any options are false if (! $this->option('notindb') && ! $this->option('notondisk')) { diff --git a/app/Console/Commands/ImportNzbs.php b/app/Console/Commands/ImportNzbs.php index 594a8ffaf3..d064676728 100644 --- a/app/Console/Commands/ImportNzbs.php +++ b/app/Console/Commands/ImportNzbs.php @@ -30,7 +30,7 @@ class ImportNzbs extends Command /** * Execute the console command. */ - public function handle() + public function handle(): void { if ($this->option('folder')) { if ($this->option('filename')) { diff --git a/app/Console/Commands/RecategorizeReleases.php b/app/Console/Commands/RecategorizeReleases.php index f6907b0bd5..5c6989d124 100644 --- a/app/Console/Commands/RecategorizeReleases.php +++ b/app/Console/Commands/RecategorizeReleases.php @@ -34,7 +34,7 @@ class RecategorizeReleases extends Command /** * Execute the console command. */ - public function handle() + public function handle(): void { $countQuery = Release::query(); if ($this->option('misc')) { diff --git a/app/Models/AnidbEpisode.php b/app/Models/AnidbEpisode.php index c3db72a9c2..6da41b624a 100644 --- a/app/Models/AnidbEpisode.php +++ b/app/Models/AnidbEpisode.php @@ -2,6 +2,8 @@ namespace App\Models; +use Illuminate\Database\Eloquent\Relations\BelongsTo; +use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Model; /** @@ -54,12 +56,12 @@ class AnidbEpisode extends Model */ protected $guarded = []; - public function title() + public function title(): BelongsTo { return $this->belongsTo(AnidbTitle::class, 'anidbid'); } - public function info() + public function info(): HasMany { return $this->hasMany(AnidbInfo::class, 'anidbid'); } diff --git a/app/Models/AnidbTitle.php b/app/Models/AnidbTitle.php index 94677909fe..816d4b0565 100644 --- a/app/Models/AnidbTitle.php +++ b/app/Models/AnidbTitle.php @@ -2,6 +2,7 @@ namespace App\Models; +use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Model; /** @@ -52,12 +53,12 @@ class AnidbTitle extends Model */ protected $guarded = []; - public function episode() + public function episode(): HasMany { return $this->hasMany(AnidbEpisode::class, 'anidbid'); } - public function info() + public function info(): HasMany { return $this->hasMany(AnidbInfo::class, 'anidbid'); } diff --git a/app/Models/DnzbFailure.php b/app/Models/DnzbFailure.php index 3703a778b7..a4a8b998e9 100644 --- a/app/Models/DnzbFailure.php +++ b/app/Models/DnzbFailure.php @@ -2,6 +2,7 @@ namespace App\Models; +use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Model; /** @@ -49,12 +50,12 @@ class DnzbFailure extends Model */ protected $guarded = []; - public function release() + public function release(): BelongsTo { return $this->belongsTo(Release::class, 'release_id'); } - public function user() + public function user(): BelongsTo { return $this->belongsTo(User::class, 'users_id'); } diff --git a/app/Models/Genre.php b/app/Models/Genre.php index 503d5a2651..3ee52d7f99 100644 --- a/app/Models/Genre.php +++ b/app/Models/Genre.php @@ -2,6 +2,7 @@ namespace App\Models; +use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Model; /** @@ -41,7 +42,7 @@ class Genre extends Model */ protected $guarded = []; - public function music() + public function music(): HasMany { return $this->hasMany(MusicInfo::class, 'genres_id'); } diff --git a/app/Models/Invitation.php b/app/Models/Invitation.php index 55f15fb5c6..8e2cc7ed80 100644 --- a/app/Models/Invitation.php +++ b/app/Models/Invitation.php @@ -2,6 +2,7 @@ namespace App\Models; +use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Model; /** @@ -47,7 +48,7 @@ class Invitation extends Model */ protected $guarded = ['id']; - public function user() + public function user(): BelongsTo { return $this->belongsTo(User::class, 'users_id'); } diff --git a/app/Models/MusicInfo.php b/app/Models/MusicInfo.php index 2258784ee8..b34f9af268 100644 --- a/app/Models/MusicInfo.php +++ b/app/Models/MusicInfo.php @@ -2,6 +2,7 @@ namespace App\Models; +use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Model; use Laravel\Scout\Searchable; @@ -71,7 +72,7 @@ class MusicInfo extends Model */ protected $guarded = []; - public function genre() + public function genre(): BelongsTo { return $this->belongsTo(Genre::class, 'genres_id'); } diff --git a/app/Models/Predb.php b/app/Models/Predb.php index 0b9c796d7a..b18bf557a8 100644 --- a/app/Models/Predb.php +++ b/app/Models/Predb.php @@ -2,6 +2,7 @@ namespace App\Models; +use Illuminate\Database\Eloquent\Relations\HasMany; use Blacklight\ColorCLI; use Blacklight\ConsoleTools; use Blacklight\ElasticSearchSiteSearch; @@ -89,12 +90,12 @@ class Predb extends Model */ protected $guarded = []; - public function hash() + public function hash(): HasMany { return $this->hasMany(PredbHash::class, 'predb_id'); } - public function release() + public function release(): HasMany { return $this->hasMany(Release::class, 'predb_id'); } diff --git a/app/Models/Release.php b/app/Models/Release.php index 6b81dd4700..6acb8cff58 100644 --- a/app/Models/Release.php +++ b/app/Models/Release.php @@ -180,7 +180,7 @@ public function userRelease(): HasMany return $this->hasMany(UsersRelease::class, 'releases_id'); } - public function file() + public function file(): HasMany { return $this->hasMany(ReleaseFile::class, 'releases_id'); } diff --git a/app/Models/ReleaseNfo.php b/app/Models/ReleaseNfo.php index 95ec445078..f54dec4edf 100644 --- a/app/Models/ReleaseNfo.php +++ b/app/Models/ReleaseNfo.php @@ -2,6 +2,7 @@ namespace App\Models; +use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Model; /** @@ -39,7 +40,7 @@ class ReleaseNfo extends Model */ protected $guarded = []; - public function release() + public function release(): BelongsTo { return $this->belongsTo(Release::class, 'releases_id'); } diff --git a/app/Models/ReleasesGroups.php b/app/Models/ReleasesGroups.php index 4ece8b993d..dbcf77e5e6 100644 --- a/app/Models/ReleasesGroups.php +++ b/app/Models/ReleasesGroups.php @@ -20,6 +20,7 @@ namespace App\Models; +use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Model; /** @@ -69,7 +70,7 @@ class ReleasesGroups extends Model */ protected $guarded = []; - public function release() + public function release(): BelongsTo { return $this->belongsTo(Release::class, 'releases_id'); } diff --git a/app/Models/TvEpisode.php b/app/Models/TvEpisode.php index 81878a7e53..2edad1a6cb 100644 --- a/app/Models/TvEpisode.php +++ b/app/Models/TvEpisode.php @@ -2,6 +2,7 @@ namespace App\Models; +use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\HasMany; @@ -51,7 +52,7 @@ class TvEpisode extends Model */ public $timestamps = false; - public function video() + public function video(): BelongsTo { return $this->belongsTo(Video::class, 'videos_id'); } diff --git a/app/Models/UsersRelease.php b/app/Models/UsersRelease.php index 1b96e7a387..448f0f0a61 100644 --- a/app/Models/UsersRelease.php +++ b/app/Models/UsersRelease.php @@ -2,6 +2,7 @@ namespace App\Models; +use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Model; /** @@ -39,12 +40,12 @@ class UsersRelease extends Model */ protected $guarded = ['id']; - public function user() + public function user(): BelongsTo { return $this->belongsTo(User::class, 'users_id'); } - public function release() + public function release(): BelongsTo { return $this->belongsTo(Release::class, 'releases_id'); } From 6a8d56dc539bf1fc83e46d9d19295198d0bc3b34 Mon Sep 17 00:00:00 2001 From: Shift Date: Sat, 27 Apr 2024 08:20:32 +0000 Subject: [PATCH 21/47] Mark base controller as `abstract` --- app/Http/Controllers/Controller.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index a0a2a8a34a..e749914fae 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -7,7 +7,7 @@ use Illuminate\Foundation\Validation\ValidatesRequests; use Illuminate\Routing\Controller as BaseController; -class Controller extends BaseController +abstract class Controller extends BaseController { use AuthorizesRequests, DispatchesJobs, ValidatesRequests; } From 95253c0bbf7bb67df65c72a3f46e1e44fe628485 Mon Sep 17 00:00:00 2001 From: Shift Date: Sat, 27 Apr 2024 08:20:32 +0000 Subject: [PATCH 22/47] Remove `CreatesApplication` testing trait --- tests/CreatesApplication.php | 21 --------------------- tests/TestCase.php | 2 +- 2 files changed, 1 insertion(+), 22 deletions(-) delete mode 100644 tests/CreatesApplication.php diff --git a/tests/CreatesApplication.php b/tests/CreatesApplication.php deleted file mode 100644 index cc68301129..0000000000 --- a/tests/CreatesApplication.php +++ /dev/null @@ -1,21 +0,0 @@ -make(Kernel::class)->bootstrap(); - - return $app; - } -} diff --git a/tests/TestCase.php b/tests/TestCase.php index 2932d4a69d..fe1ffc2ff1 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -6,5 +6,5 @@ abstract class TestCase extends BaseTestCase { - use CreatesApplication; + // } From a06eba2ee1931aebb76a6234a995ca911f016324 Mon Sep 17 00:00:00 2001 From: DariusIII Date: Sat, 27 Apr 2024 10:44:05 +0200 Subject: [PATCH 23/47] Update paths --- .php-cs-fixer.php | 2 +- composer.lock | 57 +++++++++++++++++++++++------------------------ 2 files changed, 29 insertions(+), 30 deletions(-) diff --git a/.php-cs-fixer.php b/.php-cs-fixer.php index b92dae88c3..fcc70c7ea7 100644 --- a/.php-cs-fixer.php +++ b/.php-cs-fixer.php @@ -10,7 +10,7 @@ ->in(config_path()) ->in(database_path()) ->notPath(database_path('migrations')) - ->in(resource_path('lang')) + ->in(base_path('lang')) ->in(base_path('routes')) ->in(base_path('tests')) ->in(base_path('Blacklight')) diff --git a/composer.lock b/composer.lock index 7a738dc530..5ca5011dc3 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "10739567a859ba1f69e3fd9b1e562e36", + "content-hash": "ddb956a243bf17fa54db0477940ad4c1", "packages": [ { "name": "aharen/omdbapi", @@ -2872,16 +2872,16 @@ }, { "name": "intervention/image", - "version": "3.6.1", + "version": "3.6.2", "source": { "type": "git", "url": "https://github.com/Intervention/image.git", - "reference": "33cbb217a00926149d96ed9e794100d8f8b53263" + "reference": "8e00dd330ff8ef944492037c5dd17da00b85daa6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Intervention/image/zipball/33cbb217a00926149d96ed9e794100d8f8b53263", - "reference": "33cbb217a00926149d96ed9e794100d8f8b53263", + "url": "https://api.github.com/repos/Intervention/image/zipball/8e00dd330ff8ef944492037c5dd17da00b85daa6", + "reference": "8e00dd330ff8ef944492037c5dd17da00b85daa6", "shasum": "" }, "require": { @@ -2928,7 +2928,7 @@ ], "support": { "issues": "https://github.com/Intervention/image/issues", - "source": "https://github.com/Intervention/image/tree/3.6.1" + "source": "https://github.com/Intervention/image/tree/3.6.2" }, "funding": [ { @@ -2940,7 +2940,7 @@ "type": "github" } ], - "time": "2024-04-23T14:17:12+00:00" + "time": "2024-04-26T15:29:43+00:00" }, { "name": "jean85/pretty-package-versions", @@ -3737,38 +3737,37 @@ }, { "name": "laravel/pulse", - "version": "v1.0.0-beta16", + "version": "dev-validation-errors", "source": { "type": "git", "url": "https://github.com/laravel/pulse.git", - "reference": "bd05ae7bfb9a6671c91f7eb25e742ee2497df0df" + "reference": "461d8247cc11b2e9a0c65fd22bd19fee70413646" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/pulse/zipball/bd05ae7bfb9a6671c91f7eb25e742ee2497df0df", - "reference": "bd05ae7bfb9a6671c91f7eb25e742ee2497df0df", + "url": "https://api.github.com/repos/laravel/pulse/zipball/461d8247cc11b2e9a0c65fd22bd19fee70413646", + "reference": "461d8247cc11b2e9a0c65fd22bd19fee70413646", "shasum": "" }, "require": { "doctrine/sql-formatter": "^1.1", "guzzlehttp/promises": "^1.0|^2.0", - "illuminate/auth": "^10.48.4|^11.0.8", - "illuminate/cache": "^10.48.4|^11.0.8", - "illuminate/config": "^10.48.4|^11.0.8", - "illuminate/console": "^10.48.4|^11.0.8", - "illuminate/contracts": "^10.48.4|^11.0.8", - "illuminate/database": "^10.48.4|^11.0.8", - "illuminate/events": "^10.48.4|^11.0.8", - "illuminate/http": "^10.48.4|^11.0.8", - "illuminate/queue": "^10.48.4|^11.0.8", - "illuminate/redis": "^10.48.4|^11.0.8", - "illuminate/routing": "^10.48.4|^11.0.8", - "illuminate/support": "^10.48.4|^11.0.8", - "illuminate/view": "^10.48.4|^11.0.8", + "illuminate/auth": "^10.34|^11.0", + "illuminate/cache": "^10.34|^11.0", + "illuminate/config": "^10.34|^11.0", + "illuminate/console": "^10.34|^11.0", + "illuminate/contracts": "^10.34|^11.0", + "illuminate/database": "^10.34|^11.0", + "illuminate/events": "^10.34|^11.0", + "illuminate/http": "^10.34|^11.0", + "illuminate/queue": "^10.34|^11.0", + "illuminate/redis": "^10.34|^11.0", + "illuminate/routing": "^10.34|^11.0", + "illuminate/support": "^10.34|^11.0", + "illuminate/view": "^10.34|^11.0", "livewire/livewire": "^3.2", "nesbot/carbon": "^2.67|^3.0", - "php": "^8.1", - "symfony/console": "^6.0|^7.0" + "php": "^8.1" }, "conflict": { "nunomaduro/collision": "<7.7.0" @@ -3776,7 +3775,7 @@ "require-dev": { "guzzlehttp/guzzle": "^7.7", "mockery/mockery": "^1.0", - "orchestra/testbench": "^8.23.1|^9.0", + "orchestra/testbench": "^8.16|^9.0", "pestphp/pest": "^2.0", "pestphp/pest-plugin-laravel": "^2.2", "phpstan/phpstan": "^1.11", @@ -3820,7 +3819,7 @@ "issues": "https://github.com/laravel/pulse/issues", "source": "https://github.com/laravel/pulse" }, - "time": "2024-03-24T15:02:27+00:00" + "time": "2024-02-24T22:25:35+00:00" }, { "name": "laravel/sanctum", @@ -18224,7 +18223,7 @@ "b3rs3rk/steamfront": 20, "bhuvidya/laravel-countries": 20, "joshpinkney/tv-maze-php-api": 20, - "laravel/pulse": 10 + "laravel/pulse": 20 }, "prefer-stable": true, "prefer-lowest": false, From d50153a9627632375ebb72f24d0583d639fc461f Mon Sep 17 00:00:00 2001 From: DariusIII Date: Sat, 27 Apr 2024 10:44:20 +0200 Subject: [PATCH 24/47] CS fixes --- app/Models/AnidbEpisode.php | 2 +- app/Models/AnidbTitle.php | 2 +- app/Models/DnzbFailure.php | 2 +- app/Models/Genre.php | 2 +- app/Models/Invitation.php | 2 +- app/Models/MusicInfo.php | 2 +- app/Models/Predb.php | 2 +- app/Models/ReleaseNfo.php | 2 +- app/Models/ReleasesGroups.php | 2 +- app/Models/TvEpisode.php | 2 +- app/Models/UsersRelease.php | 2 +- config/app.php | 2 -- config/logging.php | 3 --- database/factories/ReleaseFactory.php | 1 - routes/console.php | 4 +--- 15 files changed, 12 insertions(+), 20 deletions(-) diff --git a/app/Models/AnidbEpisode.php b/app/Models/AnidbEpisode.php index 6da41b624a..ed5ace56c2 100644 --- a/app/Models/AnidbEpisode.php +++ b/app/Models/AnidbEpisode.php @@ -2,9 +2,9 @@ namespace App\Models; +use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; -use Illuminate\Database\Eloquent\Model; /** * App\Models\AnidbEpisode. diff --git a/app/Models/AnidbTitle.php b/app/Models/AnidbTitle.php index 816d4b0565..90c405aef8 100644 --- a/app/Models/AnidbTitle.php +++ b/app/Models/AnidbTitle.php @@ -2,8 +2,8 @@ namespace App\Models; -use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\HasMany; /** * App\Models\AnidbTitle. diff --git a/app/Models/DnzbFailure.php b/app/Models/DnzbFailure.php index a4a8b998e9..52b771a876 100644 --- a/app/Models/DnzbFailure.php +++ b/app/Models/DnzbFailure.php @@ -2,8 +2,8 @@ namespace App\Models; -use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\BelongsTo; /** * App\Models\DnzbFailure. diff --git a/app/Models/Genre.php b/app/Models/Genre.php index 3ee52d7f99..52bab2e1e8 100644 --- a/app/Models/Genre.php +++ b/app/Models/Genre.php @@ -2,8 +2,8 @@ namespace App\Models; -use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\HasMany; /** * App\Models\Genre. diff --git a/app/Models/Invitation.php b/app/Models/Invitation.php index 8e2cc7ed80..6b20212ee9 100644 --- a/app/Models/Invitation.php +++ b/app/Models/Invitation.php @@ -2,8 +2,8 @@ namespace App\Models; -use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\BelongsTo; /** * App\Models\Invitation. diff --git a/app/Models/MusicInfo.php b/app/Models/MusicInfo.php index b34f9af268..4258612e0c 100644 --- a/app/Models/MusicInfo.php +++ b/app/Models/MusicInfo.php @@ -2,8 +2,8 @@ namespace App\Models; -use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\BelongsTo; use Laravel\Scout\Searchable; /** diff --git a/app/Models/Predb.php b/app/Models/Predb.php index b18bf557a8..992426552b 100644 --- a/app/Models/Predb.php +++ b/app/Models/Predb.php @@ -2,12 +2,12 @@ namespace App\Models; -use Illuminate\Database\Eloquent\Relations\HasMany; use Blacklight\ColorCLI; use Blacklight\ConsoleTools; use Blacklight\ElasticSearchSiteSearch; use Blacklight\ManticoreSearch; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\HasMany; use Illuminate\Support\Arr; use Illuminate\Support\Facades\Cache; use Laravel\Scout\Searchable; diff --git a/app/Models/ReleaseNfo.php b/app/Models/ReleaseNfo.php index f54dec4edf..9f098b519b 100644 --- a/app/Models/ReleaseNfo.php +++ b/app/Models/ReleaseNfo.php @@ -2,8 +2,8 @@ namespace App\Models; -use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\BelongsTo; /** * App\Models\ReleaseNfo. diff --git a/app/Models/ReleasesGroups.php b/app/Models/ReleasesGroups.php index dbcf77e5e6..ddaef38c80 100644 --- a/app/Models/ReleasesGroups.php +++ b/app/Models/ReleasesGroups.php @@ -20,8 +20,8 @@ namespace App\Models; -use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\BelongsTo; /** * App\Models\ReleasesGroups. diff --git a/app/Models/TvEpisode.php b/app/Models/TvEpisode.php index 2edad1a6cb..825af6a63b 100644 --- a/app/Models/TvEpisode.php +++ b/app/Models/TvEpisode.php @@ -2,8 +2,8 @@ namespace App\Models; -use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; /** diff --git a/app/Models/UsersRelease.php b/app/Models/UsersRelease.php index 448f0f0a61..b84ebebe37 100644 --- a/app/Models/UsersRelease.php +++ b/app/Models/UsersRelease.php @@ -2,8 +2,8 @@ namespace App\Models; -use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\BelongsTo; /** * App\Models\UsersRelease. diff --git a/config/app.php b/config/app.php index 8021bd9a78..d004fa8c51 100644 --- a/config/app.php +++ b/config/app.php @@ -1,11 +1,9 @@ Facade::defaultAliases()->merge([ 'RedisManager' => Illuminate\Support\Facades\Redis::class, 'UserVerification' => Jrean\UserVerification\Facades\UserVerification::class, diff --git a/config/logging.php b/config/logging.php index 452c5a01dc..f74a081072 100644 --- a/config/logging.php +++ b/config/logging.php @@ -1,8 +1,5 @@ [ diff --git a/database/factories/ReleaseFactory.php b/database/factories/ReleaseFactory.php index 6e0edf8bd7..1dc017cb57 100644 --- a/database/factories/ReleaseFactory.php +++ b/database/factories/ReleaseFactory.php @@ -2,7 +2,6 @@ namespace Database\Factories; -use App\Models\Release; use Illuminate\Database\Eloquent\Factories\Factory; class ReleaseFactory extends Factory diff --git a/routes/console.php b/routes/console.php index f12f8b9721..ccc7b20586 100644 --- a/routes/console.php +++ b/routes/console.php @@ -1,9 +1,8 @@ comment(Inspiring::quote()); })->purpose('Display an inspiring quote'); - Schedule::command('disposable:update')->weekly(); Schedule::command('clean:directories')->hourly()->withoutOverlapping(); Schedule::command('nntmux:delete-unverified-users')->twiceDaily(1, 13); From bed80284a47546063d0e52c44daa3aaaea7746e6 Mon Sep 17 00:00:00 2001 From: DariusIII Date: Sat, 27 Apr 2024 11:03:10 +0200 Subject: [PATCH 25/47] Cast cache time to int --- config/nntmux.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/config/nntmux.php b/config/nntmux.php index 37804bcd45..83eb88e74b 100644 --- a/config/nntmux.php +++ b/config/nntmux.php @@ -8,9 +8,9 @@ 'echocli' => env('ECHOCLI', true), 'rename_par2' => env('RENAME_PAR2', true), 'rename_music_mediainfo' => env('RENAME_MUSIC_MEDIAINFO', true), - 'cache_expiry_short' => env('CACHE_EXPIRY_SHORT', 5), - 'cache_expiry_medium' => env('CACHE_EXPIRY_MEDIUM', 10), - 'cache_expiry_long' => env('CACHE_EXPIRY_LONG', 15), + 'cache_expiry_short' => (int) env('CACHE_EXPIRY_SHORT', 5), + 'cache_expiry_medium' => (int) env('CACHE_EXPIRY_MEDIUM', 10), + 'cache_expiry_long' => (int) env('CACHE_EXPIRY_LONG', 15), 'admin_username' => env('ADMIN_USER', 'admin'), 'admin_password' => env('ADMIN_PASS', 'admin'), 'admin_email' => env('ADMIN_EMAIL', 'admin@example.com'), From c27bb50c29495ec4fa554218b09f75f9c1c19b48 Mon Sep 17 00:00:00 2001 From: DariusIII Date: Sat, 27 Apr 2024 11:35:15 +0200 Subject: [PATCH 26/47] Update .env.example --- .env.example | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/.env.example b/.env.example index 1b579ecebe..44461ebfc0 100644 --- a/.env.example +++ b/.env.example @@ -72,10 +72,11 @@ REDIS_PORT=6379 REDIS_CLIENT=phpredis SESSION_DRIVER=redis -SESSION_DOMAIN= +SESSION_DOMAIN=null SESSION_SECURE_COOKIE=false SESSION_ENCRYPT=false SESSION_COOKIE=nntmux +SESSION_PATH=/ MAIL_DRIVER=smtp MAIL_HOST=smtp.mailtrap.io @@ -184,7 +185,3 @@ PURGE_INACTIVE_USERS=false OTP_ENABLED=false FLARE_KEY= - -SESSION_ENCRYPT=false -SESSION_PATH=/ -SESSION_DOMAIN=null From 4fc0d29caf3346d3559aa704184689716eff66d2 Mon Sep 17 00:00:00 2001 From: DariusIII Date: Sat, 27 Apr 2024 16:23:06 +0200 Subject: [PATCH 27/47] Add missing migration --- ..._04_27_124202_create_media_infos_table.php | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 database/migrations/2024_04_27_124202_create_media_infos_table.php diff --git a/database/migrations/2024_04_27_124202_create_media_infos_table.php b/database/migrations/2024_04_27_124202_create_media_infos_table.php new file mode 100644 index 0000000000..675c4b978f --- /dev/null +++ b/database/migrations/2024_04_27_124202_create_media_infos_table.php @@ -0,0 +1,31 @@ +id(); + $table->bigInteger('releases_id')->unsigned(); + $table->string('movie_name')->nullable(); + $table->string('file_name')->nullable(); + $table->string('unique_id')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('media_infos'); + } +}; From 7a71f2e5d18628fba1511953b6729d5ec7a6f6f3 Mon Sep 17 00:00:00 2001 From: Shift Date: Sat, 27 Apr 2024 18:43:45 +0000 Subject: [PATCH 28/47] Streamline config files --- config/app.php | 1 + config/database.php | 3 +++ 2 files changed, 4 insertions(+) diff --git a/config/app.php b/config/app.php index d004fa8c51..6cb925d5e2 100644 --- a/config/app.php +++ b/config/app.php @@ -1,5 +1,6 @@ [ + 'table' => [ 'table' => 'migrations', 'update_date_on_publish' => false, // disable to preserve original behavior for existing applications ], + 'update_date_on_publish' => false, // disable to preserve original behavior for existing applications + ], 'redis' => [ 'client' => env('REDIS_CLIENT', 'phpredis'), From 33d7996a2ee2fddc4486fbf3f7ff2c20165ebe07 Mon Sep 17 00:00:00 2001 From: DariusIII Date: Sun, 28 Apr 2024 01:36:53 +0200 Subject: [PATCH 29/47] Update config and views --- bootstrap/providers.php | 3 +- composer.json | 3 + composer.lock | 134 ++++- config/forum/integration.php | 4 +- config/hashing.php | 67 +++ package.json | 10 +- resources/css/app.css | 3 + resources/views/errors/minimal.blade.php | 2 +- resources/views/layouts/app.blade.php | 115 ++-- resources/views/welcome.blade.php | 259 ++++----- routes/web.php | 636 +++++++++++------------ vite.config.js | 2 - 12 files changed, 706 insertions(+), 532 deletions(-) create mode 100644 config/hashing.php diff --git a/bootstrap/providers.php b/bootstrap/providers.php index ffc860cbb1..37cec77661 100644 --- a/bootstrap/providers.php +++ b/bootstrap/providers.php @@ -3,7 +3,8 @@ return [ App\Providers\AppServiceProvider::class, App\Providers\HorizonServiceProvider::class, - App\Providers\TelescopeServiceProvider::class, App\Providers\RouteServiceProvider::class, + App\Providers\TelescopeServiceProvider::class, App\Providers\UserServiceProvider::class, + App\Providers\VoltServiceProvider::class, ]; diff --git a/composer.json b/composer.json index 2e4a0f9a7a..a2b559e1a0 100644 --- a/composer.json +++ b/composer.json @@ -75,6 +75,8 @@ "laravel/ui": "^4.4", "laravelcollective/html": "^6.4", "league/climate": "^3.8", + "livewire/livewire": "^3.4", + "livewire/volt": "^1.0", "mailerlite/laravel-elasticsearch": "^11.1", "manticoresoftware/manticoresearch-php": "^3.0", "marcreichel/igdb-laravel": "^4.2", @@ -121,6 +123,7 @@ "friendsofphp/php-cs-fixer": "^3.49", "jubeki/laravel-code-style": "^2.0", "larastan/larastan": "^2.8", + "laravel/breeze": "^2.0", "laravel/pint": "^1.13", "laravel/sail": "^1.26", "mockery/mockery": "^1.6", diff --git a/composer.lock b/composer.lock index 5ca5011dc3..9962b6a83a 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "ddb956a243bf17fa54db0477940ad4c1", + "content-hash": "2eed7e02d2472b899adc54c1a29937be", "packages": [ { "name": "aharen/omdbapi", @@ -4896,6 +4896,78 @@ ], "time": "2024-04-24T12:14:15+00:00" }, + { + "name": "livewire/volt", + "version": "v1.6.3", + "source": { + "type": "git", + "url": "https://github.com/livewire/volt.git", + "reference": "e5316b4f3508f759d0da6dc736331720ba14b8bb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/livewire/volt/zipball/e5316b4f3508f759d0da6dc736331720ba14b8bb", + "reference": "e5316b4f3508f759d0da6dc736331720ba14b8bb", + "shasum": "" + }, + "require": { + "laravel/framework": "^10.38.2|^11.0", + "livewire/livewire": "^3.0", + "php": "^8.1" + }, + "require-dev": { + "laravel/folio": "^1.1", + "mockery/mockery": "^1.6", + "orchestra/testbench": "^8.15.0|^9.0", + "pestphp/pest": "^2.9.5", + "phpstan/phpstan": "^1.10" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + }, + "laravel": { + "providers": [ + "Livewire\\Volt\\VoltServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "functions.php" + ], + "psr-4": { + "Livewire\\Volt\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Nuno Maduro", + "email": "nuno@laravel.com" + } + ], + "description": "An elegantly crafted functional API for Laravel Livewire.", + "homepage": "https://github.com/livewire/volt", + "keywords": [ + "laravel", + "livewire", + "volt" + ], + "support": { + "issues": "https://github.com/livewire/volt/issues", + "source": "https://github.com/livewire/volt" + }, + "time": "2024-03-06T20:38:22+00:00" + }, { "name": "maennchen/zipstream-php", "version": "2.4.0", @@ -15536,6 +15608,66 @@ ], "time": "2024-04-16T19:13:34+00:00" }, + { + "name": "laravel/breeze", + "version": "v2.0.3", + "source": { + "type": "git", + "url": "https://github.com/laravel/breeze.git", + "reference": "3ee0211a1bdc1aca6ee7913337735bb879738999" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/breeze/zipball/3ee0211a1bdc1aca6ee7913337735bb879738999", + "reference": "3ee0211a1bdc1aca6ee7913337735bb879738999", + "shasum": "" + }, + "require": { + "illuminate/console": "^11.0", + "illuminate/filesystem": "^11.0", + "illuminate/support": "^11.0", + "illuminate/validation": "^11.0", + "php": "^8.2.0", + "symfony/console": "^7.0" + }, + "require-dev": { + "orchestra/testbench": "^9.0", + "phpstan/phpstan": "^1.10" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Breeze\\BreezeServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Breeze\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Minimal Laravel authentication scaffolding with Blade and Tailwind.", + "keywords": [ + "auth", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/breeze/issues", + "source": "https://github.com/laravel/breeze" + }, + "time": "2024-04-24T07:22:37+00:00" + }, { "name": "laravel/pint", "version": "v1.15.2", diff --git a/config/forum/integration.php b/config/forum/integration.php index 9975dd593f..d7f6d60b85 100644 --- a/config/forum/integration.php +++ b/config/forum/integration.php @@ -16,8 +16,8 @@ 'forum' => App\Policies\ForumPolicy::class, 'model' => [ TeamTeaTime\Forum\Models\Category::class => \App\Policies\CategoryPolicy::class, - TeamTeaTime\Forum\Models\Thread::class => TeamTeaTime\Forum\Policies\ThreadPolicy::class, - TeamTeaTime\Forum\Models\Post::class => TeamTeaTime\Forum\Policies\PostPolicy::class, + TeamTeaTime\Forum\Models\Thread::class =>\TeamTeaTime\Forum\Policies\ThreadPolicy::class, + TeamTeaTime\Forum\Models\Post::class => \TeamTeaTime\Forum\Policies\PostPolicy::class, ], ], diff --git a/config/hashing.php b/config/hashing.php new file mode 100644 index 0000000000..9eb408e09e --- /dev/null +++ b/config/hashing.php @@ -0,0 +1,67 @@ + env('HASH_DRIVER', 'bcrypt'), + + /* + |-------------------------------------------------------------------------- + | Bcrypt Options + |-------------------------------------------------------------------------- + | + | Here you may specify the configuration options that should be used when + | passwords are hashed using the Bcrypt algorithm. This will allow you + | to control the amount of time it takes to hash the given password. + | + */ + + 'bcrypt' => [ + 'rounds' => env('BCRYPT_ROUNDS', 12), + 'verify' => env('HASH_VERIFY', true), + ], + + /* + |-------------------------------------------------------------------------- + | Argon Options + |-------------------------------------------------------------------------- + | + | Here you may specify the configuration options that should be used when + | passwords are hashed using the Argon algorithm. These will allow you + | to control the amount of time it takes to hash the given password. + | + */ + + 'argon' => [ + 'memory' => env('ARGON_MEMORY', 65536), + 'threads' => env('ARGON_THREADS', 1), + 'time' => env('ARGON_TIME', 4), + 'verify' => env('HASH_VERIFY', true), + ], + + /* + |-------------------------------------------------------------------------- + | Rehash On Login + |-------------------------------------------------------------------------- + | + | Setting this option to true will tell Laravel to automatically rehash + | the user's password during login if the configured work factor for + | the algorithm has changed, allowing graceful upgrades of hashes. + | + */ + + 'rehash_on_login' => true, + +]; diff --git a/package.json b/package.json index 1c1900d7b4..562f01085f 100644 --- a/package.json +++ b/package.json @@ -15,14 +15,18 @@ "vitedev": "vite" }, "devDependencies": { + "@tailwindcss/forms": "^0.5.2", + "autoprefixer": "^10.4.2", "axios": "^1.6.8", "cross-env": "^7.0.3", "jquery": "3.7.1", "laravel-mix": "^6.0.49", "lodash": "^4.17.21", "popper.js": "^1.16.1", + "postcss": "^8.4.31", "prettier": "^3.2.5", "resolve-url-loader": "^5.0.0", + "tailwindcss": "^3.1.0", "vue": "^3.4.25", "webpack-cli": "^5.1.4" }, @@ -48,6 +52,7 @@ "jquery-goup": "^1.1.3", "jquery-migrate": "3.4.1", "laravel-echo": "^1.16.1", + "laravel-vite-plugin": "^1.0", "nested-sort": "^5.2.0", "nonblockjs": "^1.0.8", "normalize.css": "^8.0.1", @@ -57,8 +62,7 @@ "pnotify": "4.0.1", "tailwindcss": "^3.4.3", "tinymce": "5.10.9", - "vuedraggable": "^2.24.3", - "laravel-vite-plugin": "^1.0", - "vite": "^5.0" + "vite": "^5.0", + "vuedraggable": "^2.24.3" } } diff --git a/resources/css/app.css b/resources/css/app.css index e69de29bb2..b5c61c9567 100644 --- a/resources/css/app.css +++ b/resources/css/app.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/resources/views/errors/minimal.blade.php b/resources/views/errors/minimal.blade.php index db69f254f3..2393f01c9a 100644 --- a/resources/views/errors/minimal.blade.php +++ b/resources/views/errors/minimal.blade.php @@ -17,7 +17,7 @@ -
    +
    diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php index a255ebfa21..224957f664 100644 --- a/resources/views/layouts/app.blade.php +++ b/resources/views/layouts/app.blade.php @@ -1,83 +1,36 @@ - + - - - - - - - - {{ config('app.name', 'Laravel') }} - - - - - - - - - - - - -
    - - -
    - @yield('content') -
    -
    - + + + + + + {{ config('app.name', 'Laravel') }} + + + + + + + @vite(['resources/css/app.css', 'resources/js/app.js']) + + +
    + + + + @if (isset($header)) +
    +
    + {{ $header }} +
    +
    + @endif + + +
    + {{ $slot }} +
    +
    + diff --git a/resources/views/welcome.blade.php b/resources/views/welcome.blade.php index 23db753af5..0464add41c 100644 --- a/resources/views/welcome.blade.php +++ b/resources/views/welcome.blade.php @@ -1,132 +1,145 @@ - - - - - Laravel - - - - - - - - - - -
    - @if (Route::has('login')) - - @endif - -
    -
    - - - - - -
    - -
    -
    -
    - - -
    -
    - Laravel has wonderful, thorough documentation covering every aspect of the framework. Whether you are new to the framework or have previous experience with Laravel, we recommend reading all of the documentation from beginning to end. -
    -
    -
    - -
    -
    - - -
    - -
    -
    - Laracasts offers thousands of video tutorials on Laravel, PHP, and JavaScript development. Check them out, see for yourself, and massively level up your development skills in the process. -
    -
    -
    - -
    -
    - - -
    - -
    -
    - Laravel News is a community driven portal and newsletter aggregating all of the latest and most important news in the Laravel ecosystem, including new package releases and tutorials. + + + + + Laravel + + + + + + + @vite(['resources/css/app.css', 'resources/js/app.js']) + + +
    + +
    +
    +
    +
    +
    -
    -
    - - -
    + -
    -
    -
    - - - - - - Shop - - - - - - - - Sponsor - +
    + Laravel v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }}) +
    - -
    - Build v{{ Illuminate\Foundation\Application::VERSION }} -
    -
    -
    - + diff --git a/routes/web.php b/routes/web.php index be7e04a032..8fdc64b216 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,349 +1,349 @@ name('register'); - -Route::get('forgottenpassword', [ForgotPasswordController::class, 'showLinkRequestForm'])->name('forgottenpassword'); -Route::post('forgottenpassword', [ForgotPasswordController::class, 'showLinkRequestForm'])->name('forgottenpassword'); - -Route::get('terms-and-conditions', [TermsController::class, 'terms']); - -Route::get('login', [LoginController::class, 'showLoginForm']); -Route::post('login', [LoginController::class, 'login'])->name('login'); -Route::get('logout', [LoginController::class, 'logout'])->name('logout'); - -Route::middleware('isVerified')->group(function () { - Route::get('resetpassword', [ResetPasswordController::class, 'reset']); - Route::post('resetpassword', [ResetPasswordController::class, 'reset']); - - Route::get('profile', [ProfileController::class, 'show']); - - Route::prefix('browse')->group(function () { - Route::get('tags', [BrowseController::class, 'tags']); - Route::get('group', [BrowseController::class, 'group']); - Route::get('All', [BrowseController::class, 'index']); - Route::get('{parentCategory}/{id?}', [BrowseController::class, 'show'])->middleware('clearance'); - }); + /* + |-------------------------------------------------------------------------- + | Web Routes + |-------------------------------------------------------------------------- + | + | Here is where you can register web routes for your application. These + | routes are loaded by the RouteServiceProvider within a group which + | contains the "web" middleware group. Now create something great! + | + */ + + use App\Http\Controllers\Admin\AdminAjaxController; + use App\Http\Controllers\Admin\AdminAnidbController; + use App\Http\Controllers\Admin\AdminBlacklistController; + use App\Http\Controllers\Admin\AdminBookController; + use App\Http\Controllers\Admin\AdminCategoryController; + use App\Http\Controllers\Admin\AdminCategoryRegexesController; + use App\Http\Controllers\Admin\AdminCollectionRegexesController; + use App\Http\Controllers\Admin\AdminCommentsController; + use App\Http\Controllers\Admin\AdminConsoleController; + use App\Http\Controllers\Admin\AdminContentController; + use App\Http\Controllers\Admin\AdminFailedReleasesController; + use App\Http\Controllers\Admin\AdminGameController; + use App\Http\Controllers\Admin\AdminGroupController; + use App\Http\Controllers\Admin\AdminMovieController; + use App\Http\Controllers\Admin\AdminMusicController; + use App\Http\Controllers\Admin\AdminNzbController; + use App\Http\Controllers\Admin\AdminPageController; + use App\Http\Controllers\Admin\AdminPredbController; + use App\Http\Controllers\Admin\AdminReleaseNamingRegexesController; + use App\Http\Controllers\Admin\AdminReleasesController; + use App\Http\Controllers\Admin\AdminRoleController; + use App\Http\Controllers\Admin\AdminShowsController; + use App\Http\Controllers\Admin\AdminSiteController; + use App\Http\Controllers\Admin\AdminTmuxController; + use App\Http\Controllers\Admin\AdminUserController; + use App\Http\Controllers\AdultController; + use App\Http\Controllers\AjaxController; + use App\Http\Controllers\AnimeController; + use App\Http\Controllers\ApiHelpController; + use App\Http\Controllers\Auth\ForgotPasswordController; + use App\Http\Controllers\Auth\LoginController; + use App\Http\Controllers\Auth\RegisterController; + use App\Http\Controllers\Auth\ResetPasswordController; + use App\Http\Controllers\BooksController; + use App\Http\Controllers\BrowseController; + use App\Http\Controllers\BrowseGroupController; + use App\Http\Controllers\BtcPaymentController; + use App\Http\Controllers\CartController; + use App\Http\Controllers\ConsoleController; + use App\Http\Controllers\ContactUsController; + use App\Http\Controllers\ContentController; + use App\Http\Controllers\DetailsController; + use App\Http\Controllers\FailedReleasesController; + use App\Http\Controllers\FileListController; + use App\Http\Controllers\GamesController; + use App\Http\Controllers\GetNzbController; + use App\Http\Controllers\MovieController; + use App\Http\Controllers\MusicController; + use App\Http\Controllers\MyMoviesController; + use App\Http\Controllers\MyShowsController; + use App\Http\Controllers\NfoController; + use App\Http\Controllers\PasswordSecurityController; + use App\Http\Controllers\ProfileController; + use App\Http\Controllers\RssController; + use App\Http\Controllers\SearchController; + use App\Http\Controllers\SeriesController; + use App\Http\Controllers\TermsController; + + Auth::routes(); + + Route::get('/', [ContentController::class, 'show']); + + Route::get('register', [RegisterController::class, 'showRegistrationForm']); + Route::post('register', [RegisterController::class, 'register'])->name('register'); + + Route::get('forgottenpassword', [ForgotPasswordController::class, 'showLinkRequestForm'])->name('forgottenpassword'); + Route::post('forgottenpassword', [ForgotPasswordController::class, 'showLinkRequestForm'])->name('forgottenpassword'); + + Route::get('terms-and-conditions', [TermsController::class, 'terms']); + + Route::get('login', [LoginController::class, 'showLoginForm']); + Route::post('login', [LoginController::class, 'login'])->name('login'); + Route::get('logout', [LoginController::class, 'logout'])->name('logout'); + + Route::middleware('isVerified')->group(function () { + Route::get('resetpassword', [ResetPasswordController::class, 'reset']); + Route::post('resetpassword', [ResetPasswordController::class, 'reset']); - Route::prefix('cart')->group(function () { - Route::get('index', [CartController::class, 'index']); - Route::post('index', [CartController::class, 'index']); - Route::get('add', [CartController::class, 'store']); - Route::post('add', [CartController::class, 'store']); - Route::get('delete/{id}', [CartController::class, 'destroy']); - Route::post('delete/{id}', [CartController::class, 'destroy']); - }); + Route::get('profile', [ProfileController::class, 'show']); + + Route::prefix('browse')->group(function () { + Route::get('tags', [BrowseController::class, 'tags']); + Route::get('group', [BrowseController::class, 'group']); + Route::get('All', [BrowseController::class, 'index']); + Route::get('{parentCategory}/{id?}', [BrowseController::class, 'show'])->middleware('clearance'); + }); + + Route::prefix('cart')->group(function () { + Route::get('index', [CartController::class, 'index']); + Route::post('index', [CartController::class, 'index']); + Route::get('add', [CartController::class, 'store']); + Route::post('add', [CartController::class, 'store']); + Route::get('delete/{id}', [CartController::class, 'destroy']); + Route::post('delete/{id}', [CartController::class, 'destroy']); + }); + + Route::get('details/{guid}', [DetailsController::class, 'show']); + Route::post('details/{guid}', [DetailsController::class, 'show']); + + Route::get('getnzb', [GetNzbController::class, 'getNzb'])->name('getnzb'); + Route::post('getnzb', [GetNzbController::class, 'getNzb'])->name('getnzb'); + + Route::get('rsshelp', [RssController::class, 'showRssDesc'])->name('rsshelp'); + Route::post('rsshelp', [RssController::class, 'showRssDesc'])->name('rsshelp'); + + Route::get('profile', [ProfileController::class, 'show'])->name('profile'); + + Route::get('apihelp', [ApiHelpController::class, 'index'])->name('apihelp'); + Route::get('apiv2help', [ApiHelpController::class, 'apiv2'])->name('apiv2help'); + + Route::get('browsegroup', [BrowseGroupController::class, 'show'])->name('browsegroup'); + + Route::get('content', [ContentController::class, 'show'])->name('content'); + + Route::post('content', [ContentController::class, 'show'])->name('content'); + + Route::get('failed', [FailedReleasesController::class, 'failed'])->name('failed'); + + Route::post('failed', [FailedReleasesController::class, 'failed'])->name('failed'); + + Route::middleware('clearance')->group(function () { + Route::get('Games', [GamesController::class, 'show'])->name('Games'); + Route::post('Games', [GamesController::class, 'show'])->name('Games'); + + Route::get('Movies/{id?}', [MovieController::class, 'showMovies'])->name('Movies'); - Route::get('details/{guid}', [DetailsController::class, 'show']); - Route::post('details/{guid}', [DetailsController::class, 'show']); + Route::get('movie', [MovieController::class, 'showMovies'])->name('movie'); - Route::get('getnzb', [GetNzbController::class, 'getNzb'])->name('getnzb'); - Route::post('getnzb', [GetNzbController::class, 'getNzb'])->name('getnzb'); + Route::get('movietrailers', [MovieController::class, 'showTrailer'])->name('movietrailers'); - Route::get('rsshelp', [RssController::class, 'showRssDesc'])->name('rsshelp'); - Route::post('rsshelp', [RssController::class, 'showRssDesc'])->name('rsshelp'); + Route::post('Movies/{id?}', [MovieController::class, 'showMovies'])->name('Movies'); - Route::get('profile', [ProfileController::class, 'show'])->name('profile'); + Route::post('movie', [MovieController::class, 'showMovies'])->name('movie'); - Route::get('apihelp', [ApiHelpController::class, 'index'])->name('apihelp'); - Route::get('apiv2help', [ApiHelpController::class, 'apiv2'])->name('apiv2help'); + Route::post('movietrailers', [MovieController::class, 'showTrailer'])->name('movietrailers'); - Route::get('browsegroup', [BrowseGroupController::class, 'show'])->name('browsegroup'); + Route::get('Audio/{id?}', [MusicController::class, 'show'])->name('Audio'); - Route::get('content', [ContentController::class, 'show'])->name('content'); + Route::post('Audio/{id?}', [MusicController::class, 'show'])->name('Audio'); - Route::post('content', [ContentController::class, 'show'])->name('content'); + Route::get('Console/{id?}', [ConsoleController::class, 'show'])->name('Console'); - Route::get('failed', [FailedReleasesController::class, 'failed'])->name('failed'); + Route::post('Console/{id?}', [ConsoleController::class, 'show'])->name('Console'); - Route::post('failed', [FailedReleasesController::class, 'failed'])->name('failed'); + Route::get('XXX/{id?}', [AdultController::class, 'show'])->name('XXX'); - Route::middleware('clearance')->group(function () { - Route::get('Games', [GamesController::class, 'show'])->name('Games'); - Route::post('Games', [GamesController::class, 'show'])->name('Games'); + Route::post('XXX/{id?}', [AdultController::class, 'show'])->name('XXX'); - Route::get('Movies/{id?}', [MovieController::class, 'showMovies'])->name('Movies'); + Route::get('anime', [AnimeController::class, 'showAnime'])->name('anime'); + Route::post('anime', [AnimeController::class, 'showAnime'])->name('anime'); - Route::get('movie', [MovieController::class, 'showMovies'])->name('movie'); + Route::get('animelist', [AnimeController::class, 'showList'])->name('animelist'); + Route::post('animelist', [AnimeController::class, 'showList'])->name('animelist'); - Route::get('movietrailers', [MovieController::class, 'showTrailer'])->name('movietrailers'); + Route::get('Books/{id?}', [BooksController::class, 'index'])->name('Books'); + Route::post('Books/{id?}', [BooksController::class, 'index'])->name('Books'); + }); - Route::post('Movies/{id?}', [MovieController::class, 'showMovies'])->name('Movies'); + Route::get('nfo/{id?}', [NfoController::class, 'showNfo'])->name('nfo'); - Route::post('movie', [MovieController::class, 'showMovies'])->name('movie'); + Route::post('nfo/{id?}', [NfoController::class, 'showNfo'])->name('nfo'); - Route::post('movietrailers', [MovieController::class, 'showTrailer'])->name('movietrailers'); + Route::get('contact-us', [ContactUsController::class, 'showContactForm'])->name('contact-us'); + Route::post('contact-us', [ContactUsController::class, 'contact'])->name('contact-us'); - Route::get('Audio/{id?}', [MusicController::class, 'show'])->name('Audio'); + Route::get('profileedit', [ProfileController::class, 'edit'])->name('profileedit'); - Route::post('Audio/{id?}', [MusicController::class, 'show'])->name('Audio'); + Route::post('profileedit', [ProfileController::class, 'edit'])->name('profileedit'); - Route::get('Console/{id?}', [ConsoleController::class, 'show'])->name('Console'); + Route::get('profile_delete', [ProfileController::class, 'destroy'])->name('profile_delete'); - Route::post('Console/{id?}', [ConsoleController::class, 'show'])->name('Console'); + Route::post('profile_delete', [ProfileController::class, 'destroy'])->name('profile_delete'); - Route::get('XXX/{id?}', [AdultController::class, 'show'])->name('XXX'); + Route::get('search', [SearchController::class, 'search'])->name('search'); - Route::post('XXX/{id?}', [AdultController::class, 'show'])->name('XXX'); + Route::post('search', [SearchController::class, 'search'])->name('search'); - Route::get('anime', [AnimeController::class, 'showAnime'])->name('anime'); - Route::post('anime', [AnimeController::class, 'showAnime'])->name('anime'); + Route::get('mymovies', [MyMoviesController::class, 'show'])->name('mymovies'); - Route::get('animelist', [AnimeController::class, 'showList'])->name('animelist'); - Route::post('animelist', [AnimeController::class, 'showList'])->name('animelist'); + Route::post('mymovies', [MyMoviesController::class, 'show'])->name('mymovies'); - Route::get('Books/{id?}', [BooksController::class, 'index'])->name('Books'); - Route::post('Books/{id?}', [BooksController::class, 'index'])->name('Books'); + Route::get('myshows', [MyShowsController::class, 'show'])->name('myshows'); + + Route::post('myshows', [MyShowsController::class, 'show'])->name('myshows'); + + Route::get('myshows/browse', [MyShowsController::class, 'browse']); + + Route::post('myshows/browse', [MyShowsController::class, 'browse']); + + Route::get('filelist/{guid}', [FileListController::class, 'show']); + + Route::post('filelist/{guid}', [FileListController::class, 'show']); + + Route::get('series/{id?}', [SeriesController::class, 'index'])->name('series'); + + Route::post('series/{id?}', [SeriesController::class, 'index'])->name('series'); + + Route::get('ajax_profile', [AjaxController::class, 'profile']); + + Route::post('ajax_profile', [AjaxController::class, 'profile']); + + Route::get('2fa', [PasswordSecurityController::class, 'show2faForm']); + Route::post('generate2faSecret', [PasswordSecurityController::class, 'generate2faSecret'])->name('generate2faSecret'); + Route::post('2fa', [PasswordSecurityController::class, 'enable2fa'])->name('enable2fa'); + Route::post('disable2fa', [PasswordSecurityController::class, 'disable2fa'])->name('disable2fa'); + }); + + Route::middleware('role:Admin', '2fa')->prefix('admin')->group(function () { + Route::get('index', [AdminPageController::class, 'index']); + Route::get('anidb-delete/{id}', [AdminAnidbController::class, 'destroy']); + Route::post('anidb-delete/{id}', [AdminAnidbController::class, 'destroy']); + Route::get('anidb-edit/{id}', [AdminAnidbController::class, 'edit']); + Route::post('anidb-edit/{id}', [AdminAnidbController::class, 'edit']); + Route::get('anidb-list', [AdminAnidbController::class, 'index']); + Route::post('anidb-list', [AdminAnidbController::class, 'index']); + Route::get('binaryblacklist-list', [AdminBlacklistController::class, 'index']); + Route::post('binaryblacklist-list', [AdminBlacklistController::class, 'index']); + Route::get('binaryblacklist-edit', [AdminBlacklistController::class, 'edit']); + Route::post('binaryblacklist-edit', [AdminBlacklistController::class, 'edit']); + Route::get('book-list', [AdminBookController::class, 'index']); + Route::post('book-list', [AdminBookController::class, 'index']); + Route::get('book-edit', [AdminBookController::class, 'edit']); + Route::post('book-edit', [AdminBookController::class, 'edit']); + Route::get('category-list', [AdminCategoryController::class, 'index']); + Route::post('category-list', [AdminCategoryController::class, 'index']); + Route::get('category-edit', [AdminCategoryController::class, 'edit']); + Route::post('category-edit', [AdminCategoryController::class, 'edit']); + Route::get('user-list', [AdminUserController::class, 'index']); + Route::post('user-list', [AdminUserController::class, 'index']); + Route::get('user-edit', [AdminUserController::class, 'edit']); + Route::post('user-edit', [AdminUserController::class, 'edit']); + Route::get('user-delete', [AdminUserController::class, 'destroy']); + Route::post('user-delete', [AdminUserController::class, 'destroy']); + Route::get('verify', [AdminUserController::class, 'verify']); + Route::post('verify', [AdminUserController::class, 'verify']); + Route::get('resendverification', [AdminUserController::class, 'resendVerification']); + Route::post('resendverification', [AdminUserController::class, 'resendVerification']); + Route::get('site-edit', [AdminSiteController::class, 'edit']); + Route::post('site-edit', [AdminSiteController::class, 'edit']); + Route::get('site-stats', [AdminSiteController::class, 'stats']); + Route::post('site-stats', [AdminSiteController::class, 'stats']); + Route::get('role-list', [AdminRoleController::class, 'index']); + Route::post('role-list', [AdminRoleController::class, 'index']); + Route::get('role-add', [AdminRoleController::class, 'create']); + Route::post('role-add', [AdminRoleController::class, 'create']); + Route::get('role-edit', [AdminRoleController::class, 'edit']); + Route::post('role-edit', [AdminRoleController::class, 'edit']); + Route::get('role-delete', [AdminRoleController::class, 'destroy']); + Route::post('role-delete', [AdminRoleController::class, 'destroy']); + Route::get('content-list', [AdminContentController::class, 'index']); + Route::post('content-list', [AdminContentController::class, 'index']); + Route::get('content-add', [AdminContentController::class, 'create']); + Route::post('content-add', [AdminContentController::class, 'create']); + Route::get('content-delete', [AdminContentController::class, 'destroy']); + Route::post('content-delete', [AdminContentController::class, 'destroy']); + Route::get('category_regexes-list', [AdminCategoryRegexesController::class, 'index']); + Route::post('category_regexes-list', [AdminCategoryRegexesController::class, 'index']); + Route::get('category_regexes-edit', [AdminCategoryRegexesController::class, 'edit']); + Route::post('category_regexes-edit', [AdminCategoryRegexesController::class, 'edit']); + Route::get('collection_regexes-list', [AdminCollectionRegexesController::class, 'index']); + Route::post('collection_regexes-list', [AdminCollectionRegexesController::class, 'index']); + Route::get('collection_regexes-edit', [AdminCollectionRegexesController::class, 'edit']); + Route::post('collection_regexes-edit', [AdminCollectionRegexesController::class, 'edit']); + Route::get('collection_regexes-test', [AdminCollectionRegexesController::class, 'testRegex']); + Route::post('collection_regexes-test', [AdminCollectionRegexesController::class, 'testRegex']); + Route::get('release_naming_regexes-list', [AdminReleaseNamingRegexesController::class, 'index']); + Route::post('release_naming_regexes-list', [AdminReleaseNamingRegexesController::class, 'index']); + Route::get('release_naming_regexes-edit', [AdminReleaseNamingRegexesController::class, 'edit']); + Route::post('release_naming_regexes-edit', [AdminReleaseNamingRegexesController::class, 'edit']); + Route::get('release_naming_regexes-test', [AdminReleaseNamingRegexesController::class, 'testRegex']); + Route::post('release_naming_regexes-test', [AdminReleaseNamingRegexesController::class, 'testRegex']); + Route::get('ajax', [AdminAjaxController::class, 'ajaxAction']); + Route::post('ajax', [AdminAjaxController::class, 'ajaxAction']); + Route::get('tmux-edit', [AdminTmuxController::class, 'edit']); + Route::post('tmux-edit', [AdminTmuxController::class, 'edit']); + Route::get('release-list', [AdminReleasesController::class, 'index']); + Route::post('release-list', [AdminReleasesController::class, 'index']); + Route::get('release-delete/{id}', [AdminReleasesController::class, 'destroy']); + Route::post('release-delete/{id}', [AdminReleasesController::class, 'destroy']); + Route::get('show-list', [AdminShowsController::class, 'index']); + Route::post('show-list', [AdminShowsController::class, 'index']); + Route::get('show-edit', [AdminShowsController::class, 'edit']); + Route::post('show-edit', [AdminShowsController::class, 'edit']); + Route::get('show-remove', [AdminShowsController::class, 'destroy']); + Route::post('show-remove', [AdminShowsController::class, 'destroy']); + Route::get('comments-list', [AdminCommentsController::class, 'index']); + Route::post('comments-list', [AdminCommentsController::class, 'index']); + Route::get('comments-delete/{id}', [AdminCommentsController::class, 'destroy']); + Route::post('comments-delete/{id}', [AdminCommentsController::class, 'destroy']); + Route::get('console-list', [ConsoleController::class, 'index']); + Route::post('console-list', [AdminConsoleController::class, 'index']); + Route::get('console-edit', [AdminConsoleController::class, 'edit']); + Route::post('console-edit', [AdminConsoleController::class, 'edit']); + Route::get('failrel-list', [AdminFailedReleasesController::class, 'index']); + Route::get('game-list', [AdminGameController::class, 'index']); + Route::post('game-list', [AdminGameController::class, 'index']); + Route::get('game-edit', [AdminGameController::class, 'edit']); + Route::post('game-edit', [AdminGameController::class, 'edit']); + Route::get('movie-list', [AdminMovieController::class, 'index']); + Route::post('movie-list', [AdminMovieController::class, 'index']); + Route::get('movie-edit', [AdminMovieController::class, 'edit']); + Route::post('movie-edit', [AdminMovieController::class, 'edit']); + Route::get('movie-add', [AdminMovieController::class, 'create']); + Route::post('movie-add', [AdminMovieController::class, 'create']); + Route::get('music-list', [AdminMusicController::class, 'index']); + Route::post('music-list', [AdminMusicController::class, 'index']); + Route::get('music-edit', [AdminMusicController::class, 'edit']); + Route::post('music-edit', [AdminMusicController::class, 'edit']); + Route::get('nzb-import', [AdminNzbController::class, 'import']); + Route::post('nzb-import', [AdminNzbController::class, 'import']); + Route::get('nzb-export', [AdminNzbController::class, 'export']); + Route::post('nzb-export', [AdminNzbController::class, 'export']); + Route::get('predb', [AdminPredbController::class, 'index']); + Route::post('predb', [AdminPredbController::class, 'index']); + Route::get('group-list', [AdminGroupController::class, 'index']); + Route::post('group-list', [AdminGroupController::class, 'index']); + Route::get('group-edit', [AdminGroupController::class, 'edit']); + Route::post('group-edit', [AdminGroupController::class, 'edit']); + Route::get('group-bulk', [AdminGroupController::class, 'createBulk']); + Route::post('group-bulk', [AdminGroupController::class, 'createBulk']); + Route::get('group-list-active', [AdminGroupController::class, 'active']); + Route::post('group-list-active', [AdminGroupController::class, 'active']); + Route::get('group-list-inactive', [AdminGroupController::class, 'inactive']); + Route::post('group-list-inactive', [AdminGroupController::class, 'inactive']); }); - Route::get('nfo/{id?}', [NfoController::class, 'showNfo'])->name('nfo'); - - Route::post('nfo/{id?}', [NfoController::class, 'showNfo'])->name('nfo'); - - Route::get('contact-us', [ContactUsController::class, 'showContactForm'])->name('contact-us'); - Route::post('contact-us', [ContactUsController::class, 'contact'])->name('contact-us'); - - Route::get('profileedit', [ProfileController::class, 'edit'])->name('profileedit'); - - Route::post('profileedit', [ProfileController::class, 'edit'])->name('profileedit'); - - Route::get('profile_delete', [ProfileController::class, 'destroy'])->name('profile_delete'); - - Route::post('profile_delete', [ProfileController::class, 'destroy'])->name('profile_delete'); - - Route::get('search', [SearchController::class, 'search'])->name('search'); - - Route::post('search', [SearchController::class, 'search'])->name('search'); - - Route::get('mymovies', [MyMoviesController::class, 'show'])->name('mymovies'); - - Route::post('mymovies', [MyMoviesController::class, 'show'])->name('mymovies'); - - Route::get('myshows', [MyShowsController::class, 'show'])->name('myshows'); - - Route::post('myshows', [MyShowsController::class, 'show'])->name('myshows'); - - Route::get('myshows/browse', [MyShowsController::class, 'browse']); - - Route::post('myshows/browse', [MyShowsController::class, 'browse']); - - Route::get('filelist/{guid}', [FileListController::class, 'show']); - - Route::post('filelist/{guid}', [FileListController::class, 'show']); - - Route::get('series/{id?}', [SeriesController::class, 'index'])->name('series'); - - Route::post('series/{id?}', [SeriesController::class, 'index'])->name('series'); - - Route::get('ajax_profile', [AjaxController::class, 'profile']); - - Route::post('ajax_profile', [AjaxController::class, 'profile']); - - Route::get('2fa', [PasswordSecurityController::class, 'show2faForm']); - Route::post('generate2faSecret', [PasswordSecurityController::class, 'generate2faSecret'])->name('generate2faSecret'); - Route::post('2fa', [PasswordSecurityController::class, 'enable2fa'])->name('enable2fa'); - Route::post('disable2fa', [PasswordSecurityController::class, 'disable2fa'])->name('disable2fa'); -}); - -Route::middleware('role:Admin', '2fa')->prefix('admin')->group(function () { - Route::get('index', [AdminPageController::class, 'index']); - Route::get('anidb-delete/{id}', [AdminAnidbController::class, 'destroy']); - Route::post('anidb-delete/{id}', [AdminAnidbController::class, 'destroy']); - Route::get('anidb-edit/{id}', [AdminAnidbController::class, 'edit']); - Route::post('anidb-edit/{id}', [AdminAnidbController::class, 'edit']); - Route::get('anidb-list', [AdminAnidbController::class, 'index']); - Route::post('anidb-list', [AdminAnidbController::class, 'index']); - Route::get('binaryblacklist-list', [AdminBlacklistController::class, 'index']); - Route::post('binaryblacklist-list', [AdminBlacklistController::class, 'index']); - Route::get('binaryblacklist-edit', [AdminBlacklistController::class, 'edit']); - Route::post('binaryblacklist-edit', [AdminBlacklistController::class, 'edit']); - Route::get('book-list', [AdminBookController::class, 'index']); - Route::post('book-list', [AdminBookController::class, 'index']); - Route::get('book-edit', [AdminBookController::class, 'edit']); - Route::post('book-edit', [AdminBookController::class, 'edit']); - Route::get('category-list', [AdminCategoryController::class, 'index']); - Route::post('category-list', [AdminCategoryController::class, 'index']); - Route::get('category-edit', [AdminCategoryController::class, 'edit']); - Route::post('category-edit', [AdminCategoryController::class, 'edit']); - Route::get('user-list', [AdminUserController::class, 'index']); - Route::post('user-list', [AdminUserController::class, 'index']); - Route::get('user-edit', [AdminUserController::class, 'edit']); - Route::post('user-edit', [AdminUserController::class, 'edit']); - Route::get('user-delete', [AdminUserController::class, 'destroy']); - Route::post('user-delete', [AdminUserController::class, 'destroy']); - Route::get('verify', [AdminUserController::class, 'verify']); - Route::post('verify', [AdminUserController::class, 'verify']); - Route::get('resendverification', [AdminUserController::class, 'resendVerification']); - Route::post('resendverification', [AdminUserController::class, 'resendVerification']); - Route::get('site-edit', [AdminSiteController::class, 'edit']); - Route::post('site-edit', [AdminSiteController::class, 'edit']); - Route::get('site-stats', [AdminSiteController::class, 'stats']); - Route::post('site-stats', [AdminSiteController::class, 'stats']); - Route::get('role-list', [AdminRoleController::class, 'index']); - Route::post('role-list', [AdminRoleController::class, 'index']); - Route::get('role-add', [AdminRoleController::class, 'create']); - Route::post('role-add', [AdminRoleController::class, 'create']); - Route::get('role-edit', [AdminRoleController::class, 'edit']); - Route::post('role-edit', [AdminRoleController::class, 'edit']); - Route::get('role-delete', [AdminRoleController::class, 'destroy']); - Route::post('role-delete', [AdminRoleController::class, 'destroy']); - Route::get('content-list', [AdminContentController::class, 'index']); - Route::post('content-list', [AdminContentController::class, 'index']); - Route::get('content-add', [AdminContentController::class, 'create']); - Route::post('content-add', [AdminContentController::class, 'create']); - Route::get('content-delete', [AdminContentController::class, 'destroy']); - Route::post('content-delete', [AdminContentController::class, 'destroy']); - Route::get('category_regexes-list', [AdminCategoryRegexesController::class, 'index']); - Route::post('category_regexes-list', [AdminCategoryRegexesController::class, 'index']); - Route::get('category_regexes-edit', [AdminCategoryRegexesController::class, 'edit']); - Route::post('category_regexes-edit', [AdminCategoryRegexesController::class, 'edit']); - Route::get('collection_regexes-list', [AdminCollectionRegexesController::class, 'index']); - Route::post('collection_regexes-list', [AdminCollectionRegexesController::class, 'index']); - Route::get('collection_regexes-edit', [AdminCollectionRegexesController::class, 'edit']); - Route::post('collection_regexes-edit', [AdminCollectionRegexesController::class, 'edit']); - Route::get('collection_regexes-test', [AdminCollectionRegexesController::class, 'testRegex']); - Route::post('collection_regexes-test', [AdminCollectionRegexesController::class, 'testRegex']); - Route::get('release_naming_regexes-list', [AdminReleaseNamingRegexesController::class, 'index']); - Route::post('release_naming_regexes-list', [AdminReleaseNamingRegexesController::class, 'index']); - Route::get('release_naming_regexes-edit', [AdminReleaseNamingRegexesController::class, 'edit']); - Route::post('release_naming_regexes-edit', [AdminReleaseNamingRegexesController::class, 'edit']); - Route::get('release_naming_regexes-test', [AdminReleaseNamingRegexesController::class, 'testRegex']); - Route::post('release_naming_regexes-test', [AdminReleaseNamingRegexesController::class, 'testRegex']); - Route::get('ajax', [AdminAjaxController::class, 'ajaxAction']); - Route::post('ajax', [AdminAjaxController::class, 'ajaxAction']); - Route::get('tmux-edit', [AdminTmuxController::class, 'edit']); - Route::post('tmux-edit', [AdminTmuxController::class, 'edit']); - Route::get('release-list', [AdminReleasesController::class, 'index']); - Route::post('release-list', [AdminReleasesController::class, 'index']); - Route::get('release-delete/{id}', [AdminReleasesController::class, 'destroy']); - Route::post('release-delete/{id}', [AdminReleasesController::class, 'destroy']); - Route::get('show-list', [AdminShowsController::class, 'index']); - Route::post('show-list', [AdminShowsController::class, 'index']); - Route::get('show-edit', [AdminShowsController::class, 'edit']); - Route::post('show-edit', [AdminShowsController::class, 'edit']); - Route::get('show-remove', [AdminShowsController::class, 'destroy']); - Route::post('show-remove', [AdminShowsController::class, 'destroy']); - Route::get('comments-list', [AdminCommentsController::class, 'index']); - Route::post('comments-list', [AdminCommentsController::class, 'index']); - Route::get('comments-delete/{id}', [AdminCommentsController::class, 'destroy']); - Route::post('comments-delete/{id}', [AdminCommentsController::class, 'destroy']); - Route::get('console-list', [ConsoleController::class, 'index']); - Route::post('console-list', [AdminConsoleController::class, 'index']); - Route::get('console-edit', [AdminConsoleController::class, 'edit']); - Route::post('console-edit', [AdminConsoleController::class, 'edit']); - Route::get('failrel-list', [AdminFailedReleasesController::class, 'index']); - Route::get('game-list', [AdminGameController::class, 'index']); - Route::post('game-list', [AdminGameController::class, 'index']); - Route::get('game-edit', [AdminGameController::class, 'edit']); - Route::post('game-edit', [AdminGameController::class, 'edit']); - Route::get('movie-list', [AdminMovieController::class, 'index']); - Route::post('movie-list', [AdminMovieController::class, 'index']); - Route::get('movie-edit', [AdminMovieController::class, 'edit']); - Route::post('movie-edit', [AdminMovieController::class, 'edit']); - Route::get('movie-add', [AdminMovieController::class, 'create']); - Route::post('movie-add', [AdminMovieController::class, 'create']); - Route::get('music-list', [AdminMusicController::class, 'index']); - Route::post('music-list', [AdminMusicController::class, 'index']); - Route::get('music-edit', [AdminMusicController::class, 'edit']); - Route::post('music-edit', [AdminMusicController::class, 'edit']); - Route::get('nzb-import', [AdminNzbController::class, 'import']); - Route::post('nzb-import', [AdminNzbController::class, 'import']); - Route::get('nzb-export', [AdminNzbController::class, 'export']); - Route::post('nzb-export', [AdminNzbController::class, 'export']); - Route::get('predb', [AdminPredbController::class, 'index']); - Route::post('predb', [AdminPredbController::class, 'index']); - Route::get('group-list', [AdminGroupController::class, 'index']); - Route::post('group-list', [AdminGroupController::class, 'index']); - Route::get('group-edit', [AdminGroupController::class, 'edit']); - Route::post('group-edit', [AdminGroupController::class, 'edit']); - Route::get('group-bulk', [AdminGroupController::class, 'createBulk']); - Route::post('group-bulk', [AdminGroupController::class, 'createBulk']); - Route::get('group-list-active', [AdminGroupController::class, 'active']); - Route::post('group-list-active', [AdminGroupController::class, 'active']); - Route::get('group-list-inactive', [AdminGroupController::class, 'inactive']); - Route::post('group-list-inactive', [AdminGroupController::class, 'inactive']); -}); - -Route::middleware('role_or_permission:Admin|Moderator|edit release')->prefix('admin')->group(function () { - Route::get('release-edit', [AdminReleasesController::class, 'edit']); - Route::post('release-edit', [AdminReleasesController::class, 'edit']); -}); - -Route::post('2faVerify', function () { - return redirect()->to(URL()->previous()); -})->name('2faVerify')->middleware('2fa'); - -Route::post('btcpay/webhook', [BtcPaymentController::class, 'btcPayCallback'])->name('btcpay.webhook'); + Route::middleware('role_or_permission:Admin|Moderator|edit release')->prefix('admin')->group(function () { + Route::get('release-edit', [AdminReleasesController::class, 'edit']); + Route::post('release-edit', [AdminReleasesController::class, 'edit']); + }); + + Route::post('2faVerify', function () { + return redirect()->to(URL()->previous()); + })->name('2faVerify')->middleware('2fa'); + + Route::post('btcpay/webhook', [BtcPaymentController::class, 'btcPayCallback'])->name('btcpay.webhook'); diff --git a/vite.config.js b/vite.config.js index 2c5398be51..7bc1aa0d54 100644 --- a/vite.config.js +++ b/vite.config.js @@ -7,8 +7,6 @@ export default defineConfig({ input: [ 'resources/css/app.css', 'resources/js/app.js', - 'resources/forum/blade-tailwind/css/forum.css', - 'resources/forum/blade-tailwind/js/forum.js', 'resources/forum/livewire-tailwind/css/forum.css', 'resources/forum/livewire-tailwind/js/forum.js', ], From 80a65a95fdefe87b17b43077f8df84c02b545ea7 Mon Sep 17 00:00:00 2001 From: DariusIII Date: Sun, 28 Apr 2024 01:37:15 +0200 Subject: [PATCH 30/47] CS fixes --- config/forum/integration.php | 2 +- routes/web.php | 636 +++++++++++++++++------------------ 2 files changed, 319 insertions(+), 319 deletions(-) diff --git a/config/forum/integration.php b/config/forum/integration.php index d7f6d60b85..8ed0e73511 100644 --- a/config/forum/integration.php +++ b/config/forum/integration.php @@ -16,7 +16,7 @@ 'forum' => App\Policies\ForumPolicy::class, 'model' => [ TeamTeaTime\Forum\Models\Category::class => \App\Policies\CategoryPolicy::class, - TeamTeaTime\Forum\Models\Thread::class =>\TeamTeaTime\Forum\Policies\ThreadPolicy::class, + TeamTeaTime\Forum\Models\Thread::class => \TeamTeaTime\Forum\Policies\ThreadPolicy::class, TeamTeaTime\Forum\Models\Post::class => \TeamTeaTime\Forum\Policies\PostPolicy::class, ], ], diff --git a/routes/web.php b/routes/web.php index 8fdc64b216..be7e04a032 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,349 +1,349 @@ name('register'); - - Route::get('forgottenpassword', [ForgotPasswordController::class, 'showLinkRequestForm'])->name('forgottenpassword'); - Route::post('forgottenpassword', [ForgotPasswordController::class, 'showLinkRequestForm'])->name('forgottenpassword'); - - Route::get('terms-and-conditions', [TermsController::class, 'terms']); - - Route::get('login', [LoginController::class, 'showLoginForm']); - Route::post('login', [LoginController::class, 'login'])->name('login'); - Route::get('logout', [LoginController::class, 'logout'])->name('logout'); - - Route::middleware('isVerified')->group(function () { - Route::get('resetpassword', [ResetPasswordController::class, 'reset']); - Route::post('resetpassword', [ResetPasswordController::class, 'reset']); - - Route::get('profile', [ProfileController::class, 'show']); - - Route::prefix('browse')->group(function () { - Route::get('tags', [BrowseController::class, 'tags']); - Route::get('group', [BrowseController::class, 'group']); - Route::get('All', [BrowseController::class, 'index']); - Route::get('{parentCategory}/{id?}', [BrowseController::class, 'show'])->middleware('clearance'); - }); - - Route::prefix('cart')->group(function () { - Route::get('index', [CartController::class, 'index']); - Route::post('index', [CartController::class, 'index']); - Route::get('add', [CartController::class, 'store']); - Route::post('add', [CartController::class, 'store']); - Route::get('delete/{id}', [CartController::class, 'destroy']); - Route::post('delete/{id}', [CartController::class, 'destroy']); - }); - - Route::get('details/{guid}', [DetailsController::class, 'show']); - Route::post('details/{guid}', [DetailsController::class, 'show']); - - Route::get('getnzb', [GetNzbController::class, 'getNzb'])->name('getnzb'); - Route::post('getnzb', [GetNzbController::class, 'getNzb'])->name('getnzb'); - - Route::get('rsshelp', [RssController::class, 'showRssDesc'])->name('rsshelp'); - Route::post('rsshelp', [RssController::class, 'showRssDesc'])->name('rsshelp'); - - Route::get('profile', [ProfileController::class, 'show'])->name('profile'); - - Route::get('apihelp', [ApiHelpController::class, 'index'])->name('apihelp'); - Route::get('apiv2help', [ApiHelpController::class, 'apiv2'])->name('apiv2help'); - - Route::get('browsegroup', [BrowseGroupController::class, 'show'])->name('browsegroup'); - - Route::get('content', [ContentController::class, 'show'])->name('content'); - - Route::post('content', [ContentController::class, 'show'])->name('content'); - - Route::get('failed', [FailedReleasesController::class, 'failed'])->name('failed'); - - Route::post('failed', [FailedReleasesController::class, 'failed'])->name('failed'); - - Route::middleware('clearance')->group(function () { - Route::get('Games', [GamesController::class, 'show'])->name('Games'); - Route::post('Games', [GamesController::class, 'show'])->name('Games'); - - Route::get('Movies/{id?}', [MovieController::class, 'showMovies'])->name('Movies'); - - Route::get('movie', [MovieController::class, 'showMovies'])->name('movie'); - - Route::get('movietrailers', [MovieController::class, 'showTrailer'])->name('movietrailers'); - - Route::post('Movies/{id?}', [MovieController::class, 'showMovies'])->name('Movies'); - - Route::post('movie', [MovieController::class, 'showMovies'])->name('movie'); - - Route::post('movietrailers', [MovieController::class, 'showTrailer'])->name('movietrailers'); - - Route::get('Audio/{id?}', [MusicController::class, 'show'])->name('Audio'); - - Route::post('Audio/{id?}', [MusicController::class, 'show'])->name('Audio'); - - Route::get('Console/{id?}', [ConsoleController::class, 'show'])->name('Console'); - - Route::post('Console/{id?}', [ConsoleController::class, 'show'])->name('Console'); - - Route::get('XXX/{id?}', [AdultController::class, 'show'])->name('XXX'); +/* +|-------------------------------------------------------------------------- +| Web Routes +|-------------------------------------------------------------------------- +| +| Here is where you can register web routes for your application. These +| routes are loaded by the RouteServiceProvider within a group which +| contains the "web" middleware group. Now create something great! +| +*/ + +use App\Http\Controllers\Admin\AdminAjaxController; +use App\Http\Controllers\Admin\AdminAnidbController; +use App\Http\Controllers\Admin\AdminBlacklistController; +use App\Http\Controllers\Admin\AdminBookController; +use App\Http\Controllers\Admin\AdminCategoryController; +use App\Http\Controllers\Admin\AdminCategoryRegexesController; +use App\Http\Controllers\Admin\AdminCollectionRegexesController; +use App\Http\Controllers\Admin\AdminCommentsController; +use App\Http\Controllers\Admin\AdminConsoleController; +use App\Http\Controllers\Admin\AdminContentController; +use App\Http\Controllers\Admin\AdminFailedReleasesController; +use App\Http\Controllers\Admin\AdminGameController; +use App\Http\Controllers\Admin\AdminGroupController; +use App\Http\Controllers\Admin\AdminMovieController; +use App\Http\Controllers\Admin\AdminMusicController; +use App\Http\Controllers\Admin\AdminNzbController; +use App\Http\Controllers\Admin\AdminPageController; +use App\Http\Controllers\Admin\AdminPredbController; +use App\Http\Controllers\Admin\AdminReleaseNamingRegexesController; +use App\Http\Controllers\Admin\AdminReleasesController; +use App\Http\Controllers\Admin\AdminRoleController; +use App\Http\Controllers\Admin\AdminShowsController; +use App\Http\Controllers\Admin\AdminSiteController; +use App\Http\Controllers\Admin\AdminTmuxController; +use App\Http\Controllers\Admin\AdminUserController; +use App\Http\Controllers\AdultController; +use App\Http\Controllers\AjaxController; +use App\Http\Controllers\AnimeController; +use App\Http\Controllers\ApiHelpController; +use App\Http\Controllers\Auth\ForgotPasswordController; +use App\Http\Controllers\Auth\LoginController; +use App\Http\Controllers\Auth\RegisterController; +use App\Http\Controllers\Auth\ResetPasswordController; +use App\Http\Controllers\BooksController; +use App\Http\Controllers\BrowseController; +use App\Http\Controllers\BrowseGroupController; +use App\Http\Controllers\BtcPaymentController; +use App\Http\Controllers\CartController; +use App\Http\Controllers\ConsoleController; +use App\Http\Controllers\ContactUsController; +use App\Http\Controllers\ContentController; +use App\Http\Controllers\DetailsController; +use App\Http\Controllers\FailedReleasesController; +use App\Http\Controllers\FileListController; +use App\Http\Controllers\GamesController; +use App\Http\Controllers\GetNzbController; +use App\Http\Controllers\MovieController; +use App\Http\Controllers\MusicController; +use App\Http\Controllers\MyMoviesController; +use App\Http\Controllers\MyShowsController; +use App\Http\Controllers\NfoController; +use App\Http\Controllers\PasswordSecurityController; +use App\Http\Controllers\ProfileController; +use App\Http\Controllers\RssController; +use App\Http\Controllers\SearchController; +use App\Http\Controllers\SeriesController; +use App\Http\Controllers\TermsController; + +Auth::routes(); + +Route::get('/', [ContentController::class, 'show']); + +Route::get('register', [RegisterController::class, 'showRegistrationForm']); +Route::post('register', [RegisterController::class, 'register'])->name('register'); + +Route::get('forgottenpassword', [ForgotPasswordController::class, 'showLinkRequestForm'])->name('forgottenpassword'); +Route::post('forgottenpassword', [ForgotPasswordController::class, 'showLinkRequestForm'])->name('forgottenpassword'); + +Route::get('terms-and-conditions', [TermsController::class, 'terms']); + +Route::get('login', [LoginController::class, 'showLoginForm']); +Route::post('login', [LoginController::class, 'login'])->name('login'); +Route::get('logout', [LoginController::class, 'logout'])->name('logout'); + +Route::middleware('isVerified')->group(function () { + Route::get('resetpassword', [ResetPasswordController::class, 'reset']); + Route::post('resetpassword', [ResetPasswordController::class, 'reset']); + + Route::get('profile', [ProfileController::class, 'show']); + + Route::prefix('browse')->group(function () { + Route::get('tags', [BrowseController::class, 'tags']); + Route::get('group', [BrowseController::class, 'group']); + Route::get('All', [BrowseController::class, 'index']); + Route::get('{parentCategory}/{id?}', [BrowseController::class, 'show'])->middleware('clearance'); + }); - Route::post('XXX/{id?}', [AdultController::class, 'show'])->name('XXX'); + Route::prefix('cart')->group(function () { + Route::get('index', [CartController::class, 'index']); + Route::post('index', [CartController::class, 'index']); + Route::get('add', [CartController::class, 'store']); + Route::post('add', [CartController::class, 'store']); + Route::get('delete/{id}', [CartController::class, 'destroy']); + Route::post('delete/{id}', [CartController::class, 'destroy']); + }); - Route::get('anime', [AnimeController::class, 'showAnime'])->name('anime'); - Route::post('anime', [AnimeController::class, 'showAnime'])->name('anime'); + Route::get('details/{guid}', [DetailsController::class, 'show']); + Route::post('details/{guid}', [DetailsController::class, 'show']); - Route::get('animelist', [AnimeController::class, 'showList'])->name('animelist'); - Route::post('animelist', [AnimeController::class, 'showList'])->name('animelist'); + Route::get('getnzb', [GetNzbController::class, 'getNzb'])->name('getnzb'); + Route::post('getnzb', [GetNzbController::class, 'getNzb'])->name('getnzb'); - Route::get('Books/{id?}', [BooksController::class, 'index'])->name('Books'); - Route::post('Books/{id?}', [BooksController::class, 'index'])->name('Books'); - }); + Route::get('rsshelp', [RssController::class, 'showRssDesc'])->name('rsshelp'); + Route::post('rsshelp', [RssController::class, 'showRssDesc'])->name('rsshelp'); - Route::get('nfo/{id?}', [NfoController::class, 'showNfo'])->name('nfo'); + Route::get('profile', [ProfileController::class, 'show'])->name('profile'); - Route::post('nfo/{id?}', [NfoController::class, 'showNfo'])->name('nfo'); + Route::get('apihelp', [ApiHelpController::class, 'index'])->name('apihelp'); + Route::get('apiv2help', [ApiHelpController::class, 'apiv2'])->name('apiv2help'); - Route::get('contact-us', [ContactUsController::class, 'showContactForm'])->name('contact-us'); - Route::post('contact-us', [ContactUsController::class, 'contact'])->name('contact-us'); + Route::get('browsegroup', [BrowseGroupController::class, 'show'])->name('browsegroup'); - Route::get('profileedit', [ProfileController::class, 'edit'])->name('profileedit'); + Route::get('content', [ContentController::class, 'show'])->name('content'); - Route::post('profileedit', [ProfileController::class, 'edit'])->name('profileedit'); + Route::post('content', [ContentController::class, 'show'])->name('content'); - Route::get('profile_delete', [ProfileController::class, 'destroy'])->name('profile_delete'); + Route::get('failed', [FailedReleasesController::class, 'failed'])->name('failed'); - Route::post('profile_delete', [ProfileController::class, 'destroy'])->name('profile_delete'); + Route::post('failed', [FailedReleasesController::class, 'failed'])->name('failed'); - Route::get('search', [SearchController::class, 'search'])->name('search'); + Route::middleware('clearance')->group(function () { + Route::get('Games', [GamesController::class, 'show'])->name('Games'); + Route::post('Games', [GamesController::class, 'show'])->name('Games'); - Route::post('search', [SearchController::class, 'search'])->name('search'); + Route::get('Movies/{id?}', [MovieController::class, 'showMovies'])->name('Movies'); - Route::get('mymovies', [MyMoviesController::class, 'show'])->name('mymovies'); + Route::get('movie', [MovieController::class, 'showMovies'])->name('movie'); - Route::post('mymovies', [MyMoviesController::class, 'show'])->name('mymovies'); + Route::get('movietrailers', [MovieController::class, 'showTrailer'])->name('movietrailers'); - Route::get('myshows', [MyShowsController::class, 'show'])->name('myshows'); + Route::post('Movies/{id?}', [MovieController::class, 'showMovies'])->name('Movies'); - Route::post('myshows', [MyShowsController::class, 'show'])->name('myshows'); + Route::post('movie', [MovieController::class, 'showMovies'])->name('movie'); - Route::get('myshows/browse', [MyShowsController::class, 'browse']); + Route::post('movietrailers', [MovieController::class, 'showTrailer'])->name('movietrailers'); - Route::post('myshows/browse', [MyShowsController::class, 'browse']); + Route::get('Audio/{id?}', [MusicController::class, 'show'])->name('Audio'); - Route::get('filelist/{guid}', [FileListController::class, 'show']); + Route::post('Audio/{id?}', [MusicController::class, 'show'])->name('Audio'); - Route::post('filelist/{guid}', [FileListController::class, 'show']); + Route::get('Console/{id?}', [ConsoleController::class, 'show'])->name('Console'); - Route::get('series/{id?}', [SeriesController::class, 'index'])->name('series'); + Route::post('Console/{id?}', [ConsoleController::class, 'show'])->name('Console'); - Route::post('series/{id?}', [SeriesController::class, 'index'])->name('series'); + Route::get('XXX/{id?}', [AdultController::class, 'show'])->name('XXX'); - Route::get('ajax_profile', [AjaxController::class, 'profile']); + Route::post('XXX/{id?}', [AdultController::class, 'show'])->name('XXX'); - Route::post('ajax_profile', [AjaxController::class, 'profile']); + Route::get('anime', [AnimeController::class, 'showAnime'])->name('anime'); + Route::post('anime', [AnimeController::class, 'showAnime'])->name('anime'); - Route::get('2fa', [PasswordSecurityController::class, 'show2faForm']); - Route::post('generate2faSecret', [PasswordSecurityController::class, 'generate2faSecret'])->name('generate2faSecret'); - Route::post('2fa', [PasswordSecurityController::class, 'enable2fa'])->name('enable2fa'); - Route::post('disable2fa', [PasswordSecurityController::class, 'disable2fa'])->name('disable2fa'); - }); + Route::get('animelist', [AnimeController::class, 'showList'])->name('animelist'); + Route::post('animelist', [AnimeController::class, 'showList'])->name('animelist'); - Route::middleware('role:Admin', '2fa')->prefix('admin')->group(function () { - Route::get('index', [AdminPageController::class, 'index']); - Route::get('anidb-delete/{id}', [AdminAnidbController::class, 'destroy']); - Route::post('anidb-delete/{id}', [AdminAnidbController::class, 'destroy']); - Route::get('anidb-edit/{id}', [AdminAnidbController::class, 'edit']); - Route::post('anidb-edit/{id}', [AdminAnidbController::class, 'edit']); - Route::get('anidb-list', [AdminAnidbController::class, 'index']); - Route::post('anidb-list', [AdminAnidbController::class, 'index']); - Route::get('binaryblacklist-list', [AdminBlacklistController::class, 'index']); - Route::post('binaryblacklist-list', [AdminBlacklistController::class, 'index']); - Route::get('binaryblacklist-edit', [AdminBlacklistController::class, 'edit']); - Route::post('binaryblacklist-edit', [AdminBlacklistController::class, 'edit']); - Route::get('book-list', [AdminBookController::class, 'index']); - Route::post('book-list', [AdminBookController::class, 'index']); - Route::get('book-edit', [AdminBookController::class, 'edit']); - Route::post('book-edit', [AdminBookController::class, 'edit']); - Route::get('category-list', [AdminCategoryController::class, 'index']); - Route::post('category-list', [AdminCategoryController::class, 'index']); - Route::get('category-edit', [AdminCategoryController::class, 'edit']); - Route::post('category-edit', [AdminCategoryController::class, 'edit']); - Route::get('user-list', [AdminUserController::class, 'index']); - Route::post('user-list', [AdminUserController::class, 'index']); - Route::get('user-edit', [AdminUserController::class, 'edit']); - Route::post('user-edit', [AdminUserController::class, 'edit']); - Route::get('user-delete', [AdminUserController::class, 'destroy']); - Route::post('user-delete', [AdminUserController::class, 'destroy']); - Route::get('verify', [AdminUserController::class, 'verify']); - Route::post('verify', [AdminUserController::class, 'verify']); - Route::get('resendverification', [AdminUserController::class, 'resendVerification']); - Route::post('resendverification', [AdminUserController::class, 'resendVerification']); - Route::get('site-edit', [AdminSiteController::class, 'edit']); - Route::post('site-edit', [AdminSiteController::class, 'edit']); - Route::get('site-stats', [AdminSiteController::class, 'stats']); - Route::post('site-stats', [AdminSiteController::class, 'stats']); - Route::get('role-list', [AdminRoleController::class, 'index']); - Route::post('role-list', [AdminRoleController::class, 'index']); - Route::get('role-add', [AdminRoleController::class, 'create']); - Route::post('role-add', [AdminRoleController::class, 'create']); - Route::get('role-edit', [AdminRoleController::class, 'edit']); - Route::post('role-edit', [AdminRoleController::class, 'edit']); - Route::get('role-delete', [AdminRoleController::class, 'destroy']); - Route::post('role-delete', [AdminRoleController::class, 'destroy']); - Route::get('content-list', [AdminContentController::class, 'index']); - Route::post('content-list', [AdminContentController::class, 'index']); - Route::get('content-add', [AdminContentController::class, 'create']); - Route::post('content-add', [AdminContentController::class, 'create']); - Route::get('content-delete', [AdminContentController::class, 'destroy']); - Route::post('content-delete', [AdminContentController::class, 'destroy']); - Route::get('category_regexes-list', [AdminCategoryRegexesController::class, 'index']); - Route::post('category_regexes-list', [AdminCategoryRegexesController::class, 'index']); - Route::get('category_regexes-edit', [AdminCategoryRegexesController::class, 'edit']); - Route::post('category_regexes-edit', [AdminCategoryRegexesController::class, 'edit']); - Route::get('collection_regexes-list', [AdminCollectionRegexesController::class, 'index']); - Route::post('collection_regexes-list', [AdminCollectionRegexesController::class, 'index']); - Route::get('collection_regexes-edit', [AdminCollectionRegexesController::class, 'edit']); - Route::post('collection_regexes-edit', [AdminCollectionRegexesController::class, 'edit']); - Route::get('collection_regexes-test', [AdminCollectionRegexesController::class, 'testRegex']); - Route::post('collection_regexes-test', [AdminCollectionRegexesController::class, 'testRegex']); - Route::get('release_naming_regexes-list', [AdminReleaseNamingRegexesController::class, 'index']); - Route::post('release_naming_regexes-list', [AdminReleaseNamingRegexesController::class, 'index']); - Route::get('release_naming_regexes-edit', [AdminReleaseNamingRegexesController::class, 'edit']); - Route::post('release_naming_regexes-edit', [AdminReleaseNamingRegexesController::class, 'edit']); - Route::get('release_naming_regexes-test', [AdminReleaseNamingRegexesController::class, 'testRegex']); - Route::post('release_naming_regexes-test', [AdminReleaseNamingRegexesController::class, 'testRegex']); - Route::get('ajax', [AdminAjaxController::class, 'ajaxAction']); - Route::post('ajax', [AdminAjaxController::class, 'ajaxAction']); - Route::get('tmux-edit', [AdminTmuxController::class, 'edit']); - Route::post('tmux-edit', [AdminTmuxController::class, 'edit']); - Route::get('release-list', [AdminReleasesController::class, 'index']); - Route::post('release-list', [AdminReleasesController::class, 'index']); - Route::get('release-delete/{id}', [AdminReleasesController::class, 'destroy']); - Route::post('release-delete/{id}', [AdminReleasesController::class, 'destroy']); - Route::get('show-list', [AdminShowsController::class, 'index']); - Route::post('show-list', [AdminShowsController::class, 'index']); - Route::get('show-edit', [AdminShowsController::class, 'edit']); - Route::post('show-edit', [AdminShowsController::class, 'edit']); - Route::get('show-remove', [AdminShowsController::class, 'destroy']); - Route::post('show-remove', [AdminShowsController::class, 'destroy']); - Route::get('comments-list', [AdminCommentsController::class, 'index']); - Route::post('comments-list', [AdminCommentsController::class, 'index']); - Route::get('comments-delete/{id}', [AdminCommentsController::class, 'destroy']); - Route::post('comments-delete/{id}', [AdminCommentsController::class, 'destroy']); - Route::get('console-list', [ConsoleController::class, 'index']); - Route::post('console-list', [AdminConsoleController::class, 'index']); - Route::get('console-edit', [AdminConsoleController::class, 'edit']); - Route::post('console-edit', [AdminConsoleController::class, 'edit']); - Route::get('failrel-list', [AdminFailedReleasesController::class, 'index']); - Route::get('game-list', [AdminGameController::class, 'index']); - Route::post('game-list', [AdminGameController::class, 'index']); - Route::get('game-edit', [AdminGameController::class, 'edit']); - Route::post('game-edit', [AdminGameController::class, 'edit']); - Route::get('movie-list', [AdminMovieController::class, 'index']); - Route::post('movie-list', [AdminMovieController::class, 'index']); - Route::get('movie-edit', [AdminMovieController::class, 'edit']); - Route::post('movie-edit', [AdminMovieController::class, 'edit']); - Route::get('movie-add', [AdminMovieController::class, 'create']); - Route::post('movie-add', [AdminMovieController::class, 'create']); - Route::get('music-list', [AdminMusicController::class, 'index']); - Route::post('music-list', [AdminMusicController::class, 'index']); - Route::get('music-edit', [AdminMusicController::class, 'edit']); - Route::post('music-edit', [AdminMusicController::class, 'edit']); - Route::get('nzb-import', [AdminNzbController::class, 'import']); - Route::post('nzb-import', [AdminNzbController::class, 'import']); - Route::get('nzb-export', [AdminNzbController::class, 'export']); - Route::post('nzb-export', [AdminNzbController::class, 'export']); - Route::get('predb', [AdminPredbController::class, 'index']); - Route::post('predb', [AdminPredbController::class, 'index']); - Route::get('group-list', [AdminGroupController::class, 'index']); - Route::post('group-list', [AdminGroupController::class, 'index']); - Route::get('group-edit', [AdminGroupController::class, 'edit']); - Route::post('group-edit', [AdminGroupController::class, 'edit']); - Route::get('group-bulk', [AdminGroupController::class, 'createBulk']); - Route::post('group-bulk', [AdminGroupController::class, 'createBulk']); - Route::get('group-list-active', [AdminGroupController::class, 'active']); - Route::post('group-list-active', [AdminGroupController::class, 'active']); - Route::get('group-list-inactive', [AdminGroupController::class, 'inactive']); - Route::post('group-list-inactive', [AdminGroupController::class, 'inactive']); + Route::get('Books/{id?}', [BooksController::class, 'index'])->name('Books'); + Route::post('Books/{id?}', [BooksController::class, 'index'])->name('Books'); }); - Route::middleware('role_or_permission:Admin|Moderator|edit release')->prefix('admin')->group(function () { - Route::get('release-edit', [AdminReleasesController::class, 'edit']); - Route::post('release-edit', [AdminReleasesController::class, 'edit']); - }); - - Route::post('2faVerify', function () { - return redirect()->to(URL()->previous()); - })->name('2faVerify')->middleware('2fa'); - - Route::post('btcpay/webhook', [BtcPaymentController::class, 'btcPayCallback'])->name('btcpay.webhook'); + Route::get('nfo/{id?}', [NfoController::class, 'showNfo'])->name('nfo'); + + Route::post('nfo/{id?}', [NfoController::class, 'showNfo'])->name('nfo'); + + Route::get('contact-us', [ContactUsController::class, 'showContactForm'])->name('contact-us'); + Route::post('contact-us', [ContactUsController::class, 'contact'])->name('contact-us'); + + Route::get('profileedit', [ProfileController::class, 'edit'])->name('profileedit'); + + Route::post('profileedit', [ProfileController::class, 'edit'])->name('profileedit'); + + Route::get('profile_delete', [ProfileController::class, 'destroy'])->name('profile_delete'); + + Route::post('profile_delete', [ProfileController::class, 'destroy'])->name('profile_delete'); + + Route::get('search', [SearchController::class, 'search'])->name('search'); + + Route::post('search', [SearchController::class, 'search'])->name('search'); + + Route::get('mymovies', [MyMoviesController::class, 'show'])->name('mymovies'); + + Route::post('mymovies', [MyMoviesController::class, 'show'])->name('mymovies'); + + Route::get('myshows', [MyShowsController::class, 'show'])->name('myshows'); + + Route::post('myshows', [MyShowsController::class, 'show'])->name('myshows'); + + Route::get('myshows/browse', [MyShowsController::class, 'browse']); + + Route::post('myshows/browse', [MyShowsController::class, 'browse']); + + Route::get('filelist/{guid}', [FileListController::class, 'show']); + + Route::post('filelist/{guid}', [FileListController::class, 'show']); + + Route::get('series/{id?}', [SeriesController::class, 'index'])->name('series'); + + Route::post('series/{id?}', [SeriesController::class, 'index'])->name('series'); + + Route::get('ajax_profile', [AjaxController::class, 'profile']); + + Route::post('ajax_profile', [AjaxController::class, 'profile']); + + Route::get('2fa', [PasswordSecurityController::class, 'show2faForm']); + Route::post('generate2faSecret', [PasswordSecurityController::class, 'generate2faSecret'])->name('generate2faSecret'); + Route::post('2fa', [PasswordSecurityController::class, 'enable2fa'])->name('enable2fa'); + Route::post('disable2fa', [PasswordSecurityController::class, 'disable2fa'])->name('disable2fa'); +}); + +Route::middleware('role:Admin', '2fa')->prefix('admin')->group(function () { + Route::get('index', [AdminPageController::class, 'index']); + Route::get('anidb-delete/{id}', [AdminAnidbController::class, 'destroy']); + Route::post('anidb-delete/{id}', [AdminAnidbController::class, 'destroy']); + Route::get('anidb-edit/{id}', [AdminAnidbController::class, 'edit']); + Route::post('anidb-edit/{id}', [AdminAnidbController::class, 'edit']); + Route::get('anidb-list', [AdminAnidbController::class, 'index']); + Route::post('anidb-list', [AdminAnidbController::class, 'index']); + Route::get('binaryblacklist-list', [AdminBlacklistController::class, 'index']); + Route::post('binaryblacklist-list', [AdminBlacklistController::class, 'index']); + Route::get('binaryblacklist-edit', [AdminBlacklistController::class, 'edit']); + Route::post('binaryblacklist-edit', [AdminBlacklistController::class, 'edit']); + Route::get('book-list', [AdminBookController::class, 'index']); + Route::post('book-list', [AdminBookController::class, 'index']); + Route::get('book-edit', [AdminBookController::class, 'edit']); + Route::post('book-edit', [AdminBookController::class, 'edit']); + Route::get('category-list', [AdminCategoryController::class, 'index']); + Route::post('category-list', [AdminCategoryController::class, 'index']); + Route::get('category-edit', [AdminCategoryController::class, 'edit']); + Route::post('category-edit', [AdminCategoryController::class, 'edit']); + Route::get('user-list', [AdminUserController::class, 'index']); + Route::post('user-list', [AdminUserController::class, 'index']); + Route::get('user-edit', [AdminUserController::class, 'edit']); + Route::post('user-edit', [AdminUserController::class, 'edit']); + Route::get('user-delete', [AdminUserController::class, 'destroy']); + Route::post('user-delete', [AdminUserController::class, 'destroy']); + Route::get('verify', [AdminUserController::class, 'verify']); + Route::post('verify', [AdminUserController::class, 'verify']); + Route::get('resendverification', [AdminUserController::class, 'resendVerification']); + Route::post('resendverification', [AdminUserController::class, 'resendVerification']); + Route::get('site-edit', [AdminSiteController::class, 'edit']); + Route::post('site-edit', [AdminSiteController::class, 'edit']); + Route::get('site-stats', [AdminSiteController::class, 'stats']); + Route::post('site-stats', [AdminSiteController::class, 'stats']); + Route::get('role-list', [AdminRoleController::class, 'index']); + Route::post('role-list', [AdminRoleController::class, 'index']); + Route::get('role-add', [AdminRoleController::class, 'create']); + Route::post('role-add', [AdminRoleController::class, 'create']); + Route::get('role-edit', [AdminRoleController::class, 'edit']); + Route::post('role-edit', [AdminRoleController::class, 'edit']); + Route::get('role-delete', [AdminRoleController::class, 'destroy']); + Route::post('role-delete', [AdminRoleController::class, 'destroy']); + Route::get('content-list', [AdminContentController::class, 'index']); + Route::post('content-list', [AdminContentController::class, 'index']); + Route::get('content-add', [AdminContentController::class, 'create']); + Route::post('content-add', [AdminContentController::class, 'create']); + Route::get('content-delete', [AdminContentController::class, 'destroy']); + Route::post('content-delete', [AdminContentController::class, 'destroy']); + Route::get('category_regexes-list', [AdminCategoryRegexesController::class, 'index']); + Route::post('category_regexes-list', [AdminCategoryRegexesController::class, 'index']); + Route::get('category_regexes-edit', [AdminCategoryRegexesController::class, 'edit']); + Route::post('category_regexes-edit', [AdminCategoryRegexesController::class, 'edit']); + Route::get('collection_regexes-list', [AdminCollectionRegexesController::class, 'index']); + Route::post('collection_regexes-list', [AdminCollectionRegexesController::class, 'index']); + Route::get('collection_regexes-edit', [AdminCollectionRegexesController::class, 'edit']); + Route::post('collection_regexes-edit', [AdminCollectionRegexesController::class, 'edit']); + Route::get('collection_regexes-test', [AdminCollectionRegexesController::class, 'testRegex']); + Route::post('collection_regexes-test', [AdminCollectionRegexesController::class, 'testRegex']); + Route::get('release_naming_regexes-list', [AdminReleaseNamingRegexesController::class, 'index']); + Route::post('release_naming_regexes-list', [AdminReleaseNamingRegexesController::class, 'index']); + Route::get('release_naming_regexes-edit', [AdminReleaseNamingRegexesController::class, 'edit']); + Route::post('release_naming_regexes-edit', [AdminReleaseNamingRegexesController::class, 'edit']); + Route::get('release_naming_regexes-test', [AdminReleaseNamingRegexesController::class, 'testRegex']); + Route::post('release_naming_regexes-test', [AdminReleaseNamingRegexesController::class, 'testRegex']); + Route::get('ajax', [AdminAjaxController::class, 'ajaxAction']); + Route::post('ajax', [AdminAjaxController::class, 'ajaxAction']); + Route::get('tmux-edit', [AdminTmuxController::class, 'edit']); + Route::post('tmux-edit', [AdminTmuxController::class, 'edit']); + Route::get('release-list', [AdminReleasesController::class, 'index']); + Route::post('release-list', [AdminReleasesController::class, 'index']); + Route::get('release-delete/{id}', [AdminReleasesController::class, 'destroy']); + Route::post('release-delete/{id}', [AdminReleasesController::class, 'destroy']); + Route::get('show-list', [AdminShowsController::class, 'index']); + Route::post('show-list', [AdminShowsController::class, 'index']); + Route::get('show-edit', [AdminShowsController::class, 'edit']); + Route::post('show-edit', [AdminShowsController::class, 'edit']); + Route::get('show-remove', [AdminShowsController::class, 'destroy']); + Route::post('show-remove', [AdminShowsController::class, 'destroy']); + Route::get('comments-list', [AdminCommentsController::class, 'index']); + Route::post('comments-list', [AdminCommentsController::class, 'index']); + Route::get('comments-delete/{id}', [AdminCommentsController::class, 'destroy']); + Route::post('comments-delete/{id}', [AdminCommentsController::class, 'destroy']); + Route::get('console-list', [ConsoleController::class, 'index']); + Route::post('console-list', [AdminConsoleController::class, 'index']); + Route::get('console-edit', [AdminConsoleController::class, 'edit']); + Route::post('console-edit', [AdminConsoleController::class, 'edit']); + Route::get('failrel-list', [AdminFailedReleasesController::class, 'index']); + Route::get('game-list', [AdminGameController::class, 'index']); + Route::post('game-list', [AdminGameController::class, 'index']); + Route::get('game-edit', [AdminGameController::class, 'edit']); + Route::post('game-edit', [AdminGameController::class, 'edit']); + Route::get('movie-list', [AdminMovieController::class, 'index']); + Route::post('movie-list', [AdminMovieController::class, 'index']); + Route::get('movie-edit', [AdminMovieController::class, 'edit']); + Route::post('movie-edit', [AdminMovieController::class, 'edit']); + Route::get('movie-add', [AdminMovieController::class, 'create']); + Route::post('movie-add', [AdminMovieController::class, 'create']); + Route::get('music-list', [AdminMusicController::class, 'index']); + Route::post('music-list', [AdminMusicController::class, 'index']); + Route::get('music-edit', [AdminMusicController::class, 'edit']); + Route::post('music-edit', [AdminMusicController::class, 'edit']); + Route::get('nzb-import', [AdminNzbController::class, 'import']); + Route::post('nzb-import', [AdminNzbController::class, 'import']); + Route::get('nzb-export', [AdminNzbController::class, 'export']); + Route::post('nzb-export', [AdminNzbController::class, 'export']); + Route::get('predb', [AdminPredbController::class, 'index']); + Route::post('predb', [AdminPredbController::class, 'index']); + Route::get('group-list', [AdminGroupController::class, 'index']); + Route::post('group-list', [AdminGroupController::class, 'index']); + Route::get('group-edit', [AdminGroupController::class, 'edit']); + Route::post('group-edit', [AdminGroupController::class, 'edit']); + Route::get('group-bulk', [AdminGroupController::class, 'createBulk']); + Route::post('group-bulk', [AdminGroupController::class, 'createBulk']); + Route::get('group-list-active', [AdminGroupController::class, 'active']); + Route::post('group-list-active', [AdminGroupController::class, 'active']); + Route::get('group-list-inactive', [AdminGroupController::class, 'inactive']); + Route::post('group-list-inactive', [AdminGroupController::class, 'inactive']); +}); + +Route::middleware('role_or_permission:Admin|Moderator|edit release')->prefix('admin')->group(function () { + Route::get('release-edit', [AdminReleasesController::class, 'edit']); + Route::post('release-edit', [AdminReleasesController::class, 'edit']); +}); + +Route::post('2faVerify', function () { + return redirect()->to(URL()->previous()); +})->name('2faVerify')->middleware('2fa'); + +Route::post('btcpay/webhook', [BtcPaymentController::class, 'btcPayCallback'])->name('btcpay.webhook'); From 44c940520295e3d76ad6f5cf5eb7a927de9d0d6d Mon Sep 17 00:00:00 2001 From: DariusIII Date: Sun, 28 Apr 2024 01:54:30 +0200 Subject: [PATCH 31/47] Update config --- resources/views/layouts/app.blade.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php index 224957f664..89c7cd5467 100644 --- a/resources/views/layouts/app.blade.php +++ b/resources/views/layouts/app.blade.php @@ -15,12 +15,12 @@ @vite(['resources/css/app.css', 'resources/js/app.js']) -
    +
    @if (isset($header)) -
    +
    {{ $header }}
    From b2b52e38da3302aa6221291f2fde41b591e3b04f Mon Sep 17 00:00:00 2001 From: DariusIII Date: Sun, 28 Apr 2024 01:54:48 +0200 Subject: [PATCH 32/47] CS fixes --- config/app.php | 1 - config/database.php | 6 +++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/config/app.php b/config/app.php index 6cb925d5e2..d004fa8c51 100644 --- a/config/app.php +++ b/config/app.php @@ -1,6 +1,5 @@ [ 'table' => [ - 'table' => 'migrations', - 'update_date_on_publish' => false, // disable to preserve original behavior for existing applications - ], + 'table' => 'migrations', + 'update_date_on_publish' => false, // disable to preserve original behavior for existing applications + ], 'update_date_on_publish' => false, // disable to preserve original behavior for existing applications ], From 1bb72518768831fe7baa287ddb21ec6a3630f8a2 Mon Sep 17 00:00:00 2001 From: DariusIII Date: Sun, 28 Apr 2024 02:09:35 +0200 Subject: [PATCH 33/47] Update breeze related parts --- ...30_095622_update_forum_category_colors.php | 30 ++ postcss.config.js | 6 + resources/forum/blade-tailwind/css/forum.css | 35 -- resources/forum/blade-tailwind/js/forum.js | 154 ------- .../views/category/index.blade.php | 20 - .../views/category/manage.blade.php | 115 ------ .../views/category/modals/create.blade.php | 31 -- .../views/category/modals/delete.blade.php | 21 - .../views/category/modals/edit.blade.php | 40 -- .../modals/mark-threads-as-read.blade.php | 16 - .../category/partials/inputs/color.blade.php | 5 - .../views/category/partials/list.blade.php | 75 ---- .../views/category/partials/options.blade.php | 12 - .../views/category/show.blade.php | 248 ----------- .../views/components/badge.blade.php | 27 -- .../views/components/button-group.blade.php | 3 - .../views/components/button-link.blade.php | 3 - .../components/button-secondary.blade.php | 3 - .../views/components/button.blade.php | 3 - .../views/components/input.blade.php | 1 - .../views/components/label.blade.php | 3 - .../views/components/select.blade.php | 5 - .../views/components/textarea.blade.php | 1 - .../views/layouts/main.blade.php | 94 ----- .../blade-tailwind/views/modal-form.blade.php | 30 -- .../blade-tailwind/views/pagination.blade.php | 46 --- .../views/partials/alert.blade.php | 18 - .../views/partials/alerts.blade.php | 11 - .../partials/breadcrumb-categories.blade.php | 4 - .../views/partials/breadcrumbs.blade.php | 16 - .../views/partials/timestamp.blade.php | 1 - .../views/post/confirm-delete.blade.php | 37 -- .../views/post/confirm-restore.blade.php | 29 -- .../views/post/create.blade.php | 32 -- .../blade-tailwind/views/post/edit.blade.php | 29 -- .../views/post/partials/actions.blade.php | 23 -- .../views/post/partials/list.blade.php | 70 ---- .../views/post/partials/quote.blade.php | 13 - .../blade-tailwind/views/post/show.blade.php | 14 - .../views/thread/create.blade.php | 25 -- .../thread/modals/mark-as-read.blade.php | 14 - .../views/thread/partials/list.blade.php | 52 --- .../views/thread/recent.blade.php | 21 - .../views/thread/show.blade.php | 391 ------------------ .../views/thread/unread.blade.php | 31 -- .../views/components/action-message.blade.php | 10 + .../components/application-logo.blade.php | 3 + .../components/auth-session-status.blade.php | 7 + .../views/components/danger-button.blade.php | 3 + .../views/components/dropdown-link.blade.php | 1 + resources/views/components/dropdown.blade.php | 43 ++ .../views/components/input-error.blade.php | 9 + .../views/components/input-label.blade.php | 5 + resources/views/components/modal.blade.php | 78 ++++ resources/views/components/nav-link.blade.php | 11 + .../views/components/primary-button.blade.php | 3 + .../components/responsive-nav-link.blade.php | 11 + .../components/secondary-button.blade.php | 3 + .../views/components/text-input.blade.php | 3 + resources/views/dashboard.blade.php | 17 + resources/views/layouts/guest.blade.php | 30 ++ resources/views/livewire/.gitkeep | 0 .../livewire/layout/navigation.blade.php | 110 +++++ .../pages/auth/confirm-password.blade.php | 62 +++ .../pages/auth/forgot-password.blade.php | 61 +++ .../views/livewire/pages/auth/login.blade.php | 71 ++++ .../livewire/pages/auth/register.blade.php | 88 ++++ .../pages/auth/reset-password.blade.php | 105 +++++ .../pages/auth/verify-email.blade.php | 58 +++ .../profile/delete-user-form.blade.php | 79 ++++ .../profile/update-password-form.blade.php | 79 ++++ .../update-profile-information-form.blade.php | 115 ++++++ .../livewire/welcome/navigation.blade.php | 26 ++ resources/views/profile.blade.php | 29 ++ routes/auth.php | 31 ++ tailwind.config.js | 21 + 76 files changed, 1208 insertions(+), 1822 deletions(-) create mode 100644 database/migrations/2024_03_30_095622_update_forum_category_colors.php create mode 100644 postcss.config.js delete mode 100644 resources/forum/blade-tailwind/css/forum.css delete mode 100644 resources/forum/blade-tailwind/js/forum.js delete mode 100644 resources/forum/blade-tailwind/views/category/index.blade.php delete mode 100644 resources/forum/blade-tailwind/views/category/manage.blade.php delete mode 100644 resources/forum/blade-tailwind/views/category/modals/create.blade.php delete mode 100644 resources/forum/blade-tailwind/views/category/modals/delete.blade.php delete mode 100644 resources/forum/blade-tailwind/views/category/modals/edit.blade.php delete mode 100644 resources/forum/blade-tailwind/views/category/modals/mark-threads-as-read.blade.php delete mode 100644 resources/forum/blade-tailwind/views/category/partials/inputs/color.blade.php delete mode 100644 resources/forum/blade-tailwind/views/category/partials/list.blade.php delete mode 100644 resources/forum/blade-tailwind/views/category/partials/options.blade.php delete mode 100644 resources/forum/blade-tailwind/views/category/show.blade.php delete mode 100644 resources/forum/blade-tailwind/views/components/badge.blade.php delete mode 100644 resources/forum/blade-tailwind/views/components/button-group.blade.php delete mode 100644 resources/forum/blade-tailwind/views/components/button-link.blade.php delete mode 100644 resources/forum/blade-tailwind/views/components/button-secondary.blade.php delete mode 100644 resources/forum/blade-tailwind/views/components/button.blade.php delete mode 100644 resources/forum/blade-tailwind/views/components/input.blade.php delete mode 100644 resources/forum/blade-tailwind/views/components/label.blade.php delete mode 100644 resources/forum/blade-tailwind/views/components/select.blade.php delete mode 100644 resources/forum/blade-tailwind/views/components/textarea.blade.php delete mode 100644 resources/forum/blade-tailwind/views/layouts/main.blade.php delete mode 100644 resources/forum/blade-tailwind/views/modal-form.blade.php delete mode 100644 resources/forum/blade-tailwind/views/pagination.blade.php delete mode 100644 resources/forum/blade-tailwind/views/partials/alert.blade.php delete mode 100644 resources/forum/blade-tailwind/views/partials/alerts.blade.php delete mode 100644 resources/forum/blade-tailwind/views/partials/breadcrumb-categories.blade.php delete mode 100644 resources/forum/blade-tailwind/views/partials/breadcrumbs.blade.php delete mode 100644 resources/forum/blade-tailwind/views/partials/timestamp.blade.php delete mode 100644 resources/forum/blade-tailwind/views/post/confirm-delete.blade.php delete mode 100644 resources/forum/blade-tailwind/views/post/confirm-restore.blade.php delete mode 100644 resources/forum/blade-tailwind/views/post/create.blade.php delete mode 100644 resources/forum/blade-tailwind/views/post/edit.blade.php delete mode 100644 resources/forum/blade-tailwind/views/post/partials/actions.blade.php delete mode 100644 resources/forum/blade-tailwind/views/post/partials/list.blade.php delete mode 100644 resources/forum/blade-tailwind/views/post/partials/quote.blade.php delete mode 100644 resources/forum/blade-tailwind/views/post/show.blade.php delete mode 100644 resources/forum/blade-tailwind/views/thread/create.blade.php delete mode 100644 resources/forum/blade-tailwind/views/thread/modals/mark-as-read.blade.php delete mode 100644 resources/forum/blade-tailwind/views/thread/partials/list.blade.php delete mode 100644 resources/forum/blade-tailwind/views/thread/recent.blade.php delete mode 100644 resources/forum/blade-tailwind/views/thread/show.blade.php delete mode 100644 resources/forum/blade-tailwind/views/thread/unread.blade.php create mode 100644 resources/views/components/action-message.blade.php create mode 100644 resources/views/components/application-logo.blade.php create mode 100644 resources/views/components/auth-session-status.blade.php create mode 100644 resources/views/components/danger-button.blade.php create mode 100644 resources/views/components/dropdown-link.blade.php create mode 100644 resources/views/components/dropdown.blade.php create mode 100644 resources/views/components/input-error.blade.php create mode 100644 resources/views/components/input-label.blade.php create mode 100644 resources/views/components/modal.blade.php create mode 100644 resources/views/components/nav-link.blade.php create mode 100644 resources/views/components/primary-button.blade.php create mode 100644 resources/views/components/responsive-nav-link.blade.php create mode 100644 resources/views/components/secondary-button.blade.php create mode 100644 resources/views/components/text-input.blade.php create mode 100644 resources/views/dashboard.blade.php create mode 100644 resources/views/layouts/guest.blade.php create mode 100644 resources/views/livewire/.gitkeep create mode 100644 resources/views/livewire/layout/navigation.blade.php create mode 100644 resources/views/livewire/pages/auth/confirm-password.blade.php create mode 100644 resources/views/livewire/pages/auth/forgot-password.blade.php create mode 100644 resources/views/livewire/pages/auth/login.blade.php create mode 100644 resources/views/livewire/pages/auth/register.blade.php create mode 100644 resources/views/livewire/pages/auth/reset-password.blade.php create mode 100644 resources/views/livewire/pages/auth/verify-email.blade.php create mode 100644 resources/views/livewire/profile/delete-user-form.blade.php create mode 100644 resources/views/livewire/profile/update-password-form.blade.php create mode 100644 resources/views/livewire/profile/update-profile-information-form.blade.php create mode 100644 resources/views/livewire/welcome/navigation.blade.php create mode 100644 resources/views/profile.blade.php create mode 100644 routes/auth.php create mode 100644 tailwind.config.js diff --git a/database/migrations/2024_03_30_095622_update_forum_category_colors.php b/database/migrations/2024_03_30_095622_update_forum_category_colors.php new file mode 100644 index 0000000000..156eccc349 --- /dev/null +++ b/database/migrations/2024_03_30_095622_update_forum_category_colors.php @@ -0,0 +1,30 @@ +renameColumn('color', 'color_light_mode'); + $table->string('color_dark_mode')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('forum_categories', function (Blueprint $table) { + $table->renameColumn('color_light_mode', 'color'); + $table->dropColumn('color_dark_mode'); + }); + } +}; diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000000..49c0612d5c --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +}; diff --git a/resources/forum/blade-tailwind/css/forum.css b/resources/forum/blade-tailwind/css/forum.css deleted file mode 100644 index 6e72d22ceb..0000000000 --- a/resources/forum/blade-tailwind/css/forum.css +++ /dev/null @@ -1,35 +0,0 @@ -@import url('https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,300..800;1,300..800&display=swap'); - -@tailwind base; -@tailwind components; -@tailwind utilities; - -@layer base { - .forum { - font-family: "Open Sans", sans-serif; - font-optical-sizing: auto; - font-weight: 400; - font-style: normal; - font-variation-settings: "wdth" 100; - } - - h1 { - @apply text-4xl my-6; - } - - h2 { - @apply text-2xl; - } - - h3 { - @apply text-xl; - } - - a { - @apply text-blue-500; - } - - a:hover { - @apply text-blue-800; - } -} diff --git a/resources/forum/blade-tailwind/js/forum.js b/resources/forum/blade-tailwind/js/forum.js deleted file mode 100644 index 828787a005..0000000000 --- a/resources/forum/blade-tailwind/js/forum.js +++ /dev/null @@ -1,154 +0,0 @@ -import feather from 'feather-icons'; -import { createApp, ref, reactive, watch } from 'vue/dist/vue.esm-bundler.js'; -import axios from 'axios'; -import Pickr from '@simonwep/pickr'; -import draggable from 'vuedraggable/src/vuedraggable'; - -import '@simonwep/pickr/dist/themes/classic.min.css'; - -window.axios = axios; -window.Vue = { createApp, ref, reactive, watch }; -window.VueDraggable = draggable; - -document.addEventListener('DOMContentLoaded', function () { - createApp({ - setup() { - const isCollapsed = ref(true); - const isUserDropdownCollapsed = ref(true); - - window.addEventListener('click', event => { - const ignore = ['navbar-toggler', 'navbar-toggler-icon', 'dropdown-toggle']; - if (ignore.some(className => event.target.classList.contains(className))) return; - if (!isCollapsed.value) isCollapsed.value = true; - if (!isUserDropdownCollapsed.value) isUserDropdownCollapsed.value = true; - }); - - return { - isCollapsed, - isUserDropdownCollapsed, - }; - } - }).mount('.v-navbar'); - - function findModal(key) - { - const modal = document.querySelector(`[data-modal=${key}]`); - - if (!modal) throw `Attempted to open modal '${key}' but no such modal found.`; - - return modal; - } - - function openModal(modal) - { - setTimeout(function() - { - modal.classList.remove('hidden'); - modal.classList.add('flex'); - }, 200); - } - - document.querySelectorAll('[data-open-modal]').forEach(item => - { - item.addEventListener('click', event => - { - event.preventDefault(); - - openModal(findModal(event.currentTarget.dataset.openModal)); - }); - }); - - document.querySelectorAll('[data-close-modal]').forEach(modalClose => - { - modalClose.addEventListener('click', event => - { - event.preventDefault - - setTimeout(function() - { - modalClose.closest('[data-modal]').classList.remove('flex'); - modalClose.closest('[data-modal]').classList.add('hidden'); - }, 200); - }); - }); - - document.querySelectorAll('[data-dismiss]').forEach(item => - { - item.addEventListener('click', event => event.currentTarget.parentElement.style.display = 'none'); - }); - - const hash = window.location.hash.substr(1); - if (hash.startsWith('modal=')) - { - openModal(findModal(hash.replace('modal=',''))); - } - - feather.replace(); - - const input = document.querySelector('input[name=color]'); - - if (!input) return; - - const pickr = Pickr.create({ - el: '.pickr', - theme: 'classic', - default: input.value || null, - - swatches: [ - window.defaultCategoryColor, - '#f44336', - '#e91e63', - '#9c27b0', - '#673ab7', - '#3f51b5', - '#2196f3', - '#03a9f4', - '#00bcd4', - '#009688', - '#4caf50', - '#8bc34a', - '#cddc39', - '#ffeb3b', - '#ffc107' - ], - - components: { - preview: true, - hue: true, - interaction: { - input: true, - save: true - } - }, - - strings: { - save: 'Apply' - } - }); - - pickr.on('save', instance => pickr.hide()) - .on('clear', instance => - { - input.value = ''; - input.dispatchEvent(new Event('change')); - }) - .on('cancel', instance => - { - const selectedColor = instance - .getSelectedColor() - .toHEXA() - .toString(); - - input.value = selectedColor; - input.dispatchEvent(new Event('change')); - }) - .on('change', (color, instance) => - { - const selectedColor = color - .toHEXA() - .toString(); - - input.value = selectedColor; - input.dispatchEvent(new Event('change')); - }); -}); diff --git a/resources/forum/blade-tailwind/views/category/index.blade.php b/resources/forum/blade-tailwind/views/category/index.blade.php deleted file mode 100644 index 93eeb6de4e..0000000000 --- a/resources/forum/blade-tailwind/views/category/index.blade.php +++ /dev/null @@ -1,20 +0,0 @@ -{{-- $category is passed as NULL to the master layout view to prevent it from showing in the breadcrumbs --}} -@extends ('forum::layouts.main', ['category' => null]) - -@section ('content') -
    -

    {{ trans('forum::general.index') }}

    - - @can ('createCategories') - - {{ trans('forum::categories.create') }} - - - @include ('forum::category.modals.create') - @endcan -
    - - @foreach ($categories as $category) - @include ('forum::category.partials.list', ['titleClass' => 'lead']) - @endforeach -@stop diff --git a/resources/forum/blade-tailwind/views/category/manage.blade.php b/resources/forum/blade-tailwind/views/category/manage.blade.php deleted file mode 100644 index be48382b52..0000000000 --- a/resources/forum/blade-tailwind/views/category/manage.blade.php +++ /dev/null @@ -1,115 +0,0 @@ -@extends ('forum::layouts.main', ['category' => null, 'thread' => null, 'breadcrumbs_append' => [trans('forum::general.manage')]]) - -@section ('content') -
    -

    {{ trans('forum::general.manage') }}

    - - @can ('createCategories') - - {{ trans('forum::categories.create') }} - - - @include ('forum::category.modals.create') - @endcan -
    - -
    - - - - - - -
    - -
    -
    - - - - -@stop diff --git a/resources/forum/blade-tailwind/views/category/modals/create.blade.php b/resources/forum/blade-tailwind/views/category/modals/create.blade.php deleted file mode 100644 index 6d8301610a..0000000000 --- a/resources/forum/blade-tailwind/views/category/modals/create.blade.php +++ /dev/null @@ -1,31 +0,0 @@ -@component('forum::modal-form') - @slot('key', 'create-category') - @slot('title', trans('forum::categories.create')) - @slot('route', Forum::route('category.store')) - -
    - {{ trans('forum::general.title') }} - -
    -
    - {{ trans('forum::general.description') }} - -
    -
    -
    - - -
    -
    -
    -
    - - -
    -
    - @include ('forum::category.partials.inputs.color') - - @slot('actions') - {{ trans('forum::general.create') }} - @endslot -@endcomponent diff --git a/resources/forum/blade-tailwind/views/category/modals/delete.blade.php b/resources/forum/blade-tailwind/views/category/modals/delete.blade.php deleted file mode 100644 index e313edb404..0000000000 --- a/resources/forum/blade-tailwind/views/category/modals/delete.blade.php +++ /dev/null @@ -1,21 +0,0 @@ -@component('forum::modal-form') - @slot('key', 'delete-category') - @slot('title', trans('forum::general.delete')) - @slot('route', Forum::route('category.delete', $category)) - @slot('method', 'DELETE') - - {{ trans('forum::general.generic_confirm') }} - - @if(!$category->isEmpty()) -
    - - -
    - @endif - - @slot('actions') - {{ trans('forum::general.delete') }} - @endslot -@endcomponent diff --git a/resources/forum/blade-tailwind/views/category/modals/edit.blade.php b/resources/forum/blade-tailwind/views/category/modals/edit.blade.php deleted file mode 100644 index c5a6ce3a0b..0000000000 --- a/resources/forum/blade-tailwind/views/category/modals/edit.blade.php +++ /dev/null @@ -1,40 +0,0 @@ -@component('forum::modal-form') - @slot('key', 'edit-category') - @slot('title', trans('forum::general.edit')) - @slot('route', Forum::route('category.update', $category)) - @slot('method', 'PATCH') - -
    - {{ trans('forum::general.title') }} - -
    -
    - {{ trans('forum::general.description') }} - -
    -
    -
    - - accepts_threads ? 'checked' : '' }}> - -
    -
    -
    -
    - - is_private ? 'checked' : '' }} {{ $privateAncestor != null ? 'disabled' : '' }}> - -
    -
    - @if ($privateAncestor != null) - - @endif - - @include ('forum::category.partials.inputs.color') - - @slot('actions') - {{ trans('forum::general.save') }} - @endslot -@endcomponent diff --git a/resources/forum/blade-tailwind/views/category/modals/mark-threads-as-read.blade.php b/resources/forum/blade-tailwind/views/category/modals/mark-threads-as-read.blade.php deleted file mode 100644 index b2fc42d079..0000000000 --- a/resources/forum/blade-tailwind/views/category/modals/mark-threads-as-read.blade.php +++ /dev/null @@ -1,16 +0,0 @@ -@component('forum::modal-form') - @slot('key', 'mark-threads-as-read') - @slot('title', trans('forum::categories.mark_read')) - @slot('route', Forum::route('unread.mark-as-read')) - @slot('method', 'PATCH') - - - -

    {{ trans('forum::general.generic_confirm') }}

    - - @slot('actions') - - {{ trans('forum::general.mark_read') }} - - @endslot -@endcomponent diff --git a/resources/forum/blade-tailwind/views/category/partials/inputs/color.blade.php b/resources/forum/blade-tailwind/views/category/partials/inputs/color.blade.php deleted file mode 100644 index 37f675ba8f..0000000000 --- a/resources/forum/blade-tailwind/views/category/partials/inputs/color.blade.php +++ /dev/null @@ -1,5 +0,0 @@ -
    - -
    - -
    diff --git a/resources/forum/blade-tailwind/views/category/partials/list.blade.php b/resources/forum/blade-tailwind/views/category/partials/list.blade.php deleted file mode 100644 index b92a05463e..0000000000 --- a/resources/forum/blade-tailwind/views/category/partials/list.blade.php +++ /dev/null @@ -1,75 +0,0 @@ -
    -
    -
    -
    -
    - {{ $category->title }} -
    -

    {{ $category->description }}

    -
    -
    - @if ($category->accepts_threads) - - {{ trans_choice('forum::threads.thread', 2) }}: {{ $category->thread_count }} - - - {{ trans_choice('forum::posts.post', 2) }}: {{ $category->post_count }} - - @endif -
    -
    - @if ($category->accepts_threads) - @if ($category->newestThread) -
    - {{ $category->newestThread->title }} - @include ('forum::partials.timestamp', ['carbon' => $category->newestThread->created_at]) -
    - @endif - @if ($category->latestActiveThread && $category->latestActiveThread->post_count > 1) -
    - Re: {{ $category->latestActiveThread->title }} - @include ('forum::partials.timestamp', ['carbon' => $category->latestActiveThread->lastPost->created_at]) -
    - @endif - @endif -
    -
    -
    - - @if ($category->children->count() > 0) -
    - @foreach ($category->children as $subcategory) -
    -
    -
    - {{ $subcategory->title }} -
    {{ $subcategory->description }}
    -
    -
    - - {{ trans_choice('forum::threads.thread', 2) }}: {{ $subcategory->thread_count }} - - - {{ trans_choice('forum::posts.post', 2) }}: {{ $subcategory->post_count }} - -
    -
    - @if ($subcategory->newestThread) -
    - {{ $subcategory->newestThread->title }} - @include ('forum::partials.timestamp', ['carbon' => $subcategory->newestThread->created_at]) -
    - @endif - @if ($subcategory->latestActiveThread && $subcategory->latestActiveThread->post_count > 1) -
    - Re: {{ $subcategory->latestActiveThread->title }} - @include ('forum::partials.timestamp', ['carbon' => $subcategory->latestActiveThread->lastPost->created_at]) -
    - @endif -
    -
    -
    - @endforeach -
    - @endif -
    diff --git a/resources/forum/blade-tailwind/views/category/partials/options.blade.php b/resources/forum/blade-tailwind/views/category/partials/options.blade.php deleted file mode 100644 index 338024af26..0000000000 --- a/resources/forum/blade-tailwind/views/category/partials/options.blade.php +++ /dev/null @@ -1,12 +0,0 @@ -@foreach ($categories as $cat) - @if (!isset($hide) || (isset($hide) && $cat->id != $hide->id)) - - @endif - - @if ($cat->children) - @include ('forum::category.partials.options', ['categories' => $cat->children]) - @endif -@endforeach diff --git a/resources/forum/blade-tailwind/views/category/show.blade.php b/resources/forum/blade-tailwind/views/category/show.blade.php deleted file mode 100644 index e8f5591a7a..0000000000 --- a/resources/forum/blade-tailwind/views/category/show.blade.php +++ /dev/null @@ -1,248 +0,0 @@ -{{-- $thread is passed as NULL to the master layout view to prevent it from showing in the breadcrumbs --}} -@extends('forum::layouts.main', ['thread' => null]) - -@section('content') -
    -

    - {{ $category->title }}   - @if ($category->description) - {{ $category->description }} - @endif -

    -
    - -
    -
    - @if ($category->accepts_threads) - @can ('createThreads', $category) - {{ trans('forum::threads.new_thread') }} - @endcan - @endif - - - @can ('editCategories') - @can ('edit', $category) - - {{ trans('forum::general.edit') }} - - @endcan - @endcan - -
    - - @if (!$category->children->isEmpty()) - @foreach ($category->children as $subcategory) - @include ('forum::category.partials.list', ['category' => $subcategory]) - @endforeach - @endif - - @if ($category->accepts_threads) - @if (!$threads->isEmpty()) -
    - {{ $threads->links('forum::pagination') }} -
    - - @if (count($selectableThreadIds) > 0) - @can ('manageThreads', $category) -
    - @csrf - - -
    -
    - - -
    -
    - @endcan - @endif - -
    - @foreach ($threads as $thread) - @include ('forum::thread.partials.list') - @endforeach -
    - - @if (count($selectableThreadIds) > 0) - @can ('manageThreads', $category) -
    -
    -
    - {{ trans('forum::general.with_selection') }} -
    -
    -
    -
    - {{ trans_choice('forum::general.actions', 1) }} -
    - - - @can ('deleteThreads', $category) - - @endcan - @can ('restoreThreads', $category) - - @endcan - @can ('moveThreadsFrom', $category) - - @endcan - @can ('lockThreads', $category) - - - @endcan - @can ('pinThreads', $category) - - - @endcan - -
    - -
    -
    - -
    - - @include ('forum::category.partials.options', [ - 'categories' => $threadDestinationCategories, - 'hide' => $category - ]) - -
    - - @if (config('forum.general.soft_deletes')) -
    - - -
    - @endif - -
    - -
    -
    -
    -
    -
    - @endcan - @endif - @else -
    -
    - {{ trans('forum::threads.none_found') }} - @can ('createThreads', $category) -
    - {{ trans('forum::threads.post_the_first') }} - @endcan -
    -
    - @endif - -
    -
    - {{ $threads->links('forum::pagination') }} -
    -
    - @if ($category->accepts_threads) - @can ('createThreads', $category) - {{ trans('forum::threads.new_thread') }} - @endcan - @endif -
    -
    - @endif -
    - - @if (!$threads->isEmpty()) - @can ('markThreadsAsRead') -
    - - {{ trans('forum::general.mark_read') }} - -
    - - @include ('forum::category.modals.mark-threads-as-read') - @endcan - @endif - - @can ('editCategories') - @can ('edit', $category) - @include ('forum::category.modals.edit') - @endcan - @endcan - @can ('deleteCategories') - @can ('delete', $category) - @include ('forum::category.modals.delete') - @endcan - @endcan - - -@stop diff --git a/resources/forum/blade-tailwind/views/components/badge.blade.php b/resources/forum/blade-tailwind/views/components/badge.blade.php deleted file mode 100644 index 652c1cc0b4..0000000000 --- a/resources/forum/blade-tailwind/views/components/badge.blade.php +++ /dev/null @@ -1,27 +0,0 @@ -@props([ - 'type' => 'default' -]) - -@php -switch($type) { - case('info'): - $color = 'bg-blue-500'; - break; - - case('danger'): - $color = 'bg-red-500'; - break; - - case('warning'): - $color = 'bg-orange-500'; - break; - - default: - $color = 'bg-gray-400'; - break; -} -@endphp - -merge(['class' => "$color rounded-full px-2 py-1 text-white text-xs font-semibold"]) }}> - {{ $slot }} - diff --git a/resources/forum/blade-tailwind/views/components/button-group.blade.php b/resources/forum/blade-tailwind/views/components/button-group.blade.php deleted file mode 100644 index 008539dc3d..0000000000 --- a/resources/forum/blade-tailwind/views/components/button-group.blade.php +++ /dev/null @@ -1,3 +0,0 @@ -
    - {{ $slot }} -
    diff --git a/resources/forum/blade-tailwind/views/components/button-link.blade.php b/resources/forum/blade-tailwind/views/components/button-link.blade.php deleted file mode 100644 index 6968d4e44c..0000000000 --- a/resources/forum/blade-tailwind/views/components/button-link.blade.php +++ /dev/null @@ -1,3 +0,0 @@ -merge(['class' => 'bg-blue-500 hover:bg-blue-400 text-white font-semibold hover:text-white px-3 py-2 rounded-md inline-block']) }}> - {{ $slot }} - diff --git a/resources/forum/blade-tailwind/views/components/button-secondary.blade.php b/resources/forum/blade-tailwind/views/components/button-secondary.blade.php deleted file mode 100644 index 519f991faa..0000000000 --- a/resources/forum/blade-tailwind/views/components/button-secondary.blade.php +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/resources/forum/blade-tailwind/views/components/button.blade.php b/resources/forum/blade-tailwind/views/components/button.blade.php deleted file mode 100644 index afccd7b4e8..0000000000 --- a/resources/forum/blade-tailwind/views/components/button.blade.php +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/resources/forum/blade-tailwind/views/components/input.blade.php b/resources/forum/blade-tailwind/views/components/input.blade.php deleted file mode 100644 index 2e221f669f..0000000000 --- a/resources/forum/blade-tailwind/views/components/input.blade.php +++ /dev/null @@ -1 +0,0 @@ -merge(['type' => 'text', 'class' => 'px-3 py-1 border-gray-300 focus:border-blue-500 focus:ring-blue-500 rounded-md border shadow-sm']) }}> diff --git a/resources/forum/blade-tailwind/views/components/label.blade.php b/resources/forum/blade-tailwind/views/components/label.blade.php deleted file mode 100644 index 4d9a6b565c..0000000000 --- a/resources/forum/blade-tailwind/views/components/label.blade.php +++ /dev/null @@ -1,3 +0,0 @@ - diff --git a/resources/forum/blade-tailwind/views/components/select.blade.php b/resources/forum/blade-tailwind/views/components/select.blade.php deleted file mode 100644 index 2df5e15da4..0000000000 --- a/resources/forum/blade-tailwind/views/components/select.blade.php +++ /dev/null @@ -1,5 +0,0 @@ -
    - -
    diff --git a/resources/forum/blade-tailwind/views/components/textarea.blade.php b/resources/forum/blade-tailwind/views/components/textarea.blade.php deleted file mode 100644 index 01483e3bd1..0000000000 --- a/resources/forum/blade-tailwind/views/components/textarea.blade.php +++ /dev/null @@ -1 +0,0 @@ - diff --git a/resources/forum/blade-tailwind/views/layouts/main.blade.php b/resources/forum/blade-tailwind/views/layouts/main.blade.php deleted file mode 100644 index 8457adbddd..0000000000 --- a/resources/forum/blade-tailwind/views/layouts/main.blade.php +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - - @if (isset($thread_title)) - {{ $thread_title }} — - @endif - @if (isset($category)) - {{ $category->title }} — - @endif - {{ trans('forum::general.home_title') }} - - - @vite(['resources/forum/blade-tailwind/css/forum.css', 'resources/forum/blade-tailwind/js/forum.js']) - - - - -
    - @include ('forum::partials.breadcrumbs') - @include ('forum::partials.alerts') - - @yield('content') -
    - - @yield('footer') - - - - diff --git a/resources/forum/blade-tailwind/views/modal-form.blade.php b/resources/forum/blade-tailwind/views/modal-form.blade.php deleted file mode 100644 index 35d368f2cd..0000000000 --- a/resources/forum/blade-tailwind/views/modal-form.blade.php +++ /dev/null @@ -1,30 +0,0 @@ - diff --git a/resources/forum/blade-tailwind/views/pagination.blade.php b/resources/forum/blade-tailwind/views/pagination.blade.php deleted file mode 100644 index 63c6f56b59..0000000000 --- a/resources/forum/blade-tailwind/views/pagination.blade.php +++ /dev/null @@ -1,46 +0,0 @@ -@if ($paginator->hasPages()) - -@endif diff --git a/resources/forum/blade-tailwind/views/partials/alert.blade.php b/resources/forum/blade-tailwind/views/partials/alert.blade.php deleted file mode 100644 index e3c1b5dee4..0000000000 --- a/resources/forum/blade-tailwind/views/partials/alert.blade.php +++ /dev/null @@ -1,18 +0,0 @@ -@php -$colorClasses = match ($type) { - 'primary', '', null => 'bg-blue-100 text-blue-700', - 'success', '', null => 'bg-green-100 text-green-700', - 'danger' => 'bg-orange-100 text-orange-700' -}; -@endphp - -
    -
    - {!! $message !!} -
    - -
    diff --git a/resources/forum/blade-tailwind/views/partials/alerts.blade.php b/resources/forum/blade-tailwind/views/partials/alerts.blade.php deleted file mode 100644 index e2a0e35a99..0000000000 --- a/resources/forum/blade-tailwind/views/partials/alerts.blade.php +++ /dev/null @@ -1,11 +0,0 @@ -@if (Session::has('alerts')) - @foreach (Session::get('alerts') as $alert) - @include ('forum::partials.alert', $alert) - @endforeach -@endif - -@if (isset($errors) && !$errors->isEmpty()) - @foreach ($errors->all() as $error) - @include ('forum::partials.alert', ['type' => 'danger', 'message' => $error]) - @endforeach -@endif diff --git a/resources/forum/blade-tailwind/views/partials/breadcrumb-categories.blade.php b/resources/forum/blade-tailwind/views/partials/breadcrumb-categories.blade.php deleted file mode 100644 index 521e552410..0000000000 --- a/resources/forum/blade-tailwind/views/partials/breadcrumb-categories.blade.php +++ /dev/null @@ -1,4 +0,0 @@ -@if ($category->parent !== null) - @include ('forum::partials.breadcrumb-categories', ['category' => $category->parent]) -@endif -
  • {{ $category->title }}
  • diff --git a/resources/forum/blade-tailwind/views/partials/breadcrumbs.blade.php b/resources/forum/blade-tailwind/views/partials/breadcrumbs.blade.php deleted file mode 100644 index b606342756..0000000000 --- a/resources/forum/blade-tailwind/views/partials/breadcrumbs.blade.php +++ /dev/null @@ -1,16 +0,0 @@ - diff --git a/resources/forum/blade-tailwind/views/partials/timestamp.blade.php b/resources/forum/blade-tailwind/views/partials/timestamp.blade.php deleted file mode 100644 index c01cce7a90..0000000000 --- a/resources/forum/blade-tailwind/views/partials/timestamp.blade.php +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/forum/blade-tailwind/views/post/confirm-delete.blade.php b/resources/forum/blade-tailwind/views/post/confirm-delete.blade.php deleted file mode 100644 index ae71f083fd..0000000000 --- a/resources/forum/blade-tailwind/views/post/confirm-delete.blade.php +++ /dev/null @@ -1,37 +0,0 @@ -@extends ('forum::layouts.main', ['breadcrumbs_append' => [trans_choice('forum::posts.delete', 1)]]) - -@section ('content') -
    -

    {{ trans_choice('forum::posts.delete', 1) }}

    - -
    - - @include ('forum::post.partials.list', ['post' => $post, 'single' => true]) - -
    - @csrf - @method('DELETE') - -
    -
    - - @if (config('forum.general.soft_deletes')) -
    - - -
    - @else - {{ trans('forum::general.generic_confirm') }} - @endif -
    -
    - -
    - {{ trans('forum::general.cancel') }} - {{ trans('forum::general.delete') }} -
    -
    -
    -@stop diff --git a/resources/forum/blade-tailwind/views/post/confirm-restore.blade.php b/resources/forum/blade-tailwind/views/post/confirm-restore.blade.php deleted file mode 100644 index 66d4deb9c4..0000000000 --- a/resources/forum/blade-tailwind/views/post/confirm-restore.blade.php +++ /dev/null @@ -1,29 +0,0 @@ -@extends ('forum::layouts.main', ['breadcrumbs_append' => [trans_choice('forum::posts.restore', 1)]]) - -@section ('content') -
    -

    {{ trans_choice('forum::posts.restore', 1) }}

    - -
    - - @include ('forum::post.partials.list', ['post' => $post, 'single' => true]) - -
    - @csrf - @method('POST') - -
    -
    - {{ trans('forum::general.generic_confirm') }} -
    -
    - -
    - {{ trans('forum::general.cancel') }} - - {{ trans('forum::general.restore') }} - -
    -
    -
    -@stop diff --git a/resources/forum/blade-tailwind/views/post/create.blade.php b/resources/forum/blade-tailwind/views/post/create.blade.php deleted file mode 100644 index 46bd4e78a4..0000000000 --- a/resources/forum/blade-tailwind/views/post/create.blade.php +++ /dev/null @@ -1,32 +0,0 @@ -@extends ('forum::layouts.main', ['breadcrumbs_append' => [trans('forum::general.new_reply')]]) - -@section ('content') -
    -

    {{ trans('forum::general.new_reply') }} ({{ $thread->title }})

    - - @if ($post !== null && !$post->trashed()) -
    {{ trans('forum::general.replying_to', ['item' => $post->authorName]) }}:
    - - @include ('forum::post.partials.quote') - @endif - -
    - -
    - {!! csrf_field() !!} - - @if ($post !== null) - - @endif - -
    - {{ old('content') }} -
    - -
    - {{ trans('forum::general.cancel') }} - {{ trans('forum::general.reply') }} -
    -
    -
    -@stop diff --git a/resources/forum/blade-tailwind/views/post/edit.blade.php b/resources/forum/blade-tailwind/views/post/edit.blade.php deleted file mode 100644 index 295b794879..0000000000 --- a/resources/forum/blade-tailwind/views/post/edit.blade.php +++ /dev/null @@ -1,29 +0,0 @@ -@extends ('forum::layouts.main', ['breadcrumbs_append' => [trans('forum::posts.edit')]]) - -@section ('content') -
    -

    {{ trans('forum::posts.edit') }} ({{ $thread->title }})

    - -
    - - @if ($post->parent) -

    {{ trans('forum::general.response_to', ['item' => $post->parent->authorName]) }}...

    - - @include ('forum::post.partials.list', ['post' => $post->parent, 'single' => true]) - @endif - -
    - @csrf - @method('PATCH') - -
    - {{ old('content') !== null ? old('content') : $post->content }} -
    - -
    - {{ trans('forum::general.cancel') }} - {{ trans('forum::general.save') }} -
    -
    -
    -@stop diff --git a/resources/forum/blade-tailwind/views/post/partials/actions.blade.php b/resources/forum/blade-tailwind/views/post/partials/actions.blade.php deleted file mode 100644 index e7eb921ac9..0000000000 --- a/resources/forum/blade-tailwind/views/post/partials/actions.blade.php +++ /dev/null @@ -1,23 +0,0 @@ -
    - -
    -
    -
    - - -
    -
    - -
    -
    diff --git a/resources/forum/blade-tailwind/views/post/partials/list.blade.php b/resources/forum/blade-tailwind/views/post/partials/list.blade.php deleted file mode 100644 index ecf26f53d0..0000000000 --- a/resources/forum/blade-tailwind/views/post/partials/list.blade.php +++ /dev/null @@ -1,70 +0,0 @@ -
    trashed())id="post-{{ $post->sequence }}"@endif - class="bg-white border mb-2 rounded-md {{ $post->trashed() || $thread->trashed() ? 'opacity-50' : '' }}" - :class="{ 'border-blue-500': state.selectedPosts.includes({{ $post->id }}) }"> -
    - @if (!isset($single) || !$single) - - #{{ $post->sequence }} - @if ($post->sequence != 1) - @can ('deletePosts', $post->thread) - @can ('delete', $post) - - @endcan - @endcan - @endif - - @endif - -
    - {{ $post->authorName }} - - @include ('forum::partials.timestamp', ['carbon' => $post->created_at]) - @if ($post->hasBeenUpdated()) - ({{ trans('forum::general.last_updated') }} @include ('forum::partials.timestamp', ['carbon' => $post->updated_at])) - @endif - -
    -
    -
    - @if ($post->parent !== null) - @include ('forum::post.partials.quote', ['post' => $post->parent]) - @endif - - @if ($post->trashed()) - @can ('viewTrashedPosts') - {!! Forum::render($post->content) !!} -
    - @endcan - {{ trans('forum::general.deleted') }} - @else - {!! Forum::render($post->content) !!} - @endif - - @if (!isset($single) || !$single) -
    - @if (!$post->trashed()) - {{ trans('forum::general.permalink') }} - @if ($post->sequence != 1) - @can ('deletePosts', $post->thread) - @can ('delete', $post) - {{ trans('forum::general.delete') }} - @endcan - @endcan - @endif - @can ('edit', $post) - {{ trans('forum::general.edit') }} - @endcan - @can ('reply', $post->thread) - {{ trans('forum::general.reply') }} - @endcan - @else - @can ('restorePosts', $post->thread) - @can ('restore', $post) - {{ trans('forum::general.restore') }} - @endcan - @endcan - @endif -
    - @endif -
    -
    diff --git a/resources/forum/blade-tailwind/views/post/partials/quote.blade.php b/resources/forum/blade-tailwind/views/post/partials/quote.blade.php deleted file mode 100644 index 9c7649f9e9..0000000000 --- a/resources/forum/blade-tailwind/views/post/partials/quote.blade.php +++ /dev/null @@ -1,13 +0,0 @@ -
    -
    -
    - - #{{ $post->sequence }} - -
    - {{ $post->authorName }} {{ $post->posted }} -
    -
    - {!! \Illuminate\Support\Str::limit(Forum::render($post->content)) !!} -
    -
    diff --git a/resources/forum/blade-tailwind/views/post/show.blade.php b/resources/forum/blade-tailwind/views/post/show.blade.php deleted file mode 100644 index 9e1d1b0566..0000000000 --- a/resources/forum/blade-tailwind/views/post/show.blade.php +++ /dev/null @@ -1,14 +0,0 @@ -@extends ('forum::layouts.main', ['breadcrumbs_append' => [trans('forum::posts.view')]]) - -@section ('content') -
    -
    -

    {{ trans('forum::posts.view') }} ({{ $thread->title }})

    - {{ trans('forum::threads.view') }} -
    - -
    - - @include ('forum::post.partials.list', ['post' => $post, 'single' => true]) -
    -@stop diff --git a/resources/forum/blade-tailwind/views/thread/create.blade.php b/resources/forum/blade-tailwind/views/thread/create.blade.php deleted file mode 100644 index d9effc59f7..0000000000 --- a/resources/forum/blade-tailwind/views/thread/create.blade.php +++ /dev/null @@ -1,25 +0,0 @@ -@extends ('forum::layouts.main', ['breadcrumbs_append' => [trans('forum::threads.new_thread')]]) - -@section ('content') -
    -

    {{ trans('forum::threads.new_thread') }} ({{ $category->title }})

    - -
    - @csrf - -
    - {{ trans('forum::general.title') }} - -
    - -
    - {{ old('content') }} -
    - -
    - {{ trans('forum::general.cancel') }} - {{ trans('forum::general.create') }} -
    -
    -
    -@stop diff --git a/resources/forum/blade-tailwind/views/thread/modals/mark-as-read.blade.php b/resources/forum/blade-tailwind/views/thread/modals/mark-as-read.blade.php deleted file mode 100644 index 8c196ac65f..0000000000 --- a/resources/forum/blade-tailwind/views/thread/modals/mark-as-read.blade.php +++ /dev/null @@ -1,14 +0,0 @@ -@component('forum::modal-form') - @slot('key', 'mark-as-read') - @slot('title', trans('forum::general.mark_read')) - @slot('route', Forum::route('unread.mark-as-read')) - @slot('method', 'PATCH') - -

    {{ trans('forum::general.generic_confirm') }}

    - - @slot('actions') - - {{ trans('forum::general.mark_read') }} - - @endslot -@endcomponent diff --git a/resources/forum/blade-tailwind/views/thread/partials/list.blade.php b/resources/forum/blade-tailwind/views/thread/partials/list.blade.php deleted file mode 100644 index a30f82fa36..0000000000 --- a/resources/forum/blade-tailwind/views/thread/partials/list.blade.php +++ /dev/null @@ -1,52 +0,0 @@ -
    -
    -
    - - {{ $thread->title }} - -
    - {{ $thread->authorName }} - @include ('forum::partials.timestamp', ['carbon' => $thread->created_at]) - - @if (!isset($category)) -
    - {{ $thread->category->title }} - @endif -
    - -
    - @if ($thread->pinned) - {{ trans('forum::threads.pinned') }} - @endif - @if ($thread->locked) - {{ trans('forum::threads.locked') }} - @endif - @if ($thread->userReadStatus !== null && !$thread->trashed()) - {{ trans($thread->userReadStatus) }} - @endif - @if ($thread->trashed()) - {{ trans('forum::general.deleted') }} - @endif - - {{ trans('forum::general.replies') }}: - {{ $thread->reply_count }} - -
    - - @if ($thread->lastPost) -
    - {{ trans('forum::posts.view') }} » -
    - {{ $thread->lastPost->authorName }} - @include ('forum::partials.timestamp', ['carbon' => $thread->lastPost->created_at]) -
    -
    - @endif - - @if (isset($category) && isset($selectableThreadIds) && in_array($thread->id, $selectableThreadIds)) -
    - -
    - @endif -
    -
    diff --git a/resources/forum/blade-tailwind/views/thread/recent.blade.php b/resources/forum/blade-tailwind/views/thread/recent.blade.php deleted file mode 100644 index b96988453e..0000000000 --- a/resources/forum/blade-tailwind/views/thread/recent.blade.php +++ /dev/null @@ -1,21 +0,0 @@ -@extends ('forum::layouts.main', ['thread' => null, 'breadcrumbs_append' => [trans('forum::threads.recent')]]) - -@section ('content') -
    -

    {{ trans('forum::threads.recent') }}

    - - @if (!$threads->isEmpty()) -
    - @foreach ($threads as $thread) - @include ('forum::thread.partials.list') - @endforeach -
    - @else -
    -
    - {{ trans('forum::threads.none_found') }} -
    -
    - @endif -
    -@stop diff --git a/resources/forum/blade-tailwind/views/thread/show.blade.php b/resources/forum/blade-tailwind/views/thread/show.blade.php deleted file mode 100644 index 0e8afc3bdb..0000000000 --- a/resources/forum/blade-tailwind/views/thread/show.blade.php +++ /dev/null @@ -1,391 +0,0 @@ -@extends ('forum::layouts.main', ['thread' => null, 'breadcrumbs_append' => [$thread->title], 'thread_title' => $thread->title]) - -@section ('content') -
    -
    -

    {{ $thread->title }}

    - -
    - @if (Gate::allows('deleteThreads', $thread->category) && Gate::allows('delete', $thread)) - @if ($thread->trashed()) - - {{ trans('forum::general.perma_delete') }} - - @else - - {{ trans('forum::general.delete') }} - - @endif - @endif - @if ($thread->trashed() && Gate::allows('restoreThreads', $thread->category) && Gate::allows('restore', $thread)) - - {{ trans('forum::general.restore') }} - - @endif - - @if (Gate::allows('lockThreads', $category) - || Gate::allows('pinThreads', $category) - || Gate::allows('rename', $thread) - || Gate::allows('moveThreadsFrom', $category)) - - @if (!$thread->trashed()) - @can ('lockThreads', $category) - @if ($thread->locked) - - {{ trans('forum::threads.unlock') }} - - @else - - {{ trans('forum::threads.lock') }} - - @endif - @endcan - @can ('pinThreads', $category) - @if ($thread->pinned) - - {{ trans('forum::threads.unpin') }} - - @else - - {{ trans('forum::threads.pin') }} - - @endif - @endcan - @can ('rename', $thread) - - {{ trans('forum::general.rename') }} - - @endcan - @can ('moveThreadsFrom', $category) - - {{ trans('forum::general.move') }} - - @endcan - @endif - - @endcan -
    -
    - -
    - @if ($thread->trashed()) - {{ trans('forum::general.deleted') }} - @endif - @if ($thread->pinned) - {{ trans('forum::threads.pinned') }} - @endif - @if ($thread->locked) - {{ trans('forum::threads.locked') }} - @endif -
    - - @if ((count($posts) > 1 || $posts->currentPage() > 1) && (Gate::allows('deletePosts', $thread) || Gate::allows('restorePosts', $thread)) && count($selectablePosts) > 0) -
    - @csrf - - @endif - -
    -
    - {{ $posts->links('forum::pagination') }} -
    -
    - @if (!$thread->trashed()) - @can ('reply', $thread) - - - {{ trans('forum::general.new_reply') }} - - - {{ trans('forum::general.quick_reply') }} - - - @endcan - @endif -
    -
    - - @if ((count($posts) > 1 || $posts->currentPage() > 1) && (Gate::allows('deletePosts', $thread) || Gate::allows('restorePosts', $thread)) && count($selectablePosts) > 0) -
    -
    - - -
    -
    - @endif - - @foreach ($posts as $post) - @include ('forum::post.partials.list', compact('post')) - @endforeach - - @if ((count($posts) > 1 || $posts->currentPage() > 1) && (Gate::allows('deletePosts', $thread) || Gate::allows('restorePosts', $thread)) && count($selectablePosts) > 0) -
    -
    -
    - {{ trans('forum::general.with_selection') }} -
    -
    -
    -
    - {{ trans_choice('forum::general.actions', 1) }} -
    - - - - - -
    - - @if (config('forum.general.soft_deletes')) -
    - - -
    - @endif - -
    - {{ trans('forum::general.proceed') }} -
    -
    -
    -
    -
    - @endif - - {{ $posts->links('forum::pagination') }} - - @if (!$thread->trashed()) - @can ('reply', $thread) -

    {{ trans('forum::general.quick_reply') }}

    -
    -
    - @csrf - -
    - {{ old('content') }} -
    - -
    - {{ trans('forum::general.reply') }} -
    -
    -
    - @endcan - @endif -
    - - @if ($thread->trashed() && Gate::allows('restoreThreads', $thread->category) && Gate::allows('restore', $thread)) - @component('forum::modal-form') - @slot('key', 'restore-thread') - @slot('title', '' . trans('forum::general.restore')) - @slot('route', Forum::route('thread.restore', $thread)) - @slot('method', 'POST') - - {{ trans('forum::general.generic_confirm') }} - - @slot('actions') - {{ trans('forum::general.proceed') }} - @endslot - @endcomponent - @endif - - @if (Gate::allows('deleteThreads', $thread->category) && Gate::allows('delete', $thread)) - @component('forum::modal-form') - @slot('key', 'delete-thread') - @slot('title', '' . trans('forum::threads.delete')) - @slot('route', Forum::route('thread.delete', $thread)) - @slot('method', 'DELETE') - - @if (config('forum.general.soft_deletes')) -
    - - -
    - @else - {{ trans('forum::general.generic_confirm') }} - @endif - - @slot('actions') - {{ trans('forum::general.proceed') }} - @endslot - @endcomponent - - @if (config('forum.general.soft_deletes')) - @component('forum::modal-form') - @slot('key', 'perma-delete-thread') - @slot('title', '' . trans_choice('forum::threads.perma_delete', 1)) - @slot('route', Forum::route('thread.delete', $thread)) - @slot('method', 'DELETE') - - - - {{ trans('forum::general.generic_confirm') }} - - @slot('actions') - {{ trans('forum::general.proceed') }} - @endslot - @endcomponent - @endif - @endif - - @if (!$thread->trashed()) - @can ('lockThreads', $category) - @if ($thread->locked) - @component('forum::modal-form') - @slot('key', 'unlock-thread') - @slot('title', ' ' . trans('forum::threads.unlock')) - @slot('route', Forum::route('thread.unlock', $thread)) - @slot('method', 'POST') - - {{ trans('forum::general.generic_confirm') }} - - @slot('actions') - {{ trans('forum::general.proceed') }} - @endslot - @endcomponent - @else - @component('forum::modal-form') - @slot('key', 'lock-thread') - @slot('title', ' ' . trans('forum::threads.lock')) - @slot('route', Forum::route('thread.lock', $thread)) - @slot('method', 'POST') - - {{ trans('forum::general.generic_confirm') }} - - @slot('actions') - {{ trans('forum::general.proceed') }} - @endslot - @endcomponent - @endif - @endcan - - @can ('pinThreads', $category) - @if ($thread->pinned) - @component('forum::modal-form') - @slot('key', 'unpin-thread') - @slot('title', ' ' . trans('forum::threads.unpin')) - @slot('route', Forum::route('thread.unpin', $thread)) - @slot('method', 'POST') - - {{ trans('forum::general.generic_confirm') }} - - @slot('actions') - {{ trans('forum::general.proceed') }} - @endslot - @endcomponent - @else - @component('forum::modal-form') - @slot('key', 'pin-thread') - @slot('title', ' ' . trans('forum::threads.pin')) - @slot('route', Forum::route('thread.pin', $thread)) - @slot('method', 'POST') - - {{ trans('forum::general.generic_confirm') }} - - @slot('actions') - {{ trans('forum::general.proceed') }} - @endslot - @endcomponent - @endif - @endcan - - @can ('rename', $thread) - @component('forum::modal-form') - @slot('key', 'rename-thread') - @slot('title', ' ' . trans('forum::general.rename')) - @slot('route', Forum::route('thread.rename', $thread)) - @slot('method', 'POST') - -
    - {{ trans('forum::general.title') }} - -
    - - @slot('actions') - {{ trans('forum::general.proceed') }} - @endslot - @endcomponent - @endcan - - @can ('moveThreadsFrom', $category) - @component('forum::modal-form') - @slot('key', 'move-thread') - @slot('title', ' ' . trans('forum::general.move')) - @slot('route', Forum::route('thread.move', $thread)) - @slot('method', 'POST') - -
    -
    - -
    - -
    - - @slot('actions') - {{ trans('forum::general.proceed') }} - @endslot - @endcomponent - @endcan - @endif - - -@stop diff --git a/resources/forum/blade-tailwind/views/thread/unread.blade.php b/resources/forum/blade-tailwind/views/thread/unread.blade.php deleted file mode 100644 index 560ac0eddc..0000000000 --- a/resources/forum/blade-tailwind/views/thread/unread.blade.php +++ /dev/null @@ -1,31 +0,0 @@ -@extends ('forum::layouts.main', ['thread' => null, 'breadcrumbs_append' => [trans('forum::threads.unread_updated')]]) - -@section ('content') -
    -

    {{ trans('forum::threads.unread_updated') }}

    - - @if (!$threads->isEmpty()) -
    - @foreach ($threads as $thread) - @include ('forum::thread.partials.list') - @endforeach -
    - @else -
    - {{ trans('forum::threads.none_found') }} -
    - @endif -
    - - @if (!$threads->isEmpty()) - @can ('markThreadsAsRead') -
    - - {{ trans('forum::general.mark_read') }} - -
    - - @include ('forum::thread.modals.mark-as-read') - @endcan - @endif -@stop diff --git a/resources/views/components/action-message.blade.php b/resources/views/components/action-message.blade.php new file mode 100644 index 0000000000..46ac232add --- /dev/null +++ b/resources/views/components/action-message.blade.php @@ -0,0 +1,10 @@ +@props(['on']) + +
    merge(['class' => 'text-sm text-gray-600 dark:text-gray-400']) }}> + {{ $slot->isEmpty() ? 'Saved.' : $slot }} +
    diff --git a/resources/views/components/application-logo.blade.php b/resources/views/components/application-logo.blade.php new file mode 100644 index 0000000000..46579cf07d --- /dev/null +++ b/resources/views/components/application-logo.blade.php @@ -0,0 +1,3 @@ + + + diff --git a/resources/views/components/auth-session-status.blade.php b/resources/views/components/auth-session-status.blade.php new file mode 100644 index 0000000000..a39bc7d2e8 --- /dev/null +++ b/resources/views/components/auth-session-status.blade.php @@ -0,0 +1,7 @@ +@props(['status']) + +@if ($status) +
    merge(['class' => 'font-medium text-sm text-green-600 dark:text-green-400']) }}> + {{ $status }} +
    +@endif diff --git a/resources/views/components/danger-button.blade.php b/resources/views/components/danger-button.blade.php new file mode 100644 index 0000000000..d7417b2109 --- /dev/null +++ b/resources/views/components/danger-button.blade.php @@ -0,0 +1,3 @@ + diff --git a/resources/views/components/dropdown-link.blade.php b/resources/views/components/dropdown-link.blade.php new file mode 100644 index 0000000000..6d5279d8ba --- /dev/null +++ b/resources/views/components/dropdown-link.blade.php @@ -0,0 +1 @@ +merge(['class' => 'block w-full px-4 py-2 text-start text-sm leading-5 text-gray-700 dark:text-gray-300 hover:bg-gray-100 dark:hover:bg-gray-800 focus:outline-none focus:bg-gray-100 dark:focus:bg-gray-800 transition duration-150 ease-in-out']) }}>{{ $slot }} diff --git a/resources/views/components/dropdown.blade.php b/resources/views/components/dropdown.blade.php new file mode 100644 index 0000000000..65d29d88d1 --- /dev/null +++ b/resources/views/components/dropdown.blade.php @@ -0,0 +1,43 @@ +@props(['align' => 'right', 'width' => '48', 'contentClasses' => 'py-1 bg-white dark:bg-gray-700']) + +@php +switch ($align) { + case 'left': + $alignmentClasses = 'ltr:origin-top-left rtl:origin-top-right start-0'; + break; + case 'top': + $alignmentClasses = 'origin-top'; + break; + case 'right': + default: + $alignmentClasses = 'ltr:origin-top-right rtl:origin-top-left end-0'; + break; +} + +switch ($width) { + case '48': + $width = 'w-48'; + break; +} +@endphp + +
    +
    + {{ $trigger }} +
    + + +
    diff --git a/resources/views/components/input-error.blade.php b/resources/views/components/input-error.blade.php new file mode 100644 index 0000000000..ad95f6b57b --- /dev/null +++ b/resources/views/components/input-error.blade.php @@ -0,0 +1,9 @@ +@props(['messages']) + +@if ($messages) +
      merge(['class' => 'text-sm text-red-600 dark:text-red-400 space-y-1']) }}> + @foreach ((array) $messages as $message) +
    • {{ $message }}
    • + @endforeach +
    +@endif diff --git a/resources/views/components/input-label.blade.php b/resources/views/components/input-label.blade.php new file mode 100644 index 0000000000..e93b059acb --- /dev/null +++ b/resources/views/components/input-label.blade.php @@ -0,0 +1,5 @@ +@props(['value']) + + diff --git a/resources/views/components/modal.blade.php b/resources/views/components/modal.blade.php new file mode 100644 index 0000000000..384662a1f1 --- /dev/null +++ b/resources/views/components/modal.blade.php @@ -0,0 +1,78 @@ +@props([ + 'name', + 'show' => false, + 'maxWidth' => '2xl' +]) + +@php +$maxWidth = [ + 'sm' => 'sm:max-w-sm', + 'md' => 'sm:max-w-md', + 'lg' => 'sm:max-w-lg', + 'xl' => 'sm:max-w-xl', + '2xl' => 'sm:max-w-2xl', +][$maxWidth]; +@endphp + +
    +
    +
    +
    + +
    + {{ $slot }} +
    +
    diff --git a/resources/views/components/nav-link.blade.php b/resources/views/components/nav-link.blade.php new file mode 100644 index 0000000000..37bad5542d --- /dev/null +++ b/resources/views/components/nav-link.blade.php @@ -0,0 +1,11 @@ +@props(['active']) + +@php +$classes = ($active ?? false) + ? 'inline-flex items-center px-1 pt-1 border-b-2 border-indigo-400 dark:border-indigo-600 text-sm font-medium leading-5 text-gray-900 dark:text-gray-100 focus:outline-none focus:border-indigo-700 transition duration-150 ease-in-out' + : 'inline-flex items-center px-1 pt-1 border-b-2 border-transparent text-sm font-medium leading-5 text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300 hover:border-gray-300 dark:hover:border-gray-700 focus:outline-none focus:text-gray-700 dark:focus:text-gray-300 focus:border-gray-300 dark:focus:border-gray-700 transition duration-150 ease-in-out'; +@endphp + +merge(['class' => $classes]) }}> + {{ $slot }} + diff --git a/resources/views/components/primary-button.blade.php b/resources/views/components/primary-button.blade.php new file mode 100644 index 0000000000..99bf38907e --- /dev/null +++ b/resources/views/components/primary-button.blade.php @@ -0,0 +1,3 @@ + diff --git a/resources/views/components/responsive-nav-link.blade.php b/resources/views/components/responsive-nav-link.blade.php new file mode 100644 index 0000000000..98b55d19e8 --- /dev/null +++ b/resources/views/components/responsive-nav-link.blade.php @@ -0,0 +1,11 @@ +@props(['active']) + +@php +$classes = ($active ?? false) + ? 'block w-full ps-3 pe-4 py-2 border-l-4 border-indigo-400 dark:border-indigo-600 text-start text-base font-medium text-indigo-700 dark:text-indigo-300 bg-indigo-50 dark:bg-indigo-900/50 focus:outline-none focus:text-indigo-800 dark:focus:text-indigo-200 focus:bg-indigo-100 dark:focus:bg-indigo-900 focus:border-indigo-700 dark:focus:border-indigo-300 transition duration-150 ease-in-out' + : 'block w-full ps-3 pe-4 py-2 border-l-4 border-transparent text-start text-base font-medium text-gray-600 dark:text-gray-400 hover:text-gray-800 dark:hover:text-gray-200 hover:bg-gray-50 dark:hover:bg-gray-700 hover:border-gray-300 dark:hover:border-gray-600 focus:outline-none focus:text-gray-800 dark:focus:text-gray-200 focus:bg-gray-50 dark:focus:bg-gray-700 focus:border-gray-300 dark:focus:border-gray-600 transition duration-150 ease-in-out'; +@endphp + +merge(['class' => $classes]) }}> + {{ $slot }} + diff --git a/resources/views/components/secondary-button.blade.php b/resources/views/components/secondary-button.blade.php new file mode 100644 index 0000000000..fa1c54918c --- /dev/null +++ b/resources/views/components/secondary-button.blade.php @@ -0,0 +1,3 @@ + diff --git a/resources/views/components/text-input.blade.php b/resources/views/components/text-input.blade.php new file mode 100644 index 0000000000..7779a13ad4 --- /dev/null +++ b/resources/views/components/text-input.blade.php @@ -0,0 +1,3 @@ +@props(['disabled' => false]) + +merge(['class' => 'border-gray-300 dark:border-gray-700 dark:bg-gray-900 dark:text-gray-300 focus:border-indigo-500 dark:focus:border-indigo-600 focus:ring-indigo-500 dark:focus:ring-indigo-600 rounded-md shadow-sm']) !!}> diff --git a/resources/views/dashboard.blade.php b/resources/views/dashboard.blade.php new file mode 100644 index 0000000000..4024c64a89 --- /dev/null +++ b/resources/views/dashboard.blade.php @@ -0,0 +1,17 @@ + + +

    + {{ __('Dashboard') }} +

    +
    + +
    +
    +
    +
    + {{ __("You're logged in!") }} +
    +
    +
    +
    +
    diff --git a/resources/views/layouts/guest.blade.php b/resources/views/layouts/guest.blade.php new file mode 100644 index 0000000000..eaa6065387 --- /dev/null +++ b/resources/views/layouts/guest.blade.php @@ -0,0 +1,30 @@ + + + + + + + + {{ config('app.name', 'Laravel') }} + + + + + + + @vite(['resources/css/app.css', 'resources/js/app.js']) + + +
    +
    + + + +
    + +
    + {{ $slot }} +
    +
    + + diff --git a/resources/views/livewire/.gitkeep b/resources/views/livewire/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/resources/views/livewire/layout/navigation.blade.php b/resources/views/livewire/layout/navigation.blade.php new file mode 100644 index 0000000000..6f6211384b --- /dev/null +++ b/resources/views/livewire/layout/navigation.blade.php @@ -0,0 +1,110 @@ +redirect('/', navigate: true); + } +}; ?> + + diff --git a/resources/views/livewire/pages/auth/confirm-password.blade.php b/resources/views/livewire/pages/auth/confirm-password.blade.php new file mode 100644 index 0000000000..1c1e310068 --- /dev/null +++ b/resources/views/livewire/pages/auth/confirm-password.blade.php @@ -0,0 +1,62 @@ +validate([ + 'password' => ['required', 'string'], + ]); + + if (! Auth::guard('web')->validate([ + 'email' => Auth::user()->email, + 'password' => $this->password, + ])) { + throw ValidationException::withMessages([ + 'password' => __('auth.password'), + ]); + } + + session(['auth.password_confirmed_at' => time()]); + + $this->redirectIntended(default: route('dashboard', absolute: false), navigate: true); + } +}; ?> + +
    +
    + {{ __('This is a secure area of the application. Please confirm your password before continuing.') }} +
    + +
    + +
    + + + + + +
    + +
    + + {{ __('Confirm') }} + +
    +
    +
    diff --git a/resources/views/livewire/pages/auth/forgot-password.blade.php b/resources/views/livewire/pages/auth/forgot-password.blade.php new file mode 100644 index 0000000000..b80401225c --- /dev/null +++ b/resources/views/livewire/pages/auth/forgot-password.blade.php @@ -0,0 +1,61 @@ +validate([ + 'email' => ['required', 'string', 'email'], + ]); + + // We will send the password reset link to this user. Once we have attempted + // to send the link, we will examine the response then see the message we + // need to show to the user. Finally, we'll send out a proper response. + $status = Password::sendResetLink( + $this->only('email') + ); + + if ($status != Password::RESET_LINK_SENT) { + $this->addError('email', __($status)); + + return; + } + + $this->reset('email'); + + session()->flash('status', __($status)); + } +}; ?> + +
    +
    + {{ __('Forgot your password? No problem. Just let us know your email address and we will email you a password reset link that will allow you to choose a new one.') }} +
    + + + + +
    + +
    + + + +
    + +
    + + {{ __('Email Password Reset Link') }} + +
    +
    +
    diff --git a/resources/views/livewire/pages/auth/login.blade.php b/resources/views/livewire/pages/auth/login.blade.php new file mode 100644 index 0000000000..e8b5f94849 --- /dev/null +++ b/resources/views/livewire/pages/auth/login.blade.php @@ -0,0 +1,71 @@ +validate(); + + $this->form->authenticate(); + + Session::regenerate(); + + $this->redirectIntended(default: route('dashboard', absolute: false), navigate: true); + } +}; ?> + +
    + + + +
    + +
    + + + +
    + + +
    + + + + + +
    + + +
    + +
    + +
    + @if (Route::has('password.request')) + + {{ __('Forgot your password?') }} + + @endif + + + {{ __('Log in') }} + +
    +
    +
    diff --git a/resources/views/livewire/pages/auth/register.blade.php b/resources/views/livewire/pages/auth/register.blade.php new file mode 100644 index 0000000000..59ba2be9d4 --- /dev/null +++ b/resources/views/livewire/pages/auth/register.blade.php @@ -0,0 +1,88 @@ +validate([ + 'name' => ['required', 'string', 'max:255'], + 'email' => ['required', 'string', 'lowercase', 'email', 'max:255', 'unique:'.User::class], + 'password' => ['required', 'string', 'confirmed', Rules\Password::defaults()], + ]); + + $validated['password'] = Hash::make($validated['password']); + + event(new Registered($user = User::create($validated))); + + Auth::login($user); + + $this->redirect(route('dashboard', absolute: false), navigate: true); + } +}; ?> + +
    +
    + +
    + + + +
    + + +
    + + + +
    + + +
    + + + + + +
    + + +
    + + + + + +
    + +
    + + {{ __('Already registered?') }} + + + + {{ __('Register') }} + +
    +
    +
    diff --git a/resources/views/livewire/pages/auth/reset-password.blade.php b/resources/views/livewire/pages/auth/reset-password.blade.php new file mode 100644 index 0000000000..310a1966c7 --- /dev/null +++ b/resources/views/livewire/pages/auth/reset-password.blade.php @@ -0,0 +1,105 @@ +token = $token; + + $this->email = request()->string('email'); + } + + /** + * Reset the password for the given user. + */ + public function resetPassword(): void + { + $this->validate([ + 'token' => ['required'], + 'email' => ['required', 'string', 'email'], + 'password' => ['required', 'string', 'confirmed', Rules\Password::defaults()], + ]); + + // Here we will attempt to reset the user's password. If it is successful we + // will update the password on an actual user model and persist it to the + // database. Otherwise we will parse the error and return the response. + $status = Password::reset( + $this->only('email', 'password', 'password_confirmation', 'token'), + function ($user) { + $user->forceFill([ + 'password' => Hash::make($this->password), + 'remember_token' => Str::random(60), + ])->save(); + + event(new PasswordReset($user)); + } + ); + + // If the password was successfully reset, we will redirect the user back to + // the application's home authenticated view. If there is an error we can + // redirect them back to where they came from with their error message. + if ($status != Password::PASSWORD_RESET) { + $this->addError('email', __($status)); + + return; + } + + Session::flash('status', __($status)); + + $this->redirectRoute('login', navigate: true); + } +}; ?> + +
    +
    + +
    + + + +
    + + +
    + + + +
    + + +
    + + + + + +
    + +
    + + {{ __('Reset Password') }} + +
    +
    +
    diff --git a/resources/views/livewire/pages/auth/verify-email.blade.php b/resources/views/livewire/pages/auth/verify-email.blade.php new file mode 100644 index 0000000000..92e87ba874 --- /dev/null +++ b/resources/views/livewire/pages/auth/verify-email.blade.php @@ -0,0 +1,58 @@ +hasVerifiedEmail()) { + $this->redirectIntended(default: route('dashboard', absolute: false), navigate: true); + + return; + } + + Auth::user()->sendEmailVerificationNotification(); + + Session::flash('status', 'verification-link-sent'); + } + + /** + * Log the current user out of the application. + */ + public function logout(Logout $logout): void + { + $logout(); + + $this->redirect('/', navigate: true); + } +}; ?> + +
    +
    + {{ __('Thanks for signing up! Before getting started, could you verify your email address by clicking on the link we just emailed to you? If you didn\'t receive the email, we will gladly send you another.') }} +
    + + @if (session('status') == 'verification-link-sent') +
    + {{ __('A new verification link has been sent to the email address you provided during registration.') }} +
    + @endif + +
    + + {{ __('Resend Verification Email') }} + + + +
    +
    diff --git a/resources/views/livewire/profile/delete-user-form.blade.php b/resources/views/livewire/profile/delete-user-form.blade.php new file mode 100644 index 0000000000..92c9579eab --- /dev/null +++ b/resources/views/livewire/profile/delete-user-form.blade.php @@ -0,0 +1,79 @@ +validate([ + 'password' => ['required', 'string', 'current_password'], + ]); + + tap(Auth::user(), $logout(...))->delete(); + + $this->redirect('/', navigate: true); + } +}; ?> + +
    +
    +

    + {{ __('Delete Account') }} +

    + +

    + {{ __('Once your account is deleted, all of its resources and data will be permanently deleted. Before deleting your account, please download any data or information that you wish to retain.') }} +

    +
    + + {{ __('Delete Account') }} + + +
    + +

    + {{ __('Are you sure you want to delete your account?') }} +

    + +

    + {{ __('Once your account is deleted, all of its resources and data will be permanently deleted. Please enter your password to confirm you would like to permanently delete your account.') }} +

    + +
    + + + + + +
    + +
    + + {{ __('Cancel') }} + + + + {{ __('Delete Account') }} + +
    +
    +
    +
    diff --git a/resources/views/livewire/profile/update-password-form.blade.php b/resources/views/livewire/profile/update-password-form.blade.php new file mode 100644 index 0000000000..568cf2fd2f --- /dev/null +++ b/resources/views/livewire/profile/update-password-form.blade.php @@ -0,0 +1,79 @@ +validate([ + 'current_password' => ['required', 'string', 'current_password'], + 'password' => ['required', 'string', Password::defaults(), 'confirmed'], + ]); + } catch (ValidationException $e) { + $this->reset('current_password', 'password', 'password_confirmation'); + + throw $e; + } + + Auth::user()->update([ + 'password' => Hash::make($validated['password']), + ]); + + $this->reset('current_password', 'password', 'password_confirmation'); + + $this->dispatch('password-updated'); + } +}; ?> + +
    +
    +

    + {{ __('Update Password') }} +

    + +

    + {{ __('Ensure your account is using a long, random password to stay secure.') }} +

    +
    + +
    +
    + + + +
    + +
    + + + +
    + +
    + + + +
    + +
    + {{ __('Save') }} + + + {{ __('Saved.') }} + +
    +
    +
    diff --git a/resources/views/livewire/profile/update-profile-information-form.blade.php b/resources/views/livewire/profile/update-profile-information-form.blade.php new file mode 100644 index 0000000000..4ff4d86efd --- /dev/null +++ b/resources/views/livewire/profile/update-profile-information-form.blade.php @@ -0,0 +1,115 @@ +name = Auth::user()->name; + $this->email = Auth::user()->email; + } + + /** + * Update the profile information for the currently authenticated user. + */ + public function updateProfileInformation(): void + { + $user = Auth::user(); + + $validated = $this->validate([ + 'name' => ['required', 'string', 'max:255'], + 'email' => ['required', 'string', 'lowercase', 'email', 'max:255', Rule::unique(User::class)->ignore($user->id)], + ]); + + $user->fill($validated); + + if ($user->isDirty('email')) { + $user->email_verified_at = null; + } + + $user->save(); + + $this->dispatch('profile-updated', name: $user->name); + } + + /** + * Send an email verification notification to the current user. + */ + public function sendVerification(): void + { + $user = Auth::user(); + + if ($user->hasVerifiedEmail()) { + $this->redirectIntended(default: route('dashboard', absolute: false)); + + return; + } + + $user->sendEmailVerificationNotification(); + + Session::flash('status', 'verification-link-sent'); + } +}; ?> + +
    +
    +

    + {{ __('Profile Information') }} +

    + +

    + {{ __("Update your account's profile information and email address.") }} +

    +
    + +
    +
    + + + +
    + +
    + + + + + @if (auth()->user() instanceof \Illuminate\Contracts\Auth\MustVerifyEmail && ! auth()->user()->hasVerifiedEmail()) +
    +

    + {{ __('Your email address is unverified.') }} + + +

    + + @if (session('status') === 'verification-link-sent') +

    + {{ __('A new verification link has been sent to your email address.') }} +

    + @endif +
    + @endif +
    + +
    + {{ __('Save') }} + + + {{ __('Saved.') }} + +
    +
    +
    diff --git a/resources/views/livewire/welcome/navigation.blade.php b/resources/views/livewire/welcome/navigation.blade.php new file mode 100644 index 0000000000..7d079deb7e --- /dev/null +++ b/resources/views/livewire/welcome/navigation.blade.php @@ -0,0 +1,26 @@ + diff --git a/resources/views/profile.blade.php b/resources/views/profile.blade.php new file mode 100644 index 0000000000..b14bcc1b91 --- /dev/null +++ b/resources/views/profile.blade.php @@ -0,0 +1,29 @@ + + +

    + {{ __('Profile') }} +

    +
    + +
    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    diff --git a/routes/auth.php b/routes/auth.php new file mode 100644 index 0000000000..131252e73f --- /dev/null +++ b/routes/auth.php @@ -0,0 +1,31 @@ +group(function () { + Volt::route('register', 'pages.auth.register') + ->name('register'); + + Volt::route('login', 'pages.auth.login') + ->name('login'); + + Volt::route('forgot-password', 'pages.auth.forgot-password') + ->name('password.request'); + + Volt::route('reset-password/{token}', 'pages.auth.reset-password') + ->name('password.reset'); +}); + +Route::middleware('auth')->group(function () { + Volt::route('verify-email', 'pages.auth.verify-email') + ->name('verification.notice'); + + Route::get('verify-email/{id}/{hash}', VerifyEmailController::class) + ->middleware(['signed', 'throttle:6,1']) + ->name('verification.verify'); + + Volt::route('confirm-password', 'pages.auth.confirm-password') + ->name('password.confirm'); +}); diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000000..c29eb1a15b --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,21 @@ +import defaultTheme from 'tailwindcss/defaultTheme'; +import forms from '@tailwindcss/forms'; + +/** @type {import('tailwindcss').Config} */ +export default { + content: [ + './vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php', + './storage/framework/views/*.php', + './resources/views/**/*.blade.php', + ], + + theme: { + extend: { + fontFamily: { + sans: ['Figtree', ...defaultTheme.fontFamily.sans], + }, + }, + }, + + plugins: [forms], +}; From adfa6bd2d2b2c9a671ce017eaae659487f97d671 Mon Sep 17 00:00:00 2001 From: DariusIII Date: Sun, 28 Apr 2024 10:45:06 +0200 Subject: [PATCH 34/47] Add new files --- .../Auth/VerifyEmailController.php | 27 +++++++ app/Livewire/Actions/Logout.php | 20 ++++++ app/Livewire/Forms/LoginForm.php | 72 +++++++++++++++++++ app/Providers/VoltServiceProvider.php | 28 ++++++++ app/View/Components/AppLayout.php | 17 +++++ app/View/Components/GuestLayout.php | 17 +++++ 6 files changed, 181 insertions(+) create mode 100644 app/Http/Controllers/Auth/VerifyEmailController.php create mode 100644 app/Livewire/Actions/Logout.php create mode 100644 app/Livewire/Forms/LoginForm.php create mode 100644 app/Providers/VoltServiceProvider.php create mode 100644 app/View/Components/AppLayout.php create mode 100644 app/View/Components/GuestLayout.php diff --git a/app/Http/Controllers/Auth/VerifyEmailController.php b/app/Http/Controllers/Auth/VerifyEmailController.php new file mode 100644 index 0000000000..784765e3a5 --- /dev/null +++ b/app/Http/Controllers/Auth/VerifyEmailController.php @@ -0,0 +1,27 @@ +user()->hasVerifiedEmail()) { + return redirect()->intended(route('dashboard', absolute: false).'?verified=1'); + } + + if ($request->user()->markEmailAsVerified()) { + event(new Verified($request->user())); + } + + return redirect()->intended(route('dashboard', absolute: false).'?verified=1'); + } +} diff --git a/app/Livewire/Actions/Logout.php b/app/Livewire/Actions/Logout.php new file mode 100644 index 0000000000..3ef481d1c2 --- /dev/null +++ b/app/Livewire/Actions/Logout.php @@ -0,0 +1,20 @@ +logout(); + + Session::invalidate(); + Session::regenerateToken(); + } +} diff --git a/app/Livewire/Forms/LoginForm.php b/app/Livewire/Forms/LoginForm.php new file mode 100644 index 0000000000..3c20c3749a --- /dev/null +++ b/app/Livewire/Forms/LoginForm.php @@ -0,0 +1,72 @@ +ensureIsNotRateLimited(); + + if (! Auth::attempt($this->only(['email', 'password']), $this->remember)) { + RateLimiter::hit($this->throttleKey()); + + throw ValidationException::withMessages([ + 'form.email' => trans('auth.failed'), + ]); + } + + RateLimiter::clear($this->throttleKey()); + } + + /** + * Ensure the authentication request is not rate limited. + */ + protected function ensureIsNotRateLimited(): void + { + if (! RateLimiter::tooManyAttempts($this->throttleKey(), 5)) { + return; + } + + event(new Lockout(request())); + + $seconds = RateLimiter::availableIn($this->throttleKey()); + + throw ValidationException::withMessages([ + 'form.email' => trans('auth.throttle', [ + 'seconds' => $seconds, + 'minutes' => ceil($seconds / 60), + ]), + ]); + } + + /** + * Get the authentication rate limiting throttle key. + */ + protected function throttleKey(): string + { + return Str::transliterate(Str::lower($this->email).'|'.request()->ip()); + } +} diff --git a/app/Providers/VoltServiceProvider.php b/app/Providers/VoltServiceProvider.php new file mode 100644 index 0000000000..e61d98453d --- /dev/null +++ b/app/Providers/VoltServiceProvider.php @@ -0,0 +1,28 @@ + Date: Sun, 28 Apr 2024 10:51:00 +0200 Subject: [PATCH 35/47] Fix CategoryPolicy --- app/Policies/CategoryPolicy.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/Policies/CategoryPolicy.php b/app/Policies/CategoryPolicy.php index ca4e4723d0..7d1d4c0e4c 100644 --- a/app/Policies/CategoryPolicy.php +++ b/app/Policies/CategoryPolicy.php @@ -2,6 +2,7 @@ namespace App\Policies; +use Illuminate\Foundation\Auth\User; use TeamTeaTime\Forum\Models\Category; class CategoryPolicy extends \TeamTeaTime\Forum\Policies\CategoryPolicy @@ -63,4 +64,9 @@ public function delete($user, Category $category): bool { return $user->hasRole('Admin'); } + + public function edit(User $user, Category $category): bool + { + return $user->hasRole('Admin'); + } } From 656fb14cca9611a7323fe9744a0b5bb59e381df1 Mon Sep 17 00:00:00 2001 From: DariusIII Date: Sun, 28 Apr 2024 10:51:15 +0200 Subject: [PATCH 36/47] CS fixes --- app/Policies/CategoryPolicy.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Policies/CategoryPolicy.php b/app/Policies/CategoryPolicy.php index 7d1d4c0e4c..481d07c3cb 100644 --- a/app/Policies/CategoryPolicy.php +++ b/app/Policies/CategoryPolicy.php @@ -64,7 +64,7 @@ public function delete($user, Category $category): bool { return $user->hasRole('Admin'); } - + public function edit(User $user, Category $category): bool { return $user->hasRole('Admin'); From 4cd1ab1bfa189f72da6c5cc23a059d163f4e42b1 Mon Sep 17 00:00:00 2001 From: DariusIII Date: Sun, 28 Apr 2024 11:00:03 +0200 Subject: [PATCH 37/47] Update used packages to their latest versions --- composer.lock | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/composer.lock b/composer.lock index 9962b6a83a..948b1f826e 100644 --- a/composer.lock +++ b/composer.lock @@ -8526,20 +8526,20 @@ }, { "name": "ramsey/uuid", - "version": "4.7.5", + "version": "4.7.6", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e" + "reference": "91039bc1faa45ba123c4328958e620d382ec7088" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e", - "reference": "5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/91039bc1faa45ba123c4328958e620d382ec7088", + "reference": "91039bc1faa45ba123c4328958e620d382ec7088", "shasum": "" }, "require": { - "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11", + "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12", "ext-json": "*", "php": "^8.0", "ramsey/collection": "^1.2 || ^2.0" @@ -8602,7 +8602,7 @@ ], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.7.5" + "source": "https://github.com/ramsey/uuid/tree/4.7.6" }, "funding": [ { @@ -8614,7 +8614,7 @@ "type": "tidelift" } ], - "time": "2023-11-08T05:53:05+00:00" + "time": "2024-04-27T21:32:50+00:00" }, { "name": "react/promise", From d189a825fb2e6a4addc05ee0cd0c8113ab22a403 Mon Sep 17 00:00:00 2001 From: DariusIII Date: Sun, 28 Apr 2024 11:19:54 +0200 Subject: [PATCH 38/47] CHeck if table exists before migration --- ..._04_27_124202_create_media_infos_table.php | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/database/migrations/2024_04_27_124202_create_media_infos_table.php b/database/migrations/2024_04_27_124202_create_media_infos_table.php index 675c4b978f..447d380762 100644 --- a/database/migrations/2024_04_27_124202_create_media_infos_table.php +++ b/database/migrations/2024_04_27_124202_create_media_infos_table.php @@ -11,14 +11,17 @@ */ public function up(): void { - Schema::create('media_infos', function (Blueprint $table) { - $table->id(); - $table->bigInteger('releases_id')->unsigned(); - $table->string('movie_name')->nullable(); - $table->string('file_name')->nullable(); - $table->string('unique_id')->nullable(); - $table->timestamps(); - }); + // Check if table exists + if (! Schema::hasTable('media_infos')) { + Schema::create('media_infos', function (Blueprint $table) { + $table->id(); + $table->bigInteger('releases_id')->unsigned(); + $table->string('movie_name')->nullable(); + $table->string('file_name')->nullable(); + $table->string('unique_id')->nullable(); + $table->timestamps(); + }); + } } /** From 311c7668d51ed7c46d01cd894c035b53b7ea59b7 Mon Sep 17 00:00:00 2001 From: DariusIII Date: Sun, 28 Apr 2024 11:29:01 +0200 Subject: [PATCH 39/47] Add mariadb connection and driver --- config/database.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/config/database.php b/config/database.php index 4afa6d8dbd..fdaebec747 100644 --- a/config/database.php +++ b/config/database.php @@ -46,6 +46,25 @@ 'unix_socket' => '', 'charset' => 'utf8', ], + + 'mariadb' => [ + 'driver' => 'mariadb', + 'url' => env('DB_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '3306'), + 'database' => env('DB_DATABASE', 'nntmux'), + 'username' => env('DB_USERNAME', 'nntmux'), + 'password' => env('DB_PASSWORD', ''), + 'unix_socket' => env('DB_SOCKET', ''), + 'charset' => 'utf8', + 'collation' => 'utf8_unicode_ci', + 'strict' => false, + 'engine' => 'InnoDB ROW_FORMAT=DYNAMIC', + 'options' => extension_loaded('pdo_mysql') ? array_filter([ + PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), + PDO::MYSQL_ATTR_LOCAL_INFILE => true, + ]) : [], + ], ], 'migrations' => [ From 0e62ff1333063915e956001c960e4c9cf8fe12a0 Mon Sep 17 00:00:00 2001 From: DariusIII Date: Sun, 28 Apr 2024 11:35:48 +0200 Subject: [PATCH 40/47] Use APP_TIMEZONE --- .env.example | 1 - docker-compose.yml.dist | 10 +++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/.env.example b/.env.example index 44461ebfc0..ec64fff475 100644 --- a/.env.example +++ b/.env.example @@ -56,7 +56,6 @@ APP_MAINTENANCE_DRIVER=file APP_MAINTENANCE_STORE=database BCRYPT_ROUNDS=12 -APP_TZ=Europe/Paris APP_KEY= LOG_CHANNEL=stack LOG_STACK=single diff --git a/docker-compose.yml.dist b/docker-compose.yml.dist index eb1b634dfb..1ed8a42adc 100644 --- a/docker-compose.yml.dist +++ b/docker-compose.yml.dist @@ -13,7 +13,7 @@ services: - '${APP_PORT:-80}:80' - '${VITE_PORT:-5173}:${VITE_PORT:-5173}' environment: - TZ: ${APP_TZ} + TZ: ${APP_TIMEZONE} COMPOSER_AUTH: ${COMPOSER_AUTH} WWWUSER: '${WWWUSER}' LARAVEL_SAIL: 1 @@ -33,7 +33,7 @@ services: ports: - '${FORWARD_DB_PORT:-3306}:3306' environment: - TZ: ${APP_TZ} + TZ: ${APP_TIMEZONE} MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}' MYSQL_ROOT_HOST: '%' MYSQL_DATABASE: '${DB_DATABASE}' @@ -62,7 +62,7 @@ services: ports: - '${FORWARD_REDIS_PORT:-6379}:6379' environment: - TZ: ${APP_TZ} + TZ: ${APP_TIMEZONE} volumes: - 'sail-redis:/data' networks: @@ -84,7 +84,7 @@ services: manticore: image: manticoresearch/manticore environment: - TZ: ${APP_TZ} + TZ: ${APP_TIMEZONE} EXTRA: 1 # Activates extra features restart: always ports: @@ -106,7 +106,7 @@ services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:8.6.2 environment: - - TZ=${APP_TZ} + - TZ=${APP_TIMEZONE} - discovery.type=single-node - xpack.security.enabled=false - "ES_JAVA_OPTS=-Xms512m -Xmx512m" From 36ac4ac8ecf434fc982b67337de75afc825a480d Mon Sep 17 00:00:00 2001 From: DariusIII Date: Sun, 28 Apr 2024 11:42:35 +0200 Subject: [PATCH 41/47] Update laravel.yml --- .github/workflows/laravel.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/laravel.yml b/.github/workflows/laravel.yml index cd5784df0b..13116a29fe 100644 --- a/.github/workflows/laravel.yml +++ b/.github/workflows/laravel.yml @@ -8,7 +8,7 @@ jobs: runs-on: ubuntu-latest services: mysql: - image: mariadb:10 + image: mariadb:11 env: MYSQL_ALLOW_EMPTY_PASSWORD: yes MYSQL_DATABASE: TEST @@ -18,7 +18,7 @@ jobs: - 3306:3306 options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Setup PHP uses: shivammathur/setup-php@v2 From c2b838d1a6fd89672d82e9d34e106cdb05b6c853 Mon Sep 17 00:00:00 2001 From: DariusIII Date: Sun, 28 Apr 2024 11:44:27 +0200 Subject: [PATCH 42/47] Revert to mariadb 10 --- .github/workflows/laravel.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/laravel.yml b/.github/workflows/laravel.yml index 13116a29fe..92ea2280f5 100644 --- a/.github/workflows/laravel.yml +++ b/.github/workflows/laravel.yml @@ -8,7 +8,7 @@ jobs: runs-on: ubuntu-latest services: mysql: - image: mariadb:11 + image: mariadb:10 env: MYSQL_ALLOW_EMPTY_PASSWORD: yes MYSQL_DATABASE: TEST From 56011c1b633d6ebdd323da66abd472f00e0d9c53 Mon Sep 17 00:00:00 2001 From: DariusIII Date: Sun, 28 Apr 2024 11:47:14 +0200 Subject: [PATCH 43/47] Remove bookstest as it is unreliable --- tests/Feature/BooksTest.php | 20 -------------------- 1 file changed, 20 deletions(-) delete mode 100644 tests/Feature/BooksTest.php diff --git a/tests/Feature/BooksTest.php b/tests/Feature/BooksTest.php deleted file mode 100644 index 952afe337c..0000000000 --- a/tests/Feature/BooksTest.php +++ /dev/null @@ -1,20 +0,0 @@ -fetchItunesBookProperties('The Volunteer'); - - $this->assertArrayHasKey('author', $book); - $this->assertEquals('Jack Fairweather', $book['author']); - } -} From 7b1dbcb88fb88b23c126f1101e4d2a60f9e5371e Mon Sep 17 00:00:00 2001 From: DariusIII Date: Sun, 28 Apr 2024 11:58:34 +0200 Subject: [PATCH 44/47] Update tests --- .github/workflows/laravel.yml | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/.github/workflows/laravel.yml b/.github/workflows/laravel.yml index 92ea2280f5..921a9bacf9 100644 --- a/.github/workflows/laravel.yml +++ b/.github/workflows/laravel.yml @@ -4,8 +4,14 @@ on: [push] jobs: tests: - name: Run tests runs-on: ubuntu-latest + + strategy: + fail-fast: true + matrix: + php: [ 8.2, 8.3 ] + + name: PHP ${{ matrix.php }} services: mysql: image: mariadb:10 @@ -23,8 +29,8 @@ jobs: - name: Setup PHP uses: shivammathur/setup-php@v2 with: - php-version: '8.2' - extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, bcmath, soap, intl, gd, exif, iconv + php-version: ${{ matrix.php }} + extensions: dom, curl, libxml, mbstring, zip, pcntl, pdo, sqlite, pdo_sqlite coverage: none - name: Copy env file @@ -32,11 +38,10 @@ jobs: cp .env.test .env - name: Run composer install - run: composer install -n --prefer-dist + run: composer install --prefer-dist --no-interaction --no-progress - - name: Prepare Laravel Application - run: - php artisan key:generate + - name: Generate app key + run: php artisan key:generate - name: Run tests - run: php artisan test + run: vendor/bin/phpunit From 9360ca88ffd31fcd5446241bc40b339d9b2232d1 Mon Sep 17 00:00:00 2001 From: DariusIII Date: Sun, 28 Apr 2024 12:47:19 +0200 Subject: [PATCH 45/47] Update composer.json --- composer.json | 2 +- composer.lock | 452 +++++++++++++++++++++++++------------------------- 2 files changed, 231 insertions(+), 223 deletions(-) diff --git a/composer.json b/composer.json index a2b559e1a0..eac9765219 100644 --- a/composer.json +++ b/composer.json @@ -129,7 +129,7 @@ "mockery/mockery": "^1.6", "nunomaduro/collision": "^8.0", "php-coveralls/php-coveralls": "^2.4", - "phpunit/phpunit": "^10.5", + "phpunit/phpunit": "^11.0", "rector/rector": "^0.18.13" }, "suggest": { diff --git a/composer.lock b/composer.lock index 948b1f826e..7f15176fdd 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "2eed7e02d2472b899adc54c1a29937be", + "content-hash": "0d7a2ddce4af8e7fd9aa7d81c8473a36", "packages": [ { "name": "aharen/omdbapi", @@ -16445,35 +16445,35 @@ }, { "name": "phpunit/php-code-coverage", - "version": "10.1.14", + "version": "11.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "e3f51450ebffe8e0efdf7346ae966a656f7d5e5b" + "reference": "7e35a2cbcabac0e6865fd373742ea432a3c34f92" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/e3f51450ebffe8e0efdf7346ae966a656f7d5e5b", - "reference": "e3f51450ebffe8e0efdf7346ae966a656f7d5e5b", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7e35a2cbcabac0e6865fd373742ea432a3c34f92", + "reference": "7e35a2cbcabac0e6865fd373742ea432a3c34f92", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=8.1", - "phpunit/php-file-iterator": "^4.0", - "phpunit/php-text-template": "^3.0", - "sebastian/code-unit-reverse-lookup": "^3.0", - "sebastian/complexity": "^3.0", - "sebastian/environment": "^6.0", - "sebastian/lines-of-code": "^2.0", - "sebastian/version": "^4.0", + "nikic/php-parser": "^5.0", + "php": ">=8.2", + "phpunit/php-file-iterator": "^5.0", + "phpunit/php-text-template": "^4.0", + "sebastian/code-unit-reverse-lookup": "^4.0", + "sebastian/complexity": "^4.0", + "sebastian/environment": "^7.0", + "sebastian/lines-of-code": "^3.0", + "sebastian/version": "^5.0", "theseer/tokenizer": "^1.2.0" }, "require-dev": { - "phpunit/phpunit": "^10.1" + "phpunit/phpunit": "^11.0" }, "suggest": { "ext-pcov": "PHP extension that provides line coverage", @@ -16482,7 +16482,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "10.1-dev" + "dev-main": "11.0-dev" } }, "autoload": { @@ -16511,7 +16511,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.14" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.3" }, "funding": [ { @@ -16519,32 +16519,32 @@ "type": "github" } ], - "time": "2024-03-12T15:33:41+00:00" + "time": "2024-03-12T15:35:40+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "4.1.0", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c" + "reference": "99e95c94ad9500daca992354fa09d7b99abe2210" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c", - "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/99e95c94ad9500daca992354fa09d7b99abe2210", + "reference": "99e95c94ad9500daca992354fa09d7b99abe2210", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -16572,7 +16572,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0" + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/5.0.0" }, "funding": [ { @@ -16580,28 +16580,28 @@ "type": "github" } ], - "time": "2023-08-31T06:24:48+00:00" + "time": "2024-02-02T06:05:04+00:00" }, { "name": "phpunit/php-invoker", - "version": "4.0.0", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7" + "reference": "5d8d9355a16d8cc5a1305b0a85342cfa420612be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", - "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5d8d9355a16d8cc5a1305b0a85342cfa420612be", + "reference": "5d8d9355a16d8cc5a1305b0a85342cfa420612be", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { "ext-pcntl": "*", - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "suggest": { "ext-pcntl": "*" @@ -16609,7 +16609,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -16635,7 +16635,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" + "security": "https://github.com/sebastianbergmann/php-invoker/security/policy", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/5.0.0" }, "funding": [ { @@ -16643,32 +16644,32 @@ "type": "github" } ], - "time": "2023-02-03T06:56:09+00:00" + "time": "2024-02-02T06:05:50+00:00" }, { "name": "phpunit/php-text-template", - "version": "3.0.1", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748" + "reference": "d38f6cbff1cdb6f40b03c9811421561668cc133e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748", - "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/d38f6cbff1cdb6f40b03c9811421561668cc133e", + "reference": "d38f6cbff1cdb6f40b03c9811421561668cc133e", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -16695,7 +16696,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-text-template/issues", "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1" + "source": "https://github.com/sebastianbergmann/php-text-template/tree/4.0.0" }, "funding": [ { @@ -16703,32 +16704,32 @@ "type": "github" } ], - "time": "2023-08-31T14:07:24+00:00" + "time": "2024-02-02T06:06:56+00:00" }, { "name": "phpunit/php-timer", - "version": "6.0.0", + "version": "7.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d" + "reference": "8a59d9e25720482ee7fcdf296595e08795b84dc5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d", - "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/8a59d9e25720482ee7fcdf296595e08795b84dc5", + "reference": "8a59d9e25720482ee7fcdf296595e08795b84dc5", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -16754,7 +16755,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" + "security": "https://github.com/sebastianbergmann/php-timer/security/policy", + "source": "https://github.com/sebastianbergmann/php-timer/tree/7.0.0" }, "funding": [ { @@ -16762,20 +16764,20 @@ "type": "github" } ], - "time": "2023-02-03T06:57:52+00:00" + "time": "2024-02-02T06:08:01+00:00" }, { "name": "phpunit/phpunit", - "version": "10.5.20", + "version": "11.1.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "547d314dc24ec1e177720d45c6263fb226cc2ae3" + "reference": "d475be032238173ca3b0a516f5cc291d174708ae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/547d314dc24ec1e177720d45c6263fb226cc2ae3", - "reference": "547d314dc24ec1e177720d45c6263fb226cc2ae3", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/d475be032238173ca3b0a516f5cc291d174708ae", + "reference": "d475be032238173ca3b0a516f5cc291d174708ae", "shasum": "" }, "require": { @@ -16788,23 +16790,22 @@ "myclabs/deep-copy": "^1.10.1", "phar-io/manifest": "^2.0.3", "phar-io/version": "^3.0.2", - "php": ">=8.1", - "phpunit/php-code-coverage": "^10.1.5", - "phpunit/php-file-iterator": "^4.0", - "phpunit/php-invoker": "^4.0", - "phpunit/php-text-template": "^3.0", - "phpunit/php-timer": "^6.0", - "sebastian/cli-parser": "^2.0", - "sebastian/code-unit": "^2.0", - "sebastian/comparator": "^5.0", - "sebastian/diff": "^5.0", - "sebastian/environment": "^6.0", - "sebastian/exporter": "^5.1", - "sebastian/global-state": "^6.0.1", - "sebastian/object-enumerator": "^5.0", - "sebastian/recursion-context": "^5.0", - "sebastian/type": "^4.0", - "sebastian/version": "^4.0" + "php": ">=8.2", + "phpunit/php-code-coverage": "^11.0", + "phpunit/php-file-iterator": "^5.0", + "phpunit/php-invoker": "^5.0", + "phpunit/php-text-template": "^4.0", + "phpunit/php-timer": "^7.0", + "sebastian/cli-parser": "^3.0", + "sebastian/code-unit": "^3.0", + "sebastian/comparator": "^6.0", + "sebastian/diff": "^6.0", + "sebastian/environment": "^7.0", + "sebastian/exporter": "^6.0", + "sebastian/global-state": "^7.0", + "sebastian/object-enumerator": "^6.0", + "sebastian/type": "^5.0", + "sebastian/version": "^5.0" }, "suggest": { "ext-soap": "To be able to generate mocks based on WSDL files" @@ -16815,7 +16816,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "10.5-dev" + "dev-main": "11.1-dev" } }, "autoload": { @@ -16847,7 +16848,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.20" + "source": "https://github.com/sebastianbergmann/phpunit/tree/11.1.3" }, "funding": [ { @@ -16863,7 +16864,7 @@ "type": "tidelift" } ], - "time": "2024-04-24T06:32:35+00:00" + "time": "2024-04-24T06:34:25+00:00" }, { "name": "rector/rector", @@ -16923,28 +16924,28 @@ }, { "name": "sebastian/cli-parser", - "version": "2.0.1", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084" + "reference": "00a74d5568694711f0222e54fb281e1d15fdf04a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/c34583b87e7b7a8055bf6c450c2c77ce32a24084", - "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/00a74d5568694711f0222e54fb281e1d15fdf04a", + "reference": "00a74d5568694711f0222e54fb281e1d15fdf04a", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -16968,7 +16969,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/cli-parser/issues", "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.1" + "source": "https://github.com/sebastianbergmann/cli-parser/tree/3.0.1" }, "funding": [ { @@ -16976,32 +16977,32 @@ "type": "github" } ], - "time": "2024-03-02T07:12:49+00:00" + "time": "2024-03-02T07:26:58+00:00" }, { "name": "sebastian/code-unit", - "version": "2.0.0", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "a81fee9eef0b7a76af11d121767abc44c104e503" + "reference": "6634549cb8d702282a04a774e36a7477d2bd9015" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503", - "reference": "a81fee9eef0b7a76af11d121767abc44c104e503", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/6634549cb8d702282a04a774e36a7477d2bd9015", + "reference": "6634549cb8d702282a04a774e36a7477d2bd9015", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -17024,7 +17025,8 @@ "homepage": "https://github.com/sebastianbergmann/code-unit", "support": { "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0" + "security": "https://github.com/sebastianbergmann/code-unit/security/policy", + "source": "https://github.com/sebastianbergmann/code-unit/tree/3.0.0" }, "funding": [ { @@ -17032,32 +17034,32 @@ "type": "github" } ], - "time": "2023-02-03T06:58:43+00:00" + "time": "2024-02-02T05:50:41+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "3.0.0", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d" + "reference": "df80c875d3e459b45c6039e4d9b71d4fbccae25d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", - "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/df80c875d3e459b45c6039e4d9b71d4fbccae25d", + "reference": "df80c875d3e459b45c6039e4d9b71d4fbccae25d", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -17079,7 +17081,8 @@ "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", "support": { "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0" + "security": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/security/policy", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/4.0.0" }, "funding": [ { @@ -17087,36 +17090,36 @@ "type": "github" } ], - "time": "2023-02-03T06:59:15+00:00" + "time": "2024-02-02T05:52:17+00:00" }, { "name": "sebastian/comparator", - "version": "5.0.1", + "version": "6.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "2db5010a484d53ebf536087a70b4a5423c102372" + "reference": "bd0f2fa5b9257c69903537b266ccb80fcf940db8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2db5010a484d53ebf536087a70b4a5423c102372", - "reference": "2db5010a484d53ebf536087a70b4a5423c102372", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/bd0f2fa5b9257c69903537b266ccb80fcf940db8", + "reference": "bd0f2fa5b9257c69903537b266ccb80fcf940db8", "shasum": "" }, "require": { "ext-dom": "*", "ext-mbstring": "*", - "php": ">=8.1", - "sebastian/diff": "^5.0", - "sebastian/exporter": "^5.0" + "php": ">=8.2", + "sebastian/diff": "^6.0", + "sebastian/exporter": "^6.0" }, "require-dev": { - "phpunit/phpunit": "^10.3" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -17156,7 +17159,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.1" + "source": "https://github.com/sebastianbergmann/comparator/tree/6.0.0" }, "funding": [ { @@ -17164,33 +17167,33 @@ "type": "github" } ], - "time": "2023-08-14T13:18:12+00:00" + "time": "2024-02-02T05:53:45+00:00" }, { "name": "sebastian/complexity", - "version": "3.2.0", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "68ff824baeae169ec9f2137158ee529584553799" + "reference": "88a434ad86150e11a606ac4866b09130712671f0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799", - "reference": "68ff824baeae169ec9f2137158ee529584553799", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/88a434ad86150e11a606ac4866b09130712671f0", + "reference": "88a434ad86150e11a606ac4866b09130712671f0", "shasum": "" }, "require": { - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=8.1" + "nikic/php-parser": "^5.0", + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.2-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -17214,7 +17217,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", "security": "https://github.com/sebastianbergmann/complexity/security/policy", - "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0" + "source": "https://github.com/sebastianbergmann/complexity/tree/4.0.0" }, "funding": [ { @@ -17222,33 +17225,33 @@ "type": "github" } ], - "time": "2023-12-21T08:37:17+00:00" + "time": "2024-02-02T05:55:19+00:00" }, { "name": "sebastian/diff", - "version": "5.1.1", + "version": "6.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e" + "reference": "ab83243ecc233de5655b76f577711de9f842e712" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e", - "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ab83243ecc233de5655b76f577711de9f842e712", + "reference": "ab83243ecc233de5655b76f577711de9f842e712", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0", - "symfony/process": "^6.4" + "phpunit/phpunit": "^11.0", + "symfony/process": "^4.2 || ^5" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.1-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -17281,7 +17284,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", "security": "https://github.com/sebastianbergmann/diff/security/policy", - "source": "https://github.com/sebastianbergmann/diff/tree/5.1.1" + "source": "https://github.com/sebastianbergmann/diff/tree/6.0.1" }, "funding": [ { @@ -17289,27 +17292,27 @@ "type": "github" } ], - "time": "2024-03-02T07:15:17+00:00" + "time": "2024-03-02T07:30:33+00:00" }, { "name": "sebastian/environment", - "version": "6.1.0", + "version": "7.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "8074dbcd93529b357029f5cc5058fd3e43666984" + "reference": "4eb3a442574d0e9d141aab209cd4aaf25701b09a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/8074dbcd93529b357029f5cc5058fd3e43666984", - "reference": "8074dbcd93529b357029f5cc5058fd3e43666984", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/4eb3a442574d0e9d141aab209cd4aaf25701b09a", + "reference": "4eb3a442574d0e9d141aab209cd4aaf25701b09a", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "suggest": { "ext-posix": "*" @@ -17317,7 +17320,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "6.1-dev" + "dev-main": "7.1-dev" } }, "autoload": { @@ -17345,7 +17348,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", "security": "https://github.com/sebastianbergmann/environment/security/policy", - "source": "https://github.com/sebastianbergmann/environment/tree/6.1.0" + "source": "https://github.com/sebastianbergmann/environment/tree/7.1.0" }, "funding": [ { @@ -17353,34 +17356,34 @@ "type": "github" } ], - "time": "2024-03-23T08:47:14+00:00" + "time": "2024-03-23T08:56:34+00:00" }, { "name": "sebastian/exporter", - "version": "5.1.2", + "version": "6.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "955288482d97c19a372d3f31006ab3f37da47adf" + "reference": "f291e5a317c321c0381fa9ecc796fa2d21b186da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/955288482d97c19a372d3f31006ab3f37da47adf", - "reference": "955288482d97c19a372d3f31006ab3f37da47adf", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/f291e5a317c321c0381fa9ecc796fa2d21b186da", + "reference": "f291e5a317c321c0381fa9ecc796fa2d21b186da", "shasum": "" }, "require": { "ext-mbstring": "*", - "php": ">=8.1", - "sebastian/recursion-context": "^5.0" + "php": ">=8.2", + "sebastian/recursion-context": "^6.0" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.1-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -17423,7 +17426,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.2" + "source": "https://github.com/sebastianbergmann/exporter/tree/6.0.1" }, "funding": [ { @@ -17431,35 +17434,35 @@ "type": "github" } ], - "time": "2024-03-02T07:17:12+00:00" + "time": "2024-03-02T07:28:20+00:00" }, { "name": "sebastian/global-state", - "version": "6.0.2", + "version": "7.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9" + "reference": "c3a307e832f2e69c7ef869e31fc644fde0e7cb3e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", - "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/c3a307e832f2e69c7ef869e31fc644fde0e7cb3e", + "reference": "c3a307e832f2e69c7ef869e31fc644fde0e7cb3e", "shasum": "" }, "require": { - "php": ">=8.1", - "sebastian/object-reflector": "^3.0", - "sebastian/recursion-context": "^5.0" + "php": ">=8.2", + "sebastian/object-reflector": "^4.0", + "sebastian/recursion-context": "^6.0" }, "require-dev": { "ext-dom": "*", - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -17485,7 +17488,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", "security": "https://github.com/sebastianbergmann/global-state/security/policy", - "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.2" + "source": "https://github.com/sebastianbergmann/global-state/tree/7.0.1" }, "funding": [ { @@ -17493,33 +17496,33 @@ "type": "github" } ], - "time": "2024-03-02T07:19:19+00:00" + "time": "2024-03-02T07:32:10+00:00" }, { "name": "sebastian/lines-of-code", - "version": "2.0.2", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0" + "reference": "376c5b3f6b43c78fdc049740bca76a7c846706c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0", - "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/376c5b3f6b43c78fdc049740bca76a7c846706c0", + "reference": "376c5b3f6b43c78fdc049740bca76a7c846706c0", "shasum": "" }, "require": { - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=8.1" + "nikic/php-parser": "^5.0", + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -17543,7 +17546,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2" + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/3.0.0" }, "funding": [ { @@ -17551,34 +17554,34 @@ "type": "github" } ], - "time": "2023-12-21T08:38:20+00:00" + "time": "2024-02-02T06:00:36+00:00" }, { "name": "sebastian/object-enumerator", - "version": "5.0.0", + "version": "6.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906" + "reference": "f75f6c460da0bbd9668f43a3dde0ec0ba7faa678" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906", - "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/f75f6c460da0bbd9668f43a3dde0ec0ba7faa678", + "reference": "f75f6c460da0bbd9668f43a3dde0ec0ba7faa678", "shasum": "" }, "require": { - "php": ">=8.1", - "sebastian/object-reflector": "^3.0", - "sebastian/recursion-context": "^5.0" + "php": ">=8.2", + "sebastian/object-reflector": "^4.0", + "sebastian/recursion-context": "^6.0" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -17600,7 +17603,8 @@ "homepage": "https://github.com/sebastianbergmann/object-enumerator/", "support": { "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0" + "security": "https://github.com/sebastianbergmann/object-enumerator/security/policy", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/6.0.0" }, "funding": [ { @@ -17608,32 +17612,32 @@ "type": "github" } ], - "time": "2023-02-03T07:08:32+00:00" + "time": "2024-02-02T06:01:29+00:00" }, { "name": "sebastian/object-reflector", - "version": "3.0.0", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "24ed13d98130f0e7122df55d06c5c4942a577957" + "reference": "bb2a6255d30853425fd38f032eb64ced9f7f132d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957", - "reference": "24ed13d98130f0e7122df55d06c5c4942a577957", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/bb2a6255d30853425fd38f032eb64ced9f7f132d", + "reference": "bb2a6255d30853425fd38f032eb64ced9f7f132d", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -17655,7 +17659,8 @@ "homepage": "https://github.com/sebastianbergmann/object-reflector/", "support": { "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0" + "security": "https://github.com/sebastianbergmann/object-reflector/security/policy", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/4.0.0" }, "funding": [ { @@ -17663,32 +17668,32 @@ "type": "github" } ], - "time": "2023-02-03T07:06:18+00:00" + "time": "2024-02-02T06:02:18+00:00" }, { "name": "sebastian/recursion-context", - "version": "5.0.0", + "version": "6.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "05909fb5bc7df4c52992396d0116aed689f93712" + "reference": "b75224967b5a466925c6d54e68edd0edf8dd4ed4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712", - "reference": "05909fb5bc7df4c52992396d0116aed689f93712", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/b75224967b5a466925c6d54e68edd0edf8dd4ed4", + "reference": "b75224967b5a466925c6d54e68edd0edf8dd4ed4", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -17718,7 +17723,8 @@ "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0" + "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/6.0.0" }, "funding": [ { @@ -17726,32 +17732,32 @@ "type": "github" } ], - "time": "2023-02-03T07:05:40+00:00" + "time": "2024-02-02T06:08:48+00:00" }, { "name": "sebastian/type", - "version": "4.0.0", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "462699a16464c3944eefc02ebdd77882bd3925bf" + "reference": "b8502785eb3523ca0dd4afe9ca62235590020f3f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf", - "reference": "462699a16464c3944eefc02ebdd77882bd3925bf", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b8502785eb3523ca0dd4afe9ca62235590020f3f", + "reference": "b8502785eb3523ca0dd4afe9ca62235590020f3f", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^11.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -17774,7 +17780,8 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/4.0.0" + "security": "https://github.com/sebastianbergmann/type/security/policy", + "source": "https://github.com/sebastianbergmann/type/tree/5.0.0" }, "funding": [ { @@ -17782,29 +17789,29 @@ "type": "github" } ], - "time": "2023-02-03T07:10:45+00:00" + "time": "2024-02-02T06:09:34+00:00" }, { "name": "sebastian/version", - "version": "4.0.1", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17" + "reference": "13999475d2cb1ab33cb73403ba356a814fdbb001" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17", - "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/13999475d2cb1ab33cb73403ba356a814fdbb001", + "reference": "13999475d2cb1ab33cb73403ba356a814fdbb001", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -17827,7 +17834,8 @@ "homepage": "https://github.com/sebastianbergmann/version", "support": { "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/4.0.1" + "security": "https://github.com/sebastianbergmann/version/security/policy", + "source": "https://github.com/sebastianbergmann/version/tree/5.0.0" }, "funding": [ { @@ -17835,7 +17843,7 @@ "type": "github" } ], - "time": "2023-02-07T11:34:05+00:00" + "time": "2024-02-02T06:10:47+00:00" }, { "name": "sebastianfeldmann/camino", From ae647d0c4de1d09fc18b7705a9f791272e3b9abb Mon Sep 17 00:00:00 2001 From: DariusIII Date: Sun, 28 Apr 2024 13:07:05 +0200 Subject: [PATCH 46/47] Fix error in config/database --- config/database.php | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/config/database.php b/config/database.php index fdaebec747..8a7aaedba8 100644 --- a/config/database.php +++ b/config/database.php @@ -67,14 +67,33 @@ ], ], + /* + |-------------------------------------------------------------------------- + | Migration Repository Table + |-------------------------------------------------------------------------- + | + | This table keeps track of all the migrations that have already run for + | your application. Using this information, we can determine which of + | the migrations on disk haven't actually been run on the database. + | + */ + 'migrations' => [ - 'table' => [ - 'table' => 'migrations', - 'update_date_on_publish' => false, // disable to preserve original behavior for existing applications - ], - 'update_date_on_publish' => false, // disable to preserve original behavior for existing applications + 'table' => 'migrations', + 'update_date_on_publish' => true, ], + /* + |-------------------------------------------------------------------------- + | Redis Databases + |-------------------------------------------------------------------------- + | + | Redis is an open source, fast, and advanced key-value store that also + | provides a richer body of commands than a typical key-value system + | such as Memcached. You may define your connection settings here. + | + */ + 'redis' => [ 'client' => env('REDIS_CLIENT', 'phpredis'), 'options' => [ From 2c3b95c1cae753ea5c8449de27ed23027fd4fb81 Mon Sep 17 00:00:00 2001 From: DariusIII Date: Sun, 28 Apr 2024 14:04:39 +0200 Subject: [PATCH 47/47] Fix schema name --- database/schema/{mysql-schema.sql => mariadb-schema.sql} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename database/schema/{mysql-schema.sql => mariadb-schema.sql} (100%) diff --git a/database/schema/mysql-schema.sql b/database/schema/mariadb-schema.sql similarity index 100% rename from database/schema/mysql-schema.sql rename to database/schema/mariadb-schema.sql