SnapshotTrait.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. <?php
  2. namespace ModulesGarden\Servers\ProxmoxCloudVps\App\UI\Snapshot\Pages;
  3. use MGProvision\Proxmox\v2\models\Kvm;
  4. use MGProvision\Proxmox\v2\repository\SnapshotRepository;
  5. use ModulesGarden\ProxmoxAddon\App\Services\ApiService;
  6. use ModulesGarden\ProxmoxAddon\App\Services\Cloud\ProductService;
  7. use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\Snapshot\Buttons\CreateButton;
  8. use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\Snapshot\Buttons\DeleteButton;
  9. use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\Snapshot\Buttons\DeleteMassButton;
  10. use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\Snapshot\Buttons\RollbackButton;
  11. use ModulesGarden\Servers\ProxmoxCloudVps\App\UI\Snapshot\Buttons\UpdateButton;
  12. use ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Widget\DataTable\Column;
  13. use ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Widget\DataTable\DataProviders\Providers\ArrayDataProvider;
  14. use function ModulesGarden\Servers\ProxmoxCloudVps\Core\Helper\sl;
  15. trait SnapshotTrait
  16. {
  17. use ApiService;
  18. use ProductService;
  19. /**
  20. * @var SnapshotRepository
  21. */
  22. private $snapshotRepository;
  23. public function initContent()
  24. {
  25. //Create
  26. $createButton = new CreateButton();
  27. $createButton->addClass("pmCreateSnapshotButton");
  28. if (!$this->resourceGuard()->hasSnapshotLimit())
  29. {
  30. $createButton->addClass("hidden");
  31. }
  32. $this->unsetShowTitle();
  33. $this->addButton($createButton);
  34. //rollback
  35. $this->addActionButton(new RollbackButton());
  36. //Update
  37. $this->addActionButton(new UpdateButton());
  38. //Delete
  39. $this->addActionButton(new DeleteButton());
  40. //Mass delete
  41. $this->addMassActionButton(new DeleteMassButton());
  42. $this->snapshotRepository = new SnapshotRepository();
  43. }
  44. protected function loadHtml()
  45. {
  46. $vm = \ModulesGarden\ProxmoxAddon\Core\Helper\sl('Vm')->getVm();
  47. $this->addColumn((new Column('name'))->setSearchable(true, "string")->setOrderable())
  48. ->addColumn((new Column('status'))->setSearchable(true, "string")->setOrderable());
  49. if ($vm instanceof Kvm)
  50. {
  51. $this->addColumn((new Column('vmstate'))->setSearchable(true)->setOrderable());
  52. }
  53. $this->addColumn((new Column('snaptime'))->setSearchable(true, "date")->setOrderable('DESC'))
  54. ->addColumn((new Column('description'))->setSearchable(true)->setOrderable());
  55. }
  56. public function replaceFieldStatus($key, $row)
  57. {
  58. //current
  59. if ($this->snapshotRepository->getCurrent()->getParent() == $row['name'])
  60. {
  61. return '<span class="lu-label lu-label--success lu-label--status">' . sl('lang')->tr("Active") . '</span>';
  62. }
  63. return '<span class="lu-label lu-label--danger lu-label--status">' . sl('lang')->tr("Disabled") . '</span>';
  64. }
  65. public function replaceFieldVmstate($key, $row)
  66. {
  67. if ($row['vmstate'] == "1")
  68. {
  69. return '<span class="lu-label lu-label--success lu-label--status">' . sl('lang')->tr("Yes") . '</span>';
  70. }
  71. return '<span class="lu-label lu-label--danger lu-label--status">' . sl('lang')->tr("No") . '</span>';
  72. }
  73. public function replaceFieldSnaptime($key, $row)
  74. {
  75. return date('Y-m-d H:i:s', $row[$key]);
  76. }
  77. public function replaceFieldDescription($key, $row)
  78. {
  79. if ($row['description'])
  80. {
  81. return $row['description'];
  82. }
  83. return '-';
  84. }
  85. protected function loadData()
  86. {
  87. $vm = \ModulesGarden\ProxmoxAddon\Core\Helper\sl('Vm')->getVm();
  88. $this->snapshotRepository->setApi($this->api());
  89. $this->snapshotRepository->findByVm($vm);
  90. $this->snapshotRepository->ignoreCurrent(true);
  91. $data = [];
  92. foreach ($this->snapshotRepository->fetch() as $entity)
  93. {
  94. $row = $entity->getAttributes();
  95. $data[] = array_merge(['id' => base64_encode(json_encode($row))], $row);
  96. }
  97. $dataProv = new ArrayDataProvider();
  98. $dataProv->setDefaultSorting("snaptime", 'DESC');
  99. $dataProv->setData($data);
  100. $this->setDataProvider($dataProv);
  101. }
  102. }