IpSelect.php 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. <?php
  2. namespace ModulesGarden\Servers\ProxmoxCloudVps\App\UI\VirtualInterface\Fields;
  3. use ModulesGarden\ProxmoxAddon\App\Models\VirtualNetwork;
  4. use ModulesGarden\ProxmoxAddon\App\Models\VmIpAddress;
  5. use ModulesGarden\ProxmoxAddon\App\Services\Ip\Ipv4Range;
  6. use ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Interfaces\ClientArea;
  7. use ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Widget\Forms\AjaxFields\Select;
  8. class IpSelect extends Select implements ClientArea
  9. {
  10. protected $id = 'ipSelect';
  11. protected $name = 'ip';
  12. public function prepareAjaxData()
  13. {
  14. session_write_close();
  15. $vnId = $this->getRequestValue('formData')['vn_id'];
  16. if(!$vnId || $vnId=='public'){
  17. foreach (VmIpAddress::ofHostingId($this->getWhmcsParamByKey('serviceid'))->ofVmIdNull()->get() as $ip)
  18. {
  19. if(!$this->getValue()){
  20. $this->setSelectedValue($ip->ip);
  21. }
  22. $this->availableValues[]=['key' => $ip->ip, 'value' => $ip->ip];
  23. }
  24. return;
  25. }
  26. /**
  27. * @var VirtualNetwork $virtualNetwork
  28. */
  29. $virtualNetwork = VirtualNetwork::ofHostingId($this->getWhmcsParamByKey('serviceid'))
  30. ->ofId($vnId)
  31. ->firstOrFail();
  32. $ipRange = new Ipv4Range($virtualNetwork->pool, $virtualNetwork->cidr);
  33. $ipRange->setLimit(200);
  34. $ipRange->disableIpAddresses( $virtualNetwork ->virtualInterfaces->pluck('ip')->toArray());
  35. foreach ( $ipRange->get() as $ip ){
  36. if(!$this->getValue()){
  37. $this->setSelectedValue($ip);
  38. }
  39. $this->availableValues[]=['key' => $ip, 'value' => $ip];
  40. }
  41. ;
  42. }
  43. }