diff --git a/.env.example b/.env.example index 9932324f33..ec64fff475 100644 --- a/.env.example +++ b/.env.example @@ -45,14 +45,24 @@ ADMIN_EMAIL= APP_NAME=NNTmux APP_ENV=production APP_DEBUG=false +APP_TIMEZONE=UTC APP_URL= -APP_TZ=Europe/Paris + +APP_LOCALE=en +APP_FALLBACK_LOCALE=en +APP_FAKER_LOCALE=en_US + +APP_MAINTENANCE_DRIVER=file +APP_MAINTENANCE_STORE=database + +BCRYPT_ROUNDS=12 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 @@ -61,10 +71,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 diff --git a/.github/workflows/laravel.yml b/.github/workflows/laravel.yml index cd5784df0b..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 @@ -18,13 +24,13 @@ 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 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 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/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/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/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/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/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; } 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/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 @@ -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/Models/AnidbEpisode.php b/app/Models/AnidbEpisode.php index c3db72a9c2..ed5ace56c2 100644 --- a/app/Models/AnidbEpisode.php +++ b/app/Models/AnidbEpisode.php @@ -3,6 +3,8 @@ namespace App\Models; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\BelongsTo; +use Illuminate\Database\Eloquent\Relations\HasMany; /** * App\Models\AnidbEpisode. @@ -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..90c405aef8 100644 --- a/app/Models/AnidbTitle.php +++ b/app/Models/AnidbTitle.php @@ -3,6 +3,7 @@ namespace App\Models; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\HasMany; /** * App\Models\AnidbTitle. @@ -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..52b771a876 100644 --- a/app/Models/DnzbFailure.php +++ b/app/Models/DnzbFailure.php @@ -3,6 +3,7 @@ namespace App\Models; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\BelongsTo; /** * App\Models\DnzbFailure. @@ -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..52bab2e1e8 100644 --- a/app/Models/Genre.php +++ b/app/Models/Genre.php @@ -3,6 +3,7 @@ namespace App\Models; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\HasMany; /** * App\Models\Genre. @@ -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..6b20212ee9 100644 --- a/app/Models/Invitation.php +++ b/app/Models/Invitation.php @@ -3,6 +3,7 @@ namespace App\Models; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\BelongsTo; /** * App\Models\Invitation. @@ -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..4258612e0c 100644 --- a/app/Models/MusicInfo.php +++ b/app/Models/MusicInfo.php @@ -3,6 +3,7 @@ namespace App\Models; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\BelongsTo; 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..992426552b 100644 --- a/app/Models/Predb.php +++ b/app/Models/Predb.php @@ -7,6 +7,7 @@ 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; @@ -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..9f098b519b 100644 --- a/app/Models/ReleaseNfo.php +++ b/app/Models/ReleaseNfo.php @@ -3,6 +3,7 @@ namespace App\Models; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\BelongsTo; /** * App\Models\ReleaseNfo. @@ -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..ddaef38c80 100644 --- a/app/Models/ReleasesGroups.php +++ b/app/Models/ReleasesGroups.php @@ -21,6 +21,7 @@ namespace App\Models; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\BelongsTo; /** * App\Models\ReleasesGroups. @@ -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..825af6a63b 100644 --- a/app/Models/TvEpisode.php +++ b/app/Models/TvEpisode.php @@ -3,6 +3,7 @@ namespace App\Models; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\BelongsTo; 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/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/app/Models/UsersRelease.php b/app/Models/UsersRelease.php index 1b96e7a387..b84ebebe37 100644 --- a/app/Models/UsersRelease.php +++ b/app/Models/UsersRelease.php @@ -3,6 +3,7 @@ namespace App\Models; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\BelongsTo; /** * App\Models\UsersRelease. @@ -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'); } diff --git a/app/Policies/CategoryPolicy.php b/app/Policies/CategoryPolicy.php index ca4e4723d0..481d07c3cb 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'); + } } diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php deleted file mode 100644 index eb7a524fcb..0000000000 --- a/app/Providers/AuthServiceProvider.php +++ /dev/null @@ -1,24 +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 @@ - [ - SendEmailVerificationNotification::class, - ], - - UserLoggedIn::class => [ - UpdateUserLoggedIn::class, - ], - - UserAccessedApi::class => [ - UpdateUserAccessedApi::class, - ], - ]; - - /** - * Register any events for your application. - */ - public function boot(): void - { - parent::boot(); - - // - } -} 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 @@ +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/bootstrap/app.php b/bootstrap/app.php index 037e17df03..2219604d21 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -1,55 +1,51 @@ 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([ + \Laravel\Tinker\TinkerServiceProvider::class, + \Jrean\UserVerification\UserVerificationServiceProvider::class, + ]) + ->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) { + $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) { + // + })->create(); diff --git a/bootstrap/providers.php b/bootstrap/providers.php new file mode 100644 index 0000000000..37cec77661 --- /dev/null +++ b/bootstrap/providers.php @@ -0,0 +1,10 @@ +=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", @@ -3060,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": { @@ -3116,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": [ { @@ -3128,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", @@ -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", @@ -3930,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" @@ -3969,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", @@ -4013,41 +3819,39 @@ "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", - "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 +3883,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", @@ -5092,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", @@ -5854,42 +5730,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" @@ -5897,8 +5772,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": [ @@ -5957,7 +5832,7 @@ "type": "tidelift" } ], - "time": "2024-01-25T10:35:09+00:00" + "time": "2024-04-18T16:35:06+00:00" }, { "name": "nette/schema", @@ -6167,33 +6042,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 +6076,9 @@ "providers": [ "Termwind\\Laravel\\TermwindServiceProvider" ] + }, + "branch-alias": { + "dev-2.x": "2.x-dev" } }, "autoload": { @@ -6233,7 +6110,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 +6126,7 @@ "type": "github" } ], - "time": "2023-02-08T01:06:31+00:00" + "time": "2024-03-06T16:17:14+00:00" }, { "name": "nyholm/psr7", @@ -8649,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" @@ -8725,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": [ { @@ -8737,7 +8614,7 @@ "type": "tidelift" } ], - "time": "2023-11-08T05:53:05+00:00" + "time": "2024-04-27T21:32:50+00:00" }, { "name": "react/promise", @@ -8813,26 +8690,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 +8740,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 +10070,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 +10133,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 +10141,7 @@ "type": "github" } ], - "time": "2023-01-14T21:10:59+00:00" + "time": "2024-02-05T13:37:25+00:00" }, { "name": "spatie/temporary-directory", @@ -10615,48 +10491,121 @@ "time": "2024-01-23T13:51:25+00:00" }, { - "name": "symfony/console", - "version": "v6.4.6", + "name": "symfony/clock", + "version": "v7.0.5", "source": { "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "a2708a5da5c87d1d0d52937bdeac625df659e11f" + "url": "https://github.com/symfony/clock.git", + "reference": "8b9d08887353d627d5f6c3bf3373b398b49051c2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/a2708a5da5c87d1d0d52937bdeac625df659e11f", - "reference": "a2708a5da5c87d1d0d52937bdeac625df659e11f", + "url": "https://api.github.com/repos/symfony/clock/zipball/8b9d08887353d627d5f6c3bf3373b398b49051c2", + "reference": "8b9d08887353d627d5f6c3bf3373b398b49051c2", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^5.4|^6.0|^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" + "php": ">=8.2", + "psr/clock": "^1.0", + "symfony/polyfill-php83": "^1.28" }, "provide": { - "psr/log-implementation": "1.0|2.0|3.0" + "psr/clock-implementation": "1.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/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" + "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", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "fde915cd8e7eb99b3d531d3d5c09531429c3f9e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/fde915cd8e7eb99b3d531d3d5c09531429c3f9e5", + "reference": "fde915cd8e7eb99b3d531d3d5c09531429c3f9e5", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^6.4|^7.0" + }, + "conflict": { + "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": "^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": "^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 +10639,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 +10655,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 +10791,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 +10815,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 +10846,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 +10862,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 +11085,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 +11129,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 +11145,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 +11319,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 +11376,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 +11392,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 +11488,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 +11504,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 +11568,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 +11584,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 +11609,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 +11652,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 +11668,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 +12520,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 +12561,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 +12577,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 +12824,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 +12885,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 +12901,7 @@ "type": "tidelift" } ], - "time": "2024-03-28T13:28:49+00:00" + "time": "2024-03-28T21:02:11+00:00" }, { "name": "symfony/serializer", @@ -13226,33 +13171,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" @@ -13260,17 +13204,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": { @@ -13301,7 +13245,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": [ { @@ -13317,7 +13261,7 @@ "type": "tidelift" } ], - "time": "2024-02-20T13:16:58+00:00" + "time": "2024-02-22T20:27:20+00:00" }, { "name": "symfony/translation-contracts", @@ -13399,24 +13343,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 +13397,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 +13413,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 +13480,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 +13496,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 +14160,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 +14222,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", @@ -15663,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", @@ -15996,40 +16001,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 +16040,9 @@ "providers": [ "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" ] + }, + "branch-alias": { + "dev-8.x": "8.x-dev" } }, "autoload": { @@ -16088,7 +16094,7 @@ "type": "patreon" } ], - "time": "2023-10-11T15:45:01+00:00" + "time": "2024-03-06T16:20:09+00:00" }, { "name": "phar-io/manifest", @@ -16439,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", @@ -16476,7 +16482,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "10.1-dev" + "dev-main": "11.0-dev" } }, "autoload": { @@ -16505,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": [ { @@ -16513,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": { @@ -16566,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": [ { @@ -16574,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": "*" @@ -16603,7 +16609,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -16629,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": [ { @@ -16637,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": { @@ -16689,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": [ { @@ -16697,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": { @@ -16748,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": [ { @@ -16756,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": { @@ -16782,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" @@ -16809,7 +16816,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "10.5-dev" + "dev-main": "11.1-dev" } }, "autoload": { @@ -16841,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": [ { @@ -16857,7 +16864,7 @@ "type": "tidelift" } ], - "time": "2024-04-24T06:32:35+00:00" + "time": "2024-04-24T06:34:25+00:00" }, { "name": "rector/rector", @@ -16917,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": { @@ -16962,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": [ { @@ -16970,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": { @@ -17018,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": [ { @@ -17026,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": { @@ -17073,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": [ { @@ -17081,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": { @@ -17150,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": [ { @@ -17158,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": { @@ -17208,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": [ { @@ -17216,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": { @@ -17275,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": [ { @@ -17283,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": "*" @@ -17311,7 +17320,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "6.1-dev" + "dev-main": "7.1-dev" } }, "autoload": { @@ -17339,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": [ { @@ -17347,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": { @@ -17417,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": [ { @@ -17425,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": { @@ -17479,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": [ { @@ -17487,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": { @@ -17537,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": [ { @@ -17545,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": { @@ -17594,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": [ { @@ -17602,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": { @@ -17649,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": [ { @@ -17657,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": { @@ -17712,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": [ { @@ -17720,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": { @@ -17768,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": [ { @@ -17776,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": { @@ -17821,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": [ { @@ -17829,7 +17843,7 @@ "type": "github" } ], - "time": "2023-02-07T11:34:05+00:00" + "time": "2024-02-02T06:10:47+00:00" }, { "name": "sebastianfeldmann/camino", @@ -18347,8 +18361,9 @@ "stability-flags": { "anhskohbo/no-captcha": 20, "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, diff --git a/resources/lang/vendor/forum/.gitkeep b/config/.gitkeep similarity index 100% rename from resources/lang/vendor/forum/.gitkeep rename to config/.gitkeep diff --git a/config/app.php b/config/app.php index 59821b34db..d004fa8c51 100644 --- a/config/app.php +++ b/config/app.php @@ -1,224 +1,12 @@ 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'), - - /* - |-------------------------------------------------------------------------- - | 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', +use Illuminate\Support\Facades\Facade; - /* - |-------------------------------------------------------------------------- - | 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' => [ - - /* - * 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... - */ - 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, - - ], - - /* - |-------------------------------------------------------------------------- - | 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' => [ +return [ - '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..8a7aaedba8 100644 --- a/config/database.php +++ b/config/database.php @@ -4,47 +4,10 @@ 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'), + 'url' => env('DB_URL'), 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', 'nntmux'), @@ -63,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'), @@ -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'), @@ -96,6 +47,24 @@ '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, + ]) : [], + ], ], /* @@ -105,11 +74,14 @@ | | 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. + | the migrations on disk haven't actually been run on the database. | */ - 'migrations' => 'migrations', + 'migrations' => [ + 'table' => 'migrations', + 'update_date_on_publish' => true, + ], /* |-------------------------------------------------------------------------- @@ -117,8 +89,8 @@ |-------------------------------------------------------------------------- | | 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. + | provides a richer body of commands than a typical key-value system + | such as Memcached. You may define your connection settings here. | */ 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/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 85% rename from config/forum.integration.php rename to config/forum/integration.php index 9975dd593f..8ed0e73511 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/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/config/hashing.php b/config/hashing.php index 3ed4c3a170..9eb408e09e 100644 --- a/config/hashing.php +++ b/config/hashing.php @@ -1,6 +1,7 @@ env('PASSWORD_HASH', 'argon'), + + 'driver' => env('HASH_DRIVER', 'bcrypt'), + /* |-------------------------------------------------------------------------- | Bcrypt Options @@ -24,9 +27,12 @@ | to control the amount of time it takes to hash the given password. | */ + 'bcrypt' => [ - 'rounds' => env('BCRYPT_ROUNDS', 10), + 'rounds' => env('BCRYPT_ROUNDS', 12), + 'verify' => env('HASH_VERIFY', true), ], + /* |-------------------------------------------------------------------------- | Argon Options @@ -37,9 +43,25 @@ | to control the amount of time it takes to hash the given password. | */ + 'argon' => [ - 'memory' => 1024, - 'threads' => 2, - 'time' => 2, + '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/config/logging.php b/config/logging.php index 865d7310ae..f74a081072 100644 --- a/config/logging.php +++ b/config/logging.php @@ -1,35 +1,6 @@ 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 +9,7 @@ 'channels' => ['daily', 'flare'], 'ignore_exceptions' => false, ], + 'single' => [ 'driver' => 'single', 'path' => storage_path('logs/laravel.log'), @@ -46,6 +18,7 @@ 'permission' => 0775, 'locking' => false, ], + 'daily' => [ 'driver' => 'daily', 'path' => storage_path('logs/laravel.log'), @@ -55,40 +28,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/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'), 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')) - ), - -]; 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..1dc017cb57 100644 --- a/database/factories/ReleaseFactory.php +++ b/database/factories/ReleaseFactory.php @@ -2,25 +2,17 @@ namespace Database\Factories; -use App\Models\Release; use Illuminate\Database\Eloquent\Factories\Factory; class ReleaseFactory extends Factory { - /** - * The name of the factory's corresponding model. - * - * @var string - */ - protected $model = Release::class; - /** * Define the model's default state. */ 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(), 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/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..447d380762 --- /dev/null +++ b/database/migrations/2024_04_27_124202_create_media_infos_table.php @@ -0,0 +1,34 @@ +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'); + } +}; 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 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" 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/lang/en/validation.php b/lang/en/validation.php new file mode 100644 index 0000000000..aea190d40f --- /dev/null +++ b/lang/en/validation.php @@ -0,0 +1,192 @@ + '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' => [ + '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.', + '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.', + '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.', + '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.', + '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 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' => [ + '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.', + ], + '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' => [ + '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.', + '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.', + '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 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 field must match :other.', + 'size' => [ + '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.', + ], + '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.', + '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.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | 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. + | + */ + + 'attributes' => [], + +]; diff --git a/lang/vendor/forum/.gitkeep b/lang/vendor/forum/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 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 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(); } diff --git a/package.json b/package.json index c8229d30fd..562f01085f 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,6 @@ { "private": true, + "type": "module", "scripts": { "dev": "npm run development", "development": "mix", @@ -9,24 +10,33 @@ "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", + "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", - "vue": "^3.4.23", + "tailwindcss": "^3.1.0", + "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 +44,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", + "laravel-vite-plugin": "^1.0", + "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", + "vite": "^5.0", + "vuedraggable": "^2.24.3" } } diff --git a/phpunit.xml b/phpunit.xml index 1e2c9a4490..888fcef4b2 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -14,7 +14,7 @@ - + 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/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()); diff --git a/resources/css/app.css b/resources/css/app.css new file mode 100644 index 0000000000..b5c61c9567 --- /dev/null +++ b/resources/css/app.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; 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 }} + + + + +
    + +
    +
    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'; diff --git a/resources/lang/en/validation.php b/resources/lang/en/validation.php deleted file mode 100644 index b59ca31d6a..0000000000 --- a/resources/lang/en/validation.php +++ /dev/null @@ -1,121 +0,0 @@ - '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.', - '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.', - ], - '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.', - 'distinct' => 'The :attribute field has a duplicate value.', - 'email' => 'The :attribute must be a valid email address.', - 'exists' => 'The selected :attribute is invalid.', - 'file' => 'The :attribute must be a file.', - 'filled' => 'The :attribute field must have a value.', - 'image' => 'The :attribute 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.', - '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.', - ], - 'mimes' => 'The :attribute must be a file of type: :values.', - 'mimetypes' => 'The :attribute 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.', - ], - 'not_in' => 'The selected :attribute is invalid.', - 'numeric' => 'The :attribute must be a number.', - 'present' => 'The :attribute field must be present.', - 'regex' => 'The :attribute format is invalid.', - 'required' => 'The :attribute field is required.', - 'required_if' => 'The :attribute field is required when :other is :value.', - '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_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.', - '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.', - ], - 'string' => 'The :attribute must be a string.', - 'timezone' => 'The :attribute must be a valid zone.', - 'unique' => 'The :attribute has already been taken.', - 'uploaded' => 'The :attribute failed to upload.', - 'url' => 'The :attribute format is invalid.', - - /* - |-------------------------------------------------------------------------- - | Custom Validation Language Lines - |-------------------------------------------------------------------------- - | - | Here you may specify custom validation messages for attributes using the - | convention "attribute.rule" to name the lines. This makes it quick to - | specify a specific custom language line for a given attribute rule. - | - */ - - 'custom' => [ - 'attribute-name' => [ - 'rule-name' => 'custom-message', - ], - ], - - /* - |-------------------------------------------------------------------------- - | 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. - | - */ - - 'attributes' => [], - -]; 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/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..89c7cd5467 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/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/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/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/routes/console.php b/routes/console.php index 0130cb393b..ccc7b20586 100644 --- a/routes/console.php +++ b/routes/console.php @@ -1,6 +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(); +} 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], +}; 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/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']); - } -} 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; + // } diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 0000000000..7bc1aa0d54 --- /dev/null +++ b/vite.config.js @@ -0,0 +1,16 @@ +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/livewire-tailwind/css/forum.css', + 'resources/forum/livewire-tailwind/js/forum.js', + ], + refresh: true, + }), + ], +});