SnapshotTrait.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. <?php
  2. namespace ModulesGarden\Servers\ProxmoxVps\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\Vps\ProductService;
  7. use ModulesGarden\Servers\ProxmoxVps\App\UI\Snapshot\Buttons\CreateButton;
  8. use ModulesGarden\Servers\ProxmoxVps\App\UI\Snapshot\Buttons\DeleteButton;
  9. use ModulesGarden\Servers\ProxmoxVps\App\UI\Snapshot\Buttons\DeleteMassButton;
  10. use ModulesGarden\Servers\ProxmoxVps\App\UI\Snapshot\Buttons\RollbackButton;
  11. use ModulesGarden\Servers\ProxmoxVps\App\UI\Snapshot\Buttons\UpdateButton;
  12. use ModulesGarden\Servers\ProxmoxVps\Core\UI\Widget\DataTable\Column;
  13. use ModulesGarden\Servers\ProxmoxVps\Core\UI\Widget\DataTable\DataProviders\Providers\ArrayDataProvider;
  14. use function ModulesGarden\Servers\ProxmoxVps\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("pmCreateButton");
  28. if (!$this->resourceGuard()->hasSnapshotLimit())
  29. {
  30. $createButton->addClass("hidden");
  31. }
  32. $this->addButton($createButton);
  33. //rollback
  34. $this->addActionButton(new RollbackButton());
  35. //Update
  36. $this->addActionButton(new UpdateButton());
  37. //Delete
  38. $this->addActionButton(new DeleteButton());
  39. //Mass delete
  40. $this->addMassActionButton(new DeleteMassButton());
  41. $this->snapshotRepository = new SnapshotRepository();
  42. }
  43. protected function loadHtml()
  44. {
  45. $this->addColumn((new Column('name'))->setSearchable(true, "string")->setOrderable())
  46. ->addColumn((new Column('status'))->setSearchable(true, "string")->setOrderable());
  47. if ($this->vm() instanceof Kvm)
  48. {
  49. $this->addColumn((new Column('vmstate'))->setSearchable(true)->setOrderable());
  50. }
  51. $this->addColumn((new Column('snaptime'))->setSearchable(true, "date")->setOrderable('DESC'))
  52. ->addColumn((new Column('description'))->setSearchable(true)->setOrderable());
  53. }
  54. public function replaceFieldStatus($key, $row)
  55. {
  56. //current
  57. if ($this->snapshotRepository->getCurrent()->getParent() == $row['name'])
  58. {
  59. return '<span class="lu-label lu-label--success lu-label--status">' . sl('lang')->tr("Active") . '</span>';
  60. }
  61. return '<span class="lu-label lu-label--danger lu-label--status">' . sl('lang')->tr("Disabled") . '</span>';
  62. }
  63. public function replaceFieldVmstate($key, $row)
  64. {
  65. if ($row['vmstate'] == "1")
  66. {
  67. return '<span class="lu-label lu-label--success lu-label--status">' . sl('lang')->tr("Yes") . '</span>';
  68. }
  69. return '<span class="lu-label lu-label--danger lu-label--status">' . sl('lang')->tr("No") . '</span>';
  70. }
  71. public function replaceFieldSnaptime($key, $row)
  72. {
  73. return date('Y-m-d H:i:s', $row[$key]);
  74. }
  75. public function replaceFieldDescription($key, $row)
  76. {
  77. if ($row['description'])
  78. {
  79. return $row['description'];
  80. }
  81. return '-';
  82. }
  83. protected function loadData()
  84. {
  85. $this->snapshotRepository->setApi($this->api());
  86. $this->snapshotRepository->findByVm($this->vm());
  87. $this->snapshotRepository->ignoreCurrent(true);
  88. $data = [];
  89. foreach ($this->snapshotRepository->fetch() as $entity)
  90. {
  91. $row = $entity->getAttributes();
  92. $data[] = array_merge(['id' => base64_encode(json_encode($row))], $row);
  93. }
  94. $dataProv = new ArrayDataProvider();
  95. $dataProv->setDefaultSorting("snaptime", 'DESC');
  96. $dataProv->setData($data);
  97. $this->setDataProvider($dataProv);
  98. }
  99. }