AddonController.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. <?php
  2. namespace ThurData\Servers\KerioEmail\Core\App\Controllers\Instances;
  3. use ThurData\Servers\KerioEmail\Core\App\Controllers\Instances\Http\AddonIntegration;
  4. use ThurData\Servers\KerioEmail\Core\App\Controllers\Instances\Http\AdminServicesTabFieldsIntegration;
  5. use ThurData\Servers\KerioEmail\Core\App\Controllers\Instances\Http\ConfigOptionsIntegration;
  6. use ThurData\Servers\KerioEmail\Core\App\Controllers\ResponseResolver;
  7. use ThurData\Servers\KerioEmail\Core\Http\JsonResponse;
  8. use ThurData\Servers\KerioEmail\Core\UI\ViewAjax;
  9. use ThurData\Servers\KerioEmail\Core\UI\ViewIntegrationAddon;
  10. use ThurData\Servers\KerioEmail\Core\App\Controllers\Interfaces\DefaultController;
  11. use ThurData\Servers\KerioEmail\Core\Helper;
  12. /**
  13. * Class AddonController
  14. * @package ThurData\Servers\KerioEmail\Core\App\Controllers\Instances
  15. */
  16. abstract class AddonController implements DefaultController
  17. {
  18. use \ThurData\Servers\KerioEmail\Core\Traits\Lang;
  19. use \ThurData\Servers\KerioEmail\Core\Traits\OutputBuffer;
  20. use \ThurData\Servers\KerioEmail\Core\Traits\IsAdmin;
  21. use \ThurData\Servers\KerioEmail\Core\UI\Traits\RequestObjectHandler;
  22. use \ThurData\Servers\KerioEmail\Core\Traits\ErrorCodesLibrary;
  23. use \ThurData\Servers\KerioEmail\Core\Traits\AppParams;
  24. /**
  25. * @param null $params
  26. * @return mixed|Helper\type
  27. */
  28. public function runExecuteProcess($params = null)
  29. {
  30. /**
  31. * load lang context
  32. */
  33. $this->loadLangContext();
  34. /**
  35. *
  36. * result of execute
  37. */
  38. $resault = $this->execute($params);
  39. /**
  40. *
  41. * return as json result
  42. */
  43. if ($resault instanceof JsonResponse)
  44. {
  45. $resolver = new ResponseResolver($resault);
  46. $resolver->resolve();
  47. }
  48. /**
  49. *
  50. * check if is callable function & add params
  51. */
  52. if ($this->isValidIntegrationCallback($resault))
  53. {
  54. $this->setAppParam('IntegrationControlerName', $resault[0]);
  55. $this->setAppParam('IntegrationControlerMethod', $resault[1]);
  56. //to do catch exceptions
  57. $resault = Helper\di($resault[0], $resault[1]);
  58. }
  59. /**
  60. *
  61. * return if view ajax
  62. */
  63. if ($resault instanceof ViewAjax)
  64. {
  65. $this->resolveAjax($resault);
  66. }
  67. /**
  68. * return as view integration addon
  69. */
  70. if (!$resault instanceof ViewIntegrationAddon)
  71. {
  72. return $resault;
  73. }
  74. /**
  75. *
  76. */
  77. if ($resault instanceof JsonResponse)
  78. {
  79. $resolver = new ResponseResolver($resault);
  80. $resolver->resolve();
  81. }
  82. $addonIntegration = $this->getIntegrationControler($params['action']);
  83. return $addonIntegration->runExecuteProcess($resault);
  84. }
  85. /**
  86. * @param null $callback
  87. * @return bool
  88. */
  89. public function isValidIntegrationCallback($callback = null)
  90. {
  91. if (is_callable($callback))
  92. {
  93. return true;
  94. }
  95. return false;
  96. }
  97. /**
  98. * @param $resault
  99. */
  100. public function resolveAjax($resault)
  101. {
  102. $ajaxResponse = $resault->getResponse();
  103. $resolver = new ResponseResolver($ajaxResponse);
  104. $resolver->resolve();
  105. }
  106. /**
  107. * @param null $action
  108. * @return HttpController | ConfigOptionsIntegration | AdminServicesTabFieldsIntegration | AddonIntegration
  109. */
  110. protected function getIntegrationControler($action = null)
  111. {
  112. switch ($action)
  113. {
  114. case 'ConfigOptions':
  115. return Helper\di(\ThurData\Servers\KerioEmail\Core\App\Controllers\Instances\Http\ConfigOptionsIntegration::class);
  116. break;
  117. case 'AdminServicesTabFields':
  118. return Helper\di(\ThurData\Servers\KerioEmail\Core\App\Controllers\Instances\Http\AdminServicesTabFieldsIntegration::class);
  119. break;
  120. default:
  121. return Helper\di(\ThurData\Servers\KerioEmail\Core\App\Controllers\Instances\Http\AddonIntegration::class);
  122. }
  123. }
  124. /**
  125. *
  126. */
  127. public function loadLangContext()
  128. {
  129. $this->loadLang();
  130. if ($this->getAppParam('IntegrationControlerName'))
  131. {
  132. $parts = explode('\\', $this->getAppParam('IntegrationControlerName'));
  133. $controller = end($parts);
  134. }
  135. else
  136. {
  137. $parts = explode('\\', get_class($this));
  138. $controller = end($parts);
  139. }
  140. $this->lang->setContext(($this->getAppParam('moduleAppType') . ($this->isAdmin() ? 'AA' : 'CA')), lcfirst($controller));
  141. }
  142. }