diff --git a/.github/workflows/deploy-main.yml b/.github/workflows/deploy-main.yml index 8704076..52bb52f 100644 --- a/.github/workflows/deploy-main.yml +++ b/.github/workflows/deploy-main.yml @@ -2,24 +2,36 @@ name: CI/CD - Crudzaso on: push: - branches: [ main ] + branches: + - main jobs: build-and-deploy: runs-on: ubuntu-latest steps: - - name: executing remote ssh commands using password - uses: appleboy/ssh-action@v0.1.6 + - name: Checkout Repository + uses: actions/checkout@v4 with: - host: ${{ secrets.SERVER_HOST }} - username: ${{ secrets.SERVER_USER }} - key: ${{ secrets.SERVER_SSH_KEY }} - script: | - cd "${{ secrets.PATH }}" - git pull origin main - git fetch - echo '${{ secrets.ENV_FILE }}' > .env - composer i - composer dump-autoload - php artisan migrate:fresh --seed - php artisan optimize:clear \ No newline at end of file + token: ${{ secrets.GH_PAT }} + + - name: Set up SSH Agent + uses: webfactory/ssh-agent@v0.9.0 + with: + ssh-private-key: ${{ secrets.SSH_KEY_SERVER }} + + - name: Deploy Application + run: | + ssh -o StrictHostKeyChecking=no ${{ secrets.USERNAME_SERVER }}@${{ secrets.HOST_SERVER }} << 'EOF' + git config --global --add safe.directory /var/www/gananza + cd ${{ secrets.PATH }} + git pull origin main + echo '${{ secrets.ENV_FILE }}' > .env + composer install --no-dev --optimize-autoloader + npm install + npm run build + php artisan migrate --force + php artisan optimize:clear + php artisan config:cache + php artisan cache:clear + php artisan config:clear + EOF diff --git a/Modules/Lottery/app/Models/Lottery.php b/Modules/Lottery/app/Models/Lottery.php index 5200822..1471e4c 100644 --- a/Modules/Lottery/app/Models/Lottery.php +++ b/Modules/Lottery/app/Models/Lottery.php @@ -4,7 +4,6 @@ use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Factories\HasFactory; -// use Modules\Lottery\Database\Factories\LotteryFactory; use Modules\Raffle\Models\Raffle; use Modules\Draws\Models\Draws; diff --git a/Modules/Lottery/vite.config.js b/Modules/Lottery/vite.config.js index 0e644ca..6fa6790 100644 --- a/Modules/Lottery/vite.config.js +++ b/Modules/Lottery/vite.config.js @@ -20,7 +20,3 @@ export default defineConfig({ ], }); -//export const paths = [ -// 'Modules/Lottery/resources/assets/sass/app.scss', -// 'Modules/Lottery/resources/assets/js/app.js', -//]; \ No newline at end of file diff --git a/Modules/Raffle/app/Http/Controllers/RaffleController.php b/Modules/Raffle/app/Http/Controllers/RaffleController.php index 61a251b..0b35755 100644 --- a/Modules/Raffle/app/Http/Controllers/RaffleController.php +++ b/Modules/Raffle/app/Http/Controllers/RaffleController.php @@ -13,7 +13,11 @@ class RaffleController extends Controller { public function index() { - $raffles = Raffle::with('organizer', 'lottery')->paginate(10); + $user = auth()->user(); + $raffles = Raffle::with('organizer', 'lottery') + ->where('organizer_id', $user->id) + ->paginate(10); + return view('raffle::index', compact('raffles')); } @@ -38,18 +42,17 @@ public function store(Request $request) ]); Raffle::create([ - 'name' => $request->name, - 'organizer_id' => $request->organizer_id, - 'lottery_id' => $request->lottery_id, - - 'total_tickets' => $request->total_tickets, - 'ticket_price' => $request->ticket_price, - 'tickets_sold' => $request->tickets_sold ?? 0, - 'description' => $request->description, - 'start_date' => $request->start_date, - 'end_date' => $request->end_date, - 'total_sales' => 0, // valor predeterminado de total_sales - ]); + 'name' => $request->name, + 'organizer_id' => $request->organizer_id, + 'lottery_id' => $request->lottery_id, + 'total_tickets' => $request->total_tickets, + 'ticket_price' => $request->ticket_price, + 'tickets_sold' => $request->tickets_sold ?? 0, + 'description' => $request->description, + 'start_date' => $request->start_date, + 'end_date' => $request->end_date, + 'total_sales' => 0, // valor predeterminado de total_sales + ]); return redirect()->route('raffles.index')->with('success', 'Rifa creada exitosamente.'); } @@ -64,24 +67,31 @@ public function edit($id) public function update(Request $request, $id) { + $raffle = Raffle::findOrFail($id); + $request->validate([ - 'organizer_id' => 'required|exists:users,id', - 'image' => 'nullable|string', - 'lottery_id' => 'required|exists:lotteries,id', - 'ticket_price' => 'required|numeric|min:0', - 'total_tickets' => 'required|integer|min:1', - 'tickets_sold' => 'nullable|integer|min:0', + 'name' => 'required|string|max:255', 'description' => 'nullable|string', - 'start_date' => 'required|date', 'end_date' => 'required|date|after:start_date', + 'image' => 'nullable|image|max:2048', // Validar si es una imagen ]); - - $raffle = Raffle::findOrFail($id); - $raffle->update($request->all()); - + + // Manejar imagen si se sube un nuevo archivo + if ($request->hasFile('image')) { + $imagePath = $request->file('image')->store('raffle_images', 'public'); + $raffle->image = $imagePath; // Actualizar la ruta de la imagen + } + + // Actualizar otros campos + $raffle->update([ + 'name' => $request->name, + 'description' => $request->description, + 'end_date' => $request->end_date, + ]); + return redirect()->route('raffles.index')->with('success', 'Rifa actualizada exitosamente.'); } - + public function destroy($id) { $raffle = Raffle::findOrFail($id); @@ -121,7 +131,6 @@ public function getLastChanceRaffles() return response()->json($raffles); } - public function getActiveRaffles() { $activeRaffles = Raffle::where('end_date', '>', now())->get(); @@ -133,12 +142,12 @@ public function getFilteredRaffles(Request $request) $filter = $request->input('filter'); $date = $request->input('date'); $query = Raffle::with('organizer', 'lottery'); - + // Aplicar filtro adicional por fecha if ($date) { $query->whereDate('end_date', '>', $date); } - + switch ($filter) { case 'popular': $query->where('tickets_sold', '>=', 50) @@ -154,9 +163,8 @@ public function getFilteredRaffles(Request $request) $query->where('end_date', '>', now()); break; } - + $raffles = $query->paginate(6); return response()->json($raffles); } - -} +} \ No newline at end of file diff --git a/Modules/Raffle/resources/views/create.blade.php b/Modules/Raffle/resources/views/create.blade.php index 6468e08..8da4c0e 100644 --- a/Modules/Raffle/resources/views/create.blade.php +++ b/Modules/Raffle/resources/views/create.blade.php @@ -15,13 +15,11 @@
- + +
+ +
@@ -47,13 +45,13 @@
- +
- +
@@ -63,10 +61,7 @@
-
- - -
+
@@ -75,10 +70,7 @@
-
- - -
+
@@ -112,4 +104,4 @@ function calculateTicketPrice() { } } -@stop +@stop \ No newline at end of file diff --git a/Modules/Raffle/resources/views/edit.blade.php b/Modules/Raffle/resources/views/edit.blade.php index a6f78f3..7c6c512 100644 --- a/Modules/Raffle/resources/views/edit.blade.php +++ b/Modules/Raffle/resources/views/edit.blade.php @@ -1,5 +1,3 @@ - - @extends('adminlte::page') @section('title', 'Editar Rifa') @@ -15,77 +13,37 @@

Editar Rifa

