diff --git a/.env.example b/.env.example index bb2f5ba83..775d5bb5c 100644 --- a/.env.example +++ b/.env.example @@ -66,7 +66,7 @@ APPEAR_DISABLE_ADMIN_APPEARANCE_CSS_SETTINGS=false ################## # mail driver, usualy smtp -MAIL_DRIVER=smtp +MAIL_DRIVER=log # mail server host MAIL_HOST= # mail server port diff --git a/Makefile b/Makefile index fae6ecd57..1e769b042 100755 --- a/Makefile +++ b/Makefile @@ -178,6 +178,14 @@ generate-testuser: generate-event: docker exec eventula_manager_app php artisan db:seed --class=EventsSeeder +# Generate test cs2 matchmaking match with a demo - This will generate a sample cs2 matchmaking match with a demo (needs the generate-games command before running)! example: make generate-cs2mm playeroneid=useridhere playertwoid=useridhere democount=democounthere status=statushere +generate-cs2mm: + docker exec -e playeroneid=$(playeroneid) -e playertwoid=$(playertwoid) -e democount=$(democount) -e status=$(status) eventula_manager_app php artisan db:seed --class=TestCs2MatchMakingSeeder + +# Generate demo(s) into existing challonge matches (needs the generate-games command before running)! example: make generate-demos-tournament democount=democounthere challongematchid=challongematchidhere +generate-demos-tournament: + docker exec -e democount=$(democount) -e challongematchid=$(challongematchid) eventula_manager_app php artisan db:seed --class=TestTournamentDemoSeeder + # Generate event - This will generate a sample event! generate-games: docker exec eventula_manager_app php artisan db:seed --class=GamesTableSeeder diff --git a/docs/source/admin/games/basic.rst b/docs/source/admin/games/basic.rst index 8c3817a3c..45740ae17 100644 --- a/docs/source/admin/games/basic.rst +++ b/docs/source/admin/games/basic.rst @@ -2,13 +2,58 @@ Games ================================================== -Basic ------ +Introduction +--------------- You can create games which will be available in your event, your tournaments and your matchmaking. You are then able to add gameservers for each game and for a few games you can show serverstats / remote control the servers from eventula or even automate your matchmaking or tournament. -Add Game -......... + .. note:: + If you are planning to use the full featureset for the supported games, we recommend to use the :ref:`admin/games/basic:Add Game from Template` feature to add the game. + +Add Game from Template +......................... + +Lets create a game from a template, which depending on the game comes with preconfigured settings for it. + +Go to your Admin Panel to the ``Games`` Section. + +Over the right you can find the ``Add Game from Template`` Button. Kick it. + +.. image:: ../../images/games_add_template_01.png + :scale: 50 % + :alt: eventula game addition from template first step + :align: center + + +You will now get a list of all supported games with their :ref:`admin/games/basic:Game Commandhandler` and :ref:`admin/games/basic:Game Match Api handler` (and a few parameters), where you can click ``Deploy`` on the one you want to deploy: + +.. image:: ../../images/games_add_template_02.png + :scale: 50 % + :alt: eventula game addition from template second step + :align: center + + +You will get a success message / error message on the bottom of the page. + + .. note:: + The Game Templates are designed to not overwrite your already existing games. + If you removed or renamed some of the :ref:`admin/games/basic:GameCommands` or :ref:`admin/games/basic:GameCommandParameters` inside the game, they will be added to your existing game, if deployed again. + If you want to deploy an additional copy of the game, change the name of your existing game to something else than in the template and deploy it again. + + +Your Game should now appear in the ``Games`` Section of your admin menu, where you can edit the settings and :ref:`add gameservers` to it which you have to do, to fully use the available features. + + .. note:: + By default it is intended that the games public visibillity is disabled, but this is currently not working (https://github.com/Lan2Play/eventula-manager/issues/620) + +.. image:: ../../images/games_add_template_03.png + :scale: 50 % + :alt: eventula game addition from template second step + :align: center + + +Add Game Manually +.................. Lets create a game! go to your Admin Panel to the ``Games`` Section and you can add your game in the ``Add Game`` area. To use the basic features like manual tournaments you have to fill in a name and you can add a description, a version if you want to. Its recommended to add a ``Thumbnail Image`` and a ``Header Image``, they will be shown on the tournaments / matches. @@ -16,39 +61,32 @@ Its recommended to add a ``Thumbnail Image`` and a ``Header Image``, they will b .. image:: ../../images/games_add_01.png :scale: 50 % - :alt: eventula event deletion + :alt: eventula game addition first step :align: center -If you want to enable the possibilities to show the status of the later created gameservers on either the events page or the public page or you want to remotly control the gamservers via eventula you have to select a ``Game Commandhandler`` +If you want to enable the possibilities to show the status of the later created gameservers on either the events page or the public page or you want to remotly control the gamservers via eventula you have to select a :ref:`admin/games/basic:Game Commandhandler` -The currently available Commandhandlers are: - -- SourceQuery GoldSource (supported games: full support for all HL1/HL2 games and mods ) -- SourceQuery Source (supported games: CS:GO, Minecraft only commands | no status support) -- Maniaplanet XRPC (supported games: Trackmania nations, and all new maniaplanet games ) +You can find the available ones :ref:`here` .. image:: ../../images/games_add_02.png :scale: 50 % - :alt: eventula event deletion + :alt: eventula game addition second step :align: center -If you want to enable the possibilities to manage fully automated tournaments or fully automated matchmaking you have to set ``Game Match Api handler`` as well as the corresponding ``Game Commandhandler``. +If you want to enable the possibilities to manage fully automated tournaments or fully automated matchmaking you have to set :ref:`admin/games/basic:Game Match Api handler` as well as the corresponding :ref:`admin/games/basic:Game Commandhandler`. -The currently available APIhandlers are: - -- Get5 (supported games: CS:GO with the `Get5 Plugin from Splewis `_ and the `get5_eventula_apistats plugin `_) +You can find the available Game Match Api handlers ones :ref:`here` .. image:: ../../images/games_add_03.png :scale: 50 % - :alt: eventula event deletion + :alt: eventula game addition third step :align: center -For an explanation of the fields ``Connect Game URL``, ``Connect Game Command`` and ``Connect Stream URL`` take a look on the ``Frontend Gameserver Features`` section of the documentation. - -For a fully working example of the automated Tournament / Matchmaking take a look on the ``Tutorials`` section of the documentation. - +For an explanation of the fields ``Connect Game URL``, ``Connect Game Command`` and ``Connect Stream URL`` take a look on the :ref:`admin/games/basic:Frontend Gameserver Features` section of the documentation. + .. note:: + For fully configured examples of the automated Tournament / Matchmaking take a look on the :ref:`admin/games/basic:Add Game from Template` section. Press ``Submit`` to add the Category. @@ -62,18 +100,18 @@ To edit a game, go to your Admin Panel to the ``Games`` Section and klick on ``E .. image:: ../../images/games_edit_01.png :scale: 50 % - :alt: eventula event deletion + :alt: eventula game editing first step :align: center You will then be redirected to the detailed / editing /upload view of the game. -You can edit the games parameters in the ``Edit Game`` Section. Additionally to the parameters you had available in the Add Game step, you can set the public visibillity of a game (Currently not working!) and a ``Match start command`` that is needed for the automatic tournament / matchmaking (see the ``Add Game`` section of the documentation or for a fully working example of the automated Tournament / Matchmaking take a look on the ``Tutorials`` section of the documentation.) +You can edit the games parameters in the ``Edit Game`` Section. Additionally to the parameters you had available in the Add Game step, you can set the public visibillity of a game (Currently not working!) and a ``Match start command`` that is needed for the automatic tournament / matchmaking (see the :ref:`admin/games/basic:Add Game Manually` section of the documentation or for a fully working example of the automated Tournament / Matchmaking take a look on the :ref:`admin/games/basic:Add Game from Template` section of the documentation.) -For an explanation of the fields ``Connect Game URL``, ``Connect Game Command`` and ``Connect Stream URL`` take a look on the ``Frontend Gameserver Features`` section of the documentation. +For an explanation of the fields ``Connect Game URL``, ``Connect Game Command`` and ``Connect Stream URL`` take a look on the :ref:`admin/games/basic:Frontend Gameserver Features` section of the documentation. The changes can be saved with a click on the ``Submit`` Button in the ``Edit Game`` Section. -In the bottom you can now add Game Servers to the game. Please look into the following ``Gameservers`` section of the documentation. +In the bottom you can now add Game Servers to the game. Please look into the following :ref:`admin/games/basic:Gameservers` section of the documentation. Gameservers ----------- @@ -86,7 +124,7 @@ In the bottom you can now add Game Servers to the game in the ``Add Game Server` .. image:: ../../images/games_gameserver_add_01.png :scale: 50 % - :alt: eventula event deletion + :alt: eventula gameserver addition first step :align: center - You have to specify at least the ``Name``, the ``Adress`` (or ip), the ``Type`` and the ``Game Port``. @@ -95,7 +133,7 @@ In the bottom you can now add Game Servers to the game in the ``Add Game Server` - If you select the ``Type`` ``Match`` and ``Server is Enabled`` the Server will be used for Matchmaking and tournaments if you enable it on the game itself. - If your Server needs a connection password, you can specify it in ``Game Password``. - Some games support streaming (like CS:GO). To enable your users to stream the game, you can enter the streaming port (eg. Sourcetv) in the ``Stream Port`` field. -- If you use a game with a supported Commandhandlers (See the ``Add Game`` section in the documentation), you should add the ``RCON Port`` (mostly same as the game port) and the ``RCON Password`` to enable status checking or (automatic) remote controlling of the Gameserver. +- If you use a game with a supported Commandhandlers (See the :ref:`admin/games/basic:Add Game Manually` section in the documentation), you should add the ``RCON Port`` (mostly same as the game port) and the ``RCON Password`` to enable status checking or (automatic) remote controlling of the Gameserver. Edit Gameserver .................. @@ -108,14 +146,14 @@ The basic view of a Gameserver with no Commandhandler selected looks like this o .. image:: ../../images/games_gameserver_01.png :scale: 50 % - :alt: eventula event deletion + :alt: eventula gameserver view in the event live page :align: center and like this on the Homepage: .. image:: ../../images/games_gameserver_02.png :scale: 50 % - :alt: eventula event deletion + :alt: eventula gameserver view in the event Homepage :align: center @@ -148,31 +186,31 @@ If you set everything, your Server looks like this in the event live view: .. image:: ../../images/games_gameserver_03.png :scale: 50 % - :alt: eventula event deletion + :alt: eventula gameserver view in the event live page :align: center And like this on your Homepage: .. image:: ../../images/games_gameserver_04.png :scale: 50 % - :alt: eventula event deletion + :alt: eventula gameserver view in the homepage :align: center if you set the ``Commandhandler`` and the ``RCON password`` and the ``RCON Port`` on your game the status of your Server is shown in both views and in the Admin Area: .. image:: ../../images/games_gameserver_06.png :scale: 50 % - :alt: eventula event deletion + :alt: eventula gameserver statistics :align: center .. image:: ../../images/games_gameserver_05.png :scale: 50 % - :alt: eventula event deletion + :alt: eventula gameserver statistics :align: center .. image:: ../../images/games_gameserver_07.png :scale: 50 % - :alt: eventula event deletion + :alt: eventula gameserver statistics :align: center @@ -184,3 +222,25 @@ GameCommands GameCommandParameters --------------------- + + +Details +--------------------- + +Game Commandhandler +.................................... + +The currently available Commandhandlers are: + +- SourceQuery GoldSource (supported games: full support for all HL1/HL2 games and mods ) +- SourceQuery Source (supported games: CS:GO, Minecraft only commands | no status support) +- Maniaplanet XRPC (supported games: Trackmania nations, and all new maniaplanet games ) + + +Game Match Api handler +.................................... + +The currently available APIhandlers are: + +- Get5 (supported games: CS:GO with the `Get5 Plugin from Splewis `_ and the `get5_eventula_apistats plugin `_) +- PugSharp (supported games: CS2 with the `PugSharp Plugin `_) \ No newline at end of file diff --git a/docs/source/images/games_add_template_01.png b/docs/source/images/games_add_template_01.png new file mode 100644 index 000000000..aedb73c41 Binary files /dev/null and b/docs/source/images/games_add_template_01.png differ diff --git a/docs/source/images/games_add_template_02.png b/docs/source/images/games_add_template_02.png new file mode 100644 index 000000000..4efa8a688 Binary files /dev/null and b/docs/source/images/games_add_template_02.png differ diff --git a/docs/source/images/games_add_template_03.png b/docs/source/images/games_add_template_03.png new file mode 100644 index 000000000..815ac4590 Binary files /dev/null and b/docs/source/images/games_add_template_03.png differ diff --git a/resources/ci/.drone.yml b/resources/ci/.drone.yml index 52e224a84..a580d2394 100755 --- a/resources/ci/.drone.yml +++ b/resources/ci/.drone.yml @@ -19,7 +19,7 @@ steps: - composer install --ignore-platform-reqs --no-scripts - name: build-npm - image: node:20.9 + image: node:20.10 commands: - cd src/ - npm install && npm run production @@ -109,7 +109,7 @@ steps: - push - name: build-npm - image: node:20.9 + image: node:20.10 commands: - cd src/ - npm install && npm run production @@ -288,7 +288,7 @@ steps: - tag - name: build-npm - image: node:20.9 + image: node:20.10 commands: - cd src/ - npm install && npm run production diff --git a/src/app/EventTournament.php b/src/app/EventTournament.php index 40a05775b..a43080b2d 100644 --- a/src/app/EventTournament.php +++ b/src/app/EventTournament.php @@ -253,6 +253,14 @@ public static function boot() } } + foreach ($matches as $key => $match) { + $replays = MatchReplay::where('challonge_match_id', $match->id)->get(); + foreach ($replays as $matchReplay) { + $matchReplay->deleteReplayFile($model->game); + $matchReplay->delete(); + } + } + $response = retry(5, function () use ($challonge, $model) { return $challonge->fetchTournament($model->challonge_tournament_id); }, 100); @@ -514,7 +522,7 @@ public function getMatch(int $challongeMatchId, $obj = false) * @return Array|Object */ public function getMatchReplays(int $challongeMatchId, $obj = false) - { + { return MatchReplay::where('challonge_match_id', $challongeMatchId)->get(); } @@ -644,8 +652,7 @@ public function getNextMatches($limit = 0, $obj = false) */ public function updateMatch($matchId, $player1Score, $player2Score, $playerWinnerVerify = null) { - if ($player1Score == 0 && $player2Score == 0) - { + if ($player1Score == 0 && $player2Score == 0) { return false; } @@ -685,16 +692,12 @@ public function updateMatch($matchId, $player1Score, $player2Score, $playerWinne $this->getStandings(); # queue next matches - if (isset($this->game) && $this->match_autostart) - { - + if (isset($this->game) && $this->match_autostart) { $nextmatches = $this->getNextMatches(); - - foreach ($nextmatches as $nextmatch) - { + foreach ($nextmatches as $nextmatch) { $matchserver = EventTournamentMatchServer::getTournamentMatchServer($nextmatch->id); if (!isset($matchserver)) { - GameServerAsign::dispatch(null,$this,$nextmatch->id)->onQueue('gameserver'); + GameServerAsign::dispatch(null, $this, $nextmatch->id)->onQueue('gameserver'); } } } diff --git a/src/app/Http/Controllers/Admin/MatchMakingController.php b/src/app/Http/Controllers/Admin/MatchMakingController.php index 41259c05d..2d9445545 100644 --- a/src/app/Http/Controllers/Admin/MatchMakingController.php +++ b/src/app/Http/Controllers/Admin/MatchMakingController.php @@ -607,7 +607,19 @@ public function deleteuserfrommatch(MatchMaking $match, MatchMakingTeam $team, M */ public function destroy(MatchMaking $match) { - + foreach ($match->matchReplays as $matchReplay) + { + if(!$matchReplay->deleteReplayFile()) + { + Session::flash('alert-danger', 'Cannot delete Replay files!'); + return Redirect::back(); + } + if(!$matchReplay->delete()) + { + Session::flash('alert-danger', 'Cannot delete Replays!'); + return Redirect::back(); + } + } if (!$match->players()->delete()) { Session::flash('alert-danger', 'Cannot delete Players!'); return Redirect::back(); diff --git a/src/app/Http/Controllers/Admin/MatchReplayController.php b/src/app/Http/Controllers/Admin/MatchReplayController.php index e3e2205a4..07db1b69b 100644 --- a/src/app/Http/Controllers/Admin/MatchReplayController.php +++ b/src/app/Http/Controllers/Admin/MatchReplayController.php @@ -2,6 +2,7 @@ namespace App\Http\Controllers\Admin; +use App\Game; use DB; use Auth; use Session; @@ -24,8 +25,22 @@ class MatchReplayController extends Controller * @param MatchReplay $matchReplay * @return Redirect */ - public function destroy(MatchReplay $matchReplay) + public function destroy(Request $request, MatchReplay $matchReplay) { + if (isset($request->game) && intval($request->game) > 0) + { + if (!$matchReplay->deleteReplayFile(Game::where('id', intval($request->game))->first())) { + Session::flash('alert-danger', 'Cannot delete matchReplay file!'); + return Redirect::back(); + } + } + else + { + if (!$matchReplay->deleteReplayFile()) { + Session::flash('alert-danger', 'Cannot delete matchReplay file!'); + return Redirect::back(); + } + } if (!$matchReplay->delete()) { Session::flash('alert-danger', 'Cannot delete matchReplay!'); return Redirect::back(); diff --git a/src/app/Http/Controllers/MatchMakingController.php b/src/app/Http/Controllers/MatchMakingController.php index 34171e45a..3a538e72a 100644 --- a/src/app/Http/Controllers/MatchMakingController.php +++ b/src/app/Http/Controllers/MatchMakingController.php @@ -48,10 +48,8 @@ public function index() $memberedteams = Auth::user()->matchMakingTeams()->orderByDesc('created_at')->paginate(4, ['*'], 'memberedmatches')->fragment('memberedmatches'); $currentuseropenlivependingdraftmatches = array(); - foreach (MatchMaking::where(['status' => 'OPEN'])->orWhere(['status' => 'LIVE'])->orWhere(['status' => 'DRAFT'])->orWhere(['status' => 'PENDING'])->get() as $match) - { - if ($match->getMatchTeamPlayer(Auth::id())) - { + foreach (MatchMaking::where(['status' => 'OPEN'])->orWhere(['status' => 'LIVE'])->orWhere(['status' => 'DRAFT'])->orWhere(['status' => 'PENDING'])->get() as $match) { + if ($match->getMatchTeamPlayer(Auth::id())) { $currentuseropenlivependingdraftmatches[$match->id] = $match->id; } } @@ -65,7 +63,7 @@ public function index() ->withisMatchMakingEnabled(Settings::isMatchMakingEnabled()); } - /** + /** * Show Matchmaking * @param MatchMaking $match * @param Request $request @@ -74,24 +72,18 @@ public function index() public function show(MatchMaking $match, Request $request) { $teamjoin = null; - if (isset($request)) - { - if (isset($request->teamjoin)) - { - if($match->teams->where("id",$request->teamjoin)->count() > 0) - { - $teamjoin = $match->teams->where("id",$request->teamjoin)->first(); + if (isset($request)) { + if (isset($request->teamjoin)) { + if ($match->teams->where("id", $request->teamjoin)->count() > 0) { + $teamjoin = $match->teams->where("id", $request->teamjoin)->first(); } } } $invite = null; - if (isset($request)) - { - if (isset($request->invite)) - { - if(MatchMaking::where("invite_tag", $request->invite)->count() > 0) - { + if (isset($request)) { + if (isset($request->invite)) { + if (MatchMaking::where("invite_tag", $request->invite)->count() > 0) { $invite = MatchMaking::where("invite_tag", $request->invite)->first(); } } @@ -103,7 +95,7 @@ public function show(MatchMaking $match, Request $request) - foreach($allusers as $user) { + foreach ($allusers as $user) { $selectallusers[$user->id] = $user->username; } @@ -111,19 +103,18 @@ public function show(MatchMaking $match, Request $request) - foreach($allusers as $user) { + foreach ($allusers as $user) { $alreadyjoined = false; - foreach ($match->teams as $team) - { - if (Arr::first($team->players, function($value, $key)use($user){return $value->user_id == $user->id;},false)) - { + foreach ($match->teams as $team) { + if (Arr::first($team->players, function ($value, $key) use ($user) { + return $value->user_id == $user->id; + }, false)) { $alreadyjoined = true; } } - if (!$alreadyjoined) - { + if (!$alreadyjoined) { $availableusers[$user->id] = $user->username; } } @@ -139,7 +130,6 @@ public function show(MatchMaking $match, Request $request) ->withUsers($selectallusers) ->withTeamJoin($teamjoin) ->withInvite($invite); - } /** @@ -163,21 +153,16 @@ public function store(Request $request) ]; $this->validate($request, $rules, $messages); - - $currentuseropenlivependingdraftmatches = array(); - foreach (MatchMaking::where(['status' => 'OPEN'])->orWhere(['status' => 'LIVE'])->orWhere(['status' => 'DRAFT'])->orWhere(['status' => 'PENDING'])->get() as $match) - { - if ($match->getMatchTeamPlayer(Auth::id())) - { + foreach (MatchMaking::where(['status' => 'OPEN'])->orWhere(['status' => 'LIVE'])->orWhere(['status' => 'DRAFT'])->orWhere(['status' => 'PENDING'])->get() as $match) { + if ($match->getMatchTeamPlayer(Auth::id())) { $currentuseropenlivependingdraftmatches[$match->id] = $match->id; } } - if (Settings::getSystemsMatchMakingMaxopenperuser() != 0 && count($currentuseropenlivependingdraftmatches) >= Settings::getSystemsMatchMakingMaxopenperuser()) - { + if (Settings::getSystemsMatchMakingMaxopenperuser() != 0 && count($currentuseropenlivependingdraftmatches) >= Settings::getSystemsMatchMakingMaxopenperuser()) { Session::flash('alert-danger', __('matchmaking.maxopened')); return Redirect::back(); } @@ -189,33 +174,25 @@ public function store(Request $request) if (Game::where('id', $request->game_id)->first()) { $tempgame = Game::where('id', $request->game_id)->first(); - if ($tempgame->gamematchapihandler != 0 && $tempgame->matchmaking_autoapi) - { - if (!Helpers::checkUserFields(User::where('id', '=', Auth::id())->first(),(new GameMatchApiHandler())->getGameMatchApiHandler($tempgame->gamematchapihandler)->getuserthirdpartyrequirements())) - { + if ($tempgame->gamematchapihandler != 0 && $tempgame->matchmaking_autoapi) { + if (!Helpers::checkUserFields(User::where('id', '=', Auth::id())->first(), (new GameMatchApiHandler())->getGameMatchApiHandler($tempgame->gamematchapihandler)->getuserthirdpartyrequirements())) { Session::flash('alert-danger', __('matchmaking.cannotcreatethirdparty')); return Redirect::back(); } - } $game_id = $request->game_id; - if ($tempgame->min_team_count > 0 && $tempgame->max_team_count > 0) - { + if ($tempgame->min_team_count > 0 && $tempgame->max_team_count > 0) { - if ($request->team_count < $tempgame->min_team_count) - { - Session::flash('alert-danger', __('matchmaking.teamcount_smallerthangamesmin').$tempgame->min_team_count); + if ($request->team_count < $tempgame->min_team_count) { + Session::flash('alert-danger', __('matchmaking.teamcount_smallerthangamesmin') . $tempgame->min_team_count); return Redirect::back(); } - if ($request->team_count > $tempgame->max_team_count) - { - Session::flash('alert-danger', __('matchmaking.teamcount_biggerthangamesmax').$tempgame->max_team_count); + if ($request->team_count > $tempgame->max_team_count) { + Session::flash('alert-danger', __('matchmaking.teamcount_biggerthangamesmax') . $tempgame->max_team_count); return Redirect::back(); } - - } } } @@ -239,18 +216,16 @@ public function store(Request $request) $team1->name = $request->team1name; $team1->team_owner_id = Auth::id(); $team1->team_invite_tag = "team_" . Str::random(); - $team1->match_id =$match->id; + $team1->match_id = $match->id; if (!$team1->save()) { if (!$match->delete()) { Session::flash('alert-danger', __('matchmaking.cannotcreatteambutcannotdeletematch')); return Redirect::back(); - } - else { + } else { Session::flash('alert-danger', __('matchmaking.cannotcreateteam1')); return Redirect::back(); } - } $teamplayerone = new MatchMakingTeamPlayer(); @@ -264,14 +239,12 @@ public function store(Request $request) if (!$team1->delete()) { Session::flash('alert-danger', __('matchmaking.cannotcreateteamplayer1butcannotdeleteteam')); return Redirect::back(); - } - else { + } else { if (!$match->delete()) { - Session::flash('alert-danger',__('matchmaking.cannotcreateteamplayer1butcannotdeletematch')); + Session::flash('alert-danger', __('matchmaking.cannotcreateteamplayer1butcannotdeletematch')); return Redirect::back(); - } - else { + } else { Session::flash('alert-danger', __('matchmaking.cannotcreateteamplayer1')); return Redirect::back(); } @@ -282,7 +255,7 @@ public function store(Request $request) return Redirect::back(); } - /** + /** * Store Match to Database * @param MatchMaking $match * @param Request $request @@ -293,8 +266,7 @@ public function update(MatchMaking $match, Request $request) $currentuser = Auth::id(); - if ($match->owner_id != $currentuser) - { + if ($match->owner_id != $currentuser) { Session::flash('alert-danger', __('matchmaking.cannotupdatematchnotowner')); return Redirect::back(); } @@ -313,8 +285,7 @@ public function update(MatchMaking $match, Request $request) $this->validate($request, $rules, $messages); - if ($match->status == "LIVE" || $match->status == "COMPLETE" || $match->status == 'WAITFORPLAYERS'|| $match->status == 'PENDING') - { + if ($match->status == "LIVE" || $match->status == "COMPLETE" || $match->status == 'WAITFORPLAYERS' || $match->status == 'PENDING') { Session::flash('alert-danger', __('matchmaking.cannotupdatematchstatus')); return Redirect::back(); } @@ -324,31 +295,24 @@ public function update(MatchMaking $match, Request $request) if (Game::where('id', $request->game_id)->first()) { $tempgame = Game::where('id', $request->game_id)->first(); $game_id = $request->game_id; - if ($tempgame->min_team_count > 0 && $tempgame->max_team_count > 0) - { + if ($tempgame->min_team_count > 0 && $tempgame->max_team_count > 0) { - if ($request->team_count < $tempgame->min_team_count) - { - Session::flash('alert-danger', __('matchmaking.teamcount_smallerthangamesmin').$tempgame->min_team_count); + if ($request->team_count < $tempgame->min_team_count) { + Session::flash('alert-danger', __('matchmaking.teamcount_smallerthangamesmin') . $tempgame->min_team_count); return Redirect::back(); } - if ($request->team_count > $tempgame->max_team_count) - { - Session::flash('alert-danger', __('matchmaking.teamcount_biggerthangamesmax').$tempgame->max_team_count); + if ($request->team_count > $tempgame->max_team_count) { + Session::flash('alert-danger', __('matchmaking.teamcount_biggerthangamesmax') . $tempgame->max_team_count); return Redirect::back(); } - - } } } - foreach ($match->teams as $team) - { - if ($team->players->count() > $request->team_size[0]) - { + foreach ($match->teams as $team) { + if ($team->players->count() > $request->team_size[0]) { Session::flash('alert-danger', __('matchmaking.tomanyplayersforteamsize')); return Redirect::back(); } @@ -367,7 +331,6 @@ public function update(MatchMaking $match, Request $request) Session::flash('alert-success', __('matchmaking.successfullyupdatedmatch')); return Redirect::back(); - } /** @@ -378,7 +341,7 @@ public function update(MatchMaking $match, Request $request) */ public function addteam(MatchMaking $match, Request $request) { - $rules = [ + $rules = [ 'teamname' => 'required', ]; $messages = [ @@ -387,34 +350,29 @@ public function addteam(MatchMaking $match, Request $request) ]; $this->validate($request, $rules, $messages); - if ($match->game->gamematchapihandler != 0 && $match->game->matchmaking_autoapi) - { - if (!Helpers::checkUserFields(User::where('id', '=', Auth::id())->first(),(new GameMatchApiHandler())->getGameMatchApiHandler($match->game->gamematchapihandler)->getuserthirdpartyrequirements())) - { + if ($match->game->gamematchapihandler != 0 && $match->game->matchmaking_autoapi) { + if (!Helpers::checkUserFields(User::where('id', '=', Auth::id())->first(), (new GameMatchApiHandler())->getGameMatchApiHandler($match->game->gamematchapihandler)->getuserthirdpartyrequirements())) { Session::flash('alert-danger', __('matchmaking.cannotjointhirdparty')); return Redirect::back(); } - } - if ($match->status == "LIVE" || $match->status == "COMPLETE" || $match->status == 'WAITFORPLAYERS'|| $match->status == 'PENDING') - { + if ($match->status == "LIVE" || $match->status == "COMPLETE" || $match->status == 'WAITFORPLAYERS' || $match->status == 'PENDING') { Session::flash('alert-danger', __('matchmaking.cannotaddteamstatus')); return Redirect::back(); } - if ($match->team_count != 0 && $match->team_count == $match->teams->count()) - { + if ($match->team_count != 0 && $match->team_count == $match->teams->count()) { Session::flash('alert-danger', __('matchmaking.cannotaddteamcount')); return Redirect::back(); } - foreach($match->teams as $team) - { - if (Arr::first($team->players, function($value, $key)use($request){return $value->user_id == Auth::id();},false)) - { + foreach ($match->teams as $team) { + if (Arr::first($team->players, function ($value, $key) use ($request) { + return $value->user_id == Auth::id(); + }, false)) { Session::flash('alert-danger', __('matchmaking.youalreadyareinateam')); return Redirect::back(); } @@ -454,7 +412,7 @@ public function addteam(MatchMaking $match, Request $request) */ public function updateteam(MatchMaking $match, MatchMakingTeam $team, Request $request) { - $rules = [ + $rules = [ 'editteamname' => 'required', ]; $messages = [ @@ -463,14 +421,12 @@ public function updateteam(MatchMaking $match, MatchMakingTeam $team, Request $ ]; $this->validate($request, $rules, $messages); - if ($team->team_owner_id != Auth::id() && $match->owner_id != Auth::id()) - { + if ($team->team_owner_id != Auth::id() && $match->owner_id != Auth::id()) { Session::flash('alert-danger', __('matchmaking.cannotupdateteamnotowner')); return Redirect::back(); } - if ($match->status == "LIVE" || $match->status == "COMPLETE" || $match->status == 'WAITFORPLAYERS'|| $match->status == 'PENDING') - { + if ($match->status == "LIVE" || $match->status == "COMPLETE" || $match->status == 'WAITFORPLAYERS' || $match->status == 'PENDING') { Session::flash('alert-danger', __('matchmaking.cannotupdateteamstatus')); return Redirect::back(); } @@ -499,13 +455,11 @@ public function updateteam(MatchMaking $match, MatchMakingTeam $team, Request $ */ public function deleteteam(MatchMaking $match, MatchMakingTeam $team, Request $request) { - if ($match->status == "LIVE" || $match->status == "COMPLETE" || $match->status == 'WAITFORPLAYERS'|| $match->status == 'PENDING') - { + if ($match->status == "LIVE" || $match->status == "COMPLETE" || $match->status == 'WAITFORPLAYERS' || $match->status == 'PENDING') { Session::flash('alert-danger', __('matchmaking.cannotdeleteteamstatus')); return Redirect::back(); } - if ($team-> id == $match->oldestTeam->id) - { + if ($team->id == $match->oldestTeam->id) { Session::flash('alert-danger', __('matchmaking.cannotdeleteinitialteam')); return Redirect::back(); } @@ -516,12 +470,10 @@ public function deleteteam(MatchMaking $match, MatchMakingTeam $team, Request $ if (!$team->delete()) { Session::flash('alert-danger', __('matchmaking.cannotdeleteteam')); return Redirect::back(); - } Session::flash('alert-success', __('matchmaking.deletedteam')); return Redirect::back(); - } /** @@ -533,27 +485,22 @@ public function deleteteam(MatchMaking $match, MatchMakingTeam $team, Request $ */ public function addusertomatch(MatchMaking $match, MatchMakingTeam $team, Request $request) { - if ($match->status == "LIVE" || $match->status == "COMPLETE" || $match->status == 'WAITFORPLAYERS'|| $match->status == 'PENDING') - { + if ($match->status == "LIVE" || $match->status == "COMPLETE" || $match->status == 'WAITFORPLAYERS' || $match->status == 'PENDING') { Session::flash('alert-danger', __('matchmaking.cannnotjoinstatus')); return Redirect::back(); } - if ($team->players->count() >= $match->team_size) - { + if ($team->players->count() >= $match->team_size) { Session::flash('alert-danger', __('matchmaking.cannotjoinalreadyfull')); return Redirect::back(); } - if ($match->game->gamematchapihandler != 0 && $match->game->matchmaking_autoapi) - { - if (!Helpers::checkUserFields(User::where('id', '=', Auth::id())->first(),(new GameMatchApiHandler())->getGameMatchApiHandler($match->game->gamematchapihandler)->getuserthirdpartyrequirements())) - { + if ($match->game->gamematchapihandler != 0 && $match->game->matchmaking_autoapi) { + if (!Helpers::checkUserFields(User::where('id', '=', Auth::id())->first(), (new GameMatchApiHandler())->getGameMatchApiHandler($match->game->gamematchapihandler)->getuserthirdpartyrequirements())) { Session::flash('alert-danger', __('matchmaking.cannotjointhirdparty')); return Redirect::back(); } - } @@ -566,7 +513,7 @@ public function addusertomatch(MatchMaking $match, MatchMakingTeam $team, Reques } Session::flash('alert-success', __('matchmaking.successfiullyaddedteamplayer')); - return Redirect::to('/matchmaking/'. $match->id); + return Redirect::to('/matchmaking/' . $match->id); } /** @@ -578,8 +525,7 @@ public function addusertomatch(MatchMaking $match, MatchMakingTeam $team, Reques public function deleteuserfrommatch(MatchMaking $match, MatchMakingTeam $team, MatchMakingTeamPlayer $teamplayer, Request $request) { - if ($match->status == "LIVE" || $match->status == "COMPLETE" || $match->status == 'WAITFORPLAYERS'|| $match->status == 'PENDING') - { + if ($match->status == "LIVE" || $match->status == "COMPLETE" || $match->status == 'WAITFORPLAYERS' || $match->status == 'PENDING') { Session::flash('alert-danger', __('matchmaking.cannotleavestatus')); return Redirect::back(); } @@ -593,12 +539,8 @@ public function deleteuserfrommatch(MatchMaking $match, MatchMakingTeam $team, M - Session::flash('alert-success', __('matchmaking.successfullydeletedteamplayer')); - return Redirect::back(); - - - - + Session::flash('alert-success', __('matchmaking.successfullydeletedteamplayer')); + return Redirect::back(); } @@ -611,8 +553,7 @@ public function deleteuserfrommatch(MatchMaking $match, MatchMakingTeam $team, M public function changeuserteam(MatchMaking $match, MatchMakingTeam $team, MatchMakingTeamPlayer $teamplayer, Request $request) { - if ($match->status == "LIVE" || $match->status == "COMPLETE" || $match->status == 'WAITFORPLAYERS'|| $match->status == 'PENDING') - { + if ($match->status == "LIVE" || $match->status == "COMPLETE" || $match->status == 'WAITFORPLAYERS' || $match->status == 'PENDING') { Session::flash('alert-danger', __('matchmaking.cannotleavestatus')); return Redirect::back(); } @@ -633,10 +574,8 @@ public function changeuserteam(MatchMaking $match, MatchMakingTeam $team, MatchM return Redirect::back(); } - Session::flash('alert-success', __('matchmaking.successfullychangedteamplayer')); - return Redirect::back(); - - + Session::flash('alert-success', __('matchmaking.successfullychangedteamplayer')); + return Redirect::back(); } @@ -650,8 +589,7 @@ public function destroy(MatchMaking $match) { $currentuser = Auth::id(); - if ($match->owner_id != $currentuser) - { + if ($match->owner_id != $currentuser) { Session::flash('alert-danger', __('matchmaking.cannotdeletematchnotowner')); return Redirect::back(); } @@ -666,6 +604,18 @@ public function destroy(MatchMaking $match) Session::flash('alert-danger', __('matchmaking.cannotdeleteteams')); return Redirect::back(); } + + foreach ($match->matchReplays as $matchReplay) { + if (!$matchReplay->deleteReplayFile()) { + Session::flash('alert-danger', __('matchmaking.cannotdeletereplayfiles')); + return Redirect::back(); + } + if (!$matchReplay->delete()) { + Session::flash('alert-danger', __('matchmaking.cannotdeletereplays')); + return Redirect::back(); + } + } + if (!$match->delete()) { Session::flash('alert-danger', __('matchmaking.cannotdeletematch')); return Redirect::back(); @@ -684,67 +634,57 @@ public function start(MatchMaking $match) { $currentuser = Auth::id(); - if ($match->owner_id != $currentuser) - { + if ($match->owner_id != $currentuser) { Session::flash('alert-danger', __('matchmaking.cannotstartmatchnotowner')); return Redirect::back(); } - if ($match->status == 'LIVE' || $match->status == 'COMPLETED' || $match->status == 'WAITFORPLAYERS'|| $match->status == 'PENDING') { + if ($match->status == 'LIVE' || $match->status == 'COMPLETED' || $match->status == 'WAITFORPLAYERS' || $match->status == 'PENDING') { Session::flash('alert-danger', __('matchmaking.matchalreadystartedorcompleted')); return Redirect::back(); } - if ($match->teams->count() < $match->team_count) - { + if ($match->teams->count() < $match->team_count) { Session::flash('alert-danger', __('matchmaking.notallrequiredteamsarethere')); return Redirect::back(); } - foreach ($match->teams as $team) - { - if ($team->players->count() != $match->team_size) - { + foreach ($match->teams as $team) { + if ($team->players->count() != $match->team_size) { Session::flash('alert-danger', __('matchmaking.notenoughplayerstostart')); return Redirect::back(); } } - if(isset($match->game) && $match->game->matchmaking_autostart) - { - GameServerAsign::dispatch($match,null,null)->onQueue('gameserver'); - + if (isset($match->game) && $match->game->matchmaking_autostart) { + GameServerAsign::dispatch($match, null, null)->onQueue('gameserver'); - if (isset($match->game) && $match->game->matchmaking_autoapi) - { - if (!$match->setStatus('WAITFORPLAYERS')) { - Session::flash('alert-danger', __('matchmaking.cannotstartmatch')); - return Redirect::back(); - } - Session::flash('alert-success', __('matchmaking.matchstarted')); + if (isset($match->game) && $match->game->matchmaking_autoapi) { + if (!$match->setStatus('WAITFORPLAYERS')) { + Session::flash('alert-danger', __('matchmaking.cannotstartmatch')); return Redirect::back(); } - else - { - if (!$match->setStatus('LIVE')) { - Session::flash('alert-danger', __('matchmaking.cannotstartmatch')); - return Redirect::back(); - } - Session::flash('alert-success', __('matchmaking.matchstarted')); + Session::flash('alert-success', __('matchmaking.matchstarted')); + return Redirect::back(); + } else { + if (!$match->setStatus('LIVE')) { + Session::flash('alert-danger', __('matchmaking.cannotstartmatch')); return Redirect::back(); } + Session::flash('alert-success', __('matchmaking.matchstarted')); + return Redirect::back(); + } + if (!$match->setStatus('LIVE')) { Session::flash('alert-danger', __('matchmaking.cannotstartmatch')); return Redirect::back(); } Session::flash('alert-success', __('matchmaking.matchstarted')); return Redirect::back(); - } - else - { + } else { if (!$match->setStatus('PENDING')) { Session::flash('alert-danger', __('matchmaking.cannotstartmatch')); return Redirect::back(); @@ -764,10 +704,10 @@ public function scramble(MatchMaking $match) $players = $match->players; $players = $players->shuffle(); - $teamSize = intval ($match->team_size); + $teamSize = intval($match->team_size); $teams = $players->chunk($teamSize); - foreach($teams as $key=>$team) { + foreach ($teams as $key => $team) { $teamToUpdate = $match->teams[$key]; // After scrambling there is no team owner available. $teamToUpdate->team_owner_id = null; @@ -776,7 +716,7 @@ public function scramble(MatchMaking $match) return Redirect::back(); } - foreach($team as $teamPlayer) { + foreach ($team as $teamPlayer) { $teamPlayer->matchmaking_team_id = $teamToUpdate->id; if (!$teamPlayer->save()) { Session::flash('alert-danger', "Couldn´t add a player to Team " . ($key + 1)); @@ -797,13 +737,12 @@ public function open(MatchMaking $match) { $currentuser = Auth::id(); - if ($match->owner_id != $currentuser) - { + if ($match->owner_id != $currentuser) { Session::flash('alert-danger', __('matchmaking.cannotopenmatchnotowner')); return Redirect::back(); } - if ($match->status == 'OPEN' || $match->status == 'LIVE' || $match->status == 'COMPLETED' || $match->status == 'WAITFORPLAYERS'|| $match->status == 'PENDING') { + if ($match->status == 'OPEN' || $match->status == 'LIVE' || $match->status == 'COMPLETED' || $match->status == 'WAITFORPLAYERS' || $match->status == 'PENDING') { Session::flash('alert-danger', __('matchmaking.matchalreadyopenliveorcompleted')); return Redirect::back(); } @@ -828,64 +767,49 @@ public function finalize(MatchMaking $match, Request $request) { $currentuser = Auth::id(); - if ($match->owner_id != $currentuser) - { + if ($match->owner_id != $currentuser) { Session::flash('alert-danger', __('matchmaking.cannotfinalizenotowner')); return Redirect::back(); } - foreach ($match->teams as $team) - { + foreach ($match->teams as $team) { $teamvalue = null; - foreach($request->all() as $key => $value) { + foreach ($request->all() as $key => $value) { - if(Str::startsWith($key, 'teamscore_') && Str::of($key)->endsWith($team->id)) - { + if (Str::startsWith($key, 'teamscore_') && Str::of($key)->endsWith($team->id)) { - if (is_numeric($value)) - { + if (is_numeric($value)) { $teamvalue = $value; } - } - } - if ($teamvalue == null) - { + if ($teamvalue == null) { Session::flash('alert-danger', __('matchmaking.missingscoreforteam')); return Redirect::back(); } } - foreach ($match->teams as $team) - { - foreach($request->all() as $key => $value) { + foreach ($match->teams as $team) { + foreach ($request->all() as $key => $value) { - if(Str::startsWith($key, 'teamscore_') && Str::of($key)->endsWith($team->id)) - { + if (Str::startsWith($key, 'teamscore_') && Str::of($key)->endsWith($team->id)) { $team->team_score = $value; if (!$team->save()) { Session::flash('alert-danger', __('matchmaking.scorecouldnotbesetted')); return Redirect::back(); } - - } - } - - } if (!$match->setStatus('COMPLETE')) { Session::flash('alert-danger', __('matchmaking.cannotfinalize')); return Redirect::back(); - } - - if(isset($match->matchMakingServer)) - { + } + + if (isset($match->matchMakingServer)) { if (!$match->matchMakingServer->delete()) { Session::flash('alert-danger', __('matchmaking.cannotdeletemmserver')); return Redirect::back(); @@ -911,27 +835,18 @@ public function showInvite(Request $request) $teaminvite = MatchMakingTeam::where("team_invite_tag", $request->url)->first(); $matchinvite = MatchMaking::where("invite_tag", $request->url)->first(); - if (isset ($teaminvite) && $teaminvite->count() > 0) - { - return Redirect::to('/matchmaking/'. $teaminvite->match->id . "/?teamjoin=" . $teaminvite->id); + if (isset($teaminvite) && $teaminvite->count() > 0) { + return Redirect::to('/matchmaking/' . $teaminvite->match->id . "/?teamjoin=" . $teaminvite->id); } - if (isset ($matchinvite) && $matchinvite->count() > 0) - { - return Redirect::to('/matchmaking/'. $matchinvite->id . "/?invite=" . $matchinvite->invite_tag); + if (isset($matchinvite) && $matchinvite->count() > 0) { + return Redirect::to('/matchmaking/' . $matchinvite->id . "/?invite=" . $matchinvite->invite_tag); } - if (!isset ($matchinvite) || isset ($teaminvite) || ($teaminvite->count() == 0 && $matchinvite->count() == 0) ) - { + if (!isset($matchinvite) || isset($teaminvite) || ($teaminvite->count() == 0 && $matchinvite->count() == 0)) { $request->session()->flash('alert-danger', __('matchmaking.invitationnotfound')); return Redirect::to('/'); } - - - } $request->session()->flash('alert-danger', __('matchmaking.pleaselogin')); return Redirect::to('login'); } - - - } diff --git a/src/app/MatchReplay.php b/src/app/MatchReplay.php index 21047dbf9..b3ca3e771 100644 --- a/src/app/MatchReplay.php +++ b/src/app/MatchReplay.php @@ -90,4 +90,30 @@ public static function getReplaySize(Game $game,$demoname) return Helpers::bytesToHuman(Storage::disk('public')->size(MatchReplay::getReplayPath($game, $demoname))); } + public function deleteReplayFile(?Game $game = null) + { + if(isset($this->matchMakingMatch)) + { + if(!Storage::disk('public')->delete(MatchReplay::getReplayPath($this->matchMakingMatch->game, $this->name))) + { + return false; + } + return true; + } + else + { + if (!isset($game)) + { + return false; + } + if(!Storage::disk('public')->delete(MatchReplay::getReplayPath($game, $this->name))) + { + return false; + } + return true; + } + + } + + } diff --git a/src/composer.json b/src/composer.json index 404febef9..1054f1db9 100644 --- a/src/composer.json +++ b/src/composer.json @@ -23,16 +23,16 @@ "type": "project", "require": { "php": "8.2.*", - "laravel/framework": "10.32.1", + "laravel/framework": "10.34.2", "laravelcollective/html": "6.4.1", "laravel/legacy-factories": "1.3.2", "webonyx/graphql-php": "15.8.0", "invisnik/laravel-steam-auth": "dev-l10-compatibility", "laravel/socialite": "5.10.0", "ignited/laravel-omnipay": "3.5.0", - "doctrine/dbal": "3.7.1", + "doctrine/dbal": "3.7.2", "simplesoftwareio/simple-qrcode": "4.2.0", - "guzzlehttp/guzzle": "7.8.0", + "guzzlehttp/guzzle": "7.8.1", "php-http/guzzle7-adapter": "1.0.0", "team-reflex/challonge-php": "5.0", "intervention/image": "2.7.2", @@ -42,18 +42,18 @@ "cviebrock/eloquent-sluggable": "10.0.0", "barryvdh/laravel-debugbar": "3.9.2", "omnipay/stripe": "3.2.0", - "symfony/routing": "6.3.5", - "sirprize/postal-code-validator": "1.4.1", + "symfony/routing": "6.4.1", + "sirprize/postal-code-validator": "1.5.0", "artesaos/seotools": "1.2.0", "spatie/laravel-cookie-consent": "3.2.4", "xpaw/php-source-query-class": "2.1.0", "maniaplanet/dedicated-server-api": "dev-master", - "laravel/ui": "4.2.2", + "laravel/ui": "4.2.3", "spatie/laravel-database-mail-templates": "3.5.1", "laravel/sanctum": "3.3.2", "propaganistas/laravel-phone": "5.0.3", - "symfony/mailgun-mailer": "6.3.6", - "symfony/http-client": "6.3.8", + "symfony/mailgun-mailer": "6.4.0", + "symfony/http-client": "6.4.0", "spatie/backtrace": "1.5.3", "haydenpierce/class-finder": "^0.5.3", "dompdf/dompdf": "^2.0" @@ -61,10 +61,10 @@ "require-dev": { "mockery/mockery": "1.6.6", "fakerphp/faker": "1.23.0", - "phpunit/phpunit": "10.4.2", + "phpunit/phpunit": "10.5.1", "kitloong/laravel-migrations-generator": "6.11.0", - "symfony/css-selector": "6.3.2", - "symfony/dom-crawler": "6.3.4", + "symfony/css-selector": "6.4.0", + "symfony/dom-crawler": "6.4.0", "orangehill/iseed": "3.0.3", "squizlabs/php_codesniffer": "3.7.2", "filp/whoops": "2.15.4" diff --git a/src/composer.lock b/src/composer.lock index 3e2a26fc2..0ec3d438f 100644 --- a/src/composer.lock +++ b/src/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": "682ad2190358912b9fa7c79136c92785", + "content-hash": "d5d72717864b95e4f765125b3079216f", "packages": [ { "name": "artesaos/seotools", @@ -703,16 +703,16 @@ }, { "name": "doctrine/dbal", - "version": "3.7.1", + "version": "3.7.2", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "5b7bd66c9ff58c04c5474ab85edce442f8081cb2" + "reference": "0ac3c270590e54910715e9a1a044cc368df282b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/5b7bd66c9ff58c04c5474ab85edce442f8081cb2", - "reference": "5b7bd66c9ff58c04c5474ab85edce442f8081cb2", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/0ac3c270590e54910715e9a1a044cc368df282b2", + "reference": "0ac3c270590e54910715e9a1a044cc368df282b2", "shasum": "" }, "require": { @@ -728,7 +728,7 @@ "doctrine/coding-standard": "12.0.0", "fig/log-test": "^1", "jetbrains/phpstorm-stubs": "2023.1", - "phpstan/phpstan": "1.10.35", + "phpstan/phpstan": "1.10.42", "phpstan/phpstan-strict-rules": "^1.5", "phpunit/phpunit": "9.6.13", "psalm/plugin-phpunit": "0.18.4", @@ -796,7 +796,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.7.1" + "source": "https://github.com/doctrine/dbal/tree/3.7.2" }, "funding": [ { @@ -812,7 +812,7 @@ "type": "tidelift" } ], - "time": "2023-10-06T05:06:20+00:00" + "time": "2023-11-19T08:06:58+00:00" }, { "name": "doctrine/deprecations", @@ -1571,16 +1571,16 @@ }, { "name": "guzzlehttp/guzzle", - "version": "7.8.0", + "version": "7.8.1", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "1110f66a6530a40fe7aea0378fe608ee2b2248f9" + "reference": "41042bc7ab002487b876a0683fc8dce04ddce104" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/1110f66a6530a40fe7aea0378fe608ee2b2248f9", - "reference": "1110f66a6530a40fe7aea0378fe608ee2b2248f9", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/41042bc7ab002487b876a0683fc8dce04ddce104", + "reference": "41042bc7ab002487b876a0683fc8dce04ddce104", "shasum": "" }, "require": { @@ -1595,11 +1595,11 @@ "psr/http-client-implementation": "1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.1", + "bamarni/composer-bin-plugin": "^1.8.2", "ext-curl": "*", "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999", "php-http/message-factory": "^1.1", - "phpunit/phpunit": "^8.5.29 || ^9.5.23", + "phpunit/phpunit": "^8.5.36 || ^9.6.15", "psr/log": "^1.1 || ^2.0 || ^3.0" }, "suggest": { @@ -1677,7 +1677,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.8.0" + "source": "https://github.com/guzzle/guzzle/tree/7.8.1" }, "funding": [ { @@ -1693,28 +1693,28 @@ "type": "tidelift" } ], - "time": "2023-08-27T10:20:53+00:00" + "time": "2023-12-03T20:35:24+00:00" }, { "name": "guzzlehttp/promises", - "version": "2.0.1", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "111166291a0f8130081195ac4556a5587d7f1b5d" + "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/111166291a0f8130081195ac4556a5587d7f1b5d", - "reference": "111166291a0f8130081195ac4556a5587d7f1b5d", + "url": "https://api.github.com/repos/guzzle/promises/zipball/bbff78d96034045e58e13dedd6ad91b5d1253223", + "reference": "bbff78d96034045e58e13dedd6ad91b5d1253223", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.1", - "phpunit/phpunit": "^8.5.29 || ^9.5.23" + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.36 || ^9.6.15" }, "type": "library", "extra": { @@ -1760,7 +1760,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.0.1" + "source": "https://github.com/guzzle/promises/tree/2.0.2" }, "funding": [ { @@ -1776,20 +1776,20 @@ "type": "tidelift" } ], - "time": "2023-08-03T15:11:55+00:00" + "time": "2023-12-03T20:19:20+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.6.1", + "version": "2.6.2", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "be45764272e8873c72dbe3d2edcfdfcc3bc9f727" + "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/be45764272e8873c72dbe3d2edcfdfcc3bc9f727", - "reference": "be45764272e8873c72dbe3d2edcfdfcc3bc9f727", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/45b30f99ac27b5ca93cb4831afe16285f57b8221", + "reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221", "shasum": "" }, "require": { @@ -1803,9 +1803,9 @@ "psr/http-message-implementation": "1.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.1", + "bamarni/composer-bin-plugin": "^1.8.2", "http-interop/http-factory-tests": "^0.9", - "phpunit/phpunit": "^8.5.29 || ^9.5.23" + "phpunit/phpunit": "^8.5.36 || ^9.6.15" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" @@ -1876,7 +1876,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.6.1" + "source": "https://github.com/guzzle/psr7/tree/2.6.2" }, "funding": [ { @@ -1892,7 +1892,7 @@ "type": "tidelift" } ], - "time": "2023-08-27T10:13:57+00:00" + "time": "2023-12-03T20:05:35+00:00" }, { "name": "guzzlehttp/uri-template", @@ -2226,16 +2226,16 @@ }, { "name": "laravel/framework", - "version": "v10.32.1", + "version": "v10.34.2", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "b30e44f20d244f7ba125283e14a8bbac167f4e5b" + "reference": "c581caa233e380610b34cc491490bfa147a3b62b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/b30e44f20d244f7ba125283e14a8bbac167f4e5b", - "reference": "b30e44f20d244f7ba125283e14a8bbac167f4e5b", + "url": "https://api.github.com/repos/laravel/framework/zipball/c581caa233e380610b34cc491490bfa147a3b62b", + "reference": "c581caa233e380610b34cc491490bfa147a3b62b", "shasum": "" }, "require": { @@ -2424,7 +2424,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2023-11-14T22:57:08+00:00" + "time": "2023-11-28T19:06:27+00:00" }, { "name": "laravel/legacy-factories", @@ -2806,16 +2806,16 @@ }, { "name": "laravel/ui", - "version": "v4.2.2", + "version": "v4.2.3", "source": { "type": "git", "url": "https://github.com/laravel/ui.git", - "reference": "a58ec468db4a340b33f3426c778784717a2c144b" + "reference": "eb532ea096ca1c0298c87c19233daf011fda743a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/ui/zipball/a58ec468db4a340b33f3426c778784717a2c144b", - "reference": "a58ec468db4a340b33f3426c778784717a2c144b", + "url": "https://api.github.com/repos/laravel/ui/zipball/eb532ea096ca1c0298c87c19233daf011fda743a", + "reference": "eb532ea096ca1c0298c87c19233daf011fda743a", "shasum": "" }, "require": { @@ -2862,9 +2862,9 @@ "ui" ], "support": { - "source": "https://github.com/laravel/ui/tree/v4.2.2" + "source": "https://github.com/laravel/ui/tree/v4.2.3" }, - "time": "2023-05-09T19:47:28+00:00" + "time": "2023-11-23T14:44:22+00:00" }, { "name": "laravelcollective/html", @@ -3129,16 +3129,16 @@ }, { "name": "league/flysystem", - "version": "3.19.0", + "version": "3.21.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "1b2aa10f2326e0351399b8ce68e287d8e9209a83" + "reference": "a326d8a2d007e4ca327a57470846e34363789258" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/1b2aa10f2326e0351399b8ce68e287d8e9209a83", - "reference": "1b2aa10f2326e0351399b8ce68e287d8e9209a83", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/a326d8a2d007e4ca327a57470846e34363789258", + "reference": "a326d8a2d007e4ca327a57470846e34363789258", "shasum": "" }, "require": { @@ -3203,7 +3203,7 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/3.19.0" + "source": "https://github.com/thephpleague/flysystem/tree/3.21.0" }, "funding": [ { @@ -3215,20 +3215,20 @@ "type": "github" } ], - "time": "2023-11-07T09:04:28+00:00" + "time": "2023-11-18T13:59:15+00:00" }, { "name": "league/flysystem-local", - "version": "3.19.0", + "version": "3.21.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-local.git", - "reference": "8d868217f9eeb4e9a7320db5ccad825e9a7a4076" + "reference": "470eb1c09eaabd49ebd908ae06f23983ba3ecfe7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/8d868217f9eeb4e9a7320db5ccad825e9a7a4076", - "reference": "8d868217f9eeb4e9a7320db5ccad825e9a7a4076", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/470eb1c09eaabd49ebd908ae06f23983ba3ecfe7", + "reference": "470eb1c09eaabd49ebd908ae06f23983ba3ecfe7", "shasum": "" }, "require": { @@ -3263,7 +3263,7 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem-local/issues", - "source": "https://github.com/thephpleague/flysystem-local/tree/3.19.0" + "source": "https://github.com/thephpleague/flysystem-local/tree/3.21.0" }, "funding": [ { @@ -3275,7 +3275,7 @@ "type": "github" } ], - "time": "2023-11-06T20:35:28+00:00" + "time": "2023-11-18T13:41:42+00:00" }, { "name": "league/mime-type-detection", @@ -6107,28 +6107,28 @@ }, { "name": "sirprize/postal-code-validator", - "version": "1.4.1", + "version": "1.5.0", "source": { "type": "git", "url": "https://github.com/sirprize/postal-code-validator.git", - "reference": "a48928a52745e896abb601735e1f9d72d70947d5" + "reference": "64b471d88e4533922c0cf242087292352dd24de2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sirprize/postal-code-validator/zipball/a48928a52745e896abb601735e1f9d72d70947d5", - "reference": "a48928a52745e896abb601735e1f9d72d70947d5", + "url": "https://api.github.com/repos/sirprize/postal-code-validator/zipball/64b471d88e4533922c0cf242087292352dd24de2", + "reference": "64b471d88e4533922c0cf242087292352dd24de2", "shasum": "" }, "require": { "php": "^7.2 || ^8.0" }, "require-dev": { - "phpunit/phpunit": "^8.0" + "phpunit/phpunit": "^8.0 || ^9.0 || ^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.5.x-dev" + "dev-master": "1.6.x-dev" } }, "autoload": { @@ -6155,9 +6155,9 @@ ], "support": { "issues": "https://github.com/sirprize/postal-code-validator/issues", - "source": "https://github.com/sirprize/postal-code-validator/tree/1.4.1" + "source": "https://github.com/sirprize/postal-code-validator/tree/1.5.0" }, - "time": "2023-06-29T20:46:26+00:00" + "time": "2023-11-24T06:06:38+00:00" }, { "name": "spatie/backtrace", @@ -6493,16 +6493,16 @@ }, { "name": "symfony/console", - "version": "v6.3.8", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "0d14a9f6d04d4ac38a8cea1171f4554e325dae92" + "reference": "cd9864b47c367450e14ab32f78fdbf98c44c26b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/0d14a9f6d04d4ac38a8cea1171f4554e325dae92", - "reference": "0d14a9f6d04d4ac38a8cea1171f4554e325dae92", + "url": "https://api.github.com/repos/symfony/console/zipball/cd9864b47c367450e14ab32f78fdbf98c44c26b6", + "reference": "cd9864b47c367450e14ab32f78fdbf98c44c26b6", "shasum": "" }, "require": { @@ -6510,7 +6510,7 @@ "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^5.4|^6.0" + "symfony/string": "^5.4|^6.0|^7.0" }, "conflict": { "symfony/dependency-injection": "<5.4", @@ -6524,12 +6524,16 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/lock": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0", - "symfony/var-dumper": "^5.4|^6.0" + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^5.4|^6.0|^7.0", + "symfony/messenger": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/stopwatch": "^5.4|^6.0|^7.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -6563,7 +6567,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.3.8" + "source": "https://github.com/symfony/console/tree/v6.4.0" }, "funding": [ { @@ -6579,20 +6583,20 @@ "type": "tidelift" } ], - "time": "2023-10-31T08:09:35+00:00" + "time": "2023-11-20T16:41:16+00:00" }, { "name": "symfony/css-selector", - "version": "v6.3.2", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "883d961421ab1709877c10ac99451632a3d6fa57" + "reference": "d036c6c0d0b09e24a14a35f8292146a658f986e4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/883d961421ab1709877c10ac99451632a3d6fa57", - "reference": "883d961421ab1709877c10ac99451632a3d6fa57", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/d036c6c0d0b09e24a14a35f8292146a658f986e4", + "reference": "d036c6c0d0b09e24a14a35f8292146a658f986e4", "shasum": "" }, "require": { @@ -6628,7 +6632,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v6.3.2" + "source": "https://github.com/symfony/css-selector/tree/v6.4.0" }, "funding": [ { @@ -6644,11 +6648,11 @@ "type": "tidelift" } ], - "time": "2023-07-12T16:00:22+00:00" + "time": "2023-10-31T08:40:20+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.3.0", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", @@ -6695,7 +6699,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.4.0" }, "funding": [ { @@ -6715,30 +6719,31 @@ }, { "name": "symfony/error-handler", - "version": "v6.3.5", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "1f69476b64fb47105c06beef757766c376b548c4" + "reference": "c873490a1c97b3a0a4838afc36ff36c112d02788" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/1f69476b64fb47105c06beef757766c376b548c4", - "reference": "1f69476b64fb47105c06beef757766c376b548c4", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/c873490a1c97b3a0a4838afc36ff36c112d02788", + "reference": "c873490a1c97b3a0a4838afc36ff36c112d02788", "shasum": "" }, "require": { "php": ">=8.1", "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^5.4|^6.0" + "symfony/var-dumper": "^5.4|^6.0|^7.0" }, "conflict": { - "symfony/deprecation-contracts": "<2.5" + "symfony/deprecation-contracts": "<2.5", + "symfony/http-kernel": "<6.4" }, "require-dev": { "symfony/deprecation-contracts": "^2.5|^3", - "symfony/http-kernel": "^5.4|^6.0", - "symfony/serializer": "^5.4|^6.0" + "symfony/http-kernel": "^6.4|^7.0", + "symfony/serializer": "^5.4|^6.0|^7.0" }, "bin": [ "Resources/bin/patch-type-declarations" @@ -6769,7 +6774,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v6.3.5" + "source": "https://github.com/symfony/error-handler/tree/v6.4.0" }, "funding": [ { @@ -6785,28 +6790,28 @@ "type": "tidelift" } ], - "time": "2023-09-12T06:57:20+00:00" + "time": "2023-10-18T09:43:34+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v6.3.2", + "version": "v7.0.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e" + "reference": "c459b40ffe67c49af6fd392aac374c9edf8a027e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/adb01fe097a4ee930db9258a3cc906b5beb5cf2e", - "reference": "adb01fe097a4ee930db9258a3cc906b5beb5cf2e", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/c459b40ffe67c49af6fd392aac374c9edf8a027e", + "reference": "c459b40ffe67c49af6fd392aac374c9edf8a027e", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/event-dispatcher-contracts": "^2.5|^3" }, "conflict": { - "symfony/dependency-injection": "<5.4", + "symfony/dependency-injection": "<6.4", "symfony/service-contracts": "<2.5" }, "provide": { @@ -6815,13 +6820,13 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/error-handler": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/http-foundation": "^5.4|^6.0", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/error-handler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^5.4|^6.0" + "symfony/stopwatch": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -6849,7 +6854,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/v6.3.2" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.0.0" }, "funding": [ { @@ -6865,11 +6870,11 @@ "type": "tidelift" } ], - "time": "2023-07-06T06:56:43+00:00" + "time": "2023-07-27T16:29:09+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.3.0", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", @@ -6925,7 +6930,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.4.0" }, "funding": [ { @@ -6945,23 +6950,23 @@ }, { "name": "symfony/finder", - "version": "v6.3.5", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "a1b31d88c0e998168ca7792f222cbecee47428c4" + "reference": "11d736e97f116ac375a81f96e662911a34cd50ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/a1b31d88c0e998168ca7792f222cbecee47428c4", - "reference": "a1b31d88c0e998168ca7792f222cbecee47428c4", + "url": "https://api.github.com/repos/symfony/finder/zipball/11d736e97f116ac375a81f96e662911a34cd50ce", + "reference": "11d736e97f116ac375a81f96e662911a34cd50ce", "shasum": "" }, "require": { "php": ">=8.1" }, "require-dev": { - "symfony/filesystem": "^6.0" + "symfony/filesystem": "^6.0|^7.0" }, "type": "library", "autoload": { @@ -6989,7 +6994,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.3.5" + "source": "https://github.com/symfony/finder/tree/v6.4.0" }, "funding": [ { @@ -7005,20 +7010,20 @@ "type": "tidelift" } ], - "time": "2023-09-26T12:56:25+00:00" + "time": "2023-10-31T17:30:12+00:00" }, { "name": "symfony/http-client", - "version": "v6.3.8", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "0314e2d49939a9831929d6fc81c01c6df137fd0a" + "reference": "5c584530b77aa10ae216989ffc48b4bedc9c0b29" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/0314e2d49939a9831929d6fc81c01c6df137fd0a", - "reference": "0314e2d49939a9831929d6fc81c01c6df137fd0a", + "url": "https://api.github.com/repos/symfony/http-client/zipball/5c584530b77aa10ae216989ffc48b4bedc9c0b29", + "reference": "5c584530b77aa10ae216989ffc48b4bedc9c0b29", "shasum": "" }, "require": { @@ -7047,10 +7052,11 @@ "nyholm/psr7": "^1.0", "php-http/httplug": "^1.0|^2.0", "psr/http-client": "^1.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/http-kernel": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0", - "symfony/stopwatch": "^5.4|^6.0" + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", + "symfony/messenger": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/stopwatch": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -7081,7 +7087,7 @@ "http" ], "support": { - "source": "https://github.com/symfony/http-client/tree/v6.3.8" + "source": "https://github.com/symfony/http-client/tree/v6.4.0" }, "funding": [ { @@ -7097,20 +7103,20 @@ "type": "tidelift" } ], - "time": "2023-11-06T18:31:59+00:00" + "time": "2023-11-28T20:55:58+00:00" }, { "name": "symfony/http-client-contracts", - "version": "v3.3.0", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/http-client-contracts.git", - "reference": "3b66325d0176b4ec826bffab57c9037d759c31fb" + "reference": "1ee70e699b41909c209a0c930f11034b93578654" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/3b66325d0176b4ec826bffab57c9037d759c31fb", - "reference": "3b66325d0176b4ec826bffab57c9037d759c31fb", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/1ee70e699b41909c209a0c930f11034b93578654", + "reference": "1ee70e699b41909c209a0c930f11034b93578654", "shasum": "" }, "require": { @@ -7159,7 +7165,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/http-client-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/http-client-contracts/tree/v3.4.0" }, "funding": [ { @@ -7175,20 +7181,20 @@ "type": "tidelift" } ], - "time": "2023-05-23T14:45:45+00:00" + "time": "2023-07-30T20:28:31+00:00" }, { "name": "symfony/http-foundation", - "version": "v6.3.8", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "ce332676de1912c4389222987193c3ef38033df6" + "reference": "44a6d39a9cc11e154547d882d5aac1e014440771" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ce332676de1912c4389222987193c3ef38033df6", - "reference": "ce332676de1912c4389222987193c3ef38033df6", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/44a6d39a9cc11e154547d882d5aac1e014440771", + "reference": "44a6d39a9cc11e154547d882d5aac1e014440771", "shasum": "" }, "require": { @@ -7203,12 +7209,12 @@ "require-dev": { "doctrine/dbal": "^2.13.1|^3|^4", "predis/predis": "^1.1|^2.0", - "symfony/cache": "^6.3", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4", - "symfony/mime": "^5.4|^6.0", - "symfony/rate-limiter": "^5.2|^6.0" + "symfony/cache": "^6.3|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4|^7.0", + "symfony/mime": "^5.4|^6.0|^7.0", + "symfony/rate-limiter": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -7236,7 +7242,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.3.8" + "source": "https://github.com/symfony/http-foundation/tree/v6.4.0" }, "funding": [ { @@ -7252,29 +7258,29 @@ "type": "tidelift" } ], - "time": "2023-11-07T10:17:15+00:00" + "time": "2023-11-20T16:41:16+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.3.8", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "929202375ccf44a309c34aeca8305408442ebcc1" + "reference": "16a29c453966f29466ad34444ce97970a336f3c8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/929202375ccf44a309c34aeca8305408442ebcc1", - "reference": "929202375ccf44a309c34aeca8305408442ebcc1", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/16a29c453966f29466ad34444ce97970a336f3c8", + "reference": "16a29c453966f29466ad34444ce97970a336f3c8", "shasum": "" }, "require": { "php": ">=8.1", "psr/log": "^1|^2|^3", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/error-handler": "^6.3", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/http-foundation": "^6.3.4", + "symfony/error-handler": "^6.4|^7.0", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^6.4|^7.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { @@ -7282,7 +7288,7 @@ "symfony/cache": "<5.4", "symfony/config": "<6.1", "symfony/console": "<5.4", - "symfony/dependency-injection": "<6.3.4", + "symfony/dependency-injection": "<6.4", "symfony/doctrine-bridge": "<5.4", "symfony/form": "<5.4", "symfony/http-client": "<5.4", @@ -7292,7 +7298,7 @@ "symfony/translation": "<5.4", "symfony/translation-contracts": "<2.5", "symfony/twig-bridge": "<5.4", - "symfony/validator": "<5.4", + "symfony/validator": "<6.4", "symfony/var-dumper": "<6.3", "twig/twig": "<2.13" }, @@ -7301,26 +7307,26 @@ }, "require-dev": { "psr/cache": "^1.0|^2.0|^3.0", - "symfony/browser-kit": "^5.4|^6.0", - "symfony/clock": "^6.2", - "symfony/config": "^6.1", - "symfony/console": "^5.4|^6.0", - "symfony/css-selector": "^5.4|^6.0", - "symfony/dependency-injection": "^6.3.4", - "symfony/dom-crawler": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/finder": "^5.4|^6.0", + "symfony/browser-kit": "^5.4|^6.0|^7.0", + "symfony/clock": "^6.2|^7.0", + "symfony/config": "^6.1|^7.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/css-selector": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/dom-crawler": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/finder": "^5.4|^6.0|^7.0", "symfony/http-client-contracts": "^2.5|^3", - "symfony/process": "^5.4|^6.0", - "symfony/property-access": "^5.4.5|^6.0.5", - "symfony/routing": "^5.4|^6.0", - "symfony/serializer": "^6.3", - "symfony/stopwatch": "^5.4|^6.0", - "symfony/translation": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/property-access": "^5.4.5|^6.0.5|^7.0", + "symfony/routing": "^5.4|^6.0|^7.0", + "symfony/serializer": "^6.3|^7.0", + "symfony/stopwatch": "^5.4|^6.0|^7.0", + "symfony/translation": "^5.4|^6.0|^7.0", "symfony/translation-contracts": "^2.5|^3", - "symfony/uid": "^5.4|^6.0", - "symfony/validator": "^6.3", - "symfony/var-exporter": "^6.2", + "symfony/uid": "^5.4|^6.0|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/var-exporter": "^6.2|^7.0", "twig/twig": "^2.13|^3.0.4" }, "type": "library", @@ -7349,7 +7355,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v6.3.8" + "source": "https://github.com/symfony/http-kernel/tree/v6.4.0" }, "funding": [ { @@ -7365,20 +7371,20 @@ "type": "tidelift" } ], - "time": "2023-11-10T13:47:32+00:00" + "time": "2023-11-29T10:40:15+00:00" }, { "name": "symfony/mailer", - "version": "v6.3.5", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "d89611a7830d51b5e118bca38e390dea92f9ea06" + "reference": "ca8dcf8892cdc5b4358ecf2528429bb5e706f7ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/d89611a7830d51b5e118bca38e390dea92f9ea06", - "reference": "d89611a7830d51b5e118bca38e390dea92f9ea06", + "url": "https://api.github.com/repos/symfony/mailer/zipball/ca8dcf8892cdc5b4358ecf2528429bb5e706f7ba", + "reference": "ca8dcf8892cdc5b4358ecf2528429bb5e706f7ba", "shasum": "" }, "require": { @@ -7386,8 +7392,8 @@ "php": ">=8.1", "psr/event-dispatcher": "^1", "psr/log": "^1|^2|^3", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/mime": "^6.2", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/mime": "^6.2|^7.0", "symfony/service-contracts": "^2.5|^3" }, "conflict": { @@ -7398,10 +7404,10 @@ "symfony/twig-bridge": "<6.2.1" }, "require-dev": { - "symfony/console": "^5.4|^6.0", - "symfony/http-client": "^5.4|^6.0", - "symfony/messenger": "^6.2", - "symfony/twig-bridge": "^6.2" + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/http-client": "^5.4|^6.0|^7.0", + "symfony/messenger": "^6.2|^7.0", + "symfony/twig-bridge": "^6.2|^7.0" }, "type": "library", "autoload": { @@ -7429,7 +7435,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v6.3.5" + "source": "https://github.com/symfony/mailer/tree/v6.4.0" }, "funding": [ { @@ -7445,32 +7451,32 @@ "type": "tidelift" } ], - "time": "2023-09-06T09:47:15+00:00" + "time": "2023-11-12T18:02:22+00:00" }, { "name": "symfony/mailgun-mailer", - "version": "v6.3.6", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/mailgun-mailer.git", - "reference": "8d9741467c53750dc8ccda23a1cdb91cda732571" + "reference": "72d2f72f2016e559d0152188bef5a5dc9ebf5ec7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailgun-mailer/zipball/8d9741467c53750dc8ccda23a1cdb91cda732571", - "reference": "8d9741467c53750dc8ccda23a1cdb91cda732571", + "url": "https://api.github.com/repos/symfony/mailgun-mailer/zipball/72d2f72f2016e559d0152188bef5a5dc9ebf5ec7", + "reference": "72d2f72f2016e559d0152188bef5a5dc9ebf5ec7", "shasum": "" }, "require": { "php": ">=8.1", - "symfony/mailer": "^5.4.21|^6.2.7" + "symfony/mailer": "^5.4.21|^6.2.7|^7.0" }, "conflict": { "symfony/http-foundation": "<6.2" }, "require-dev": { - "symfony/http-client": "^5.4|^6.0", - "symfony/webhook": "^6.3" + "symfony/http-client": "^6.3|^7.0", + "symfony/webhook": "^6.3|^7.0" }, "type": "symfony-mailer-bridge", "autoload": { @@ -7498,7 +7504,7 @@ "description": "Symfony Mailgun Mailer Bridge", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailgun-mailer/tree/v6.3.6" + "source": "https://github.com/symfony/mailgun-mailer/tree/v6.4.0" }, "funding": [ { @@ -7514,20 +7520,20 @@ "type": "tidelift" } ], - "time": "2023-10-12T13:32:47+00:00" + "time": "2023-11-06T17:20:05+00:00" }, { "name": "symfony/mime", - "version": "v6.3.5", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "d5179eedf1cb2946dbd760475ebf05c251ef6a6e" + "reference": "ca4f58b2ef4baa8f6cecbeca2573f88cd577d205" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/d5179eedf1cb2946dbd760475ebf05c251ef6a6e", - "reference": "d5179eedf1cb2946dbd760475ebf05c251ef6a6e", + "url": "https://api.github.com/repos/symfony/mime/zipball/ca4f58b2ef4baa8f6cecbeca2573f88cd577d205", + "reference": "ca4f58b2ef4baa8f6cecbeca2573f88cd577d205", "shasum": "" }, "require": { @@ -7541,16 +7547,16 @@ "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", "symfony/mailer": "<5.4", - "symfony/serializer": "<6.2.13|>=6.3,<6.3.2" + "symfony/serializer": "<6.3.2" }, "require-dev": { "egulias/email-validator": "^2.1.10|^3.1|^4", "league/html-to-markdown": "^5.0", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/property-access": "^5.4|^6.0", - "symfony/property-info": "^5.4|^6.0", - "symfony/serializer": "~6.2.13|^6.3.2" + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/property-access": "^5.4|^6.0|^7.0", + "symfony/property-info": "^5.4|^6.0|^7.0", + "symfony/serializer": "^6.3.2|^7.0" }, "type": "library", "autoload": { @@ -7582,7 +7588,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.3.5" + "source": "https://github.com/symfony/mime/tree/v6.4.0" }, "funding": [ { @@ -7598,7 +7604,7 @@ "type": "tidelift" } ], - "time": "2023-09-29T06:59:36+00:00" + "time": "2023-10-17T11:49:05+00:00" }, { "name": "symfony/polyfill-ctype", @@ -8340,16 +8346,16 @@ }, { "name": "symfony/process", - "version": "v6.3.4", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "0b5c29118f2e980d455d2e34a5659f4579847c54" + "reference": "191703b1566d97a5425dc969e4350d32b8ef17aa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/0b5c29118f2e980d455d2e34a5659f4579847c54", - "reference": "0b5c29118f2e980d455d2e34a5659f4579847c54", + "url": "https://api.github.com/repos/symfony/process/zipball/191703b1566d97a5425dc969e4350d32b8ef17aa", + "reference": "191703b1566d97a5425dc969e4350d32b8ef17aa", "shasum": "" }, "require": { @@ -8381,7 +8387,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.3.4" + "source": "https://github.com/symfony/process/tree/v6.4.0" }, "funding": [ { @@ -8397,20 +8403,20 @@ "type": "tidelift" } ], - "time": "2023-08-07T10:39:22+00:00" + "time": "2023-11-17T21:06:49+00:00" }, { "name": "symfony/routing", - "version": "v6.3.5", + "version": "v6.4.1", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "82616e59acd3e3d9c916bba798326cb7796d7d31" + "reference": "0c95c164fdba18b12523b75e64199ca3503e6d40" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/82616e59acd3e3d9c916bba798326cb7796d7d31", - "reference": "82616e59acd3e3d9c916bba798326cb7796d7d31", + "url": "https://api.github.com/repos/symfony/routing/zipball/0c95c164fdba18b12523b75e64199ca3503e6d40", + "reference": "0c95c164fdba18b12523b75e64199ca3503e6d40", "shasum": "" }, "require": { @@ -8426,11 +8432,11 @@ "require-dev": { "doctrine/annotations": "^1.12|^2", "psr/log": "^1|^2|^3", - "symfony/config": "^6.2", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/http-foundation": "^5.4|^6.0", - "symfony/yaml": "^5.4|^6.0" + "symfony/config": "^6.2|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^5.4|^6.0|^7.0", + "symfony/yaml": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -8464,7 +8470,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.3.5" + "source": "https://github.com/symfony/routing/tree/v6.4.1" }, "funding": [ { @@ -8480,20 +8486,20 @@ "type": "tidelift" } ], - "time": "2023-09-20T16:05:51+00:00" + "time": "2023-12-01T14:54:37+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.3.0", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4" + "reference": "b3313c2dbffaf71c8de2934e2ea56ed2291a3838" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", - "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/b3313c2dbffaf71c8de2934e2ea56ed2291a3838", + "reference": "b3313c2dbffaf71c8de2934e2ea56ed2291a3838", "shasum": "" }, "require": { @@ -8546,7 +8552,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.4.0" }, "funding": [ { @@ -8562,24 +8568,24 @@ "type": "tidelift" } ], - "time": "2023-05-23T14:45:45+00:00" + "time": "2023-07-30T20:28:31+00:00" }, { "name": "symfony/string", - "version": "v6.3.8", + "version": "v7.0.0", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "13880a87790c76ef994c91e87efb96134522577a" + "reference": "92bd2bfbba476d4a1838e5e12168bef2fd1e6620" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/13880a87790c76ef994c91e87efb96134522577a", - "reference": "13880a87790c76ef994c91e87efb96134522577a", + "url": "https://api.github.com/repos/symfony/string/zipball/92bd2bfbba476d4a1838e5e12168bef2fd1e6620", + "reference": "92bd2bfbba476d4a1838e5e12168bef2fd1e6620", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", @@ -8589,11 +8595,11 @@ "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/error-handler": "^5.4|^6.0", - "symfony/http-client": "^5.4|^6.0", - "symfony/intl": "^6.2", + "symfony/error-handler": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^5.4|^6.0" + "symfony/var-exporter": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -8632,7 +8638,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.3.8" + "source": "https://github.com/symfony/string/tree/v7.0.0" }, "funding": [ { @@ -8648,20 +8654,20 @@ "type": "tidelift" } ], - "time": "2023-11-09T08:28:21+00:00" + "time": "2023-11-29T08:40:23+00:00" }, { "name": "symfony/translation", - "version": "v6.3.7", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "30212e7c87dcb79c83f6362b00bde0e0b1213499" + "reference": "b1035dbc2a344b21f8fa8ac451c7ecec4ea45f37" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/30212e7c87dcb79c83f6362b00bde0e0b1213499", - "reference": "30212e7c87dcb79c83f6362b00bde0e0b1213499", + "url": "https://api.github.com/repos/symfony/translation/zipball/b1035dbc2a344b21f8fa8ac451c7ecec4ea45f37", + "reference": "b1035dbc2a344b21f8fa8ac451c7ecec4ea45f37", "shasum": "" }, "require": { @@ -8686,17 +8692,17 @@ "require-dev": { "nikic/php-parser": "^4.13", "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/console": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/finder": "^5.4|^6.0", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/finder": "^5.4|^6.0|^7.0", "symfony/http-client-contracts": "^2.5|^3.0", - "symfony/http-kernel": "^5.4|^6.0", - "symfony/intl": "^5.4|^6.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", + "symfony/intl": "^5.4|^6.0|^7.0", "symfony/polyfill-intl-icu": "^1.21", - "symfony/routing": "^5.4|^6.0", + "symfony/routing": "^5.4|^6.0|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^5.4|^6.0" + "symfony/yaml": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -8727,7 +8733,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.3.7" + "source": "https://github.com/symfony/translation/tree/v6.4.0" }, "funding": [ { @@ -8743,20 +8749,20 @@ "type": "tidelift" } ], - "time": "2023-10-28T23:11:45+00:00" + "time": "2023-11-29T08:14:36+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.3.0", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "02c24deb352fb0d79db5486c0c79905a85e37e86" + "reference": "dee0c6e5b4c07ce851b462530088e64b255ac9c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/02c24deb352fb0d79db5486c0c79905a85e37e86", - "reference": "02c24deb352fb0d79db5486c0c79905a85e37e86", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/dee0c6e5b4c07ce851b462530088e64b255ac9c5", + "reference": "dee0c6e5b4c07ce851b462530088e64b255ac9c5", "shasum": "" }, "require": { @@ -8805,7 +8811,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/translation-contracts/tree/v3.4.0" }, "funding": [ { @@ -8821,20 +8827,20 @@ "type": "tidelift" } ], - "time": "2023-05-30T17:17:10+00:00" + "time": "2023-07-25T15:08:44+00:00" }, { "name": "symfony/uid", - "version": "v6.3.8", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "819fa5ac210fb7ddda4752b91a82f50be7493dd9" + "reference": "8092dd1b1a41372110d06374f99ee62f7f0b9a92" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/819fa5ac210fb7ddda4752b91a82f50be7493dd9", - "reference": "819fa5ac210fb7ddda4752b91a82f50be7493dd9", + "url": "https://api.github.com/repos/symfony/uid/zipball/8092dd1b1a41372110d06374f99ee62f7f0b9a92", + "reference": "8092dd1b1a41372110d06374f99ee62f7f0b9a92", "shasum": "" }, "require": { @@ -8842,7 +8848,7 @@ "symfony/polyfill-uuid": "^1.15" }, "require-dev": { - "symfony/console": "^5.4|^6.0" + "symfony/console": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -8879,7 +8885,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v6.3.8" + "source": "https://github.com/symfony/uid/tree/v6.4.0" }, "funding": [ { @@ -8895,20 +8901,20 @@ "type": "tidelift" } ], - "time": "2023-10-31T08:07:48+00:00" + "time": "2023-10-31T08:18:17+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.3.8", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "81acabba9046550e89634876ca64bfcd3c06aa0a" + "reference": "c40f7d17e91d8b407582ed51a2bbf83c52c367f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/81acabba9046550e89634876ca64bfcd3c06aa0a", - "reference": "81acabba9046550e89634876ca64bfcd3c06aa0a", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/c40f7d17e91d8b407582ed51a2bbf83c52c367f6", + "reference": "c40f7d17e91d8b407582ed51a2bbf83c52c367f6", "shasum": "" }, "require": { @@ -8921,10 +8927,11 @@ }, "require-dev": { "ext-iconv": "*", - "symfony/console": "^5.4|^6.0", - "symfony/http-kernel": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0", - "symfony/uid": "^5.4|^6.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/error-handler": "^6.3|^7.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/uid": "^5.4|^6.0|^7.0", "twig/twig": "^2.13|^3.0.4" }, "bin": [ @@ -8963,7 +8970,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.3.8" + "source": "https://github.com/symfony/var-dumper/tree/v6.4.0" }, "funding": [ { @@ -8979,7 +8986,7 @@ "type": "tidelift" } ], - "time": "2023-11-08T10:42:36+00:00" + "time": "2023-11-09T08:28:32+00:00" }, { "name": "team-reflex/challonge-php", @@ -10081,16 +10088,16 @@ }, { "name": "phpunit/php-code-coverage", - "version": "10.1.7", + "version": "10.1.9", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "355324ca4980b8916c18b9db29f3ef484078f26e" + "reference": "a56a9ab2f680246adcf3db43f38ddf1765774735" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/355324ca4980b8916c18b9db29f3ef484078f26e", - "reference": "355324ca4980b8916c18b9db29f3ef484078f26e", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/a56a9ab2f680246adcf3db43f38ddf1765774735", + "reference": "a56a9ab2f680246adcf3db43f38ddf1765774735", "shasum": "" }, "require": { @@ -10147,7 +10154,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.7" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.9" }, "funding": [ { @@ -10155,7 +10162,7 @@ "type": "github" } ], - "time": "2023-10-04T15:34:17+00:00" + "time": "2023-11-23T12:23:20+00:00" }, { "name": "phpunit/php-file-iterator", @@ -10402,16 +10409,16 @@ }, { "name": "phpunit/phpunit", - "version": "10.4.2", + "version": "10.5.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "cacd8b9dd224efa8eb28beb69004126c7ca1a1a1" + "reference": "d5d9dca6a902d05b34c4bcbc7c1636ce1dc25408" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/cacd8b9dd224efa8eb28beb69004126c7ca1a1a1", - "reference": "cacd8b9dd224efa8eb28beb69004126c7ca1a1a1", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/d5d9dca6a902d05b34c4bcbc7c1636ce1dc25408", + "reference": "d5d9dca6a902d05b34c4bcbc7c1636ce1dc25408", "shasum": "" }, "require": { @@ -10451,7 +10458,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "10.4-dev" + "dev-main": "10.5-dev" } }, "autoload": { @@ -10483,7 +10490,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/10.4.2" + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.1" }, "funding": [ { @@ -10499,7 +10506,7 @@ "type": "tidelift" } ], - "time": "2023-10-26T07:21:45+00:00" + "time": "2023-12-01T16:57:05+00:00" }, { "name": "sebastian/cli-parser", @@ -11475,16 +11482,16 @@ }, { "name": "symfony/dom-crawler", - "version": "v6.3.4", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "3fdd2a3d5fdc363b2e8dbf817f9726a4d013cbd1" + "reference": "14ff4fd2a5c8969d6158dbe7ef5b17d6a9c6ba33" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/3fdd2a3d5fdc363b2e8dbf817f9726a4d013cbd1", - "reference": "3fdd2a3d5fdc363b2e8dbf817f9726a4d013cbd1", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/14ff4fd2a5c8969d6158dbe7ef5b17d6a9c6ba33", + "reference": "14ff4fd2a5c8969d6158dbe7ef5b17d6a9c6ba33", "shasum": "" }, "require": { @@ -11494,7 +11501,7 @@ "symfony/polyfill-mbstring": "~1.0" }, "require-dev": { - "symfony/css-selector": "^5.4|^6.0" + "symfony/css-selector": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -11522,7 +11529,7 @@ "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v6.3.4" + "source": "https://github.com/symfony/dom-crawler/tree/v6.4.0" }, "funding": [ { @@ -11538,20 +11545,20 @@ "type": "tidelift" } ], - "time": "2023-08-01T07:43:40+00:00" + "time": "2023-11-20T16:41:16+00:00" }, { "name": "theseer/tokenizer", - "version": "1.2.1", + "version": "1.2.2", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b2ad5003ca10d4ee50a12da31de12a5774ba6b96", + "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96", "shasum": "" }, "require": { @@ -11580,7 +11587,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + "source": "https://github.com/theseer/tokenizer/tree/1.2.2" }, "funding": [ { @@ -11588,7 +11595,7 @@ "type": "github" } ], - "time": "2021-07-28T10:34:58+00:00" + "time": "2023-11-20T00:12:19+00:00" } ], "aliases": [], diff --git a/src/database/seeders/TestCs2MatchMakingSeeder.php b/src/database/seeders/TestCs2MatchMakingSeeder.php new file mode 100644 index 000000000..a3eaafbb5 --- /dev/null +++ b/src/database/seeders/TestCs2MatchMakingSeeder.php @@ -0,0 +1,114 @@ + Game::where('name', 'Counter-Strike 2')->first()->id, + 'team_size' => 1, + 'team_count' => 2, + 'status' => $status, + 'owner_id' => $playeroneid, + 'invite_tag' => "match_" . Str::random(), + 'ispublic' => true, + ] + ); + if (!$mm->save()) { + throw new \Exception("could not save matchmaking"); + } + + $team1 = new MatchMakingTeam(); + $team1->name = "team1"; + $team1->team_owner_id = $playeroneid; + $team1->team_invite_tag = "team_" . Str::random(); + $team1->match_id = $mm->id; + if (!$team1->save()) { + + throw new \Exception("could not save team1"); + } + + $teamplayerone = new MatchMakingTeamPlayer(); + $teamplayerone->matchmaking_team_id = $team1->id; + $teamplayerone->user_id = $playeroneid; + if (!$teamplayerone->save()) { + + throw new \Exception("could not save teamplayerone"); + } + + + $team2 = new MatchMakingTeam(); + $team2->name = "team2"; + $team2->team_owner_id = $playertwoid; + $team2->team_invite_tag = "team_" . Str::random(); + $team2->match_id = $mm->id; + if (!$team2->save()) { + + throw new \Exception("could not save team2"); + } + + $teamplayertwo = new MatchMakingTeamPlayer(); + $teamplayertwo->matchmaking_team_id = $team2->id; + $teamplayertwo->user_id = $playertwoid; + if (!$teamplayertwo->save()) { + + throw new \Exception("could not save teamplayertwo"); + } + + + for ($i = 1; $i <= $democount; $i++) { + + $demoname = "demo_" . strval($mm->id) . "_" . strval($i) . ".demo"; + + $destinationPathDemo = MatchReplay::createReplayPath(Game::where('name', 'Counter-Strike 2')->first(), $demoname); + + if (Storage::disk('public')->put($destinationPathDemo, random_bytes(2048)) == false) { + throw new \Exception("could not save demo file"); + } + + $replay = new MatchReplay(); + $replay->name = $demoname; + $replay->matchmaking_id = $mm->id; + if (!$replay->save()) { + throw new \Exception("could not save demo"); + } + } + } +} diff --git a/src/database/seeders/TestTournamentDemoSeeder.php b/src/database/seeders/TestTournamentDemoSeeder.php new file mode 100644 index 000000000..2a80105c1 --- /dev/null +++ b/src/database/seeders/TestTournamentDemoSeeder.php @@ -0,0 +1,57 @@ +first(), $demoname); + + if (Storage::disk('public')->put($destinationPathDemo, random_bytes(2048)) == false) { + throw new \Exception("could not save demo file"); + } + + $replay = new MatchReplay(); + $replay->name = $demoname; + $replay->challonge_match_id = $challongematchid; + if (!$replay->save()) { + throw new \Exception("could not save demo"); + } + } + } +} diff --git a/src/lang/de/matchmaking.php b/src/lang/de/matchmaking.php index 2aa4c945d..707e3f852 100644 --- a/src/lang/de/matchmaking.php +++ b/src/lang/de/matchmaking.php @@ -109,6 +109,8 @@ 'cannotdeletematchnotowner' => 'Du kannst das Match nicht löschen da du nicht der Eigentümer bist!', 'cannotdeleteplayers' => 'Teamplayer konnten nicht gelöscht werden!', 'cannotdeleteteams' => 'Teams konnten nicht gelöscht werden!', + 'cannotdeletereplays' => 'Repalys konnten nicht gelöscht werden!', + 'cannotdeletereplayfiles' => 'Repaly Dateien konnten nicht gelöscht werden!', 'cannotdeletematch' => 'Match konnte nicht gelöscht werden!', 'successfullydeletedmatch' => 'Das Match wurde erfolgreich gelöscht!', 'cannotstartmatchnotowner' => 'Du kannst das Match nicht starten da du nicht der Eigentümer bist!', diff --git a/src/lang/en/matchmaking.php b/src/lang/en/matchmaking.php index 64b984e58..2726d6248 100644 --- a/src/lang/en/matchmaking.php +++ b/src/lang/en/matchmaking.php @@ -113,6 +113,8 @@ 'cannotdeletematchnotowner' => 'Cannot delete Match because you are not the owner!', 'cannotdeleteplayers' => 'Cannot delete Players!', 'cannotdeleteteams' => 'Cannot delete Teams!', + 'cannotdeletereplays' => 'Cannot delete Replays!', + 'cannotdeletereplayfiles' => 'Cannot delete Replay files!', 'cannotdeletematch' => 'Cannot delete Match!', 'successfullydeletedmatch' => 'Successfully deleted Match!', 'cannotstartmatchnotowner' => 'Cannot start Match because you are not the owner!', diff --git a/src/package-lock.json b/src/package-lock.json index 6bc1d119a..07933b1f1 100644 --- a/src/package-lock.json +++ b/src/package-lock.json @@ -1,11 +1,11 @@ { - "name": "app", + "name": "src", "lockfileVersion": 3, "requires": true, "packages": { "": { "dependencies": { - "@fortawesome/fontawesome-free": "6.4.2", + "@fortawesome/fontawesome-free": "6.5.1", "@popperjs/core": "2.11.8", "bootstrap": "5.3.2", "jquery": "3.7.1", @@ -18,7 +18,7 @@ "dns-packet": "5.6.1", "laravel-mix": "6.0.49", "laravel-mix-purgecss": "6.0.0", - "postcss": "8.4.31", + "postcss": "8.4.32", "resolve-url-loader": "5.0.0", "sass": "1.69.5", "sass-loader": "13.3.2", @@ -1914,9 +1914,9 @@ } }, "node_modules/@fortawesome/fontawesome-free": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.4.2.tgz", - "integrity": "sha512-m5cPn3e2+FDCOgi1mz0RexTUvvQibBebOUlUlW0+YrMjDTPkiJ6VTKukA1GRsvRw+12KyJndNjj0O4AgTxm2Pg==", + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.5.1.tgz", + "integrity": "sha512-CNy5vSwN3fsUStPRLX7fUYojyuzoEMSXPl7zSLJ8TgtRfjv24LOnOWKT2zYwaHZCJGkdyRnTmstR0P+Ah503Gw==", "hasInstallScript": true, "engines": { "node": ">=6" @@ -6276,9 +6276,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", "dev": true, "funding": [ { @@ -6782,9 +6782,9 @@ } }, "node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "version": "8.4.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", + "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", "dev": true, "funding": [ { @@ -6801,7 +6801,7 @@ } ], "dependencies": { - "nanoid": "^3.3.6", + "nanoid": "^3.3.7", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, diff --git a/src/package.json b/src/package.json index eb3c5b3ca..ed7b1d4a5 100644 --- a/src/package.json +++ b/src/package.json @@ -11,14 +11,14 @@ "dns-packet": "5.6.1", "laravel-mix": "6.0.49", "laravel-mix-purgecss": "6.0.0", - "postcss": "8.4.31", + "postcss": "8.4.32", "resolve-url-loader": "5.0.0", "sass": "1.69.5", "sass-loader": "13.3.2", "vue-template-compiler": "2.7.15" }, "dependencies": { - "@fortawesome/fontawesome-free": "6.4.2", + "@fortawesome/fontawesome-free": "6.5.1", "bootstrap": "5.3.2", "jquery": "3.7.1", "jquery-ui-dist": "1.13.2", diff --git a/src/resources/views/layouts/_partials/_tournaments/brackets.blade.php b/src/resources/views/layouts/_partials/_tournaments/brackets.blade.php index 19ba5090b..aeb07e0df 100644 --- a/src/resources/views/layouts/_partials/_tournaments/brackets.blade.php +++ b/src/resources/views/layouts/_partials/_tournaments/brackets.blade.php @@ -348,6 +348,7 @@ class="btn btn-sm @if (isset($tournament->match_autoapi) && $tournament->match_a {{ Form::open(array('url'=>'/admin/replays/'. $matchReplay->id , 'onsubmit' => 'return ConfirmDelete()')) }} {{ Form::hidden('_method', 'DELETE') }} + {{ Form::hidden('game', $tournament->game->id) }} {{ Form::close() }}