BxDolRequest.php 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. <?php
  2. /**
  3. * @package Dolphin Core
  4. * @copyright Copyright (c) BoonEx Pty Limited - http://www.boonex.com/
  5. * @license CC-BY - http://creativecommons.org/licenses/by/3.0/
  6. */
  7. defined('BX_DOL') or die('hack attempt');
  8. define('BX_DOL_REQUEST_ERROR_MODULE_NOT_FOUND', 1);
  9. define('BX_DOL_REQUEST_ERROR_PAGE_NOT_FOUND', 2);
  10. $GLOBALS['bxDolClasses'] = array();
  11. class BxDolRequest extends BxDol {
  12. function BxDolRequest() {
  13. parent::BxDol();
  14. }
  15. public static function processAsFile($aModule, &$aRequest) {
  16. if(empty($aRequest) || ($sFileName = array_shift($aRequest)) == "")
  17. $sFileName = 'index';
  18. $sFile = BX_DIRECTORY_PATH_MODULES . $aModule['path'] . $sFileName . '.php';
  19. if(!file_exists($sFile))
  20. BxDolRequest::pageNotFound($sFileName, $aModule['uri']);
  21. else {
  22. if (isset($GLOBALS['bx_profiler'])) $GLOBALS['bx_profiler']->beginModule('file', ($sPrHash = uniqid(rand())), $aModule, $sFileName);
  23. include($sFile);
  24. if (isset($GLOBALS['bx_profiler'])) $GLOBALS['bx_profiler']->endModule('file', $sPrHash);
  25. }
  26. }
  27. public static function processAsAction($aModule, &$aRequest, $sClass = "Module") {
  28. $sAction = empty($aRequest) || (isset($aRequest[0]) && empty($aRequest[0])) ? 'Home' : array_shift($aRequest);
  29. $sMethod = 'action' . bx_gen_method_name($sAction);
  30. if(isset($GLOBALS['bx_profiler']))
  31. $GLOBALS['bx_profiler']->beginModule('action', ($sPrHash = uniqid(rand())), $aModule, $sClass, $sMethod);
  32. $mixedRet = BxDolRequest::_perform($aModule, $sClass, $sMethod, $aRequest);
  33. if(isset($GLOBALS['bx_profiler']))
  34. $GLOBALS['bx_profiler']->endModule('action', $sPrHash);
  35. return $mixedRet;
  36. }
  37. public static function processAsService($aModule, $sMethod, $aParams, $sClass = "Module") {
  38. if (isset($aModule['name']) && 'system' == $aModule['name'] && 'Module' == $sClass)
  39. $sClass = 'BaseServices';
  40. $sMethod = 'service' . bx_gen_method_name($sMethod);
  41. if(isset($GLOBALS['bx_profiler']))
  42. $GLOBALS['bx_profiler']->beginModule('service', ($sPrHash = uniqid(rand())), $aModule, $sClass, $sMethod);
  43. $mixedRet = BxDolRequest::_perform($aModule, $sClass, $sMethod, $aParams, false);
  44. if(isset($GLOBALS['bx_profiler']))
  45. $GLOBALS['bx_profiler']->endModule('service', $sPrHash);
  46. return $mixedRet;
  47. }
  48. public static function serviceExists($mixedModule, $sMethod, $sClass = "Module") {
  49. return BxDolRequest::_methodExists($mixedModule, 'service', $sMethod, $sClass);
  50. }
  51. public static function actionExists($mixedModule, $sMethod, $sClass = "Module") {
  52. return BxDolRequest::_methodExists($mixedModule, 'action', $sMethod, $sClass);
  53. }
  54. public static function moduleNotFound($sModule) {
  55. BxDolRequest::_error('module', $sModule);
  56. }
  57. public static function pageNotFound($sPage, $sModule) {
  58. BxDolRequest::_error('page', $sPage, $sModule);
  59. }
  60. public static function methodNotFound($sMethod, $sModule) {
  61. BxDolRequest::_error('method', $sMethod, $sModule);
  62. }
  63. protected static function _perform($aModule, $sClass, $sMethod, $aParams, $bTerminateOnError = true) {
  64. $sClass = $aModule['class_prefix'] . $sClass;
  65. $oModule = BxDolRequest::_require($aModule, $sClass);
  66. if($oModule === false && $bTerminateOnError)
  67. BxDolRequest::methodNotFound($sMethod, $aModule['uri']);
  68. else if($oModule === false && !$bTerminateOnError)
  69. return false;
  70. $bMethod = method_exists($oModule, $sMethod);
  71. if($bMethod)
  72. return call_user_func_array(array($oModule, $sMethod), $aParams);
  73. else if(!$bMethod && $bTerminateOnError)
  74. BxDolRequest::methodNotFound($sMethod, $aModule['uri']);
  75. else if(!$bMethod && !$bTerminateOnError)
  76. return false;
  77. }
  78. protected static function _require($aModule, $sClass) {
  79. if(isset($GLOBALS['bxDolClasses'][$sClass]))
  80. return $GLOBALS['bxDolClasses'][$sClass];
  81. if($aModule['path']) {
  82. $sFile = BX_DIRECTORY_PATH_MODULES . $aModule['path'] . 'classes/' . $sClass . '.php';
  83. if(!file_exists($sFile))
  84. return false;
  85. require_once($sFile);
  86. }
  87. else
  88. bx_import($sClass);
  89. if(!class_exists($sClass))
  90. return false;
  91. $GLOBALS['bxDolClasses'][$sClass] = new $sClass($aModule);
  92. return $GLOBALS['bxDolClasses'][$sClass];
  93. }
  94. protected static function _methodExists($mixedModule, $sMethodType, $sMethodName, $sClass = "Module"){
  95. $aModule = $mixedModule;
  96. if(is_string($mixedModule)) {
  97. bx_import('BxDolModuleQuery');
  98. $aModule = BxDolModuleQuery::getInstance()->getModuleByName($mixedModule);
  99. }
  100. if (!$aModule)
  101. return false;
  102. $sClass = $aModule['class_prefix'] . $sClass;
  103. if(($oModule = BxDolRequest::_require($aModule, $sClass)) === false)
  104. return false;
  105. $sMethod = $sMethodType . bx_gen_method_name($sMethodName);
  106. return method_exists($oModule, $sMethod);
  107. }
  108. protected static function _error($sType, $sParam1 = '', $sParam2 = '') {
  109. header('Status: 404 Not Found');
  110. header('HTTP/1.0 404 Not Found');
  111. require_once(BX_DIRECTORY_PATH_INC . "design.inc.php");
  112. bx_import('BxDolTemplate');
  113. bx_import('BxDolLanguages');
  114. $oTemplate = BxDolTemplate::getInstance();
  115. $oTemplate->setPageNameIndex(BX_PAGE_DEFAULT);
  116. $oTemplate->setPageHeader(_t("_sys_request_" . $sType . "_not_found_cpt"));
  117. $oTemplate->setPageContent('page_main_code', DesignBoxContent('123', MsgBox(_t("_sys_request_" . $sType . "_not_found_cnt", bx_process_output($sParam1), bx_process_output($sParam2))), BX_DB_PADDING_NO_CAPTION));
  118. $oTemplate->getPageCode();
  119. exit;
  120. }
  121. }