-
+ @csrf @method('PUT') - - -
- - -
- - -
- - -
- - -
- - -
- - + +
- - + +
- - -
- - -
- +
- - -
- - -
- +
- - + +
- + +
+ +
+
@@ -103,7 +61,9 @@ -@stop +@stop \ No newline at end of file diff --git a/Modules/Raffle/resources/views/layouts/master.blade.php b/Modules/Raffle/resources/views/layouts/master.blade.php index 505d3a8..c7e3ea3 100644 --- a/Modules/Raffle/resources/views/layouts/master.blade.php +++ b/Modules/Raffle/resources/views/layouts/master.blade.php @@ -16,6 +16,8 @@ + + {{-- Vite CSS --}} @@ -24,10 +26,13 @@
@yield('content') + @yield('js')
{{-- Alpine.js --}} + + {{-- Vite JS --}} @vite('Modules/Raffle/resources/assets/js/app.js', 'build-raffle') diff --git a/Modules/Raffle/routes/web.php b/Modules/Raffle/routes/web.php index 7f0981f..6a44d9f 100644 --- a/Modules/Raffle/routes/web.php +++ b/Modules/Raffle/routes/web.php @@ -14,7 +14,7 @@ | */ -Route::prefix('raffles')->name('raffles.')->group(function () { +Route::middleware(['auth', 'role:admin|organizador'])->prefix('raffles')->name('raffles.')->group(function () { Route::get('/admin/rifas', [RaffleController::class, 'index'])->name('index'); Route::get('/admin/crear-rifa', [RaffleController::class, 'create'])->name('create'); Route::post('/admin/actualizar-rifa', [RaffleController::class, 'store'])->name('store'); diff --git a/README.md b/README.md index c1885aa..dce58f8 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# 📱 Gananza +# 📱 Gananza - v2.0 ## 🌟 Visión **Gananza** busca convertirse en la plataforma líder para la organización y participación en rifas, ofreciendo una experiencia segura, intuitiva y accesible para todos los usuarios. Nuestra visión es facilitar el acceso a rifas en cualquier formato, ya sea virtual, presencial o híbrido, promoviendo la interacción y el entretenimiento. diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index 298ef5e..a5e76b0 100644 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -1,49 +1,80 @@ getMessage()); + + // Captura excepciones personalizadas y envíalas a Discord if ($this->shouldReport($exception)) { - try { - $this->notifyDiscord($exception); - } catch (Throwable $e) { - // Evitar que fallos en la notificación rompan el flujo - logger()->error("Error al enviar notificación a Discord: " . $e->getMessage()); - } + DiscordNotifier::notifyException($exception); // Notificar a Discord } - parent::report($exception); + // Captura errores HTTP (como 404, 500, etc.) y envíalos a Discord + if ($exception instanceof HttpException) { + // Aquí puedes poner un log adicional o realizar otra acción si es necesario. + Log::info("Capturado error HTTP: " . $exception->getStatusCode()); + DiscordNotifier::notifyEvent("HTTP Error: " . $exception->getStatusCode(), [ + 'Status Code' => $exception->getStatusCode(), + 'Error Message' => $exception->getMessage(), + 'URL' => request()->url(), + 'Timestamp' => now()->toDateTimeString(), + ]); + } } - protected function notifyDiscord(Throwable $exception) -{ - $details = [ - 'message' => $exception->getMessage(), - 'file' => "{$exception->getFile()}:{$exception->getLine()}", - 'trace' => substr($exception->getTraceAsString(), 0, 1800), - ]; - - // Logea el error antes de enviarlo a Discord - logger()->error('Excepción capturada', $details); - - // Envía la notificación a Discord - DiscordNotifier::notifyEvent( - 'Excepción en el sistema 🚨', - $details, - asset('images/logo.png') - ); -} + /** + * Determine if the exception should be reported. + * + * @param \Throwable $exception + * @return bool + */ + public function shouldReport(Throwable $exception) + { + // Reportar todos los errores HTTP, incluyendo 404 y 500 + if ($exception instanceof HttpException) { + return true; // Se reporta cualquier error HTTP (404, 500, etc.) + } + + // Puedes agregar más excepciones personalizadas aquí si es necesario + return parent::shouldReport($exception); + } + + /** + * Render the exception into an HTTP response. + * + * @param \Illuminate\Http\Request $request + * @param \Throwable $exception + * @return \Illuminate\Http\Response + */ + public function render($request, Throwable $exception) + { + // Renderizar errores HTTP (como 404, 500) de forma personalizada + if ($exception instanceof HttpException) { + return response()->json([ + 'message' => 'Error HTTP detectado.', + 'error' => $exception->getMessage(), + ], $exception->getStatusCode()); + } + + return parent::render($request, $exception); + } } diff --git a/app/Filament/Resources/LoteryResource.php b/app/Filament/Resources/LoteryResource.php deleted file mode 100644 index e3c216c..0000000 --- a/app/Filament/Resources/LoteryResource.php +++ /dev/null @@ -1,100 +0,0 @@ -schema([ - TextInput::make('name') - ->label('Lottery Name') - ->required() - ->maxLength(255), - - TextArea::make('description') - ->label('Description') - ->nullable() - ->maxLength(500), - - TextInput::make('url_imagen') // Usamos TextInput para la URL - ->label('Image URL') - ->nullable() - ->url() // Esto asegura que solo se ingrese una URL válida - ->maxLength(1024), - ]); - } - - public static function table(Table $table): Table - { - return $table - ->columns([ - TextColumn::make('name') - ->label('Lottery Name') - ->sortable() - ->searchable(), - - TextColumn::make('description') - ->label('Description') - ->sortable() - ->searchable(), - - TextColumn::make('image_url') - ->label('Image URL') - ->sortable() - ->searchable(), - - TextColumn::make('created_at') - ->label('Created At') - ->sortable() - ->dateTime(), - ]) - ->filters([ - // Puedes agregar filtros si es necesario - ]) - ->actions([ - Tables\Actions\EditAction::make(), - Tables\Actions\DeleteAction::make(), - ]) - ->bulkActions([ - Tables\Actions\DeleteBulkAction::make(), - ]); - } - - public static function getRelations(): array - { - return [ - // Si deseas agregar más relaciones, agrégalas aquí - ]; - } - - public static function getPages(): array - { - return [ - 'index' => Pages\ListLoteries::route('/'), - 'create' => Pages\CreateLotery::route('/create'), - 'edit' => Pages\EditLotery::route('/{record}/edit'), - ]; - } -} diff --git a/app/Filament/Resources/LoteryResource/Pages/CreateLotery.php b/app/Filament/Resources/LoteryResource/Pages/CreateLotery.php deleted file mode 100644 index b76b90b..0000000 --- a/app/Filament/Resources/LoteryResource/Pages/CreateLotery.php +++ /dev/null @@ -1,12 +0,0 @@ -schema([ - TextInput::make('file_name') - ->label('File Name') - ->required() - ->maxLength(255), - - FileUpload::make('file_path') - ->label('File') - ->required() - ->disk('public') // Asegúrate de tener configurado el disco en `config/filesystems.php` - ->directory('multimedia') // Opcional: define una carpeta dentro de `storage/app/public` - ->maxSize(10240), // Limitar tamaño del archivo - - Select::make('file_type') - ->label('File Type') - ->options([ - 'VIDEO' => 'Video', - 'PDF' => 'PDF', - 'IMAGEN' => 'Image', - ]) - ->nullable(), - - TextInput::make('mime_type') - ->label('Mime Type') - ->nullable(), - - TextInput::make('size') - ->label('File Size') - ->nullable() - ->numeric(), - - TextInput::make('model_id') - ->label('Model ID') - ->nullable() - ->numeric(), - - Select::make('model_type') - ->label('Model Type') - ->options([ - 'raffles' => 'Raffles', - 'tickets' => 'Tickets', - ]) - ->nullable(), - ]); - } - - public static function table(Tables\Table $table): Tables\Table - { - return $table - ->columns([ - TextColumn::make('file_name') - ->label('File Name') - ->sortable() - ->searchable(), - - TextColumn::make('file_type') - ->label('File Type') - ->sortable(), - - TextColumn::make('model_type') - ->label('Model Type') - ->sortable(), - - TextColumn::make('created_at') - ->label('Created At') - ->sortable() - ->dateTime(), - ]) - ->filters([ - // Agregar filtros si es necesario - ]) - ->actions([ - Tables\Actions\EditAction::make(), - Tables\Actions\DeleteAction::make(), - ]) - ->bulkActions([ - Tables\Actions\DeleteBulkAction::make(), - ]); - } - - public static function getRelations(): array - { - return [ - // Relacionar otras entidades si es necesario - ]; - } - - public static function getPages(): array - { - return [ - 'index' => Pages\ListMultimedia::route('/'), - 'create' => Pages\CreateMultimedia::route('/create'), - 'edit' => Pages\EditMultimedia::route('/{record}/edit'), - ]; - } -} diff --git a/app/Filament/Resources/MultimediaResource/Pages/CreateMultimedia.php b/app/Filament/Resources/MultimediaResource/Pages/CreateMultimedia.php deleted file mode 100644 index bf89ebe..0000000 --- a/app/Filament/Resources/MultimediaResource/Pages/CreateMultimedia.php +++ /dev/null @@ -1,12 +0,0 @@ - $message, + 'embeds' => $embed ? [$embed] : [], ]; - - if (!empty($embed)) { - $payload['embeds'] = [$embed]; + + try { + $response = Http::post($webhookUrl, $payload); + + if ($response->successful()) { + Log::info('Notificación enviada a Discord correctamente.'); + } else { + Log::error('Error al enviar notificación a Discord. Código de error: ' . $response->status()); + } + } catch (\Exception $e) { + Log::error('Error al intentar enviar la solicitud a Discord: ' . $e->getMessage()); } - - Http::post($webhookUrl, $payload); + } else { + Log::error('La URL del Webhook de Discord no está configurada.'); } } + + + - public static function notifyException(\Throwable $exception) + public static function notifyException(Throwable $exception) { - $trace = substr($exception->getTraceAsString(), 0, 1800); // Discord tiene límites. - $message = "**🚨 Exception Alert**\n" - . "**Mensaje:** {$exception->getMessage()}\n" - . "**Archivo:** {$exception->getFile()}:{$exception->getLine()}\n" - . "**Trace:** ```{$trace}```"; - - self::send($message); + $webhookUrl = env('DISCORD_WEBHOOK_URL'); + + if ($webhookUrl) { + // Construir el mensaje de la excepción + $message = "**🚨 Excepción Crítica**\n" + . "**Mensaje:** {$exception->getMessage()}\n" + . "**Archivo:** {$exception->getFile()}:{$exception->getLine()}\n" + . "**Trace:** ```" . substr($exception->getTraceAsString(), 0, 1800) . "```"; + + // Crear el embed para Discord + $embed = [ + 'title' => '🚨 Error Crítico del Sistema', + 'description' => $message, + 'color' => 16711680, // Rojo para alertas + 'footer' => [ + 'text' => 'Notificaciones de Excepciones', + 'icon_url' => asset('images/logo.png'), // Asegúrate de que esta URL sea válida + ], + 'timestamp' => now()->toIso8601String(), + ]; + + // Enviar el embed a Discord + self::send('', $embed); + } } - + + + + + public static function notifyEvent($eventType, $details = [], $imageUrl = null) { $webhookUrl = env('DISCORD_WEBHOOK_URL'); - + if ($webhookUrl) { - $logoUrl = $imageUrl ?? asset('logo.png'); // Imagen por defecto + $logoUrl = $imageUrl ?? asset('https://gananza.crudzaso.com/assets/media/auth/agency-dark.png'); // Imagen por defecto $embed = [ - 'title' => '🔔 Notificación del Sistema', - 'description' => "Se ha detectado un evento: **{$eventType}**.", - 'color' => 7506394, // Color (hex: #72A0C1) + 'title' => "🔔 {$eventType}", + 'description' => "Un nuevo evento ha sido detectado: **{$eventType}**.", + 'color' => 7506394, 'fields' => [], 'footer' => [ - 'text' => 'Notificaciones del Sistema', + 'text' => 'Sistema de Notificaciones', 'icon_url' => $logoUrl, ], 'timestamp' => now()->toIso8601String(), + 'thumbnail' => [ + 'url' => $logoUrl, + ], ]; - - // Agregar detalles al mensaje. + foreach ($details as $key => $value) { $embed['fields'][] = [ 'name' => ucfirst($key), @@ -61,7 +98,11 @@ public static function notifyEvent($eventType, $details = [], $imageUrl = null) ]; } + + + // Enviar el mensaje a Discord self::send('', $embed); } } + } diff --git a/app/Http/Controllers/PaymentController.php b/app/Http/Controllers/PaymentController.php index 1225dfb..1da387b 100644 --- a/app/Http/Controllers/PaymentController.php +++ b/app/Http/Controllers/PaymentController.php @@ -2,58 +2,65 @@ namespace App\Http\Controllers; -use Carbon\Carbon; +use App\Services\MPService; use Illuminate\Http\Request; -use Modules\Payment\Models\Payment; -use Modules\Raffle\Models\Raffle; -use Modules\Ticket\Models\Ticket; class PaymentController extends Controller { - public function create(Request $request) + protected $mercadoPagoService; + + public function __construct(MPService $mercadoPagoService) + { + $this->mercadoPagoService = $mercadoPagoService; + } + + // Mostrar el formulario de pago + public function showPaymentForm() + { + return view('mercadopago.payment'); + } + + // Crear la preferencia de pago + public function createPayment(Request $request) { - $raffle = Raffle::find($request->raffle_id); $user = auth()->user(); - // Datos del pago - $amount = $raffle->ticket_price; - $nequiNumber = config('services.nequi.number'); // Número de Nequi de la plataforma - // Generar enlace de pago - $paymentLink = "https://recarga.nequi.com/$nequiNumber?amount=$amount"; + $items = [ + [ + "id" => "1234567890", + "title" => "Producto 1", + "description" => "Descripción del producto 1", + "currency_id" => "COP", + "quantity" => 1, + "unit_price" => 1000.00 + ] + ]; - return response()->json([ - 'paymentLink' => $paymentLink, - 'qrCode' => "https://api.qrserver.com/v1/create-qr-code/?data=$paymentLink", - ]); + $payer = [ + "name" => $user->name, + "surname" => $user->lastname, + "email" => $user->email, + ]; + + $preference = $this->mercadoPagoService->createPaymentPreference($items, $payer); + + if ($preference) { + return response()->json(['id' => $preference->id]); // Devolver el ID de la preferencia + } else { + return response()->json(['error' => 'No se pudo crear la preferencia de pago.'], 500); + } } - public function store(Request $request) + // Página de éxito del pago + public function success() { - $user = auth()->user(); - $raffle = Raffle::find($request->raffle_id); - - // Crear ticket - $ticket = Ticket::create([ - 'raffle_id' => $raffle->id, - 'user_id' => $user->id, - 'ticket_number' => $request->ticket_number, - 'purchase_date' => Carbon::now(), - 'verification_code' => uniqid(), - ]); - - // Registrar pago - $payment = Payment::create([ - 'user_id' => $user->id, - 'raffle_id' => $raffle->id, - 'amount' => $raffle->ticket_price, - 'payment_method' => 'Nequi', - 'payment_date' => Carbon::now(), - ]); - - return response()->json([ - 'message' => 'Pago registrado exitosamente', - 'ticket' => $ticket, - 'payment' => $payment, - ]); - }} + return redirect()->route('mercadopago.payment'); + } + + // Página de fallo en el pago + public function failure() + { + return redirect()->route('mercadopago.payment'); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 827b637..aa8be08 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -83,23 +83,23 @@ public function update(Request $request, User $user) 'email' => 'required|email|unique:users,email,' . $user->id, 'profile_photo' => 'nullable|image|max:2048', ]); - + // Manejar la foto de perfil if ($request->hasFile('profile_photo')) { // Usa el trait HasProfilePhoto para actualizar la foto de perfil $user->updateProfilePhoto($request->file('profile_photo')); } - + // Actualizar otros datos del usuario $user->update($validated); - + // Responder con el URL de la foto de perfil actualizado return response()->json([ 'message' => 'Usuario actualizado exitosamente.', 'profile_photo_url' => $user->profile_photo_url, ]); } - + /** * Remove the specified resource from storage. @@ -116,94 +116,82 @@ public function showProfile(User $user) if (auth()->id() !== $user->id) { abort(403, 'No tienes permiso para ver este perfil.'); } - + return Inertia::render('Users/Profile', [ 'user' => $user, ]); } public function updateProfilePhoto(Request $request, User $user) -{ - // Validar que se está enviando una imagen - $request->validate([ - 'profile_photo' => 'required|image|max:2048', - ]); - - // Manejar la foto de perfil - if ($request->hasFile('profile_photo')) { - // Eliminar la foto anterior si existe - if ($user->profile_photo_path) { - Storage::disk('public')->delete($user->profile_photo_path); - } - - // Actualizar la foto de perfil usando el trait HasProfilePhoto - $user->updateProfilePhoto($request->file('profile_photo')); - } - - return response()->json([ - 'message' => 'Foto de perfil actualizada exitosamente.', - 'profile_photo_url' => $user->profile_photo_url, - ]); -} - -public function activeRaffles() -{ - $activeRaffles = Raffle::where('end_date', '>', now())->get(); - - return Inertia::render('ActiveRaffles', [ - 'raffles' => $activeRaffles, - ]); -} - -public function registerOrganizer(){ - return Inertia::render('Users/RegisterOrganizer'); -} + { + // Validar que se está enviando una imagen + $request->validate([ + 'profile_photo' => 'required|image|max:2048', + ]); + // Manejar la foto de perfil + if ($request->hasFile('profile_photo')) { + // Eliminar la foto anterior si existe + if ($user->profile_photo_path) { + Storage::disk('public')->delete($user->profile_photo_path); + } -public function storeOrganizer(Request $request) -{ - - // Validar los datos del formulario - $validated = $request->validate([ - 'document' => 'nullable|string', - 'document_type' => 'nullable|string', - 'document_image' => 'required|image|max:2048', - ]); - - // Obtener el usuario autenticado - $user = auth()->user(); - - // Manejar la subida de la imagen del documento - if ($request->hasFile('document_image')) { - // Eliminar la imagen anterior si existe - if ($user->document_image_path) { - Storage::disk('public')->delete($user->document_image_path); + // Actualizar la foto de perfil usando el trait HasProfilePhoto + $user->updateProfilePhoto($request->file('profile_photo')); } - // Guardar la nueva imagen - $documentImagePath = $request->file('document_image')->store('documents', 'public'); - - // Actualizar los campos del usuario autenticado - $user->update([ - 'document' => $validated['document'] ?? $user->document, - 'document_type' => $validated['document_type'] ?? $user->document_type, - 'document_image_path' => $documentImagePath, + return response()->json([ + 'message' => 'Foto de perfil actualizada exitosamente.', + 'profile_photo_url' => $user->profile_photo_url, ]); - - $user->assignRole('organizador'); - -// Redirigir al panel de administración -return response()->json([ - 'success' => true, - 'message' => 'Usuario registrado y rol asignado como organizador.', -]); - } - return response()->json([ - 'error' => 'No se recibió la imagen del documento.', - ], 400); -} + public function activeRaffles() + { + $activeRaffles = Raffle::where('end_date', '>', now())->get(); + return Inertia::render('ActiveRaffles', [ + 'raffles' => $activeRaffles, + ]); + } + public function registerOrganizer() + { + return Inertia::render('Users/RegisterOrganizer'); + } + public function storeOrganizer(Request $request) + { + // Validar los datos del formulario + $validated = $request->validate([ + 'document' => 'nullable|string', + 'document_type' => 'nullable|string', + 'document_image' => 'required|image|max:2048', + ]); + + // Obtener el usuario autenticado + $user = auth()->user(); + + // Manejar la subida de la imagen del documento + if ($request->hasFile('document_image')) { + // Guardar la nueva imagen + $documentImagePath = $request->file('document_image')->store('documents', 'public'); + + // Actualizar los campos del usuario autenticado + $user->update([ + 'document' => $validated['document'] ?? $user->document, + 'document_type' => $validated['document_type'] ?? $user->document_type, + 'document_image_path' => $documentImagePath, + ]); + + // Asignar el rol de organizador + $user->assignRole('organizador'); + + // Redirigir al usuario a la página de rifas + return redirect('/raffles/admin/rifas')->with('success', 'Usuario registrado exitosamente como organizador.'); + } + + // Si no se recibió una imagen, retornar error + return redirect()->back()->withErrors(['document_image' => 'La imagen del documento es requerida.']); + } + } diff --git a/app/Http/Middleware/HandleExceptions.php b/app/Http/Middleware/HandleExceptions.php index 70bae6e..5e9a19b 100644 --- a/app/Http/Middleware/HandleExceptions.php +++ b/app/Http/Middleware/HandleExceptions.php @@ -5,6 +5,7 @@ use Closure; use Throwable; use App\Helpers\DiscordNotifier; +use Illuminate\Support\Facades\Log; class HandleExceptions { @@ -14,17 +15,20 @@ public function handle($request, Closure $next) return $next($request); } catch (Throwable $e) { $this->reportToDiscord($e); // Enviar notificación a Discord - throw $e; // Rethrow para permitir que el sistema maneje la excepción + throw $e; // Volver a lanzar la excepción para que el sistema maneje la excepción } } protected function reportToDiscord(Throwable $exception) { + + Log::info('Enviando excepción a Discord: ' . $exception->getMessage()); + $message = "**🚨 Excepción Crítica**\n" . "**Mensaje:** {$exception->getMessage()}\n" . "**Archivo:** {$exception->getFile()}:{$exception->getLine()}\n" . "**Trace:** ```" . substr($exception->getTraceAsString(), 0, 1800) . "```"; - DiscordNotifier::send($message); + DiscordNotifier::send($message); // Enviar a Discord } } diff --git a/app/Http/Middleware/HandleInertiaRequests.php b/app/Http/Middleware/HandleInertiaRequests.php index 2c56cff..e140a93 100644 --- a/app/Http/Middleware/HandleInertiaRequests.php +++ b/app/Http/Middleware/HandleInertiaRequests.php @@ -4,6 +4,7 @@ use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Storage; use Inertia\Middleware; class HandleInertiaRequests extends Middleware @@ -42,6 +43,10 @@ public function share(Request $request): array 'id' => $request->user()->id, 'name' => $request->user()->name, 'email' => $request->user()->email, + 'roles' => $request->user()->roles->pluck('name'), + 'profile_photo_url' => $request->user()->profile_photo_path + ? Storage::url($request->user()->profile_photo_path) + : null, ] : null, ], ]); diff --git a/app/Http/Request/UserRequest.php b/app/Http/Requests/UserRequest.php similarity index 83% rename from app/Http/Request/UserRequest.php rename to app/Http/Requests/UserRequest.php index e57fa3a..cd3d522 100644 --- a/app/Http/Request/UserRequest.php +++ b/app/Http/Requests/UserRequest.php @@ -1,6 +1,6 @@ 'required|string|max:255', 'lastname' => 'required|string|max:255', - 'document' => 'required|string|unique:users,document,' . $this->user, + 'document' => 'required|string|unique:users,document,' . ($this->user ?? ''), 'document_type' => 'required|string', 'phone_number' => 'nullable|string', - 'email' => 'required|string|email|max:255|unique:users,email,' . $this->user, + 'email' => 'required|string|email|max:255|unique:users,email,' . ($this->user ?? ''), 'password' => 'sometimes|required|string|min:8', - 'google_id' => 'nullable|string|unique:users,google_id,' . $this->user, - 'github_id' => 'nullable|string|unique:users,github_id,' . $this->user, + 'google_id' => 'nullable|string|unique:users,google_id,' . ($this->user ?? ''), + 'github_id' => 'nullable|string|unique:users,github_id,' . ($this->user ?? ''), ]; } } diff --git a/app/Listeners/SendLoginNotification.php b/app/Listeners/SendLoginNotification.php index c47e933..310588b 100644 --- a/app/Listeners/SendLoginNotification.php +++ b/app/Listeners/SendLoginNotification.php @@ -4,20 +4,32 @@ use Illuminate\Auth\Events\Login; use App\Helpers\DiscordNotifier; +use Illuminate\Auth\Events\Logout; class SendLoginNotification { /** * Handle the event. * - * @param Login $event + * @param mixed $event * @return void */ - public function handle(Login $event) + public function handle($event) { - DiscordNotifier::notifyEvent('User Logged In', [ - 'user_id' => $event->user->id, - 'email' => $event->user->email, - ]); + if ($event instanceof Login) { + DiscordNotifier::notifyEvent('User Logged In', [ + 'User ID' => $event->user->id, + 'Email' => $event->user->email, + 'Login Time' => now()->toDateTimeString(), + ], 'https://cdn0.iconfinder.com/data/icons/very-basic-android-l-lollipop-icon-pack/24/key-256.png'); + } + + if ($event instanceof Logout) { + DiscordNotifier::notifyEvent('User Logged Out', [ + 'User ID' => $event->user->id, + 'Email' => $event->user->email, + 'Logout Time' => now()->toDateTimeString(), + ], 'https://cdn3.iconfinder.com/data/icons/remixicon-system/24/login-box-line-256.png'); + } } } diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index 5751a31..4a53752 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -2,9 +2,12 @@ namespace App\Providers; +use App\Listeners\SendHttpErrorNotification; use Illuminate\Auth\Events\Login; use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider; use App\Listeners\SendLoginNotification; +use Illuminate\Auth\Events\Logout; +use Symfony\Component\HttpKernel\Exception\HttpException; class EventServiceProvider extends ServiceProvider { @@ -17,8 +20,12 @@ class EventServiceProvider extends ServiceProvider Login::class => [ SendLoginNotification::class, ], + Logout::class => [ + SendLoginNotification::class, + ], ]; + /** * Register any events for your application. * diff --git a/app/Services/MPService.php b/app/Services/MPService.php new file mode 100644 index 0000000..11aa0a0 --- /dev/null +++ b/app/Services/MPService.php @@ -0,0 +1,67 @@ +authenticate(); + } + + protected function authenticate() + { + $mpAccessToken = env('MERCADOPAGO_ACCESS_TOKEN'); + MercadoPagoConfig::setAccessToken($mpAccessToken); + } + + public function createPaymentPreference($items, $payer) + { + $paymentMethods = [ + "excluded_payment_methods" => [], // Métodos de pago excluidos, si es necesario + "installments" => 12, // Número de cuotas disponibles + "default_installments" => 1, // Cuotas predeterminadas + ]; + + $backUrls = [ + 'success' => route('mercadopago.success'), + 'failure' => route('mercadopago.failed'), + ]; + + $request = [ + "items" => $items, + "payer" => $payer, + "payment_methods" => $paymentMethods, + "back_urls" => $backUrls, + "statement_descriptor" => "NOMBRE_EN_FACTURA", // Nombre que aparecerá en la factura + "external_reference" => "1234567890", + "expires" => false, + "auto_return" => 'approved', // Automáticamente regresa cuando el pago es aprobado + ]; + + $client = new PreferenceClient(); + + try { + // Crear la preferencia de pago + $preference = $client->create($request); + return $preference; + } catch (MPApiException $e) { + // Log de error más detallado + Log::error('Mercado Pago error:', [ + 'message' => $e->getMessage(), + 'code' => $e->getCode(), + 'trace' => $e->getTraceAsString(), + ]); + + // Aquí puedes lanzar un evento para manejar el error si lo deseas + event(new ErrorOccurred('Error al crear la preferencia de pago con Mercado Pago', $e->getMessage())); + return null; // Si hay error, devuelve null + } + } +} \ No newline at end of file diff --git a/bootstrap/app.php b/bootstrap/app.php index c10fa31..dc48127 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -1,8 +1,10 @@ withRouting( @@ -27,5 +29,9 @@ ]); }) ->withExceptions(function (Exceptions $exceptions) { - // - })->create(); + // Captura todas las excepciones reportables y envíalas a Discord + $exceptions->report(function (Throwable $exception) { + Log::info('Excepción reportada: ' . $exception->getMessage()); // Log de depuración + DiscordNotifier::notifyException($exception); // Reportar la excepción a Discord + }); + })->create(); \ No newline at end of file diff --git a/composer.json b/composer.json index b67fae1..1c3283b 100644 --- a/composer.json +++ b/composer.json @@ -16,6 +16,7 @@ "laravel/socialite": "^5.16", "laravel/telescope": "^5.2", "laravel/tinker": "^2.9", + "mercadopago/dx-php": "3.0.8", "nwidart/laravel-modules": "^11.1", "php-imap/php-imap": "^2.0", "spatie/laravel-permission": "^6.9", diff --git a/composer.lock b/composer.lock index 683843e..fedd73d 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "8663b66401d53b74273676a3c99b7ae7", + "content-hash": "8efa804963ffeaaf72b4550b2206c767", "packages": [ { "name": "almasaeed2010/adminlte", @@ -51,16 +51,16 @@ }, { "name": "anourvalar/eloquent-serialize", - "version": "1.2.25", + "version": "1.2.27", "source": { "type": "git", "url": "https://github.com/AnourValar/eloquent-serialize.git", - "reference": "6d7a868ae4218b9d7796334ff9a17e1539bad48a" + "reference": "f1c4fcd41a6db1467ed75bc295b62f582d6fd0fe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/AnourValar/eloquent-serialize/zipball/6d7a868ae4218b9d7796334ff9a17e1539bad48a", - "reference": "6d7a868ae4218b9d7796334ff9a17e1539bad48a", + "url": "https://api.github.com/repos/AnourValar/eloquent-serialize/zipball/f1c4fcd41a6db1467ed75bc295b62f582d6fd0fe", + "reference": "f1c4fcd41a6db1467ed75bc295b62f582d6fd0fe", "shasum": "" }, "require": { @@ -111,9 +111,9 @@ ], "support": { "issues": "https://github.com/AnourValar/eloquent-serialize/issues", - "source": "https://github.com/AnourValar/eloquent-serialize/tree/1.2.25" + "source": "https://github.com/AnourValar/eloquent-serialize/tree/1.2.27" }, - "time": "2024-09-16T12:59:37+00:00" + "time": "2024-11-30T08:27:24+00:00" }, { "name": "bacon/bacon-qr-code", @@ -171,16 +171,16 @@ }, { "name": "blade-ui-kit/blade-heroicons", - "version": "2.4.0", + "version": "2.5.0", "source": { "type": "git", "url": "https://github.com/blade-ui-kit/blade-heroicons.git", - "reference": "a7c377a4ef88cd54712e3e15cbed30446820da0b" + "reference": "4ed3ed08e9ac192d0d126b2f12711d6fb6576a48" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/blade-ui-kit/blade-heroicons/zipball/a7c377a4ef88cd54712e3e15cbed30446820da0b", - "reference": "a7c377a4ef88cd54712e3e15cbed30446820da0b", + "url": "https://api.github.com/repos/blade-ui-kit/blade-heroicons/zipball/4ed3ed08e9ac192d0d126b2f12711d6fb6576a48", + "reference": "4ed3ed08e9ac192d0d126b2f12711d6fb6576a48", "shasum": "" }, "require": { @@ -224,7 +224,7 @@ ], "support": { "issues": "https://github.com/blade-ui-kit/blade-heroicons/issues", - "source": "https://github.com/blade-ui-kit/blade-heroicons/tree/2.4.0" + "source": "https://github.com/blade-ui-kit/blade-heroicons/tree/2.5.0" }, "funding": [ { @@ -236,7 +236,7 @@ "type": "paypal" } ], - "time": "2024-07-16T07:00:01+00:00" + "time": "2024-11-18T19:59:07+00:00" }, { "name": "blade-ui-kit/blade-icons", @@ -788,29 +788,27 @@ }, { "name": "doctrine/deprecations", - "version": "1.1.3", + "version": "1.1.4", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab" + "reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", - "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/31610dbb31faa98e6b5447b62340826f54fbc4e9", + "reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^9", - "phpstan/phpstan": "1.4.10 || 1.10.15", - "phpstan/phpstan-phpunit": "^1.0", + "doctrine/coding-standard": "^9 || ^12", + "phpstan/phpstan": "1.4.10 || 2.0.3", + "phpstan/phpstan-phpunit": "^1.0 || ^2", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psalm/plugin-phpunit": "0.18.4", - "psr/log": "^1 || ^2 || ^3", - "vimeo/psalm": "4.30.0 || 5.12.0" + "psr/log": "^1 || ^2 || ^3" }, "suggest": { "psr/log": "Allows logging deprecations via PSR-3 logger implementation" @@ -818,7 +816,7 @@ "type": "library", "autoload": { "psr-4": { - "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" + "Doctrine\\Deprecations\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -829,9 +827,9 @@ "homepage": "https://www.doctrine-project.org/", "support": { "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.3" + "source": "https://github.com/doctrine/deprecations/tree/1.1.4" }, - "time": "2024-01-30T19:34:25+00:00" + "time": "2024-12-07T21:18:45+00:00" }, { "name": "doctrine/inflector", @@ -1135,16 +1133,16 @@ }, { "name": "filament/actions", - "version": "v3.2.122", + "version": "v3.2.128", "source": { "type": "git", "url": "https://github.com/filamentphp/actions.git", - "reference": "3badf1a1589bf70fdc625130f6dfc1ca2146a32f" + "reference": "1ee8b0a890b53e8b0b341134d3ba9bdaeee294d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/actions/zipball/3badf1a1589bf70fdc625130f6dfc1ca2146a32f", - "reference": "3badf1a1589bf70fdc625130f6dfc1ca2146a32f", + "url": "https://api.github.com/repos/filamentphp/actions/zipball/1ee8b0a890b53e8b0b341134d3ba9bdaeee294d3", + "reference": "1ee8b0a890b53e8b0b341134d3ba9bdaeee294d3", "shasum": "" }, "require": { @@ -1184,20 +1182,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2024-10-31T13:38:12+00:00" + "time": "2024-12-05T08:56:37+00:00" }, { "name": "filament/filament", - "version": "v3.2.122", + "version": "v3.2.128", "source": { "type": "git", "url": "https://github.com/filamentphp/panels.git", - "reference": "076f5367a3dfe5f6864d117f6826ca7821586931" + "reference": "27b834f6f1213c547580443e28e5028dfe125bdd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/panels/zipball/076f5367a3dfe5f6864d117f6826ca7821586931", - "reference": "076f5367a3dfe5f6864d117f6826ca7821586931", + "url": "https://api.github.com/repos/filamentphp/panels/zipball/27b834f6f1213c547580443e28e5028dfe125bdd", + "reference": "27b834f6f1213c547580443e28e5028dfe125bdd", "shasum": "" }, "require": { @@ -1249,20 +1247,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2024-10-31T13:38:14+00:00" + "time": "2024-12-05T08:56:42+00:00" }, { "name": "filament/forms", - "version": "v3.2.122", + "version": "v3.2.128", "source": { "type": "git", "url": "https://github.com/filamentphp/forms.git", - "reference": "c863b5765b871485a2c624c43a0eb6e957a04b54" + "reference": "c86af3606b8fd3f908b29a03e3056628e4cea57e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/forms/zipball/c863b5765b871485a2c624c43a0eb6e957a04b54", - "reference": "c863b5765b871485a2c624c43a0eb6e957a04b54", + "url": "https://api.github.com/repos/filamentphp/forms/zipball/c86af3606b8fd3f908b29a03e3056628e4cea57e", + "reference": "c86af3606b8fd3f908b29a03e3056628e4cea57e", "shasum": "" }, "require": { @@ -1305,20 +1303,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2024-10-31T13:38:16+00:00" + "time": "2024-12-05T08:56:35+00:00" }, { "name": "filament/infolists", - "version": "v3.2.122", + "version": "v3.2.128", "source": { "type": "git", "url": "https://github.com/filamentphp/infolists.git", - "reference": "2d934d4d7f420fc1165ced33df0959a656163a0c" + "reference": "e655ac3900ab2109022aa0243cfb4126729ef431" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/infolists/zipball/2d934d4d7f420fc1165ced33df0959a656163a0c", - "reference": "2d934d4d7f420fc1165ced33df0959a656163a0c", + "url": "https://api.github.com/repos/filamentphp/infolists/zipball/e655ac3900ab2109022aa0243cfb4126729ef431", + "reference": "e655ac3900ab2109022aa0243cfb4126729ef431", "shasum": "" }, "require": { @@ -1356,11 +1354,11 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2024-10-24T13:47:00+00:00" + "time": "2024-11-29T09:30:56+00:00" }, { "name": "filament/notifications", - "version": "v3.2.122", + "version": "v3.2.128", "source": { "type": "git", "url": "https://github.com/filamentphp/notifications.git", @@ -1412,27 +1410,27 @@ }, { "name": "filament/support", - "version": "v3.2.122", + "version": "v3.2.128", "source": { "type": "git", "url": "https://github.com/filamentphp/support.git", - "reference": "e7174cee7e1d08205f7120d0dcc0d00d9bdd4d32" + "reference": "437d4f3305458f29c32ef4de5ef1d9dbdc74c3fe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/support/zipball/e7174cee7e1d08205f7120d0dcc0d00d9bdd4d32", - "reference": "e7174cee7e1d08205f7120d0dcc0d00d9bdd4d32", + "url": "https://api.github.com/repos/filamentphp/support/zipball/437d4f3305458f29c32ef4de5ef1d9dbdc74c3fe", + "reference": "437d4f3305458f29c32ef4de5ef1d9dbdc74c3fe", "shasum": "" }, "require": { - "blade-ui-kit/blade-heroicons": "^2.2.1", + "blade-ui-kit/blade-heroicons": "^2.5", "doctrine/dbal": "^3.2|^4.0", "ext-intl": "*", "illuminate/contracts": "^10.45|^11.0", "illuminate/support": "^10.45|^11.0", "illuminate/view": "^10.45|^11.0", "kirschbaum-development/eloquent-power-joins": "^3.0|^4.0", - "livewire/livewire": "^3.4.10", + "livewire/livewire": "3.5.12", "php": "^8.1", "ryangjchandler/blade-capture-directive": "^0.2|^0.3|^1.0", "spatie/color": "^1.5", @@ -1467,20 +1465,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2024-10-31T13:38:25+00:00" + "time": "2024-12-05T08:56:49+00:00" }, { "name": "filament/tables", - "version": "v3.2.122", + "version": "v3.2.128", "source": { "type": "git", "url": "https://github.com/filamentphp/tables.git", - "reference": "56a852f7992a01ad8d7b85034cdbb2ae8a21086a" + "reference": "4a60fda65574f248e082f109345216a38567093a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/tables/zipball/56a852f7992a01ad8d7b85034cdbb2ae8a21086a", - "reference": "56a852f7992a01ad8d7b85034cdbb2ae8a21086a", + "url": "https://api.github.com/repos/filamentphp/tables/zipball/4a60fda65574f248e082f109345216a38567093a", + "reference": "4a60fda65574f248e082f109345216a38567093a", "shasum": "" }, "require": { @@ -1519,20 +1517,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2024-10-31T13:38:27+00:00" + "time": "2024-12-05T08:56:53+00:00" }, { "name": "filament/widgets", - "version": "v3.2.122", + "version": "v3.2.128", "source": { "type": "git", "url": "https://github.com/filamentphp/widgets.git", - "reference": "14ae503aae8265ddc48274debbf7b7aefc7afb0b" + "reference": "6de1c84d71168fd1c6a5b1ae1e1b4ec5ee4b6f55" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filamentphp/widgets/zipball/14ae503aae8265ddc48274debbf7b7aefc7afb0b", - "reference": "14ae503aae8265ddc48274debbf7b7aefc7afb0b", + "url": "https://api.github.com/repos/filamentphp/widgets/zipball/6de1c84d71168fd1c6a5b1ae1e1b4ec5ee4b6f55", + "reference": "6de1c84d71168fd1c6a5b1ae1e1b4ec5ee4b6f55", "shasum": "" }, "require": { @@ -1563,20 +1561,20 @@ "issues": "https://github.com/filamentphp/filament/issues", "source": "https://github.com/filamentphp/filament" }, - "time": "2024-10-08T14:24:26+00:00" + "time": "2024-11-27T16:52:29+00:00" }, { "name": "firebase/php-jwt", - "version": "v6.10.1", + "version": "v6.10.2", "source": { "type": "git", "url": "https://github.com/firebase/php-jwt.git", - "reference": "500501c2ce893c824c801da135d02661199f60c5" + "reference": "30c19ed0f3264cb660ea496895cfb6ef7ee3653b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/firebase/php-jwt/zipball/500501c2ce893c824c801da135d02661199f60c5", - "reference": "500501c2ce893c824c801da135d02661199f60c5", + "url": "https://api.github.com/repos/firebase/php-jwt/zipball/30c19ed0f3264cb660ea496895cfb6ef7ee3653b", + "reference": "30c19ed0f3264cb660ea496895cfb6ef7ee3653b", "shasum": "" }, "require": { @@ -1624,9 +1622,9 @@ ], "support": { "issues": "https://github.com/firebase/php-jwt/issues", - "source": "https://github.com/firebase/php-jwt/tree/v6.10.1" + "source": "https://github.com/firebase/php-jwt/tree/v6.10.2" }, - "time": "2024-05-18T18:05:11+00:00" + "time": "2024-11-24T11:22:49+00:00" }, { "name": "fruitcake/php-cors", @@ -2174,27 +2172,27 @@ }, { "name": "inertiajs/inertia-laravel", - "version": "v1.3.0", + "version": "v1.3.2", "source": { "type": "git", "url": "https://github.com/inertiajs/inertia-laravel.git", - "reference": "36730d13b1dab9017069004fd458b3e67449a326" + "reference": "7e6a030ffab315099782a4844a2175455f511c68" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/inertiajs/inertia-laravel/zipball/36730d13b1dab9017069004fd458b3e67449a326", - "reference": "36730d13b1dab9017069004fd458b3e67449a326", + "url": "https://api.github.com/repos/inertiajs/inertia-laravel/zipball/7e6a030ffab315099782a4844a2175455f511c68", + "reference": "7e6a030ffab315099782a4844a2175455f511c68", "shasum": "" }, "require": { "ext-json": "*", "laravel/framework": "^8.74|^9.0|^10.0|^11.0", - "php": "^7.3|~8.0.0|~8.1.0|~8.2.0|~8.3.0", + "php": "^7.3|~8.0.0|~8.1.0|~8.2.0|~8.3.0|~8.4.0", "symfony/console": "^5.3|^6.0|^7.0" }, "require-dev": { "mockery/mockery": "^1.3.3", - "orchestra/testbench": "^6.4|^7.0|^8.0|^9.0", + "orchestra/testbench": "^6.45|^7.44|^8.25|^9.3", "phpunit/phpunit": "^8.0|^9.5.8|^10.4", "roave/security-advisories": "dev-master" }, @@ -2238,7 +2236,7 @@ ], "support": { "issues": "https://github.com/inertiajs/inertia-laravel/issues", - "source": "https://github.com/inertiajs/inertia-laravel/tree/v1.3.0" + "source": "https://github.com/inertiajs/inertia-laravel/tree/v1.3.2" }, "funding": [ { @@ -2246,7 +2244,7 @@ "type": "github" } ], - "time": "2024-06-13T01:25:09+00:00" + "time": "2024-12-05T14:52:50+00:00" }, { "name": "jeroennoten/laravel-adminlte", @@ -2309,16 +2307,16 @@ }, { "name": "kirschbaum-development/eloquent-power-joins", - "version": "4.0.0", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/kirschbaum-development/eloquent-power-joins.git", - "reference": "c6c42a52c5a097cc11761e72782b2d0215692caf" + "reference": "3c1af9b86b02f1e39219849c1d2fee7cf77e8638" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/kirschbaum-development/eloquent-power-joins/zipball/c6c42a52c5a097cc11761e72782b2d0215692caf", - "reference": "c6c42a52c5a097cc11761e72782b2d0215692caf", + "url": "https://api.github.com/repos/kirschbaum-development/eloquent-power-joins/zipball/3c1af9b86b02f1e39219849c1d2fee7cf77e8638", + "reference": "3c1af9b86b02f1e39219849c1d2fee7cf77e8638", "shasum": "" }, "require": { @@ -2366,9 +2364,9 @@ ], "support": { "issues": "https://github.com/kirschbaum-development/eloquent-power-joins/issues", - "source": "https://github.com/kirschbaum-development/eloquent-power-joins/tree/4.0.0" + "source": "https://github.com/kirschbaum-development/eloquent-power-joins/tree/4.0.1" }, - "time": "2024-10-06T12:28:14+00:00" + "time": "2024-11-26T13:22:08+00:00" }, { "name": "laravel-notification-channels/webhook", @@ -2427,16 +2425,16 @@ }, { "name": "laravel/fortify", - "version": "v1.24.4", + "version": "v1.25.0", "source": { "type": "git", "url": "https://github.com/laravel/fortify.git", - "reference": "5bd3bdd535acf4054865c64eec6d8bb8c60cc127" + "reference": "047e84ea8afe217061f1afa7cf8c6410c9d6a480" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/fortify/zipball/5bd3bdd535acf4054865c64eec6d8bb8c60cc127", - "reference": "5bd3bdd535acf4054865c64eec6d8bb8c60cc127", + "url": "https://api.github.com/repos/laravel/fortify/zipball/047e84ea8afe217061f1afa7cf8c6410c9d6a480", + "reference": "047e84ea8afe217061f1afa7cf8c6410c9d6a480", "shasum": "" }, "require": { @@ -2455,13 +2453,13 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - }, "laravel": { "providers": [ "Laravel\\Fortify\\FortifyServiceProvider" ] + }, + "branch-alias": { + "dev-master": "1.x-dev" } }, "autoload": { @@ -2488,27 +2486,27 @@ "issues": "https://github.com/laravel/fortify/issues", "source": "https://github.com/laravel/fortify" }, - "time": "2024-10-29T13:59:23+00:00" + "time": "2024-11-21T20:06:18+00:00" }, { "name": "laravel/framework", - "version": "v11.30.0", + "version": "v11.34.2", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "dff716442d9c229d716be82ccc9a7de52eb97193" + "reference": "865da6d73dd353f07a7bcbd778c55966a620121f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/dff716442d9c229d716be82ccc9a7de52eb97193", - "reference": "dff716442d9c229d716be82ccc9a7de52eb97193", + "url": "https://api.github.com/repos/laravel/framework/zipball/865da6d73dd353f07a7bcbd778c55966a620121f", + "reference": "865da6d73dd353f07a7bcbd778c55966a620121f", "shasum": "" }, "require": { "brick/math": "^0.9.3|^0.10.2|^0.11|^0.12", "composer-runtime-api": "^2.2", "doctrine/inflector": "^2.0.5", - "dragonmantank/cron-expression": "^3.3.2", + "dragonmantank/cron-expression": "^3.4", "egulias/email-validator": "^3.2.1|^4.0", "ext-ctype": "*", "ext-filter": "*", @@ -2518,35 +2516,36 @@ "ext-session": "*", "ext-tokenizer": "*", "fruitcake/php-cors": "^1.3", - "guzzlehttp/guzzle": "^7.8", + "guzzlehttp/guzzle": "^7.8.2", "guzzlehttp/uri-template": "^1.0", "laravel/prompts": "^0.1.18|^0.2.0|^0.3.0", - "laravel/serializable-closure": "^1.3", + "laravel/serializable-closure": "^1.3|^2.0", "league/commonmark": "^2.2.1", - "league/flysystem": "^3.8.0", + "league/flysystem": "^3.25.1", + "league/flysystem-local": "^3.25.1", "monolog/monolog": "^3.0", - "nesbot/carbon": "^2.72.2|^3.0", + "nesbot/carbon": "^2.72.2|^3.4", "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": "^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", + "symfony/console": "^7.0.3", + "symfony/error-handler": "^7.0.3", + "symfony/finder": "^7.0.3", + "symfony/http-foundation": "^7.0.3", + "symfony/http-kernel": "^7.0.3", + "symfony/mailer": "^7.0.3", + "symfony/mime": "^7.0.3", + "symfony/polyfill-php83": "^1.31", + "symfony/process": "^7.0.3", + "symfony/routing": "^7.0.3", + "symfony/uid": "^7.0.3", + "symfony/var-dumper": "^7.0.3", "tijsverkoyen/css-to-inline-styles": "^2.2.5", - "vlucas/phpdotenv": "^5.4.1", - "voku/portable-ascii": "^2.0" + "vlucas/phpdotenv": "^5.6.1", + "voku/portable-ascii": "^2.0.2" }, "conflict": { "mockery/mockery": "1.6.8", @@ -2596,29 +2595,32 @@ }, "require-dev": { "ably/ably-php": "^1.0", - "aws/aws-sdk-php": "^3.235.5", + "aws/aws-sdk-php": "^3.322.9", "ext-gmp": "*", - "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.6", + "fakerphp/faker": "^1.24", + "guzzlehttp/promises": "^2.0.3", + "guzzlehttp/psr7": "^2.4", + "league/flysystem-aws-s3-v3": "^3.25.1", + "league/flysystem-ftp": "^3.25.1", + "league/flysystem-path-prefixing": "^3.25.1", + "league/flysystem-read-only": "^3.25.1", + "league/flysystem-sftp-v3": "^3.25.1", + "mockery/mockery": "^1.6.10", "nyholm/psr7": "^1.2", - "orchestra/testbench-core": "^9.5", - "pda/pheanstalk": "^5.0", + "orchestra/testbench-core": "^9.6", + "pda/pheanstalk": "^5.0.6", "phpstan/phpstan": "^1.11.5", - "phpunit/phpunit": "^10.5|^11.0", - "predis/predis": "^2.0.2", + "phpunit/phpunit": "^10.5.35|^11.3.6", + "predis/predis": "^2.3", "resend/resend-php": "^0.10.0", - "symfony/cache": "^7.0", - "symfony/http-client": "^7.0", - "symfony/psr-http-message-bridge": "^7.0" + "symfony/cache": "^7.0.3", + "symfony/http-client": "^7.0.3", + "symfony/psr-http-message-bridge": "^7.0.3", + "symfony/translation": "^7.0.3" }, "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).", + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.322.9).", "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.", @@ -2632,16 +2634,16 @@ "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", "filp/whoops": "Required for friendly error pages in development (^2.14.3).", "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).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.25.1).", + "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.25.1).", + "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.25.1).", + "league/flysystem-read-only": "Required to use read-only disks (^3.25.1)", + "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.25.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 (^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).", + "predis/predis": "Required to use the predis connector (^2.3).", "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).", "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0).", @@ -2697,20 +2699,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2024-10-30T15:00:34+00:00" + "time": "2024-11-27T15:43:57+00:00" }, { "name": "laravel/jetstream", - "version": "v5.3.1", + "version": "v5.3.3", "source": { "type": "git", "url": "https://github.com/laravel/jetstream.git", - "reference": "d51ec6942f34e76ba4736452d5f4d6f54a186a6e" + "reference": "16859ea11a0bbce631c19d95ca0e172322e52e30" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/jetstream/zipball/d51ec6942f34e76ba4736452d5f4d6f54a186a6e", - "reference": "d51ec6942f34e76ba4736452d5f4d6f54a186a6e", + "url": "https://api.github.com/repos/laravel/jetstream/zipball/16859ea11a0bbce631c19d95ca0e172322e52e30", + "reference": "16859ea11a0bbce631c19d95ca0e172322e52e30", "shasum": "" }, "require": { @@ -2764,20 +2766,20 @@ "issues": "https://github.com/laravel/jetstream/issues", "source": "https://github.com/laravel/jetstream" }, - "time": "2024-10-30T13:32:43+00:00" + "time": "2024-11-13T13:59:38+00:00" }, { "name": "laravel/prompts", - "version": "v0.3.1", + "version": "v0.3.2", "source": { "type": "git", "url": "https://github.com/laravel/prompts.git", - "reference": "0f3848a445562dac376b27968f753c65e7e1036e" + "reference": "0e0535747c6b8d6d10adca8b68293cf4517abb0f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/prompts/zipball/0f3848a445562dac376b27968f753c65e7e1036e", - "reference": "0f3848a445562dac376b27968f753c65e7e1036e", + "url": "https://api.github.com/repos/laravel/prompts/zipball/0e0535747c6b8d6d10adca8b68293cf4517abb0f", + "reference": "0e0535747c6b8d6d10adca8b68293cf4517abb0f", "shasum": "" }, "require": { @@ -2793,7 +2795,7 @@ "require-dev": { "illuminate/collections": "^10.0|^11.0", "mockery/mockery": "^1.5", - "pestphp/pest": "^2.3", + "pestphp/pest": "^2.3|^3.4", "phpstan/phpstan": "^1.11", "phpstan/phpstan-mockery": "^1.1" }, @@ -2821,22 +2823,22 @@ "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.3.1" + "source": "https://github.com/laravel/prompts/tree/v0.3.2" }, - "time": "2024-10-09T19:42:26+00:00" + "time": "2024-11-12T14:59:47+00:00" }, { "name": "laravel/sanctum", - "version": "v4.0.3", + "version": "v4.0.5", "source": { "type": "git", "url": "https://github.com/laravel/sanctum.git", - "reference": "54aea9d13743ae8a6cdd3c28dbef128a17adecab" + "reference": "fe361b9a63407a228f884eb78d7217f680b50140" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sanctum/zipball/54aea9d13743ae8a6cdd3c28dbef128a17adecab", - "reference": "54aea9d13743ae8a6cdd3c28dbef128a17adecab", + "url": "https://api.github.com/repos/laravel/sanctum/zipball/fe361b9a63407a228f884eb78d7217f680b50140", + "reference": "fe361b9a63407a228f884eb78d7217f680b50140", "shasum": "" }, "require": { @@ -2887,36 +2889,36 @@ "issues": "https://github.com/laravel/sanctum/issues", "source": "https://github.com/laravel/sanctum" }, - "time": "2024-09-27T14:55:41+00:00" + "time": "2024-11-26T14:36:23+00:00" }, { "name": "laravel/serializable-closure", - "version": "v1.3.5", + "version": "v2.0.0", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "1dc4a3dbfa2b7628a3114e43e32120cce7cdda9c" + "reference": "0d8d3d8086984996df86596a86dea60398093a81" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/1dc4a3dbfa2b7628a3114e43e32120cce7cdda9c", - "reference": "1dc4a3dbfa2b7628a3114e43e32120cce7cdda9c", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/0d8d3d8086984996df86596a86dea60398093a81", + "reference": "0d8d3d8086984996df86596a86dea60398093a81", "shasum": "" }, "require": { - "php": "^7.3|^8.0" + "php": "^8.1" }, "require-dev": { - "illuminate/support": "^8.0|^9.0|^10.0|^11.0", - "nesbot/carbon": "^2.61|^3.0", - "pestphp/pest": "^1.21.3", - "phpstan/phpstan": "^1.8.2", - "symfony/var-dumper": "^5.4.11|^6.2.0|^7.0.0" + "illuminate/support": "^10.0|^11.0", + "nesbot/carbon": "^2.67|^3.0", + "pestphp/pest": "^2.36", + "phpstan/phpstan": "^2.0", + "symfony/var-dumper": "^6.2.0|^7.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.x-dev" + "dev-master": "2.x-dev" } }, "autoload": { @@ -2948,7 +2950,7 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2024-09-23T13:33:08+00:00" + "time": "2024-11-19T01:38:44+00:00" }, { "name": "laravel/socialite", @@ -3024,16 +3026,16 @@ }, { "name": "laravel/telescope", - "version": "v5.2.4", + "version": "v5.2.6", "source": { "type": "git", "url": "https://github.com/laravel/telescope.git", - "reference": "749369e996611d803e7c1b57929b482dd676008d" + "reference": "7ee46fbea8e3b01108575c8edf7377abddfe8bb9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/telescope/zipball/749369e996611d803e7c1b57929b482dd676008d", - "reference": "749369e996611d803e7c1b57929b482dd676008d", + "url": "https://api.github.com/repos/laravel/telescope/zipball/7ee46fbea8e3b01108575c8edf7377abddfe8bb9", + "reference": "7ee46fbea8e3b01108575c8edf7377abddfe8bb9", "shasum": "" }, "require": { @@ -3087,9 +3089,9 @@ ], "support": { "issues": "https://github.com/laravel/telescope/issues", - "source": "https://github.com/laravel/telescope/tree/v5.2.4" + "source": "https://github.com/laravel/telescope/tree/v5.2.6" }, - "time": "2024-10-29T15:35:13+00:00" + "time": "2024-11-25T20:34:58+00:00" }, { "name": "laravel/tinker", @@ -3159,16 +3161,16 @@ }, { "name": "league/commonmark", - "version": "2.5.3", + "version": "2.6.0", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "b650144166dfa7703e62a22e493b853b58d874b0" + "reference": "d150f911e0079e90ae3c106734c93137c184f932" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/b650144166dfa7703e62a22e493b853b58d874b0", - "reference": "b650144166dfa7703e62a22e493b853b58d874b0", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/d150f911e0079e90ae3c106734c93137c184f932", + "reference": "d150f911e0079e90ae3c106734c93137c184f932", "shasum": "" }, "require": { @@ -3193,8 +3195,9 @@ "phpstan/phpstan": "^1.8.2", "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0", "scrutinizer/ocular": "^1.8.1", - "symfony/finder": "^5.3 | ^6.0 || ^7.0", - "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 || ^7.0", + "symfony/finder": "^5.3 | ^6.0 | ^7.0", + "symfony/process": "^5.4 | ^6.0 | ^7.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.0", "unleashedtech/php-coding-standard": "^3.1.1", "vimeo/psalm": "^4.24.0 || ^5.0.0" }, @@ -3204,7 +3207,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.6-dev" + "dev-main": "2.7-dev" } }, "autoload": { @@ -3261,7 +3264,7 @@ "type": "tidelift" } ], - "time": "2024-08-16T11:46:16+00:00" + "time": "2024-12-07T15:34:16+00:00" }, { "name": "league/config", @@ -3347,16 +3350,16 @@ }, { "name": "league/csv", - "version": "9.18.0", + "version": "9.19.0", "source": { "type": "git", "url": "https://github.com/thephpleague/csv.git", - "reference": "b02d010e4055ae992247f6ffd1e7b103ef2a0790" + "reference": "f81df48a012a9e86d077e74eaff666fd15bfab88" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/csv/zipball/b02d010e4055ae992247f6ffd1e7b103ef2a0790", - "reference": "b02d010e4055ae992247f6ffd1e7b103ef2a0790", + "url": "https://api.github.com/repos/thephpleague/csv/zipball/f81df48a012a9e86d077e74eaff666fd15bfab88", + "reference": "f81df48a012a9e86d077e74eaff666fd15bfab88", "shasum": "" }, "require": { @@ -3368,12 +3371,12 @@ "ext-xdebug": "*", "friendsofphp/php-cs-fixer": "^3.64.0", "phpbench/phpbench": "^1.3.1", - "phpstan/phpstan": "^1.12.6", + "phpstan/phpstan": "^1.12.11", "phpstan/phpstan-deprecation-rules": "^1.2.1", - "phpstan/phpstan-phpunit": "^1.4.0", + "phpstan/phpstan-phpunit": "^1.4.1", "phpstan/phpstan-strict-rules": "^1.6.1", - "phpunit/phpunit": "^10.5.16 || ^11.4.1", - "symfony/var-dumper": "^6.4.8 || ^7.1.5" + "phpunit/phpunit": "^10.5.16 || ^11.4.3", + "symfony/var-dumper": "^6.4.8 || ^7.1.8" }, "suggest": { "ext-dom": "Required to use the XMLConverter and the HTMLConverter classes", @@ -3430,7 +3433,7 @@ "type": "github" } ], - "time": "2024-10-18T08:14:48+00:00" + "time": "2024-12-08T08:09:35+00:00" }, { "name": "league/flysystem", @@ -3698,20 +3701,20 @@ }, { "name": "league/uri", - "version": "7.4.1", + "version": "7.5.1", "source": { "type": "git", "url": "https://github.com/thephpleague/uri.git", - "reference": "bedb6e55eff0c933668addaa7efa1e1f2c417cc4" + "reference": "81fb5145d2644324614cc532b28efd0215bda430" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri/zipball/bedb6e55eff0c933668addaa7efa1e1f2c417cc4", - "reference": "bedb6e55eff0c933668addaa7efa1e1f2c417cc4", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/81fb5145d2644324614cc532b28efd0215bda430", + "reference": "81fb5145d2644324614cc532b28efd0215bda430", "shasum": "" }, "require": { - "league/uri-interfaces": "^7.3", + "league/uri-interfaces": "^7.5", "php": "^8.1" }, "conflict": { @@ -3776,7 +3779,7 @@ "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri/tree/7.4.1" + "source": "https://github.com/thephpleague/uri/tree/7.5.1" }, "funding": [ { @@ -3784,20 +3787,20 @@ "type": "github" } ], - "time": "2024-03-23T07:42:40+00:00" + "time": "2024-12-08T08:40:02+00:00" }, { "name": "league/uri-interfaces", - "version": "7.4.1", + "version": "7.5.0", "source": { "type": "git", "url": "https://github.com/thephpleague/uri-interfaces.git", - "reference": "8d43ef5c841032c87e2de015972c06f3865ef718" + "reference": "08cfc6c4f3d811584fb09c37e2849e6a7f9b0742" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/8d43ef5c841032c87e2de015972c06f3865ef718", - "reference": "8d43ef5c841032c87e2de015972c06f3865ef718", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/08cfc6c4f3d811584fb09c37e2849e6a7f9b0742", + "reference": "08cfc6c4f3d811584fb09c37e2849e6a7f9b0742", "shasum": "" }, "require": { @@ -3860,7 +3863,7 @@ "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri-interfaces/tree/7.4.1" + "source": "https://github.com/thephpleague/uri-interfaces/tree/7.5.0" }, "funding": [ { @@ -3868,7 +3871,7 @@ "type": "github" } ], - "time": "2024-03-23T07:42:40+00:00" + "time": "2024-12-08T08:18:47+00:00" }, { "name": "livewire/livewire", @@ -3907,12 +3910,12 @@ "type": "library", "extra": { "laravel": { - "providers": [ - "Livewire\\LivewireServiceProvider" - ], "aliases": { "Livewire": "Livewire\\Livewire" - } + }, + "providers": [ + "Livewire\\LivewireServiceProvider" + ] } }, "autoload": { @@ -4013,18 +4016,57 @@ }, "time": "2024-03-31T07:05:07+00:00" }, + { + "name": "mercadopago/dx-php", + "version": "3.0.8", + "source": { + "type": "git", + "url": "https://github.com/mercadopago/sdk-php.git", + "reference": "b03c3c789c7d4fedfcf7d54cf57993e77c95aabb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mercadopago/sdk-php/zipball/b03c3c789c7d4fedfcf7d54cf57993e77c95aabb", + "reference": "b03c3c789c7d4fedfcf7d54cf57993e77c95aabb", + "shasum": "" + }, + "require": { + "php": ">=8.2" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.22", + "phpunit/phpunit": "^10.2", + "squizlabs/php_codesniffer": "3.*" + }, + "type": "library", + "autoload": { + "psr-4": { + "MercadoPago\\": "src/MercadoPago" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Mercado Pago PHP SDK", + "homepage": "https://github.com/mercadopago/sdk-php", + "support": { + "source": "https://github.com/mercadopago/sdk-php/tree/3.0.8" + }, + "time": "2024-09-03T12:26:16+00:00" + }, { "name": "mobiledetect/mobiledetectlib", - "version": "4.8.06", + "version": "4.8.07", "source": { "type": "git", "url": "https://github.com/serbanghita/Mobile-Detect.git", - "reference": "af088b54cecc13b3264edca7da93a89ba7aa2d9e" + "reference": "a1ccee870f0662c60f7173ce290aca866904788a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/serbanghita/Mobile-Detect/zipball/af088b54cecc13b3264edca7da93a89ba7aa2d9e", - "reference": "af088b54cecc13b3264edca7da93a89ba7aa2d9e", + "url": "https://api.github.com/repos/serbanghita/Mobile-Detect/zipball/a1ccee870f0662c60f7173ce290aca866904788a", + "reference": "a1ccee870f0662c60f7173ce290aca866904788a", "shasum": "" }, "require": { @@ -4032,11 +4074,11 @@ "psr/simple-cache": "^2 || ^3" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^v3.35.1", + "friendsofphp/php-cs-fixer": "^v3.65.0", "phpbench/phpbench": "^1.2", - "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^9.6", - "squizlabs/php_codesniffer": "^3.7" + "phpstan/phpstan": "^1.12.x-dev", + "phpunit/phpunit": "^9.6.18", + "squizlabs/php_codesniffer": "^3.11.1" }, "type": "library", "autoload": { @@ -4067,7 +4109,7 @@ ], "support": { "issues": "https://github.com/serbanghita/Mobile-Detect/issues", - "source": "https://github.com/serbanghita/Mobile-Detect/tree/4.8.06" + "source": "https://github.com/serbanghita/Mobile-Detect/tree/4.8.07" }, "funding": [ { @@ -4075,20 +4117,20 @@ "type": "github" } ], - "time": "2024-03-01T22:28:42+00:00" + "time": "2024-12-08T19:56:10+00:00" }, { "name": "monolog/monolog", - "version": "3.7.0", + "version": "3.8.1", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "f4393b648b78a5408747de94fca38beb5f7e9ef8" + "reference": "aef6ee73a77a66e404dd6540934a9ef1b3c855b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f4393b648b78a5408747de94fca38beb5f7e9ef8", - "reference": "f4393b648b78a5408747de94fca38beb5f7e9ef8", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/aef6ee73a77a66e404dd6540934a9ef1b3c855b4", + "reference": "aef6ee73a77a66e404dd6540934a9ef1b3c855b4", "shasum": "" }, "require": { @@ -4108,12 +4150,14 @@ "guzzlehttp/psr7": "^2.2", "mongodb/mongodb": "^1.8", "php-amqplib/php-amqplib": "~2.4 || ^3", - "phpstan/phpstan": "^1.9", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-strict-rules": "^1.4", - "phpunit/phpunit": "^10.5.17", + "php-console/php-console": "^3.1.8", + "phpstan/phpstan": "^2", + "phpstan/phpstan-deprecation-rules": "^2", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^10.5.17 || ^11.0.7", "predis/predis": "^1.1 || ^2", - "ruflin/elastica": "^7", + "rollbar/rollbar": "^4.0", + "ruflin/elastica": "^7 || ^8", "symfony/mailer": "^5.4 || ^6", "symfony/mime": "^5.4 || ^6" }, @@ -4164,7 +4208,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/3.7.0" + "source": "https://github.com/Seldaek/monolog/tree/3.8.1" }, "funding": [ { @@ -4176,20 +4220,20 @@ "type": "tidelift" } ], - "time": "2024-06-28T09:40:51+00:00" + "time": "2024-12-05T17:15:07+00:00" }, { "name": "nesbot/carbon", - "version": "3.8.1", + "version": "3.8.2", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "10ac0aa86b8062219ce21e8189123d611ca3ecd9" + "reference": "e1268cdbc486d97ce23fef2c666dc3c6b6de9947" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/10ac0aa86b8062219ce21e8189123d611ca3ecd9", - "reference": "10ac0aa86b8062219ce21e8189123d611ca3ecd9", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/e1268cdbc486d97ce23fef2c666dc3c6b6de9947", + "reference": "e1268cdbc486d97ce23fef2c666dc3c6b6de9947", "shasum": "" }, "require": { @@ -4282,7 +4326,7 @@ "type": "tidelift" } ], - "time": "2024-11-03T16:02:24+00:00" + "time": "2024-11-07T17:46:48+00:00" }, { "name": "nette/schema", @@ -4492,31 +4536,31 @@ }, { "name": "nunomaduro/termwind", - "version": "v2.2.0", + "version": "v2.3.0", "source": { "type": "git", "url": "https://github.com/nunomaduro/termwind.git", - "reference": "42c84e4e8090766bbd6445d06cd6e57650626ea3" + "reference": "52915afe6a1044e8b9cee1bcff836fb63acf9cda" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/42c84e4e8090766bbd6445d06cd6e57650626ea3", - "reference": "42c84e4e8090766bbd6445d06cd6e57650626ea3", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/52915afe6a1044e8b9cee1bcff836fb63acf9cda", + "reference": "52915afe6a1044e8b9cee1bcff836fb63acf9cda", "shasum": "" }, "require": { "ext-mbstring": "*", "php": "^8.2", - "symfony/console": "^7.1.5" + "symfony/console": "^7.1.8" }, "require-dev": { - "illuminate/console": "^11.28.0", - "laravel/pint": "^1.18.1", + "illuminate/console": "^11.33.2", + "laravel/pint": "^1.18.2", "mockery/mockery": "^1.6.12", "pestphp/pest": "^2.36.0", - "phpstan/phpstan": "^1.12.6", + "phpstan/phpstan": "^1.12.11", "phpstan/phpstan-strict-rules": "^1.6.1", - "symfony/var-dumper": "^7.1.5", + "symfony/var-dumper": "^7.1.8", "thecodingmachine/phpstan-strict-rules": "^1.0.0" }, "type": "library", @@ -4559,7 +4603,7 @@ ], "support": { "issues": "https://github.com/nunomaduro/termwind/issues", - "source": "https://github.com/nunomaduro/termwind/tree/v2.2.0" + "source": "https://github.com/nunomaduro/termwind/tree/v2.3.0" }, "funding": [ { @@ -4575,20 +4619,20 @@ "type": "github" } ], - "time": "2024-10-15T16:15:16+00:00" + "time": "2024-11-21T10:39:51+00:00" }, { "name": "nwidart/laravel-modules", - "version": "v11.1.4", + "version": "v11.1.7", "source": { "type": "git", "url": "https://github.com/nWidart/laravel-modules.git", - "reference": "fb1f6bd7b168baaa6212dee678c18fc983d47ed4" + "reference": "26c0716994b2669c308e15a7090a6867f7a1ba09" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nWidart/laravel-modules/zipball/fb1f6bd7b168baaa6212dee678c18fc983d47ed4", - "reference": "fb1f6bd7b168baaa6212dee678c18fc983d47ed4", + "url": "https://api.github.com/repos/nWidart/laravel-modules/zipball/26c0716994b2669c308e15a7090a6867f7a1ba09", + "reference": "26c0716994b2669c308e15a7090a6867f7a1ba09", "shasum": "" }, "require": { @@ -4600,7 +4644,7 @@ }, "require-dev": { "friendsofphp/php-cs-fixer": "^v3.52", - "laravel/framework": "^v11.0", + "laravel/framework": "^v11.33", "laravel/pint": "^1.16", "mockery/mockery": "^1.6", "orchestra/testbench": "^v9.0", @@ -4611,12 +4655,12 @@ "type": "library", "extra": { "laravel": { - "providers": [ - "Nwidart\\Modules\\LaravelModulesServiceProvider" - ], "aliases": { "Module": "Nwidart\\Modules\\Facades\\Module" - } + }, + "providers": [ + "Nwidart\\Modules\\LaravelModulesServiceProvider" + ] }, "branch-alias": { "dev-master": "11.0-dev" @@ -4652,7 +4696,7 @@ ], "support": { "issues": "https://github.com/nWidart/laravel-modules/issues", - "source": "https://github.com/nWidart/laravel-modules/tree/v11.1.4" + "source": "https://github.com/nWidart/laravel-modules/tree/v11.1.7" }, "funding": [ { @@ -4664,20 +4708,20 @@ "type": "github" } ], - "time": "2024-09-22T20:04:49+00:00" + "time": "2024-12-06T08:10:11+00:00" }, { "name": "openspout/openspout", - "version": "v4.26.0", + "version": "v4.28.2", "source": { "type": "git", "url": "https://github.com/openspout/openspout.git", - "reference": "a49b947c0c109f4fd112f9b5c6d6cb3e6baf8b50" + "reference": "d6dd654b5db502f28c5773edfa785b516745a142" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/openspout/openspout/zipball/a49b947c0c109f4fd112f9b5c6d6cb3e6baf8b50", - "reference": "a49b947c0c109f4fd112f9b5c6d6cb3e6baf8b50", + "url": "https://api.github.com/repos/openspout/openspout/zipball/d6dd654b5db502f28c5773edfa785b516745a142", + "reference": "d6dd654b5db502f28c5773edfa785b516745a142", "shasum": "" }, "require": { @@ -4691,13 +4735,13 @@ }, "require-dev": { "ext-zlib": "*", - "friendsofphp/php-cs-fixer": "^3.64.0", - "infection/infection": "^0.29.6", + "friendsofphp/php-cs-fixer": "^3.65.0", + "infection/infection": "^0.29.8", "phpbench/phpbench": "^1.3.1", - "phpstan/phpstan": "^1.12.4", - "phpstan/phpstan-phpunit": "^1.4.0", - "phpstan/phpstan-strict-rules": "^1.6.1", - "phpunit/phpunit": "^11.3.6" + "phpstan/phpstan": "^2.0.3", + "phpstan/phpstan-phpunit": "^2.0.1", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^11.4.4" }, "suggest": { "ext-iconv": "To handle non UTF-8 CSV files (if \"php-mbstring\" is not already installed or is too limited)", @@ -4745,7 +4789,7 @@ ], "support": { "issues": "https://github.com/openspout/openspout/issues", - "source": "https://github.com/openspout/openspout/tree/v4.26.0" + "source": "https://github.com/openspout/openspout/tree/v4.28.2" }, "funding": [ { @@ -4757,7 +4801,7 @@ "type": "github" } ], - "time": "2024-09-24T14:04:43+00:00" + "time": "2024-12-06T06:17:37+00:00" }, { "name": "paragonie/constant_time_encoding", @@ -5623,16 +5667,16 @@ }, { "name": "psy/psysh", - "version": "v0.12.4", + "version": "v0.12.6", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "2fd717afa05341b4f8152547f142cd2f130f6818" + "reference": "3b5ea0efaa791cd1c65ecc493aec3e2aa55ff57c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/2fd717afa05341b4f8152547f142cd2f130f6818", - "reference": "2fd717afa05341b4f8152547f142cd2f130f6818", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/3b5ea0efaa791cd1c65ecc493aec3e2aa55ff57c", + "reference": "3b5ea0efaa791cd1c65ecc493aec3e2aa55ff57c", "shasum": "" }, "require": { @@ -5659,12 +5703,12 @@ ], "type": "library", "extra": { - "branch-alias": { - "dev-main": "0.12.x-dev" - }, "bamarni-bin": { "bin-links": false, "forward-command": false + }, + "branch-alias": { + "dev-main": "0.12.x-dev" } }, "autoload": { @@ -5696,9 +5740,9 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.12.4" + "source": "https://github.com/bobthecow/psysh/tree/v0.12.6" }, - "time": "2024-06-10T01:18:23+00:00" + "time": "2024-12-07T20:08:52+00:00" }, { "name": "ralouphie/getallheaders", @@ -5959,12 +6003,12 @@ "type": "library", "extra": { "laravel": { - "providers": [ - "RyanChandler\\BladeCaptureDirective\\BladeCaptureDirectiveServiceProvider" - ], "aliases": { "BladeCaptureDirective": "RyanChandler\\BladeCaptureDirective\\Facades\\BladeCaptureDirective" - } + }, + "providers": [ + "RyanChandler\\BladeCaptureDirective\\BladeCaptureDirectiveServiceProvider" + ] } }, "autoload": { @@ -6005,16 +6049,16 @@ }, { "name": "spatie/color", - "version": "1.6.0", + "version": "1.6.1", "source": { "type": "git", "url": "https://github.com/spatie/color.git", - "reference": "02ce48c480f86d65702188f738f4e8ccad1b999a" + "reference": "4c540ffbef68a3df3d209718ae06deaab081e708" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/color/zipball/02ce48c480f86d65702188f738f4e8ccad1b999a", - "reference": "02ce48c480f86d65702188f738f4e8ccad1b999a", + "url": "https://api.github.com/repos/spatie/color/zipball/4c540ffbef68a3df3d209718ae06deaab081e708", + "reference": "4c540ffbef68a3df3d209718ae06deaab081e708", "shasum": "" }, "require": { @@ -6052,7 +6096,7 @@ ], "support": { "issues": "https://github.com/spatie/color/issues", - "source": "https://github.com/spatie/color/tree/1.6.0" + "source": "https://github.com/spatie/color/tree/1.6.1" }, "funding": [ { @@ -6060,7 +6104,7 @@ "type": "github" } ], - "time": "2024-09-20T14:00:15+00:00" + "time": "2024-11-18T15:00:47+00:00" }, { "name": "spatie/invade", @@ -6123,16 +6167,16 @@ }, { "name": "spatie/laravel-package-tools", - "version": "1.16.5", + "version": "1.16.6", "source": { "type": "git", "url": "https://github.com/spatie/laravel-package-tools.git", - "reference": "c7413972cf22ffdff97b68499c22baa04eddb6a2" + "reference": "1f26942dc1e5c49eacfced34fdbc29ed234bd7b3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/c7413972cf22ffdff97b68499c22baa04eddb6a2", - "reference": "c7413972cf22ffdff97b68499c22baa04eddb6a2", + "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/1f26942dc1e5c49eacfced34fdbc29ed234bd7b3", + "reference": "1f26942dc1e5c49eacfced34fdbc29ed234bd7b3", "shasum": "" }, "require": { @@ -6171,7 +6215,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-package-tools/issues", - "source": "https://github.com/spatie/laravel-package-tools/tree/1.16.5" + "source": "https://github.com/spatie/laravel-package-tools/tree/1.16.6" }, "funding": [ { @@ -6179,20 +6223,20 @@ "type": "github" } ], - "time": "2024-08-27T18:56:10+00:00" + "time": "2024-11-18T15:02:02+00:00" }, { "name": "spatie/laravel-permission", - "version": "6.10.0", + "version": "6.10.1", "source": { "type": "git", "url": "https://github.com/spatie/laravel-permission.git", - "reference": "2444bb914a52c570c00ae8c94e096a58e01b2317" + "reference": "8bb69d6d67387f7a00d93a2f5fab98860f06e704" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-permission/zipball/2444bb914a52c570c00ae8c94e096a58e01b2317", - "reference": "2444bb914a52c570c00ae8c94e096a58e01b2317", + "url": "https://api.github.com/repos/spatie/laravel-permission/zipball/8bb69d6d67387f7a00d93a2f5fab98860f06e704", + "reference": "8bb69d6d67387f7a00d93a2f5fab98860f06e704", "shasum": "" }, "require": { @@ -6210,14 +6254,14 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "6.x-dev", - "dev-master": "6.x-dev" - }, "laravel": { "providers": [ "Spatie\\Permission\\PermissionServiceProvider" ] + }, + "branch-alias": { + "dev-main": "6.x-dev", + "dev-master": "6.x-dev" } }, "autoload": { @@ -6254,7 +6298,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-permission/issues", - "source": "https://github.com/spatie/laravel-permission/tree/6.10.0" + "source": "https://github.com/spatie/laravel-permission/tree/6.10.1" }, "funding": [ { @@ -6262,20 +6306,20 @@ "type": "github" } ], - "time": "2024-11-05T17:30:49+00:00" + "time": "2024-11-08T18:45:41+00:00" }, { "name": "symfony/clock", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/clock.git", - "reference": "97bebc53548684c17ed696bc8af016880f0f098d" + "reference": "b81435fbd6648ea425d1ee96a2d8e68f4ceacd24" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/clock/zipball/97bebc53548684c17ed696bc8af016880f0f098d", - "reference": "97bebc53548684c17ed696bc8af016880f0f098d", + "url": "https://api.github.com/repos/symfony/clock/zipball/b81435fbd6648ea425d1ee96a2d8e68f4ceacd24", + "reference": "b81435fbd6648ea425d1ee96a2d8e68f4ceacd24", "shasum": "" }, "require": { @@ -6320,7 +6364,7 @@ "time" ], "support": { - "source": "https://github.com/symfony/clock/tree/v7.1.6" + "source": "https://github.com/symfony/clock/tree/v7.2.0" }, "funding": [ { @@ -6336,20 +6380,20 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/console", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "bb5192af6edc797cbab5c8e8ecfea2fe5f421e57" + "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/bb5192af6edc797cbab5c8e8ecfea2fe5f421e57", - "reference": "bb5192af6edc797cbab5c8e8ecfea2fe5f421e57", + "url": "https://api.github.com/repos/symfony/console/zipball/23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", + "reference": "23c8aae6d764e2bae02d2a99f7532a7f6ed619cf", "shasum": "" }, "require": { @@ -6413,7 +6457,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.1.6" + "source": "https://github.com/symfony/console/tree/v7.2.0" }, "funding": [ { @@ -6429,20 +6473,20 @@ "type": "tidelift" } ], - "time": "2024-10-09T08:46:59+00:00" + "time": "2024-11-06T14:24:19+00:00" }, { "name": "symfony/css-selector", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "4aa4f6b3d6749c14d3aa815eef8226632e7bbc66" + "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/4aa4f6b3d6749c14d3aa815eef8226632e7bbc66", - "reference": "4aa4f6b3d6749c14d3aa815eef8226632e7bbc66", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/601a5ce9aaad7bf10797e3663faefce9e26c24e2", + "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2", "shasum": "" }, "require": { @@ -6478,7 +6522,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v7.1.6" + "source": "https://github.com/symfony/css-selector/tree/v7.2.0" }, "funding": [ { @@ -6494,20 +6538,20 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1" + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", - "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", "shasum": "" }, "require": { @@ -6545,7 +6589,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1" }, "funding": [ { @@ -6561,20 +6605,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/error-handler", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "d60117093c2a9fe667baa8fedf84e8a09b9c592f" + "reference": "672b3dd1ef8b87119b446d67c58c106c43f965fe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/d60117093c2a9fe667baa8fedf84e8a09b9c592f", - "reference": "d60117093c2a9fe667baa8fedf84e8a09b9c592f", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/672b3dd1ef8b87119b446d67c58c106c43f965fe", + "reference": "672b3dd1ef8b87119b446d67c58c106c43f965fe", "shasum": "" }, "require": { @@ -6620,7 +6664,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/v7.1.6" + "source": "https://github.com/symfony/error-handler/tree/v7.2.0" }, "funding": [ { @@ -6636,20 +6680,20 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-11-05T15:35:02+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "87254c78dd50721cfd015b62277a8281c5589702" + "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/87254c78dd50721cfd015b62277a8281c5589702", - "reference": "87254c78dd50721cfd015b62277a8281c5589702", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/910c5db85a5356d0fea57680defec4e99eb9c8c1", + "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1", "shasum": "" }, "require": { @@ -6700,7 +6744,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v7.1.6" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.2.0" }, "funding": [ { @@ -6716,20 +6760,20 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50" + "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/8f93aec25d41b72493c6ddff14e916177c9efc50", - "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7642f5e970b672283b7823222ae8ef8bbc160b9f", + "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f", "shasum": "" }, "require": { @@ -6776,7 +6820,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.1" }, "funding": [ { @@ -6792,20 +6836,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/finder", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "2cb89664897be33f78c65d3d2845954c8d7a43b8" + "reference": "6de263e5868b9a137602dd1e33e4d48bfae99c49" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/2cb89664897be33f78c65d3d2845954c8d7a43b8", - "reference": "2cb89664897be33f78c65d3d2845954c8d7a43b8", + "url": "https://api.github.com/repos/symfony/finder/zipball/6de263e5868b9a137602dd1e33e4d48bfae99c49", + "reference": "6de263e5868b9a137602dd1e33e4d48bfae99c49", "shasum": "" }, "require": { @@ -6840,7 +6884,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v7.1.6" + "source": "https://github.com/symfony/finder/tree/v7.2.0" }, "funding": [ { @@ -6856,20 +6900,20 @@ "type": "tidelift" } ], - "time": "2024-10-01T08:31:23+00:00" + "time": "2024-10-23T06:56:12+00:00" }, { "name": "symfony/html-sanitizer", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/html-sanitizer.git", - "reference": "a25620fc6407e14331f3c0c5668eb4f35c392d4a" + "reference": "1d23de45af5e8508441ff5f82bb493e83cdcbba4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/html-sanitizer/zipball/a25620fc6407e14331f3c0c5668eb4f35c392d4a", - "reference": "a25620fc6407e14331f3c0c5668eb4f35c392d4a", + "url": "https://api.github.com/repos/symfony/html-sanitizer/zipball/1d23de45af5e8508441ff5f82bb493e83cdcbba4", + "reference": "1d23de45af5e8508441ff5f82bb493e83cdcbba4", "shasum": "" }, "require": { @@ -6909,7 +6953,7 @@ "sanitizer" ], "support": { - "source": "https://github.com/symfony/html-sanitizer/tree/v7.1.6" + "source": "https://github.com/symfony/html-sanitizer/tree/v7.2.0" }, "funding": [ { @@ -6925,35 +6969,36 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/http-foundation", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "3d7bbf071b25f802f7d55524d408bed414ea71e2" + "reference": "e88a66c3997859532bc2ddd6dd8f35aba2711744" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/3d7bbf071b25f802f7d55524d408bed414ea71e2", - "reference": "3d7bbf071b25f802f7d55524d408bed414ea71e2", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e88a66c3997859532bc2ddd6dd8f35aba2711744", + "reference": "e88a66c3997859532bc2ddd6dd8f35aba2711744", "shasum": "" }, "require": { "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", "symfony/polyfill-mbstring": "~1.1", "symfony/polyfill-php83": "^1.27" }, "conflict": { "doctrine/dbal": "<3.6", - "symfony/cache": "<6.4" + "symfony/cache": "<6.4.12|>=7.0,<7.1.5" }, "require-dev": { "doctrine/dbal": "^3.6|^4", "predis/predis": "^1.1|^2.0", - "symfony/cache": "^6.4|^7.0", + "symfony/cache": "^6.4.12|^7.1.5", "symfony/dependency-injection": "^6.4|^7.0", "symfony/expression-language": "^6.4|^7.0", "symfony/http-kernel": "^6.4|^7.0", @@ -6986,7 +7031,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v7.1.6" + "source": "https://github.com/symfony/http-foundation/tree/v7.2.0" }, "funding": [ { @@ -7002,20 +7047,20 @@ "type": "tidelift" } ], - "time": "2024-10-11T19:23:14+00:00" + "time": "2024-11-13T18:58:46+00:00" }, { "name": "symfony/http-kernel", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "5d8315899cd76b2e7e29179bf5fea103e41bdf03" + "reference": "6b4722a25e0aed1ccb4914b9bcbd493cc4676b4d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/5d8315899cd76b2e7e29179bf5fea103e41bdf03", - "reference": "5d8315899cd76b2e7e29179bf5fea103e41bdf03", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/6b4722a25e0aed1ccb4914b9bcbd493cc4676b4d", + "reference": "6b4722a25e0aed1ccb4914b9bcbd493cc4676b4d", "shasum": "" }, "require": { @@ -7044,7 +7089,7 @@ "symfony/twig-bridge": "<6.4", "symfony/validator": "<6.4", "symfony/var-dumper": "<6.4", - "twig/twig": "<3.0.4" + "twig/twig": "<3.12" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" @@ -7072,7 +7117,7 @@ "symfony/validator": "^6.4|^7.0", "symfony/var-dumper": "^6.4|^7.0", "symfony/var-exporter": "^6.4|^7.0", - "twig/twig": "^3.0.4" + "twig/twig": "^3.12" }, "type": "library", "autoload": { @@ -7100,7 +7145,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/v7.1.6" + "source": "https://github.com/symfony/http-kernel/tree/v7.2.0" }, "funding": [ { @@ -7116,20 +7161,20 @@ "type": "tidelift" } ], - "time": "2024-10-27T13:54:21+00:00" + "time": "2024-11-29T08:42:40+00:00" }, { "name": "symfony/mailer", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "69c9948451fb3a6a4d47dc8261d1794734e76cdd" + "reference": "e4d358702fb66e4c8a2af08e90e7271a62de39cc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/69c9948451fb3a6a4d47dc8261d1794734e76cdd", - "reference": "69c9948451fb3a6a4d47dc8261d1794734e76cdd", + "url": "https://api.github.com/repos/symfony/mailer/zipball/e4d358702fb66e4c8a2af08e90e7271a62de39cc", + "reference": "e4d358702fb66e4c8a2af08e90e7271a62de39cc", "shasum": "" }, "require": { @@ -7138,7 +7183,7 @@ "psr/event-dispatcher": "^1", "psr/log": "^1|^2|^3", "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/mime": "^6.4|^7.0", + "symfony/mime": "^7.2", "symfony/service-contracts": "^2.5|^3" }, "conflict": { @@ -7180,7 +7225,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v7.1.6" + "source": "https://github.com/symfony/mailer/tree/v7.2.0" }, "funding": [ { @@ -7196,20 +7241,20 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-11-25T15:21:05+00:00" }, { "name": "symfony/mime", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "caa1e521edb2650b8470918dfe51708c237f0598" + "reference": "cc84a4b81f62158c3846ac7ff10f696aae2b524d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/caa1e521edb2650b8470918dfe51708c237f0598", - "reference": "caa1e521edb2650b8470918dfe51708c237f0598", + "url": "https://api.github.com/repos/symfony/mime/zipball/cc84a4b81f62158c3846ac7ff10f696aae2b524d", + "reference": "cc84a4b81f62158c3846ac7ff10f696aae2b524d", "shasum": "" }, "require": { @@ -7264,7 +7309,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v7.1.6" + "source": "https://github.com/symfony/mime/tree/v7.2.0" }, "funding": [ { @@ -7280,7 +7325,7 @@ "type": "tidelift" } ], - "time": "2024-10-25T15:11:02+00:00" + "time": "2024-11-23T09:19:39+00:00" }, { "name": "symfony/polyfill-ctype", @@ -7920,16 +7965,16 @@ }, { "name": "symfony/process", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "6aaa189ddb4ff6b5de8fa3210f2fb42c87b4d12e" + "reference": "d34b22ba9390ec19d2dd966c40aa9e8462f27a7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/6aaa189ddb4ff6b5de8fa3210f2fb42c87b4d12e", - "reference": "6aaa189ddb4ff6b5de8fa3210f2fb42c87b4d12e", + "url": "https://api.github.com/repos/symfony/process/zipball/d34b22ba9390ec19d2dd966c40aa9e8462f27a7e", + "reference": "d34b22ba9390ec19d2dd966c40aa9e8462f27a7e", "shasum": "" }, "require": { @@ -7961,7 +8006,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v7.1.6" + "source": "https://github.com/symfony/process/tree/v7.2.0" }, "funding": [ { @@ -7977,20 +8022,20 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-11-06T14:24:19+00:00" }, { "name": "symfony/routing", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "66a2c469f6c22d08603235c46a20007c0701ea0a" + "reference": "e10a2450fa957af6c448b9b93c9010a4e4c0725e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/66a2c469f6c22d08603235c46a20007c0701ea0a", - "reference": "66a2c469f6c22d08603235c46a20007c0701ea0a", + "url": "https://api.github.com/repos/symfony/routing/zipball/e10a2450fa957af6c448b9b93c9010a4e4c0725e", + "reference": "e10a2450fa957af6c448b9b93c9010a4e4c0725e", "shasum": "" }, "require": { @@ -8042,7 +8087,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v7.1.6" + "source": "https://github.com/symfony/routing/tree/v7.2.0" }, "funding": [ { @@ -8058,20 +8103,20 @@ "type": "tidelift" } ], - "time": "2024-10-01T08:31:23+00:00" + "time": "2024-11-25T11:08:51+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f" + "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", - "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/e53260aabf78fb3d63f8d79d69ece59f80d5eda0", + "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0", "shasum": "" }, "require": { @@ -8125,7 +8170,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.5.1" }, "funding": [ { @@ -8141,20 +8186,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/string", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "61b72d66bf96c360a727ae6232df5ac83c71f626" + "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/61b72d66bf96c360a727ae6232df5ac83c71f626", - "reference": "61b72d66bf96c360a727ae6232df5ac83c71f626", + "url": "https://api.github.com/repos/symfony/string/zipball/446e0d146f991dde3e73f45f2c97a9faad773c82", + "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82", "shasum": "" }, "require": { @@ -8212,7 +8257,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.1.6" + "source": "https://github.com/symfony/string/tree/v7.2.0" }, "funding": [ { @@ -8228,24 +8273,25 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-11-13T13:31:26+00:00" }, { "name": "symfony/translation", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "b9f72ab14efdb6b772f85041fa12f820dee8d55f" + "reference": "dc89e16b44048ceecc879054e5b7f38326ab6cc5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/b9f72ab14efdb6b772f85041fa12f820dee8d55f", - "reference": "b9f72ab14efdb6b772f85041fa12f820dee8d55f", + "url": "https://api.github.com/repos/symfony/translation/zipball/dc89e16b44048ceecc879054e5b7f38326ab6cc5", + "reference": "dc89e16b44048ceecc879054e5b7f38326ab6cc5", "shasum": "" }, "require": { "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", "symfony/translation-contracts": "^2.5|^3.0" }, @@ -8306,7 +8352,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v7.1.6" + "source": "https://github.com/symfony/translation/tree/v7.2.0" }, "funding": [ { @@ -8322,20 +8368,20 @@ "type": "tidelift" } ], - "time": "2024-09-28T12:35:13+00:00" + "time": "2024-11-12T20:47:56+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a" + "reference": "4667ff3bd513750603a09c8dedbea942487fb07c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", - "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/4667ff3bd513750603a09c8dedbea942487fb07c", + "reference": "4667ff3bd513750603a09c8dedbea942487fb07c", "shasum": "" }, "require": { @@ -8384,7 +8430,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/translation-contracts/tree/v3.5.1" }, "funding": [ { @@ -8400,20 +8446,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/uid", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "65befb3bb2d503bbffbd08c815aa38b472999917" + "reference": "2d294d0c48df244c71c105a169d0190bfb080426" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/65befb3bb2d503bbffbd08c815aa38b472999917", - "reference": "65befb3bb2d503bbffbd08c815aa38b472999917", + "url": "https://api.github.com/repos/symfony/uid/zipball/2d294d0c48df244c71c105a169d0190bfb080426", + "reference": "2d294d0c48df244c71c105a169d0190bfb080426", "shasum": "" }, "require": { @@ -8458,7 +8504,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v7.1.6" + "source": "https://github.com/symfony/uid/tree/v7.2.0" }, "funding": [ { @@ -8474,20 +8520,20 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/var-dumper", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "cb5bd55a6b8c2c1c7fb68b0aeae0e257948a720c" + "reference": "c6a22929407dec8765d6e2b6ff85b800b245879c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/cb5bd55a6b8c2c1c7fb68b0aeae0e257948a720c", - "reference": "cb5bd55a6b8c2c1c7fb68b0aeae0e257948a720c", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/c6a22929407dec8765d6e2b6ff85b800b245879c", + "reference": "c6a22929407dec8765d6e2b6ff85b800b245879c", "shasum": "" }, "require": { @@ -8503,7 +8549,7 @@ "symfony/http-kernel": "^6.4|^7.0", "symfony/process": "^6.4|^7.0", "symfony/uid": "^6.4|^7.0", - "twig/twig": "^3.0.4" + "twig/twig": "^3.12" }, "bin": [ "Resources/bin/var-dump-server" @@ -8541,7 +8587,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.1.6" + "source": "https://github.com/symfony/var-dumper/tree/v7.2.0" }, "funding": [ { @@ -8557,20 +8603,20 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-11-08T15:48:14+00:00" }, { "name": "tightenco/ziggy", - "version": "v2.3.1", + "version": "v2.4.1", "source": { "type": "git", "url": "https://github.com/tighten/ziggy.git", - "reference": "ab39cd9647c3fbe2efc04407e078dfc4ff212ad1" + "reference": "8e002298678fd4d61155bb1d6e3837048235bff7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tighten/ziggy/zipball/ab39cd9647c3fbe2efc04407e078dfc4ff212ad1", - "reference": "ab39cd9647c3fbe2efc04407e078dfc4ff212ad1", + "url": "https://api.github.com/repos/tighten/ziggy/zipball/8e002298678fd4d61155bb1d6e3837048235bff7", + "reference": "8e002298678fd4d61155bb1d6e3837048235bff7", "shasum": "" }, "require": { @@ -8625,9 +8671,9 @@ ], "support": { "issues": "https://github.com/tighten/ziggy/issues", - "source": "https://github.com/tighten/ziggy/tree/v2.3.1" + "source": "https://github.com/tighten/ziggy/tree/v2.4.1" }, - "time": "2024-10-17T15:36:15+00:00" + "time": "2024-11-21T15:51:20+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -8768,16 +8814,16 @@ }, { "name": "voku/portable-ascii", - "version": "2.0.1", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/voku/portable-ascii.git", - "reference": "b56450eed252f6801410d810c8e1727224ae0743" + "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b56450eed252f6801410d810c8e1727224ae0743", - "reference": "b56450eed252f6801410d810c8e1727224ae0743", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", + "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", "shasum": "" }, "require": { @@ -8802,7 +8848,7 @@ "authors": [ { "name": "Lars Moelleken", - "homepage": "http://www.moelleken.org/" + "homepage": "https://www.moelleken.org/" } ], "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", @@ -8814,7 +8860,7 @@ ], "support": { "issues": "https://github.com/voku/portable-ascii/issues", - "source": "https://github.com/voku/portable-ascii/tree/2.0.1" + "source": "https://github.com/voku/portable-ascii/tree/2.0.3" }, "funding": [ { @@ -8838,7 +8884,7 @@ "type": "tidelift" } ], - "time": "2022-03-08T17:03:00+00:00" + "time": "2024-11-21T01:49:47+00:00" }, { "name": "webmozart/assert", @@ -8958,16 +9004,16 @@ "packages-dev": [ { "name": "brianium/paratest", - "version": "v7.6.0", + "version": "v7.6.1", "source": { "type": "git", "url": "https://github.com/paratestphp/paratest.git", - "reference": "68ff89a8de47d086588e391a516d2a5b5fde6254" + "reference": "9ac8eda68f17acda4dad4aa02ecdcc327d7e6675" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paratestphp/paratest/zipball/68ff89a8de47d086588e391a516d2a5b5fde6254", - "reference": "68ff89a8de47d086588e391a516d2a5b5fde6254", + "url": "https://api.github.com/repos/paratestphp/paratest/zipball/9ac8eda68f17acda4dad4aa02ecdcc327d7e6675", + "reference": "9ac8eda68f17acda4dad4aa02ecdcc327d7e6675", "shasum": "" }, "require": { @@ -8976,26 +9022,26 @@ "ext-reflection": "*", "ext-simplexml": "*", "fidry/cpu-core-counter": "^1.2.0", - "jean85/pretty-package-versions": "^2.0.6", + "jean85/pretty-package-versions": "^2.1.0", "php": "~8.2.0 || ~8.3.0 || ~8.4.0", "phpunit/php-code-coverage": "^11.0.7", "phpunit/php-file-iterator": "^5.1.0", "phpunit/php-timer": "^7.0.1", - "phpunit/phpunit": "^11.4.1", + "phpunit/phpunit": "^11.4.4", "sebastian/environment": "^7.2.0", - "symfony/console": "^6.4.11 || ^7.1.5", - "symfony/process": "^6.4.8 || ^7.1.5" + "symfony/console": "^6.4.14 || ^7.1.7", + "symfony/process": "^6.4.14 || ^7.1.7" }, "require-dev": { "doctrine/coding-standard": "^12.0.0", "ext-pcov": "*", "ext-posix": "*", - "phpstan/phpstan": "^1.12.6", - "phpstan/phpstan-deprecation-rules": "^1.2.1", - "phpstan/phpstan-phpunit": "^1.4.0", - "phpstan/phpstan-strict-rules": "^1.6.1", - "squizlabs/php_codesniffer": "^3.10.3", - "symfony/filesystem": "^6.4.9 || ^7.1.5" + "phpstan/phpstan": "^2", + "phpstan/phpstan-deprecation-rules": "^2", + "phpstan/phpstan-phpunit": "^2", + "phpstan/phpstan-strict-rules": "^2", + "squizlabs/php_codesniffer": "^3.11.1", + "symfony/filesystem": "^6.4.13 || ^7.1.6" }, "bin": [ "bin/paratest", @@ -9035,7 +9081,7 @@ ], "support": { "issues": "https://github.com/paratestphp/paratest/issues", - "source": "https://github.com/paratestphp/paratest/tree/v7.6.0" + "source": "https://github.com/paratestphp/paratest/tree/v7.6.1" }, "funding": [ { @@ -9047,20 +9093,20 @@ "type": "paypal" } ], - "time": "2024-10-15T12:38:31+00:00" + "time": "2024-12-05T10:55:39+00:00" }, { "name": "fakerphp/faker", - "version": "v1.23.1", + "version": "v1.24.1", "source": { "type": "git", "url": "https://github.com/FakerPHP/Faker.git", - "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b" + "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/bfb4fe148adbf78eff521199619b93a52ae3554b", - "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", + "reference": "e0ee18eb1e6dc3cda3ce9fd97e5a0689a88a64b5", "shasum": "" }, "require": { @@ -9108,9 +9154,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.1" }, - "time": "2024-01-02T13:46:09+00:00" + "time": "2024-11-21T13:46:39+00:00" }, { "name": "fidry/cpu-core-counter", @@ -9297,28 +9343,28 @@ }, { "name": "jean85/pretty-package-versions", - "version": "2.0.6", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/Jean85/pretty-package-versions.git", - "reference": "f9fdd29ad8e6d024f52678b570e5593759b550b4" + "reference": "3c4e5f62ba8d7de1734312e4fff32f67a8daaf10" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/f9fdd29ad8e6d024f52678b570e5593759b550b4", - "reference": "f9fdd29ad8e6d024f52678b570e5593759b550b4", + "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/3c4e5f62ba8d7de1734312e4fff32f67a8daaf10", + "reference": "3c4e5f62ba8d7de1734312e4fff32f67a8daaf10", "shasum": "" }, "require": { - "composer-runtime-api": "^2.0.0", - "php": "^7.1|^8.0" + "composer-runtime-api": "^2.1.0", + "php": "^7.4|^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" + "phpunit/phpunit": "^7.5|^8.5|^9.6", + "vimeo/psalm": "^4.3 || ^5.0" }, "type": "library", "extra": { @@ -9350,22 +9396,22 @@ ], "support": { "issues": "https://github.com/Jean85/pretty-package-versions/issues", - "source": "https://github.com/Jean85/pretty-package-versions/tree/2.0.6" + "source": "https://github.com/Jean85/pretty-package-versions/tree/2.1.0" }, - "time": "2024-03-08T09:58:59+00:00" + "time": "2024-11-18T16:19:46+00:00" }, { "name": "laravel/pail", - "version": "v1.2.0", + "version": "v1.2.1", "source": { "type": "git", "url": "https://github.com/laravel/pail.git", - "reference": "085a2306b520c3896afa361c25704e5fa3c27bf0" + "reference": "353ac12134b98e2e7c3333d916bd3e523931e583" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/pail/zipball/085a2306b520c3896afa361c25704e5fa3c27bf0", - "reference": "085a2306b520c3896afa361c25704e5fa3c27bf0", + "url": "https://api.github.com/repos/laravel/pail/zipball/353ac12134b98e2e7c3333d916bd3e523931e583", + "reference": "353ac12134b98e2e7c3333d916bd3e523931e583", "shasum": "" }, "require": { @@ -9380,8 +9426,9 @@ "symfony/console": "^6.0|^7.0" }, "require-dev": { + "laravel/framework": "^10.24|^11.0", "laravel/pint": "^1.13", - "orchestra/testbench": "^8.12|^9.0", + "orchestra/testbench-core": "^8.12|^9.0", "pestphp/pest": "^2.20", "pestphp/pest-plugin-type-coverage": "^2.3", "phpstan/phpstan": "^1.10", @@ -9429,20 +9476,20 @@ "issues": "https://github.com/laravel/pail/issues", "source": "https://github.com/laravel/pail" }, - "time": "2024-10-21T13:59:30+00:00" + "time": "2024-10-23T12:56:23+00:00" }, { "name": "laravel/pint", - "version": "v1.18.1", + "version": "v1.18.3", "source": { "type": "git", "url": "https://github.com/laravel/pint.git", - "reference": "35c00c05ec43e6b46d295efc0f4386ceb30d50d9" + "reference": "cef51821608239040ab841ad6e1c6ae502ae3026" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/pint/zipball/35c00c05ec43e6b46d295efc0f4386ceb30d50d9", - "reference": "35c00c05ec43e6b46d295efc0f4386ceb30d50d9", + "url": "https://api.github.com/repos/laravel/pint/zipball/cef51821608239040ab841ad6e1c6ae502ae3026", + "reference": "cef51821608239040ab841ad6e1c6ae502ae3026", "shasum": "" }, "require": { @@ -9453,13 +9500,13 @@ "php": "^8.1.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^3.64.0", - "illuminate/view": "^10.48.20", - "larastan/larastan": "^2.9.8", + "friendsofphp/php-cs-fixer": "^3.65.0", + "illuminate/view": "^10.48.24", + "larastan/larastan": "^2.9.11", "laravel-zero/framework": "^10.4.0", "mockery/mockery": "^1.6.12", - "nunomaduro/termwind": "^1.15.1", - "pestphp/pest": "^2.35.1" + "nunomaduro/termwind": "^1.17.0", + "pestphp/pest": "^2.36.0" }, "bin": [ "builds/pint" @@ -9495,20 +9542,20 @@ "issues": "https://github.com/laravel/pint/issues", "source": "https://github.com/laravel/pint" }, - "time": "2024-09-24T17:22:50+00:00" + "time": "2024-11-26T15:34:00+00:00" }, { "name": "laravel/sail", - "version": "v1.37.1", + "version": "v1.39.1", "source": { "type": "git", "url": "https://github.com/laravel/sail.git", - "reference": "7efa151ea0d16f48233d6a6cd69f81270acc6e93" + "reference": "1a3c7291bc88de983b66688919a4d298d68ddec7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sail/zipball/7efa151ea0d16f48233d6a6cd69f81270acc6e93", - "reference": "7efa151ea0d16f48233d6a6cd69f81270acc6e93", + "url": "https://api.github.com/repos/laravel/sail/zipball/1a3c7291bc88de983b66688919a4d298d68ddec7", + "reference": "1a3c7291bc88de983b66688919a4d298d68ddec7", "shasum": "" }, "require": { @@ -9558,7 +9605,7 @@ "issues": "https://github.com/laravel/sail/issues", "source": "https://github.com/laravel/sail" }, - "time": "2024-10-29T20:18:14+00:00" + "time": "2024-11-27T15:42:28+00:00" }, { "name": "mockery/mockery", @@ -9645,16 +9692,16 @@ }, { "name": "myclabs/deep-copy", - "version": "1.12.0", + "version": "1.12.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c" + "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", - "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/123267b2c49fbf30d78a7b2d333f6be754b94845", + "reference": "123267b2c49fbf30d78a7b2d333f6be754b94845", "shasum": "" }, "require": { @@ -9693,7 +9740,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.12.0" + "source": "https://github.com/myclabs/DeepCopy/tree/1.12.1" }, "funding": [ { @@ -9701,7 +9748,7 @@ "type": "tidelift" } ], - "time": "2024-06-12T14:39:25+00:00" + "time": "2024-11-08T17:47:46+00:00" }, { "name": "nunomaduro/collision", @@ -9802,38 +9849,38 @@ }, { "name": "pestphp/pest", - "version": "v3.5.1", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/pestphp/pest.git", - "reference": "179d46ce97d52bcb3f791449ae94025c3f32e3e3" + "reference": "918a8fc16996849937e281482bd34f236881ce96" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest/zipball/179d46ce97d52bcb3f791449ae94025c3f32e3e3", - "reference": "179d46ce97d52bcb3f791449ae94025c3f32e3e3", + "url": "https://api.github.com/repos/pestphp/pest/zipball/918a8fc16996849937e281482bd34f236881ce96", + "reference": "918a8fc16996849937e281482bd34f236881ce96", "shasum": "" }, "require": { "brianium/paratest": "^7.6.0", "nunomaduro/collision": "^8.5.0", - "nunomaduro/termwind": "^2.2.0", + "nunomaduro/termwind": "^2.3.0", "pestphp/pest-plugin": "^3.0.0", "pestphp/pest-plugin-arch": "^3.0.0", "pestphp/pest-plugin-mutate": "^3.0.5", "php": "^8.2.0", - "phpunit/phpunit": "^11.4.3" + "phpunit/phpunit": "^11.4.4" }, "conflict": { "filp/whoops": "<2.16.0", - "phpunit/phpunit": ">11.4.3", + "phpunit/phpunit": ">11.4.4", "sebastian/exporter": "<6.0.0", "webmozart/assert": "<1.11.0" }, "require-dev": { "pestphp/pest-dev-tools": "^3.3.0", - "pestphp/pest-plugin-type-coverage": "^3.1.0", - "symfony/process": "^7.1.6" + "pestphp/pest-plugin-type-coverage": "^3.2.0", + "symfony/process": "^7.1.8" }, "bin": [ "bin/pest" @@ -9898,7 +9945,7 @@ ], "support": { "issues": "https://github.com/pestphp/pest/issues", - "source": "https://github.com/pestphp/pest/tree/v3.5.1" + "source": "https://github.com/pestphp/pest/tree/v3.6.0" }, "funding": [ { @@ -9910,7 +9957,7 @@ "type": "github" } ], - "time": "2024-10-31T16:12:45+00:00" + "time": "2024-12-01T22:46:00+00:00" }, { "name": "pestphp/pest-plugin", @@ -10371,16 +10418,16 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.5.0", + "version": "5.6.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "54e10d44fc1a84e2598d26f70d4f6f1f233e228a" + "reference": "e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/54e10d44fc1a84e2598d26f70d4f6f1f233e228a", - "reference": "54e10d44fc1a84e2598d26f70d4f6f1f233e228a", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8", + "reference": "e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8", "shasum": "" }, "require": { @@ -10389,7 +10436,7 @@ "php": "^7.4 || ^8.0", "phpdocumentor/reflection-common": "^2.2", "phpdocumentor/type-resolver": "^1.7", - "phpstan/phpdoc-parser": "^1.7", + "phpstan/phpdoc-parser": "^1.7|^2.0", "webmozart/assert": "^1.9.1" }, "require-dev": { @@ -10429,29 +10476,29 @@ "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "support": { "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.5.0" + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.1" }, - "time": "2024-11-04T21:26:31+00:00" + "time": "2024-12-07T09:39:29+00:00" }, { "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": "*", @@ -10487,36 +10534,36 @@ "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": "phpstan/phpdoc-parser", - "version": "1.33.0", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "82a311fd3690fb2bf7b64d5c98f912b3dd746140" + "reference": "c00d78fb6b29658347f9d37ebe104bffadf36299" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/82a311fd3690fb2bf7b64d5c98f912b3dd746140", - "reference": "82a311fd3690fb2bf7b64d5c98f912b3dd746140", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/c00d78fb6b29658347f9d37ebe104bffadf36299", + "reference": "c00d78fb6b29658347f9d37ebe104bffadf36299", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "php": "^7.4 || ^8.0" }, "require-dev": { "doctrine/annotations": "^2.0", - "nikic/php-parser": "^4.15", + "nikic/php-parser": "^5.3.0", "php-parallel-lint/php-parallel-lint": "^1.2", "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^1.5", - "phpstan/phpstan-phpunit": "^1.1", - "phpstan/phpstan-strict-rules": "^1.0", - "phpunit/phpunit": "^9.5", + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^9.6", "symfony/process": "^5.2" }, "type": "library", @@ -10534,9 +10581,9 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.33.0" + "source": "https://github.com/phpstan/phpdoc-parser/tree/2.0.0" }, - "time": "2024-10-13T11:25:22+00:00" + "time": "2024-10-13T11:29:49+00:00" }, { "name": "phpunit/php-code-coverage", @@ -10863,16 +10910,16 @@ }, { "name": "phpunit/phpunit", - "version": "11.4.3", + "version": "11.4.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "e8e8ed1854de5d36c088ec1833beae40d2dedd76" + "reference": "f9ba7bd3c9f3ff54ec379d7a1c2e3f13fe0bbde4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/e8e8ed1854de5d36c088ec1833beae40d2dedd76", - "reference": "e8e8ed1854de5d36c088ec1833beae40d2dedd76", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f9ba7bd3c9f3ff54ec379d7a1c2e3f13fe0bbde4", + "reference": "f9ba7bd3c9f3ff54ec379d7a1c2e3f13fe0bbde4", "shasum": "" }, "require": { @@ -10882,7 +10929,7 @@ "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.12.0", + "myclabs/deep-copy": "^1.12.1", "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", "php": ">=8.2", @@ -10893,7 +10940,7 @@ "phpunit/php-timer": "^7.0.1", "sebastian/cli-parser": "^3.0.2", "sebastian/code-unit": "^3.0.1", - "sebastian/comparator": "^6.1.1", + "sebastian/comparator": "^6.2.1", "sebastian/diff": "^6.0.2", "sebastian/environment": "^7.2.0", "sebastian/exporter": "^6.1.3", @@ -10943,7 +10990,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/11.4.3" + "source": "https://github.com/sebastianbergmann/phpunit/tree/11.4.4" }, "funding": [ { @@ -10959,7 +11006,7 @@ "type": "tidelift" } ], - "time": "2024-10-28T13:07:50+00:00" + "time": "2024-11-27T10:44:52+00:00" }, { "name": "sebastian/cli-parser", @@ -11399,16 +11446,16 @@ }, { "name": "sebastian/exporter", - "version": "6.1.3", + "version": "6.3.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "c414673eee9a8f9d51bbf8d61fc9e3ef1e85b20e" + "reference": "3473f61172093b2da7de1fb5782e1f24cc036dc3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/c414673eee9a8f9d51bbf8d61fc9e3ef1e85b20e", - "reference": "c414673eee9a8f9d51bbf8d61fc9e3ef1e85b20e", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/3473f61172093b2da7de1fb5782e1f24cc036dc3", + "reference": "3473f61172093b2da7de1fb5782e1f24cc036dc3", "shasum": "" }, "require": { @@ -11417,7 +11464,7 @@ "sebastian/recursion-context": "^6.0" }, "require-dev": { - "phpunit/phpunit": "^11.2" + "phpunit/phpunit": "^11.3" }, "type": "library", "extra": { @@ -11465,7 +11512,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/6.1.3" + "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.0" }, "funding": [ { @@ -11473,7 +11520,7 @@ "type": "github" } ], - "time": "2024-07-03T04:56:19+00:00" + "time": "2024-12-05T09:17:50+00:00" }, { "name": "sebastian/global-state", @@ -11886,20 +11933,21 @@ }, { "name": "symfony/yaml", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "3ced3f29e4f0d6bce2170ff26719f1fe9aacc671" + "reference": "099581e99f557e9f16b43c5916c26380b54abb22" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/3ced3f29e4f0d6bce2170ff26719f1fe9aacc671", - "reference": "3ced3f29e4f0d6bce2170ff26719f1fe9aacc671", + "url": "https://api.github.com/repos/symfony/yaml/zipball/099581e99f557e9f16b43c5916c26380b54abb22", + "reference": "099581e99f557e9f16b43c5916c26380b54abb22", "shasum": "" }, "require": { "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { @@ -11937,7 +11985,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v7.1.6" + "source": "https://github.com/symfony/yaml/tree/v7.2.0" }, "funding": [ { @@ -11953,7 +12001,7 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-10-23T06:56:12+00:00" }, { "name": "ta-tikoma/phpunit-architecture-test", diff --git a/config/adminlte.php b/config/adminlte.php index e6ce39e..43595b1 100644 --- a/config/adminlte.php +++ b/config/adminlte.php @@ -299,99 +299,22 @@ */ 'menu' => [ - // Navbar items: [ - 'type' => 'navbar-search', - 'text' => 'search', - 'topnav_right' => true, - ], - [ - 'type' => 'fullscreen-widget', - 'topnav_right' => true, - ], - - // Sidebar items: - [ - 'type' => 'sidebar-menu-search', - 'text' => 'search', - ], - [ - 'text' => 'blog', - 'url' => 'admin/blog', - 'can' => 'manage-blog', + 'text' => 'Go to the Dashboard', + 'url' => '/dashboard', + 'topnav' => true, + 'icon' => 'fas fa-tachometer-alt', ], [ 'text' => 'Rifas', 'submenu' => [ [ 'text' => 'Crear rifa', - 'url'=> 'admin/crear-rifa' + 'url'=> 'raffles/admin/crear-rifa' ], [ 'text' => 'Listar rifas', - 'url'=> 'admin/rifas' - ], - ], - ], - [ - 'text' => 'Estadisticas', - 'submenu' => [ - [ - 'text' => 'Boletos vendidos', - 'url' => '' - ], - ], - 'icon' => 'far fa-fw fa-file', - 'label' => 4, - 'label_color' => 'success', - ], - - ['header' => 'account_settings'], - [ - 'text' => 'profile', - 'url' => 'admin/settings', - 'icon' => 'fas fa-fw fa-user', - ], - [ - 'text' => 'change_password', - 'url' => 'admin/settings', - 'icon' => 'fas fa-fw fa-lock', - ], - [ - 'text' => 'multilevel', - 'icon' => 'fas fa-fw fa-share', - 'submenu' => [ - [ - 'text' => 'level_one', - 'url' => '#', - ], - [ - 'text' => 'level_one', - 'url' => '#', - 'submenu' => [ - [ - 'text' => 'level_two', - 'url' => '#', - ], - [ - 'text' => 'level_two', - 'url' => '#', - 'submenu' => [ - [ - 'text' => 'level_three', - 'url' => '#', - ], - [ - 'text' => 'level_three', - 'url' => '#', - ], - ], - ], - ], - ], - [ - 'text' => 'level_one', - 'url' => '#', + 'url'=> 'raffles/admin/rifas' ], ], ], diff --git a/how v2.0 b/how v2.0 new file mode 100644 index 0000000..14acbf5 --- /dev/null +++ b/how v2.0 @@ -0,0 +1,688 @@ +commit 5449984500fe2e61179ed3048e4d737a717cc840 (tag: v1.0, origin/test/payment-method) +Author: DiegoAndresMejia +Date: Mon Dec 2 01:43:07 2024 -0500 + + create: add the mercadopago payment method (in progress) + +diff --git a/app/Http/Controllers/PaymentController.php b/app/Http/Controllers/PaymentController.php +index 1225dfb..1a0442e 100644 +--- a/app/Http/Controllers/PaymentController.php ++++ b/app/Http/Controllers/PaymentController.php +@@ -7,6 +7,8 @@ + use Modules\Payment\Models\Payment; + use Modules\Raffle\Models\Raffle; + use Modules\Ticket\Models\Ticket; ++use MercadoPago\MercadoPagoConfig; ++use MercadoPago\Client\Preference\PreferenceClient; +  + class PaymentController extends Controller + { +@@ -56,4 +58,74 @@ public function store(Request $request) + 'ticket' => $ticket, + 'payment' => $payment, + ]); +- }} ++ } ++ public function createPreference(Request $request) ++ { ++ // Configura el token de acceso de MercadoPago ++ MercadoPagoConfig::setAccessToken(env('MERCADOPAGO_ACCESS_TOKEN')); ++  ++ // Obtiene al usuario autenticado ++ $user = auth()->user(); ++  ++ // Obtiene el monto y los números seleccionados ++ $amount = $request->input('amount'); // Monto enviado desde el frontend ++ $numbers = $request->input('numbers', []); // Números seleccionados (opcional) ++  ++ // Crear la preferencia ++ $client = new PreferenceClient(); ++ $preference = $client->create([ ++ "items" => [ ++ [ ++ "title" => "Compra de Tickets de Rifa", ++ "quantity" => 1, ++ "unit_price" => $amount, // Monto dinámico enviado desde el frontend ++ ] ++ ], ++ "payer" => [ ++ "name" => $user->name, ++ "surname" => $user->lastname, ++ "email" => $user->email, ++ "phone" => [ ++ "area_code" => substr($user->phone_number, 0, 3), // Primera parte del número ++ "number" => substr($user->phone_number, 3), // Resto del número ++ ], ++ "identification" => [ ++ "type" => $user->document_type, // Tipo de documento (ejemplo: DNI, CC) ++ "number" => $user->document, // Número del documento ++ ], ++ ], ++ "back_urls" => [ ++ "success" => route('payment.success'), ++ "failure" => route('payment.failure'), ++ "pending" => route('payment.pending'), ++ ], ++ "auto_return" => "approved", ++ "external_reference" => "TICKETS_RIFA-" . uniqid(), // Referencia única ++ "statement_descriptor" => "RIFA_TICKETS", // Descripción en extracto bancario ++ ]); ++  ++ // Retorna el ID de la preferencia al frontend ++ return response()->json([ ++ 'id' => $preference->id, ++ 'numbers' => $numbers, // Devuelve los números seleccionados (opcional) ++ ]); ++ } ++  ++ public function handleSuccess() ++ { ++ // Opcional: puedes procesar información del pago aquí ++ return redirect('/dashboard')->with('success', 'Pago completado exitosamente.'); ++ } ++ ++ public function handleFailure() ++ { ++ // Opcional: puedes registrar errores o mostrar mensajes ++ return redirect('/dashboard')->with('error', 'El pago no se pudo completar. Inténtalo de nuevo.'); ++ } ++ ++ public function handlePending() ++ { ++ // Opcional: maneja pagos pendientes ++ return redirect('/dashboard')->with('info', 'El pago está pendiente de aprobación.'); ++ } ++} +diff --git a/composer.json b/composer.json +index b67fae1..2c0dff4 100644 +--- a/composer.json ++++ b/composer.json +@@ -16,6 +16,7 @@ + "laravel/socialite": "^5.16", + "laravel/telescope": "^5.2", + "laravel/tinker": "^2.9", ++ "mercadopago/dx-php": "3.0.7", + "nwidart/laravel-modules": "^11.1", + "php-imap/php-imap": "^2.0", + "spatie/laravel-permission": "^6.9", +diff --git a/composer.lock b/composer.lock +index 06f9206..b97b4d5 100644 +--- a/composer.lock ++++ b/composer.lock +@@ -4,7 +4,7 @@ + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], +- "content-hash": "8663b66401d53b74273676a3c99b7ae7", ++ "content-hash": "ddbe8f81e50b86b1374753c8535fb151", + "packages": [ + { + "name": "almasaeed2010/adminlte", +@@ -4017,6 +4017,45 @@ + }, + "time": "2024-03-31T07:05:07+00:00" + }, ++ { ++ "name": "mercadopago/dx-php", ++ "version": "3.0.7", ++ "source": { ++ "type": "git", ++ "url": "https://github.com/mercadopago/sdk-php.git", ++ "reference": "3e52ce992bbe79116eafbe9b7b658f0c3f105290" ++ }, ++ "dist": { ++ "type": "zip", ++ "url": "https://api.github.com/repos/mercadopago/sdk-php/zipball/3e52ce992bbe79116eafbe9b7b658f0c3f105290", ++ "reference": "3e52ce992bbe79116eafbe9b7b658f0c3f105290", ++ "shasum": "" ++ }, ++ "require": { ++ "php": ">=8.2" ++ }, ++ "require-dev": { ++ "friendsofphp/php-cs-fixer": "^3.22", ++ "phpunit/phpunit": "^10.2", ++ "squizlabs/php_codesniffer": "3.*" ++ }, ++ "type": "library", ++ "autoload": { ++ "psr-4": { ++ "MercadoPago\\": "src/MercadoPago" ++ } ++ }, ++ "notification-url": "https://packagist.org/downloads/", ++ "license": [ ++ "MIT" ++ ], ++ "description": "Mercado Pago PHP SDK", ++ "homepage": "https://github.com/mercadopago/sdk-php", ++ "support": { ++ "source": "https://github.com/mercadopago/sdk-php/tree/3.0.7" ++ }, ++ "time": "2024-07-04T17:06:16+00:00" ++ }, + { + "name": "mobiledetect/mobiledetectlib", + "version": "4.8.06", +diff --git a/package-lock.json b/package-lock.json +index 5a2b34e..9e67baa 100644 +--- a/package-lock.json ++++ b/package-lock.json +@@ -6,6 +6,7 @@ + "": { + "dependencies": { + "@headlessui/vue": "^1.7.23", ++ "@inertiajs/inertia": "^0.11.1", + "@splidejs/vue-splide": "^0.6.12", + "chart.js": "^4.4.6", + "lucide-vue-next": "^0.454.0", +@@ -19,7 +20,7 @@ + "@tailwindcss/typography": "^0.5.10", + "@vitejs/plugin-vue": "^5.0.0", + "autoprefixer": "^10.4.16", +- "axios": "^1.7.4", ++ "axios": "^1.7.8", + "concurrently": "^9.0.1", + "laravel-vite-plugin": "^1.0", + "postcss": "^8.4.32", +@@ -506,6 +507,26 @@ + "qs": "^6.9.0" + } + }, ++ "node_modules/@inertiajs/inertia": { ++ "version": "0.11.1", ++ "resolved": "https://registry.npmjs.org/@inertiajs/inertia/-/inertia-0.11.1.tgz", ++ "integrity": "sha512-btmV53c54oW4Z9XF0YyTdIUnM7ue0ONy3/KJOz6J1C5CYIwimiKfDMpz8ZbGJuxS+SPdOlNsqj2ZhlHslpJRZg==", ++ "license": "MIT", ++ "dependencies": { ++ "axios": "^0.21.1", ++ "deepmerge": "^4.0.0", ++ "qs": "^6.9.0" ++ } ++ }, ++ "node_modules/@inertiajs/inertia/node_modules/axios": { ++ "version": "0.21.4", ++ "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", ++ "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", ++ "license": "MIT", ++ "dependencies": { ++ "follow-redirects": "^1.14.0" ++ } ++ }, + "node_modules/@inertiajs/vue3": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@inertiajs/vue3/-/vue3-1.2.0.tgz", +@@ -1197,9 +1218,9 @@ + } + }, + "node_modules/axios": { +- "version": "1.7.7", +- "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", +- "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", ++ "version": "1.7.8", ++ "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.8.tgz", ++ "integrity": "sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw==", + "dev": true, + "license": "MIT", + "dependencies": { +@@ -1288,7 +1309,6 @@ + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", +- "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", +@@ -1616,7 +1636,6 @@ + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", +- "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" +@@ -1626,7 +1645,6 @@ + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", +- "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", +@@ -1707,7 +1725,6 @@ + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", +- "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" +@@ -1720,7 +1737,6 @@ + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", +- "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" +@@ -1851,7 +1867,6 @@ + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", +- "dev": true, + "funding": [ + { + "type": "individual", +@@ -1933,7 +1948,6 @@ + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", +- "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" +@@ -1952,7 +1966,6 @@ + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", +- "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", +@@ -2006,7 +2019,6 @@ + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", +- "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3" +@@ -2029,7 +2041,6 @@ + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", +- "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" +@@ -2042,7 +2053,6 @@ + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", +- "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" +@@ -2055,7 +2065,6 @@ + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", +- "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" +@@ -2068,7 +2077,6 @@ + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", +- "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" +@@ -2468,7 +2476,6 @@ + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", +- "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" +@@ -2922,7 +2929,6 @@ + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", +- "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" +@@ -3104,7 +3110,6 @@ + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", +- "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", +@@ -3155,7 +3160,6 @@ + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", +- "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", +diff --git a/package.json b/package.json +index 3d50587..cc07832 100644 +--- a/package.json ++++ b/package.json +@@ -11,7 +11,7 @@ + "@tailwindcss/typography": "^0.5.10", + "@vitejs/plugin-vue": "^5.0.0", + "autoprefixer": "^10.4.16", +- "axios": "^1.7.4", ++ "axios": "^1.7.8", + "concurrently": "^9.0.1", + "laravel-vite-plugin": "^1.0", + "postcss": "^8.4.32", +@@ -21,6 +21,7 @@ + }, + "dependencies": { + "@headlessui/vue": "^1.7.23", ++ "@inertiajs/inertia": "^0.11.1", + "@splidejs/vue-splide": "^0.6.12", + "chart.js": "^4.4.6", + "lucide-vue-next": "^0.454.0", +diff --git a/resources/js/Components/Dashboard/RaffleCard.vue b/resources/js/Components/Dashboard/RaffleCard.vue +index aacf29c..2581146 100644 +--- a/resources/js/Components/Dashboard/RaffleCard.vue ++++ b/resources/js/Components/Dashboard/RaffleCard.vue +@@ -2,11 +2,8 @@ +  +
 +  +-  ++ Prize +  +

{{ raffle.name }}

 +

Organizador: {{ raffle.organizer.name }}

 +@@ -14,58 +11,34 @@ + Ticket de precios ${{ raffle.ticket_price }} +

 +  +-  ++  +  +  +-  +-  +-  ++  ++  ++  +  +  +
 +
 +-  ++  +
 +  +
 +-  ++  + Página {{ currentPage }} de {{ totalPages }} +-  ++  +
 +@@ -83,10 +56,7 @@ +
{{ selectedNumber.join(', ') || 'Ninguno' }} +
 +
 +-  ++  +
 +@@ -96,29 +66,13 @@ +  +  +  +-  +-  +-  ++  ++  ++  +  +
 +  +-  ++  +  +  +  +@@ -139,16 +93,10 @@ +
Nombre
 +
 +  +-  ++  +-  ++  +
 +@@ -157,28 +105,18 @@ +
 +  +  +-  +-  +-  ++  ++  ++  +  +-

Aquí va la pasarela de pagos

 +-  +-  ++

Procesar Pago

 ++ ++  ++
 ++ ++  ++  +
 +@@ -194,6 +132,8 @@ import { ref, computed } from 'vue'; + import { usePage } from '@inertiajs/vue3'; + import { useDarkMode } from '@/composables/useDarkMode'; + import { TransitionRoot, TransitionChild, Dialog, DialogPanel } from '@headlessui/vue'; ++import axios from 'axios'; ++ +  + /* Props and Reactive Data */ + const raffleProps = defineProps({ raffle: Object }); +@@ -204,6 +144,8 @@ const totalTickets = ref(raffleProps.raffle.total_tickets || 0); + const referenceNumber = ref(''); + const numbers = ref([]); + const selectedNumber = ref([]); ++const preferenceId = ref(null); ++ +  + /* Pagination Variables */ + const currentPage = ref(1); +@@ -282,6 +224,7 @@ const closeModal = () => { + }; +  + const openVerificationModal = () => { ++ initializeMercadoPago(); + closeModal(); + showVerificationModal.value = true; + }; +@@ -289,6 +232,56 @@ const openVerificationModal = () => { + const closeVerificationModal = () => { + showVerificationModal.value = false; + }; ++ ++const initializeMercadoPago = async () => { ++ try { ++ // Calcula el monto total dinámico basado en la cantidad de números seleccionados ++ const totalAmount = selectedNumber.value.length > 0  ++ ? raffleProps.raffle.ticket_price * selectedNumber.value.length  ++ : 0; ++ ++ // Validación: Asegúrate de que el monto sea mayor a 0 ++ if (totalAmount <= 0) { ++ console.error('El monto total debe ser mayor a 0.'); ++ alert('Selecciona al menos un número para continuar con la compra.'); ++ return; ++ } ++ ++ // Prepara los datos para enviar al backend ++ const payload = { ++ amount: totalAmount, // Monto dinámico calculado ++ numbers: [...selectedNumber.value], // Números seleccionados (valores planos) ++ }; ++ ++ // Realiza la solicitud al backend ++ const response = await axios.post('/payment/preference', payload); ++ ++ // Valida que la respuesta contenga un ID de preferencia ++ if (!response.data.id) { ++ throw new Error('No se recibió un ID de preferencia válido del backend.'); ++ } ++ ++ // Asigna el ID de la preferencia ++ preferenceId.value = response.data.id; ++ ++ // Inicializa MercadoPago y renderiza el botón ++ const mp = new window.MercadoPago('APP_USR-3f0baf72-345b-40ac-ba99-745f71d22b81', { ++ locale: 'es-MX', // Ajusta el idioma al español de México ++ }); ++ ++ // Renderiza el botón de pago ++ mp.bricks().create('wallet', 'wallet_container', { ++ initialization: { ++ preferenceId: preferenceId.value, ++ }, ++ }); ++ } catch (error) { ++ // Manejo de errores ++ console.error('Error inicializando MercadoPago:', error); ++ alert('Ocurrió un error al procesar el pago. Por favor, inténtalo de nuevo más tarde.'); ++ } ++}; ++ +  +  + + \ No newline at end of file diff --git a/resources/js/Components/Dashboard/OrganizerRegisterSection.vue b/resources/js/Components/Dashboard/OrganizerRegisterSection.vue index da90345..8c38089 100644 --- a/resources/js/Components/Dashboard/OrganizerRegisterSection.vue +++ b/resources/js/Components/Dashboard/OrganizerRegisterSection.vue @@ -1,59 +1,63 @@ - - - - - \ No newline at end of file +}; + + + \ No newline at end of file diff --git a/resources/js/Components/Dashboard/RaffleCard.vue b/resources/js/Components/Dashboard/RaffleCard.vue index eab38e6..08635d4 100644 --- a/resources/js/Components/Dashboard/RaffleCard.vue +++ b/resources/js/Components/Dashboard/RaffleCard.vue @@ -35,6 +35,8 @@

Números disponibles: {{ raffle.total_tickets }}

Total vendido: ${{ raffle.total_sales }}

Fecha de juego:
{{ raffle.end_date }}

+ + -

.testimonials-section { - padding: 3rem; + padding: 5rem; min-height: 300px; /* Incrementamos la altura mínima para evitar mezcla con los controles */ border-radius: 12px; transition: background-color 0.3s ease-in-out; @@ -100,6 +100,7 @@ .testimonials-slider { overflow: hidden; + height: 15rem; } .testimonial-slide { diff --git a/resources/js/Pages/ActiveRaffles.vue b/resources/js/Pages/ActiveRaffles.vue index 5e3032d..98a7ce5 100644 --- a/resources/js/Pages/ActiveRaffles.vue +++ b/resources/js/Pages/ActiveRaffles.vue @@ -38,15 +38,15 @@ @click="fetchRaffles(section.filter)">

- custom-image
- cash-image
- business-image

{{ section.title }} @@ -116,7 +116,7 @@ - + @@ -165,8 +165,6 @@ const sections = [ { title: 'Última Oportunidad', description: 'Rifas por cerrar.', filter: 'last_chance' }, ]; - - const splideOptions = { type: 'loop', perPage: 2, @@ -195,7 +193,7 @@ const applyManualFilter = async () => { loading.value = true; raffles.value = []; try { - const response = await axios.get(`/raffles-filtered?filter=${selectedFilter.value}&date=${selectedDate.value}`); + const response = await axios.get(`/raffles-filtered?filter=${selectedFilter}&date=${selectedDate}`); raffles.value = response.data.data; isModalOpen.value = true; } catch (error) { diff --git a/resources/js/Pages/Dashboard.vue b/resources/js/Pages/Dashboard.vue index 1b0f5fb..f921e0c 100644 --- a/resources/js/Pages/Dashboard.vue +++ b/resources/js/Pages/Dashboard.vue @@ -9,7 +9,6 @@ > -
@@ -23,7 +22,6 @@ import Navbar from '../Components/Dashboard/NavBar.vue'; import HeroBanner from '../Components/Dashboard/HeroBanner.vue'; import ActiveRaffles from '../Components/Dashboard/ActiveRaffles.vue'; -import LastChanceRaffles from '../Components/Dashboard/LastChanceRaffles.vue'; import { useDarkMode } from '@/composables/useDarkMode'; import { computed } from 'vue'; import UserTestimonials from '@/Components/Dashboard/UserTestimonials.vue'; diff --git a/resources/js/Pages/Users/Profile.vue b/resources/js/Pages/Users/Profile.vue index e199737..73dee6f 100644 --- a/resources/js/Pages/Users/Profile.vue +++ b/resources/js/Pages/Users/Profile.vue @@ -19,7 +19,8 @@

{{ form.email }}

Cliente + :style="{ background: isDarkMode ? '#333333' : '#E0F7FA', color: isDarkMode ? '#82C7C7' : '#00796B' }">{{ + authUser.roles[0] }}
@@ -66,87 +67,72 @@
- - - @@ -519,92 +505,187 @@ export default { font-size: 0.875rem; } +.form-container { + display: flex; + flex-direction: column; + gap: 12px; + /* Espaciado entre los campos */ + padding: 16px; +} + +.input-field { + width: 100%; + padding: 8px 12px; + border: 1px solid #d6e9ff; + border-radius: 8px; + font-size: 0.9rem; +} + +.input-field:focus { + outline: none; + border-color: #82caff; +} + +/* Transiciones */ +.fade-enter-active, +.fade-leave-active { + transition: opacity 0.2s; +} + +.fade-enter-from, +.fade-leave-to { + opacity: 0; +} + +.hidden-file-input { + display: none; +} + /* Modal Styles */ .modal-overlay { position: fixed; - inset: 0; - background-color: rgba(0, 0, 0, 0.3); + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.5); display: flex; justify-content: center; align-items: center; - z-index: 50; + z-index: 1000; } -.modal-content { - background: #ffffff; - border-radius: 16px; +.modal-container { width: 90%; - max-width: 500px; - box-shadow: 0 20px 25px rgba(0, 0, 0, 0.1); + max-width: 600px; + border-radius: 12px; + padding: 24px; + box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); } .modal-header { display: flex; justify-content: space-between; align-items: center; - padding: 20px 24px; - border-bottom: 1px solid #e0eaf1; -} - -.modal-header h2 { - font-size: 1.25rem; - font-weight: 600; - color: #2c3e50; + margin-bottom: 20px; } .close-button { - font-size: 1.5rem; - color: #7f8c8d; + border: none; + background: transparent; + font-size: 24px; cursor: pointer; } -.input-field { - width: 50%; - padding: 8px 12px; - border: 1px solid #d6e9ff; - border-radius: 8px; - font-size: 0.875rem; - transition: border-color 0.2s; +.form-grid { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 16px; } -.input-field:focus { - outline: none; - border-color: #82caff; +.form-group { + display: flex; + flex-direction: column; } -.btn-cancel { - padding: 8px 16px; - border-radius: 8px; - font-weight: 500; - color: #7f8c8d; - background-color: #ffffff; - border: 1px solid #e0eaf1; +.full-width { + grid-column: span 2; } -.btn-save { - padding: 8px 16px; - border-radius: 8px; +label { + margin-bottom: 8px; font-weight: 500; - color: white; - background-color: #82caff; -} - -.btn-save:hover { - background-color: #5bb2ff; } -/* Transiciones */ -.fade-enter-active, -.fade-leave-active { - transition: opacity 0.2s; -} - -.fade-enter-from, -.fade-leave-to { - opacity: 0; +input, +select { + padding: 10px; + border-radius: 8px; } -.hidden-file-input { - display: none; +.modal-actions { + display: flex; + justify-content: flex-end; + margin-top: 20px; +} + +.modal-actions button { + margin-left: 10px; +} + +@media screen and (max-width: 1024px) { + .profile-page { + grid-template-columns: 1fr; + /* Stack columns vertically */ + grid-template-rows: auto; + /* Allow rows to adjust dynamically */ + gap: 16px; + padding: 16px; + } + + .left-section, + .center-section, + .right-section, + .progress-section { + grid-column: span 1; + /* Ensure each section takes full width */ + } + + .profile-photo { + width: 100px; + height: 100px; + } + + .user-name { + font-size: 1.25rem; + } + + .raffles-container, + .tickets-display { + align-items: center; + } +} + +@media screen and (max-width: 768px) { + .profile-page { + padding: 12px; + gap: 12px; + } + + .left-section, + .center-section, + .right-section { + padding: 16px; + } + + .btn-edit, + .btn-dashboard { + width: 100%; + margin-bottom: 8px; + } + +} + +@media screen and (max-width: 480px) { + .profile-page { + padding: 8px; + gap: 8px; + } + + .user-name { + font-size: 1.1rem; + } + + .user-email { + font-size: 0.9rem; + } + + .tickets-count { + font-size: 3rem; + } + + .tickets-label { + font-size: 1rem; + } } diff --git a/resources/views/app.blade.php b/resources/views/app.blade.php index 2a12ebc..1478961 100644 --- a/resources/views/app.blade.php +++ b/resources/views/app.blade.php @@ -38,7 +38,10 @@ KTUtil.init(); } }); + + + diff --git a/routes/web.php b/routes/web.php index 39ba280..b6a484c 100644 --- a/routes/web.php +++ b/routes/web.php @@ -16,7 +16,7 @@ use Modules\Raffle\Http\Controllers\RaffleController; use Modules\Ticket\Http\Controllers\TicketController; -// Ruta pública +// Rutas públicas Route::get('/', function () { return Inertia::render('Welcome', [ 'canLogin' => Route::has('login'), @@ -24,77 +24,79 @@ 'laravelVersion' => Application::VERSION, 'phpVersion' => PHP_VERSION, ]); -}); -Route::get('/test-discord', function () { - \App\Helpers\DiscordNotifier::send("Prueba directa de notificación a Discord."); - return "Mensaje enviado."; -}); -// Grupo de rutas autenticadas +})->name('home'); + +Route::get('/about', function () { + return Inertia::render('About'); +})->name('about'); + +// Rutas autenticadas Route::middleware(['auth:sanctum', config('jetstream.auth_session')])->group(function () { Route::get('/dashboard', function () { return Inertia::render('Dashboard'); })->name('dashboard'); }); -// Grupo de rutas para cliente -Route::middleware(['role:client'])->group(function () { +// Rutas para cliente +Route::middleware(['auth', 'role:client'])->group(function () { Route::get('/test-client', function () { return Inertia::render('Profile/TestClient'); }); }); -// Grupo de rutas protegidas por el middleware de verificación de contraseña -Route::middleware(['auth', 'role:admin'])->get('dashboard/admin', function () { - return Inertia::render('Admin/AdminDashboard'); -})->name('admin.dashboard'); - -// Grupo de rutas para la gestión de usuarios +// Rutas para administrador Route::middleware(['auth', 'role:admin'])->group(function () { - Route::get('/users', [UserController::class, 'index'])->name('users.index'); - Route::get('/users/create', [UserController::class, 'create'])->name('users.create'); - Route::post('/users', [UserController::class, 'store'])->name('users.store'); - Route::get('/users/{user}/edit', [UserController::class, 'edit'])->name('users.edit'); - Route::put('/users/{user}', [UserController::class, 'update'])->name('users.update'); - Route::delete('/users/{user}', [UserController::class, 'destroy'])->name('users.destroy'); - Route::get('/raffles/active', [UserController::class, 'activeRaffles'])->name('raffles.active'); + Route::get('dashboard/admin', function () { + return Inertia::render('Admin/AdminDashboard'); + })->name('admin.dashboard'); + + // Gestión de usuarios + Route::prefix('users')->group(function () { + Route::get('/', [UserController::class, 'index'])->name('users.index'); + Route::get('/create', [UserController::class, 'create'])->name('users.create'); + Route::get('/{user}/edit', [UserController::class, 'edit'])->name('users.edit'); + Route::put('/{user}', [UserController::class, 'update'])->name('users.update'); + Route::delete('/{user}', [UserController::class, 'destroy'])->name('users.destroy'); + }); }); +Route::put('users/{user}', [UserController::class, 'update'])->name('users.update'); -Route::middleware(['auth'])->get('/profile/{user}', [UserController::class, 'showProfile'])->name('users.profile'); - -Route::get('/about', function () { - return Inertia::render('About'); -})->name('about'); - -Route::get('/raffles-actives', [RaffleController::class, 'getRaffles'])->name('raffles.actives'); - -Route::get('/raffles-last-chance', [RaffleController::class, 'getLastChanceRaffles'])->name('raffles.last-chance'); - -Route::get('/auth/redirect/github', [AuthController::class, 'redirectToGitHub'])->name('github.login'); -Route::get('/auth/callback/github', [AuthController::class, 'handleGitHubCallback'])->name('github.callback'); - -Route::get('/auth/redirect/google', [AuthController::class, 'redirectToGoogle'])->name('google.login'); -Route::get('/auth/google/callback', [AuthController::class, 'handleGoogleCallback'])->name('google.callback'); - -Route::get('/raffles-filtered', [RaffleController::class, 'getFilteredRaffles'])->name('raffles.filtered'); +// Rutas autenticadas generales +Route::middleware(['auth'])->group(function () { + // Perfil de usuario + Route::get('/profile/{user}', [UserController::class, 'showProfile'])->name('users.profile'); + Route::post('/users/{user}/update-photo', [UserController::class, 'updateProfilePhoto'])->name('user.update-photo'); + // Rifas + Route::get('/raffles-actives', [RaffleController::class, 'getRaffles'])->name('raffles.actives'); + Route::get('/raffles-last-chance', [RaffleController::class, 'getLastChanceRaffles'])->name('raffles.last-chance'); + Route::get('/raffles-filtered', [RaffleController::class, 'getFilteredRaffles'])->name('raffles.filtered'); + Route::get('/raffles/active', [UserController::class, 'activeRaffles'])->name('raffles.active'); -Route::middleware(['auth'])->group(function () { + // Tickets Route::get('/api/user-tickets/{userId}', [TicketController::class, 'getUserTickets'])->name('user.tickets'); Route::get('/api/active-raffles', [RaffleController::class, 'getActiveRaffles'])->name('raffles.active'); Route::post('/ticket/create', [TicketController::class, 'store']); + + // Registro de organizador Route::get('/registro-organizador', [UserController::class, 'registerOrganizer'])->name('register.organizer'); Route::post('/register-organizer', [UserController::class, 'storeOrganizer'])->name('organizer.register'); + // Autenticación con terceros + Route::get('/auth/redirect/github', [AuthController::class, 'redirectToGitHub'])->name('github.login'); + Route::get('/auth/callback/github', [AuthController::class, 'handleGitHubCallback'])->name('github.callback'); + Route::get('/auth/redirect/google', [AuthController::class, 'redirectToGoogle'])->name('google.login'); + Route::get('/auth/google/callback', [AuthController::class, 'handleGoogleCallback'])->name('google.callback'); }); Route::post('/users/{user}/update-photo', [UserController::class, 'updateProfilePhoto'])->name('user.update-photo'); -Route::post('/payment/create', [PaymentController::class, 'create']); -Route::post('/payment/createPayment', [PaymentController::class, 'createPayment']); -Route::post('/payment/store', [PaymentController::class, 'store']); +Route::get('mercadopago/pagar', [PaymentController::class, 'showPaymentForm'])->name('mercadopago.payment'); +Route::post('/api/mercadopago/create-payment', [PaymentController::class, 'createPayment'])->name('mercadopago.createPayment'); +Route::get('mercadopago/success', [PaymentController::class, 'success'])->name('mercadopago.success'); +Route::get('mercadopago/failure', [PaymentController::class, 'failure'])->name('mercadopago.failed'); -Route::post('/verify-payment', [PaymentVerificationController::class, 'verifyPayment']);