VmsDataTable.php 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. <?php
  2. /* * ********************************************************************
  3. * ProxmoxAddon product developed. (Aug 22, 2018)
  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\ProxmoxAddon\App\UI\Vms\Pages;
  20. use ModulesGarden\ProxmoxAddon as main;
  21. use ModulesGarden\ProxmoxAddon\App\UI\Vms\Buttons\DetailButton;
  22. use ModulesGarden\ProxmoxAddon\Core\Models\Whmcs\Hosting;
  23. use ModulesGarden\ProxmoxAddon\Core\Models\Whmcs\Server;
  24. use ModulesGarden\ProxmoxAddon\Core\UI\Interfaces\AdminArea;
  25. use ModulesGarden\ProxmoxAddon\Core\UI\Widget\DataTable\Column;
  26. use ModulesGarden\ProxmoxAddon\Core\UI\Widget\DataTable\DataProviders\Providers\QueryDataProvider;
  27. use ModulesGarden\ProxmoxAddon\Core\UI\Widget\DataTable\DataTable;
  28. use function ModulesGarden\ProxmoxAddon\Core\Helper\sl;
  29. /**
  30. * Description of ServersDataTable
  31. *
  32. * @author Pawel Kopec <pawelk@modulesgardne.com>
  33. */
  34. class VmsDataTable extends DataTable implements AdminArea
  35. {
  36. public function initContent()
  37. {
  38. $this->initIds('vms');
  39. $this->title = null;
  40. $this->addActionButton(new DetailButton);
  41. }
  42. public function replaceFieldName($key, $row)
  43. {
  44. return sprintf('<a href="configproducts.php?action=edit&id=%s">%s</a>', $row->packageid, $row->productName);
  45. }
  46. public function replaceFieldDomain($key, $row)
  47. {
  48. if (!$row->domain)
  49. {
  50. return sprintf('<a href="clientsservices.php?userid=%s&id=%s">%s</a>', $row->userid, $row->id, '-');
  51. }
  52. return sprintf('<a href="clientsservices.php?userid=%s&id=%s">%s</a>', $row->userid, $row->id, $row->domain);
  53. }
  54. public function replaceFieldDomainstatus($key, $row)
  55. {
  56. switch ($row->domainstatus)
  57. {
  58. case 'Pending':
  59. return '<span class="lu-label lu-label--warning lu-label--status">' . sl('lang')->tr($row->domainstatus) . '</span>';
  60. case 'Active':
  61. case 'Completed':
  62. return '<span class="lu-label lu-label--success lu-label--status">' . sl('lang')->tr($row->domainstatus) . '</span>';
  63. break;
  64. case 'Suspended':
  65. return '<span class="lu-label lu-label--default lu-label--status">' . sl('lang')->tr($row->domainstatus) . '</span>';
  66. break;
  67. case 'Cancelled':
  68. return '<span class="lu-label lu-label--danger lu-label--status">' . sl('lang')->tr($row->domainstatus) . '</span>';
  69. break;
  70. case 'Fraud':
  71. return '<span class="lu-label lu-label--danger lu-label--status">' . sl('lang')->tr($row->domainstatus) . '</span>';
  72. case 'Terminated':
  73. return '<span class="lu-label lu-label--danger lu-label--status">' . sl('lang')->tr($row->domainstatus) . '</span>';
  74. default:
  75. return '<span class="lu-label lu-label--danger lu-label--status">' . sl('lang')->tr($row->domainstatus) . '</span>';
  76. }
  77. }
  78. public function replaceFieldDedicatedip($key, $row)
  79. {
  80. return $row->dedicatedip ? $row->dedicatedip : "-";
  81. }
  82. public function replaceFieldAssignedips($key, $row)
  83. {
  84. if($row->assignedips){
  85. $ips = explode("\n", $row->assignedips);
  86. $ips = array_filter($ips);
  87. $ips = array_unique($ips);
  88. return implode(", ", $ips);
  89. }
  90. return "-";
  91. }
  92. public function replaceFieldFirstname($key, $row)
  93. {
  94. return sprintf('<a href="clientssummary.php?userid=%s">%s %s</a>', $row->userid, $row->firstname, $row->lastname);
  95. }
  96. public function replaceFieldServer($key, $row)
  97. {
  98. return sprintf('<a href="configservers.php?action=manage&id=%s">%s</a>', $row->server, $row->serverName);
  99. }
  100. public function replaceFieldBwusage($key, $row)
  101. {
  102. if ($row->bwusage == 0)
  103. {
  104. return '-';
  105. }
  106. $bytes = $row->bwusage * pow(1024,2);
  107. return main\App\Libs\Format::convertBytes($bytes);
  108. }
  109. protected function loadHtml()
  110. {
  111. $h = (new Hosting)->getTable();
  112. $p = (new main\Core\Models\Whmcs\Product)->getTable();
  113. $s = (new Server)->getTable();
  114. $c = (new main\Core\Models\Whmcs\Client)->getTable();
  115. $this->addColumn((new Column('id', $h))->setSearchable(true, Column::TYPE_INT)->setOrderable("DESC"))
  116. ->addColumn((new Column('name', $p))->setSearchable(true, Column::TYPE_STRING)->setOrderable())
  117. ->addColumn((new Column('domain', $h))->setSearchable(true, Column::TYPE_STRING)->setOrderable())
  118. ->addColumn((new Column('domainstatus', $h))->setSearchable(true, Column::TYPE_STRING)->setOrderable())
  119. ->addColumn((new Column('bwusage', $h))->setSearchable(true, Column::TYPE_STRING)->setOrderable())
  120. ->addColumn((new Column('dedicatedip', $h))->setSearchable(true, Column::TYPE_STRING)->setOrderable())
  121. ->addColumn((new Column('assignedips', $h))->setSearchable(true, Column::TYPE_STRING)->setOrderable())
  122. ->addColumn((new Column('firstname', $c))->setSearchable(true, Column::TYPE_STRING)->setOrderable())
  123. ->addColumn((new Column('server'))
  124. );
  125. }
  126. protected function loadData()
  127. {
  128. $h = (new Hosting)->getTable();
  129. $p = (new main\Core\Models\Whmcs\Product)->getTable();
  130. $s = (new Server)->getTable();
  131. $c = (new main\Core\Models\Whmcs\Client)->getTable();
  132. $query = (new Hosting)
  133. ->query()
  134. ->getQuery()
  135. ->leftJoin($p, "{$h}.packageid", '=', "{$p}.id")
  136. ->leftJoin($c, "{$h}.userid", '=', "{$c}.id")
  137. ->leftJoin($s, "{$h}.server", '=', "{$s}.id")
  138. ->select("{$h}.id", "{$h}.domain", "{$h}.domainstatus", "{$h}.dedicatedip", "{$h}.assignedips", "{$h}.userid", "{$h}.server", "{$h}.packageid", "{$h}.bwusage",
  139. "{$c}.firstname", "{$c}.lastname", "{$s}.name AS serverName", "{$p}.name AS productName")
  140. ->whereIn("{$s}.type", ["proxmoxVPS", "ProxmoxCloudVps"]);
  141. $dataProv = new QueryDataProvider();
  142. $dataProv->setDefaultSorting("id", 'DESC');
  143. $dataProv->setData($query);
  144. $this->setDataProvider($dataProv);
  145. }
  146. }