diff --git a/app/Actions/Article/CreateArticleAction.php b/app/Actions/Article/CreateArticleAction.php index 0ef9d5b1..043f81b0 100644 --- a/app/Actions/Article/CreateArticleAction.php +++ b/app/Actions/Article/CreateArticleAction.php @@ -17,7 +17,7 @@ public function execute(CreateArticleData $articleData): Article if ($articleData->published_at) { $articleData->published_at = new Carbon( time: $articleData->published_at, - tz: config('app.timezone') + timezone: config('app.timezone') ); } diff --git a/app/Console/Commands/PostArticleToTwitter.php b/app/Console/Commands/PostArticleToTwitter.php index ba59b28a..00c8062f 100644 --- a/app/Console/Commands/PostArticleToTwitter.php +++ b/app/Console/Commands/PostArticleToTwitter.php @@ -19,8 +19,8 @@ public function handle(AnonymousNotifiable $notifiable): void { if ($article = Article::nextForSharing()) { $notifiable->notify(new PostArticleToTwitterNotification($article)); - + $article->markAsShared(); } } -} \ No newline at end of file +} diff --git a/app/Filament/Resources/ArticleResource.php b/app/Filament/Resources/ArticleResource.php index 2b3c6604..b1e308df 100644 --- a/app/Filament/Resources/ArticleResource.php +++ b/app/Filament/Resources/ArticleResource.php @@ -5,14 +5,15 @@ namespace App\Filament\Resources; use App\Filament\Resources\ArticleResource\Pages; +use App\Gamify\Points\ArticlePublished; use App\Models\Article; use Filament\Resources\Resource; +use Filament\Support\Enums\MaxWidth; use Filament\Tables; use Filament\Tables\Actions\Action; use Filament\Tables\Actions\ActionGroup; use Filament\Tables\Actions\BulkAction; -use Filament\Tables\Columns\TextColumn; -use Filament\Tables\Filters\Filter; +use Filament\Tables\Enums\FiltersLayout; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Collection; @@ -23,26 +24,56 @@ final class ArticleResource extends Resource protected static ?string $navigationIcon = 'heroicon-o-newspaper'; + public static function getNavigationGroup(): ?string + { + return __('Contenu'); + } + public static function table(Table $table): Table { return $table + ->modifyQueryUsing(fn (Builder $query): Builder => $query->latest()) ->columns([ - TextColumn::make('title') + Tables\Columns\SpatieMediaLibraryImageColumn::make('media') + ->collection('media') + ->label('Image'), + Tables\Columns\TextColumn::make('title') ->label('Titre') - ->sortable(), - TextColumn::make('user.name') + ->limit(50) + ->tooltip(function (Tables\Columns\TextColumn $column): ?string { + $state = $column->getState(); + + if (strlen($state) <= $column->getCharacterLimit()) { + return null; + } + + return $state; + }) + ->sortable() + ->searchable(), + Tables\Columns\TextColumn::make('user.name') ->label('Auteur') - ->sortable(), - TextColumn::make('submitted_at') - ->label('Date de soumission') - ->dateTime(), + ->sortable() + ->searchable(), + Tables\Columns\IconColumn::make('published_at') + ->label('Publié') + ->getStateUsing(fn (Article $record) => $record->isPublished()) + ->boolean(), + Tables\Columns\TextColumn::make('submitted_at') + ->label('Soumission') + ->placeholder('N/A') + ->date(), + Tables\Columns\TextColumn::make('approved_at') + ->label('Approbation') + ->placeholder('N/A') + ->date() + ->toggleable(), + Tables\Columns\TextColumn::make('declined_at') + ->label('Décliner') + ->placeholder('N/A') + ->date() + ->toggleable(isToggledHiddenByDefault: true), ]) - ->filters([ - Filter::make('submitted_at')->query(fn (Builder $query) => $query->whereNotNull('submitted_at'))->label('Soumis'), - Filter::make('declined_at')->query(fn (Builder $query) => $query->whereNotNull('declined_at'))->label('Décliner'), - Filter::make('approved_at')->query(fn (Builder $query) => $query->whereNotNull('approved_at'))->label('Approuver'), - ]) - ->actions([ ActionGroup::make([ Action::make('approved') @@ -57,6 +88,8 @@ public static function table(Table $table): Table ->action(function ($record): void { $record->approved_at = now(); $record->save(); + + givePoint(new ArticlePublished($record)); }), Action::make('declined') ->visible(fn (Article $record) => $record->isAwaitingApproval()) @@ -71,22 +104,16 @@ public static function table(Table $table): Table $record->declined_at = now(); $record->save(); }), + Tables\Actions\Action::make('show') + ->icon('untitledui-eye') + ->url(fn (Article $record) => route('articles.show', $record)) + ->openUrlInNewTab() + ->label('Afficher'), Tables\Actions\DeleteAction::make(), ]), ]) ->bulkActions([ Tables\Actions\BulkActionGroup::make([ - BulkAction::make('approved') - ->label('Approuver la sélection') - ->icon('heroicon-s-check') - ->color('success') - ->action(fn (Collection $records) => $records->each->update(['approved_at' => now()])) - ->deselectRecordsAfterCompletion() - ->requiresConfirmation() - ->modalIcon('heroicon-s-check') - ->modalHeading('Approuver') - ->modalDescription('Voulez-vous vraiment approuver ces articles ?') - ->modalSubmitActionLabel('Confirmer'), BulkAction::make('declined') ->label('Décliner la sélection') ->icon('heroicon-s-x-mark') @@ -101,7 +128,20 @@ public static function table(Table $table): Table Tables\Actions\DeleteBulkAction::make(), ]), - ]); + ]) + ->filters([ + Tables\Filters\TernaryFilter::make('submitted_at') + ->label('Soumis') + ->nullable(), + Tables\Filters\TernaryFilter::make('declined_at') + ->label('Décliner') + ->nullable(), + Tables\Filters\TernaryFilter::make('approved_at') + ->label('Approuver') + ->nullable(), + ], layout: FiltersLayout::AboveContentCollapsible) + ->filtersFormColumns(4) + ->filtersFormWidth(MaxWidth::FourExtraLarge); } public static function getPages(): array diff --git a/app/Filament/Resources/ArticleResource/Pages/ListArticles.php b/app/Filament/Resources/ArticleResource/Pages/ListArticles.php index 0d007448..4341d4ed 100644 --- a/app/Filament/Resources/ArticleResource/Pages/ListArticles.php +++ b/app/Filament/Resources/ArticleResource/Pages/ListArticles.php @@ -5,9 +5,16 @@ namespace App\Filament\Resources\ArticleResource\Pages; use App\Filament\Resources\ArticleResource; +use App\Models\Article; +use Closure; use Filament\Resources\Pages\ListRecords; final class ListArticles extends ListRecords { protected static string $resource = ArticleResource::class; + + public function isTableRecordSelectable(): ?Closure + { + return fn (Article $record): bool => $record->isNotPublished(); + } } diff --git a/app/Filament/Resources/ChannelResource.php b/app/Filament/Resources/ChannelResource.php index 8cf56117..9f967ba5 100644 --- a/app/Filament/Resources/ChannelResource.php +++ b/app/Filament/Resources/ChannelResource.php @@ -8,51 +8,57 @@ use App\Models\Channel; use Filament\Forms; use Filament\Forms\Form; +use Filament\Resources\Concerns\Translatable; use Filament\Resources\Resource; -use Filament\Support\Enums\MaxWidth; use Filament\Tables; -use Filament\Tables\Actions\ActionGroup; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; use Illuminate\Support\Str; final class ChannelResource extends Resource { + use Translatable; + protected static ?string $model = Channel::class; - protected static ?string $navigationIcon = 'heroicon-o-queue-list'; + protected static ?string $navigationIcon = 'untitledui-git-branch'; - public static function getLabel(): string + public static function getNavigationGroup(): ?string { - return __('Channels'); + return __('Forum'); } public static function form(Form $form): Form { return $form ->schema([ - Forms\Components\Section::make() - ->schema([ - Forms\Components\TextInput::make('name') - ->required() - ->live(onBlur: true) - ->afterStateUpdated(function (string $operation, $state, Forms\Set $set): void { - $set('slug', Str::slug($state)); - }), - Forms\Components\TextInput::make('slug') - ->readOnly() - ->helperText(__('Cette valeur est générée dynamiquement en fonction du Name.')), - Forms\Components\Select::make('parent_id') - ->relationship('parent', 'name', fn (Builder $query) => $query->whereNull('parent_id')) - ->default(null), - Forms\Components\TextInput::make('color') - ->maxLength(255) - ->type('color'), - Forms\Components\Textarea::make('description.fr') - ->label('Description') - ->columnSpanFull(), - ]) - ->columnSpan(['lg' => 2]), + Forms\Components\TextInput::make('name') + ->required() + ->live(onBlur: true) + ->afterStateUpdated(fn ($state, Forms\Set $set) => $set('slug', Str::slug($state))) + ->columnSpanFull(), + Forms\Components\TextInput::make('slug') + ->readOnly() + ->required() + ->columnSpanFull(), + Forms\Components\Select::make('parent_id') + ->relationship( + name: 'parent', + titleAttribute: 'name', + modifyQueryUsing: fn (Builder $query) => $query->whereNull('parent_id') + ) + ->live() + ->default(null) + ->columnSpanFull(), + Forms\Components\ColorPicker::make('color') + ->label('Couleur') + ->hex() + ->live() + ->columnSpanFull() + ->required(fn (Forms\Get $get): bool => $get('parent_id') === null), + Forms\Components\Textarea::make('description') + ->rows(4) + ->columnSpanFull(), ]); } @@ -61,19 +67,21 @@ public static function table(Table $table): Table return $table ->columns([ Tables\Columns\TextColumn::make('name') - ->searchable(), - Tables\Columns\TextColumn::make('slug') + ->label('Nom') ->searchable(), Tables\Columns\TextColumn::make('parent.name') - ->numeric() + ->label('Parent') + ->placeholder('N/A') ->sortable(), Tables\Columns\TextColumn::make('thread_number') - ->label('Nombre de thead') + ->label('Nombre de sujets') ->getStateUsing(fn ($record) => $record->threads()->count()), - Tables\Columns\TextColumn::make('color') - ->searchable(), + Tables\Columns\ColorColumn::make('color') + ->label('Couleur') + ->placeholder('N/A'), Tables\Columns\TextColumn::make('created_at') - ->dateTime() + ->label('Date') + ->date() ->sortable() ->toggleable(isToggledHiddenByDefault: true), ]) @@ -81,17 +89,12 @@ public static function table(Table $table): Table ]) ->actions([ - ActionGroup::make([ - Tables\Actions\DeleteAction::make(), - Tables\Actions\EditAction::make() - ->slideOver() - ->modalWidth(MaxWidth::Large), - ]), + Tables\Actions\EditAction::make(), + Tables\Actions\DeleteAction::make() + ->iconButton(), ]) ->bulkActions([ - Tables\Actions\BulkActionGroup::make([ - Tables\Actions\DeleteBulkAction::make(), - ]), + Tables\Actions\DeleteBulkAction::make(), ]); } diff --git a/app/Filament/Resources/ChannelResource/Pages/ListChannels.php b/app/Filament/Resources/ChannelResource/Pages/ListChannels.php index 077d704b..7118d2f7 100644 --- a/app/Filament/Resources/ChannelResource/Pages/ListChannels.php +++ b/app/Filament/Resources/ChannelResource/Pages/ListChannels.php @@ -11,11 +11,14 @@ final class ListChannels extends ListRecords { + use ListRecords\Concerns\Translatable; + protected static string $resource = ChannelResource::class; protected function getHeaderActions(): array { return [ + Actions\LocaleSwitcher::make(), Actions\CreateAction::make() ->slideOver() ->modalWidth(MaxWidth::Large), diff --git a/app/Filament/Resources/DiscussionResource.php b/app/Filament/Resources/DiscussionResource.php index eccf6927..99ab6fd0 100644 --- a/app/Filament/Resources/DiscussionResource.php +++ b/app/Filament/Resources/DiscussionResource.php @@ -8,7 +8,6 @@ use App\Models\Discussion; use Filament\Resources\Resource; use Filament\Tables; -use Filament\Tables\Columns\TextColumn; use Filament\Tables\Filters\Filter; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; @@ -17,43 +16,52 @@ final class DiscussionResource extends Resource { protected static ?string $model = Discussion::class; - protected static ?string $navigationIcon = 'heroicon-o-chat-bubble-bottom-center-text'; + protected static ?string $navigationIcon = 'untitledui-message-chat-square'; + + public static function getNavigationGroup(): ?string + { + return __('Contenu'); + } public static function table(Table $table): Table { return $table ->columns([ - TextColumn::make('title') + Tables\Columns\TextColumn::make('title') ->label('Titre') - ->sortable(), - TextColumn::make('locked') + ->limit(50) + ->sortable() + ->searchable(), + Tables\Columns\TextColumn::make('user.name') + ->label('Auteur') + ->sortable() + ->searchable(), + Tables\Columns\TextColumn::make('count_all_replies_with_child') + ->label('Commentaires'), + Tables\Columns\IconColumn::make('locked') ->label('Vérrouillé') - ->getStateUsing(fn ($record) => ($record->locked) ? 'Oui' : 'Non') - ->colors([ - 'success' => 'Oui', - 'danger' => 'Non', - ]) - ->badge(), - TextColumn::make('is_pinned') - ->label('Epinglé') - ->getStateUsing(fn ($record) => ($record->is_pinned) ? 'Oui' : 'Non') - ->colors([ - 'success' => 'Oui', - 'danger' => 'Non', - ]) - ->badge(), - TextColumn::make('created_at') - ->label('Date de création') - ->dateTime(), - TextColumn::make('user.name') - ->label('Auteur'), + ->boolean() + ->trueIcon('untitledui-lock-04') + ->trueColor('warning') + ->falseIcon('untitledui-lock-unlocked-04') + ->falseColor('gray'), + Tables\Columns\TextColumn::make('created_at') + ->label('Date') + ->date(), ]) ->filters([ Filter::make('is_pinned')->query(fn (Builder $query) => $query->where('is_pinned', true))->label('Epinglé'), Filter::make('is_locked')->query(fn (Builder $query) => $query->where('locked', true))->label('Vérrouillé'), ]) ->actions([ - Tables\Actions\DeleteAction::make(), + Tables\Actions\Action::make('show') + ->icon('untitledui-eye') + ->iconButton() + ->color('gray') + ->url(fn (Discussion $record) => route('discussions.show', $record)) + ->openUrlInNewTab(), + Tables\Actions\DeleteAction::make() + ->iconButton(), ]) ->bulkActions([ Tables\Actions\BulkActionGroup::make([ diff --git a/app/Filament/Resources/TagResource.php b/app/Filament/Resources/TagResource.php index 2bb2a12c..a77dc3f4 100644 --- a/app/Filament/Resources/TagResource.php +++ b/app/Filament/Resources/TagResource.php @@ -10,7 +10,6 @@ use Filament\Forms\Components\Select; use Filament\Forms\Form; use Filament\Resources\Resource; -use Filament\Support\Enums\MaxWidth; use Filament\Tables; use Filament\Tables\Table; use Illuminate\Support\Str; @@ -19,7 +18,12 @@ final class TagResource extends Resource { protected static ?string $model = Tag::class; - protected static ?string $navigationIcon = 'heroicon-o-tag'; + protected static ?string $navigationIcon = 'untitledui-tag-03'; + + public static function getNavigationGroup(): ?string + { + return __('Contenu'); + } public static function form(Form $form): Form { @@ -29,22 +33,16 @@ public static function form(Form $form): Form ->live(onBlur: true) ->required() ->unique() - ->validationMessages([ - 'unique' => 'Cette valeur existe déjà', - ]) - ->afterStateUpdated(function (string $operation, $state, Forms\Set $set): void { - $set('slug', Str::slug($state)); - }) + ->afterStateUpdated(fn ($state, Forms\Set $set) => $set('slug', Str::slug($state))) ->columnSpanFull(), Forms\Components\TextInput::make('slug') ->readOnly() ->required() - ->helperText(__('Cette valeur est générée dynamiquement en fonction du Name.')) ->columnSpanFull(), Select::make('concerns') ->multiple() ->options([ - 'post' => 'Post', + 'post' => 'Article', 'tutorial' => 'Tutoriel', 'discussion' => 'Discussion', ]) @@ -61,20 +59,12 @@ public static function table(Table $table): Table ->columns([ Tables\Columns\TextColumn::make('name') ->searchable(), - Tables\Columns\TextColumn::make('slug') - ->searchable(), Tables\Columns\TextColumn::make(name: 'concerns'), ]) - ->filters([ - // - ]) ->actions([ - \Filament\Tables\Actions\ActionGroup::make([ - Tables\Actions\DeleteAction::make(), - Tables\Actions\EditAction::make() - ->slideOver() - ->modalWidth(MaxWidth::Large), - ]), + Tables\Actions\EditAction::make(), + Tables\Actions\DeleteAction::make() + ->iconButton(), ]) ->bulkActions([ Tables\Actions\BulkActionGroup::make([ diff --git a/app/Filament/Resources/UserResource.php b/app/Filament/Resources/UserResource.php index 82db18b7..e2225ead 100644 --- a/app/Filament/Resources/UserResource.php +++ b/app/Filament/Resources/UserResource.php @@ -6,10 +6,10 @@ use App\Filament\Resources\UserResource\Pages; use App\Models\User; +use Awcodes\FilamentBadgeableColumn\Components\Badge; +use Awcodes\FilamentBadgeableColumn\Components\BadgeableColumn; use Filament\Resources\Resource; use Filament\Tables; -use Filament\Tables\Actions\ActionGroup; -use Filament\Tables\Columns\TextColumn; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder; @@ -17,39 +17,58 @@ final class UserResource extends Resource { protected static ?string $model = User::class; - protected static ?string $navigationIcon = 'heroicon-o-user'; + protected static ?string $navigationIcon = 'untitledui-users-02'; + + public static function getNavigationGroup(): ?string + { + return __('Management'); + } public static function table(Table $table): Table { return $table ->modifyQueryUsing(function (Builder $query): void { - $query->withoutRole(['admin', 'moderator']); + $query->whereHas('roles', function (Builder $query): void { + $query->whereNotIn('name', ['admin', 'moderator']); + }) + ->latest(); }) ->columns([ - TextColumn::make('name') - ->label('Nom'), - TextColumn::make('email') - ->label('Email'), - TextColumn::make(name: 'Points') - ->getStateUsing(fn (User $user) => $user->getPoints().' XP') + Tables\Columns\ImageColumn::make('profile_photo_url') + ->label('Avatar') + ->circular(), + BadgeableColumn::make('name') + ->suffixBadges([ + Badge::make('username') + ->label(fn ($record) => "@{$record->username}") + ->color('gray'), + ]) + ->description(fn ($record): ?string => $record->location) + ->searchable() ->sortable(), - TextColumn::make(name: 'created_at') - ->label('Date de création'), - TextColumn::make(name: 'created_at') - ->label('Date de création'), + Tables\Columns\TextColumn::make('email') + ->label('Email') + ->icon('untitledui-inbox') + ->description(fn ($record): ?string => $record->phone_number), + Tables\Columns\TextColumn::make('email_verified_at') + ->label('Validation Email') + ->placeholder('N/A') + ->date(), + Tables\Columns\TextColumn::make(name: 'created_at') + ->label('Inscription') + ->date(), ]) ->filters([ - // + Tables\Filters\TernaryFilter::make('email_verified_at') + ->label('Email Vérifiée') + ->nullable(), ]) ->actions([ - ActionGroup::make([ - Tables\Actions\DeleteAction::make(), - ]), + Tables\Actions\DeleteAction::make() + ->iconButton(), ]) ->bulkActions([ - Tables\Actions\BulkActionGroup::make([ - Tables\Actions\DeleteBulkAction::make(), - ]), + Tables\Actions\DeleteBulkAction::make(), ]); } diff --git a/app/Gamify/Points/AddPhone.php b/app/Gamify/Points/AddPhone.php index b527ed77..badf9ce3 100644 --- a/app/Gamify/Points/AddPhone.php +++ b/app/Gamify/Points/AddPhone.php @@ -4,21 +4,16 @@ namespace App\Gamify\Points; -use App\Models\User; use QCod\Gamify\PointType; final class AddPhone extends PointType { public int $points = 10; + protected string $payee = 'user'; + public function __construct(mixed $subject) { $this->subject = $subject; } - - public function payee(): User - { - // @phpstan-ignore-next-line - return $this->getSubject()->user; - } } diff --git a/app/Gamify/Points/AddSocialLinks.php b/app/Gamify/Points/AddSocialLinks.php index e789fc28..6c496543 100644 --- a/app/Gamify/Points/AddSocialLinks.php +++ b/app/Gamify/Points/AddSocialLinks.php @@ -4,21 +4,16 @@ namespace App\Gamify\Points; -use App\Models\User; use QCod\Gamify\PointType; final class AddSocialLinks extends PointType { public int $points = 15; + protected string $payee = 'user'; + public function __construct(mixed $subject) { $this->subject = $subject; } - - public function payee(): User - { - // @phpstan-ignore-next-line - return $this->getSubject()->user; - } } diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php deleted file mode 100644 index 07ef4dae..00000000 --- a/app/Http/Kernel.php +++ /dev/null @@ -1,52 +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' => [ - \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, - 'throttle:api', - \Illuminate\Routing\Middleware\SubstituteBindings::class, - ], - ]; - - protected $routeMiddleware = [ - 'auth' => Middleware\Authenticate::class, - 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, - 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, - 'can' => \Illuminate\Auth\Middleware\Authorize::class, - 'guest' => Middleware\RedirectIfAuthenticated::class, - 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class, - 'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class, - 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, - 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, - 'role' => \Spatie\Permission\Middlewares\RoleMiddleware::class, - ]; -} diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php deleted file mode 100644 index ba79d4be..00000000 --- a/app/Http/Middleware/Authenticate.php +++ /dev/null @@ -1,19 +0,0 @@ -expectsJson()) { - return route('login'); - } - - return null; - } -} diff --git a/app/Http/Middleware/EncryptCookies.php b/app/Http/Middleware/EncryptCookies.php deleted file mode 100644 index dddc45b4..00000000 --- a/app/Http/Middleware/EncryptCookies.php +++ /dev/null @@ -1,12 +0,0 @@ -environment('production') && ! $request->isSecure()) { - return redirect()->secure($request->getRequestUri()); - } - - return $next($request); - } -} diff --git a/app/Http/Middleware/PreventRequestsDuringMaintenance.php b/app/Http/Middleware/PreventRequestsDuringMaintenance.php deleted file mode 100644 index 3422e264..00000000 --- a/app/Http/Middleware/PreventRequestsDuringMaintenance.php +++ /dev/null @@ -1,12 +0,0 @@ -check()) { - return redirect(RouteServiceProvider::HOME); - } - } - - return $next($request); - } -} diff --git a/app/Http/Middleware/TrimStrings.php b/app/Http/Middleware/TrimStrings.php deleted file mode 100644 index 8157eeaf..00000000 --- a/app/Http/Middleware/TrimStrings.php +++ /dev/null @@ -1,16 +0,0 @@ -allSubdomainsOfApplicationUrl(), - ]; - } -} diff --git a/app/Http/Middleware/TrustProxies.php b/app/Http/Middleware/TrustProxies.php deleted file mode 100644 index 171a1d1e..00000000 --- a/app/Http/Middleware/TrustProxies.php +++ /dev/null @@ -1,20 +0,0 @@ - new UserResource($this->user), 'experience' => $this->user->getPoints(), 'has_replies' => $this->allChildReplies->isNotEmpty(), - // @phpstan-ignore-next-line 'likes_count' => $this->getReactionsSummary()->sum('count'), ]; } diff --git a/app/Http/Resources/UserResource.php b/app/Http/Resources/UserResource.php index 6d74626c..134559a2 100644 --- a/app/Http/Resources/UserResource.php +++ b/app/Http/Resources/UserResource.php @@ -4,11 +4,11 @@ namespace App\Http\Resources; -use App\Models\IdeHelperUser; +use App\Models\User; use Illuminate\Http\Resources\Json\JsonResource; /** - * @mixin IdeHelperUser + * @mixin User */ final class UserResource extends JsonResource { diff --git a/app/Markdown/BaseExtension.php b/app/Markdown/BaseExtension.php new file mode 100644 index 00000000..91877b47 --- /dev/null +++ b/app/Markdown/BaseExtension.php @@ -0,0 +1,192 @@ +getDocument()->walker(); + + while ($event = $walker->next()) { + $node = $event->getNode(); + + // Only look for code nodes, and only process them upon entering. + if (! $this->isCodeNode($node) || ! $event->isEntering()) { + continue; + } + + $block = $this->makeTorchlightBlock($node); + + // Set by hash instead of ID, because we'll be remaking all the + // blocks in the `render` function so the ID will be different, + // but the hash will always remain the same. + static::$torchlightBlocks[$block->hash()] = $block; + } + + // All we need to do is fire the request, which will store + // the results in the cache. In the render function we + // use that cached value. + Torchlight::highlight(static::$torchlightBlocks); + } + + /** + * @param callable $callback + * @return $this + */ + public function useCustomBlockRenderer($callback): self + { + $this->customBlockRenderer = $callback; + + return $this; + } + + public function defaultBlockRenderer(): Closure + { + return function (Block $block) { + $inner = ''; + + // Clones come from multiple themes. + $blocks = $block->clones(); + array_unshift($blocks, $block); + + foreach ($blocks as $block) { + $inner .= "attrsAsString()}class='{$block->classes}' style='{$block->styles}'>{$block->highlighted}"; + } + + return "
$inner
"; + }; + } + + abstract protected function codeNodes(): array; + + abstract protected function getLiteralContent($node): string; + + /** + * Bind into a Commonmark V1 or V2 environment. + */ + protected function bind($environment, string $renderMethod): void + { + // We start by walking the document immediately after it's parsed + // to gather all the code blocks and send off our requests. + $environment->addEventListener(DocumentParsedEvent::class, [$this, 'onDocumentParsed']); + + foreach ($this->codeNodes() as $blockType) { + // After the document is parsed, it's rendered. We register our + // renderers with a higher priority than the default ones, + // and we'll fetch the blocks straight from the cache. + $environment->{$renderMethod}($blockType, $this, 10); + } + } + + protected function isCodeNode($node): bool + { + return in_array(get_class($node), $this->codeNodes()); + } + + protected function makeTorchlightBlock($node): Block + { + return Block::make() + ->language($this->getLanguage($node)) + ->theme($this->getTheme($node)) + ->code($this->getContent($node)); + } + + /** + * @return string + */ + protected function renderNode($node) + { + $hash = $this->makeTorchlightBlock($node)->hash(); + + if (array_key_exists($hash, static::$torchlightBlocks)) { + $renderer = $this->customBlockRenderer ?? $this->defaultBlockRenderer(); + + return call_user_func($renderer, static::$torchlightBlocks[$hash]); + } + } + + protected function getContent($node): string + { + $content = $this->getLiteralContent($node); + + // Check for our file loading convention. + if (! Str::contains($content, '<<<')) { + return $content; + } + + $file = trim(Str::after($content, '<<<')); + + // It must be only one line, because otherwise it might be a heredoc. + if (count(explode("\n", $file)) > 1) { + return $content; + } + + // Blow off the end of comments that require closing tags, e.g. + $file = head(explode(' ', $file)); + + return Torchlight::processFileContents($file) ?: $content; + } + + /** + * @return array|mixed|null + */ + protected function getInfo($node) + { + if (! $this->isCodeNode($node)) { + return []; + } + + if (! is_callable([$node, 'getInfoWords'])) { + return []; + } + + $infoWords = $node->getInfoWords(); + + return empty($infoWords) ? [] : $infoWords; + } + + protected function getLanguage($node): ?string + { + $info = $this->getInfo($node); + + if (empty($info)) { + return null; + } + + $language = $info[0]; + + return $language ? Xml::escape($language, true) : null; + } + + /** + * @return string + */ + protected function getTheme($node) + { + foreach ($this->getInfo($node) as $item) { + if (Str::startsWith($item, 'theme:')) { + return Str::after($item, 'theme:'); + } + } + } +} diff --git a/app/Markdown/Extensions/TorchlightExtension.php b/app/Markdown/Extensions/TorchlightExtension.php new file mode 100644 index 00000000..fc9f77f4 --- /dev/null +++ b/app/Markdown/Extensions/TorchlightExtension.php @@ -0,0 +1,58 @@ +bind($environment, 'addRenderer'); + } + + /** + * This method just proxies to our base class, but the + * signature has to match Commonmark V2. + * + * @return mixed|string|\Stringable|null + */ + public function render(Node $node, ChildNodeRendererInterface $childRenderer) + { + return $this->renderNode($node); + } + + /** + * V2 Code node classes. + * + * @return string[] + */ + protected function codeNodes(): array + { + return [ + FencedCode::class, + IndentedCode::class, + ]; + } + + /** + * Get the string content from a V2 node. + */ + protected function getLiteralContent($node): string + { + return $node->getLiteral(); + } +} diff --git a/app/Models/Builders/DiscussionQueryBuilder.php b/app/Models/Builders/DiscussionQueryBuilder.php new file mode 100644 index 00000000..2e515eb7 --- /dev/null +++ b/app/Models/Builders/DiscussionQueryBuilder.php @@ -0,0 +1,50 @@ +where('is_pinned', true); + } + + public function notPinned(): self + { + return $this->where('is_pinned', false); + } + + public function recent(): self + { + return $this->orderBy('is_pinned', 'desc') + ->orderBy('created_at', 'desc'); + } + + public function popular(): self + { + return $this->withCount('reactions') + ->orderBy('reactions_count', 'desc'); + } + + public function active(): self + { + return $this->withCount(['replies' => function ($query): void { + $query->where('created_at', '>=', now()->subWeek()); + }]) + ->orderBy('replies_count', 'desc'); + } + + public function noComments(): self + { + return $this->whereDoesntHave('replies') + ->orderByDesc('created_at'); + } +} diff --git a/app/Models/Discussion.php b/app/Models/Discussion.php index 47243227..d34914e3 100644 --- a/app/Models/Discussion.php +++ b/app/Models/Discussion.php @@ -7,6 +7,7 @@ use App\Contracts\ReactableInterface; use App\Contracts\ReplyInterface; use App\Contracts\SubscribeInterface; +use App\Models\Builders\DiscussionQueryBuilder; use App\Traits\HasAuthor; use App\Traits\HasReplies; use App\Traits\HasSlug; @@ -17,7 +18,7 @@ use Carbon\Carbon; use CyrildeWit\EloquentViewable\Contracts\Viewable; use CyrildeWit\EloquentViewable\InteractsWithViews; -use Illuminate\Database\Eloquent\Builder; +use Illuminate\Database\Eloquent\Casts\Attribute; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Str; @@ -30,6 +31,7 @@ * @property bool $locked * @property bool $is_pinned * @property int $user_id + * @property-read int $count_all_replies_with_child * @property Carbon $created_at * @property Carbon $updated_at * @property User $user @@ -66,6 +68,11 @@ final class Discussion extends Model implements ReactableInterface, ReplyInterfa protected bool $removeViewsOnDelete = true; + public function newEloquentBuilder($query): DiscussionQueryBuilder + { + return new DiscussionQueryBuilder($query); + } + public function getRouteKeyName(): string { return 'slug'; @@ -83,7 +90,7 @@ public function replyAbleSubject(): string public function getPathUrl(): string { - return "/discussions/{$this->slug()}"; + return route('discussions.show', $this); } public function excerpt(int $limit = 110): string @@ -101,52 +108,20 @@ public function isLocked(): bool return $this->locked; } - public function getCountAllRepliesWithChildAttribute(): int + public function countAllRepliesWithChild(): Attribute { - $count = $this->replies->count(); - - foreach ($this->replies()->withCount('allChildReplies')->get() as $reply) { - /** @var Reply $reply */ - $count += $reply->all_child_replies_count; - } - - return $count; - } + return Attribute::make( + get: function () { + $count = $this->replies->count(); - public function scopePinned(Builder $query): Builder - { - return $query->where('is_pinned', true); - } - - public function scopeNotPinned(Builder $query): Builder - { - return $query->where('is_pinned', false); - } + foreach ($this->replies()->withCount('allChildReplies')->get() as $reply) { + /** @var Reply $reply */ + $count += $reply->all_child_replies_count; + } - public function scopeRecent(Builder $query): Builder - { - return $query->orderBy('is_pinned', 'desc') - ->orderBy('created_at', 'desc'); - } - - public function scopePopular(Builder $query): Builder - { - return $query->withCount('reactions') - ->orderBy('reactions_count', 'desc'); - } - - public function scopeActive(Builder $query): Builder - { - return $query->withCount(['replies' => function ($query): void { - $query->where('created_at', '>=', now()->subWeek()); - }]) - ->orderBy('replies_count', 'desc'); - } - - public function scopeNoComments(Builder $query): Builder - { - return $query->whereDoesntHave('replies') - ->orderByDesc('created_at'); + return $count; + } + ); } public function lockedDiscussion(): void diff --git a/app/Models/User.php b/app/Models/User.php index 23ea1e0c..29c018d4 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -21,12 +21,11 @@ use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Illuminate\Notifications\Notification; +use Illuminate\Support\Carbon; use Illuminate\Support\Facades\Auth; use Laravel\Sanctum\HasApiTokens; use Laravel\Socialite\Contracts\User as SocialUser; use Laravelcm\Subscriptions\Traits\HasPlanSubscriptions; -use LaravelFeature\Featurable\Featurable; -use LaravelFeature\Featurable\FeaturableInterface; use QCod\Gamify\Gamify; use Spatie\MediaLibrary\HasMedia; use Spatie\MediaLibrary\InteractsWithMedia; @@ -37,12 +36,21 @@ * @property string $name * @property string $email * @property string $username - * @property string $bio + * @property string $avatar_type + * @property string $profile_photo_url + * @property string | null $location + * @property string | null $phone_number + * @property string | null $github_profile + * @property string | null $twitter_profile + * @property string | null $linkedin_profile + * @property string | null $bio + * @property string | null $website + * @property Carbon | null $email_verified_at + * @property Carbon | null $last_login_at * @property Collection | Activity[] $activities */ -final class User extends Authenticatable implements FeaturableInterface, FilamentUser, HasAvatar, HasMedia, HasName, MustVerifyEmail +final class User extends Authenticatable implements FilamentUser, HasAvatar, HasMedia, HasName, MustVerifyEmail { - use Featurable; use Gamify; use HasApiTokens; use HasFactory; @@ -73,7 +81,6 @@ final class User extends Authenticatable implements FeaturableInterface, Filamen 'last_login_at', 'last_login_ip', 'email_verified_at', - 'published_at', 'opt_in', ]; diff --git a/app/Policies/ArticlePolicy.php b/app/Policies/ArticlePolicy.php index 9a934aeb..78dd17b5 100644 --- a/app/Policies/ArticlePolicy.php +++ b/app/Policies/ArticlePolicy.php @@ -6,9 +6,12 @@ use App\Models\Article; use App\Models\User; +use Illuminate\Auth\Access\HandlesAuthorization; final class ArticlePolicy { + use HandlesAuthorization; + public function create(User $user): bool { return $user->hasVerifiedEmail(); diff --git a/app/Policies/DiscussionPolicy.php b/app/Policies/DiscussionPolicy.php index 13052df6..fd80b9b3 100644 --- a/app/Policies/DiscussionPolicy.php +++ b/app/Policies/DiscussionPolicy.php @@ -6,9 +6,12 @@ use App\Models\Discussion; use App\Models\User; +use Illuminate\Auth\Access\HandlesAuthorization; final class DiscussionPolicy { + use HandlesAuthorization; + public const UPDATE = 'update'; public const DELETE = 'delete'; diff --git a/app/Policies/NotificationPolicy.php b/app/Policies/NotificationPolicy.php index 31c1a071..fcea43cb 100644 --- a/app/Policies/NotificationPolicy.php +++ b/app/Policies/NotificationPolicy.php @@ -5,10 +5,13 @@ namespace App\Policies; use App\Models\User; +use Illuminate\Auth\Access\HandlesAuthorization; use Illuminate\Notifications\DatabaseNotification; final class NotificationPolicy { + use HandlesAuthorization; + public const MARK_AS_READ = 'markAsRead'; public function markAsRead(User $user, DatabaseNotification $notification): bool diff --git a/app/Policies/ReplyPolicy.php b/app/Policies/ReplyPolicy.php index b7d02fba..fb39f8e8 100644 --- a/app/Policies/ReplyPolicy.php +++ b/app/Policies/ReplyPolicy.php @@ -6,9 +6,12 @@ use App\Models\Reply; use App\Models\User; +use Illuminate\Auth\Access\HandlesAuthorization; final class ReplyPolicy { + use HandlesAuthorization; + public function manage(User $user, Reply $reply): bool { return $reply->isAuthoredBy($user) || $user->isModerator() || $user->isAdmin(); diff --git a/app/Policies/ThreadPolicy.php b/app/Policies/ThreadPolicy.php index 3a0abb7b..41ec9a18 100644 --- a/app/Policies/ThreadPolicy.php +++ b/app/Policies/ThreadPolicy.php @@ -6,9 +6,12 @@ use App\Models\Thread; use App\Models\User; +use Illuminate\Auth\Access\HandlesAuthorization; final class ThreadPolicy { + use HandlesAuthorization; + public function create(User $user): bool { return $user->hasVerifiedEmail(); diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index c05c7f19..749f738e 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -10,16 +10,16 @@ use App\Models\Reply; use App\Models\Thread; use App\Models\User; -use App\View\Composers\AuthUserComposer; -use App\View\Composers\ChannelsComposer; use App\View\Composers\InactiveDiscussionsComposer; -use App\View\Composers\ModeratorsComposer; use App\View\Composers\ProfileUsersComposer; use App\View\Composers\TopContributorsComposer; -use App\View\Composers\TopMembersComposer; use Carbon\Carbon; +use Filament\Support\Enums\MaxWidth; +use Filament\Support\Facades\FilamentIcon; +use Filament\Tables; use Illuminate\Database\Eloquent\Relations\Relation; use Illuminate\Support\Facades\Blade; +use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\View; use Illuminate\Support\ServiceProvider; use Illuminate\Support\Str; @@ -29,18 +29,16 @@ final class AppServiceProvider extends ServiceProvider public function register(): void { $this->registerBladeDirective(); + $this->registerLocaleDate(); } public function boot(): void { - date_default_timezone_set('Africa/Douala'); - setlocale(LC_TIME, 'fr_FR', 'fr', 'FR', 'French', 'fr_FR.UTF-8'); - setlocale(LC_ALL, 'fr_FR', 'fr', 'FR', 'French', 'fr_FR.UTF-8'); - Carbon::setLocale('fr'); - $this->bootMacros(); $this->bootViewsComposer(); $this->bootEloquentMorphs(); + $this->bootFilament(); + $this->bootBindings(); ReplyResource::withoutWrapping(); } @@ -64,13 +62,9 @@ public function bootMacros(): void public function bootViewsComposer(): void { - View::composer('forum._channels', ChannelsComposer::class); - View::composer('forum._top-members', TopMembersComposer::class); - View::composer('forum._moderators', ModeratorsComposer::class); View::composer('discussions._contributions', TopContributorsComposer::class); View::composer('discussions._contributions', InactiveDiscussionsComposer::class); View::composer('components.profile-users', ProfileUsersComposer::class); - View::composer('*', AuthUserComposer::class); } public function bootEloquentMorphs(): void @@ -83,4 +77,44 @@ public function bootEloquentMorphs(): void 'user' => User::class, ]); } + + public function bootFilament(): void + { + FilamentIcon::register([ + 'panels::pages.dashboard.navigation-item' => 'untitledui-home-line', + 'actions::delete-action' => 'untitledui-trash-03', + 'actions::edit-action' => 'untitledui-edit-03', + ]); + + Tables\Actions\CreateAction::configureUsing( + fn (Tables\Actions\Action $action) => $action->iconButton() + ->modalWidth(MaxWidth::ExtraLarge) + ->slideOver() + ); + + Tables\Actions\EditAction::configureUsing( + fn (Tables\Actions\Action $action) => $action->iconButton() + ->modalWidth(MaxWidth::ExtraLarge) + ->slideOver() + ); + + Tables\Actions\DeleteAction::configureUsing(fn (Tables\Actions\Action $action) => $action->icon('untitledui-trash-03')); + } + + public function bootBindings(): void + { + Route::bind( + key: 'username', + binder: fn (string $username): User => User::findByUsername($username) + ); + } + + public function registerLocaleDate(): void + { + date_default_timezone_set('Africa/Douala'); + setlocale(LC_TIME, 'fr_FR', 'fr', 'FR', 'French', 'fr_FR.UTF-8'); + setlocale(LC_ALL, 'fr_FR', 'fr', 'FR', 'French', 'fr_FR.UTF-8'); + + Carbon::setLocale('fr'); + } } diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php deleted file mode 100644 index dd644e31..00000000 --- a/app/Providers/AuthServiceProvider.php +++ /dev/null @@ -1,38 +0,0 @@ - - */ - protected $policies = [ - Article::class => ArticlePolicy::class, - Thread::class => ThreadPolicy::class, - Reply::class => ReplyPolicy::class, - Discussion::class => DiscussionPolicy::class, - Notification::class => NotificationPolicy::class, - ]; - - public function boot(): void - { - $this->registerPolicies(); - } -} diff --git a/app/Providers/BroadcastServiceProvider.php b/app/Providers/BroadcastServiceProvider.php deleted file mode 100644 index 0ff95a6d..00000000 --- a/app/Providers/BroadcastServiceProvider.php +++ /dev/null @@ -1,21 +0,0 @@ -default() ->id('admin') - ->path(env('FILAMENT_PATH', 'admin')) - ->domain(env('FILAMENT_DOMAIN')) + ->path('cp') ->login() ->colors([ 'primary' => Color::Green, ]) - ->darkMode(false) + ->sidebarWidth('18.75rem') + ->viteTheme('resources/css/filament/admin/theme.css') + ->brandLogo(fn () => view('filament.brand')) ->favicon(asset('images/favicons/favicon-32x32.png')) ->discoverResources(in: app_path('Filament/Resources'), for: 'App\\Filament\\Resources') ->discoverPages(in: app_path('Filament/Pages'), for: 'App\\Filament\\Pages') @@ -46,12 +48,17 @@ public function panel(Panel $panel): Panel Widgets\AccountWidget::class, Widgets\FilamentInfoWidget::class, ]) + ->plugins([ + SpatieLaravelTranslatablePlugin::make() + ->defaultLocales(['fr', 'en']), + ]) ->renderHook( 'body.start', fn (): string => Blade::render('@livewire(\'livewire-ui-modal\')'), ) ->databaseNotifications() ->databaseNotificationsPolling('3600s') + ->spa() ->middleware([ EncryptCookies::class, AddQueuedCookiesToResponse::class, diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php deleted file mode 100644 index 1cb83383..00000000 --- a/app/Providers/RouteServiceProvider.php +++ /dev/null @@ -1,60 +0,0 @@ -configureRateLimiting(); - - $this->routeBindings(); - - $this->routes(function (): void { - // Route::prefix('api') - // ->middleware('api') - // ->namespace($this->namespace) - // ->group(base_path('routes/api.php')); - - Route::middleware('web') - ->namespace($this->namespace) - ->group(base_path('routes/web.php')); - }); - - Route::macro('redirectMap', function (array $map, int $status = 302): void { - foreach ($map as $old => $new) { - Route::redirect($old, $new, $status)->name($old); - } - }); - } - - protected function configureRateLimiting(): void - { - RateLimiter::for( - name: 'api', - callback: fn (Request $request): Limit => Limit::perMinute(60) - ->by( - (string) (optional($request->user())->id ?: $request->ip()) - ) - ); - } - - protected function routeBindings(): void - { - Route::bind( - key: 'username', - binder: fn (string $username): User => User::findByUsername($username) - ); - } -} diff --git a/app/Providers/VoltServiceProvider.php b/app/Providers/VoltServiceProvider.php index eed72748..0ea7b716 100644 --- a/app/Providers/VoltServiceProvider.php +++ b/app/Providers/VoltServiceProvider.php @@ -9,8 +9,6 @@ final class VoltServiceProvider extends ServiceProvider { - public function register(): void {} - public function boot(): void { Volt::mount([ diff --git a/app/Rules/PasswordCheck.php b/app/Rules/PasswordCheck.php deleted file mode 100644 index b71a1483..00000000 --- a/app/Rules/PasswordCheck.php +++ /dev/null @@ -1,22 +0,0 @@ -getAuthPassword()); // @phpstan-ignore-line - } - - public function message(): string - { - return __('Votre mot de passe actuel est incorrect.'); - } -} diff --git a/app/Rules/RejectCommonPasswords.php b/app/Rules/RejectCommonPasswords.php deleted file mode 100644 index 37e411af..00000000 --- a/app/Rules/RejectCommonPasswords.php +++ /dev/null @@ -1,38 +0,0 @@ -check()) { - $view->with('authenticate', auth()->user()); - } else { - $view->with('authenticate', null); - } - } -} diff --git a/app/View/Composers/ChannelsComposer.php b/app/View/Composers/ChannelsComposer.php deleted file mode 100644 index c02a7b6a..00000000 --- a/app/View/Composers/ChannelsComposer.php +++ /dev/null @@ -1,24 +0,0 @@ -with( - 'channels', - Cache::remember( - 'channels', - now()->addWeek(), - fn () => Channel::with('items')->whereNull('parent_id')->get() - ) - ); - } -} diff --git a/bootstrap/app.php b/bootstrap/app.php index 08d677b8..c8a3d06e 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -2,56 +2,21 @@ declare(strict_types=1); -/* -|-------------------------------------------------------------------------- -| Create The Application -|-------------------------------------------------------------------------- -| -| The first thing we will do is create a new Laravel application instance -| which serves as the "glue" for all the components of Laravel, and is -| the IoC container for the system binding all of the various parts. -| -*/ - -$app = new Illuminate\Foundation\Application( - $_ENV['APP_BASE_PATH'] ?? dirname(__DIR__) -); - -/* -|-------------------------------------------------------------------------- -| Bind Important Interfaces -|-------------------------------------------------------------------------- -| -| Next, we need to bind some important interfaces into the container so -| we will be able to resolve them when needed. The kernels serve the -| incoming requests to this application from both the web and CLI. -| -*/ - -$app->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__)) + ->withRouting( + web: __DIR__.'/../routes/web.php', + commands: __DIR__.'/../routes/console.php', + health: '/up', + ) + ->withMiddleware(function (Middleware $middleware): void { + $middleware->alias([ + 'role' => \Spatie\Permission\Middleware\RoleMiddleware::class, + ]); + }) + ->withExceptions(function (Exceptions $exceptions): void { + // + })->create(); diff --git a/bootstrap/providers.php b/bootstrap/providers.php new file mode 100644 index 00000000..2f9213d0 --- /dev/null +++ b/bootstrap/providers.php @@ -0,0 +1,10 @@ +=9", - "illuminate/console": ">=9", - "illuminate/container": ">=9", - "illuminate/contracts": ">=9", - "illuminate/routing": ">=9", - "illuminate/support": ">=9", - "illuminate/view": ">=9", - "php": ">=7.4" + "filament/filament": "^3.0", + "php": "^8.1", + "spatie/laravel-package-tools": "^1.15" }, "require-dev": { - "nunomaduro/larastan": "^2.6", - "phpunit/phpunit": "~8.0" + "laravel/pint": "^1.0", + "spatie/laravel-ray": "^1.26" }, "type": "library", "extra": { "laravel": { "providers": [ - "Arrilot\\Widgets\\ServiceProvider" - ], - "aliases": { - "Widget": "Arrilot\\Widgets\\Facade", - "AsyncWidget": "Arrilot\\Widgets\\AsyncFacade" - } + "Awcodes\\FilamentBadgeableColumn\\BadgeableColumnServiceProvider" + ] } }, "autoload": { "psr-4": { - "Arrilot\\Widgets\\": "src/" + "Awcodes\\FilamentBadgeableColumn\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -1102,22 +1093,31 @@ ], "authors": [ { - "name": "Nekrasov Ilya", - "email": "nekrasov.ilya90@gmail.com" + "name": "awcodes", + "email": "awcodes1@gmail.com", + "role": "Developer" } ], - "description": "A powerful alternative to view composers. Asynchronous widgets, reloadable widgets, console generator, caching - everything you can think of.", - "homepage": "https://github.com/arrilot/laravel-widgets", + "description": "Filament Tables column to append and prepend badges.", + "homepage": "https://github.com/awcodes/badger", "keywords": [ - "ajax", - "laravel", - "widgets" + "awcodes", + "badger", + "filament", + "filament-badgeable-column", + "laravel" ], "support": { - "issues": "https://github.com/arrilot/laravel-widgets/issues", - "source": "https://github.com/arrilot/laravel-widgets/tree/3.14.0" + "issues": "https://github.com/awcodes/filament-badgeable-column/issues", + "source": "https://github.com/awcodes/filament-badgeable-column/tree/v2.3.2" }, - "time": "2023-11-19T18:27:27+00:00" + "funding": [ + { + "url": "https://github.com/awcodes", + "type": "github" + } + ], + "time": "2024-03-07T20:37:19+00:00" }, { "name": "blade-ui-kit/blade-heroicons", @@ -1399,32 +1399,39 @@ "time": "2023-12-11T17:09:12+00:00" }, { - "name": "clue/stream-filter", - "version": "v1.7.0", + "name": "composer/ca-bundle", + "version": "1.5.3", "source": { "type": "git", - "url": "https://github.com/clue/stream-filter.git", - "reference": "049509fef80032cb3f051595029ab75b49a3c2f7" + "url": "https://github.com/composer/ca-bundle.git", + "reference": "3b1fc3f0be055baa7c6258b1467849c3e8204eb2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/clue/stream-filter/zipball/049509fef80032cb3f051595029ab75b49a3c2f7", - "reference": "049509fef80032cb3f051595029ab75b49a3c2f7", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/3b1fc3f0be055baa7c6258b1467849c3e8204eb2", + "reference": "3b1fc3f0be055baa7c6258b1467849c3e8204eb2", "shasum": "" }, "require": { - "php": ">=5.3" + "ext-openssl": "*", + "ext-pcre": "*", + "php": "^7.2 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^8 || ^9", + "psr/log": "^1.0 || ^2.0 || ^3.0", + "symfony/process": "^4.0 || ^5.0 || ^6.0 || ^7.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.x-dev" + } + }, "autoload": { - "files": [ - "src/functions_include.php" - ], "psr-4": { - "Clue\\StreamFilter\\": "src/" + "Composer\\CaBundle\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -1433,71 +1440,70 @@ ], "authors": [ { - "name": "Christian Lück", - "email": "christian@clue.engineering" + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" } ], - "description": "A simple and modern approach to stream filtering in PHP", - "homepage": "https://github.com/clue/stream-filter", + "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.", "keywords": [ - "bucket brigade", - "callback", - "filter", - "php_user_filter", - "stream", - "stream_filter_append", - "stream_filter_register" + "cabundle", + "cacert", + "certificate", + "ssl", + "tls" ], "support": { - "issues": "https://github.com/clue/stream-filter/issues", - "source": "https://github.com/clue/stream-filter/tree/v1.7.0" + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/ca-bundle/issues", + "source": "https://github.com/composer/ca-bundle/tree/1.5.3" }, "funding": [ { - "url": "https://clue.engineering/support", + "url": "https://packagist.com", "type": "custom" }, { - "url": "https://github.com/clue", + "url": "https://github.com/composer", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" } ], - "time": "2023-12-20T15:40:13+00:00" + "time": "2024-11-04T10:15:26+00:00" }, { - "name": "composer/ca-bundle", - "version": "1.5.3", + "name": "composer/semver", + "version": "3.4.3", "source": { "type": "git", - "url": "https://github.com/composer/ca-bundle.git", - "reference": "3b1fc3f0be055baa7c6258b1467849c3e8204eb2" + "url": "https://github.com/composer/semver.git", + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/3b1fc3f0be055baa7c6258b1467849c3e8204eb2", - "reference": "3b1fc3f0be055baa7c6258b1467849c3e8204eb2", + "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", "shasum": "" }, "require": { - "ext-openssl": "*", - "ext-pcre": "*", - "php": "^7.2 || ^8.0" + "php": "^5.3.2 || ^7.0 || ^8.0" }, "require-dev": { - "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^8 || ^9", - "psr/log": "^1.0 || ^2.0 || ^3.0", - "symfony/process": "^4.0 || ^5.0 || ^6.0 || ^7.0" + "phpstan/phpstan": "^1.11", + "symfony/phpunit-bridge": "^3 || ^7" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.x-dev" + "dev-main": "3.x-dev" } }, "autoload": { "psr-4": { - "Composer\\CaBundle\\": "src" + "Composer\\Semver\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -1505,24 +1511,33 @@ "MIT" ], "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, { "name": "Jordi Boggiano", "email": "j.boggiano@seld.be", "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" } ], - "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.", + "description": "Semver library that offers utilities, version constraint parsing and validation.", "keywords": [ - "cabundle", - "cacert", - "certificate", - "ssl", - "tls" + "semantic", + "semver", + "validation", + "versioning" ], "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/ca-bundle/issues", - "source": "https://github.com/composer/ca-bundle/tree/1.5.3" + "irc": "ircs://irc.libera.chat:6697/composer", + "issues": "https://github.com/composer/semver/issues", + "source": "https://github.com/composer/semver/tree/3.4.3" }, "funding": [ { @@ -1538,7 +1553,7 @@ "type": "tidelift" } ], - "time": "2024-11-04T10:15:26+00:00" + "time": "2024-09-19T14:15:21+00:00" }, { "name": "cyrildewit/eloquent-viewable", @@ -2800,6 +2815,51 @@ }, "time": "2024-10-23T07:36:33+00:00" }, + { + "name": "filament/spatie-laravel-translatable-plugin", + "version": "v3.2.123", + "source": { + "type": "git", + "url": "https://github.com/filamentphp/spatie-laravel-translatable-plugin.git", + "reference": "b74a67ba94b0b15ffe64de2d387bb363f4596806" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/filamentphp/spatie-laravel-translatable-plugin/zipball/b74a67ba94b0b15ffe64de2d387bb363f4596806", + "reference": "b74a67ba94b0b15ffe64de2d387bb363f4596806", + "shasum": "" + }, + "require": { + "filament/support": "self.version", + "illuminate/support": "^10.45|^11.0", + "php": "^8.1", + "spatie/laravel-translatable": "^6.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Filament\\SpatieLaravelTranslatablePluginServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Filament\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Filament support for `spatie/laravel-translatable`.", + "homepage": "https://github.com/filamentphp/filament", + "support": { + "issues": "https://github.com/filamentphp/filament/issues", + "source": "https://github.com/filamentphp/filament" + }, + "time": "2024-10-16T12:07:42+00:00" + }, { "name": "filament/support", "version": "v3.2.123", @@ -3018,87 +3078,6 @@ }, "time": "2024-05-18T18:05:11+00:00" }, - { - "name": "francescomalatesta/laravel-feature", - "version": "dev-l10-compatibility", - "source": { - "type": "git", - "url": "https://github.com/laravel-shift/laravel-feature.git", - "reference": "3fa6caed6382bdd15ba5f0bddc0c30a67d38e053" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel-shift/laravel-feature/zipball/3fa6caed6382bdd15ba5f0bddc0c30a67d38e053", - "reference": "3fa6caed6382bdd15ba5f0bddc0c30a67d38e053", - "shasum": "" - }, - "require": { - "illuminate/database": "^8.0|^9.0|^10.0", - "illuminate/support": "^8.0|^9.0|^10.0", - "php": "^7.4|^8.1" - }, - "require-dev": { - "mockery/mockery": "^1.0", - "orchestra/database": "^6.0|^7.0", - "orchestra/testbench": "^6.0|^7.0|^8.0", - "phpunit/phpunit": "^8.0|^9.0", - "squizlabs/php_codesniffer": "^3.3" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "LaravelFeature\\Provider\\FeatureServiceProvider" - ], - "aliases": { - "Feature": "LaravelFeature\\Facade\\Feature" - } - } - }, - "autoload": { - "psr-4": { - "LaravelFeature\\": "src" - } - }, - "autoload-dev": { - "psr-4": { - "LaravelFeature\\Tests\\": "tests" - } - }, - "scripts": { - "test": [ - "phpunit" - ], - "check-style": [ - "phpcs -p --standard=PSR2 --runtime-set ignore_errors_on_exit 1 --runtime-set ignore_warnings_on_exit 1 src/Config src/Console src/Domain src/Facade src/Facade src/Featurable src/Model src/Provider src/Service" - ], - "fix-style": [ - "phpcbf -p --standard=PSR2 --runtime-set ignore_errors_on_exit 1 --runtime-set ignore_warnings_on_exit 1 src/Config src/Console src/Domain src/Facade src/Facade src/Featurable src/Model src/Provider src/Service" - ] - }, - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Francesco Malatesta", - "email": "hellofrancesco@gmail.com", - "homepage": "https://github.com/francescomalatesta", - "role": "Developer" - } - ], - "description": "A simple package to manage feature flagging in a Laravel project.", - "homepage": "https://github.com/francescomalatesta/laravel-feature", - "keywords": [ - "feature", - "flag", - "laravel" - ], - "support": { - "source": "https://github.com/laravel-shift/laravel-feature/tree/l10-compatibility" - }, - "time": "2023-02-01T17:27:46+00:00" - }, { "name": "fruitcake/php-cors", "version": "v1.3.0", @@ -3926,38 +3905,29 @@ "time": "2023-12-03T19:50:20+00:00" }, { - "name": "http-interop/http-factory-guzzle", - "version": "1.2.0", + "name": "jaybizzle/crawler-detect", + "version": "v1.2.121", "source": { "type": "git", - "url": "https://github.com/http-interop/http-factory-guzzle.git", - "reference": "8f06e92b95405216b237521cc64c804dd44c4a81" + "url": "https://github.com/JayBizzle/Crawler-Detect.git", + "reference": "40ecda6322d4163fe2c6e1dd47c574f580b8487f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/http-interop/http-factory-guzzle/zipball/8f06e92b95405216b237521cc64c804dd44c4a81", - "reference": "8f06e92b95405216b237521cc64c804dd44c4a81", + "url": "https://api.github.com/repos/JayBizzle/Crawler-Detect/zipball/40ecda6322d4163fe2c6e1dd47c574f580b8487f", + "reference": "40ecda6322d4163fe2c6e1dd47c574f580b8487f", "shasum": "" }, "require": { - "guzzlehttp/psr7": "^1.7||^2.0", - "php": ">=7.3", - "psr/http-factory": "^1.0" - }, - "provide": { - "psr/http-factory-implementation": "^1.0" + "php": ">=5.3.0" }, "require-dev": { - "http-interop/http-factory-tests": "^0.9", - "phpunit/phpunit": "^9.5" - }, - "suggest": { - "guzzlehttp/psr7": "Includes an HTTP factory starting in version 2.0" + "phpunit/phpunit": "^4.8|^5.5|^6.5|^9.4" }, "type": "library", "autoload": { "psr-4": { - "Http\\Factory\\Guzzle\\": "src/" + "Jaybizzle\\CrawlerDetect\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -3966,68 +3936,60 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "name": "Mark Beech", + "email": "m@rkbee.ch", + "role": "Developer" } ], - "description": "An HTTP Factory using Guzzle PSR7", + "description": "CrawlerDetect is a PHP class for detecting bots/crawlers/spiders via the user agent", + "homepage": "https://github.com/JayBizzle/Crawler-Detect/", "keywords": [ - "factory", - "http", - "psr-17", - "psr-7" + "crawler", + "crawler detect", + "crawler detector", + "crawlerdetect", + "php crawler detect" ], "support": { - "issues": "https://github.com/http-interop/http-factory-guzzle/issues", - "source": "https://github.com/http-interop/http-factory-guzzle/tree/1.2.0" + "issues": "https://github.com/JayBizzle/Crawler-Detect/issues", + "source": "https://github.com/JayBizzle/Crawler-Detect/tree/v1.2.121" }, - "time": "2021-07-21T13:50:14+00:00" + "time": "2024-10-20T21:42:39+00:00" }, { - "name": "intervention/image", - "version": "2.7.2", + "name": "jean85/pretty-package-versions", + "version": "2.0.6", "source": { "type": "git", - "url": "https://github.com/Intervention/image.git", - "reference": "04be355f8d6734c826045d02a1079ad658322dad" + "url": "https://github.com/Jean85/pretty-package-versions.git", + "reference": "f9fdd29ad8e6d024f52678b570e5593759b550b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Intervention/image/zipball/04be355f8d6734c826045d02a1079ad658322dad", - "reference": "04be355f8d6734c826045d02a1079ad658322dad", + "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/f9fdd29ad8e6d024f52678b570e5593759b550b4", + "reference": "f9fdd29ad8e6d024f52678b570e5593759b550b4", "shasum": "" }, "require": { - "ext-fileinfo": "*", - "guzzlehttp/psr7": "~1.1 || ^2.0", - "php": ">=5.4.0" + "composer-runtime-api": "^2.0.0", + "php": "^7.1|^8.0" }, "require-dev": { - "mockery/mockery": "~0.9.2", - "phpunit/phpunit": "^4.8 || ^5.7 || ^7.5.15" - }, - "suggest": { - "ext-gd": "to use GD library based image processing.", - "ext-imagick": "to use Imagick based image processing.", - "intervention/imagecache": "Caching extension for the Intervention Image library" + "friendsofphp/php-cs-fixer": "^3.2", + "jean85/composer-provided-replaced-stub-package": "^1.0", + "phpstan/phpstan": "^1.4", + "phpunit/phpunit": "^7.5|^8.5|^9.4", + "vimeo/psalm": "^4.3" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.4-dev" - }, - "laravel": { - "providers": [ - "Intervention\\Image\\ImageServiceProvider" - ], - "aliases": { - "Image": "Intervention\\Image\\Facades\\Image" - } + "dev-master": "1.x-dev" } }, "autoload": { "psr-4": { - "Intervention\\Image\\": "src/Intervention/Image" + "Jean85\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -4036,145 +3998,20 @@ ], "authors": [ { - "name": "Oliver Vogel", - "email": "oliver@intervention.io", - "homepage": "https://intervention.io/" + "name": "Alessandro Lai", + "email": "alessandro.lai85@gmail.com" } ], - "description": "Image handling and manipulation library with support for Laravel integration", - "homepage": "http://image.intervention.io/", + "description": "A library to get pretty versions strings of installed dependencies", "keywords": [ - "gd", - "image", - "imagick", - "laravel", - "thumbnail", - "watermark" + "composer", + "package", + "release", + "versions" ], "support": { - "issues": "https://github.com/Intervention/image/issues", - "source": "https://github.com/Intervention/image/tree/2.7.2" - }, - "funding": [ - { - "url": "https://paypal.me/interventionio", - "type": "custom" - }, - { - "url": "https://github.com/Intervention", - "type": "github" - } - ], - "time": "2022-05-21T17:30:32+00:00" - }, - { - "name": "jaybizzle/crawler-detect", - "version": "v1.2.121", - "source": { - "type": "git", - "url": "https://github.com/JayBizzle/Crawler-Detect.git", - "reference": "40ecda6322d4163fe2c6e1dd47c574f580b8487f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/JayBizzle/Crawler-Detect/zipball/40ecda6322d4163fe2c6e1dd47c574f580b8487f", - "reference": "40ecda6322d4163fe2c6e1dd47c574f580b8487f", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8|^5.5|^6.5|^9.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "Jaybizzle\\CrawlerDetect\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mark Beech", - "email": "m@rkbee.ch", - "role": "Developer" - } - ], - "description": "CrawlerDetect is a PHP class for detecting bots/crawlers/spiders via the user agent", - "homepage": "https://github.com/JayBizzle/Crawler-Detect/", - "keywords": [ - "crawler", - "crawler detect", - "crawler detector", - "crawlerdetect", - "php crawler detect" - ], - "support": { - "issues": "https://github.com/JayBizzle/Crawler-Detect/issues", - "source": "https://github.com/JayBizzle/Crawler-Detect/tree/v1.2.121" - }, - "time": "2024-10-20T21:42:39+00:00" - }, - { - "name": "jean85/pretty-package-versions", - "version": "2.0.6", - "source": { - "type": "git", - "url": "https://github.com/Jean85/pretty-package-versions.git", - "reference": "f9fdd29ad8e6d024f52678b570e5593759b550b4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/f9fdd29ad8e6d024f52678b570e5593759b550b4", - "reference": "f9fdd29ad8e6d024f52678b570e5593759b550b4", - "shasum": "" - }, - "require": { - "composer-runtime-api": "^2.0.0", - "php": "^7.1|^8.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3.2", - "jean85/composer-provided-replaced-stub-package": "^1.0", - "phpstan/phpstan": "^1.4", - "phpunit/phpunit": "^7.5|^8.5|^9.4", - "vimeo/psalm": "^4.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Jean85\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Alessandro Lai", - "email": "alessandro.lai85@gmail.com" - } - ], - "description": "A library to get pretty versions strings of installed dependencies", - "keywords": [ - "composer", - "package", - "release", - "versions" - ], - "support": { - "issues": "https://github.com/Jean85/pretty-package-versions/issues", - "source": "https://github.com/Jean85/pretty-package-versions/tree/2.0.6" + "issues": "https://github.com/Jean85/pretty-package-versions/issues", + "source": "https://github.com/Jean85/pretty-package-versions/tree/2.0.6" }, "time": "2024-03-08T09:58:59+00:00" }, @@ -4424,36 +4261,36 @@ }, { "name": "laravel-notification-channels/telegram", - "version": "4.0.0", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/laravel-notification-channels/telegram.git", - "reference": "c67b312193fcd59c8abad1ee1f5b1f4e5540c201" + "reference": "d647f0ab28c7717ef85c0c843e95f25b1c7dc498" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel-notification-channels/telegram/zipball/c67b312193fcd59c8abad1ee1f5b1f4e5540c201", - "reference": "c67b312193fcd59c8abad1ee1f5b1f4e5540c201", + "url": "https://api.github.com/repos/laravel-notification-channels/telegram/zipball/d647f0ab28c7717ef85c0c843e95f25b1c7dc498", + "reference": "d647f0ab28c7717ef85c0c843e95f25b1c7dc498", "shasum": "" }, "require": { "ext-json": "*", "guzzlehttp/guzzle": "^7.2", - "illuminate/contracts": "^10.0", - "illuminate/notifications": "^10.0", - "illuminate/support": "^10.0", + "illuminate/contracts": "^10 || ^11.0", + "illuminate/notifications": "^10 || ^11.0", + "illuminate/support": "^10 || ^11.0", "php": "^8.1" }, "require-dev": { + "larastan/larastan": "^2.9", "mockery/mockery": "^1.4.4", - "nunomaduro/larastan": "^2.4", - "orchestra/testbench": "^8.0", - "pestphp/pest": "^1.22", - "pestphp/pest-plugin-laravel": "^1.4", + "orchestra/testbench": "^8.0 || ^9.0", + "pestphp/pest": "^2.34", + "pestphp/pest-plugin-laravel": "^2.3", "phpstan/extension-installer": "^1.2", "phpstan/phpstan-deprecation-rules": "^1.1", "phpstan/phpstan-phpunit": "^1.3", - "phpunit/phpunit": "^9.5.10" + "phpunit/phpunit": "^10.5 || ^11.0" }, "type": "library", "extra": { @@ -4491,9 +4328,9 @@ ], "support": { "issues": "https://github.com/laravel-notification-channels/telegram/issues", - "source": "https://github.com/laravel-notification-channels/telegram/tree/4.0.0" + "source": "https://github.com/laravel-notification-channels/telegram/tree/5.0.0" }, - "time": "2023-02-14T18:21:03+00:00" + "time": "2024-03-12T05:47:13+00:00" }, { "name": "laravel-notification-channels/twitter", @@ -4558,16 +4395,16 @@ }, { "name": "laravel/framework", - "version": "v10.48.22", + "version": "v11.30.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "c4ea52bb044faef4a103d7dd81746c01b2ec860e" + "reference": "dff716442d9c229d716be82ccc9a7de52eb97193" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/c4ea52bb044faef4a103d7dd81746c01b2ec860e", - "reference": "c4ea52bb044faef4a103d7dd81746c01b2ec860e", + "url": "https://api.github.com/repos/laravel/framework/zipball/dff716442d9c229d716be82ccc9a7de52eb97193", + "reference": "dff716442d9c229d716be82ccc9a7de52eb97193", "shasum": "" }, "require": { @@ -4583,44 +4420,44 @@ "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|^0.2.0|^0.3.0", "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": { "psr/container-implementation": "1.1|2.0", + "psr/log-implementation": "1.0|2.0|3.0", "psr/simple-cache-implementation": "1.0|2.0|3.0" }, "replace": { @@ -4629,6 +4466,7 @@ "illuminate/bus": "self.version", "illuminate/cache": "self.version", "illuminate/collections": "self.version", + "illuminate/concurrency": "self.version", "illuminate/conditionable": "self.version", "illuminate/config": "self.version", "illuminate/console": "self.version", @@ -4656,36 +4494,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", - "phpstan/phpstan": "^1.4.7", - "phpunit/phpunit": "^10.0.7", + "orchestra/testbench-core": "^9.5", + "pda/pheanstalk": "^5.0", + "phpstan/phpstan": "^1.11.5", + "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.", @@ -4694,34 +4531,34 @@ "ext-pcntl": "Required to use all features of the queue worker and console signal trapping.", "ext-pdo": "Required to use all database features.", "ext-posix": "Required to use all features of the queue worker.", - "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).", + "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0|^6.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": { @@ -4730,6 +4567,8 @@ "src/Illuminate/Events/functions.php", "src/Illuminate/Filesystem/functions.php", "src/Illuminate/Foundation/helpers.php", + "src/Illuminate/Log/functions.php", + "src/Illuminate/Support/functions.php", "src/Illuminate/Support/helpers.php" ], "psr-4": { @@ -4761,25 +4600,25 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2024-09-12T15:00:09+00:00" + "time": "2024-10-30T15:00:34+00:00" }, { "name": "laravel/prompts", - "version": "v0.1.25", + "version": "v0.3.1", "source": { "type": "git", "url": "https://github.com/laravel/prompts.git", - "reference": "7b4029a84c37cb2725fc7f011586e2997040bc95" + "reference": "0f3848a445562dac376b27968f753c65e7e1036e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/prompts/zipball/7b4029a84c37cb2725fc7f011586e2997040bc95", - "reference": "7b4029a84c37cb2725fc7f011586e2997040bc95", + "url": "https://api.github.com/repos/laravel/prompts/zipball/0f3848a445562dac376b27968f753c65e7e1036e", + "reference": "0f3848a445562dac376b27968f753c65e7e1036e", "shasum": "" }, "require": { + "composer-runtime-api": "^2.2", "ext-mbstring": "*", - "illuminate/collections": "^10.0|^11.0", "php": "^8.1", "symfony/console": "^6.2|^7.0" }, @@ -4788,6 +4627,7 @@ "laravel/framework": ">=10.17.0 <10.25.0" }, "require-dev": { + "illuminate/collections": "^10.0|^11.0", "mockery/mockery": "^1.5", "pestphp/pest": "^2.3", "phpstan/phpstan": "^1.11", @@ -4799,7 +4639,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "0.1.x-dev" + "dev-main": "0.3.x-dev" } }, "autoload": { @@ -4817,43 +4657,41 @@ "description": "Add beautiful and user-friendly forms to your command-line applications.", "support": { "issues": "https://github.com/laravel/prompts/issues", - "source": "https://github.com/laravel/prompts/tree/v0.1.25" + "source": "https://github.com/laravel/prompts/tree/v0.3.1" }, - "time": "2024-08-12T22:06:33+00:00" + "time": "2024-10-09T19:42:26+00:00" }, { "name": "laravel/sanctum", - "version": "v3.3.3", + "version": "v4.0.3", "source": { "type": "git", "url": "https://github.com/laravel/sanctum.git", - "reference": "8c104366459739f3ada0e994bcd3e6fd681ce3d5" + "reference": "54aea9d13743ae8a6cdd3c28dbef128a17adecab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sanctum/zipball/8c104366459739f3ada0e994bcd3e6fd681ce3d5", - "reference": "8c104366459739f3ada0e994bcd3e6fd681ce3d5", + "url": "https://api.github.com/repos/laravel/sanctum/zipball/54aea9d13743ae8a6cdd3c28dbef128a17adecab", + "reference": "54aea9d13743ae8a6cdd3c28dbef128a17adecab", "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" @@ -4885,7 +4723,7 @@ "issues": "https://github.com/laravel/sanctum/issues", "source": "https://github.com/laravel/sanctum" }, - "time": "2023-12-19T18:44:48+00:00" + "time": "2024-09-27T14:55:41+00:00" }, { "name": "laravel/serializable-closure", @@ -4948,67 +4786,6 @@ }, "time": "2024-09-23T13:33:08+00:00" }, - { - "name": "laravel/slack-notification-channel", - "version": "v2.5.0", - "source": { - "type": "git", - "url": "https://github.com/laravel/slack-notification-channel.git", - "reference": "e0d4be5e01d443a69fa89f0a4cac6bd2eda2be8f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/slack-notification-channel/zipball/e0d4be5e01d443a69fa89f0a4cac6bd2eda2be8f", - "reference": "e0d4be5e01d443a69fa89f0a4cac6bd2eda2be8f", - "shasum": "" - }, - "require": { - "guzzlehttp/guzzle": "^6.0|^7.0", - "illuminate/notifications": "~5.8.0|^6.0|^7.0|^8.0|^9.0|^10.0", - "php": "^7.1.3|^8.0" - }, - "require-dev": { - "mockery/mockery": "^1.0", - "phpunit/phpunit": "^7.0|^8.0|^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - }, - "laravel": { - "providers": [ - "Illuminate\\Notifications\\SlackChannelServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Illuminate\\Notifications\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "Slack Notification Channel for laravel.", - "keywords": [ - "laravel", - "notifications", - "slack" - ], - "support": { - "issues": "https://github.com/laravel/slack-notification-channel/issues", - "source": "https://github.com/laravel/slack-notification-channel/tree/v2.5.0" - }, - "time": "2023-01-12T16:21:26+00:00" - }, { "name": "laravel/socialite", "version": "v5.16.0", @@ -5699,71 +5476,6 @@ }, "time": "2024-08-09T21:24:39+00:00" }, - { - "name": "league/glide", - "version": "2.3.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/glide.git", - "reference": "2ff92c8f1edc80b74e2d3c5efccfc7223f74d407" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/glide/zipball/2ff92c8f1edc80b74e2d3c5efccfc7223f74d407", - "reference": "2ff92c8f1edc80b74e2d3c5efccfc7223f74d407", - "shasum": "" - }, - "require": { - "intervention/image": "^2.7", - "league/flysystem": "^2.0|^3.0", - "php": "^7.2|^8.0", - "psr/http-message": "^1.0|^2.0" - }, - "require-dev": { - "mockery/mockery": "^1.3.3", - "phpunit/php-token-stream": "^3.1|^4.0", - "phpunit/phpunit": "^8.5|^9.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "League\\Glide\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jonathan Reinink", - "email": "jonathan@reinink.ca", - "homepage": "http://reinink.ca" - }, - { - "name": "Titouan Galopin", - "email": "galopintitouan@gmail.com", - "homepage": "https://titouangalopin.com" - } - ], - "description": "Wonderfully easy on-demand image manipulation library with an HTTP based API.", - "homepage": "http://glide.thephpleague.com", - "keywords": [ - "ImageMagick", - "editing", - "gd", - "image", - "imagick", - "league", - "manipulation", - "processing" - ], - "support": { - "issues": "https://github.com/thephpleague/glide/issues", - "source": "https://github.com/thephpleague/glide/tree/2.3.0" - }, - "time": "2023-07-08T06:26:07+00:00" - }, { "name": "league/mime-type-detection", "version": "1.16.0", @@ -6708,42 +6420,41 @@ }, { "name": "nesbot/carbon", - "version": "2.72.5", + "version": "3.8.2", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "afd46589c216118ecd48ff2b95d77596af1e57ed" + "reference": "e1268cdbc486d97ce23fef2c666dc3c6b6de9947" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/afd46589c216118ecd48ff2b95d77596af1e57ed", - "reference": "afd46589c216118ecd48ff2b95d77596af1e57ed", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/e1268cdbc486d97ce23fef2c666dc3c6b6de9947", + "reference": "e1268cdbc486d97ce23fef2c666dc3c6b6de9947", "shasum": "" }, "require": { - "carbonphp/carbon-doctrine-types": "*", + "carbonphp/carbon-doctrine-types": "<100.0", "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.57.2", + "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.11.2", + "phpunit/phpunit": "^10.5.20", + "squizlabs/php_codesniffer": "^3.9.0" }, "bin": [ "bin/carbon" @@ -6811,7 +6522,7 @@ "type": "tidelift" } ], - "time": "2024-06-03T19:18:41+00:00" + "time": "2024-11-07T17:46:48+00:00" }, { "name": "nette/schema", @@ -7150,32 +6861,31 @@ }, { "name": "nunomaduro/termwind", - "version": "v1.16.0", + "version": "v2.2.0", "source": { "type": "git", "url": "https://github.com/nunomaduro/termwind.git", - "reference": "dcf1ec3dfa36137b7ce41d43866644a7ab8fc257" + "reference": "42c84e4e8090766bbd6445d06cd6e57650626ea3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/dcf1ec3dfa36137b7ce41d43866644a7ab8fc257", - "reference": "dcf1ec3dfa36137b7ce41d43866644a7ab8fc257", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/42c84e4e8090766bbd6445d06cd6e57650626ea3", + "reference": "42c84e4e8090766bbd6445d06cd6e57650626ea3", "shasum": "" }, "require": { "ext-mbstring": "*", - "php": "^8.1", - "symfony/console": "^6.4.12" + "php": "^8.2", + "symfony/console": "^7.1.5" }, "require-dev": { - "illuminate/console": "^10.48.22", - "illuminate/support": "^10.48.22", + "illuminate/console": "^11.28.0", "laravel/pint": "^1.18.1", - "pestphp/pest": "^2", - "pestphp/pest-plugin-mock": "2.0.0", + "mockery/mockery": "^1.6.12", + "pestphp/pest": "^2.36.0", "phpstan/phpstan": "^1.12.6", "phpstan/phpstan-strict-rules": "^1.6.1", - "symfony/var-dumper": "^6.4.11", + "symfony/var-dumper": "^7.1.5", "thecodingmachine/phpstan-strict-rules": "^1.0.0" }, "type": "library", @@ -7184,6 +6894,9 @@ "providers": [ "Termwind\\Laravel\\TermwindServiceProvider" ] + }, + "branch-alias": { + "dev-2.x": "2.x-dev" } }, "autoload": { @@ -7215,7 +6928,7 @@ ], "support": { "issues": "https://github.com/nunomaduro/termwind/issues", - "source": "https://github.com/nunomaduro/termwind/tree/v1.16.0" + "source": "https://github.com/nunomaduro/termwind/tree/v2.2.0" }, "funding": [ { @@ -7231,7 +6944,7 @@ "type": "github" } ], - "time": "2024-10-15T15:27:12+00:00" + "time": "2024-10-15T16:15:16+00:00" }, { "name": "nyholm/psr7", @@ -7380,448 +7093,55 @@ "ods", "office", "open", - "php", - "read", - "scale", - "spreadsheet", - "stream", - "write", - "xlsx" - ], - "support": { - "issues": "https://github.com/openspout/openspout/issues", - "source": "https://github.com/openspout/openspout/tree/v4.26.0" - }, - "funding": [ - { - "url": "https://paypal.me/filippotessarotto", - "type": "custom" - }, - { - "url": "https://github.com/Slamdunk", - "type": "github" - } - ], - "time": "2024-09-24T14:04:43+00:00" - }, - { - "name": "paragonie/constant_time_encoding", - "version": "v3.0.0", - "source": { - "type": "git", - "url": "https://github.com/paragonie/constant_time_encoding.git", - "reference": "df1e7fde177501eee2037dd159cf04f5f301a512" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/df1e7fde177501eee2037dd159cf04f5f301a512", - "reference": "df1e7fde177501eee2037dd159cf04f5f301a512", - "shasum": "" - }, - "require": { - "php": "^8" - }, - "require-dev": { - "phpunit/phpunit": "^9", - "vimeo/psalm": "^4|^5" - }, - "type": "library", - "autoload": { - "psr-4": { - "ParagonIE\\ConstantTime\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com", - "homepage": "https://paragonie.com", - "role": "Maintainer" - }, - { - "name": "Steve 'Sc00bz' Thomas", - "email": "steve@tobtu.com", - "homepage": "https://www.tobtu.com", - "role": "Original Developer" - } - ], - "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)", - "keywords": [ - "base16", - "base32", - "base32_decode", - "base32_encode", - "base64", - "base64_decode", - "base64_encode", - "bin2hex", - "encoding", - "hex", - "hex2bin", - "rfc4648" - ], - "support": { - "email": "info@paragonie.com", - "issues": "https://github.com/paragonie/constant_time_encoding/issues", - "source": "https://github.com/paragonie/constant_time_encoding" - }, - "time": "2024-05-08T12:36:18+00:00" - }, - { - "name": "paragonie/random_compat", - "version": "v9.99.100", - "source": { - "type": "git", - "url": "https://github.com/paragonie/random_compat.git", - "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a", - "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a", - "shasum": "" - }, - "require": { - "php": ">= 7" - }, - "require-dev": { - "phpunit/phpunit": "4.*|5.*", - "vimeo/psalm": "^1" - }, - "suggest": { - "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." - }, - "type": "library", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com", - "homepage": "https://paragonie.com" - } - ], - "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", - "keywords": [ - "csprng", - "polyfill", - "pseudorandom", - "random" - ], - "support": { - "email": "info@paragonie.com", - "issues": "https://github.com/paragonie/random_compat/issues", - "source": "https://github.com/paragonie/random_compat" - }, - "time": "2020-10-15T08:29:30+00:00" - }, - { - "name": "php-http/client-common", - "version": "2.7.2", - "source": { - "type": "git", - "url": "https://github.com/php-http/client-common.git", - "reference": "0cfe9858ab9d3b213041b947c881d5b19ceeca46" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/client-common/zipball/0cfe9858ab9d3b213041b947c881d5b19ceeca46", - "reference": "0cfe9858ab9d3b213041b947c881d5b19ceeca46", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0", - "php-http/httplug": "^2.0", - "php-http/message": "^1.6", - "psr/http-client": "^1.0", - "psr/http-factory": "^1.0", - "psr/http-message": "^1.0 || ^2.0", - "symfony/options-resolver": "~4.0.15 || ~4.1.9 || ^4.2.1 || ^5.0 || ^6.0 || ^7.0", - "symfony/polyfill-php80": "^1.17" - }, - "require-dev": { - "doctrine/instantiator": "^1.1", - "guzzlehttp/psr7": "^1.4", - "nyholm/psr7": "^1.2", - "phpspec/phpspec": "^5.1 || ^6.3 || ^7.1", - "phpspec/prophecy": "^1.10.2", - "phpunit/phpunit": "^7.5.20 || ^8.5.33 || ^9.6.7" - }, - "suggest": { - "ext-json": "To detect JSON responses with the ContentTypePlugin", - "ext-libxml": "To detect XML responses with the ContentTypePlugin", - "php-http/cache-plugin": "PSR-6 Cache plugin", - "php-http/logger-plugin": "PSR-3 Logger plugin", - "php-http/stopwatch-plugin": "Symfony Stopwatch plugin" - }, - "type": "library", - "autoload": { - "psr-4": { - "Http\\Client\\Common\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" - } - ], - "description": "Common HTTP Client implementations and tools for HTTPlug", - "homepage": "http://httplug.io", - "keywords": [ - "client", - "common", - "http", - "httplug" - ], - "support": { - "issues": "https://github.com/php-http/client-common/issues", - "source": "https://github.com/php-http/client-common/tree/2.7.2" - }, - "time": "2024-09-24T06:21:48+00:00" - }, - { - "name": "php-http/discovery", - "version": "1.20.0", - "source": { - "type": "git", - "url": "https://github.com/php-http/discovery.git", - "reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/discovery/zipball/82fe4c73ef3363caed49ff8dd1539ba06044910d", - "reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.0|^2.0", - "php": "^7.1 || ^8.0" - }, - "conflict": { - "nyholm/psr7": "<1.0", - "zendframework/zend-diactoros": "*" - }, - "provide": { - "php-http/async-client-implementation": "*", - "php-http/client-implementation": "*", - "psr/http-client-implementation": "*", - "psr/http-factory-implementation": "*", - "psr/http-message-implementation": "*" - }, - "require-dev": { - "composer/composer": "^1.0.2|^2.0", - "graham-campbell/phpspec-skip-example-extension": "^5.0", - "php-http/httplug": "^1.0 || ^2.0", - "php-http/message-factory": "^1.0", - "phpspec/phpspec": "^5.1 || ^6.1 || ^7.3", - "sebastian/comparator": "^3.0.5 || ^4.0.8", - "symfony/phpunit-bridge": "^6.4.4 || ^7.0.1" - }, - "type": "composer-plugin", - "extra": { - "class": "Http\\Discovery\\Composer\\Plugin", - "plugin-optional": true - }, - "autoload": { - "psr-4": { - "Http\\Discovery\\": "src/" - }, - "exclude-from-classmap": [ - "src/Composer/Plugin.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" - } - ], - "description": "Finds and installs PSR-7, PSR-17, PSR-18 and HTTPlug implementations", - "homepage": "http://php-http.org", - "keywords": [ - "adapter", - "client", - "discovery", - "factory", - "http", - "message", - "psr17", - "psr7" - ], - "support": { - "issues": "https://github.com/php-http/discovery/issues", - "source": "https://github.com/php-http/discovery/tree/1.20.0" - }, - "time": "2024-10-02T11:20:13+00:00" - }, - { - "name": "php-http/httplug", - "version": "2.4.1", - "source": { - "type": "git", - "url": "https://github.com/php-http/httplug.git", - "reference": "5cad731844891a4c282f3f3e1b582c46839d22f4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/httplug/zipball/5cad731844891a4c282f3f3e1b582c46839d22f4", - "reference": "5cad731844891a4c282f3f3e1b582c46839d22f4", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0", - "php-http/promise": "^1.1", - "psr/http-client": "^1.0", - "psr/http-message": "^1.0 || ^2.0" - }, - "require-dev": { - "friends-of-phpspec/phpspec-code-coverage": "^4.1 || ^5.0 || ^6.0", - "phpspec/phpspec": "^5.1 || ^6.0 || ^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Http\\Client\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Eric GELOEN", - "email": "geloen.eric@gmail.com" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://sagikazarmark.hu" - } - ], - "description": "HTTPlug, the HTTP client abstraction for PHP", - "homepage": "http://httplug.io", - "keywords": [ - "client", - "http" - ], - "support": { - "issues": "https://github.com/php-http/httplug/issues", - "source": "https://github.com/php-http/httplug/tree/2.4.1" - }, - "time": "2024-09-23T11:39:58+00:00" - }, - { - "name": "php-http/message", - "version": "1.16.2", - "source": { - "type": "git", - "url": "https://github.com/php-http/message.git", - "reference": "06dd5e8562f84e641bf929bfe699ee0f5ce8080a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/message/zipball/06dd5e8562f84e641bf929bfe699ee0f5ce8080a", - "reference": "06dd5e8562f84e641bf929bfe699ee0f5ce8080a", - "shasum": "" - }, - "require": { - "clue/stream-filter": "^1.5", - "php": "^7.2 || ^8.0", - "psr/http-message": "^1.1 || ^2.0" - }, - "provide": { - "php-http/message-factory-implementation": "1.0" - }, - "require-dev": { - "ergebnis/composer-normalize": "^2.6", - "ext-zlib": "*", - "guzzlehttp/psr7": "^1.0 || ^2.0", - "laminas/laminas-diactoros": "^2.0 || ^3.0", - "php-http/message-factory": "^1.0.2", - "phpspec/phpspec": "^5.1 || ^6.3 || ^7.1", - "slim/slim": "^3.0" - }, - "suggest": { - "ext-zlib": "Used with compressor/decompressor streams", - "guzzlehttp/psr7": "Used with Guzzle PSR-7 Factories", - "laminas/laminas-diactoros": "Used with Diactoros Factories", - "slim/slim": "Used with Slim Framework PSR-7 implementation" - }, - "type": "library", - "autoload": { - "files": [ - "src/filters.php" - ], - "psr-4": { - "Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" - } - ], - "description": "HTTP Message related tools", - "homepage": "http://php-http.org", - "keywords": [ - "http", - "message", - "psr-7" + "php", + "read", + "scale", + "spreadsheet", + "stream", + "write", + "xlsx" ], "support": { - "issues": "https://github.com/php-http/message/issues", - "source": "https://github.com/php-http/message/tree/1.16.2" + "issues": "https://github.com/openspout/openspout/issues", + "source": "https://github.com/openspout/openspout/tree/v4.26.0" }, - "time": "2024-10-02T11:34:13+00:00" + "funding": [ + { + "url": "https://paypal.me/filippotessarotto", + "type": "custom" + }, + { + "url": "https://github.com/Slamdunk", + "type": "github" + } + ], + "time": "2024-09-24T14:04:43+00:00" }, { - "name": "php-http/message-factory", - "version": "1.1.0", + "name": "paragonie/constant_time_encoding", + "version": "v3.0.0", "source": { "type": "git", - "url": "https://github.com/php-http/message-factory.git", - "reference": "4d8778e1c7d405cbb471574821c1ff5b68cc8f57" + "url": "https://github.com/paragonie/constant_time_encoding.git", + "reference": "df1e7fde177501eee2037dd159cf04f5f301a512" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/message-factory/zipball/4d8778e1c7d405cbb471574821c1ff5b68cc8f57", - "reference": "4d8778e1c7d405cbb471574821c1ff5b68cc8f57", + "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/df1e7fde177501eee2037dd159cf04f5f301a512", + "reference": "df1e7fde177501eee2037dd159cf04f5f301a512", "shasum": "" }, "require": { - "php": ">=5.4", - "psr/http-message": "^1.0 || ^2.0" + "php": "^8" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } + "require-dev": { + "phpunit/phpunit": "^9", + "vimeo/psalm": "^4|^5" }, + "type": "library", "autoload": { "psr-4": { - "Http\\Message\\": "src/" + "ParagonIE\\ConstantTime\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -7830,77 +7150,89 @@ ], "authors": [ { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com", + "role": "Maintainer" + }, + { + "name": "Steve 'Sc00bz' Thomas", + "email": "steve@tobtu.com", + "homepage": "https://www.tobtu.com", + "role": "Original Developer" } ], - "description": "Factory interfaces for PSR-7 HTTP Message", - "homepage": "http://php-http.org", + "description": "Constant-time Implementations of RFC 4648 Encoding (Base-64, Base-32, Base-16)", "keywords": [ - "factory", - "http", - "message", - "stream", - "uri" + "base16", + "base32", + "base32_decode", + "base32_encode", + "base64", + "base64_decode", + "base64_encode", + "bin2hex", + "encoding", + "hex", + "hex2bin", + "rfc4648" ], "support": { - "issues": "https://github.com/php-http/message-factory/issues", - "source": "https://github.com/php-http/message-factory/tree/1.1.0" + "email": "info@paragonie.com", + "issues": "https://github.com/paragonie/constant_time_encoding/issues", + "source": "https://github.com/paragonie/constant_time_encoding" }, - "abandoned": "psr/http-factory", - "time": "2023-04-14T14:16:17+00:00" + "time": "2024-05-08T12:36:18+00:00" }, { - "name": "php-http/promise", - "version": "1.3.1", + "name": "paragonie/random_compat", + "version": "v9.99.100", "source": { "type": "git", - "url": "https://github.com/php-http/promise.git", - "reference": "fc85b1fba37c169a69a07ef0d5a8075770cc1f83" + "url": "https://github.com/paragonie/random_compat.git", + "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/promise/zipball/fc85b1fba37c169a69a07ef0d5a8075770cc1f83", - "reference": "fc85b1fba37c169a69a07ef0d5a8075770cc1f83", + "url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a", + "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": ">= 7" }, "require-dev": { - "friends-of-phpspec/phpspec-code-coverage": "^4.3.2 || ^6.3", - "phpspec/phpspec": "^5.1.2 || ^6.2 || ^7.4" + "phpunit/phpunit": "4.*|5.*", + "vimeo/psalm": "^1" }, - "type": "library", - "autoload": { - "psr-4": { - "Http\\Promise\\": "src/" - } + "suggest": { + "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." }, + "type": "library", "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ { - "name": "Joel Wurtz", - "email": "joel.wurtz@gmail.com" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" + "name": "Paragon Initiative Enterprises", + "email": "security@paragonie.com", + "homepage": "https://paragonie.com" } ], - "description": "Promise used for asynchronous HTTP requests", - "homepage": "http://httplug.io", + "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", "keywords": [ - "promise" + "csprng", + "polyfill", + "pseudorandom", + "random" ], "support": { - "issues": "https://github.com/php-http/promise/issues", - "source": "https://github.com/php-http/promise/tree/1.3.1" + "email": "info@paragonie.com", + "issues": "https://github.com/paragonie/random_compat/issues", + "source": "https://github.com/paragonie/random_compat" }, - "time": "2024-03-15T13:55:21+00:00" + "time": "2020-10-15T08:29:30+00:00" }, { "name": "phpdocumentor/reflection", @@ -8088,23 +7420,23 @@ }, { "name": "phpdocumentor/type-resolver", - "version": "1.9.0", + "version": "1.10.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "1fb5ba8d045f5dd984ebded5b1cc66f29459422d" + "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/1fb5ba8d045f5dd984ebded5b1cc66f29459422d", - "reference": "1fb5ba8d045f5dd984ebded5b1cc66f29459422d", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/679e3ce485b99e84c775d28e2e96fade9a7fb50a", + "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a", "shasum": "" }, "require": { "doctrine/deprecations": "^1.0", "php": "^7.3 || ^8.0", "phpdocumentor/reflection-common": "^2.0", - "phpstan/phpdoc-parser": "^1.18" + "phpstan/phpdoc-parser": "^1.18|^2.0" }, "require-dev": { "ext-tokenizer": "*", @@ -8140,9 +7472,9 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.9.0" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.10.0" }, - "time": "2024-11-03T20:11:34+00:00" + "time": "2024-11-09T15:12:26+00:00" }, { "name": "phpoption/phpoption", @@ -9362,112 +8694,42 @@ ], "time": "2024-02-26T18:08:49+00:00" }, - { - "name": "sentry/sdk", - "version": "3.6.0", - "source": { - "type": "git", - "url": "https://github.com/getsentry/sentry-php-sdk.git", - "reference": "24c235ff2027401cbea099bf88689e1a1f197c7a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/getsentry/sentry-php-sdk/zipball/24c235ff2027401cbea099bf88689e1a1f197c7a", - "reference": "24c235ff2027401cbea099bf88689e1a1f197c7a", - "shasum": "" - }, - "require": { - "http-interop/http-factory-guzzle": "^1.0", - "sentry/sentry": "^3.22", - "symfony/http-client": "^4.3|^5.0|^6.0|^7.0" - }, - "type": "metapackage", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Sentry", - "email": "accounts@sentry.io" - } - ], - "description": "This is a metapackage shipping sentry/sentry with a recommended HTTP client.", - "homepage": "http://sentry.io", - "keywords": [ - "crash-reporting", - "crash-reports", - "error-handler", - "error-monitoring", - "log", - "logging", - "sentry" - ], - "support": { - "issues": "https://github.com/getsentry/sentry-php-sdk/issues", - "source": "https://github.com/getsentry/sentry-php-sdk/tree/3.6.0" - }, - "funding": [ - { - "url": "https://sentry.io/", - "type": "custom" - }, - { - "url": "https://sentry.io/pricing/", - "type": "custom" - } - ], - "time": "2023-12-04T10:49:33+00:00" - }, { "name": "sentry/sentry", - "version": "3.22.1", + "version": "4.10.0", "source": { "type": "git", "url": "https://github.com/getsentry/sentry-php.git", - "reference": "8859631ba5ab15bc1af420b0eeed19ecc6c9d81d" + "reference": "2af937d47d8aadb8dab0b1d7b9557e495dd12856" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/8859631ba5ab15bc1af420b0eeed19ecc6c9d81d", - "reference": "8859631ba5ab15bc1af420b0eeed19ecc6c9d81d", + "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/2af937d47d8aadb8dab0b1d7b9557e495dd12856", + "reference": "2af937d47d8aadb8dab0b1d7b9557e495dd12856", "shasum": "" }, "require": { + "ext-curl": "*", "ext-json": "*", "ext-mbstring": "*", - "guzzlehttp/promises": "^1.5.3|^2.0", + "guzzlehttp/psr7": "^1.8.4|^2.1.1", "jean85/pretty-package-versions": "^1.5|^2.0.4", "php": "^7.2|^8.0", - "php-http/async-client-implementation": "^1.0", - "php-http/client-common": "^1.5|^2.0", - "php-http/discovery": "^1.15", - "php-http/httplug": "^1.1|^2.0", - "php-http/message": "^1.5", - "php-http/message-factory": "^1.1", - "psr/http-factory": "^1.0", - "psr/http-factory-implementation": "^1.0", "psr/log": "^1.0|^2.0|^3.0", - "symfony/options-resolver": "^3.4.43|^4.4.30|^5.0.11|^6.0|^7.0", - "symfony/polyfill-php80": "^1.17" + "symfony/options-resolver": "^4.4.30|^5.0.11|^6.0|^7.0" }, "conflict": { - "php-http/client-common": "1.8.0", "raven/raven": "*" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^2.19|3.4.*", + "friendsofphp/php-cs-fixer": "^3.4", + "guzzlehttp/promises": "^2.0.3", "guzzlehttp/psr7": "^1.8.4|^2.1.1", - "http-interop/http-factory-guzzle": "^1.0", "monolog/monolog": "^1.6|^2.0|^3.0", - "nikic/php-parser": "^4.10.3", - "php-http/mock-client": "^1.3", "phpbench/phpbench": "^1.0", - "phpstan/extension-installer": "^1.0", "phpstan/phpstan": "^1.3", - "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^8.5.14|^9.4", - "symfony/phpunit-bridge": "^5.2|^6.0", + "phpunit/phpunit": "^8.5|^9.6", + "symfony/phpunit-bridge": "^5.2|^6.0|^7.0", "vimeo/psalm": "^4.17" }, "suggest": { @@ -9492,7 +8754,7 @@ "email": "accounts@sentry.io" } ], - "description": "A PHP SDK for Sentry (http://sentry.io)", + "description": "PHP SDK for Sentry (http://sentry.io)", "homepage": "http://sentry.io", "keywords": [ "crash-reporting", @@ -9501,11 +8763,13 @@ "error-monitoring", "log", "logging", - "sentry" + "profiling", + "sentry", + "tracing" ], "support": { "issues": "https://github.com/getsentry/sentry-php/issues", - "source": "https://github.com/getsentry/sentry-php/tree/3.22.1" + "source": "https://github.com/getsentry/sentry-php/tree/4.10.0" }, "funding": [ { @@ -9517,47 +8781,42 @@ "type": "custom" } ], - "time": "2023-11-13T11:47:28+00:00" + "time": "2024-11-06T07:44:19+00:00" }, { "name": "sentry/sentry-laravel", - "version": "3.8.2", + "version": "4.10.0", "source": { "type": "git", "url": "https://github.com/getsentry/sentry-laravel.git", - "reference": "1293e5732f8405e12f000cdf5dee78c927a18de0" + "reference": "cbdd224cc5a224528bf6b19507ad76187b3bccfa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/getsentry/sentry-laravel/zipball/1293e5732f8405e12f000cdf5dee78c927a18de0", - "reference": "1293e5732f8405e12f000cdf5dee78c927a18de0", + "url": "https://api.github.com/repos/getsentry/sentry-laravel/zipball/cbdd224cc5a224528bf6b19507ad76187b3bccfa", + "reference": "cbdd224cc5a224528bf6b19507ad76187b3bccfa", "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", "nyholm/psr7": "^1.0", "php": "^7.2 | ^8.0", - "sentry/sdk": "^3.4", - "sentry/sentry": "^3.20.1", - "symfony/psr-http-message-bridge": "^1.0 | ^2.0" + "sentry/sentry": "^4.10", + "symfony/psr-http-message-bridge": "^1.0 | ^2.0 | ^6.0 | ^7.0" }, "require-dev": { "friendsofphp/php-cs-fixer": "^3.11", - "laravel/folio": "^1.0", - "laravel/framework": "^6.0 | ^7.0 | ^8.0 | ^9.0 | ^10.0", + "guzzlehttp/guzzle": "^7.2", + "laravel/folio": "^1.1", + "laravel/framework": "^6.0 | ^7.0 | ^8.0 | ^9.0 | ^10.0 | ^11.0", + "livewire/livewire": "^2.0 | ^3.0", "mockery/mockery": "^1.3", - "orchestra/testbench": "^4.7 | ^5.1 | ^6.0 | ^7.0 | ^8.0", + "orchestra/testbench": "^4.7 | ^5.1 | ^6.0 | ^7.0 | ^8.0 | ^9.0", "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^8.4 | ^9.3" + "phpunit/phpunit": "^8.4 | ^9.3 | ^10.4" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "3.x-dev", - "dev-2.x": "2.x-dev", - "dev-1.x": "1.x-dev", - "dev-0.x": "0.x-dev" - }, "laravel": { "providers": [ "Sentry\\Laravel\\ServiceProvider", @@ -9593,11 +8852,13 @@ "laravel", "log", "logging", - "sentry" + "profiling", + "sentry", + "tracing" ], "support": { "issues": "https://github.com/getsentry/sentry-laravel/issues", - "source": "https://github.com/getsentry/sentry-laravel/tree/3.8.2" + "source": "https://github.com/getsentry/sentry-laravel/tree/4.10.0" }, "funding": [ { @@ -9609,7 +8870,7 @@ "type": "custom" } ], - "time": "2023-10-12T14:38:46+00:00" + "time": "2024-11-07T08:05:24+00:00" }, { "name": "socialiteproviders/manager", @@ -10006,33 +9267,37 @@ }, { "name": "spatie/image", - "version": "2.2.7", + "version": "3.7.4", "source": { "type": "git", "url": "https://github.com/spatie/image.git", - "reference": "2f802853aab017aa615224daae1588054b5ab20e" + "reference": "d72d1ae07f91a3c1230e064acd4fd8c334ab237b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/image/zipball/2f802853aab017aa615224daae1588054b5ab20e", - "reference": "2f802853aab017aa615224daae1588054b5ab20e", + "url": "https://api.github.com/repos/spatie/image/zipball/d72d1ae07f91a3c1230e064acd4fd8c334ab237b", + "reference": "d72d1ae07f91a3c1230e064acd4fd8c334ab237b", "shasum": "" }, "require": { "ext-exif": "*", "ext-json": "*", "ext-mbstring": "*", - "league/glide": "^2.2.2", - "php": "^8.0", - "spatie/image-optimizer": "^1.7", - "spatie/temporary-directory": "^1.0|^2.0", - "symfony/process": "^3.0|^4.0|^5.0|^6.0" + "php": "^8.2", + "spatie/image-optimizer": "^1.7.5", + "spatie/temporary-directory": "^2.2", + "symfony/process": "^6.4|^7.0" }, "require-dev": { - "pestphp/pest": "^1.22", - "phpunit/phpunit": "^9.5", - "symfony/var-dumper": "^4.0|^5.0|^6.0", - "vimeo/psalm": "^4.6" + "ext-gd": "*", + "ext-imagick": "*", + "laravel/sail": "^1.34", + "pestphp/pest": "^2.28", + "phpstan/phpstan": "^1.10.50", + "spatie/pest-plugin-snapshots": "^2.1", + "spatie/pixelmatch-php": "^1.0", + "spatie/ray": "^1.40.1", + "symfony/var-dumper": "^6.4|7.0" }, "type": "library", "autoload": { @@ -10059,7 +9324,7 @@ "spatie" ], "support": { - "source": "https://github.com/spatie/image/tree/2.2.7" + "source": "https://github.com/spatie/image/tree/3.7.4" }, "funding": [ { @@ -10071,7 +9336,7 @@ "type": "github" } ], - "time": "2023-07-24T13:54:13+00:00" + "time": "2024-10-07T09:03:34+00:00" }, { "name": "spatie/image-optimizer", @@ -10447,53 +9712,54 @@ }, { "name": "spatie/laravel-medialibrary", - "version": "10.15.0", + "version": "11.10.0", "source": { "type": "git", "url": "https://github.com/spatie/laravel-medialibrary.git", - "reference": "f464c82357500c5c68ea350edff35ed9831fd48e" + "reference": "39b7b54a690ffd7caf5c37cd2afc8798c21e29da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-medialibrary/zipball/f464c82357500c5c68ea350edff35ed9831fd48e", - "reference": "f464c82357500c5c68ea350edff35ed9831fd48e", + "url": "https://api.github.com/repos/spatie/laravel-medialibrary/zipball/39b7b54a690ffd7caf5c37cd2afc8798c21e29da", + "reference": "39b7b54a690ffd7caf5c37cd2afc8798c21e29da", "shasum": "" }, "require": { + "composer/semver": "^3.4", "ext-exif": "*", "ext-fileinfo": "*", "ext-json": "*", - "illuminate/bus": "^9.18|^10.0", - "illuminate/conditionable": "^9.18|^10.0", - "illuminate/console": "^9.18|^10.0", - "illuminate/database": "^9.18|^10.0", - "illuminate/pipeline": "^9.18|^10.0", - "illuminate/support": "^9.18|^10.0", - "maennchen/zipstream-php": "^2.0|^3.0", - "php": "^8.0", - "spatie/image": "^2.2.7", - "spatie/temporary-directory": "^2.0", - "symfony/console": "^6.0" + "illuminate/bus": "^10.0|^11.0", + "illuminate/conditionable": "^10.0|^11.0", + "illuminate/console": "^10.0|^11.0", + "illuminate/database": "^10.0|^11.0", + "illuminate/pipeline": "^10.0|^11.0", + "illuminate/support": "^10.0|^11.0", + "maennchen/zipstream-php": "^3.1", + "php": "^8.2", + "spatie/image": "^3.3.2", + "spatie/laravel-package-tools": "^1.16.1", + "spatie/temporary-directory": "^2.2", + "symfony/console": "^6.4.1|^7.0" }, "conflict": { "php-ffmpeg/php-ffmpeg": "<0.6.1" }, "require-dev": { - "aws/aws-sdk-php": "^3.133.11", - "doctrine/dbal": "^2.13", + "aws/aws-sdk-php": "^3.293.10", "ext-imagick": "*", "ext-pdo_sqlite": "*", "ext-zip": "*", - "guzzlehttp/guzzle": "^7.4", - "league/flysystem-aws-s3-v3": "^3.0", - "mockery/mockery": "^1.4", - "nunomaduro/larastan": "^2.0", - "orchestra/testbench": "^7.0|^8.0", - "pestphp/pest": "^1.21", - "phpstan/extension-installer": "^1.1", - "spatie/laravel-ray": "^1.28", - "spatie/pdf-to-image": "^2.1", - "spatie/phpunit-snapshot-assertions": "^4.2" + "guzzlehttp/guzzle": "^7.8.1", + "larastan/larastan": "^2.7", + "league/flysystem-aws-s3-v3": "^3.22", + "mockery/mockery": "^1.6.7", + "orchestra/testbench": "^7.0|^8.17|^9.0", + "pestphp/pest": "^2.28", + "phpstan/extension-installer": "^1.3.1", + "spatie/laravel-ray": "^1.33", + "spatie/pdf-to-image": "^2.2|^3.0", + "spatie/pest-plugin-snapshots": "^2.1" }, "suggest": { "league/flysystem-aws-s3-v3": "Required to use AWS S3 file storage", @@ -10539,7 +9805,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-medialibrary/issues", - "source": "https://github.com/spatie/laravel-medialibrary/tree/10.15.0" + "source": "https://github.com/spatie/laravel-medialibrary/tree/11.10.0" }, "funding": [ { @@ -10551,7 +9817,7 @@ "type": "github" } ], - "time": "2023-11-03T13:09:19+00:00" + "time": "2024-11-08T15:48:58+00:00" }, { "name": "spatie/laravel-package-tools", @@ -11180,49 +10446,122 @@ }, "time": "2024-11-03T10:58:33+00:00" }, + { + "name": "symfony/clock", + "version": "v7.1.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/clock.git", + "reference": "97bebc53548684c17ed696bc8af016880f0f098d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/clock/zipball/97bebc53548684c17ed696bc8af016880f0f098d", + "reference": "97bebc53548684c17ed696bc8af016880f0f098d", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "psr/clock": "^1.0", + "symfony/polyfill-php83": "^1.28" + }, + "provide": { + "psr/clock-implementation": "1.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/now.php" + ], + "psr-4": { + "Symfony\\Component\\Clock\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Decouples applications from the system clock", + "homepage": "https://symfony.com", + "keywords": [ + "clock", + "psr20", + "time" + ], + "support": { + "source": "https://github.com/symfony/clock/tree/v7.1.6" + }, + "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-09-25T14:20:29+00:00" + }, { "name": "symfony/console", - "version": "v6.4.14", + "version": "v7.1.7", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "897c2441ed4eec8a8a2c37b943427d24dba3f26b" + "reference": "3284aafcac338b6e86fd955ee4d794cbe434151a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/897c2441ed4eec8a8a2c37b943427d24dba3f26b", - "reference": "897c2441ed4eec8a8a2c37b943427d24dba3f26b", + "url": "https://api.github.com/repos/symfony/console/zipball/3284aafcac338b6e86fd955ee4d794cbe434151a", + "reference": "3284aafcac338b6e86fd955ee4d794cbe434151a", "shasum": "" }, "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.5|^3", + "php": ">=8.2", "symfony/polyfill-mbstring": "~1.0", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^5.4|^6.0|^7.0" + "symfony/string": "^6.4|^7.0" }, "conflict": { - "symfony/dependency-injection": "<5.4", - "symfony/dotenv": "<5.4", - "symfony/event-dispatcher": "<5.4", - "symfony/lock": "<5.4", - "symfony/process": "<5.4" + "symfony/dependency-injection": "<6.4", + "symfony/dotenv": "<6.4", + "symfony/event-dispatcher": "<6.4", + "symfony/lock": "<6.4", + "symfony/process": "<6.4" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/event-dispatcher": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/lock": "^5.4|^6.0|^7.0", - "symfony/messenger": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0", - "symfony/stopwatch": "^5.4|^6.0|^7.0", - "symfony/var-dumper": "^5.4|^6.0|^7.0" + "symfony/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": { @@ -11256,7 +10595,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.4.14" + "source": "https://github.com/symfony/console/tree/v7.1.7" }, "funding": [ { @@ -11272,7 +10611,7 @@ "type": "tidelift" } ], - "time": "2024-11-05T15:34:40+00:00" + "time": "2024-11-05T15:34:55+00:00" }, { "name": "symfony/css-selector", @@ -11475,22 +10814,22 @@ }, { "name": "symfony/error-handler", - "version": "v6.4.14", + "version": "v7.1.7", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "9e024324511eeb00983ee76b9aedc3e6ecd993d9" + "reference": "010e44661f4c6babaf8c4862fe68c24a53903342" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/9e024324511eeb00983ee76b9aedc3e6ecd993d9", - "reference": "9e024324511eeb00983ee76b9aedc3e6ecd993d9", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/010e44661f4c6babaf8c4862fe68c24a53903342", + "reference": "010e44661f4c6babaf8c4862fe68c24a53903342", "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", @@ -11499,7 +10838,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" @@ -11530,7 +10869,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.14" + "source": "https://github.com/symfony/error-handler/tree/v7.1.7" }, "funding": [ { @@ -11546,7 +10885,7 @@ "type": "tidelift" } ], - "time": "2024-11-05T15:34:40+00:00" + "time": "2024-11-05T15:34:55+00:00" }, { "name": "symfony/event-dispatcher", @@ -11706,23 +11045,23 @@ }, { "name": "symfony/finder", - "version": "v6.4.13", + "version": "v7.1.6", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "daea9eca0b08d0ed1dc9ab702a46128fd1be4958" + "reference": "2cb89664897be33f78c65d3d2845954c8d7a43b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/daea9eca0b08d0ed1dc9ab702a46128fd1be4958", - "reference": "daea9eca0b08d0ed1dc9ab702a46128fd1be4958", + "url": "https://api.github.com/repos/symfony/finder/zipball/2cb89664897be33f78c65d3d2845954c8d7a43b8", + "reference": "2cb89664897be33f78c65d3d2845954c8d7a43b8", "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": { @@ -11750,7 +11089,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.13" + "source": "https://github.com/symfony/finder/tree/v7.1.6" }, "funding": [ { @@ -11766,7 +11105,7 @@ "type": "tidelift" } ], - "time": "2024-10-01T08:30:56+00:00" + "time": "2024-10-01T08:31:23+00:00" }, { "name": "symfony/html-sanitizer", @@ -12010,36 +11349,36 @@ }, { "name": "symfony/http-foundation", - "version": "v6.4.14", + "version": "v7.1.7", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "ba020a321a95519303a3f09ec2824d34d601c388" + "reference": "5183b61657807099d98f3367bcccb850238b17a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ba020a321a95519303a3f09ec2824d34d601c388", - "reference": "ba020a321a95519303a3f09ec2824d34d601c388", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/5183b61657807099d98f3367bcccb850238b17a9", + "reference": "5183b61657807099d98f3367bcccb850238b17a9", "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": { @@ -12067,7 +11406,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.14" + "source": "https://github.com/symfony/http-foundation/tree/v7.1.7" }, "funding": [ { @@ -12083,77 +11422,77 @@ "type": "tidelift" } ], - "time": "2024-11-05T16:39:55+00:00" + "time": "2024-11-06T09:02:46+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.4.14", + "version": "v7.1.7", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "8278a947d0369754a47b758a9e17b72cab970951" + "reference": "7f137cda31fd41e422edcdc01915f2c095b84399" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/8278a947d0369754a47b758a9e17b72cab970951", - "reference": "8278a947d0369754a47b758a9e17b72cab970951", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/7f137cda31fd41e422edcdc01915f2c095b84399", + "reference": "7f137cda31fd41e422edcdc01915f2c095b84399", "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/serializer": "^6.4.4|^7.0.4", - "symfony/stopwatch": "^5.4|^6.0|^7.0", - "symfony/translation": "^5.4|^6.0|^7.0", + "symfony/process": "^6.4|^7.0", + "symfony/property-access": "^7.1", + "symfony/routing": "^6.4|^7.0", + "symfony/serializer": "^7.1", + "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-dumper": "^5.4|^6.4|^7.0", - "symfony/var-exporter": "^6.2|^7.0", - "twig/twig": "^2.13|^3.0.4" + "symfony/var-dumper": "^6.4|^7.0", + "symfony/var-exporter": "^6.4|^7.0", + "twig/twig": "^3.0.4" }, "type": "library", "autoload": { @@ -12181,7 +11520,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.14" + "source": "https://github.com/symfony/http-kernel/tree/v7.1.7" }, "funding": [ { @@ -12197,43 +11536,43 @@ "type": "tidelift" } ], - "time": "2024-11-06T09:45:21+00:00" + "time": "2024-11-06T09:54:34+00:00" }, { "name": "symfony/mailer", - "version": "v6.4.13", + "version": "v7.1.6", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "c2f7e0d8d7ac8fe25faccf5d8cac462805db2663" + "reference": "69c9948451fb3a6a4d47dc8261d1794734e76cdd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/c2f7e0d8d7ac8fe25faccf5d8cac462805db2663", - "reference": "c2f7e0d8d7ac8fe25faccf5d8cac462805db2663", + "url": "https://api.github.com/repos/symfony/mailer/zipball/69c9948451fb3a6a4d47dc8261d1794734e76cdd", + "reference": "69c9948451fb3a6a4d47dc8261d1794734e76cdd", "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": { @@ -12261,7 +11600,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v6.4.13" + "source": "https://github.com/symfony/mailer/tree/v7.1.6" }, "funding": [ { @@ -12277,7 +11616,7 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:18:03+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/mailgun-mailer", @@ -12350,21 +11689,20 @@ }, { "name": "symfony/mime", - "version": "v6.4.13", + "version": "v7.1.6", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "1de1cf14d99b12c7ebbb850491ec6ae3ed468855" + "reference": "caa1e521edb2650b8470918dfe51708c237f0598" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/1de1cf14d99b12c7ebbb850491ec6ae3ed468855", - "reference": "1de1cf14d99b12c7ebbb850491ec6ae3ed468855", + "url": "https://api.github.com/repos/symfony/mime/zipball/caa1e521edb2650b8470918dfe51708c237f0598", + "reference": "caa1e521edb2650b8470918dfe51708c237f0598", "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" }, @@ -12372,17 +11710,17 @@ "egulias/email-validator": "~3.0.0", "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", - "symfony/mailer": "<5.4", + "symfony/mailer": "<6.4", "symfony/serializer": "<6.4.3|>7.0,<7.0.3" }, "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/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.3|^7.0.3" }, "type": "library", @@ -12415,7 +11753,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.4.13" + "source": "https://github.com/symfony/mime/tree/v7.1.6" }, "funding": [ { @@ -12431,7 +11769,7 @@ "type": "tidelift" } ], - "time": "2024-10-25T15:07:50+00:00" + "time": "2024-10-25T15:11:02+00:00" }, { "name": "symfony/options-resolver", @@ -13138,20 +12476,20 @@ }, { "name": "symfony/process", - "version": "v6.4.14", + "version": "v7.1.7", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "25214adbb0996d18112548de20c281be9f27279f" + "reference": "9b8a40b7289767aa7117e957573c2a535efe6585" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/25214adbb0996d18112548de20c281be9f27279f", - "reference": "25214adbb0996d18112548de20c281be9f27279f", + "url": "https://api.github.com/repos/symfony/process/zipball/9b8a40b7289767aa7117e957573c2a535efe6585", + "reference": "9b8a40b7289767aa7117e957573c2a535efe6585", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "type": "library", "autoload": { @@ -13179,7 +12517,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.4.14" + "source": "https://github.com/symfony/process/tree/v7.1.7" }, "funding": [ { @@ -13195,47 +12533,42 @@ "type": "tidelift" } ], - "time": "2024-11-06T09:25:01+00:00" + "time": "2024-11-06T09:25:12+00:00" }, { "name": "symfony/psr-http-message-bridge", - "version": "v2.3.1", + "version": "v7.1.6", "source": { "type": "git", "url": "https://github.com/symfony/psr-http-message-bridge.git", - "reference": "581ca6067eb62640de5ff08ee1ba6850a0ee472e" + "reference": "f16471bb19f6685b9ccf0a2c03c213840ae68cd6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/581ca6067eb62640de5ff08ee1ba6850a0ee472e", - "reference": "581ca6067eb62640de5ff08ee1ba6850a0ee472e", + "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/f16471bb19f6685b9ccf0a2c03c213840ae68cd6", + "reference": "f16471bb19f6685b9ccf0a2c03c213840ae68cd6", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/http-message": "^1.0 || ^2.0", - "symfony/deprecation-contracts": "^2.5 || ^3.0", - "symfony/http-foundation": "^5.4 || ^6.0" + "php": ">=8.2", + "psr/http-message": "^1.0|^2.0", + "symfony/http-foundation": "^6.4|^7.0" + }, + "conflict": { + "php-http/discovery": "<1.15", + "symfony/http-kernel": "<6.4" }, "require-dev": { "nyholm/psr7": "^1.1", - "psr/log": "^1.1 || ^2 || ^3", - "symfony/browser-kit": "^5.4 || ^6.0", - "symfony/config": "^5.4 || ^6.0", - "symfony/event-dispatcher": "^5.4 || ^6.0", - "symfony/framework-bundle": "^5.4 || ^6.0", - "symfony/http-kernel": "^5.4 || ^6.0", - "symfony/phpunit-bridge": "^6.2" - }, - "suggest": { - "nyholm/psr7": "For a super lightweight PSR-7/17 implementation" + "php-http/discovery": "^1.15", + "psr/log": "^1.1.4|^2|^3", + "symfony/browser-kit": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/event-dispatcher": "^6.4|^7.0", + "symfony/framework-bundle": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0" }, "type": "symfony-bridge", - "extra": { - "branch-alias": { - "dev-main": "2.3-dev" - } - }, "autoload": { "psr-4": { "Symfony\\Bridge\\PsrHttpMessage\\": "" @@ -13255,11 +12588,11 @@ }, { "name": "Symfony Community", - "homepage": "http://symfony.com/contributors" + "homepage": "https://symfony.com/contributors" } ], "description": "PSR HTTP message bridge", - "homepage": "http://symfony.com", + "homepage": "https://symfony.com", "keywords": [ "http", "http-message", @@ -13267,8 +12600,7 @@ "psr-7" ], "support": { - "issues": "https://github.com/symfony/psr-http-message-bridge/issues", - "source": "https://github.com/symfony/psr-http-message-bridge/tree/v2.3.1" + "source": "https://github.com/symfony/psr-http-message-bridge/tree/v7.1.6" }, "funding": [ { @@ -13284,40 +12616,38 @@ "type": "tidelift" } ], - "time": "2023-07-26T11:53:26+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/routing", - "version": "v6.4.13", + "version": "v7.1.6", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "640a74250d13f9c30d5ca045b6aaaabcc8215278" + "reference": "66a2c469f6c22d08603235c46a20007c0701ea0a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/640a74250d13f9c30d5ca045b6aaaabcc8215278", - "reference": "640a74250d13f9c30d5ca045b6aaaabcc8215278", + "url": "https://api.github.com/repos/symfony/routing/zipball/66a2c469f6c22d08603235c46a20007c0701ea0a", + "reference": "66a2c469f6c22d08603235c46a20007c0701ea0a", "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": { @@ -13351,7 +12681,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.4.13" + "source": "https://github.com/symfony/routing/tree/v7.1.6" }, "funding": [ { @@ -13367,7 +12697,7 @@ "type": "tidelift" } ], - "time": "2024-10-01T08:30:56+00:00" + "time": "2024-10-01T08:31:23+00:00" }, { "name": "symfony/service-contracts", @@ -13541,33 +12871,32 @@ }, { "name": "symfony/translation", - "version": "v6.4.13", + "version": "v7.1.6", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "bee9bfabfa8b4045a66bf82520e492cddbaffa66" + "reference": "b9f72ab14efdb6b772f85041fa12f820dee8d55f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/bee9bfabfa8b4045a66bf82520e492cddbaffa66", - "reference": "bee9bfabfa8b4045a66bf82520e492cddbaffa66", + "url": "https://api.github.com/repos/symfony/translation/zipball/b9f72ab14efdb6b772f85041fa12f820dee8d55f", + "reference": "b9f72ab14efdb6b772f85041fa12f820dee8d55f", "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" @@ -13575,17 +12904,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": { @@ -13616,7 +12945,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.4.13" + "source": "https://github.com/symfony/translation/tree/v7.1.6" }, "funding": [ { @@ -13632,7 +12961,7 @@ "type": "tidelift" } ], - "time": "2024-09-27T18:14:25+00:00" + "time": "2024-09-28T12:35:13+00:00" }, { "name": "symfony/translation-contracts", @@ -13714,24 +13043,24 @@ }, { "name": "symfony/uid", - "version": "v6.4.13", + "version": "v7.1.6", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "18eb207f0436a993fffbdd811b5b8fa35fa5e007" + "reference": "65befb3bb2d503bbffbd08c815aa38b472999917" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/18eb207f0436a993fffbdd811b5b8fa35fa5e007", - "reference": "18eb207f0436a993fffbdd811b5b8fa35fa5e007", + "url": "https://api.github.com/repos/symfony/uid/zipball/65befb3bb2d503bbffbd08c815aa38b472999917", + "reference": "65befb3bb2d503bbffbd08c815aa38b472999917", "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": { @@ -13768,7 +13097,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v6.4.13" + "source": "https://github.com/symfony/uid/tree/v7.1.6" }, "funding": [ { @@ -13784,38 +13113,36 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:18:03+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.4.14", + "version": "v7.1.7", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "93c09246038178717a9c14b809ea8151ffcf7091" + "reference": "f6ea51f669760cacd7464bf7eaa0be87b8072db1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/93c09246038178717a9c14b809ea8151ffcf7091", - "reference": "93c09246038178717a9c14b809ea8151ffcf7091", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/f6ea51f669760cacd7464bf7eaa0be87b8072db1", + "reference": "f6ea51f669760cacd7464bf7eaa0be87b8072db1", "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" @@ -13853,7 +13180,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.4.14" + "source": "https://github.com/symfony/var-dumper/tree/v7.1.7" }, "funding": [ { @@ -13869,7 +13196,7 @@ "type": "tidelift" } ], - "time": "2024-11-05T15:34:40+00:00" + "time": "2024-11-05T15:34:55+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -13924,89 +13251,34 @@ }, "time": "2023-12-08T13:03:43+00:00" }, - { - "name": "torchlight/torchlight-commonmark", - "version": "v0.5.5", - "source": { - "type": "git", - "url": "https://github.com/torchlight-api/torchlight-commonmark-php.git", - "reference": "eb618ae6187090126a9ef881ccaf9c315d49c99b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/torchlight-api/torchlight-commonmark-php/zipball/eb618ae6187090126a9ef881ccaf9c315d49c99b", - "reference": "eb618ae6187090126a9ef881ccaf9c315d49c99b", - "shasum": "" - }, - "require": { - "league/commonmark": "^1.5|^2.0", - "php": "^7.2|^8.0", - "torchlight/torchlight-laravel": "^0.5.10" - }, - "require-dev": { - "mockery/mockery": "^1.3.3", - "orchestra/testbench": "^5.0|^6.0", - "phpunit/phpunit": "^8.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "Torchlight\\Commonmark\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Aaron Francis", - "email": "aaron@hammerstone.dev" - } - ], - "description": "A Commonmark extension for Torchlight, the syntax highlighting API.", - "homepage": "https://torchlight.dev", - "keywords": [ - "Code highlighting", - "commonmark", - "laravel", - "markdown", - "syntax highlighting" - ], - "support": { - "issues": "https://github.com/torchlight-api/torchlight-commonmark-php/issues", - "source": "https://github.com/torchlight-api/torchlight-commonmark-php/tree/v0.5.5" - }, - "time": "2022-02-23T17:09:44+00:00" - }, { "name": "torchlight/torchlight-laravel", - "version": "v0.5.14", + "version": "v0.6.0", "source": { "type": "git", "url": "https://github.com/torchlight-api/torchlight-laravel.git", - "reference": "6a47c9dfdc5dc11ce0ef0672337119026189326d" + "reference": "ecdabd33326f9b37da95032c971a340c4e3f4306" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/torchlight-api/torchlight-laravel/zipball/6a47c9dfdc5dc11ce0ef0672337119026189326d", - "reference": "6a47c9dfdc5dc11ce0ef0672337119026189326d", + "url": "https://api.github.com/repos/torchlight-api/torchlight-laravel/zipball/ecdabd33326f9b37da95032c971a340c4e3f4306", + "reference": "ecdabd33326f9b37da95032c971a340c4e3f4306", "shasum": "" }, "require": { "guzzlehttp/guzzle": "^7.2", - "illuminate/cache": "^8.0|^9.0|^10.0", - "illuminate/console": "^8.0|^9.0|^10.0", - "illuminate/http": "^8.0|^9.0|^10.0", - "illuminate/support": "^8.0|^9.0|^10.0", - "illuminate/view": "^8.0|^9.0|^10.0", + "illuminate/cache": "^8.0|^9.0|^10.0|^11.0", + "illuminate/console": "^8.0|^9.0|^10.0|^11.0", + "illuminate/http": "^8.0|^9.0|^10.0|^11.0", + "illuminate/support": "^8.0|^9.0|^10.0|^11.0", + "illuminate/view": "^8.0|^9.0|^10.0|^11.0", "php": "^7.3|^8.0", "ramsey/uuid": "^3.7|^4.0" }, "require-dev": { "mockery/mockery": "^1.3.3", - "orchestra/testbench": "^5.0|^6.0|^7.0", - "phpunit/phpunit": "^8.5.23|^9.5" + "orchestra/testbench": "^5.0|^6.0|^7.0|^9.0", + "phpunit/phpunit": "^8.5.23|^9.5|^10.5" }, "type": "library", "extra": { @@ -14040,9 +13312,9 @@ ], "support": { "issues": "https://github.com/torchlight-api/torchlight-laravel/issues", - "source": "https://github.com/torchlight-api/torchlight-laravel/tree/v0.5.14" + "source": "https://github.com/torchlight-api/torchlight-laravel/tree/v0.6.0" }, - "time": "2023-08-18T21:14:06+00:00" + "time": "2024-05-16T18:16:31+00:00" }, { "name": "vlucas/phpdotenv", @@ -14548,16 +13820,16 @@ }, { "name": "fakerphp/faker", - "version": "v1.23.1", + "version": "v1.24.0", "source": { "type": "git", "url": "https://github.com/FakerPHP/Faker.git", - "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b" + "reference": "a136842a532bac9ecd8a1c723852b09915d7db50" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/bfb4fe148adbf78eff521199619b93a52ae3554b", - "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/a136842a532bac9ecd8a1c723852b09915d7db50", + "reference": "a136842a532bac9ecd8a1c723852b09915d7db50", "shasum": "" }, "require": { @@ -14605,9 +13877,9 @@ ], "support": { "issues": "https://github.com/FakerPHP/Faker/issues", - "source": "https://github.com/FakerPHP/Faker/tree/v1.23.1" + "source": "https://github.com/FakerPHP/Faker/tree/v1.24.0" }, - "time": "2024-01-02T13:46:09+00:00" + "time": "2024-11-07T15:11:20+00:00" }, { "name": "fidry/cpu-core-counter", @@ -14897,34 +14169,32 @@ }, { "name": "laravel/breeze", - "version": "v1.29.1", + "version": "v2.2.4", "source": { "type": "git", "url": "https://github.com/laravel/breeze.git", - "reference": "22c53b84b7fff91b01a318d71a10dfc251e92849" + "reference": "d3484d08aaaa84896bdd2d1787e7da0fc03f676f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/breeze/zipball/22c53b84b7fff91b01a318d71a10dfc251e92849", - "reference": "22c53b84b7fff91b01a318d71a10dfc251e92849", + "url": "https://api.github.com/repos/laravel/breeze/zipball/d3484d08aaaa84896bdd2d1787e7da0fc03f676f", + "reference": "d3484d08aaaa84896bdd2d1787e7da0fc03f676f", "shasum": "" }, "require": { - "illuminate/console": "^10.17", - "illuminate/filesystem": "^10.17", - "illuminate/support": "^10.17", - "illuminate/validation": "^10.17", - "php": "^8.1.0" + "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": "^8.0", + "orchestra/testbench": "^9.0", "phpstan/phpstan": "^1.10" }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - }, "laravel": { "providers": [ "Laravel\\Breeze\\BreezeServiceProvider" @@ -14955,7 +14225,7 @@ "issues": "https://github.com/laravel/breeze/issues", "source": "https://github.com/laravel/breeze" }, - "time": "2024-03-04T14:35:21+00:00" + "time": "2024-10-29T15:11:57+00:00" }, { "name": "laravel/pint", @@ -15023,69 +14293,6 @@ }, "time": "2024-09-24T17:22:50+00:00" }, - { - "name": "laravel/sail", - "version": "v1.37.1", - "source": { - "type": "git", - "url": "https://github.com/laravel/sail.git", - "reference": "7efa151ea0d16f48233d6a6cd69f81270acc6e93" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/sail/zipball/7efa151ea0d16f48233d6a6cd69f81270acc6e93", - "reference": "7efa151ea0d16f48233d6a6cd69f81270acc6e93", - "shasum": "" - }, - "require": { - "illuminate/console": "^9.52.16|^10.0|^11.0", - "illuminate/contracts": "^9.52.16|^10.0|^11.0", - "illuminate/support": "^9.52.16|^10.0|^11.0", - "php": "^8.0", - "symfony/console": "^6.0|^7.0", - "symfony/yaml": "^6.0|^7.0" - }, - "require-dev": { - "orchestra/testbench": "^7.0|^8.0|^9.0", - "phpstan/phpstan": "^1.10" - }, - "bin": [ - "bin/sail" - ], - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Laravel\\Sail\\SailServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Laravel\\Sail\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "Docker files for running a basic Laravel application.", - "keywords": [ - "docker", - "laravel" - ], - "support": { - "issues": "https://github.com/laravel/sail/issues", - "source": "https://github.com/laravel/sail" - }, - "time": "2024-10-29T20:18:14+00:00" - }, { "name": "mockery/mockery", "version": "1.6.12", @@ -15231,40 +14438,38 @@ }, { "name": "nunomaduro/collision", - "version": "v7.11.0", + "version": "v8.5.0", "source": { "type": "git", "url": "https://github.com/nunomaduro/collision.git", - "reference": "994ea93df5d4132f69d3f1bd74730509df6e8a05" + "reference": "f5c101b929c958e849a633283adff296ed5f38f5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/collision/zipball/994ea93df5d4132f69d3f1bd74730509df6e8a05", - "reference": "994ea93df5d4132f69d3f1bd74730509df6e8a05", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/f5c101b929c958e849a633283adff296ed5f38f5", + "reference": "f5c101b929c958e849a633283adff296ed5f38f5", "shasum": "" }, "require": { "filp/whoops": "^2.16.0", - "nunomaduro/termwind": "^1.15.1", - "php": "^8.1.0", - "symfony/console": "^6.4.12" + "nunomaduro/termwind": "^2.1.0", + "php": "^8.2.0", + "symfony/console": "^7.1.5" }, "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.1", - "laravel/framework": "^10.48.22", + "larastan/larastan": "^2.9.8", + "laravel/framework": "^11.28.0", "laravel/pint": "^1.18.1", "laravel/sail": "^1.36.0", - "laravel/sanctum": "^3.3.3", + "laravel/sanctum": "^4.0.3", "laravel/tinker": "^2.10.0", - "nunomaduro/larastan": "^2.9.8", - "orchestra/testbench-core": "^8.28.3", - "pestphp/pest": "^2.35.1", - "phpunit/phpunit": "^10.5.36", - "sebastian/environment": "^6.1.0", - "spatie/laravel-ignition": "^2.8.0" + "orchestra/testbench-core": "^9.5.3", + "pestphp/pest": "^2.36.0 || ^3.4.0", + "sebastian/environment": "^6.1.0 || ^7.2.0" }, "type": "library", "extra": { @@ -15272,6 +14477,9 @@ "providers": [ "NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider" ] + }, + "branch-alias": { + "dev-8.x": "8.x-dev" } }, "autoload": { @@ -15323,7 +14531,7 @@ "type": "patreon" } ], - "time": "2024-10-15T15:12:40+00:00" + "time": "2024-10-15T16:06:32+00:00" }, { "name": "pestphp/pest", @@ -17763,77 +16971,6 @@ ], "time": "2024-02-05T13:30:14+00:00" }, - { - "name": "symfony/yaml", - "version": "v7.1.6", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "3ced3f29e4f0d6bce2170ff26719f1fe9aacc671" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/3ced3f29e4f0d6bce2170ff26719f1fe9aacc671", - "reference": "3ced3f29e4f0d6bce2170ff26719f1fe9aacc671", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "symfony/console": "<6.4" - }, - "require-dev": { - "symfony/console": "^6.4|^7.0" - }, - "bin": [ - "Resources/bin/yaml-lint" - ], - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Loads and dumps YAML files", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/yaml/tree/v7.1.6" - }, - "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-09-25T14:20:29+00:00" - }, { "name": "ta-tikoma/phpunit-architecture-test", "version": "0.8.4", @@ -17946,9 +17083,7 @@ ], "aliases": [], "minimum-stability": "dev", - "stability-flags": { - "francescomalatesta/laravel-feature": 20 - }, + "stability-flags": [], "prefer-stable": true, "prefer-lowest": false, "platform": { diff --git a/config/app.php b/config/app.php index 24fd0489..4526e31f 100644 --- a/config/app.php +++ b/config/app.php @@ -9,9 +9,9 @@ | Application Name |-------------------------------------------------------------------------- | - | This value is the name of your application. This value is used when the + | This value is the name of your application, which will be used when the | framework needs to place the application's name in a notification or - | any other location as required by the application or its packages. + | other UI elements where an application name needs to be displayed. | */ @@ -50,26 +50,24 @@ | | 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. + | the application so that it's available within Artisan commands. | */ '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. + | will be used by the PHP date and date-time functions. The timezone + | is set to "UTC" by default as it is suitable for most use cases. | */ - 'timezone' => 'UTC', + 'timezone' => env('APP_TIMEZONE', 'UTC'), /* |-------------------------------------------------------------------------- @@ -77,163 +75,54 @@ |-------------------------------------------------------------------------- | | 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. + | by Laravel's translation / localization methods. This option can be + | set to any locale for which you plan to have translation strings. | */ - 'locale' => 'fr', + 'locale' => env('APP_LOCALE', 'fr'), - /* - |-------------------------------------------------------------------------- - | 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' => env('APP_FALLBACK_LOCALE', 'fr'), - 'fallback_locale' => 'fr', - - /* - |-------------------------------------------------------------------------- - | Faker Locale - |-------------------------------------------------------------------------- - | - | This locale will be used by the Faker PHP library when generating fake - | data for your database seeds. For example, this will be used to get - | localized telephone numbers, street address information and more. - | - */ - - 'faker_locale' => 'fr_FR', + 'faker_locale' => env('APP_FAKER_LOCALE', 'fr_FR'), /* |-------------------------------------------------------------------------- | 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! + | This key is utilized by Laravel's encryption services and should be set + | to a random, 32 character string to ensure that all encrypted values + | are secure. You should do this prior to deploying the 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... - */ - App\Providers\Filament\AdminPanelProvider::class, - LaravelFeature\Provider\FeatureServiceProvider::class, - - /* - * Application Service Providers... - */ - App\Providers\AppServiceProvider::class, - App\Providers\AuthServiceProvider::class, - // App\Providers\BroadcastServiceProvider::class, - App\Providers\EventServiceProvider::class, - App\Providers\VoltServiceProvider::class, - App\Providers\RouteServiceProvider::class, + 'key' => env('APP_KEY'), + 'previous_keys' => [ + ...array_filter( + explode(',', env('APP_PREVIOUS_KEYS', '')) + ), ], /* |-------------------------------------------------------------------------- - | Class Aliases + | Maintenance Mode Driver |-------------------------------------------------------------------------- | - | 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. + | These configuration options determine the driver used to determine and + | manage Laravel's "maintenance mode" status. The "cache" driver will + | allow maintenance mode to be controlled across multiple machines. + | + | Supported drivers: "file", "cache" | */ - 'aliases' => [ - - 'App' => Illuminate\Support\Facades\App::class, - 'Arr' => Illuminate\Support\Arr::class, - 'Artisan' => Illuminate\Support\Facades\Artisan::class, - 'Auth' => Illuminate\Support\Facades\Auth::class, - 'Blade' => Illuminate\Support\Facades\Blade::class, - 'Broadcast' => Illuminate\Support\Facades\Broadcast::class, - 'Bus' => Illuminate\Support\Facades\Bus::class, - 'Cache' => Illuminate\Support\Facades\Cache::class, - 'Config' => Illuminate\Support\Facades\Config::class, - 'Cookie' => Illuminate\Support\Facades\Cookie::class, - 'Crypt' => Illuminate\Support\Facades\Crypt::class, - 'Date' => Illuminate\Support\Facades\Date::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, - 'Lang' => Illuminate\Support\Facades\Lang::class, - 'Log' => Illuminate\Support\Facades\Log::class, - 'Mail' => Illuminate\Support\Facades\Mail::class, - 'Markdown' => GrahamCampbell\Markdown\Facades\Markdown::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, - // 'Redis' => 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, - + 'maintenance' => [ + 'driver' => env('APP_MAINTENANCE_DRIVER', 'file'), + 'store' => env('APP_MAINTENANCE_STORE', 'database'), ], ]; diff --git a/config/blade-ui-kit.php b/config/blade-ui-kit.php deleted file mode 100644 index 96b4be9d..00000000 --- a/config/blade-ui-kit.php +++ /dev/null @@ -1,127 +0,0 @@ - [ - // 'alert' => Components\Alerts\Alert::class, - 'avatar' => Components\Support\Avatar::class, - // 'carbon' => Components\DateTime\Carbon::class, - 'checkbox' => Components\Forms\Inputs\Checkbox::class, - // 'color-picker' => Components\Forms\Inputs\ColorPicker::class, - // 'countdown' => Components\DateTime\Countdown::class, - // 'cron' => Components\Support\Cron::class, - // 'dropdown' => Components\Navigation\Dropdown::class, - // 'easy-mde' => Components\Editors\EasyMDE::class, - 'email' => Components\Forms\Inputs\Email::class, - // 'error' => Components\Forms\Error::class, - 'form' => Components\Forms\Form::class, - // 'form-button' => Components\Buttons\FormButton::class, - // 'html' => Components\Layouts\Html::class, - 'input' => Components\Forms\Inputs\Input::class, - 'label' => Components\Forms\Label::class, - // 'logout' => Components\Buttons\Logout::class, - // 'mapbox' => Components\Maps\Mapbox::class, - 'markdown' => Components\Markdown\Markdown::class, - 'password' => Components\Forms\Inputs\Password::class, - // 'pikaday' => Components\Forms\Inputs\Pikaday::class, - // 'social-meta' => Components\Layouts\SocialMeta::class, - 'textarea' => Components\Forms\Inputs\Textarea::class, - 'toc' => Components\Markdown\ToC::class, - // 'trix' => Components\Editors\Trix::class, - 'unsplash' => Components\Support\Unsplash::class, - ], - - /* - |-------------------------------------------------------------------------- - | Livewire Components - |-------------------------------------------------------------------------- - | - | Below you reference all the Livewire components that should be loaded - | for your app. By default all components from Blade UI Kit are loaded in. - | - */ - - 'livewire' => [ - - ], - - /* - |-------------------------------------------------------------------------- - | Components Prefix - |-------------------------------------------------------------------------- - | - | This value will set a prefix for all Blade UI Kit components. - | By default it's empty. This is useful if you want to avoid - | collision with components from other libraries. - | - | If set with "buk", for example, you can reference components like: - | - | - | - */ - - 'prefix' => '', - - /* - |-------------------------------------------------------------------------- - | Third Party Asset Libraries - |-------------------------------------------------------------------------- - | - | These settings hold reference to all third party libraries and their - | asset files served through a CDN. Individual components can require - | these asset files through their static `$assets` property. - | - */ - - 'assets' => [ - - 'alpine' => 'https://cdn.jsdelivr.net/gh/alpinejs/alpine@v2.3.5/dist/alpine.min.js', - - 'easy-mde' => [ - 'https://unpkg.com/easymde/dist/easymde.min.css', - 'https://unpkg.com/easymde/dist/easymde.min.js', - ], - - 'mapbox' => [ - 'https://api.mapbox.com/mapbox-gl-js/v1.8.1/mapbox-gl.css', - 'https://api.mapbox.com/mapbox-gl-js/v1.8.1/mapbox-gl.js', - ], - - 'moment' => [ - 'https://cdn.jsdelivr.net/npm/moment@2.26.0/moment.min.js', - 'https://cdn.jsdelivr.net/npm/moment-timezone@0.5.31/builds/moment-timezone-with-data.min.js', - ], - - 'pickr' => [ - 'https://cdn.jsdelivr.net/npm/@simonwep/pickr/dist/themes/classic.min.css', - 'https://cdn.jsdelivr.net/npm/@simonwep/pickr/dist/pickr.min.js', - ], - - 'pikaday' => [ - 'https://cdn.jsdelivr.net/npm/pikaday/css/pikaday.css', - 'https://cdn.jsdelivr.net/npm/pikaday/pikaday.js', - ], - - 'trix' => [ - 'https://unpkg.com/trix@1.2.3/dist/trix.css', - 'https://unpkg.com/trix@1.2.3/dist/trix.js', - ], - - ], - -]; diff --git a/config/broadcasting.php b/config/broadcasting.php deleted file mode 100644 index 139b413d..00000000 --- a/config/broadcasting.php +++ /dev/null @@ -1,66 +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' => [ - 'cluster' => env('PUSHER_APP_CLUSTER'), - 'useTLS' => true, - ], - ], - - 'ably' => [ - 'driver' => 'ably', - 'key' => env('ABLY_KEY'), - ], - - 'redis' => [ - 'driver' => 'redis', - 'connection' => 'default', - ], - - 'log' => [ - 'driver' => 'log', - ], - - 'null' => [ - 'driver' => 'null', - ], - - ], - -]; diff --git a/config/cors.php b/config/cors.php deleted file mode 100644 index ec8d2d85..00000000 --- a/config/cors.php +++ /dev/null @@ -1,36 +0,0 @@ - ['api/*', 'sanctum/csrf-cookie'], - - 'allowed_methods' => ['*'], - - 'allowed_origins' => ['*'], - - 'allowed_origins_patterns' => [], - - 'allowed_headers' => ['*'], - - 'exposed_headers' => [], - - 'max_age' => 0, - - 'supports_credentials' => false, - -]; diff --git a/config/features.php b/config/features.php deleted file mode 100644 index d865bac2..00000000 --- a/config/features.php +++ /dev/null @@ -1,60 +0,0 @@ - [ - base_path('resources/views'), - ], - - /* - |-------------------------------------------------------------------------- - | Scanned Features Default Status - |-------------------------------------------------------------------------- - | - | When you use the feature:scan command, new features could be added to the - | system. Be default, this new features are disabled. You can change this - | by setting this value to true instead of false. - | - | By doing so, new added features will be automatically enabled globally. - | - */ - - 'scanned_default_enabled' => true, - - /* - |-------------------------------------------------------------------------- - | Features Repository - |-------------------------------------------------------------------------- - | - | Here you can configure the concrete class you will use to work with - | features. By default, this class is the EloquentFeatureRepository shipped - | with this package. As the name says, it works with Eloquent. - | - | However, you can use a custom feature repository if you want, just by - | creating a new class that implements the FeatureRepositoryInterface. - | - */ - - 'repository' => LaravelFeature\Repository\EloquentFeatureRepository::class, - -]; diff --git a/config/feed.php b/config/feed.php index 1b7b06c1..834370b8 100644 --- a/config/feed.php +++ b/config/feed.php @@ -5,6 +5,7 @@ use App\Models\Thread; return [ + 'feeds' => [ 'forum' => [ /* @@ -30,4 +31,5 @@ 'title' => 'Laravel.cm Forum RSS Feed', ], ], + ]; diff --git a/config/filesystems.php b/config/filesystems.php index 36604361..7b1617f1 100644 --- a/config/filesystems.php +++ b/config/filesystems.php @@ -35,6 +35,7 @@ 'local' => [ 'driver' => 'local', 'root' => storage_path('app'), + 'throw' => false, ], 'public' => [ @@ -42,6 +43,7 @@ 'root' => storage_path('app/public'), 'url' => env('APP_URL').'/storage', 'visibility' => 'public', + 'throw' => false, ], 's3' => [ @@ -52,6 +54,7 @@ 'bucket' => env('AWS_BUCKET'), 'url' => env('AWS_URL'), 'endpoint' => env('AWS_ENDPOINT'), + 'throw' => false, ], 'media' => [ @@ -59,6 +62,7 @@ 'root' => public_path('media'), 'url' => env('APP_URL').'/media', 'visibility' => 'public', + 'throw' => false, ], ], diff --git a/config/gamify.php b/config/gamify.php index 012306b6..91648081 100644 --- a/config/gamify.php +++ b/config/gamify.php @@ -3,6 +3,7 @@ declare(strict_types=1); return [ + // Model which will be having points, generally it will be User 'payee_model' => App\Models\User::class, @@ -36,4 +37,5 @@ // Default level 'badge_default_level' => 1, + ]; diff --git a/config/hashing.php b/config/hashing.php deleted file mode 100644 index e832e1d6..00000000 --- a/config/hashing.php +++ /dev/null @@ -1,54 +0,0 @@ - 'bcrypt', - - /* - |-------------------------------------------------------------------------- - | Bcrypt Options - |-------------------------------------------------------------------------- - | - | Here you may specify the configuration options that should be used when - | passwords are hashed using the Bcrypt algorithm. This will allow you - | to control the amount of time it takes to hash the given password. - | - */ - - 'bcrypt' => [ - 'rounds' => env('BCRYPT_ROUNDS', 10), - ], - - /* - |-------------------------------------------------------------------------- - | Argon Options - |-------------------------------------------------------------------------- - | - | Here you may specify the configuration options that should be used when - | passwords are hashed using the Argon algorithm. These will allow you - | to control the amount of time it takes to hash the given password. - | - */ - - 'argon' => [ - 'memory' => 1024, - 'threads' => 2, - 'time' => 2, - ], - -]; diff --git a/config/health.php b/config/health.php deleted file mode 100644 index d7428800..00000000 --- a/config/health.php +++ /dev/null @@ -1,116 +0,0 @@ - [ - Spatie\Health\ResultStores\EloquentHealthResultStore::class => [ - 'model' => Spatie\Health\Models\HealthCheckResultHistoryItem::class, - 'keep_history_for_days' => 5, - ], - - /* - Spatie\Health\ResultStores\CacheHealthResultStore::class => [ - 'store' => 'file', - ], - - Spatie\Health\ResultStores\JsonFileHealthResultStore::class => [ - 'disk' => 's3', - 'path' => 'health.json', - ], - - Spatie\Health\ResultStores\InMemoryHealthResultStore::class, - */ - ], - - /* - * You can get notified when specific events occur. Out of the box you can use 'mail' and 'slack'. - * For Slack you need to install laravel/slack-notification-channel. - */ - 'notifications' => [ - /* - * Notifications will only get sent if this option is set to `true`. - */ - 'enabled' => true, - - 'notifications' => [ - Spatie\Health\Notifications\CheckFailedNotification::class => ['mail'], - ], - - /* - * Here you can specify the notifiable to which the notifications should be sent. The default - * notifiable will use the variables specified in this config file. - */ - 'notifiable' => Spatie\Health\Notifications\Notifiable::class, - - /* - * When checks start failing, you could potentially end up getting - * a notification every minute. - * - * With this setting, notifications are throttled. By default, you'll - * only get one notification per hour. - */ - 'throttle_notifications_for_minutes' => 60, - - 'mail' => [ - 'to' => 'arthur@laravel.cm', - - 'from' => [ - 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), - 'name' => env('MAIL_FROM_NAME', 'Example'), - ], - ], - - 'slack' => [ - 'webhook_url' => config('logging.channels.slack.url', ''), - - /* - * If this is set to null the default channel of the webhook will be used. - */ - 'channel' => '#laravelcm-health', - - 'username' => 'laravelcm', - - 'icon' => '/images/favicons/mstile-150x150.png', - ], - ], - - /* - * You can let Oh Dear monitor the results of all health checks. This way, you'll - * get notified of any problems even if your application goes totally down. Via - * Oh Dear, you can also have access to more advanced notification options. - */ - 'oh_dear_endpoint' => [ - 'enabled' => false, - - /* - * When this option is enabled, the checks will run before sending a response. - * Otherwise, we'll send the results from the last time the checks have run. - */ - 'always_send_fresh_results' => true, - - /* - * The secret that is displayed at the Application Health settings at Oh Dear. - */ - 'secret' => env('OH_DEAR_HEALTH_CHECK_SECRET'), - - /* - * The URL that should be configured in the Application health settings at Oh Dear. - */ - 'url' => '/oh-dear-health-check-results', - ], - - /* - * You can set a theme for the local results page - * - * - light: light mode - * - dark: dark mode - */ - 'theme' => 'dark', -]; diff --git a/config/logging.php b/config/logging.php deleted file mode 100644 index 2fdc2c0a..00000000 --- a/config/logging.php +++ /dev/null @@ -1,107 +0,0 @@ - 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' => [ - 'driver' => 'stack', - 'channels' => ['single'], - 'ignore_exceptions' => false, - ], - - 'single' => [ - 'driver' => 'single', - 'path' => storage_path('logs/laravel.log'), - 'level' => env('LOG_LEVEL', 'debug'), - ], - - 'daily' => [ - 'driver' => 'daily', - 'path' => storage_path('logs/laravel.log'), - 'level' => env('LOG_LEVEL', 'debug'), - 'days' => 14, - ], - - 'slack' => [ - 'driver' => 'slack', - 'url' => env('LOG_SLACK_WEBHOOK_URL'), - 'username' => 'Laravel Log', - 'emoji' => ':boom:', - 'level' => env('LOG_LEVEL', 'critical'), - ], - - 'papertrail' => [ - 'driver' => 'monolog', - 'level' => env('LOG_LEVEL', 'debug'), - 'handler' => SyslogUdpHandler::class, - 'handler_with' => [ - 'host' => env('PAPERTRAIL_URL'), - 'port' => env('PAPERTRAIL_PORT'), - ], - ], - - 'stderr' => [ - 'driver' => 'monolog', - 'level' => env('LOG_LEVEL', 'debug'), - 'handler' => StreamHandler::class, - 'formatter' => env('LOG_STDERR_FORMATTER'), - 'with' => [ - 'stream' => 'php://stderr', - ], - ], - - 'syslog' => [ - 'driver' => 'syslog', - 'level' => env('LOG_LEVEL', 'debug'), - ], - - 'errorlog' => [ - 'driver' => 'errorlog', - 'level' => env('LOG_LEVEL', 'debug'), - ], - - 'null' => [ - 'driver' => 'monolog', - 'handler' => NullHandler::class, - ], - - 'emergency' => [ - 'path' => storage_path('logs/laravel.log'), - ], - ], - -]; diff --git a/config/mail.php b/config/mail.php deleted file mode 100644 index b12edf1f..00000000 --- a/config/mail.php +++ /dev/null @@ -1,112 +0,0 @@ - env('MAIL_MAILER', 'smtp'), - - /* - |-------------------------------------------------------------------------- - | Mailer Configurations - |-------------------------------------------------------------------------- - | - | Here you may configure all of the mailers used by your application plus - | their respective settings. Several examples have been configured for - | you and you are free to add your own as your application requires. - | - | Laravel supports a variety of mail "transport" drivers to be used while - | sending an e-mail. You will specify which one you are using for your - | mailers below. You are free to add additional mailers as required. - | - | Supported: "smtp", "sendmail", "mailgun", "ses", - | "postmark", "log", "array" - | - */ - - 'mailers' => [ - 'smtp' => [ - 'transport' => 'smtp', - 'host' => env('MAIL_HOST', 'smtp.mailgun.org'), - 'port' => env('MAIL_PORT', 587), - 'encryption' => env('MAIL_ENCRYPTION', 'tls'), - 'username' => env('MAIL_USERNAME'), - 'password' => env('MAIL_PASSWORD'), - 'timeout' => null, - 'auth_mode' => null, - ], - - 'ses' => [ - 'transport' => 'ses', - ], - - 'mailgun' => [ - 'transport' => 'mailgun', - ], - - 'postmark' => [ - 'transport' => 'postmark', - ], - - 'sendmail' => [ - 'transport' => 'sendmail', - 'path' => '/usr/sbin/sendmail -bs', - ], - - 'log' => [ - 'transport' => 'log', - 'channel' => env('MAIL_LOG_CHANNEL'), - ], - - 'array' => [ - 'transport' => 'array', - ], - ], - - /* - |-------------------------------------------------------------------------- - | 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'), - ], - - /* - |-------------------------------------------------------------------------- - | 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/markdown.php b/config/markdown.php index 89d021e5..cd562f1d 100644 --- a/config/markdown.php +++ b/config/markdown.php @@ -10,9 +10,9 @@ * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ +use App\Markdown\Extensions\TorchlightExtension; use League\CommonMark\Extension\HeadingPermalink\HeadingPermalinkExtension; use League\CommonMark\Extension\Mention\MentionExtension; -use Torchlight\Commonmark\V2\TorchlightExtension; return [ diff --git a/config/permission.php b/config/permission.php index 0ed2706b..18e8bfac 100644 --- a/config/permission.php +++ b/config/permission.php @@ -99,37 +99,69 @@ ], /* - * When set to true the package implements teams using the 'team_foreign_key'. If you want - * the migrations to register the 'team_foreign_key', you must set this to true - * before doing the migration. If you already did the migration then you must make a new - * migration to also add 'team_foreign_key' to 'roles', 'model_has_roles', and - * 'model_has_permissions'(view the latest version of package's migration file) + * When set to true, the method for checking permissions will be registered on the gate. + * Set this to false if you want to implement custom logic for checking permissions. + */ + + 'register_permission_check_method' => true, + + /* + * When set to true, Laravel\Octane\Events\OperationTerminated event listener will be registered + * this will refresh permissions on every TickTerminated, TaskTerminated and RequestTerminated + * NOTE: This should not be needed in most cases, but an Octane/Vapor combination benefited from it. + */ + 'register_octane_reset_listener' => false, + + /* + * Teams Feature. + * When set to true the package implements teams using the 'team_foreign_key'. + * If you want the migrations to register the 'team_foreign_key', you must + * set this to true before doing the migration. + * If you already did the migration then you must make a new migration to also + * add 'team_foreign_key' to 'roles', 'model_has_roles', and 'model_has_permissions' + * (view the latest version of this package's migration file) */ 'teams' => false, /* - * When set to true, the required permission names are added to the exception - * message. This could be considered an information leak in some contexts, so - * the default setting is false here for optimum safety. + * Passport Client Credentials Grant + * When set to true the package will use Passports Client to check permissions + */ + + 'use_passport_client_credentials' => false, + + /* + * When set to true, the required permission names are added to exception messages. + * This could be considered an information leak in some contexts, so the default + * setting is false here for optimum safety. */ 'display_permission_in_exception' => false, /* - * When set to true, the required role names are added to the exception - * message. This could be considered an information leak in some contexts, so - * the default setting is false here for optimum safety. + * When set to true, the required role names are added to exception messages. + * This could be considered an information leak in some contexts, so the default + * setting is false here for optimum safety. */ 'display_role_in_exception' => false, /* * By default wildcard permission lookups are disabled. + * See documentation to understand supported syntax. */ 'enable_wildcard_permission' => false, + /* + * The class to use for interpreting wildcard permissions. + * If you need to modify delimiters, override the class and specify its name here. + */ + // 'permission.wildcard_permission' => Spatie\Permission\WildcardPermission::class, + + /* Cache-specific settings */ + 'cache' => [ /* @@ -137,7 +169,7 @@ * When permissions or roles are updated the cache is flushed automatically. */ - 'expiration_time' => DateInterval::createFromDateString('24 hours'), + 'expiration_time' => \DateInterval::createFromDateString('24 hours'), /* * The cache key used to store all permissions. diff --git a/config/queue.php b/config/queue.php index 485dd985..d28c428f 100644 --- a/config/queue.php +++ b/config/queue.php @@ -9,9 +9,9 @@ | Default Queue Connection Name |-------------------------------------------------------------------------- | - | Laravel's queue API supports an assortment of back-ends via a single - | API, giving you convenient access to each back-end using the same - | syntax for every one. Here you may define a default connection. + | Laravel's queue supports a variety of backends via a single, unified + | API, giving you convenient access to each backend using identical + | syntax for each. The default queue connection is defined below. | */ @@ -22,9 +22,9 @@ | 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. + | Here you may configure the connection options for every queue backend + | used by your application. An example configuration is provided for + | each backend supported by Laravel. You're also free to add more. | | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null" | @@ -38,17 +38,18 @@ 'database' => [ 'driver' => 'database', - 'table' => 'jobs', - 'queue' => 'default', - 'retry_after' => 90, + 'connection' => env('DB_QUEUE_CONNECTION'), + 'table' => env('DB_QUEUE_TABLE', 'jobs'), + 'queue' => env('DB_QUEUE', 'default'), + 'retry_after' => (int) env('DB_QUEUE_RETRY_AFTER', 90), 'after_commit' => false, ], 'beanstalkd' => [ 'driver' => 'beanstalkd', - 'host' => 'localhost', - 'queue' => 'default', - 'retry_after' => 90, + 'host' => env('BEANSTALKD_QUEUE_HOST', 'localhost'), + 'queue' => env('BEANSTALKD_QUEUE', 'default'), + 'retry_after' => (int) env('BEANSTALKD_QUEUE_RETRY_AFTER', 90), 'block_for' => 0, 'after_commit' => false, ], @@ -66,23 +67,41 @@ 'redis' => [ 'driver' => 'redis', - 'connection' => 'default', + 'connection' => env('REDIS_QUEUE_CONNECTION', 'default'), 'queue' => env('REDIS_QUEUE', 'default'), - 'retry_after' => 90, + 'retry_after' => (int) env('REDIS_QUEUE_RETRY_AFTER', 90), 'block_for' => null, 'after_commit' => false, ], ], + /* + |-------------------------------------------------------------------------- + | Job Batching + |-------------------------------------------------------------------------- + | + | The following options configure the database and table that store job + | batching information. These options can be updated to any database + | connection and table which has been defined by your application. + | + */ + + 'batching' => [ + 'database' => env('DB_CONNECTION', 'sqlite'), + 'table' => 'job_batches', + ], + /* |-------------------------------------------------------------------------- | 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. + | can control how and where failed jobs are stored. Laravel ships with + | support for storing failed jobs in a simple file or in a database. + | + | Supported drivers: "database-uuids", "dynamodb", "file", "null" | */ diff --git a/config/sanctum.php b/config/sanctum.php deleted file mode 100644 index 20329bd6..00000000 --- a/config/sanctum.php +++ /dev/null @@ -1,69 +0,0 @@ - explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf( - '%s%s', - 'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1', - Sanctum::currentApplicationUrlWithPort() - ))), - - /* - |-------------------------------------------------------------------------- - | Sanctum Guards - |-------------------------------------------------------------------------- - | - | This array contains the authentication guards that will be checked when - | Sanctum is trying to authenticate a request. If none of these guards - | are able to authenticate the request, Sanctum will use the bearer - | token that's present on an incoming request for authentication. - | - */ - - 'guard' => ['web'], - - /* - |-------------------------------------------------------------------------- - | Expiration Minutes - |-------------------------------------------------------------------------- - | - | This value controls the number of minutes until an issued token will be - | considered expired. If this value is null, personal access tokens do - | not expire. This won't tweak the lifetime of first-party sessions. - | - */ - - 'expiration' => 129600, - - /* - |-------------------------------------------------------------------------- - | Sanctum Middleware - |-------------------------------------------------------------------------- - | - | When authenticating your first-party SPA with Sanctum you may need to - | customize some of the middleware Sanctum uses while processing the - | request. You may change the middleware listed below as required. - | - */ - - 'middleware' => [ - 'verify_csrf_token' => App\Http\Middleware\VerifyCsrfToken::class, - 'encrypt_cookies' => App\Http\Middleware\EncryptCookies::class, - ], - -]; diff --git a/config/sentry.php b/config/sentry.php deleted file mode 100644 index e7a69b2a..00000000 --- a/config/sentry.php +++ /dev/null @@ -1,59 +0,0 @@ - env('SENTRY_LARAVEL_DSN', env('SENTRY_DSN')), - - // capture release as git sha - // 'release' => trim(exec('git --git-dir ' . base_path('.git') . ' log --pretty="%h" -n1 HEAD')), - - // When left empty or `null` the Laravel environment will be used - 'environment' => env('SENTRY_ENVIRONMENT'), - - 'breadcrumbs' => [ - // Capture Laravel logs in breadcrumbs - 'logs' => true, - - // Capture SQL queries in breadcrumbs - 'sql_queries' => true, - - // Capture bindings on SQL queries logged in breadcrumbs - 'sql_bindings' => true, - - // Capture queue job information in breadcrumbs - 'queue_info' => true, - - // Capture command information in breadcrumbs - 'command_info' => true, - ], - - 'tracing' => [ - // Trace queue jobs as their own transactions - 'queue_job_transactions' => env('SENTRY_TRACE_QUEUE_ENABLED', false), - - // Capture queue jobs as spans when executed on the sync driver - 'queue_jobs' => true, - - // Capture SQL queries as spans - 'sql_queries' => true, - - // Try to find out where the SQL query originated from and add it to the query spans - 'sql_origin' => true, - - // Capture views as spans - 'views' => true, - - // Indicates if the tracing integrations supplied by Sentry should be loaded - 'default_integrations' => true, - ], - - // @see: https://docs.sentry.io/platforms/php/configuration/options/#send-default-pii - 'send_default_pii' => false, - - 'traces_sample_rate' => (float) (env('SENTRY_TRACES_SAMPLE_RATE', 0.0)), - - 'controllers_base_namespace' => env('SENTRY_CONTROLLERS_BASE_NAMESPACE', 'App\\Http\\Controllers'), - -]; diff --git a/config/telescope.php b/config/telescope.php deleted file mode 100644 index f26ea081..00000000 --- a/config/telescope.php +++ /dev/null @@ -1,182 +0,0 @@ - env('TELESCOPE_DOMAIN', null), - - /* - |-------------------------------------------------------------------------- - | Telescope Path - |-------------------------------------------------------------------------- - | - | This is the URI path where Telescope will be accessible from. Feel free - | to change this path to anything you like. Note that the URI will not - | affect the paths of its internal API that aren't exposed to users. - | - */ - - 'path' => env('TELESCOPE_PATH', 'telescope'), - - /* - |-------------------------------------------------------------------------- - | Telescope Storage Driver - |-------------------------------------------------------------------------- - | - | This configuration options determines the storage driver that will - | be used to store Telescope's data. In addition, you may set any - | custom options as needed by the particular driver you choose. - | - */ - - 'driver' => env('TELESCOPE_DRIVER', 'database'), - - 'storage' => [ - 'database' => [ - 'connection' => env('DB_CONNECTION', 'mysql'), - 'chunk' => 1000, - ], - ], - - /* - |-------------------------------------------------------------------------- - | Telescope Master Switch - |-------------------------------------------------------------------------- - | - | This option may be used to disable all Telescope watchers regardless - | of their individual configuration, which simply provides a single - | and convenient way to enable or disable Telescope data storage. - | - */ - - 'enabled' => env('TELESCOPE_ENABLED', true), - - /* - |-------------------------------------------------------------------------- - | Telescope Route Middleware - |-------------------------------------------------------------------------- - | - | These middleware will be assigned to every Telescope route, giving you - | the chance to add your own middleware to this list or change any of - | the existing middleware. Or, you can simply stick with this list. - | - */ - - 'middleware' => [ - 'web', - Authorize::class, - ], - - /* - |-------------------------------------------------------------------------- - | Allowed / Ignored Paths & Commands - |-------------------------------------------------------------------------- - | - | The following array lists the URI paths and Artisan commands that will - | not be watched by Telescope. In addition to this list, some Laravel - | commands, like migrations and queue commands, are always ignored. - | - */ - - 'only_paths' => [ - // 'api/*' - ], - - 'ignore_paths' => [ - 'nova-api*', - ], - - 'ignore_commands' => [ - - ], - - /* - |-------------------------------------------------------------------------- - | Telescope Watchers - |-------------------------------------------------------------------------- - | - | The following array lists the "watchers" that will be registered with - | Telescope. The watchers gather the application's profile data when - | a request or task is executed. Feel free to customize this list. - | - */ - - 'watchers' => [ - Watchers\BatchWatcher::class => env('TELESCOPE_BATCH_WATCHER', true), - - Watchers\CacheWatcher::class => [ - 'enabled' => env('TELESCOPE_CACHE_WATCHER', true), - 'hidden' => [], - ], - - Watchers\ClientRequestWatcher::class => env('TELESCOPE_CLIENT_REQUEST_WATCHER', true), - - Watchers\CommandWatcher::class => [ - 'enabled' => env('TELESCOPE_COMMAND_WATCHER', true), - 'ignore' => [], - ], - - Watchers\DumpWatcher::class => [ - 'enabled' => env('TELESCOPE_DUMP_WATCHER', true), - 'always' => env('TELESCOPE_DUMP_WATCHER_ALWAYS', false), - ], - - Watchers\EventWatcher::class => [ - 'enabled' => env('TELESCOPE_EVENT_WATCHER', true), - 'ignore' => [], - ], - - Watchers\ExceptionWatcher::class => env('TELESCOPE_EXCEPTION_WATCHER', true), - - Watchers\GateWatcher::class => [ - 'enabled' => env('TELESCOPE_GATE_WATCHER', true), - 'ignore_abilities' => [], - 'ignore_packages' => true, - ], - - Watchers\JobWatcher::class => env('TELESCOPE_JOB_WATCHER', true), - Watchers\LogWatcher::class => env('TELESCOPE_LOG_WATCHER', true), - Watchers\MailWatcher::class => env('TELESCOPE_MAIL_WATCHER', true), - - Watchers\ModelWatcher::class => [ - 'enabled' => env('TELESCOPE_MODEL_WATCHER', true), - 'events' => ['eloquent.*'], - 'hydrations' => true, - ], - - Watchers\NotificationWatcher::class => env('TELESCOPE_NOTIFICATION_WATCHER', true), - - Watchers\QueryWatcher::class => [ - 'enabled' => env('TELESCOPE_QUERY_WATCHER', true), - 'ignore_packages' => true, - 'slow' => 100, - ], - - Watchers\RedisWatcher::class => env('TELESCOPE_REDIS_WATCHER', true), - - Watchers\RequestWatcher::class => [ - 'enabled' => env('TELESCOPE_REQUEST_WATCHER', true), - 'size_limit' => env('TELESCOPE_RESPONSE_SIZE_LIMIT', 64), - 'ignore_http_methods' => [], - 'ignore_status_codes' => [], - ], - - Watchers\ScheduleWatcher::class => env('TELESCOPE_SCHEDULE_WATCHER', true), - Watchers\ViewWatcher::class => env('TELESCOPE_VIEW_WATCHER', true), - ], -]; diff --git a/config/view.php b/config/view.php deleted file mode 100644 index d9c90c04..00000000 --- a/config/view.php +++ /dev/null @@ -1,38 +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/migrations/2021_09_14_172248_create_permission_tables.php b/database/migrations/2021_09_14_172248_create_permission_tables.php index 2bc98601..db09a3dc 100644 --- a/database/migrations/2021_09_14_172248_create_permission_tables.php +++ b/database/migrations/2021_09_14_172248_create_permission_tables.php @@ -5,7 +5,6 @@ use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; -use Spatie\Permission\PermissionRegistrar; final class CreatePermissionTables extends Migration { @@ -14,6 +13,8 @@ public function up(): void $tableNames = config('permission.table_names'); $columnNames = config('permission.column_names'); $teams = config('permission.teams'); + $pivotRole = $columnNames['role_pivot_key'] ?? 'role_id'; + $pivotPermission = $columnNames['permission_pivot_key'] ?? 'permission_id'; if (empty($tableNames)) { throw new Exception('Error: config/permission.php not loaded. Run [php artisan config:clear] and try again.'); @@ -47,14 +48,14 @@ public function up(): void } }); - Schema::create($tableNames['model_has_permissions'], function (Blueprint $table) use ($tableNames, $columnNames, $teams): void { - $table->unsignedBigInteger(PermissionRegistrar::$pivotPermission); + Schema::create($tableNames['model_has_permissions'], function (Blueprint $table) use ($tableNames, $columnNames, $pivotPermission, $teams): void { + $table->unsignedBigInteger($pivotPermission); $table->string('model_type'); $table->unsignedBigInteger($columnNames['model_morph_key']); $table->index([$columnNames['model_morph_key'], 'model_type'], 'model_has_permissions_model_id_model_type_index'); - $table->foreign(PermissionRegistrar::$pivotPermission) + $table->foreign($pivotPermission) ->references('id') ->on($tableNames['permissions']) ->onDelete('cascade'); @@ -63,25 +64,25 @@ public function up(): void $table->index($columnNames['team_foreign_key'], 'model_has_permissions_team_foreign_key_index'); $table->primary( - [$columnNames['team_foreign_key'], PermissionRegistrar::$pivotPermission, $columnNames['model_morph_key'], 'model_type'], + [$columnNames['team_foreign_key'], $pivotPermission, $columnNames['model_morph_key'], 'model_type'], 'model_has_permissions_permission_model_type_primary' ); } else { $table->primary( - [PermissionRegistrar::$pivotPermission, $columnNames['model_morph_key'], 'model_type'], + [$pivotPermission, $columnNames['model_morph_key'], 'model_type'], 'model_has_permissions_permission_model_type_primary' ); } }); - Schema::create($tableNames['model_has_roles'], function (Blueprint $table) use ($tableNames, $columnNames, $teams): void { - $table->unsignedBigInteger(PermissionRegistrar::$pivotRole); + Schema::create($tableNames['model_has_roles'], function (Blueprint $table) use ($tableNames, $columnNames, $pivotRole, $teams): void { + $table->unsignedBigInteger($pivotRole); $table->string('model_type'); $table->unsignedBigInteger($columnNames['model_morph_key']); $table->index([$columnNames['model_morph_key'], 'model_type'], 'model_has_roles_model_id_model_type_index'); - $table->foreign(PermissionRegistrar::$pivotRole) + $table->foreign($pivotRole) ->references('id') ->on($tableNames['roles']) ->onDelete('cascade'); @@ -90,32 +91,32 @@ public function up(): void $table->index($columnNames['team_foreign_key'], 'model_has_roles_team_foreign_key_index'); $table->primary( - [$columnNames['team_foreign_key'], PermissionRegistrar::$pivotRole, $columnNames['model_morph_key'], 'model_type'], + [$columnNames['team_foreign_key'], $pivotRole, $columnNames['model_morph_key'], 'model_type'], 'model_has_roles_role_model_type_primary' ); } else { $table->primary( - [PermissionRegistrar::$pivotRole, $columnNames['model_morph_key'], 'model_type'], + [$pivotRole, $columnNames['model_morph_key'], 'model_type'], 'model_has_roles_role_model_type_primary' ); } }); - Schema::create($tableNames['role_has_permissions'], function (Blueprint $table) use ($tableNames): void { - $table->unsignedBigInteger(PermissionRegistrar::$pivotPermission); - $table->unsignedBigInteger(PermissionRegistrar::$pivotRole); + Schema::create($tableNames['role_has_permissions'], function (Blueprint $table) use ($tableNames, $pivotRole, $pivotPermission): void { + $table->unsignedBigInteger($pivotPermission); + $table->unsignedBigInteger($pivotRole); - $table->foreign(PermissionRegistrar::$pivotPermission) + $table->foreign($pivotPermission) ->references('id') ->on($tableNames['permissions']) ->onDelete('cascade'); - $table->foreign(PermissionRegistrar::$pivotRole) + $table->foreign($pivotRole) ->references('id') ->on($tableNames['roles']) ->onDelete('cascade'); - $table->primary([PermissionRegistrar::$pivotPermission, PermissionRegistrar::$pivotRole], 'role_has_permissions_permission_id_role_id_primary'); + $table->primary([$pivotPermission, $pivotRole], 'role_has_permissions_permission_id_role_id_primary'); }); app('cache') diff --git a/public/css/awcodes/filament-badgeable-column/filament-badgeable-column.css b/public/css/awcodes/filament-badgeable-column/filament-badgeable-column.css new file mode 100644 index 00000000..8077336e --- /dev/null +++ b/public/css/awcodes/filament-badgeable-column/filament-badgeable-column.css @@ -0,0 +1 @@ +.badgeable-column-badge .truncate{overflow: visible !important;} diff --git a/public/images/brands/5a1485a29a1b6a93c234a195defb2dab--angel-wing-tattoos-eye-tattoos.jpg b/public/images/brands/5a1485a29a1b6a93c234a195defb2dab--angel-wing-tattoos-eye-tattoos.jpg deleted file mode 100644 index 2f033856..00000000 Binary files a/public/images/brands/5a1485a29a1b6a93c234a195defb2dab--angel-wing-tattoos-eye-tattoos.jpg and /dev/null differ diff --git a/public/images/brands/FTw0p0jXoAAzayz.jpeg b/public/images/brands/FTw0p0jXoAAzayz.jpeg deleted file mode 100644 index c8f99fcb..00000000 Binary files a/public/images/brands/FTw0p0jXoAAzayz.jpeg and /dev/null differ diff --git a/public/images/brands/discord.svg b/public/images/brands/discord.svg deleted file mode 100644 index d81da09a..00000000 --- a/public/images/brands/discord.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/images/brands/telegram.svg b/public/images/brands/telegram.svg deleted file mode 100644 index 6f88d42b..00000000 --- a/public/images/brands/telegram.svg +++ /dev/null @@ -1 +0,0 @@ -Telegram_logo \ No newline at end of file diff --git a/public/images/brands/whatsapp.svg b/public/images/brands/whatsapp.svg deleted file mode 100644 index 58b08b8b..00000000 --- a/public/images/brands/whatsapp.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/images/filament-icon.png b/public/images/filament-icon.png new file mode 100644 index 00000000..76487cd8 Binary files /dev/null and b/public/images/filament-icon.png differ diff --git a/public/images/illustration.svg b/public/images/illustration.svg deleted file mode 100755 index b613ffb1..00000000 --- a/public/images/illustration.svg +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/public/index.php b/public/index.php index d6b86024..d55a3b2c 100755 --- a/public/index.php +++ b/public/index.php @@ -2,56 +2,18 @@ declare(strict_types=1); -use Illuminate\Contracts\Http\Kernel; use Illuminate\Http\Request; define('LARAVEL_START', microtime(true)); -/* -|-------------------------------------------------------------------------- -| Check If The Application Is Under Maintenance -|-------------------------------------------------------------------------- -| -| If the application is in maintenance / demo mode via the "down" command -| we will load this file so that any pre-rendered content can be shown -| instead of starting the framework, which could cause an exception. -| -*/ - -if (file_exists(__DIR__.'/../storage/framework/maintenance.php')) { - require __DIR__.'/../storage/framework/maintenance.php'; +// Determine if the application is in maintenance mode... +if (file_exists($maintenance = __DIR__.'/../storage/framework/maintenance.php')) { + require $maintenance; } -/* -|-------------------------------------------------------------------------- -| Register The Auto Loader -|-------------------------------------------------------------------------- -| -| Composer provides a convenient, automatically generated class loader for -| this application. We just need to utilize it! We'll simply require it -| into the script here so we don't need to manually load our classes. -| -*/ - +// Register the Composer autoloader... require __DIR__.'/../vendor/autoload.php'; -/* -|-------------------------------------------------------------------------- -| Run The Application -|-------------------------------------------------------------------------- -| -| Once we have the application, we can handle the incoming request using -| the application's HTTP kernel. Then, we will send the response back -| to this client's browser, allowing them to enjoy our application. -| -*/ - -$app = require_once __DIR__.'/../bootstrap/app.php'; - -$kernel = $app->make(Kernel::class); - -$response = tap($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/filament/admin/theme.css b/resources/css/filament/admin/theme.css index 1d282412..b1deb92b 100644 --- a/resources/css/filament/admin/theme.css +++ b/resources/css/filament/admin/theme.css @@ -1,3 +1,54 @@ -@import '../../../../vendor/filament/filament/resources/css/theme.css'; +@import '/vendor/filament/filament/resources/css/theme.css'; @config './tailwind.config.js'; + +.fi-body { + .fi-simple-header .fi-logo { + @apply h-16 !important; + > svg { + @apply h-full; + } + } + + &.fi-panel-admin { + @apply bg-gray-50 dark:bg-gray-900; + .fi-sidebar-header { + @apply bg-transparent ring-0 ring-transparent lg:shadow-none; + .fi-logo { + @apply h-10 !important; + > svg { + @apply h-full; + } + } + } + + .fi-topbar { + > nav { + @apply shadow-none ring-0 ring-transparent bg-transparent; + } + } + + .fi-sidebar-nav { + @apply px-0; + + .fi-sidebar-nav-groups { + @apply px-2; + } + + .fi-sidebar-item { + @apply border-l-4 border-transparent rounded-none hover:bg-gray-100/50 hover:border-gray-200 dark:hover:bg-gray-900 dark:hover:border-gray-700; + &.fi-active { + @apply border-primary-400 hover:border-primary-400; + } + } + + .fi-sidebar-item-button, .fi-sidebar-group-button { + @apply bg-transparent px-5; + } + } + + .fi-main-ctn { + @apply bg-transparent; + } + } +} diff --git a/resources/views/components/brand/icon.blade.php b/resources/views/components/brand/icon.blade.php index a542c64f..9b85e4e3 100644 --- a/resources/views/components/brand/icon.blade.php +++ b/resources/views/components/brand/icon.blade.php @@ -1,11 +1,4 @@ - + diff --git a/resources/views/components/dropdown-profile.blade.php b/resources/views/components/dropdown-profile.blade.php index 6c19f870..f043ef21 100644 --- a/resources/views/components/dropdown-profile.blade.php +++ b/resources/views/components/dropdown-profile.blade.php @@ -52,19 +52,15 @@ class="absolute -right-4 mt-2 w-60 origin-top-right divide-y divide-gray-200 dar

- @if ($user->hasRole(['admin', 'moderator'])) + @if ($user->isAdmin() || $user->isModerator())
diff --git a/resources/views/components/markdown-content.blade.php b/resources/views/components/markdown-content.blade.php index d941df48..f0c0c4e5 100644 --- a/resources/views/components/markdown-content.blade.php +++ b/resources/views/components/markdown-content.blade.php @@ -3,5 +3,5 @@ ])
- {!! replace_links(\App\Markdown\MarkdownHelper::parseLiquidTags(Markdown::convert($content))) !!} + {!! replace_links(\App\Markdown\MarkdownHelper::parseLiquidTags(\GrahamCampbell\Markdown\Facades\Markdown::convert($content))) !!}
diff --git a/resources/views/filament/brand.blade.php b/resources/views/filament/brand.blade.php new file mode 100644 index 00000000..c56b8cf1 --- /dev/null +++ b/resources/views/filament/brand.blade.php @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php index 8446ffb5..319060db 100644 --- a/resources/views/home.blade.php +++ b/resources/views/home.blade.php @@ -251,91 +251,4 @@ class="absolute inset-x-0 top-0 h-32 bg-gradient-to-b from-black xl:inset-y-0 xl - - @feature('premium') - @if ($plans->count() > 0) -
- -
-
-
-
- - - -

Premium

-
-

- Accès illimité avec un abonnement premium -

-

- Devenir premium c'est soutenir la communauté, les nouveaux contenus chaque semaine et - accéder à du contenu exclusif pour apprendre et progresser. -

-
-
- @foreach ($plans as $plan) -
-
-

- {{ $plan->title }} -

- @if ($plan->slug === 'le-pro') -

-

- @endif - -

- - - - /mois -

- - -
    - @foreach ($plan->features as $feature) -
  • -
  • - @endforeach -
-
- - Souscrire Maintenant -
- @endforeach -
-
-
-
- @endif - @endfeature diff --git a/resources/views/vendor/filament/components/logo.blade.php b/resources/views/vendor/filament/components/logo.blade.php deleted file mode 100644 index 86c22f76..00000000 --- a/resources/views/vendor/filament/components/logo.blade.php +++ /dev/null @@ -1 +0,0 @@ -Laravel.cm diff --git a/routes/channels.php b/routes/channels.php deleted file mode 100644 index 078ca2e3..00000000 --- a/routes/channels.php +++ /dev/null @@ -1,11 +0,0 @@ - $user->id === $id -); diff --git a/routes/console.php b/routes/console.php new file mode 100644 index 00000000..c476778d --- /dev/null +++ b/routes/console.php @@ -0,0 +1,10 @@ +comment(Inspiring::quote()); +})->purpose('Display an inspiring quote')->hourly(); diff --git a/tailwind.config.js b/tailwind.config.js index 6d5e4bf2..12acd614 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -17,6 +17,7 @@ export default { './storage/framework/views/*.php', './vendor/filament/**/*.blade.php', './vendor/wire-elements/modal/resources/views/*.blade.php', + './vendor/awcodes/filament-badgeable-column/resources/**/*.blade.php', ], safelist: [ { diff --git a/tests/CreatesApplication.php b/tests/CreatesApplication.php deleted file mode 100644 index b2b52cc8..00000000 --- a/tests/CreatesApplication.php +++ /dev/null @@ -1,20 +0,0 @@ -make(Kernel::class)->bootstrap(); - - return $app; - } -} diff --git a/tests/CreatesUsers.php b/tests/CreatesUsers.php index 9defac36..b5da92a1 100644 --- a/tests/CreatesUsers.php +++ b/tests/CreatesUsers.php @@ -5,7 +5,6 @@ namespace Tests; use App\Models\User; -use Spatie\Permission\Models\Role; trait CreatesUsers { @@ -32,12 +31,4 @@ protected function createUser(array $attributes = []): User 'password' => bcrypt('password'), ], $attributes)); } - - public function createAndAssignRole(string $role, User $user): User - { - Role::create(['name' => $role]); - $this->createUser(['name' => $role, 'email' => $role.'@example.com']); - - return $user->assignRole($role); - } } diff --git a/tests/Feature/Article/PostArticleToTwitterTest.php b/tests/Feature/Article/PostArticleToTwitterTest.php index e5ffa397..9a36aba9 100644 --- a/tests/Feature/Article/PostArticleToTwitterTest.php +++ b/tests/Feature/Article/PostArticleToTwitterTest.php @@ -2,17 +2,17 @@ declare(strict_types=1); +use App\Console\Commands\PostArticleToTwitter; use App\Models\Article; -use Spatie\TestTime\TestTime; use Illuminate\Support\Facades\Notification; -use App\Console\Commands\PostArticleToTwitter; +use Spatie\TestTime\TestTime; -beforeEach(fn () => -Notification::fake(), -TestTime::freeze('Y-m-d H:i:s', '2021-05-01 00:00:01') +beforeEach( + fn () => Notification::fake(), + TestTime::freeze('Y-m-d H:i:s', '2021-05-01 00:00:01') ); -describe(PostArticleToTwitter::class, function() { +describe(PostArticleToTwitter::class, function (): void { it('shares one article on Twitter every 4 hours when the artisan command runs', function (): void { Article::factory()->createMany([ ['submitted_at' => now()], @@ -20,31 +20,31 @@ ['submitted_at' => now(), 'approved_at' => now(), 'published_at' => now()->addHours(1)], ['submitted_at' => now(), 'declined_at' => now()], ]); - + $this->assertDatabaseCount('articles', 4); - + $this->artisan(PostArticleToTwitter::class)->assertExitCode(0); - Notification::assertCount(1); - + Notification::assertCount(1); + TestTime::addHours(4); $this->artisan(PostArticleToTwitter::class)->assertExitCode(0); - Notification::assertCount(2); - + Notification::assertCount(2); + TestTime::addHours(4); $this->artisan(PostArticleToTwitter::class)->assertExitCode(0); Notification::assertCount(2); }); - + it('will not send article when there are not articles to share', function (): void { Article::factory()->createMany([ - ['submitted_at' => now(),'approved_at' => now(),'shared_at' => now()], - ['submitted_at' => now(),'approved_at' => now(),'shared_at' => now()], + ['submitted_at' => now(), 'approved_at' => now(), 'shared_at' => now()], + ['submitted_at' => now(), 'approved_at' => now(), 'shared_at' => now()], ]); - + $this->assertDatabaseCount('articles', 2); $this->artisan(PostArticleToTwitter::class)->assertExitCode(0); - + Notification::assertNothingSent(); Notification::assertCount(0); }); -}); \ No newline at end of file +}); diff --git a/tests/Feature/Filament/ArticleTest.php b/tests/Feature/Filament/ArticleResourceTest.php similarity index 90% rename from tests/Feature/Filament/ArticleTest.php rename to tests/Feature/Filament/ArticleResourceTest.php index 8b907bd2..1d373069 100644 --- a/tests/Feature/Filament/ArticleTest.php +++ b/tests/Feature/Filament/ArticleResourceTest.php @@ -7,7 +7,7 @@ use Livewire\Livewire; beforeEach(function (): void { - $this->user = $this->login(); + $this->user = $this->login(['email' => 'joe@laravel.cm']); $this->articles = Article::factory()->count(10)->create([ 'submitted_at' => now(), ]); @@ -17,7 +17,7 @@ it('page can display table with records', function (): void { Livewire::test(ArticleResource\Pages\ListArticles::class) ->assertCanSeeTableRecords($this->articles); - }); + })->group('articles'); it('admin user can approved article', function (): void { $article = $this->articles->first(); @@ -28,7 +28,7 @@ $article->refresh(); expect($article->approved_at) - ->not + ->not() ->toBe(null) ->and($article->declined_at) ->toBe(null); @@ -36,7 +36,7 @@ Livewire::test(ArticleResource\Pages\ListArticles::class) ->assertTableActionHidden('approved', $article) ->assertTableActionHidden('declined', $article); - }); + })->group('articles'); it('admin user can declined article', function (): void { $article = $this->articles->first(); @@ -56,5 +56,5 @@ ->assertTableActionHidden('approved', $article) ->assertTableActionHidden('declined', $article); - }); -})->group('articles'); + })->group('articles'); +}); diff --git a/tests/Feature/Filament/ChannelTest.php b/tests/Feature/Filament/ChannelResourceTest.php similarity index 84% rename from tests/Feature/Filament/ChannelTest.php rename to tests/Feature/Filament/ChannelResourceTest.php index 70b8a29a..d92b27f9 100644 --- a/tests/Feature/Filament/ChannelTest.php +++ b/tests/Feature/Filament/ChannelResourceTest.php @@ -10,7 +10,7 @@ use Livewire\Livewire; beforeEach(function (): void { - $this->user = $this->login(); + $this->user = $this->login(['email' => 'joe@laravel.cm']); }); describe(ChannelResource::class, function (): void { @@ -31,11 +31,12 @@ ->assertHasNoActionErrors() ->assertStatus(200); - $channel = Channel::first(); + $channel = Channel::query()->first(); expect($channel) ->toBeInstanceOf(Channel::class) - ->and($channel->name)->toBe($name); + ->and($channel->name) + ->toBe($name); }); it('Admin user can edit channel', function (): void { @@ -44,13 +45,13 @@ Livewire::test(ListChannels::class) ->callTableAction(EditAction::class, $channel, data: [ 'name' => 'Edited channel', + 'color' => '#FFFFFF', ]) ->assertHasNoTableActionErrors(); $channel->refresh(); - expect($channel->name) - ->toBe('Edited channel'); + expect($channel->name)->toBe('Edited channel'); }); })->group('channels'); diff --git a/tests/Feature/Filament/DiscussionTest.php b/tests/Feature/Filament/DiscussionResourceTest.php similarity index 95% rename from tests/Feature/Filament/DiscussionTest.php rename to tests/Feature/Filament/DiscussionResourceTest.php index e82c5d22..6328a04a 100644 --- a/tests/Feature/Filament/DiscussionTest.php +++ b/tests/Feature/Filament/DiscussionResourceTest.php @@ -9,7 +9,7 @@ use Livewire\Livewire; beforeEach(function (): void { - $this->user = $this->login(); + $this->user = $this->login(['email' => 'joe@laravel.cm']); $this->discussions = Discussion::factory() ->count(10) ->state(new Sequence( diff --git a/tests/Feature/Filament/TagTest.php b/tests/Feature/Filament/TagResourceTest.php similarity index 94% rename from tests/Feature/Filament/TagTest.php rename to tests/Feature/Filament/TagResourceTest.php index e25ac739..de528deb 100644 --- a/tests/Feature/Filament/TagTest.php +++ b/tests/Feature/Filament/TagResourceTest.php @@ -11,7 +11,7 @@ use Livewire\Livewire; beforeEach(function (): void { - $this->user = $this->login(); + $this->user = $this->login(['email' => 'joe@laravel.cm']); $this->tags = Tag::factory() ->count(10) ->state(new Sequence( @@ -63,8 +63,7 @@ $tag->refresh(); - expect($tag->name) - ->toBe('Edited tag'); + expect($tag->name)->toBe('Edited tag'); }); })->group('tags'); diff --git a/tests/Feature/Filament/UserTest.php b/tests/Feature/Filament/UserTest.php deleted file mode 100644 index 40013b1f..00000000 --- a/tests/Feature/Filament/UserTest.php +++ /dev/null @@ -1,39 +0,0 @@ -user = $this->login(); -}); - -describe(UserResource::class, function (): void { - it('page can display table with records without admin', function (): void { - $users = User::factory() - ->count(5) - ->create(); - - $this->createAndAssignRole('admin', User::first()); - - Livewire::test(ListUsers::class) - ->assertCanSeeTableRecords($users) - ->assertCountTableRecords(6); - }); - - it('page can display table with records without moderator', function (): void { - $users = User::factory() - ->count(3) - ->create(); - - $this->createAndAssignRole('moderator', User::first()); - - Livewire::test(ListUsers::class) - ->assertCanSeeTableRecords($users) - ->assertCountTableRecords(4); - }); -})->group('users'); diff --git a/tests/TestCase.php b/tests/TestCase.php index 0bc1eb94..4cf3dd08 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -5,17 +5,16 @@ namespace Tests; use Illuminate\Foundation\Testing\TestCase as BaseTestCase; -use Illuminate\Support\Facades\Artisan; +use Illuminate\Support\Facades\App; abstract class TestCase extends BaseTestCase { - use CreatesApplication; use CreatesUsers; protected function setUp(): void { parent::setUp(); - Artisan::call('config:clear'); + App::setLocale('fr'); } } diff --git a/tests/Unit/.gitkeep b/tests/Unit/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/tests/Unit/BasicArchitectureTest.php b/tests/Unit/BasicArchitectureTest.php new file mode 100644 index 00000000..56683ae0 --- /dev/null +++ b/tests/Unit/BasicArchitectureTest.php @@ -0,0 +1,9 @@ +expect(['dd', 'dump']) + ->not->toBeUsed(); +})->group('architecture');