diff --git a/app/Console/Commands/CheckFtpSongs.php b/app/Console/Commands/CheckFtpSongs.php
new file mode 100644
index 0000000..2783b3d
--- /dev/null
+++ b/app/Console/Commands/CheckFtpSongs.php
@@ -0,0 +1,89 @@
+argument('disk'));
+
+ $disks = ($inputDisk === 'ALL')
+ ? ['DISK01', 'DISK02', 'DISK03', 'DISK04', 'DISK05', 'DISK09', 'DISK10']
+ : [$inputDisk];
+ foreach ($disks as $diskName) {
+ $this->info("========== 🔍 處理 {$diskName} ==========");
+
+ $folder = $diskName;
+ $prefix = $diskName;
+
+ $this->processDisk($folder, $prefix);
+ $this->newLine();
+ }
+
+ $this->info('🎉 所有比對完成!');
+ return self::SUCCESS;
+ }
+ protected function processDisk(string $folder, string $prefix): void
+ {
+ $disk = Storage::disk('ftp_test');
+
+ $this->info("📂 FTP 目錄: {$folder}");
+ $this->info("🎯 DB prefix: {$prefix}");
+
+ // 1) 取得 FTP 檔案清單
+ $this->info('🔍 取得 FTP 檔案列表…');
+ $ftpPaths = collect($disk->allFiles($folder))
+ ->map(fn ($p) => strtolower(str_replace('\\', '/', ltrim($p, '/'))))
+ ->filter(fn ($p) => Str::startsWith($p, strtolower($prefix)))
+ ->unique()
+ ->values();
+
+ $this->info("✅ FTP 檔案數:{$ftpPaths->count()}");
+
+ // 2) 資料庫 songs.filename
+ $this->info('🗃️ 讀取資料庫 songs.filename…');
+ $dbPaths = Song::query()
+ ->when($prefix, fn ($q) => $q->where('filename', 'like', $prefix . '%'))
+ ->pluck('filename')
+ ->map(fn ($p) => strtolower(str_replace('\\', '/', $p)))
+ ->unique()
+ ->values();
+
+ $this->info("✅ DB 記錄數:{$dbPaths->count()}");
+
+ // 3) 比對
+ $missing = $dbPaths->diff($ftpPaths);
+ $extra = $ftpPaths->diff($dbPaths);
+
+ // 4) 結果
+ $this->warn("❌ 缺失檔案(DB 有 / FTP 無):{$missing->count()}");
+ $missing->each(fn ($p) => $this->line(" - $p"));
+
+ $this->info("⚠️ 多餘檔案(FTP 有 / DB 無):{$extra->count()}");
+ $extra->take(20)->each(fn ($p) => $this->line(" - $p"));
+ if ($extra->count() > 20) $this->line(' …其餘省略');
+ }
+}
diff --git a/app/Console/Commands/TestFtpConnection.php b/app/Console/Commands/TestFtpConnection.php
new file mode 100644
index 0000000..9c46fd1
--- /dev/null
+++ b/app/Console/Commands/TestFtpConnection.php
@@ -0,0 +1,40 @@
+info("🔼 上傳中...");
+ if (!$disk->put($testFile, $testContent)) {
+ return $this->error("❌ 上傳失敗");
+ }
+
+ // 嘗試讀取
+ $this->info("📥 下載檢查...");
+ $content = $disk->get($testFile);
+ if ($content !== $testContent) {
+ return $this->error("❌ 檔案內容不符");
+ }
+
+ // 嘗試刪除
+ $this->info("🗑️ 刪除測試檔案...");
+ if (!$disk->delete($testFile)) {
+ return $this->error("❌ 刪除失敗");
+ }
+
+ $this->info("✅ FTP 測試成功!");
+ }
+}
\ No newline at end of file
diff --git a/app/Enums/SongLanguageType.php b/app/Enums/SongLanguageType.php
new file mode 100644
index 0000000..a63ec94
--- /dev/null
+++ b/app/Enums/SongLanguageType.php
@@ -0,0 +1,60 @@
+ __('enums.LanguageType.Mandarin'),
+ self::Taiwanese => __('enums.LanguageType.Taiwanese'),
+ self::English => __('enums.LanguageType.English'),
+ self::Japanese => __('enums.LanguageType.Japanese'),
+ self::Cantonese => __('enums.LanguageType.Cantonese'),
+ self::Korean => __('enums.LanguageType.Korean'),
+ self::Vietnamese => __('enums.LanguageType.Vietnamese'),
+ self::Hakka => __('enums.LanguageType.Hakka'),
+ self::Other => __('enums.LanguageType.Other'),
+ };
+ }
+ public static function fromLabelOrName(string $input): self
+ {
+ $aliasMap = [
+ '英文' => '英語',
+ '華語' => '國語',
+ '普通話' => '國語',
+ '台灣話' => '台語',
+ '客家話' => '客語',
+ ];
+ // 將別名轉為正式值
+ $input = $aliasMap[$input] ?? $input;
+ foreach (self::cases() as $case) {
+ if ($case->value === $input || $case->name === $input) {
+ return $case;
+ }
+ }
+ return self::Unset;
+ }
+ public static function options(): array
+ {
+ return collect(self::cases())
+ ->mapWithKeys(fn($case) => [$case->value => $case->labels()])
+ ->toArray();
+ }
+}
\ No newline at end of file
diff --git a/app/Http/Controllers/Api/RoomSongController.php b/app/Http/Controllers/Api/RoomSongController.php
index f59831c..4fb3520 100644
--- a/app/Http/Controllers/Api/RoomSongController.php
+++ b/app/Http/Controllers/Api/RoomSongController.php
@@ -108,7 +108,8 @@ class RoomSongController extends Controller
$response = (new MachineStatusForwarder(
$roomSession->room->branch->external_ip,
"/api/room/sync-order-song",
- $validated
+ $validated,
+ Auth::user()->api_plain_token
))->forward();
}
public function syncOrderSong(SyncOrderSongRequest $request)
diff --git a/app/Http/Controllers/RoomControlController.php b/app/Http/Controllers/RoomControlController.php
index b2500b3..ced1488 100644
--- a/app/Http/Controllers/RoomControlController.php
+++ b/app/Http/Controllers/RoomControlController.php
@@ -179,7 +179,8 @@ class RoomControlController extends Controller
$response = (new MachineStatusForwarder(
$branch->external_ip,
"/api/room/session",
- $validated
+ $validated,
+ Auth::user()->api_plain_token
))->forward();
return ApiResponse::success([
'room' => $room->latestSession,
@@ -269,13 +270,12 @@ class RoomControlController extends Controller
$room->log_message='HeartBeat';
$room->touch(); // 更新 updated_at
$room->save();
- $response = (
- new MachineStatusForwarder(
+ $response = (new MachineStatusForwarder(
$branch->external_ip ?? '',
'/api/room/receiveSwitch',
- (new RoomResource($room->refresh()))->toArray(request())
- )
- )->forward();
+ (new RoomResource($room->refresh()))->toArray(request()),
+ Auth::user()->api_plain_token
+ ))->forward();
return ApiResponse::success([
'data' => MachineStatus::create($validated),
]);
@@ -382,7 +382,8 @@ class RoomControlController extends Controller
$response = (new MachineStatusForwarder(
$branch->external_ip,
"/api/room/receiveSwitch",
- (new RoomResource($room->refresh()))->toArray(request())
+ (new RoomResource($room->refresh()))->toArray(request()),
+ Auth::user()->api_plain_token
))->forward();
return $validated['command']==='error' ? ApiResponse::error('機房控制失敗') : ApiResponse::success($room);
}
diff --git a/app/Livewire/Admin/Dashboard.php b/app/Livewire/Admin/Dashboard.php
deleted file mode 100644
index 6f0b3bf..0000000
--- a/app/Livewire/Admin/Dashboard.php
+++ /dev/null
@@ -1,16 +0,0 @@
- '首頁', 'route' => 'welcome'],
+ ['name' => '新歌快報', 'route' => 'new-songs'],
+ ['name' => '熱門排行', 'route' => 'top-ranking'],
+ ['name' => '歌名查詢', 'route' => 'search-song'],
+ ];
+ private array $roomMenus = [
+ ['name' => '已點歌曲', 'route' => 'clicked-song'],
+ ['name' => '聲音控制', 'route' => 'sound-control'],
+ ['name' => '真情告白', 'route' => 'love-message'],
+ ];
+ public array $adminmenus=[
+ ['name' => '操作紀錄', 'route' => 'admin.activity-log', 'icon' => 'clock', 'permission' => null],
+ ['name' => '包廂狀態紀錄', 'route' => 'admin.room-status-log', 'icon' => 'clock', 'permission' => null],
+ ['name' => '設備狀態紀錄', 'route' => 'admin.machine-status', 'icon' => 'clock', 'permission' => null],
+ ['name' => '使用者列表', 'route' => 'admin.users', 'icon' => 'user-circle', 'permission' => 'user-list'],
+ ['name' => 'Room', 'route' => 'admin.rooms', 'icon' => 'building-library', 'permission' => 'room-list'],
+ ['name' => 'RoomGrid', 'route' => 'admin.room-grids', 'icon' => 'film', 'permission' => 'room-list'],
+ ['name' => '文字廣告', 'route' => 'admin.text-ads', 'icon' => 'megaphone', 'permission' => 'text-ad-list'],
+ ['name' => '文字公告', 'route' => 'admin.broadcast-templates', 'icon' => 'megaphone', 'permission' => 'broadcast-list'],
+ ];
+ public array $menus = [];
+
+ public function mount()
+ {
+ // 先放共用的
+ $this->menus = $this->commonMenus;
+
+ // 如果有 room_code,再合併
+ if (session()->has('room_code')) {
+ $this->menus = array_merge($this->menus, $this->roomMenus);
+ }
+ if (auth()->check()) {
+ $user = auth()->user();
+ foreach ($this->adminmenus as $menu)
+ if (!$menu['permission'] || $user->can($menu['permission']))
+ $this->menus[] = $menu;
+ }
+ }
+
+ public function logout(Logout $logout)
+ {
+ $logout();
+ return redirect('/');
+ }
+
+ public function render()
+ {
+ return view('livewire.layout.navigation');
+ }
+}
\ No newline at end of file
diff --git a/app/Livewire/Modals/StickerModal.php b/app/Livewire/Modals/StickerModal.php
new file mode 100644
index 0000000..867291d
--- /dev/null
+++ b/app/Livewire/Modals/StickerModal.php
@@ -0,0 +1,44 @@
+stickers = collect(glob(storage_path('app/public/superstar-pic/*.png')))
+ //->map(fn($path) => 'superstar-pic/' . basename($path))
+ ->map(fn($path) => basename($path))
+ ->toArray();
+ }
+
+ public function openModal()
+ {
+ $this->showModal = true;
+ }
+ public function closeModal()
+ {
+ $this->showModal = false;
+ }
+
+ public function select($sticker)
+ {
+ $this->dispatch('stickerSelected', $sticker);
+ $this->selectedSticker =$sticker;
+ $this->showModal = false;
+ }
+
+ public function render()
+ {
+ return view('livewire.modals.sticker-modal');
+ }
+}
diff --git a/app/Livewire/Pages/Home.php b/app/Livewire/Pages/Home.php
new file mode 100644
index 0000000..01a6ff6
--- /dev/null
+++ b/app/Livewire/Pages/Home.php
@@ -0,0 +1,25 @@
+forget('room_code');
+ $this->roomCode = request()->query('room_code', session('room_code', null));
+ if ($this->roomCode) {
+ session(['room_code' => $this->roomCode]);
+ }
+ }
+
+ public function render()
+ {
+ return view('livewire.pages.home');
+ }
+}
diff --git a/app/Livewire/Pages/LoveMessage.php b/app/Livewire/Pages/LoveMessage.php
new file mode 100644
index 0000000..03ba3c0
--- /dev/null
+++ b/app/Livewire/Pages/LoveMessage.php
@@ -0,0 +1,38 @@
+ 'handleSticker'];
+ public $message = '';
+ public $selectedSticker=null;
+
+ public function handleSticker($sticker)
+ {
+ $this->selectedSticker = $sticker;
+ }
+ public function submitMessage()
+ {
+ // 實際存留言時,可同時存貼圖
+ $data = [
+ 'message' => $this->message,
+ 'sticker' => $this->selectedSticker,
+ 'user' => auth()->user()?->name ?? '訪客',
+ ];
+ // 存到資料庫或送到 API
+ // ...
+ session()->flash('success', '留言已送出!');
+
+ // 重置
+ $this->message = '';
+ $this->selectedSticker = null;
+ }
+
+ public function render()
+ {
+ return view('livewire.pages.love-message');
+ }
+}
diff --git a/app/Livewire/Pages/OrderedSongList.php b/app/Livewire/Pages/OrderedSongList.php
new file mode 100644
index 0000000..63be556
--- /dev/null
+++ b/app/Livewire/Pages/OrderedSongList.php
@@ -0,0 +1,58 @@
+playing = new EloquentCollection();
+ $this->nextSong = new EloquentCollection();
+ $this->finished = new EloquentCollection();
+ $roomSession = $this->getRoomSession(session('room_code'))?->id ;
+ if ($roomSession) {
+ $this->roomSessionId = $roomSession->id;
+ $this->loadSongs($this->roomSessionId);
+ }
+ }
+ private function getRoomSession($apiToken): ?RoomSession
+ {
+ if (!$apiToken) return null;
+ return RoomSession::where('api_token', $apiToken)
+ ->whereIn('status', ['active', 'maintain'])
+ ->first();
+ }
+
+ public function refreshSongs()
+ {
+ if ($this->roomSessionId) {
+ $this->loadSongs($this->roomSessionId);
+ }
+ }
+ protected function loadSongs(string $roomSessionId)
+ {
+ $this->playing = OrderedSong::forSession($roomSessionId)->playing()->get();
+ $this->nextSong = OrderedSong::forSession($roomSessionId)->nextSong()->get();
+ $this->finished = OrderedSong::forSession($roomSessionId)->finished()->get();
+ }
+ public function render()
+ {
+ return view('livewire.pages.ordered-song-list', [
+ 'playing' => $this->playing,
+ 'nextSong' => $this->nextSong,
+ 'finished' => $this->finished,
+ ]);
+ }
+}
diff --git a/app/Livewire/Pages/SearchSong.php b/app/Livewire/Pages/SearchSong.php
new file mode 100644
index 0000000..feca84c
--- /dev/null
+++ b/app/Livewire/Pages/SearchSong.php
@@ -0,0 +1,105 @@
+searchCategory = $searchCategory;
+ }
+
+ /**
+ * 切換語言標籤
+ */
+ public function selectLanguage(string $lang): void
+ {
+ $this->selectedLanguage = $lang;
+ }
+ /**
+ * 搜尋歌手(透過 API)
+ */
+ public function updatedArtistSearch()
+ {
+ $search = $this->artistSearch;
+
+ if ($search) {
+ // 即時搜尋歌手,從資料庫查詢
+ $this->artistOptions = \App\Models\Artist::query()
+ ->where('name', 'like', "{$search}%")
+ ->limit(100)
+ ->get(['id', 'name'])
+ ->toArray();
+ } else {
+ $this->artistOptions = [];
+ }
+ }
+ public function addArtist($id, $name)
+ {
+ $this->selectedArtists[$id] = $name;
+ $this->artistSearch = ''; // 清空搜尋框
+ $this->artistOptions = [];
+ }
+
+ public function removeArtist($id)
+ {
+ unset($this->selectedArtists[$id]);
+ }
+
+ /**
+ * 點歌
+ */
+ public function orderSong(int $songId): void
+ {
+ // TODO: 加入已點歌曲邏輯,例如:
+ // auth()->user()->room->addSong($songId);
+
+ $this->dispatchBrowserEvent('notify', [
+ 'message' => '已加入已點歌曲'
+ ]);
+ }
+
+ /**
+ * 取得歌曲清單
+ */
+ protected function loadSongs()
+ {
+ return SongLibraryCache::query()
+ ->when($this->search, fn($q) => $q->where('song_name', 'like', "{$this->search}%"))
+ ->when($this->selectedLanguage, fn($q) => $q->where('language_name', $this->selectedLanguage))
+ ->when($this->selectedArtists, fn ($q) => $q->whereHas('artists', fn ($q2) => $q2->whereIn('id', array_keys($this->selectedArtists))))
+ ->when($this->searchCategory === 'New', fn($q) => $q->orderByDesc('add_date'))
+ ->when($this->searchCategory === 'Hot', fn($q) => $q->orderByDesc('song_counts'), fn($q) => $q->orderByDesc('song_id'))
+ //->take($this->search || $this->artistSearch ? 100 : 1000)
+ ->take(1000)
+ ->get();
+ }
+
+ /**
+ * Render
+ */
+ public function render()
+ {
+ $songs = $this->loadSongs();
+
+ return view('livewire.pages.search-song', [
+ 'songs' => $songs,
+ 'languages' => \App\Enums\SongLanguageType::options(),
+ 'selectedLanguage' => $this->selectedLanguage,
+ ]);
+ }
+}
\ No newline at end of file
diff --git a/app/Livewire/Pages/SoundControl.php b/app/Livewire/Pages/SoundControl.php
new file mode 100644
index 0000000..e5a570f
--- /dev/null
+++ b/app/Livewire/Pages/SoundControl.php
@@ -0,0 +1,42 @@
+'音控-01.jpg', 'action'=>'pause'],
+ ['img'=>'音控-02.jpg', 'action'=>'volume_up'],
+ ['img'=>'音控-04.jpg', 'action'=>'mic_up'],
+ ['img'=>'音控-06.jpg', 'action'=>'mute'],
+ ['img'=>'音控-03.jpg', 'action'=>'volume_down'],
+ ['img'=>'音控-05.jpg', 'action'=>'mic_down'],
+ ['img'=>'音控-07.jpg', 'action'=>'original_song'],
+ ['img'=>'音控-08.jpg', 'action'=>'service'],
+ ['img'=>'音控-09.jpg', 'action'=>'replay'],
+ ['img'=>'音控-11.jpg', 'action'=>'male_key'],
+ ['img'=>'音控-12.jpg', 'action'=>'female_key'],
+ ['img'=>'音控-10.jpg', 'action'=>'cut'],
+ ['img'=>'音控-15.jpg', 'action'=>'lower_key'],
+ ['img'=>'音控-14.jpg', 'action'=>'standard_key'],
+ ['img'=>'音控-13.jpg', 'action'=>'raise_key'],
+ ];
+
+ public function sendVolumeControl(string $action)
+ {
+ // 這裡可以加你的 API 或邏輯
+ // 範例:發送到後台控制音量
+ info("Sound control action: ".$action);
+
+ $this->dispatchBrowserEvent('notify', [
+ 'message' => "已執行操作: {$action}"
+ ]);
+ }
+
+ public function render()
+ {
+ return view('livewire.pages.sound-control');
+ }
+}
diff --git a/app/Livewire/Tables/SongLibraryCacheTable.php b/app/Livewire/Tables/SongLibraryCacheTable.php
deleted file mode 100644
index 632c121..0000000
--- a/app/Livewire/Tables/SongLibraryCacheTable.php
+++ /dev/null
@@ -1,121 +0,0 @@
- 'outside']);
-
- }
-
- public function setUp(): array
- {
-
- $actions = [];
-
- $header = PowerGrid::header()
- ->withoutLoading()
- ->showToggleColumns();
-
- $header->includeViewOnTop('livewire.headers.song-library-cache');
-
- $actions[]=$header;
- $actions[]=PowerGrid::footer()->showPerPage()->showRecordCount();
- return $actions;
- }
-
- public function datasource(): Builder
- {
- return SongLibraryCache::query()->orderBy('song_id');
- }
-
- public function relationSearch(): array
- {
- return [];
- }
-
- public function fields(): PowerGridFields
- {
- return PowerGrid::fields()
- ->add('song_id')
- ->add('song_name')
- ->add('song_simplified')
- ->add('phonetic_abbr')
- ->add('pinyin_abbr')
- ->add('strokes_abbr')
- ->add('song_number')
- ->add('artistA')
- ->add('artistB')
- ->add('artistA_simplified')
- ->add('artistB_simplified')
- ->add('artistA_category')
- ->add('artistB_category')
- ->add('artist_category')
- ->add('song_filename')
- ->add('song_category')
- ->add('language_name')
- ->add('add_date_formatted', fn (SongLibraryCache $model) => Carbon::parse($model->add_date)->format('Y-m-d'))
- ->add('situation')
- ->add('vocal')
- ->add('db_change')
- ->add('song_counts')
- ->add('updated_at_formatted', fn (SongLibraryCache $model) => Carbon::parse($model->updated_at)->format('Y-m-d H:i:s'));
- }
-
- public function columns(): array
- {
- $column=[];
- $column[]=Column::make(__('song-library-cache.id'), 'song_id');
- $column[]=Column::make(__('song-library-cache.name'), 'song_name')->sortable()->searchable();
- $column[]=Column::make(__('song-library-cache.simplified'), 'song_simplified')->sortable()->searchable()->hidden(true, false);
- $column[]=Column::make(__('song-library-cache.name.phinetic'), 'phonetic_abbr')->sortable()->searchable()->hidden(true, false);
- $column[]=Column::make(__('song-library-cache.name.pinyin'), 'pinyin_abbr')->sortable()->searchable()->hidden(true, false);
- $column[]=Column::make(__('song-library-cache.name.strokes'), 'strokes_abbr')->sortable()->searchable()->hidden(true, false);
- $column[]=Column::make(__('song-library-cache.name_length'), 'song_number')->sortable()->searchable()->hidden(true, false);
- $column[]=Column::make(__('song-library-cache.artists').'A', 'artistA')->sortable()->searchable();
- $column[]=Column::make(__('song-library-cache.artists').'B', 'artistB')->sortable()->searchable();
- $column[]=Column::make(__('song-library-cache.artists_simplified').'A', 'artistA_simplified')->sortable()->searchable()->hidden(true, false);
- $column[]=Column::make(__('song-library-cache.artists_simplified').'B', 'artistB_simplified')->sortable()->searchable()->hidden(true, false);
- $column[]=Column::make(__('song-library-cache.artists_category').'A', 'artistA_category')->sortable()->searchable()->hidden(true, false);
- $column[]=Column::make(__('song-library-cache.artists_category').'B', 'artistB_category')->sortable()->searchable()->hidden(true, false);
- $column[]=Column::make(__('song-library-cache.artists_category'), 'artist_category')->sortable()->searchable()->hidden(true, false);
- $column[]=Column::make(__('song-library-cache.filename'), 'song_filename')->sortable()->searchable();
- $column[]=Column::make(__('song-library-cache.categorys'), 'song_category')->sortable()->searchable();
- $column[]=Column::make(__('song-library-cache.language_type'), 'language_name')->sortable()->searchable();
- $column[]=Column::make(__('song-library-cache.adddate'), 'add_date_formatted', 'add_date')->sortable();
- $column[]=Column::make(__('song-library-cache.situation'), 'situation')->sortable()->searchable();
- $column[]=Column::make(__('song-library-cache.vocal'), 'vocal')->sortable()->searchable();
- $column[]=Column::make(__('song-library-cache.db_change'), 'db_change')->sortable()->searchable();
- $column[]=Column::make(__('song-library-cache.counts'), 'song_counts')->sortable()->searchable();
- $column[]=Column::make(__('song-library-cache.updated_at'), 'updated_at_formatted', 'updated_at')->sortable()->hidden(true, false);
- return $column;
- }
-
- public function filters(): array
- {
- return [
- Filter::datepicker('add_date'),
- Filter::datetimepicker('updated_at'),
- ];
- }
-
-}
diff --git a/app/Models/SongLibraryCache.php b/app/Models/SongLibraryCache.php
index 4f208c2..1c42a8f 100644
--- a/app/Models/SongLibraryCache.php
+++ b/app/Models/SongLibraryCache.php
@@ -38,9 +38,20 @@ class SongLibraryCache extends Model
'song_counts',
'updated_at',
];
-
+ public function users(){
+ return $this->belongsToMany(User::class, 'user_song')->withTimestamps();
+ }
public function str_artists_plus(): string
{
return ($this->artistB!=null) ? $this->artistA ." + ".$this->artistB :$this->artistA;
}
+ public function artists(){
+ return $this->belongsToMany(Artist::class);
+ }
+ public function str_categories(){
+ return $this->categories->pluck('name')->implode(', ');
+ }
+ public function categories(){
+ return $this->belongsToMany(SongCategory::class);
+ }
}
diff --git a/app/Models/User.php b/app/Models/User.php
index 4324251..c16f5d2 100644
--- a/app/Models/User.php
+++ b/app/Models/User.php
@@ -41,7 +41,8 @@ class User extends Authenticatable
'birthday',
'gender',
'status',
- 'password',
+ 'email_verified_at',
+ 'api_plain_token',
];
/**
diff --git a/app/Services/MachineStatusForwarder.php b/app/Services/MachineStatusForwarder.php
index fb7eded..a4dfac4 100644
--- a/app/Services/MachineStatusForwarder.php
+++ b/app/Services/MachineStatusForwarder.php
@@ -2,7 +2,6 @@
namespace App\Services;
-use App\Models\User;
use Illuminate\Support\Facades\Log;
use Illuminate\Http\Client\Response;
use App\Services\ApiClient;
@@ -12,13 +11,14 @@ class MachineStatusForwarder
protected string $externalUrl;
protected string $endpoint;
protected array $validated;
- protected ?User $user = null;
+ protected string $apiPlainToken;
- public function __construct(string $externalUrl, string $endpoint, array $validated)
+ public function __construct(string $externalUrl, string $endpoint, array $validated, string $token=null)
{
$this->externalUrl = $externalUrl;
$this->endpoint = $endpoint;
$this->validated = $validated;
+ $this->$apiPlainToken = $token;
}
public function forward(): ?Response
@@ -30,11 +30,9 @@ class MachineStatusForwarder
$mainDomain = implode('.', array_slice($hostParts, 1));
$mainDomainUrl = "{$parsed['scheme']}://{$mainDomain}";
-
- $this->user = User::find(2); // 或用 dependency injection 把 User 帶進來
-
- if ($this->user && $this->user->api_plain_token) {
- $client = new ApiClient($mainDomainUrl, $this->user->api_plain_token);
+ $token = $this->api_plain_token ?? User::find(2)?->api_plain_token;
+ if ($token) {
+ $client = new ApiClient($mainDomainUrl, $token);
$response = $client->post($this->endpoint, $this->validated);
/* Log::info('✅ Machine status forwarded', [
diff --git a/composer.json b/composer.json
index 74a75dd..f49974d 100644
--- a/composer.json
+++ b/composer.json
@@ -11,6 +11,7 @@
"laravel/framework": "^12.0",
"laravel/sanctum": "^4.1",
"laravel/tinker": "^2.10.1",
+ "league/flysystem-ftp": "^3.29",
"livewire/livewire": "^3.4",
"livewire/volt": "^1.7.0",
"maatwebsite/excel": "^3.1",
diff --git a/composer.lock b/composer.lock
index c3a683b..8bdec59 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": "63663f4c74cb0801a13c702e3d004b50",
+ "content-hash": "6f0cb97f4b8b9103f65e83415509ac86",
"packages": [
{
"name": "brick/math",
@@ -216,16 +216,16 @@
},
{
"name": "composer/semver",
- "version": "3.4.3",
+ "version": "3.4.4",
"source": {
"type": "git",
"url": "https://github.com/composer/semver.git",
- "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12"
+ "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12",
- "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12",
+ "url": "https://api.github.com/repos/composer/semver/zipball/198166618906cb2de69b95d7d47e5fa8aa1b2b95",
+ "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95",
"shasum": ""
},
"require": {
@@ -277,7 +277,7 @@
"support": {
"irc": "ircs://irc.libera.chat:6697/composer",
"issues": "https://github.com/composer/semver/issues",
- "source": "https://github.com/composer/semver/tree/3.4.3"
+ "source": "https://github.com/composer/semver/tree/3.4.4"
},
"funding": [
{
@@ -287,13 +287,9 @@
{
"url": "https://github.com/composer",
"type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/composer/composer",
- "type": "tidelift"
}
],
- "time": "2024-09-19T14:15:21+00:00"
+ "time": "2025-08-20T19:15:30+00:00"
},
{
"name": "darkaonline/l5-swagger",
@@ -529,33 +525,32 @@
},
{
"name": "doctrine/inflector",
- "version": "2.0.10",
+ "version": "2.1.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/inflector.git",
- "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc"
+ "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/inflector/zipball/5817d0659c5b50c9b950feb9af7b9668e2c436bc",
- "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc",
+ "url": "https://api.github.com/repos/doctrine/inflector/zipball/6d6c96277ea252fc1304627204c3d5e6e15faa3b",
+ "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b",
"shasum": ""
},
"require": {
"php": "^7.2 || ^8.0"
},
"require-dev": {
- "doctrine/coding-standard": "^11.0",
- "phpstan/phpstan": "^1.8",
- "phpstan/phpstan-phpunit": "^1.1",
- "phpstan/phpstan-strict-rules": "^1.3",
- "phpunit/phpunit": "^8.5 || ^9.5",
- "vimeo/psalm": "^4.25 || ^5.4"
+ "doctrine/coding-standard": "^12.0 || ^13.0",
+ "phpstan/phpstan": "^1.12 || ^2.0",
+ "phpstan/phpstan-phpunit": "^1.4 || ^2.0",
+ "phpstan/phpstan-strict-rules": "^1.6 || ^2.0",
+ "phpunit/phpunit": "^8.5 || ^12.2"
},
"type": "library",
"autoload": {
"psr-4": {
- "Doctrine\\Inflector\\": "lib/Doctrine/Inflector"
+ "Doctrine\\Inflector\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -600,7 +595,7 @@
],
"support": {
"issues": "https://github.com/doctrine/inflector/issues",
- "source": "https://github.com/doctrine/inflector/tree/2.0.10"
+ "source": "https://github.com/doctrine/inflector/tree/2.1.0"
},
"funding": [
{
@@ -616,7 +611,7 @@
"type": "tidelift"
}
],
- "time": "2024-02-18T20:23:39+00:00"
+ "time": "2025-08-10T19:31:58+00:00"
},
{
"name": "doctrine/lexer",
@@ -1023,22 +1018,22 @@
},
{
"name": "guzzlehttp/guzzle",
- "version": "7.9.3",
+ "version": "7.10.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/guzzle.git",
- "reference": "7b2f29fe81dc4da0ca0ea7d42107a0845946ea77"
+ "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/guzzle/zipball/7b2f29fe81dc4da0ca0ea7d42107a0845946ea77",
- "reference": "7b2f29fe81dc4da0ca0ea7d42107a0845946ea77",
+ "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b51ac707cfa420b7bfd4e4d5e510ba8008e822b4",
+ "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4",
"shasum": ""
},
"require": {
"ext-json": "*",
- "guzzlehttp/promises": "^1.5.3 || ^2.0.3",
- "guzzlehttp/psr7": "^2.7.0",
+ "guzzlehttp/promises": "^2.3",
+ "guzzlehttp/psr7": "^2.8",
"php": "^7.2.5 || ^8.0",
"psr/http-client": "^1.0",
"symfony/deprecation-contracts": "^2.2 || ^3.0"
@@ -1129,7 +1124,7 @@
],
"support": {
"issues": "https://github.com/guzzle/guzzle/issues",
- "source": "https://github.com/guzzle/guzzle/tree/7.9.3"
+ "source": "https://github.com/guzzle/guzzle/tree/7.10.0"
},
"funding": [
{
@@ -1145,20 +1140,20 @@
"type": "tidelift"
}
],
- "time": "2025-03-27T13:37:11+00:00"
+ "time": "2025-08-23T22:36:01+00:00"
},
{
"name": "guzzlehttp/promises",
- "version": "2.2.0",
+ "version": "2.3.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/promises.git",
- "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c"
+ "reference": "481557b130ef3790cf82b713667b43030dc9c957"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/promises/zipball/7c69f28996b0a6920945dd20b3857e499d9ca96c",
- "reference": "7c69f28996b0a6920945dd20b3857e499d9ca96c",
+ "url": "https://api.github.com/repos/guzzle/promises/zipball/481557b130ef3790cf82b713667b43030dc9c957",
+ "reference": "481557b130ef3790cf82b713667b43030dc9c957",
"shasum": ""
},
"require": {
@@ -1166,7 +1161,7 @@
},
"require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2",
- "phpunit/phpunit": "^8.5.39 || ^9.6.20"
+ "phpunit/phpunit": "^8.5.44 || ^9.6.25"
},
"type": "library",
"extra": {
@@ -1212,7 +1207,7 @@
],
"support": {
"issues": "https://github.com/guzzle/promises/issues",
- "source": "https://github.com/guzzle/promises/tree/2.2.0"
+ "source": "https://github.com/guzzle/promises/tree/2.3.0"
},
"funding": [
{
@@ -1228,20 +1223,20 @@
"type": "tidelift"
}
],
- "time": "2025-03-27T13:27:01+00:00"
+ "time": "2025-08-22T14:34:08+00:00"
},
{
"name": "guzzlehttp/psr7",
- "version": "2.7.1",
+ "version": "2.8.0",
"source": {
"type": "git",
"url": "https://github.com/guzzle/psr7.git",
- "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16"
+ "reference": "21dc724a0583619cd1652f673303492272778051"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/psr7/zipball/c2270caaabe631b3b44c85f99e5a04bbb8060d16",
- "reference": "c2270caaabe631b3b44c85f99e5a04bbb8060d16",
+ "url": "https://api.github.com/repos/guzzle/psr7/zipball/21dc724a0583619cd1652f673303492272778051",
+ "reference": "21dc724a0583619cd1652f673303492272778051",
"shasum": ""
},
"require": {
@@ -1257,7 +1252,7 @@
"require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2",
"http-interop/http-factory-tests": "0.9.0",
- "phpunit/phpunit": "^8.5.39 || ^9.6.20"
+ "phpunit/phpunit": "^8.5.44 || ^9.6.25"
},
"suggest": {
"laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
@@ -1328,7 +1323,7 @@
],
"support": {
"issues": "https://github.com/guzzle/psr7/issues",
- "source": "https://github.com/guzzle/psr7/tree/2.7.1"
+ "source": "https://github.com/guzzle/psr7/tree/2.8.0"
},
"funding": [
{
@@ -1344,20 +1339,20 @@
"type": "tidelift"
}
],
- "time": "2025-03-27T12:30:47+00:00"
+ "time": "2025-08-23T21:21:41+00:00"
},
{
"name": "guzzlehttp/uri-template",
- "version": "v1.0.4",
+ "version": "v1.0.5",
"source": {
"type": "git",
"url": "https://github.com/guzzle/uri-template.git",
- "reference": "30e286560c137526eccd4ce21b2de477ab0676d2"
+ "reference": "4f4bbd4e7172148801e76e3decc1e559bdee34e1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/uri-template/zipball/30e286560c137526eccd4ce21b2de477ab0676d2",
- "reference": "30e286560c137526eccd4ce21b2de477ab0676d2",
+ "url": "https://api.github.com/repos/guzzle/uri-template/zipball/4f4bbd4e7172148801e76e3decc1e559bdee34e1",
+ "reference": "4f4bbd4e7172148801e76e3decc1e559bdee34e1",
"shasum": ""
},
"require": {
@@ -1366,7 +1361,7 @@
},
"require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2",
- "phpunit/phpunit": "^8.5.36 || ^9.6.15",
+ "phpunit/phpunit": "^8.5.44 || ^9.6.25",
"uri-template/tests": "1.0.0"
},
"type": "library",
@@ -1414,7 +1409,7 @@
],
"support": {
"issues": "https://github.com/guzzle/uri-template/issues",
- "source": "https://github.com/guzzle/uri-template/tree/v1.0.4"
+ "source": "https://github.com/guzzle/uri-template/tree/v1.0.5"
},
"funding": [
{
@@ -1430,20 +1425,20 @@
"type": "tidelift"
}
],
- "time": "2025-02-03T10:55:03+00:00"
+ "time": "2025-08-22T14:27:06+00:00"
},
{
"name": "laravel/framework",
- "version": "v12.19.3",
+ "version": "v12.26.3",
"source": {
"type": "git",
"url": "https://github.com/laravel/framework.git",
- "reference": "4e6ec689ef704bb4bd282f29d9dd658dfb4fb262"
+ "reference": "1a8e961a1801794c36c243bb610210d0a2bd61cb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/framework/zipball/4e6ec689ef704bb4bd282f29d9dd658dfb4fb262",
- "reference": "4e6ec689ef704bb4bd282f29d9dd658dfb4fb262",
+ "url": "https://api.github.com/repos/laravel/framework/zipball/1a8e961a1801794c36c243bb610210d0a2bd61cb",
+ "reference": "1a8e961a1801794c36c243bb610210d0a2bd61cb",
"shasum": ""
},
"require": {
@@ -1483,7 +1478,9 @@
"symfony/http-kernel": "^7.2.0",
"symfony/mailer": "^7.2.0",
"symfony/mime": "^7.2.0",
- "symfony/polyfill-php83": "^1.31",
+ "symfony/polyfill-php83": "^1.33",
+ "symfony/polyfill-php84": "^1.33",
+ "symfony/polyfill-php85": "^1.33",
"symfony/process": "^7.2.0",
"symfony/routing": "^7.2.0",
"symfony/uid": "^7.2.0",
@@ -1551,7 +1548,7 @@
"league/flysystem-read-only": "^3.25.1",
"league/flysystem-sftp-v3": "^3.25.1",
"mockery/mockery": "^1.6.10",
- "orchestra/testbench-core": "^10.0.0",
+ "orchestra/testbench-core": "^10.6.0",
"pda/pheanstalk": "^5.0.6|^7.0.0",
"php-http/discovery": "^1.15",
"phpstan/phpstan": "^2.0",
@@ -1645,20 +1642,20 @@
"issues": "https://github.com/laravel/framework/issues",
"source": "https://github.com/laravel/framework"
},
- "time": "2025-06-18T12:56:23+00:00"
+ "time": "2025-08-27T13:51:06+00:00"
},
{
"name": "laravel/prompts",
- "version": "v0.3.5",
+ "version": "v0.3.6",
"source": {
"type": "git",
"url": "https://github.com/laravel/prompts.git",
- "reference": "57b8f7efe40333cdb925700891c7d7465325d3b1"
+ "reference": "86a8b692e8661d0fb308cec64f3d176821323077"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/prompts/zipball/57b8f7efe40333cdb925700891c7d7465325d3b1",
- "reference": "57b8f7efe40333cdb925700891c7d7465325d3b1",
+ "url": "https://api.github.com/repos/laravel/prompts/zipball/86a8b692e8661d0fb308cec64f3d176821323077",
+ "reference": "86a8b692e8661d0fb308cec64f3d176821323077",
"shasum": ""
},
"require": {
@@ -1702,22 +1699,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.5"
+ "source": "https://github.com/laravel/prompts/tree/v0.3.6"
},
- "time": "2025-02-11T13:34:40+00:00"
+ "time": "2025-07-07T14:17:42+00:00"
},
{
"name": "laravel/sanctum",
- "version": "v4.1.1",
+ "version": "v4.2.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/sanctum.git",
- "reference": "a360a6a1fd2400ead4eb9b6a9c1bb272939194f5"
+ "reference": "fd6df4f79f48a72992e8d29a9c0ee25422a0d677"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/sanctum/zipball/a360a6a1fd2400ead4eb9b6a9c1bb272939194f5",
- "reference": "a360a6a1fd2400ead4eb9b6a9c1bb272939194f5",
+ "url": "https://api.github.com/repos/laravel/sanctum/zipball/fd6df4f79f48a72992e8d29a9c0ee25422a0d677",
+ "reference": "fd6df4f79f48a72992e8d29a9c0ee25422a0d677",
"shasum": ""
},
"require": {
@@ -1768,7 +1765,7 @@
"issues": "https://github.com/laravel/sanctum/issues",
"source": "https://github.com/laravel/sanctum"
},
- "time": "2025-04-23T13:03:38+00:00"
+ "time": "2025-07-09T19:45:24+00:00"
},
{
"name": "laravel/serializable-closure",
@@ -1899,16 +1896,16 @@
},
{
"name": "league/commonmark",
- "version": "2.7.0",
+ "version": "2.7.1",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/commonmark.git",
- "reference": "6fbb36d44824ed4091adbcf4c7d4a3923cdb3405"
+ "reference": "10732241927d3971d28e7ea7b5712721fa2296ca"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/6fbb36d44824ed4091adbcf4c7d4a3923cdb3405",
- "reference": "6fbb36d44824ed4091adbcf4c7d4a3923cdb3405",
+ "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/10732241927d3971d28e7ea7b5712721fa2296ca",
+ "reference": "10732241927d3971d28e7ea7b5712721fa2296ca",
"shasum": ""
},
"require": {
@@ -1937,7 +1934,7 @@
"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"
+ "vimeo/psalm": "^4.24.0 || ^5.0.0 || ^6.0.0"
},
"suggest": {
"symfony/yaml": "v2.3+ required if using the Front Matter extension"
@@ -2002,7 +1999,7 @@
"type": "tidelift"
}
],
- "time": "2025-05-05T12:20:28+00:00"
+ "time": "2025-07-20T12:47:49+00:00"
},
{
"name": "league/config",
@@ -2088,16 +2085,16 @@
},
{
"name": "league/flysystem",
- "version": "3.29.1",
+ "version": "3.30.0",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/flysystem.git",
- "reference": "edc1bb7c86fab0776c3287dbd19b5fa278347319"
+ "reference": "2203e3151755d874bb2943649dae1eb8533ac93e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/edc1bb7c86fab0776c3287dbd19b5fa278347319",
- "reference": "edc1bb7c86fab0776c3287dbd19b5fa278347319",
+ "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/2203e3151755d874bb2943649dae1eb8533ac93e",
+ "reference": "2203e3151755d874bb2943649dae1eb8533ac93e",
"shasum": ""
},
"require": {
@@ -2121,13 +2118,13 @@
"composer/semver": "^3.0",
"ext-fileinfo": "*",
"ext-ftp": "*",
- "ext-mongodb": "^1.3",
+ "ext-mongodb": "^1.3|^2",
"ext-zip": "*",
"friendsofphp/php-cs-fixer": "^3.5",
"google/cloud-storage": "^1.23",
"guzzlehttp/psr7": "^2.6",
"microsoft/azure-storage-blob": "^1.1",
- "mongodb/mongodb": "^1.2",
+ "mongodb/mongodb": "^1.2|^2",
"phpseclib/phpseclib": "^3.0.36",
"phpstan/phpstan": "^1.10",
"phpunit/phpunit": "^9.5.11|^10.0",
@@ -2165,22 +2162,72 @@
],
"support": {
"issues": "https://github.com/thephpleague/flysystem/issues",
- "source": "https://github.com/thephpleague/flysystem/tree/3.29.1"
+ "source": "https://github.com/thephpleague/flysystem/tree/3.30.0"
},
- "time": "2024-10-08T08:58:34+00:00"
+ "time": "2025-06-25T13:29:59+00:00"
},
{
- "name": "league/flysystem-local",
+ "name": "league/flysystem-ftp",
"version": "3.29.0",
"source": {
"type": "git",
- "url": "https://github.com/thephpleague/flysystem-local.git",
- "reference": "e0e8d52ce4b2ed154148453d321e97c8e931bd27"
+ "url": "https://github.com/thephpleague/flysystem-ftp.git",
+ "reference": "17e8e422cb43a7fefa06ec8ddf36ee8ec936d138"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/e0e8d52ce4b2ed154148453d321e97c8e931bd27",
- "reference": "e0e8d52ce4b2ed154148453d321e97c8e931bd27",
+ "url": "https://api.github.com/repos/thephpleague/flysystem-ftp/zipball/17e8e422cb43a7fefa06ec8ddf36ee8ec936d138",
+ "reference": "17e8e422cb43a7fefa06ec8ddf36ee8ec936d138",
+ "shasum": ""
+ },
+ "require": {
+ "ext-ftp": "*",
+ "league/flysystem": "^3.0.0",
+ "league/mime-type-detection": "^1.0.0",
+ "php": "^8.0.2"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "League\\Flysystem\\Ftp\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Frank de Jonge",
+ "email": "info@frankdejonge.nl"
+ }
+ ],
+ "description": "FTP filesystem adapter for Flysystem.",
+ "keywords": [
+ "Flysystem",
+ "file",
+ "files",
+ "filesystem",
+ "ftp",
+ "ftpd"
+ ],
+ "support": {
+ "source": "https://github.com/thephpleague/flysystem-ftp/tree/3.29.0"
+ },
+ "time": "2024-06-12T09:46:12+00:00"
+ },
+ {
+ "name": "league/flysystem-local",
+ "version": "3.30.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/thephpleague/flysystem-local.git",
+ "reference": "6691915f77c7fb69adfb87dcd550052dc184ee10"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/6691915f77c7fb69adfb87dcd550052dc184ee10",
+ "reference": "6691915f77c7fb69adfb87dcd550052dc184ee10",
"shasum": ""
},
"require": {
@@ -2214,9 +2261,9 @@
"local"
],
"support": {
- "source": "https://github.com/thephpleague/flysystem-local/tree/3.29.0"
+ "source": "https://github.com/thephpleague/flysystem-local/tree/3.30.0"
},
- "time": "2024-08-09T21:24:39+00:00"
+ "time": "2025-05-21T10:34:19+00:00"
},
{
"name": "league/mime-type-detection",
@@ -2450,16 +2497,16 @@
},
{
"name": "livewire/livewire",
- "version": "v3.6.3",
+ "version": "v3.6.4",
"source": {
"type": "git",
"url": "https://github.com/livewire/livewire.git",
- "reference": "56aa1bb63a46e06181c56fa64717a7287e19115e"
+ "reference": "ef04be759da41b14d2d129e670533180a44987dc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/livewire/livewire/zipball/56aa1bb63a46e06181c56fa64717a7287e19115e",
- "reference": "56aa1bb63a46e06181c56fa64717a7287e19115e",
+ "url": "https://api.github.com/repos/livewire/livewire/zipball/ef04be759da41b14d2d129e670533180a44987dc",
+ "reference": "ef04be759da41b14d2d129e670533180a44987dc",
"shasum": ""
},
"require": {
@@ -2514,7 +2561,7 @@
"description": "A front-end framework for Laravel.",
"support": {
"issues": "https://github.com/livewire/livewire/issues",
- "source": "https://github.com/livewire/livewire/tree/v3.6.3"
+ "source": "https://github.com/livewire/livewire/tree/v3.6.4"
},
"funding": [
{
@@ -2522,20 +2569,20 @@
"type": "github"
}
],
- "time": "2025-04-12T22:26:52+00:00"
+ "time": "2025-07-17T05:12:15+00:00"
},
{
"name": "livewire/volt",
- "version": "v1.7.1",
+ "version": "v1.7.2",
"source": {
"type": "git",
"url": "https://github.com/livewire/volt.git",
- "reference": "ba3e609fd4c71f8b5783f024baf51715e48e93a6"
+ "reference": "91ba934e72bbd162442840862959ade24dbe728a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/livewire/volt/zipball/ba3e609fd4c71f8b5783f024baf51715e48e93a6",
- "reference": "ba3e609fd4c71f8b5783f024baf51715e48e93a6",
+ "url": "https://api.github.com/repos/livewire/volt/zipball/91ba934e72bbd162442840862959ade24dbe728a",
+ "reference": "91ba934e72bbd162442840862959ade24dbe728a",
"shasum": ""
},
"require": {
@@ -2594,20 +2641,20 @@
"issues": "https://github.com/livewire/volt/issues",
"source": "https://github.com/livewire/volt"
},
- "time": "2025-04-08T15:13:36+00:00"
+ "time": "2025-08-06T15:40:50+00:00"
},
{
"name": "maatwebsite/excel",
- "version": "3.1.64",
+ "version": "3.1.67",
"source": {
"type": "git",
"url": "https://github.com/SpartnerNL/Laravel-Excel.git",
- "reference": "e25d44a2d91da9179cd2d7fec952313548597a79"
+ "reference": "e508e34a502a3acc3329b464dad257378a7edb4d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/SpartnerNL/Laravel-Excel/zipball/e25d44a2d91da9179cd2d7fec952313548597a79",
- "reference": "e25d44a2d91da9179cd2d7fec952313548597a79",
+ "url": "https://api.github.com/repos/SpartnerNL/Laravel-Excel/zipball/e508e34a502a3acc3329b464dad257378a7edb4d",
+ "reference": "e508e34a502a3acc3329b464dad257378a7edb4d",
"shasum": ""
},
"require": {
@@ -2615,7 +2662,7 @@
"ext-json": "*",
"illuminate/support": "5.8.*||^6.0||^7.0||^8.0||^9.0||^10.0||^11.0||^12.0",
"php": "^7.0||^8.0",
- "phpoffice/phpspreadsheet": "^1.29.9",
+ "phpoffice/phpspreadsheet": "^1.30.0",
"psr/simple-cache": "^1.0||^2.0||^3.0"
},
"require-dev": {
@@ -2663,7 +2710,7 @@
],
"support": {
"issues": "https://github.com/SpartnerNL/Laravel-Excel/issues",
- "source": "https://github.com/SpartnerNL/Laravel-Excel/tree/3.1.64"
+ "source": "https://github.com/SpartnerNL/Laravel-Excel/tree/3.1.67"
},
"funding": [
{
@@ -2675,26 +2722,26 @@
"type": "github"
}
],
- "time": "2025-02-24T11:12:50+00:00"
+ "time": "2025-08-26T09:13:16+00:00"
},
{
"name": "maennchen/zipstream-php",
- "version": "3.1.2",
+ "version": "3.2.0",
"source": {
"type": "git",
"url": "https://github.com/maennchen/ZipStream-PHP.git",
- "reference": "aeadcf5c412332eb426c0f9b4485f6accba2a99f"
+ "reference": "9712d8fa4cdf9240380b01eb4be55ad8dcf71416"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/aeadcf5c412332eb426c0f9b4485f6accba2a99f",
- "reference": "aeadcf5c412332eb426c0f9b4485f6accba2a99f",
+ "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/9712d8fa4cdf9240380b01eb4be55ad8dcf71416",
+ "reference": "9712d8fa4cdf9240380b01eb4be55ad8dcf71416",
"shasum": ""
},
"require": {
"ext-mbstring": "*",
"ext-zlib": "*",
- "php-64bit": "^8.2"
+ "php-64bit": "^8.3"
},
"require-dev": {
"brianium/paratest": "^7.7",
@@ -2703,7 +2750,7 @@
"guzzlehttp/guzzle": "^7.5",
"mikey179/vfsstream": "^1.6",
"php-coveralls/php-coveralls": "^2.5",
- "phpunit/phpunit": "^11.0",
+ "phpunit/phpunit": "^12.0",
"vimeo/psalm": "^6.0"
},
"suggest": {
@@ -2745,7 +2792,7 @@
],
"support": {
"issues": "https://github.com/maennchen/ZipStream-PHP/issues",
- "source": "https://github.com/maennchen/ZipStream-PHP/tree/3.1.2"
+ "source": "https://github.com/maennchen/ZipStream-PHP/tree/3.2.0"
},
"funding": [
{
@@ -2753,7 +2800,7 @@
"type": "github"
}
],
- "time": "2025-01-27T12:07:53+00:00"
+ "time": "2025-07-17T11:15:13+00:00"
},
{
"name": "markbaker/complex",
@@ -2967,16 +3014,16 @@
},
{
"name": "nesbot/carbon",
- "version": "3.10.0",
+ "version": "3.10.2",
"source": {
"type": "git",
"url": "https://github.com/CarbonPHP/carbon.git",
- "reference": "c1397390dd0a7e0f11660f0ae20f753d88c1f3d9"
+ "reference": "76b5c07b8a9d2025ed1610e14cef1f3fd6ad2c24"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/c1397390dd0a7e0f11660f0ae20f753d88c1f3d9",
- "reference": "c1397390dd0a7e0f11660f0ae20f753d88c1f3d9",
+ "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/76b5c07b8a9d2025ed1610e14cef1f3fd6ad2c24",
+ "reference": "76b5c07b8a9d2025ed1610e14cef1f3fd6ad2c24",
"shasum": ""
},
"require": {
@@ -3068,7 +3115,7 @@
"type": "tidelift"
}
],
- "time": "2025-06-12T10:24:28+00:00"
+ "time": "2025-08-02T09:36:06+00:00"
},
{
"name": "nette/schema",
@@ -3134,29 +3181,29 @@
},
{
"name": "nette/utils",
- "version": "v4.0.7",
+ "version": "v4.0.8",
"source": {
"type": "git",
"url": "https://github.com/nette/utils.git",
- "reference": "e67c4061eb40b9c113b218214e42cb5a0dda28f2"
+ "reference": "c930ca4e3cf4f17dcfb03037703679d2396d2ede"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nette/utils/zipball/e67c4061eb40b9c113b218214e42cb5a0dda28f2",
- "reference": "e67c4061eb40b9c113b218214e42cb5a0dda28f2",
+ "url": "https://api.github.com/repos/nette/utils/zipball/c930ca4e3cf4f17dcfb03037703679d2396d2ede",
+ "reference": "c930ca4e3cf4f17dcfb03037703679d2396d2ede",
"shasum": ""
},
"require": {
- "php": "8.0 - 8.4"
+ "php": "8.0 - 8.5"
},
"conflict": {
"nette/finder": "<3",
"nette/schema": "<1.2.2"
},
"require-dev": {
- "jetbrains/phpstorm-attributes": "dev-master",
+ "jetbrains/phpstorm-attributes": "^1.2",
"nette/tester": "^2.5",
- "phpstan/phpstan": "^1.0",
+ "phpstan/phpstan-nette": "^2.0@stable",
"tracy/tracy": "^2.9"
},
"suggest": {
@@ -3174,6 +3221,9 @@
}
},
"autoload": {
+ "psr-4": {
+ "Nette\\": "src"
+ },
"classmap": [
"src/"
]
@@ -3214,22 +3264,22 @@
],
"support": {
"issues": "https://github.com/nette/utils/issues",
- "source": "https://github.com/nette/utils/tree/v4.0.7"
+ "source": "https://github.com/nette/utils/tree/v4.0.8"
},
- "time": "2025-06-03T04:55:08+00:00"
+ "time": "2025-08-06T21:43:34+00:00"
},
{
"name": "nikic/php-parser",
- "version": "v5.5.0",
+ "version": "v5.6.1",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "ae59794362fe85e051a58ad36b289443f57be7a9"
+ "reference": "f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/ae59794362fe85e051a58ad36b289443f57be7a9",
- "reference": "ae59794362fe85e051a58ad36b289443f57be7a9",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2",
+ "reference": "f103601b29efebd7ff4a1ca7b3eeea9e3336a2a2",
"shasum": ""
},
"require": {
@@ -3248,7 +3298,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "5.0-dev"
+ "dev-master": "5.x-dev"
}
},
"autoload": {
@@ -3272,9 +3322,9 @@
],
"support": {
"issues": "https://github.com/nikic/PHP-Parser/issues",
- "source": "https://github.com/nikic/PHP-Parser/tree/v5.5.0"
+ "source": "https://github.com/nikic/PHP-Parser/tree/v5.6.1"
},
- "time": "2025-05-31T08:24:38+00:00"
+ "time": "2025-08-13T20:13:15+00:00"
},
{
"name": "nunomaduro/termwind",
@@ -3365,16 +3415,16 @@
},
{
"name": "openspout/openspout",
- "version": "v4.30.0",
+ "version": "v4.31.0",
"source": {
"type": "git",
"url": "https://github.com/openspout/openspout.git",
- "reference": "df9b0f4d229c37c3caa5a9252a6ad8a94efb0fb5"
+ "reference": "90dc2f7ce0b59084b78cd86ca7c5d367759496cd"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/openspout/openspout/zipball/df9b0f4d229c37c3caa5a9252a6ad8a94efb0fb5",
- "reference": "df9b0f4d229c37c3caa5a9252a6ad8a94efb0fb5",
+ "url": "https://api.github.com/repos/openspout/openspout/zipball/90dc2f7ce0b59084b78cd86ca7c5d367759496cd",
+ "reference": "90dc2f7ce0b59084b78cd86ca7c5d367759496cd",
"shasum": ""
},
"require": {
@@ -3384,17 +3434,17 @@
"ext-libxml": "*",
"ext-xmlreader": "*",
"ext-zip": "*",
- "php": "~8.3.0 || ~8.4.0"
+ "php": "~8.3.0 || ~8.4.0 || ~8.5.0"
},
"require-dev": {
"ext-zlib": "*",
- "friendsofphp/php-cs-fixer": "^3.75.0",
- "infection/infection": "^0.29.14",
+ "friendsofphp/php-cs-fixer": "^3.86.0",
+ "infection/infection": "^0.31.2",
"phpbench/phpbench": "^1.4.1",
- "phpstan/phpstan": "^2.1.16",
- "phpstan/phpstan-phpunit": "^2.0.6",
- "phpstan/phpstan-strict-rules": "^2.0.4",
- "phpunit/phpunit": "^12.1.5"
+ "phpstan/phpstan": "^2.1.22",
+ "phpstan/phpstan-phpunit": "^2.0.7",
+ "phpstan/phpstan-strict-rules": "^2.0.6",
+ "phpunit/phpunit": "^12.3.7"
},
"suggest": {
"ext-iconv": "To handle non UTF-8 CSV files (if \"php-mbstring\" is not already installed or is too limited)",
@@ -3442,7 +3492,7 @@
],
"support": {
"issues": "https://github.com/openspout/openspout/issues",
- "source": "https://github.com/openspout/openspout/tree/v4.30.0"
+ "source": "https://github.com/openspout/openspout/tree/v4.31.0"
},
"funding": [
{
@@ -3454,20 +3504,20 @@
"type": "github"
}
],
- "time": "2025-05-20T12:33:06+00:00"
+ "time": "2025-08-29T05:42:48+00:00"
},
{
"name": "phpoffice/phpspreadsheet",
- "version": "1.29.10",
+ "version": "1.30.0",
"source": {
"type": "git",
"url": "https://github.com/PHPOffice/PhpSpreadsheet.git",
- "reference": "c80041b1628c4f18030407134fe88303661d4e4e"
+ "reference": "2f39286e0136673778b7a142b3f0d141e43d1714"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/c80041b1628c4f18030407134fe88303661d4e4e",
- "reference": "c80041b1628c4f18030407134fe88303661d4e4e",
+ "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/2f39286e0136673778b7a142b3f0d141e43d1714",
+ "reference": "2f39286e0136673778b7a142b3f0d141e43d1714",
"shasum": ""
},
"require": {
@@ -3558,22 +3608,22 @@
],
"support": {
"issues": "https://github.com/PHPOffice/PhpSpreadsheet/issues",
- "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/1.29.10"
+ "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/1.30.0"
},
- "time": "2025-02-08T02:56:14+00:00"
+ "time": "2025-08-10T06:28:02+00:00"
},
{
"name": "phpoption/phpoption",
- "version": "1.9.3",
+ "version": "1.9.4",
"source": {
"type": "git",
"url": "https://github.com/schmittjoh/php-option.git",
- "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54"
+ "reference": "638a154f8d4ee6a5cfa96d6a34dfbe0cffa9566d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/e3fac8b24f56113f7cb96af14958c0dd16330f54",
- "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54",
+ "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/638a154f8d4ee6a5cfa96d6a34dfbe0cffa9566d",
+ "reference": "638a154f8d4ee6a5cfa96d6a34dfbe0cffa9566d",
"shasum": ""
},
"require": {
@@ -3581,7 +3631,7 @@
},
"require-dev": {
"bamarni/composer-bin-plugin": "^1.8.2",
- "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28"
+ "phpunit/phpunit": "^8.5.44 || ^9.6.25 || ^10.5.53 || ^11.5.34"
},
"type": "library",
"extra": {
@@ -3623,7 +3673,7 @@
],
"support": {
"issues": "https://github.com/schmittjoh/php-option/issues",
- "source": "https://github.com/schmittjoh/php-option/tree/1.9.3"
+ "source": "https://github.com/schmittjoh/php-option/tree/1.9.4"
},
"funding": [
{
@@ -3635,20 +3685,20 @@
"type": "tidelift"
}
],
- "time": "2024-07-20T21:41:07+00:00"
+ "time": "2025-08-21T11:53:16+00:00"
},
{
"name": "power-components/livewire-powergrid",
- "version": "v6.4.0",
+ "version": "v6.6.0",
"source": {
"type": "git",
"url": "https://github.com/Power-Components/livewire-powergrid.git",
- "reference": "0e1bf69694f585e376ea4b980e23a16225fb8ab9"
+ "reference": "051e5e420b9290574e812eedce099ec740132b34"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Power-Components/livewire-powergrid/zipball/0e1bf69694f585e376ea4b980e23a16225fb8ab9",
- "reference": "0e1bf69694f585e376ea4b980e23a16225fb8ab9",
+ "url": "https://api.github.com/repos/Power-Components/livewire-powergrid/zipball/051e5e420b9290574e812eedce099ec740132b34",
+ "reference": "051e5e420b9290574e812eedce099ec740132b34",
"shasum": ""
},
"require": {
@@ -3660,7 +3710,7 @@
"composer/composer": "^2.7.9",
"laradumps/laradumps": "^3.2|^4.0",
"larastan/larastan": "^2.0|^3.0",
- "laravel/pint": "1.17",
+ "laravel/pint": "^1.24",
"laravel/scout": "^10.11.3",
"openspout/openspout": "^4.24.5",
"orchestra/testbench": "^9.4|^10.0",
@@ -3705,7 +3755,7 @@
"homepage": "https://github.com/power-components/livewire-powergrid",
"support": {
"issues": "https://github.com/Power-Components/livewire-powergrid/issues",
- "source": "https://github.com/Power-Components/livewire-powergrid/tree/v6.4.0"
+ "source": "https://github.com/Power-Components/livewire-powergrid/tree/v6.6.0"
},
"funding": [
{
@@ -3713,7 +3763,7 @@
"type": "github"
}
],
- "time": "2025-06-03T20:40:44+00:00"
+ "time": "2025-08-28T14:29:32+00:00"
},
{
"name": "psr/cache",
@@ -4178,16 +4228,16 @@
},
{
"name": "psy/psysh",
- "version": "v0.12.8",
+ "version": "v0.12.10",
"source": {
"type": "git",
"url": "https://github.com/bobthecow/psysh.git",
- "reference": "85057ceedee50c49d4f6ecaff73ee96adb3b3625"
+ "reference": "6e80abe6f2257121f1eb9a4c55bf29d921025b22"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/bobthecow/psysh/zipball/85057ceedee50c49d4f6ecaff73ee96adb3b3625",
- "reference": "85057ceedee50c49d4f6ecaff73ee96adb3b3625",
+ "url": "https://api.github.com/repos/bobthecow/psysh/zipball/6e80abe6f2257121f1eb9a4c55bf29d921025b22",
+ "reference": "6e80abe6f2257121f1eb9a4c55bf29d921025b22",
"shasum": ""
},
"require": {
@@ -4237,12 +4287,11 @@
"authors": [
{
"name": "Justin Hileman",
- "email": "justin@justinhileman.info",
- "homepage": "http://justinhileman.com"
+ "email": "justin@justinhileman.info"
}
],
"description": "An interactive shell for modern PHP.",
- "homepage": "http://psysh.org",
+ "homepage": "https://psysh.org",
"keywords": [
"REPL",
"console",
@@ -4251,9 +4300,9 @@
],
"support": {
"issues": "https://github.com/bobthecow/psysh/issues",
- "source": "https://github.com/bobthecow/psysh/tree/v0.12.8"
+ "source": "https://github.com/bobthecow/psysh/tree/v0.12.10"
},
- "time": "2025-03-16T03:05:19+00:00"
+ "time": "2025-08-04T12:39:37+00:00"
},
{
"name": "ralouphie/getallheaders",
@@ -4377,21 +4426,20 @@
},
{
"name": "ramsey/uuid",
- "version": "4.8.1",
+ "version": "4.9.0",
"source": {
"type": "git",
"url": "https://github.com/ramsey/uuid.git",
- "reference": "fdf4dd4e2ff1813111bd0ad58d7a1ddbb5b56c28"
+ "reference": "4e0e23cc785f0724a0e838279a9eb03f28b092a0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ramsey/uuid/zipball/fdf4dd4e2ff1813111bd0ad58d7a1ddbb5b56c28",
- "reference": "fdf4dd4e2ff1813111bd0ad58d7a1ddbb5b56c28",
+ "url": "https://api.github.com/repos/ramsey/uuid/zipball/4e0e23cc785f0724a0e838279a9eb03f28b092a0",
+ "reference": "4e0e23cc785f0724a0e838279a9eb03f28b092a0",
"shasum": ""
},
"require": {
"brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13",
- "ext-json": "*",
"php": "^8.0",
"ramsey/collection": "^1.2 || ^2.0"
},
@@ -4450,9 +4498,9 @@
],
"support": {
"issues": "https://github.com/ramsey/uuid/issues",
- "source": "https://github.com/ramsey/uuid/tree/4.8.1"
+ "source": "https://github.com/ramsey/uuid/tree/4.9.0"
},
- "time": "2025-06-01T06:28:46+00:00"
+ "time": "2025-06-25T14:20:11+00:00"
},
{
"name": "spatie/laravel-activitylog",
@@ -4547,16 +4595,16 @@
},
{
"name": "spatie/laravel-package-tools",
- "version": "1.92.4",
+ "version": "1.92.7",
"source": {
"type": "git",
"url": "https://github.com/spatie/laravel-package-tools.git",
- "reference": "d20b1969f836d210459b78683d85c9cd5c5f508c"
+ "reference": "f09a799850b1ed765103a4f0b4355006360c49a5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/d20b1969f836d210459b78683d85c9cd5c5f508c",
- "reference": "d20b1969f836d210459b78683d85c9cd5c5f508c",
+ "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/f09a799850b1ed765103a4f0b4355006360c49a5",
+ "reference": "f09a799850b1ed765103a4f0b4355006360c49a5",
"shasum": ""
},
"require": {
@@ -4596,7 +4644,7 @@
],
"support": {
"issues": "https://github.com/spatie/laravel-package-tools/issues",
- "source": "https://github.com/spatie/laravel-package-tools/tree/1.92.4"
+ "source": "https://github.com/spatie/laravel-package-tools/tree/1.92.7"
},
"funding": [
{
@@ -4604,20 +4652,20 @@
"type": "github"
}
],
- "time": "2025-04-11T15:27:14+00:00"
+ "time": "2025-07-17T15:46:43+00:00"
},
{
"name": "spatie/laravel-permission",
- "version": "6.20.0",
+ "version": "6.21.0",
"source": {
"type": "git",
"url": "https://github.com/spatie/laravel-permission.git",
- "reference": "31c05679102c73f3b0d05790d2400182745a5615"
+ "reference": "6a118e8855dfffcd90403aab77bbf35a03db51b3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/spatie/laravel-permission/zipball/31c05679102c73f3b0d05790d2400182745a5615",
- "reference": "31c05679102c73f3b0d05790d2400182745a5615",
+ "url": "https://api.github.com/repos/spatie/laravel-permission/zipball/6a118e8855dfffcd90403aab77bbf35a03db51b3",
+ "reference": "6a118e8855dfffcd90403aab77bbf35a03db51b3",
"shasum": ""
},
"require": {
@@ -4679,7 +4727,7 @@
],
"support": {
"issues": "https://github.com/spatie/laravel-permission/issues",
- "source": "https://github.com/spatie/laravel-permission/tree/6.20.0"
+ "source": "https://github.com/spatie/laravel-permission/tree/6.21.0"
},
"funding": [
{
@@ -4687,20 +4735,20 @@
"type": "github"
}
],
- "time": "2025-06-05T07:33:07+00:00"
+ "time": "2025-07-23T16:08:05+00:00"
},
{
"name": "swagger-api/swagger-ui",
- "version": "v5.24.2",
+ "version": "v5.28.0",
"source": {
"type": "git",
"url": "https://github.com/swagger-api/swagger-ui.git",
- "reference": "bf7b19dd23765d72b2027dee560a5b6dd737f4f2"
+ "reference": "01e23904eec6075e032e07f3235607b463d9ecf3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/swagger-api/swagger-ui/zipball/bf7b19dd23765d72b2027dee560a5b6dd737f4f2",
- "reference": "bf7b19dd23765d72b2027dee560a5b6dd737f4f2",
+ "url": "https://api.github.com/repos/swagger-api/swagger-ui/zipball/01e23904eec6075e032e07f3235607b463d9ecf3",
+ "reference": "01e23904eec6075e032e07f3235607b463d9ecf3",
"shasum": ""
},
"type": "library",
@@ -4746,9 +4794,9 @@
],
"support": {
"issues": "https://github.com/swagger-api/swagger-ui/issues",
- "source": "https://github.com/swagger-api/swagger-ui/tree/v5.24.2"
+ "source": "https://github.com/swagger-api/swagger-ui/tree/v5.28.0"
},
- "time": "2025-06-16T12:50:04+00:00"
+ "time": "2025-08-28T13:24:41+00:00"
},
{
"name": "symfony/clock",
@@ -4826,16 +4874,16 @@
},
{
"name": "symfony/console",
- "version": "v7.3.0",
+ "version": "v7.3.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "66c1440edf6f339fd82ed6c7caa76cb006211b44"
+ "reference": "cb0102a1c5ac3807cf3fdf8bea96007df7fdbea7"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/66c1440edf6f339fd82ed6c7caa76cb006211b44",
- "reference": "66c1440edf6f339fd82ed6c7caa76cb006211b44",
+ "url": "https://api.github.com/repos/symfony/console/zipball/cb0102a1c5ac3807cf3fdf8bea96007df7fdbea7",
+ "reference": "cb0102a1c5ac3807cf3fdf8bea96007df7fdbea7",
"shasum": ""
},
"require": {
@@ -4900,7 +4948,7 @@
"terminal"
],
"support": {
- "source": "https://github.com/symfony/console/tree/v7.3.0"
+ "source": "https://github.com/symfony/console/tree/v7.3.3"
},
"funding": [
{
@@ -4911,12 +4959,16 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-05-24T10:34:04+00:00"
+ "time": "2025-08-25T06:35:40+00:00"
},
{
"name": "symfony/css-selector",
@@ -5052,16 +5104,16 @@
},
{
"name": "symfony/error-handler",
- "version": "v7.3.0",
+ "version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/error-handler.git",
- "reference": "cf68d225bc43629de4ff54778029aee6dc191b83"
+ "reference": "0b31a944fcd8759ae294da4d2808cbc53aebd0c3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/error-handler/zipball/cf68d225bc43629de4ff54778029aee6dc191b83",
- "reference": "cf68d225bc43629de4ff54778029aee6dc191b83",
+ "url": "https://api.github.com/repos/symfony/error-handler/zipball/0b31a944fcd8759ae294da4d2808cbc53aebd0c3",
+ "reference": "0b31a944fcd8759ae294da4d2808cbc53aebd0c3",
"shasum": ""
},
"require": {
@@ -5109,7 +5161,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.3.0"
+ "source": "https://github.com/symfony/error-handler/tree/v7.3.2"
},
"funding": [
{
@@ -5120,25 +5172,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-05-29T07:19:49+00:00"
+ "time": "2025-07-07T08:17:57+00:00"
},
{
"name": "symfony/event-dispatcher",
- "version": "v7.3.0",
+ "version": "v7.3.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
- "reference": "497f73ac996a598c92409b44ac43b6690c4f666d"
+ "reference": "b7dc69e71de420ac04bc9ab830cf3ffebba48191"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/497f73ac996a598c92409b44ac43b6690c4f666d",
- "reference": "497f73ac996a598c92409b44ac43b6690c4f666d",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/b7dc69e71de420ac04bc9ab830cf3ffebba48191",
+ "reference": "b7dc69e71de420ac04bc9ab830cf3ffebba48191",
"shasum": ""
},
"require": {
@@ -5189,7 +5245,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.3.0"
+ "source": "https://github.com/symfony/event-dispatcher/tree/v7.3.3"
},
"funding": [
{
@@ -5200,12 +5256,16 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-04-22T09:11:45+00:00"
+ "time": "2025-08-13T11:49:31+00:00"
},
{
"name": "symfony/event-dispatcher-contracts",
@@ -5285,16 +5345,16 @@
},
{
"name": "symfony/finder",
- "version": "v7.3.0",
+ "version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
- "reference": "ec2344cf77a48253bbca6939aa3d2477773ea63d"
+ "reference": "2a6614966ba1074fa93dae0bc804227422df4dfe"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/finder/zipball/ec2344cf77a48253bbca6939aa3d2477773ea63d",
- "reference": "ec2344cf77a48253bbca6939aa3d2477773ea63d",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/2a6614966ba1074fa93dae0bc804227422df4dfe",
+ "reference": "2a6614966ba1074fa93dae0bc804227422df4dfe",
"shasum": ""
},
"require": {
@@ -5329,7 +5389,7 @@
"description": "Finds files and directories via an intuitive fluent interface",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/finder/tree/v7.3.0"
+ "source": "https://github.com/symfony/finder/tree/v7.3.2"
},
"funding": [
{
@@ -5340,25 +5400,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-12-30T19:00:26+00:00"
+ "time": "2025-07-15T13:41:35+00:00"
},
{
"name": "symfony/http-foundation",
- "version": "v7.3.0",
+ "version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
- "reference": "4236baf01609667d53b20371486228231eb135fd"
+ "reference": "6877c122b3a6cc3695849622720054f6e6fa5fa6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-foundation/zipball/4236baf01609667d53b20371486228231eb135fd",
- "reference": "4236baf01609667d53b20371486228231eb135fd",
+ "url": "https://api.github.com/repos/symfony/http-foundation/zipball/6877c122b3a6cc3695849622720054f6e6fa5fa6",
+ "reference": "6877c122b3a6cc3695849622720054f6e6fa5fa6",
"shasum": ""
},
"require": {
@@ -5408,7 +5472,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.3.0"
+ "source": "https://github.com/symfony/http-foundation/tree/v7.3.2"
},
"funding": [
{
@@ -5419,25 +5483,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-05-12T14:48:23+00:00"
+ "time": "2025-07-10T08:47:49+00:00"
},
{
"name": "symfony/http-kernel",
- "version": "v7.3.0",
+ "version": "v7.3.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
- "reference": "ac7b8e163e8c83dce3abcc055a502d4486051a9f"
+ "reference": "72c304de37e1a1cec6d5d12b81187ebd4850a17b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-kernel/zipball/ac7b8e163e8c83dce3abcc055a502d4486051a9f",
- "reference": "ac7b8e163e8c83dce3abcc055a502d4486051a9f",
+ "url": "https://api.github.com/repos/symfony/http-kernel/zipball/72c304de37e1a1cec6d5d12b81187ebd4850a17b",
+ "reference": "72c304de37e1a1cec6d5d12b81187ebd4850a17b",
"shasum": ""
},
"require": {
@@ -5522,7 +5590,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.3.0"
+ "source": "https://github.com/symfony/http-kernel/tree/v7.3.3"
},
"funding": [
{
@@ -5533,25 +5601,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-05-29T07:47:32+00:00"
+ "time": "2025-08-29T08:23:45+00:00"
},
{
"name": "symfony/mailer",
- "version": "v7.3.0",
+ "version": "v7.3.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/mailer.git",
- "reference": "0f375bbbde96ae8c78e4aa3e63aabd486e33364c"
+ "reference": "a32f3f45f1990db8c4341d5122a7d3a381c7e575"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/mailer/zipball/0f375bbbde96ae8c78e4aa3e63aabd486e33364c",
- "reference": "0f375bbbde96ae8c78e4aa3e63aabd486e33364c",
+ "url": "https://api.github.com/repos/symfony/mailer/zipball/a32f3f45f1990db8c4341d5122a7d3a381c7e575",
+ "reference": "a32f3f45f1990db8c4341d5122a7d3a381c7e575",
"shasum": ""
},
"require": {
@@ -5602,7 +5674,7 @@
"description": "Helps sending emails",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/mailer/tree/v7.3.0"
+ "source": "https://github.com/symfony/mailer/tree/v7.3.3"
},
"funding": [
{
@@ -5613,25 +5685,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-04-04T09:51:09+00:00"
+ "time": "2025-08-13T11:49:31+00:00"
},
{
"name": "symfony/mime",
- "version": "v7.3.0",
+ "version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/mime.git",
- "reference": "0e7b19b2f399c31df0cdbe5d8cbf53f02f6cfcd9"
+ "reference": "e0a0f859148daf1edf6c60b398eb40bfc96697d1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/mime/zipball/0e7b19b2f399c31df0cdbe5d8cbf53f02f6cfcd9",
- "reference": "0e7b19b2f399c31df0cdbe5d8cbf53f02f6cfcd9",
+ "url": "https://api.github.com/repos/symfony/mime/zipball/e0a0f859148daf1edf6c60b398eb40bfc96697d1",
+ "reference": "e0a0f859148daf1edf6c60b398eb40bfc96697d1",
"shasum": ""
},
"require": {
@@ -5686,7 +5762,7 @@
"mime-type"
],
"support": {
- "source": "https://github.com/symfony/mime/tree/v7.3.0"
+ "source": "https://github.com/symfony/mime/tree/v7.3.2"
},
"funding": [
{
@@ -5697,16 +5773,20 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-02-19T08:51:26+00:00"
+ "time": "2025-07-15T13:41:35+00:00"
},
{
"name": "symfony/polyfill-ctype",
- "version": "v1.32.0",
+ "version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
@@ -5765,7 +5845,7 @@
"portable"
],
"support": {
- "source": "https://github.com/symfony/polyfill-ctype/tree/v1.32.0"
+ "source": "https://github.com/symfony/polyfill-ctype/tree/v1.33.0"
},
"funding": [
{
@@ -5776,6 +5856,10 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
@@ -5785,16 +5869,16 @@
},
{
"name": "symfony/polyfill-intl-grapheme",
- "version": "v1.32.0",
+ "version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-grapheme.git",
- "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe"
+ "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe",
- "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/380872130d3a5dd3ace2f4010d95125fde5d5c70",
+ "reference": "380872130d3a5dd3ace2f4010d95125fde5d5c70",
"shasum": ""
},
"require": {
@@ -5843,7 +5927,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.32.0"
+ "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.33.0"
},
"funding": [
{
@@ -5854,16 +5938,20 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-09-09T11:45:10+00:00"
+ "time": "2025-06-27T09:58:17+00:00"
},
{
"name": "symfony/polyfill-intl-idn",
- "version": "v1.32.0",
+ "version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-idn.git",
@@ -5926,7 +6014,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.32.0"
+ "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.33.0"
},
"funding": [
{
@@ -5937,6 +6025,10 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
@@ -5946,7 +6038,7 @@
},
{
"name": "symfony/polyfill-intl-normalizer",
- "version": "v1.32.0",
+ "version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
@@ -6007,7 +6099,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.32.0"
+ "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.33.0"
},
"funding": [
{
@@ -6018,6 +6110,10 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
@@ -6027,7 +6123,7 @@
},
{
"name": "symfony/polyfill-mbstring",
- "version": "v1.32.0",
+ "version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
@@ -6088,7 +6184,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.32.0"
+ "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.33.0"
},
"funding": [
{
@@ -6099,6 +6195,10 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
@@ -6108,7 +6208,7 @@
},
{
"name": "symfony/polyfill-php80",
- "version": "v1.32.0",
+ "version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php80.git",
@@ -6168,7 +6268,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php80/tree/v1.32.0"
+ "source": "https://github.com/symfony/polyfill-php80/tree/v1.33.0"
},
"funding": [
{
@@ -6179,6 +6279,10 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
@@ -6188,16 +6292,16 @@
},
{
"name": "symfony/polyfill-php83",
- "version": "v1.32.0",
+ "version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php83.git",
- "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491"
+ "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/2fb86d65e2d424369ad2905e83b236a8805ba491",
- "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491",
+ "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/17f6f9a6b1735c0f163024d959f700cfbc5155e5",
+ "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5",
"shasum": ""
},
"require": {
@@ -6244,7 +6348,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php83/tree/v1.32.0"
+ "source": "https://github.com/symfony/polyfill-php83/tree/v1.33.0"
},
"funding": [
{
@@ -6255,16 +6359,180 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2024-09-09T11:45:10+00:00"
+ "time": "2025-07-08T02:45:35+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php84",
+ "version": "v1.33.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php84.git",
+ "reference": "d8ced4d875142b6a7426000426b8abc631d6b191"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/d8ced4d875142b6a7426000426b8abc631d6b191",
+ "reference": "d8ced4d875142b6a7426000426b8abc631d6b191",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php84\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php84/tree/v1.33.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-06-24T13:30:11+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php85",
+ "version": "v1.33.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php85.git",
+ "reference": "d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91",
+ "reference": "d4e5fcd4ab3d998ab16c0db48e6cbb9a01993f91",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php85\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 8.5+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php85/tree/v1.33.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2025-06-23T16:12:55+00:00"
},
{
"name": "symfony/polyfill-uuid",
- "version": "v1.32.0",
+ "version": "v1.33.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-uuid.git",
@@ -6323,7 +6591,7 @@
"uuid"
],
"support": {
- "source": "https://github.com/symfony/polyfill-uuid/tree/v1.32.0"
+ "source": "https://github.com/symfony/polyfill-uuid/tree/v1.33.0"
},
"funding": [
{
@@ -6334,6 +6602,10 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
@@ -6343,16 +6615,16 @@
},
{
"name": "symfony/process",
- "version": "v7.3.0",
+ "version": "v7.3.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
- "reference": "40c295f2deb408d5e9d2d32b8ba1dd61e36f05af"
+ "reference": "32241012d521e2e8a9d713adb0812bb773b907f1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/process/zipball/40c295f2deb408d5e9d2d32b8ba1dd61e36f05af",
- "reference": "40c295f2deb408d5e9d2d32b8ba1dd61e36f05af",
+ "url": "https://api.github.com/repos/symfony/process/zipball/32241012d521e2e8a9d713adb0812bb773b907f1",
+ "reference": "32241012d521e2e8a9d713adb0812bb773b907f1",
"shasum": ""
},
"require": {
@@ -6384,7 +6656,7 @@
"description": "Executes commands in sub-processes",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/process/tree/v7.3.0"
+ "source": "https://github.com/symfony/process/tree/v7.3.3"
},
"funding": [
{
@@ -6395,25 +6667,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-04-17T09:11:12+00:00"
+ "time": "2025-08-18T09:42:54+00:00"
},
{
"name": "symfony/routing",
- "version": "v7.3.0",
+ "version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
- "reference": "8e213820c5fea844ecea29203d2a308019007c15"
+ "reference": "7614b8ca5fa89b9cd233e21b627bfc5774f586e4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/routing/zipball/8e213820c5fea844ecea29203d2a308019007c15",
- "reference": "8e213820c5fea844ecea29203d2a308019007c15",
+ "url": "https://api.github.com/repos/symfony/routing/zipball/7614b8ca5fa89b9cd233e21b627bfc5774f586e4",
+ "reference": "7614b8ca5fa89b9cd233e21b627bfc5774f586e4",
"shasum": ""
},
"require": {
@@ -6465,7 +6741,7 @@
"url"
],
"support": {
- "source": "https://github.com/symfony/routing/tree/v7.3.0"
+ "source": "https://github.com/symfony/routing/tree/v7.3.2"
},
"funding": [
{
@@ -6476,12 +6752,16 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-05-24T20:43:28+00:00"
+ "time": "2025-07-15T11:36:08+00:00"
},
{
"name": "symfony/service-contracts",
@@ -6568,16 +6848,16 @@
},
{
"name": "symfony/string",
- "version": "v7.3.0",
+ "version": "v7.3.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
- "reference": "f3570b8c61ca887a9e2938e85cb6458515d2b125"
+ "reference": "42f505aff654e62ac7ac2ce21033818297ca89ca"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/string/zipball/f3570b8c61ca887a9e2938e85cb6458515d2b125",
- "reference": "f3570b8c61ca887a9e2938e85cb6458515d2b125",
+ "url": "https://api.github.com/repos/symfony/string/zipball/42f505aff654e62ac7ac2ce21033818297ca89ca",
+ "reference": "42f505aff654e62ac7ac2ce21033818297ca89ca",
"shasum": ""
},
"require": {
@@ -6635,7 +6915,7 @@
"utf8"
],
"support": {
- "source": "https://github.com/symfony/string/tree/v7.3.0"
+ "source": "https://github.com/symfony/string/tree/v7.3.2"
},
"funding": [
{
@@ -6646,25 +6926,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-04-20T20:19:01+00:00"
+ "time": "2025-07-10T08:47:49+00:00"
},
{
"name": "symfony/translation",
- "version": "v7.3.0",
+ "version": "v7.3.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
- "reference": "4aba29076a29a3aa667e09b791e5f868973a8667"
+ "reference": "e0837b4cbcef63c754d89a4806575cada743a38d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/translation/zipball/4aba29076a29a3aa667e09b791e5f868973a8667",
- "reference": "4aba29076a29a3aa667e09b791e5f868973a8667",
+ "url": "https://api.github.com/repos/symfony/translation/zipball/e0837b4cbcef63c754d89a4806575cada743a38d",
+ "reference": "e0837b4cbcef63c754d89a4806575cada743a38d",
"shasum": ""
},
"require": {
@@ -6731,7 +7015,7 @@
"description": "Provides tools to internationalize your application",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/translation/tree/v7.3.0"
+ "source": "https://github.com/symfony/translation/tree/v7.3.3"
},
"funding": [
{
@@ -6742,12 +7026,16 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-05-29T07:19:49+00:00"
+ "time": "2025-08-01T21:02:37+00:00"
},
{
"name": "symfony/translation-contracts",
@@ -6829,16 +7117,16 @@
},
{
"name": "symfony/uid",
- "version": "v7.3.0",
+ "version": "v7.3.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/uid.git",
- "reference": "7beeb2b885cd584cd01e126c5777206ae4c3c6a3"
+ "reference": "a69f69f3159b852651a6bf45a9fdd149520525bb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/uid/zipball/7beeb2b885cd584cd01e126c5777206ae4c3c6a3",
- "reference": "7beeb2b885cd584cd01e126c5777206ae4c3c6a3",
+ "url": "https://api.github.com/repos/symfony/uid/zipball/a69f69f3159b852651a6bf45a9fdd149520525bb",
+ "reference": "a69f69f3159b852651a6bf45a9fdd149520525bb",
"shasum": ""
},
"require": {
@@ -6883,7 +7171,7 @@
"uuid"
],
"support": {
- "source": "https://github.com/symfony/uid/tree/v7.3.0"
+ "source": "https://github.com/symfony/uid/tree/v7.3.1"
},
"funding": [
{
@@ -6899,20 +7187,20 @@
"type": "tidelift"
}
],
- "time": "2025-05-24T14:28:13+00:00"
+ "time": "2025-06-27T19:55:54+00:00"
},
{
"name": "symfony/var-dumper",
- "version": "v7.3.0",
+ "version": "v7.3.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
- "reference": "548f6760c54197b1084e1e5c71f6d9d523f2f78e"
+ "reference": "34d8d4c4b9597347306d1ec8eb4e1319b1e6986f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/var-dumper/zipball/548f6760c54197b1084e1e5c71f6d9d523f2f78e",
- "reference": "548f6760c54197b1084e1e5c71f6d9d523f2f78e",
+ "url": "https://api.github.com/repos/symfony/var-dumper/zipball/34d8d4c4b9597347306d1ec8eb4e1319b1e6986f",
+ "reference": "34d8d4c4b9597347306d1ec8eb4e1319b1e6986f",
"shasum": ""
},
"require": {
@@ -6924,7 +7212,6 @@
"symfony/console": "<6.4"
},
"require-dev": {
- "ext-iconv": "*",
"symfony/console": "^6.4|^7.0",
"symfony/http-kernel": "^6.4|^7.0",
"symfony/process": "^6.4|^7.0",
@@ -6967,7 +7254,7 @@
"dump"
],
"support": {
- "source": "https://github.com/symfony/var-dumper/tree/v7.3.0"
+ "source": "https://github.com/symfony/var-dumper/tree/v7.3.3"
},
"funding": [
{
@@ -6978,25 +7265,29 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-04-27T18:39:23+00:00"
+ "time": "2025-08-13T11:49:31+00:00"
},
{
"name": "symfony/yaml",
- "version": "v7.3.0",
+ "version": "v7.3.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
- "reference": "cea40a48279d58dc3efee8112634cb90141156c2"
+ "reference": "d4f4a66866fe2451f61296924767280ab5732d9d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/yaml/zipball/cea40a48279d58dc3efee8112634cb90141156c2",
- "reference": "cea40a48279d58dc3efee8112634cb90141156c2",
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/d4f4a66866fe2451f61296924767280ab5732d9d",
+ "reference": "d4f4a66866fe2451f61296924767280ab5732d9d",
"shasum": ""
},
"require": {
@@ -7039,7 +7330,7 @@
"description": "Loads and dumps YAML files",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/yaml/tree/v7.3.0"
+ "source": "https://github.com/symfony/yaml/tree/v7.3.3"
},
"funding": [
{
@@ -7050,12 +7341,16 @@
"url": "https://github.com/fabpot",
"type": "github"
},
+ {
+ "url": "https://github.com/nicolas-grekas",
+ "type": "github"
+ },
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
- "time": "2025-04-04T10:10:33+00:00"
+ "time": "2025-08-27T11:34:33+00:00"
},
{
"name": "tijsverkoyen/css-to-inline-styles",
@@ -7523,16 +7818,16 @@
},
{
"name": "zircote/swagger-php",
- "version": "5.1.3",
+ "version": "5.3.2",
"source": {
"type": "git",
"url": "https://github.com/zircote/swagger-php.git",
- "reference": "b8ba6bd99805c0ae09a38d1b26c1c92820509bd0"
+ "reference": "d8fa9dc4c3b2fc8651ae780021bb9719b1e63d40"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/zircote/swagger-php/zipball/b8ba6bd99805c0ae09a38d1b26c1c92820509bd0",
- "reference": "b8ba6bd99805c0ae09a38d1b26c1c92820509bd0",
+ "url": "https://api.github.com/repos/zircote/swagger-php/zipball/d8fa9dc4c3b2fc8651ae780021bb9719b1e63d40",
+ "reference": "d8fa9dc4c3b2fc8651ae780021bb9719b1e63d40",
"shasum": ""
},
"require": {
@@ -7603,9 +7898,9 @@
],
"support": {
"issues": "https://github.com/zircote/swagger-php/issues",
- "source": "https://github.com/zircote/swagger-php/tree/5.1.3"
+ "source": "https://github.com/zircote/swagger-php/tree/5.3.2"
},
- "time": "2025-05-20T03:35:10+00:00"
+ "time": "2025-08-25T21:57:16+00:00"
}
],
"packages-dev": [
@@ -7674,16 +7969,16 @@
},
{
"name": "filp/whoops",
- "version": "2.18.3",
+ "version": "2.18.4",
"source": {
"type": "git",
"url": "https://github.com/filp/whoops.git",
- "reference": "59a123a3d459c5a23055802237cb317f609867e5"
+ "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/filp/whoops/zipball/59a123a3d459c5a23055802237cb317f609867e5",
- "reference": "59a123a3d459c5a23055802237cb317f609867e5",
+ "url": "https://api.github.com/repos/filp/whoops/zipball/d2102955e48b9fd9ab24280a7ad12ed552752c4d",
+ "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d",
"shasum": ""
},
"require": {
@@ -7733,7 +8028,7 @@
],
"support": {
"issues": "https://github.com/filp/whoops/issues",
- "source": "https://github.com/filp/whoops/tree/2.18.3"
+ "source": "https://github.com/filp/whoops/tree/2.18.4"
},
"funding": [
{
@@ -7741,7 +8036,7 @@
"type": "github"
}
],
- "time": "2025-06-16T00:02:10+00:00"
+ "time": "2025-08-08T12:00:00+00:00"
},
{
"name": "hamcrest/hamcrest-php",
@@ -7796,16 +8091,16 @@
},
{
"name": "laravel/breeze",
- "version": "v2.3.7",
+ "version": "v2.3.8",
"source": {
"type": "git",
"url": "https://github.com/laravel/breeze.git",
- "reference": "73149b5d84be3881b2fdda94b2ad289e7905c1a4"
+ "reference": "1a29c5792818bd4cddf70b5f743a227e02fbcfcd"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/breeze/zipball/73149b5d84be3881b2fdda94b2ad289e7905c1a4",
- "reference": "73149b5d84be3881b2fdda94b2ad289e7905c1a4",
+ "url": "https://api.github.com/repos/laravel/breeze/zipball/1a29c5792818bd4cddf70b5f743a227e02fbcfcd",
+ "reference": "1a29c5792818bd4cddf70b5f743a227e02fbcfcd",
"shasum": ""
},
"require": {
@@ -7853,7 +8148,7 @@
"issues": "https://github.com/laravel/breeze/issues",
"source": "https://github.com/laravel/breeze"
},
- "time": "2025-06-17T13:07:20+00:00"
+ "time": "2025-07-18T18:49:59+00:00"
},
{
"name": "laravel/pail",
@@ -7936,16 +8231,16 @@
},
{
"name": "laravel/pint",
- "version": "v1.22.1",
+ "version": "v1.24.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/pint.git",
- "reference": "941d1927c5ca420c22710e98420287169c7bcaf7"
+ "reference": "0345f3b05f136801af8c339f9d16ef29e6b4df8a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/pint/zipball/941d1927c5ca420c22710e98420287169c7bcaf7",
- "reference": "941d1927c5ca420c22710e98420287169c7bcaf7",
+ "url": "https://api.github.com/repos/laravel/pint/zipball/0345f3b05f136801af8c339f9d16ef29e6b4df8a",
+ "reference": "0345f3b05f136801af8c339f9d16ef29e6b4df8a",
"shasum": ""
},
"require": {
@@ -7956,10 +8251,10 @@
"php": "^8.2.0"
},
"require-dev": {
- "friendsofphp/php-cs-fixer": "^3.75.0",
- "illuminate/view": "^11.44.7",
- "larastan/larastan": "^3.4.0",
- "laravel-zero/framework": "^11.36.1",
+ "friendsofphp/php-cs-fixer": "^3.82.2",
+ "illuminate/view": "^11.45.1",
+ "larastan/larastan": "^3.5.0",
+ "laravel-zero/framework": "^11.45.0",
"mockery/mockery": "^1.6.12",
"nunomaduro/termwind": "^2.3.1",
"pestphp/pest": "^2.36.0"
@@ -7969,6 +8264,9 @@
],
"type": "project",
"autoload": {
+ "files": [
+ "overrides/Runner/Parallel/ProcessFactory.php"
+ ],
"psr-4": {
"App\\": "app/",
"Database\\Seeders\\": "database/seeders/",
@@ -7998,20 +8296,20 @@
"issues": "https://github.com/laravel/pint/issues",
"source": "https://github.com/laravel/pint"
},
- "time": "2025-05-08T08:38:12+00:00"
+ "time": "2025-07-10T18:09:32+00:00"
},
{
"name": "laravel/sail",
- "version": "v1.43.1",
+ "version": "v1.45.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/sail.git",
- "reference": "3e7d899232a8c5e3ea4fc6dee7525ad583887e72"
+ "reference": "019a2933ff4a9199f098d4259713f9bc266a874e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/sail/zipball/3e7d899232a8c5e3ea4fc6dee7525ad583887e72",
- "reference": "3e7d899232a8c5e3ea4fc6dee7525ad583887e72",
+ "url": "https://api.github.com/repos/laravel/sail/zipball/019a2933ff4a9199f098d4259713f9bc266a874e",
+ "reference": "019a2933ff4a9199f098d4259713f9bc266a874e",
"shasum": ""
},
"require": {
@@ -8061,7 +8359,7 @@
"issues": "https://github.com/laravel/sail/issues",
"source": "https://github.com/laravel/sail"
},
- "time": "2025-05-19T13:19:21+00:00"
+ "time": "2025-08-25T19:28:31+00:00"
},
{
"name": "mockery/mockery",
@@ -8148,16 +8446,16 @@
},
{
"name": "myclabs/deep-copy",
- "version": "1.13.1",
+ "version": "1.13.4",
"source": {
"type": "git",
"url": "https://github.com/myclabs/DeepCopy.git",
- "reference": "1720ddd719e16cf0db4eb1c6eca108031636d46c"
+ "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/1720ddd719e16cf0db4eb1c6eca108031636d46c",
- "reference": "1720ddd719e16cf0db4eb1c6eca108031636d46c",
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a",
+ "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a",
"shasum": ""
},
"require": {
@@ -8196,7 +8494,7 @@
],
"support": {
"issues": "https://github.com/myclabs/DeepCopy/issues",
- "source": "https://github.com/myclabs/DeepCopy/tree/1.13.1"
+ "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4"
},
"funding": [
{
@@ -8204,20 +8502,20 @@
"type": "tidelift"
}
],
- "time": "2025-04-29T12:36:36+00:00"
+ "time": "2025-08-01T08:46:24+00:00"
},
{
"name": "nunomaduro/collision",
- "version": "v8.8.1",
+ "version": "v8.8.2",
"source": {
"type": "git",
"url": "https://github.com/nunomaduro/collision.git",
- "reference": "44ccb82e3e21efb5446748d2a3c81a030ac22bd5"
+ "reference": "60207965f9b7b7a4ce15a0f75d57f9dadb105bdb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nunomaduro/collision/zipball/44ccb82e3e21efb5446748d2a3c81a030ac22bd5",
- "reference": "44ccb82e3e21efb5446748d2a3c81a030ac22bd5",
+ "url": "https://api.github.com/repos/nunomaduro/collision/zipball/60207965f9b7b7a4ce15a0f75d57f9dadb105bdb",
+ "reference": "60207965f9b7b7a4ce15a0f75d57f9dadb105bdb",
"shasum": ""
},
"require": {
@@ -8303,7 +8601,7 @@
"type": "patreon"
}
],
- "time": "2025-06-11T01:04:21+00:00"
+ "time": "2025-06-25T02:12:12+00:00"
},
{
"name": "phar-io/manifest",
@@ -8425,16 +8723,16 @@
},
{
"name": "phpunit/php-code-coverage",
- "version": "11.0.10",
+ "version": "11.0.11",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
- "reference": "1a800a7446add2d79cc6b3c01c45381810367d76"
+ "reference": "4f7722aa9a7b76aa775e2d9d4e95d1ea16eeeef4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/1a800a7446add2d79cc6b3c01c45381810367d76",
- "reference": "1a800a7446add2d79cc6b3c01c45381810367d76",
+ "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/4f7722aa9a7b76aa775e2d9d4e95d1ea16eeeef4",
+ "reference": "4f7722aa9a7b76aa775e2d9d4e95d1ea16eeeef4",
"shasum": ""
},
"require": {
@@ -8491,7 +8789,7 @@
"support": {
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
"security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy",
- "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/show"
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.11"
},
"funding": [
{
@@ -8511,7 +8809,7 @@
"type": "tidelift"
}
],
- "time": "2025-06-18T08:56:18+00:00"
+ "time": "2025-08-27T14:37:49+00:00"
},
{
"name": "phpunit/php-file-iterator",
@@ -8760,16 +9058,16 @@
},
{
"name": "phpunit/phpunit",
- "version": "11.5.23",
+ "version": "11.5.35",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "86ebcd8a3dbcd1857d88505109b2a2b376501cde"
+ "reference": "d341ee94ee5007b286fc7907b383aae6b5b3cc91"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/86ebcd8a3dbcd1857d88505109b2a2b376501cde",
- "reference": "86ebcd8a3dbcd1857d88505109b2a2b376501cde",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/d341ee94ee5007b286fc7907b383aae6b5b3cc91",
+ "reference": "d341ee94ee5007b286fc7907b383aae6b5b3cc91",
"shasum": ""
},
"require": {
@@ -8779,24 +9077,24 @@
"ext-mbstring": "*",
"ext-xml": "*",
"ext-xmlwriter": "*",
- "myclabs/deep-copy": "^1.13.1",
+ "myclabs/deep-copy": "^1.13.4",
"phar-io/manifest": "^2.0.4",
"phar-io/version": "^3.2.1",
"php": ">=8.2",
- "phpunit/php-code-coverage": "^11.0.9",
+ "phpunit/php-code-coverage": "^11.0.11",
"phpunit/php-file-iterator": "^5.1.0",
"phpunit/php-invoker": "^5.0.1",
"phpunit/php-text-template": "^4.0.1",
"phpunit/php-timer": "^7.0.1",
"sebastian/cli-parser": "^3.0.2",
"sebastian/code-unit": "^3.0.3",
- "sebastian/comparator": "^6.3.1",
+ "sebastian/comparator": "^6.3.2",
"sebastian/diff": "^6.0.2",
"sebastian/environment": "^7.2.1",
"sebastian/exporter": "^6.3.0",
"sebastian/global-state": "^7.0.2",
"sebastian/object-enumerator": "^6.0.1",
- "sebastian/type": "^5.1.2",
+ "sebastian/type": "^5.1.3",
"sebastian/version": "^5.0.2",
"staabm/side-effects-detector": "^1.0.5"
},
@@ -8841,7 +9139,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.5.23"
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.35"
},
"funding": [
{
@@ -8865,7 +9163,7 @@
"type": "tidelift"
}
],
- "time": "2025-06-13T05:47:49+00:00"
+ "time": "2025-08-28T05:13:54+00:00"
},
{
"name": "sebastian/cli-parser",
@@ -9039,16 +9337,16 @@
},
{
"name": "sebastian/comparator",
- "version": "6.3.1",
+ "version": "6.3.2",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/comparator.git",
- "reference": "24b8fbc2c8e201bb1308e7b05148d6ab393b6959"
+ "reference": "85c77556683e6eee4323e4c5468641ca0237e2e8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/24b8fbc2c8e201bb1308e7b05148d6ab393b6959",
- "reference": "24b8fbc2c8e201bb1308e7b05148d6ab393b6959",
+ "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/85c77556683e6eee4323e4c5468641ca0237e2e8",
+ "reference": "85c77556683e6eee4323e4c5468641ca0237e2e8",
"shasum": ""
},
"require": {
@@ -9107,15 +9405,27 @@
"support": {
"issues": "https://github.com/sebastianbergmann/comparator/issues",
"security": "https://github.com/sebastianbergmann/comparator/security/policy",
- "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.1"
+ "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.2"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/comparator",
+ "type": "tidelift"
}
],
- "time": "2025-03-07T06:57:01+00:00"
+ "time": "2025-08-10T08:07:46+00:00"
},
{
"name": "sebastian/complexity",
@@ -9632,23 +9942,23 @@
},
{
"name": "sebastian/recursion-context",
- "version": "6.0.2",
+ "version": "6.0.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/recursion-context.git",
- "reference": "694d156164372abbd149a4b85ccda2e4670c0e16"
+ "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/694d156164372abbd149a4b85ccda2e4670c0e16",
- "reference": "694d156164372abbd149a4b85ccda2e4670c0e16",
+ "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/f6458abbf32a6c8174f8f26261475dc133b3d9dc",
+ "reference": "f6458abbf32a6c8174f8f26261475dc133b3d9dc",
"shasum": ""
},
"require": {
"php": ">=8.2"
},
"require-dev": {
- "phpunit/phpunit": "^11.0"
+ "phpunit/phpunit": "^11.3"
},
"type": "library",
"extra": {
@@ -9684,28 +9994,40 @@
"support": {
"issues": "https://github.com/sebastianbergmann/recursion-context/issues",
"security": "https://github.com/sebastianbergmann/recursion-context/security/policy",
- "source": "https://github.com/sebastianbergmann/recursion-context/tree/6.0.2"
+ "source": "https://github.com/sebastianbergmann/recursion-context/tree/6.0.3"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context",
+ "type": "tidelift"
}
],
- "time": "2024-07-03T05:10:34+00:00"
+ "time": "2025-08-13T04:42:22+00:00"
},
{
"name": "sebastian/type",
- "version": "5.1.2",
+ "version": "5.1.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/type.git",
- "reference": "a8a7e30534b0eb0c77cd9d07e82de1a114389f5e"
+ "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/a8a7e30534b0eb0c77cd9d07e82de1a114389f5e",
- "reference": "a8a7e30534b0eb0c77cd9d07e82de1a114389f5e",
+ "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/f77d2d4e78738c98d9a68d2596fe5e8fa380f449",
+ "reference": "f77d2d4e78738c98d9a68d2596fe5e8fa380f449",
"shasum": ""
},
"require": {
@@ -9741,15 +10063,27 @@
"support": {
"issues": "https://github.com/sebastianbergmann/type/issues",
"security": "https://github.com/sebastianbergmann/type/security/policy",
- "source": "https://github.com/sebastianbergmann/type/tree/5.1.2"
+ "source": "https://github.com/sebastianbergmann/type/tree/5.1.3"
},
"funding": [
{
"url": "https://github.com/sebastianbergmann",
"type": "github"
+ },
+ {
+ "url": "https://liberapay.com/sebastianbergmann",
+ "type": "liberapay"
+ },
+ {
+ "url": "https://thanks.dev/u/gh/sebastianbergmann",
+ "type": "thanks_dev"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/sebastian/type",
+ "type": "tidelift"
}
],
- "time": "2025-03-18T13:35:50+00:00"
+ "time": "2025-08-09T06:55:48+00:00"
},
{
"name": "sebastian/version",
diff --git a/config/filesystems.php b/config/filesystems.php
index 3d671bd..5ec803d 100644
--- a/config/filesystems.php
+++ b/config/filesystems.php
@@ -60,6 +60,18 @@ return [
'report' => false,
],
+ 'ftp_test' => [
+ 'driver' => 'ftp',
+ 'host' => env('FTP_HOST', '192.168.11.16'),
+ 'username' => env('FTP_USERNAME', 'your_username'),
+ 'password' => env('FTP_PASSWORD', 'your_password'),
+ 'port' => 21,
+ 'root' => '/', // 或指定資料夾
+ 'passive' => true,
+ 'ssl' => false,
+ 'timeout' => 30,
+ ],
+
],
/*
diff --git a/config/wireui.php b/config/wireui.php
index 16637a6..cbc52dd 100644
--- a/config/wireui.php
+++ b/config/wireui.php
@@ -18,7 +18,7 @@ return [
|
*/
- 'prefix' => 'wireui:',
+ 'prefix' => null,
/*
|--------------------------------------------------------------------------
diff --git a/database/migrations/0001_01_01_000000_create_users_table.php b/database/migrations/0001_01_01_000000_create_users_table.php
index b74937d..c0e3f58 100644
--- a/database/migrations/0001_01_01_000000_create_users_table.php
+++ b/database/migrations/0001_01_01_000000_create_users_table.php
@@ -20,18 +20,11 @@ return new class extends Migration
$table->enum('gender', ['unset','male', 'female', 'other'])->default('unset'); // 性別
$table->tinyInteger('status')->default(0); // 啟動
$table->timestamp('email_verified_at')->nullable();
- $table->string('password');
$table->rememberToken();
$table->text('api_plain_token')->nullable();
$table->timestamps();
});
- Schema::create('password_reset_tokens', function (Blueprint $table) {
- $table->string('email')->primary();
- $table->string('token');
- $table->timestamp('created_at')->nullable();
- });
-
Schema::create('sessions', function (Blueprint $table) {
$table->string('id')->primary();
$table->foreignId('user_id')->nullable()->index();
@@ -48,7 +41,6 @@ return new class extends Migration
public function down(): void
{
Schema::dropIfExists('users');
- Schema::dropIfExists('password_reset_tokens');
Schema::dropIfExists('sessions');
}
};
diff --git a/database/migrations/2025_04_20_095641_create_personal_access_tokens_table.php b/database/migrations/2025_04_20_095641_create_personal_access_tokens_table.php
deleted file mode 100644
index e828ad8..0000000
--- a/database/migrations/2025_04_20_095641_create_personal_access_tokens_table.php
+++ /dev/null
@@ -1,33 +0,0 @@
-id();
- $table->morphs('tokenable');
- $table->string('name');
- $table->string('token', 64)->unique();
- $table->text('abilities')->nullable();
- $table->timestamp('last_used_at')->nullable();
- $table->timestamp('expires_at')->nullable();
- $table->timestamps();
- });
- }
-
- /**
- * Reverse the migrations.
- */
- public function down(): void
- {
- Schema::dropIfExists('personal_access_tokens');
- }
-};
diff --git a/database/migrations/2025_05_23_041606_create_song_categories_table.php b/database/migrations/2025_05_23_041606_create_song_categories_table.php
new file mode 100644
index 0000000..d8558aa
--- /dev/null
+++ b/database/migrations/2025_05_23_041606_create_song_categories_table.php
@@ -0,0 +1,29 @@
+id();
+ $table->string('code')->unique();
+ $table->string('name')->unique();
+ $table->timestamps();
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ */
+ public function down(): void
+ {
+ Schema::dropIfExists('song_categories');
+ }
+};
diff --git a/database/migrations/2025_05_23_044428_create_song_library_cache_song_category_table.php b/database/migrations/2025_05_23_044428_create_song_library_cache_song_category_table.php
new file mode 100644
index 0000000..c370047
--- /dev/null
+++ b/database/migrations/2025_05_23_044428_create_song_library_cache_song_category_table.php
@@ -0,0 +1,28 @@
+unsignedBigInteger('song_library_cache_id');
+ $table->unsignedBigInteger('song_category_id');
+ $table->primary(['song_library_cache_id', 'song_category_id']);
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ */
+ public function down(): void
+ {
+ Schema::dropIfExists('song_library_cache_song_category');
+ }
+};
diff --git a/database/migrations/2025_05_23_052656_create_artist_song_library_cache_table.php b/database/migrations/2025_05_23_052656_create_artist_song_library_cache_table.php
new file mode 100644
index 0000000..2cd61be
--- /dev/null
+++ b/database/migrations/2025_05_23_052656_create_artist_song_library_cache_table.php
@@ -0,0 +1,28 @@
+unsignedBigInteger('song_library_cache_song_id');
+ $table->unsignedBigInteger('artist_id');
+ $table->primary(['song_library_cache_song_id', 'artist_id']);
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ */
+ public function down(): void
+ {
+ Schema::dropIfExists('artist_song_library_cache');
+ }
+};
diff --git a/database/seeders/CreateAdminUserSeeder.php b/database/seeders/CreateAdminUserSeeder.php
new file mode 100644
index 0000000..2eba916
--- /dev/null
+++ b/database/seeders/CreateAdminUserSeeder.php
@@ -0,0 +1,34 @@
+ 'admin'
+ ,'email' => 'admin@gmail.com'
+ ,'phone' => '0900000000'
+ ,'api_plain_token' => $token
+ ]);
+
+ //$forwarder = new MachineStatusForwarder(
+ // externalUrl: config('services.backend.url'),
+ // endpoint: '/api/sync',
+ // validated: [],
+ // $token
+ //);
+
+ //$forwarder->forward();
+ }
+}
diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php
index 642bfb1..2d6225d 100644
--- a/database/seeders/DatabaseSeeder.php
+++ b/database/seeders/DatabaseSeeder.php
@@ -3,7 +3,6 @@
namespace Database\Seeders;
use Illuminate\Database\Seeder;
-use App\Jobs\TransferSqliteTableJob;
class DatabaseSeeder extends Seeder
{
@@ -12,8 +11,8 @@ class DatabaseSeeder extends Seeder
*/
public function run(): void
{
- (new TransferSqliteTableJob('database/User.data', false))->handle();
$this->call([
+ CreateAdminUserSeeder::class,
BroadcastTemplateSeeder::class,
]);
}
diff --git a/package-lock.json b/package-lock.json
index 9d1111c..88c94a6 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,5 +1,5 @@
{
- "name": "html",
+ "name": "KTVCentral",
"lockfileVersion": 3,
"requires": true,
"packages": {
diff --git a/resources/css/app.css b/resources/css/app.css
index aef7fd4..91cef48 100644
--- a/resources/css/app.css
+++ b/resources/css/app.css
@@ -6,3 +6,18 @@
@tailwind components;
@tailwind utilities;
+body { font-family: 'Roboto', sans-serif; margin: 0; padding: 0; background-color: #f4f4f4; }
+.container { text-align: center; margin: 20px; }
+.header { background: #D32F2F; padding: 10px 0; color: white; font-size: 24px; font-weight: 500; text-align: center; }
+.banner { width: 100%; max-width: 600px; margin: 0 auto 20px; }
+.banner img { width: 100%; height: auto; }
+.content { display: grid; grid-template-columns: repeat(2, 1fr); gap: 10px; padding: 10px 20px; max-width: 600px; margin: 0 auto; justify-content: center; }
+@media (max-width: 600px) { .content { grid-template-columns: repeat(2, 1fr); gap: 10px; } }
+@media (max-width: 400px) { .content { grid-template-columns: repeat(2, 1fr); gap: 8px; } .card { width: auto; max-width: 160px; } }
+.card { width: 100%; max-width: 180px; margin: 0 auto; display: flex; justify-content: center; align-items: center;
+ background: linear-gradient(135deg, #FF4081, #FF4081); color: white; border-radius: 10px; text-align: center;
+ box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); overflow: hidden; cursor: pointer; }
+.card:hover { transform: scale(1.05); }
+.card img { width: 100%; height: auto; object-fit: contain; }
+.section { display: none; }
+.section.active { display: block; }
diff --git a/resources/lang/zh-tw/enums.php b/resources/lang/zh-tw/enums.php
index 9266a12..a0b8c18 100644
--- a/resources/lang/zh-tw/enums.php
+++ b/resources/lang/zh-tw/enums.php
@@ -15,6 +15,15 @@ return [
'user.status.Active' => '正常',
'user.status.Suspended' => '停權',
'user.status.Deleting' => '刪除中',
+ 'LanguageType.Mandarin' => '國語',
+ 'LanguageType.Taiwanese' => '台語',
+ 'LanguageType.English' => '英語',
+ 'LanguageType.Japanese' => '日語',
+ 'LanguageType.Cantonese' => '粵語',
+ 'LanguageType.Korean' => '韓語',
+ 'LanguageType.Vietnamese' => '越語',
+ 'LanguageType.Hakka' => '客語',
+ 'LanguageType.Other' => '其他',
'room.status.Active' => '啟用中',
'room.status.Closed' => '待機',
diff --git a/resources/views/clicked-song.blade.php b/resources/views/clicked-song.blade.php
new file mode 100644
index 0000000..ca8899e
--- /dev/null
+++ b/resources/views/clicked-song.blade.php
@@ -0,0 +1,10 @@
+
+
+@else
+
Please copy this token now. You won't be able to see it again.
- Laravel has wonderful documentation covering every aspect of the framework. Whether you are a newcomer or have prior experience with Laravel, we recommend reading our documentation from beginning to end. -
-- Laracasts offers thousands of video tutorials on Laravel, PHP, and JavaScript development. Check them out, see for yourself, and massively level up your development skills in the process. -
-- Laravel News is a community driven portal and newsletter aggregating all of the latest and most important news in the Laravel ecosystem, including new package releases and tutorials. -
-