22
33namespace Pterodactyl \Http \Controllers \Admin \Servers ;
44
5- use Illuminate \Bus \Dispatcher ;
65use Illuminate \Http \Request ;
76use Prologue \Alerts \AlertsMessageBag ;
7+ use Pterodactyl \Contracts \Repository \AllocationRepositoryInterface ;
88use Pterodactyl \Http \Controllers \Controller ;
99use Pterodactyl \Models \Server ;
10+ use Pterodactyl \Models \ServerTransfer ;
1011use Pterodactyl \Repositories \Eloquent \ServerRepository ;
1112use Pterodactyl \Repositories \Eloquent \LocationRepository ;
1213use Pterodactyl \Repositories \Eloquent \NodeRepository ;
@@ -21,9 +22,9 @@ class ServerTransferController extends Controller
2122 private $ alert ;
2223
2324 /**
24- * @var \Illuminate\Bus\Dispatcher
25+ * @var \Pterodactyl\Contracts\Repository\AllocationRepositoryInterface
2526 */
26- private $ dispatcher ;
27+ private $ allocationRepository ;
2728
2829 /**
2930 * @var \Pterodactyl\Repositories\Eloquent\ServerRepository
@@ -54,7 +55,7 @@ class ServerTransferController extends Controller
5455 * ServerTransferController constructor.
5556 *
5657 * @param \Prologue\Alerts\AlertsMessageBag $alert
57- * @param \Illuminate\Bus\Dispatcher $dispatcher
58+ * @param \Pterodactyl\Contracts\Repository\AllocationRepositoryInterface $allocationRepository,
5859 * @param \Pterodactyl\Repositories\Eloquent\ServerRepository $repository
5960 * @param \Pterodactyl\Repositories\Eloquent\LocationRepository $locationRepository
6061 * @param \Pterodactyl\Repositories\Eloquent\NodeRepository $nodeRepository
@@ -63,15 +64,15 @@ class ServerTransferController extends Controller
6364 */
6465 public function __construct (
6566 AlertsMessageBag $ alert ,
66- Dispatcher $ dispatcher ,
67+ AllocationRepositoryInterface $ allocationRepository ,
6768 ServerRepository $ repository ,
6869 LocationRepository $ locationRepository ,
6970 NodeRepository $ nodeRepository ,
7071 SuspensionService $ suspensionService ,
7172 TransferService $ transferService
7273 ) {
7374 $ this ->alert = $ alert ;
74- $ this ->dispatcher = $ dispatcher ;
75+ $ this ->allocationRepository = $ allocationRepository ;
7576 $ this ->repository = $ repository ;
7677 $ this ->locationRepository = $ locationRepository ;
7778 $ this ->nodeRepository = $ nodeRepository ;
@@ -97,12 +98,26 @@ public function transfer(Request $request, Server $server)
9798 ]);
9899
99100 $ node_id = $ validatedData ['node_id ' ];
100- $ allocation_id = $ validatedData ['allocation_id ' ];
101- $ additional_allocations = $ validatedData ['allocation_additional ' ] ?? [];
101+ $ allocation_id = intval ( $ validatedData ['allocation_id ' ]) ;
102+ $ additional_allocations = array_map ( ' intval ' , $ validatedData ['allocation_additional ' ] ?? []) ;
102103
103104 // Check if the node is viable for the transfer.
104105 $ node = $ this ->nodeRepository ->getNodeWithResourceUsage ($ node_id );
105106 if ($ node ->isViable ($ server ->memory , $ server ->disk )) {
107+ //$this->assignAllocationsToServer($server, $node_id, $allocation_id, $additional_allocations);
108+
109+ /*$transfer = new ServerTransfer;
110+
111+ $transfer->server_id = $server->id;
112+ $transfer->old_node = $server->node_id;
113+ $transfer->new_node = $node_id;
114+ $transfer->old_allocation = $server->allocation_id;
115+ $transfer->new_allocation = $allocation_id;
116+ $transfer->old_additional_allocations = json_encode($server->allocations->where('id', '!=', $server->allocation_id)->pluck('id'));
117+ $transfer->new_additional_allocations = json_encode($additional_allocations);
118+
119+ $transfer->save();*/
120+
106121 // Suspend the server and request an archive to be created.
107122 // $this->suspensionService->toggle($server, 'suspend');
108123 $ this ->transferService ->requestArchive ($ server );
@@ -114,4 +129,25 @@ public function transfer(Request $request, Server $server)
114129
115130 return redirect ()->route ('admin.servers.view.manage ' , $ server ->id );
116131 }
132+
133+ private function assignAllocationsToServer (Server $ server , int $ node_id , int $ allocation_id , array $ additional_allocations )
134+ {
135+ $ allocations = $ additional_allocations ;
136+ array_push ($ allocations , $ allocation_id );
137+
138+ $ unassigned = $ this ->allocationRepository ->getUnassignedAllocationIds ($ node_id );
139+
140+ $ updateIds = [];
141+ foreach ($ allocations as $ allocation ) {
142+ if (! in_array ($ allocation , $ unassigned )) {
143+ continue ;
144+ }
145+
146+ $ updateIds [] = $ allocation ;
147+ }
148+
149+ if (! empty ($ updateIds )) {
150+ $ this ->allocationRepository ->updateWhereIn ('id ' , $ updateIds , ['server_id ' => $ server ->id ]);
151+ }
152+ }
117153}
0 commit comments