UpdateProvider.php 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. <?php
  2. /* * ********************************************************************
  3. * ProxmoxVPS Product developed. (27.03.19)
  4. * *
  5. *
  6. * CREATED BY MODULESGARDEN -> http://modulesgarden.com
  7. * CONTACT -> contact@modulesgarden.com
  8. *
  9. *
  10. * This software is furnished under a license and may be used and copied
  11. * only in accordance with the terms of such license and with the
  12. * inclusion of the above copyright notice. This software or any other
  13. * copies thereof may not be provided or otherwise made available to any
  14. * other person. No title to and ownership of the software is hereby
  15. * transferred.
  16. *
  17. *
  18. * ******************************************************************** */
  19. namespace ModulesGarden\Servers\ProxmoxCloudVps\App\UI\ServiceInformation\Providers;
  20. use MGProvision\Proxmox\v2\models\Kvm;
  21. use MGProvision\Proxmox\v2\models\Lxc;
  22. use ModulesGarden\ProxmoxAddon\App\Services\ApiService;
  23. use ModulesGarden\ProxmoxAddon\App\Services\Cloud\HostingService;
  24. use ModulesGarden\ProxmoxAddon\App\Services\Cloud\ProductService;
  25. use ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Interfaces\ClientArea;
  26. use ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\ResponseTemplates\HtmlDataJsonResponse;
  27. use ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Widget\Forms\DataProviders\BaseDataProvider;
  28. use function ModulesGarden\Servers\ProxmoxCloudVps\Core\Helper\isAdmin;
  29. use function ModulesGarden\Servers\ProxmoxCloudVps\Core\Helper\sl;
  30. class UpdateProvider extends BaseDataProvider implements ClientArea
  31. {
  32. use ApiService;
  33. use ProductService;
  34. use HostingService;
  35. public function read()
  36. {
  37. $vm = \ModulesGarden\ProxmoxAddon\Core\Helper\sl('Vm')->getVm();
  38. if ($vm instanceof Kvm)
  39. {
  40. //hostname
  41. $this->data['hostname'] = $vm->config()['name'];
  42. //ISO
  43. if(isAdmin() || $this->configuration()->isPermissionIsoImage()){
  44. $this->data['iso'] = $vm->cdrom()['isoRaw'];
  45. $this->availableValues['iso'] = ["none" => sl("lang")->abtr("template", "None")];
  46. foreach ($this->isoRepository()->fetch() as $file)
  47. {
  48. if ($this->configuration()->isPermissionIsoImages() && !in_array($file->getVolid(), $this->configuration()->getPermissionIsoImages()))
  49. {
  50. continue;
  51. }
  52. $this->availableValues['iso'][$file->getVolid()] = sl("lang")->abtr("template", $file->getFriendlyName());
  53. }
  54. }
  55. //Boot order
  56. $bootOrder = $vm->getBootOrder();
  57. $this->data['bootOrder0'] = $bootOrder[0];
  58. $this->data['bootOrder1'] = $bootOrder[1];
  59. $this->data['bootOrder2'] = $bootOrder[2];
  60. $options = [
  61. 0 => sl("lang")->tr("None"),
  62. "c" => sl("lang")->tr("Disk"),
  63. "d" => sl("lang")->tr("CD-ROM"),
  64. "n" => sl("lang")->tr("Network"),
  65. ];
  66. $this->availableValues['bootOrder0'] = $options;
  67. $this->availableValues['bootOrder1'] = $options;
  68. $this->availableValues['bootOrder2'] = $options;
  69. //sshkeys
  70. $this->data['sshkeys'] = rawurldecode($vm->config()['sshkeys']);
  71. }
  72. else
  73. {
  74. if ($vm instanceof Lxc)
  75. {
  76. //hostname
  77. $this->data['hostname'] = $vm->config()['hostname'];
  78. }
  79. }
  80. }
  81. public function update()
  82. {
  83. $vm = \ModulesGarden\ProxmoxAddon\Core\Helper\sl('Vm')->getVm();
  84. $vmModel = \ModulesGarden\ProxmoxAddon\Core\Helper\sl('Vm')->getVmModel();
  85. if ($vm instanceof Kvm)
  86. {
  87. //Hostname
  88. $vmModel->name = $this->formData['hostname'];
  89. $vm->updateConfig(["name" => $this->formData['hostname']]);
  90. $vmModel->save();
  91. //iso
  92. if ($vm->cdrom())
  93. {
  94. $vm->updateCdrom($this->formData['iso']);
  95. }
  96. //Boot order
  97. $bootOrder = null;
  98. for ($i = 0; $i <= 2; $i++)
  99. {
  100. if ($this->formData['bootOrder' . $i])
  101. {
  102. $bootOrder .= $this->formData['bootOrder' . $i];
  103. }
  104. }
  105. $vm->changeBootOrder($bootOrder);
  106. //sshkeys
  107. if($this->configuration()->isPermissionSshkeys()){
  108. if ($this->formData['sshkeys'])
  109. {
  110. $vm->updateConfig(["sshkeys" => rawurlencode($this->formData['sshkeys'])]);
  111. } else if($vm->config()['sshkeys'])
  112. {
  113. $vm->deleteConfig('sshkeys');
  114. }
  115. }
  116. }
  117. else
  118. {
  119. if ($vm instanceof Lxc)
  120. {
  121. //Hostname
  122. $vmModel->name = $this->formData['hostname'];
  123. $vm->updateConfig(["hostname" => $this->formData['hostname']]);
  124. $vmModel->save();
  125. }
  126. }
  127. return (new HtmlDataJsonResponse())
  128. ->setStatusSuccess()
  129. ->setMessageAndTranslate('Service information has been changed')
  130. ->addRefreshTargetId('serviceInformationDataTable');
  131. }
  132. }