Lists.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. <?php
  2. namespace ModulesGarden\Servers\KerioEmail\App\UI\Client\DistributionList\Pages;
  3. use ModulesGarden\Servers\KerioEmail\App\Helpers\KerioManager;
  4. use ModulesGarden\Servers\KerioEmail\App\Libs\Kerio\Components\Api\Soap\Models\DistributionList;
  5. use ModulesGarden\Servers\KerioEmail\App\Libs\Kerio\Components\Api\Soap\Repository;
  6. use ModulesGarden\Servers\KerioEmail\App\UI\Admin\Custom\Fields\EnabledField;
  7. use ModulesGarden\Servers\KerioEmail\App\UI\Client\DistributionList\Buttons\AddListButton;
  8. use ModulesGarden\Servers\KerioEmail\App\UI\Client\DistributionList\Buttons\DeleteListButton;
  9. use ModulesGarden\Servers\KerioEmail\App\UI\Client\DistributionList\Buttons\EditListButton;
  10. use ModulesGarden\Servers\KerioEmail\App\UI\Client\DistributionList\Buttons\MassDeleteListButton;
  11. use function ModulesGarden\Servers\KerioEmail\Core\Helper\di;
  12. use ModulesGarden\Servers\KerioEmail\Core\Models\Whmcs\Hosting;
  13. use ModulesGarden\Servers\KerioEmail\Core\UI\Interfaces\ClientArea;
  14. use ModulesGarden\Servers\KerioEmail\Core\UI\Widget\DataTable\Column;
  15. use ModulesGarden\Servers\KerioEmail\Core\UI\Widget\DataTable\DataProviders\DataProvider;
  16. use ModulesGarden\Servers\KerioEmail\Core\UI\Widget\DataTable\DataProviders\Providers\ArrayDataProvider;
  17. use ModulesGarden\Servers\KerioEmail\Core\UI\Widget\DataTable\DataTable;
  18. /**
  19. *
  20. * Created by PhpStorm.
  21. * User: Tomasz Bielecki ( tomasz.bi@modulesgarden.com )
  22. * Date: 18.09.19
  23. * Time: 13:28
  24. * Class Lists
  25. */
  26. class Lists extends DataTable implements ClientArea
  27. {
  28. protected $id = 'lists';
  29. protected $name = 'lists';
  30. protected $title = null;
  31. protected function loadHtml()
  32. {
  33. $this
  34. ->addColumn((new Column('email'))
  35. ->setOrderable(DataProvider::SORT_ASC)
  36. ->setSearchable(true, Column::TYPE_STRING))
  37. ->addColumn((new Column('name'))
  38. ->setOrderable()
  39. ->setSearchable(true))
  40. ->addColumn((new Column('status'))
  41. ->setOrderable()
  42. ->setSearchable(true));
  43. }
  44. /**
  45. *
  46. * return status as html element
  47. * @param $key
  48. * @param $row
  49. * @return string
  50. */
  51. public function replaceFieldStatus($key, $row)
  52. {
  53. /**
  54. * check status
  55. */
  56. $enabled = $row[$key] === 'enabled' ? true : false;
  57. /**
  58. *
  59. * create enabled element
  60. */
  61. $field = new EnabledField();
  62. $field->setEnabled($enabled);
  63. $field->setRawTitle(di('lang')->absoluteT('kerio','account','status',$row[$key]));
  64. return $field->getHtml();
  65. }
  66. public function initContent()
  67. {
  68. $this->addMassActionButton(new MassDeleteListButton());
  69. $this->addButton(new AddListButton());
  70. $this->addActionButton(new EditListButton());
  71. $this->addActionButton(new DeleteListButton());
  72. }
  73. public function loadData()
  74. {
  75. /**
  76. * load hosting
  77. */
  78. $hosting = Hosting::where('id', $this->getRequestValue('id'))->first();
  79. /**
  80. * load api
  81. */
  82. $api = (new KerioManager())->getApiByServer($hosting->server);
  83. $repository = new Repository($api->soap);
  84. $lists = $repository->lists->getAllDistributionListsByDomain($hosting->domain);
  85. $data = [];
  86. foreach($lists as $list)
  87. {
  88. /* @var $list DistributionList */
  89. $tmp = [
  90. 'id' => $list->getId(),
  91. 'email' => $list->getName(),
  92. 'name' => $list->getDataResourceA(DistributionList::ATTR_DISPLAY_NAME),
  93. 'status' => $list->getDataResourceA(DistributionList::ATTR_MAIL_STATUS)
  94. ];
  95. $data[] = $tmp;
  96. }
  97. $dataProv = new ArrayDataProvider();
  98. $dataProv->setDefaultSorting('id', 'ASC')->setData($data);
  99. $this->setDataProvider($dataProv);
  100. }
  101. }