Lists.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. <?php
  2. namespace ThurData\Servers\KerioEmail\App\UI\Client\DistributionList\Pages;
  3. use ThurData\Servers\KerioEmail\App\UI\Client\DistributionList\Buttons\AddListButton;
  4. use ThurData\Servers\KerioEmail\App\UI\Client\DistributionList\Buttons\DeleteListButton;
  5. use ThurData\Servers\KerioEmail\App\UI\Client\DistributionList\Buttons\EditListButton;
  6. use ThurData\Servers\KerioEmail\App\UI\Client\DistributionList\Buttons\MassDeleteListButton;
  7. use ThurData\Servers\KerioEmail\Core\UI\Interfaces\ClientArea;
  8. use ThurData\Servers\KerioEmail\Core\UI\Widget\DataTable\Column;
  9. use ThurData\Servers\KerioEmail\Core\UI\Widget\DataTable\DataProviders\DataProvider;
  10. use ThurData\Servers\KerioEmail\Core\UI\Widget\DataTable\DataProviders\Providers\ArrayDataProvider;
  11. use ThurData\Servers\KerioEmail\Core\UI\Widget\DataTable\DataTable;
  12. use ThurData\Servers\KerioEmail\Api\KerioWhmcs;
  13. /**
  14. *
  15. * Created by PhpStorm.
  16. * User: ThurData
  17. * Date: 18.09.19
  18. * Time: 13:28
  19. * Class Lists
  20. */
  21. class Lists extends DataTable implements ClientArea
  22. {
  23. protected $id = 'lists';
  24. protected $name = 'lists';
  25. protected $title = null;
  26. protected function loadHtml()
  27. {
  28. $this
  29. ->addColumn((new Column('email'))
  30. ->setOrderable(DataProvider::SORT_ASC)
  31. ->setSearchable(true, Column::TYPE_STRING))
  32. ->addColumn((new Column('description'))
  33. ->setOrderable()
  34. ->setSearchable(true))
  35. ->addColumn((new Column('members'))
  36. ->setOrderable()
  37. ->setSearchable(true))
  38. ->addColumn((new Column('moderator'))
  39. ->setOrderable()
  40. ->setSearchable(true));
  41. }
  42. public function initContent()
  43. {
  44. $this->addMassActionButton(new MassDeleteListButton());
  45. $this->addButton(new AddListButton());
  46. $this->addActionButton(new EditListButton());
  47. $this->addActionButton(new DeleteListButton());
  48. }
  49. public function loadData()
  50. {
  51. $domain = $this->getWhmcsParamByKey('domain');
  52. $fields = array(
  53. "id",
  54. "name",
  55. "description");
  56. $api = new KerioWhmcs('whmcsKerioEmail', 'Thurdata', '1.0');
  57. try {
  58. $api->login($this->getWhmcsParamByKey('serverhostname'), $this->getWhmcsParamByKey('serverusername'), $this->getWhmcsParamByKey('serverpassword'));
  59. $domainID = $api->getDomainId($domain);
  60. } catch (KerioApiException $error) {
  61. logModuleCall(
  62. 'kerioEmail',
  63. __FUNCTION__,
  64. $error,
  65. 'Debug Error',
  66. $error->getMessage()
  67. );
  68. return ['error' => $error->getMessage()];
  69. }
  70. try {
  71. $lists = $api->getMailingLists($fields,$domainID);
  72. } catch (KerioApiException $error) {
  73. logModuleCall(
  74. 'kerioEmail',
  75. __FUNCTION__,
  76. $error,
  77. 'Debug Error',
  78. $error->getMessage()
  79. );
  80. return ['error' => $error->getMessage()];
  81. }
  82. $listQuery = array(
  83. "emailAddress",
  84. "kind"
  85. );
  86. $data = [];
  87. foreach($lists as $list)
  88. {
  89. /* @var $list DistributionList */
  90. try {
  91. $members = $api->getMlUserList($listQuery, $list['id']);
  92. } catch (KerioApiException $error) {
  93. logModuleCall(
  94. 'kerioEmail',
  95. __FUNCTION__,
  96. $error,
  97. 'Debug Error',
  98. $error->getMessage()
  99. );
  100. };
  101. $memberCount = 0;
  102. unset($moderator);
  103. foreach($members as $member) {
  104. if($member['kind'] === 'Member') {
  105. $memberCount++;
  106. };
  107. if($member['kind'] === 'Moderator') {
  108. $moderator = $member['emailAddress'];
  109. };
  110. }
  111. $tmp = [
  112. 'id' => $list['id'],
  113. 'email' => $list['name'] . '@' . $domain,
  114. 'description' => $list['description'],
  115. 'members' => $memberCount,
  116. 'moderator' => $moderator
  117. ];
  118. $data[] = $tmp;
  119. }
  120. $api->logout();
  121. $dataProv = new ArrayDataProvider();
  122. $dataProv->setDefaultSorting('id', 'ASC')->setData($data);
  123. $this->setDataProvider($dataProv);
  124. }
  125. }