Application.php 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <?php
  2. namespace ModulesGarden\Servers\ProxmoxVps\Core\App;
  3. use ModulesGarden\Servers\ProxmoxVps\Core\App\Controllers\AppControllers\Http;
  4. use ModulesGarden\Servers\ProxmoxVps\Core\App\Controllers\AppControllers\Addon;
  5. use ModulesGarden\Servers\ProxmoxVps\Core\App\Controllers\AppControllers\Api;
  6. use ModulesGarden\Servers\ProxmoxVps\Core\Hook\InternalHooksWrapper;
  7. use ModulesGarden\Servers\ProxmoxVps\Core\ServiceLocator;
  8. use function \ModulesGarden\Servers\ProxmoxVps\Core\Helper\di;
  9. use ModulesGarden\Servers\ProxmoxVps\Core\Traits\AppParams;
  10. class Application
  11. {
  12. use AppParams;
  13. public function run($callerName = null, $params = null)
  14. {
  15. try
  16. {
  17. $params = $this->runPreAppHook($params);
  18. $this->setWhmcsParams($params);
  19. $controller = $this->getControllerClass($callerName);
  20. $controllerInstance = ServiceLocator::call($controller);
  21. $result = $controllerInstance->runController($callerName, $params);
  22. return $result;
  23. }
  24. catch (\Exception $exc)
  25. {
  26. $errorPage = ServiceLocator::call(Controllers\Instances\Http\ErrorPage::class);
  27. $params['mgErrorDetails'] = $exc;
  28. $result = $errorPage->execute($params);
  29. return $result;
  30. }
  31. }
  32. /**
  33. * Saves provided WHMCS params to WhmcsParams service
  34. * @param type array
  35. */
  36. protected function setWhmcsParams($params)
  37. {
  38. $whmcsParams = di('whmcsParams');
  39. $whmcsParams->setParams($params);
  40. }
  41. public function getControllerClass($callerName = null)
  42. {
  43. $functionName = str_replace($this->getModuleName() . '_', '', $callerName);
  44. switch ($functionName)
  45. {
  46. //HTTP controllers
  47. case 'output':
  48. return Http::class;
  49. case 'clientarea':
  50. return Http::class;
  51. //API controller
  52. case 'api':
  53. return Api::class;
  54. //Addon controllers
  55. default:
  56. return Addon::class;
  57. }
  58. }
  59. public function getModuleName ()
  60. {
  61. return $this->getAppParam('systemName');
  62. }
  63. public function runPreAppHook ($params = [])
  64. {
  65. //run hook before any app controllers runs
  66. $hookWrapper = new InternalHooksWrapper();
  67. $newParams = $hookWrapper->runInternalHook('PreAppRun', $params);
  68. if ($newParams && $newParams !== false)
  69. {
  70. return $newParams;
  71. }
  72. return $params;
  73. }
  74. }