PageRenderTime 158ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/lib/ezutils/classes/ezfunctionhandler.php

https://bitbucket.org/crevillo/enetcall
PHP | 150 lines | 94 code | 15 blank | 41 comment | 13 complexity | 2cb2430b0d455aad45efbc9d9b4f1afd MD5 | raw file
Possible License(s): GPL-2.0, BSD-3-Clause, LGPL-2.1
  1. <?php
  2. /**
  3. * File containing the eZFunctionHandler class.
  4. *
  5. * @copyright Copyright (C) 1999-2012 eZ Systems AS. All rights reserved.
  6. * @license http://www.gnu.org/licenses/gpl-2.0.txt GNU General Public License v2
  7. * @version 2012.4
  8. * @package lib
  9. */
  10. /*!
  11. \class eZFunctionHandler ezfunctionhandler.php
  12. \brief The class eZFunctionHandler does
  13. */
  14. class eZFunctionHandler
  15. {
  16. static function moduleFunctionInfo( $moduleName )
  17. {
  18. if ( !isset( $GLOBALS['eZGlobalModuleFunctionList'] ) )
  19. {
  20. $GLOBALS['eZGlobalModuleFunctionList'] = array();
  21. }
  22. if ( isset( $GLOBALS['eZGlobalModuleFunctionList'][$moduleName] ) )
  23. {
  24. return $GLOBALS['eZGlobalModuleFunctionList'][$moduleName];
  25. }
  26. $moduleFunctionInfo = new eZModuleFunctionInfo( $moduleName );
  27. $moduleFunctionInfo->loadDefinition();
  28. return $GLOBALS['eZGlobalModuleFunctionList'][$moduleName] = $moduleFunctionInfo;
  29. }
  30. /*!
  31. \static
  32. Execute alias fetch for simplified fetching of objects
  33. */
  34. static function executeAlias( $aliasFunctionName, $functionParameters )
  35. {
  36. $aliasSettings = eZINI::instance( 'fetchalias.ini' );
  37. if ( $aliasSettings->hasSection( $aliasFunctionName ) )
  38. {
  39. $moduleFunctionInfo = eZFunctionHandler::moduleFunctionInfo( $aliasSettings->variable( $aliasFunctionName, 'Module' ) );
  40. if ( !$moduleFunctionInfo->isValid() )
  41. {
  42. eZDebug::writeError( "Cannot execute function '$aliasFunctionName' in module '$moduleName', no valid data", __METHOD__ );
  43. return null;
  44. }
  45. $functionName = $aliasSettings->variable( $aliasFunctionName, 'FunctionName' );
  46. $functionArray = array();
  47. if ( $aliasSettings->hasVariable( $aliasFunctionName, 'Parameter' ) )
  48. {
  49. $parameterTranslation = $aliasSettings->variable( $aliasFunctionName, 'Parameter' );
  50. foreach( array_keys( $parameterTranslation ) as $functionKey )
  51. {
  52. $translatedParameter = $parameterTranslation[$functionKey];
  53. if ( array_key_exists( $translatedParameter, $functionParameters ) )
  54. $functionArray[$functionKey] = $functionParameters[$translatedParameter];
  55. else
  56. $functionArray[$functionKey] = null;
  57. }
  58. }
  59. if ( $aliasSettings->hasVariable( $aliasFunctionName, 'Constant' ) )
  60. {
  61. $constantParameterArray = $aliasSettings->variable( $aliasFunctionName, 'Constant' );
  62. // prevent PHP warning in the loop below
  63. if ( !is_array( $constantParameterArray ) )
  64. $constantParameterArray = array();
  65. foreach ( array_keys( $constantParameterArray ) as $constKey )
  66. {
  67. if ( $moduleFunctionInfo->isParameterArray( $functionName, $constKey ) )
  68. {
  69. /*
  70. Check if have Constant overriden by function parameter
  71. */
  72. if ( array_key_exists( $constKey, $functionParameters ) )
  73. {
  74. $functionArray[$constKey] =& $functionParameters[$constKey] ;
  75. continue;
  76. }
  77. /*
  78. Split given string using semicolon as delimiter.
  79. Semicolon may be escaped by prepending it with backslash:
  80. in this case it is not treated as delimiter.
  81. I use \x5c instead of \\ here.
  82. */
  83. $constantParameter = preg_split( '/((?<=\x5c\x5c)|(?<!\x5c{1}));/',
  84. $constantParameterArray[$constKey] );
  85. /*
  86. Unfortunately, my PHP 4.3.6 doesn't work correctly
  87. if flag PREG_SPLIT_NO_EMPTY is set.
  88. That's why we need to manually remove
  89. empty strings from $constantParameter.
  90. */
  91. $constantParameter = array_diff( $constantParameter, array('') );
  92. /*
  93. Hack: force array keys to be consecutive, starting from zero (0, 1, 2, ...).
  94. Otherwise SQL syntax error occurs.
  95. */
  96. $constantParameter = array_values( $constantParameter );
  97. if ( $constantParameter ) // if the array is not empty
  98. {
  99. // Remove backslashes used for delimiter escaping.
  100. $constantParameter = preg_replace( '/\x5c{1};/', ';', $constantParameter );
  101. $constantParameter = str_replace( '\\\\', '\\', $constantParameter );
  102. // Return the result.
  103. $functionArray[$constKey] = $constantParameter;
  104. }
  105. }
  106. else
  107. $functionArray[$constKey] = $constantParameterArray[$constKey];
  108. }
  109. }
  110. /*
  111. */
  112. foreach ( $functionParameters as $paramName => $value )
  113. {
  114. if ( !array_key_exists( $paramName, $functionArray ) )
  115. {
  116. $functionArray[$paramName] = $value;
  117. }
  118. }
  119. return $moduleFunctionInfo->execute( $functionName, $functionArray );
  120. }
  121. eZDebug::writeWarning( 'Could not execute. Function ' . $aliasFunctionName. ' not found.' , __METHOD__ );
  122. }
  123. static function execute( $moduleName, $functionName, $functionParameters )
  124. {
  125. $moduleFunctionInfo = eZFunctionHandler::moduleFunctionInfo( $moduleName );
  126. if ( !$moduleFunctionInfo->isValid() )
  127. {
  128. eZDebug::writeError( "Cannot execute function '$functionName' in module '$moduleName', no valid data", __METHOD__ );
  129. return null;
  130. }
  131. return $moduleFunctionInfo->execute( $functionName, $functionParameters );
  132. }
  133. }
  134. ?>