OsTemplateSelect.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. <?php
  2. namespace ModulesGarden\Servers\ProxmoxCloudVps\App\UI\VmClone\Fields;
  3. use MGProvision\Proxmox\v2\repository\ClusterResourcesRepository;
  4. use MGProvision\Proxmox\v2\repository\FileRepository;
  5. use MGProvision\Proxmox\v2\repository\StorageRepository;
  6. use ModulesGarden\ProxmoxAddon\App\Services\ApiService;
  7. use ModulesGarden\ProxmoxAddon\App\Models\VmModel;
  8. use ModulesGarden\ProxmoxAddon\App\Services\Cloud\ProductService;
  9. use ModulesGarden\ProxmoxAddon\Core\Helper\AdvancedUserHelper;
  10. use ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Interfaces\ClientArea;
  11. use ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Widget\Forms\AjaxFields\Select;
  12. use function ModulesGarden\Servers\ProxmoxCloudVps\Core\Helper\sl;
  13. class OsTemplateSelect extends Select implements ClientArea {
  14. use ProductService;
  15. use ApiService;
  16. public function prepareAjaxData() {
  17. session_write_close();
  18. $advancedUser = new AdvancedUserHelper($this->getWhmcsParamByKey('userid'));
  19. if ($this->configuration()->isQemu()) {
  20. $this->loadQemuTemplates();
  21. /* if ($advancedUser->isAdvanced() || $this->configuration()->isPermissionIsoImage())
  22. {
  23. $this->availableValues[] = [
  24. "key" => 'installationFromIso',
  25. "value" => sl('lang')->abtr('Installation From ISO'),
  26. ];
  27. }
  28. if($this->availableValues[0]['key']=="installationFromIso"){
  29. $this->callBackFunction = 'pcOsTemplateLoadShowIsoFields';
  30. } */
  31. }
  32. if ($this->configuration()->isLxc()) {
  33. $this->loadLxcTemplates();
  34. }
  35. if($this->availableValues[0]['key']){
  36. $this->value = $this->availableValues[0]['key'];
  37. }
  38. $this->data['additionalData']['showItemDescription'] = true;
  39. }
  40. private function defaultNode() {
  41. if ($this->getRequestValue('location')) {
  42. return $this->getRequestValue('location');
  43. } else {
  44. return $this->getNode()->getNode();
  45. }
  46. }
  47. private function loadQemuTemplates() {
  48. $vmTemplate = (new VmModel)->ofId($this->getRequestValue('vm', false))->firstOrFail();
  49. $id = "{$vmTemplate->node}/{$vmTemplate->vmid}";
  50. $name = $vmTemplate->name;
  51. $description = $vmTemplate->description;
  52. if(!$description){
  53. $description = $vmTemplate->name;
  54. }
  55. $description = str_replace('\n','<br />', $description);
  56. $desc = sl('lang')->abtr('template_desc',$description );
  57. $desc = nl2br($desc);
  58. $this->availableValues[] = [
  59. "key" => $id,
  60. "value" => $name,
  61. 'description' => $name != $desc ? $desc : null,
  62. ];
  63. }
  64. private function loadLxcTemplates() {
  65. $defaultNode = $this->defaultNode();
  66. $storageRepository = new StorageRepository();
  67. $storageRepository->findByNodes([$defaultNode])->findEnabed();
  68. $fileRepository = new FileRepository();
  69. $fileRepository->setApi($this->api());
  70. $fileRepository->findLxcTemplates();
  71. $fileRepository->findByNodes([$defaultNode]);
  72. $fileRepository->findByStorages($storageRepository->fetchAsArray());
  73. foreach ($fileRepository->fetch() as $file) {
  74. if ($this->configuration()->isPermissionOsTemplates() && !in_array($file->getVolid(), $this->configuration()->getPermissionOsTemplates())) {
  75. continue;
  76. }
  77. $this->availableValues[] = [
  78. "key" => $file->getVolid(),
  79. "value" => sl('lang')->abtr('template', $file->getFriendlyName()),
  80. ];
  81. }
  82. }
  83. }