/kernel/classes/ezhttpheader.php

https://github.com/GunioRobot/ezpublish · PHP · 156 lines · 115 code · 18 blank · 23 comment · 22 complexity · 6c76985d554a642b84ece566e29e015a MD5 · raw file

  1. <?php
  2. /**
  3. * File containing the eZHTTPHeader class.
  4. *
  5. * @copyright Copyright (C) 1999-2011 eZ Systems AS. All rights reserved.
  6. * @license http://www.gnu.org/licenses/gpl-2.0.txt GNU General Public License v2
  7. * @version //autogentag//
  8. * @package kernel
  9. */
  10. /*!
  11. \class eZHTTPHeader ezhttpheader.php
  12. \brief The class eZHTTPHeader does
  13. */
  14. class eZHTTPHeader
  15. {
  16. /*!
  17. * \static
  18. * Returns true if the custom HTTP headers are enabled, false otherwise.
  19. * The result is cached in memory to save time on multiple invocations.
  20. */
  21. static function enabled()
  22. {
  23. if ( isset( $GLOBALS['eZHTTPHeaderCustom'] ) )
  24. {
  25. return $GLOBALS['eZHTTPHeaderCustom'];
  26. }
  27. $ini = eZINI::instance();
  28. if ( !$ini->hasVariable( 'HTTPHeaderSettings', 'CustomHeader' ) )
  29. {
  30. $GLOBALS['eZHTTPHeaderCustom'] = false;
  31. }
  32. else
  33. {
  34. if ( $ini->variable( 'HTTPHeaderSettings', 'CustomHeader' ) === 'enabled'
  35. && $ini->hasVariable( 'HTTPHeaderSettings', 'OnlyForAnonymous' )
  36. && $ini->variable( 'HTTPHeaderSettings', 'OnlyForAnonymous' ) === 'enabled' )
  37. {
  38. $user = eZUser::currentUser();
  39. $GLOBALS['eZHTTPHeaderCustom'] = !$user->isLoggedIn();
  40. }
  41. else
  42. {
  43. $GLOBALS['eZHTTPHeaderCustom'] = $ini->variable( 'HTTPHeaderSettings', 'CustomHeader' ) == 'enabled';
  44. }
  45. }
  46. return $GLOBALS['eZHTTPHeaderCustom'];
  47. }
  48. /*!
  49. \static
  50. Get Header override array by requested URI
  51. */
  52. static function headerOverrideArray( $uri )
  53. {
  54. $headerArray = array();
  55. if ( !eZHTTPHeader::enabled() )
  56. {
  57. return $headerArray;
  58. }
  59. $contentView = false;
  60. $uriString = eZURLAliasML::cleanURL( $uri->uriString() );
  61. // If content/view used, get url alias for node
  62. if ( strpos( $uriString, 'content/view/' ) === 0 )
  63. {
  64. $urlParts = explode( '/', $uriString );
  65. $nodeID = $urlParts[3];
  66. if ( !$nodeID )
  67. {
  68. return $headerArray;
  69. }
  70. $node = eZContentObjectTreeNode::fetch( $nodeID );
  71. if ( !$node )
  72. {
  73. return $headerArray;
  74. }
  75. $uriString = $node->pathWithNames();
  76. $contentView = true;
  77. }
  78. else
  79. {
  80. $uriCopy = clone $uri;
  81. eZURLAliasML::translate( $uriCopy );
  82. if ( strpos( $uriCopy->uriString(), 'content/view' ) === 0 )
  83. {
  84. $contentView = true;
  85. }
  86. }
  87. $uriString = '/' . eZURLAliasML::cleanURL( $uriString );
  88. $ini = eZINI::instance();
  89. foreach( $ini->variable( 'HTTPHeaderSettings', 'HeaderList' ) as $header )
  90. {
  91. foreach( $ini->variable( 'HTTPHeaderSettings', $header ) as $path => $value )
  92. {
  93. $path = '/' . eZURLAliasML::cleanURL( $path );
  94. if ( strlen( $path ) == 1 &&
  95. ( !$contentView && ( $ini->variable( 'HTTPHeaderSettings', 'OnlyForContent' ) === 'enabled' ) ) &&
  96. $uriString != '/' )
  97. {
  98. continue;
  99. }
  100. if ( strpos( $uriString, $path ) === 0 )
  101. {
  102. @list( $headerValue, $depth, $level ) = explode( ';', $value );
  103. if ( $header == 'Expires' )
  104. {
  105. $headerValue = gmdate( 'D, d M Y H:i:s', time() + $headerValue ) . ' GMT';
  106. }
  107. if ( $depth === null )
  108. {
  109. $headerArray[$header] = $headerValue;
  110. }
  111. else
  112. {
  113. $pathLevel = count( explode( '/', $path ) );
  114. $uriLevel = count( explode( '/', $uriString ) );
  115. if ( $level === null )
  116. {
  117. if ( $uriLevel <= $pathLevel + $depth )
  118. {
  119. $headerArray[$header] = $headerValue;
  120. }
  121. }
  122. else
  123. {
  124. if ( $uriLevel <= $pathLevel + $depth &&
  125. $uriLevel >= $pathLevel + $level )
  126. {
  127. $headerArray[$header] = $headerValue;
  128. }
  129. }
  130. }
  131. }
  132. }
  133. }
  134. return $headerArray;
  135. }
  136. }
  137. ?>