/kernel/classes/ezhttpheader.php

http://github.com/ezsystems/ezpublish · PHP · 158 lines · 117 code · 18 blank · 23 comment · 22 complexity · 606cc362f6bbaa388ff80770dfff0d3f MD5 · raw file

  1. <?php
  2. /**
  3. * File containing the eZHTTPHeader class.
  4. *
  5. * @copyright Copyright (C) eZ Systems AS. All rights reserved.
  6. * @license For full copyright and license information view LICENSE file distributed with this source code.
  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. $GLOBALS['eZHTTPHeaderCustom'] = !eZUser::isCurrentUserRegistered();
  39. }
  40. else
  41. {
  42. $GLOBALS['eZHTTPHeaderCustom'] = $ini->variable( 'HTTPHeaderSettings', 'CustomHeader' ) == 'enabled';
  43. }
  44. }
  45. return $GLOBALS['eZHTTPHeaderCustom'];
  46. }
  47. /*!
  48. \static
  49. Get Header override array by requested URI
  50. */
  51. static function headerOverrideArray( $uri )
  52. {
  53. $headerArray = array();
  54. if ( !eZHTTPHeader::enabled() )
  55. {
  56. return $headerArray;
  57. }
  58. $contentView = false;
  59. $uriString = eZURLAliasML::cleanURL( $uri->uriString() );
  60. // If content/view used, get url alias for node
  61. if ( strpos( $uriString, 'content/view/' ) === 0 )
  62. {
  63. $urlParts = explode( '/', $uriString );
  64. $nodeID = $urlParts[3];
  65. if ( !$nodeID )
  66. {
  67. return $headerArray;
  68. }
  69. $node = eZContentObjectTreeNode::fetch( $nodeID );
  70. if ( !$node )
  71. {
  72. return $headerArray;
  73. }
  74. $uriString = $node->pathWithNames();
  75. $contentView = true;
  76. }
  77. else
  78. {
  79. $uriCopy = clone $uri;
  80. eZURLAliasML::translate( $uriCopy );
  81. if ( strpos( $uriCopy->uriString(), 'content/view' ) === 0 )
  82. {
  83. $contentView = true;
  84. }
  85. }
  86. $uriString = '/' . eZURLAliasML::cleanURL( $uriString );
  87. $ini = eZINI::instance();
  88. foreach( $ini->variable( 'HTTPHeaderSettings', 'HeaderList' ) as $header )
  89. {
  90. foreach( $ini->variable( 'HTTPHeaderSettings', $header ) as $path => $value )
  91. {
  92. $path = '/' . eZURLAliasML::cleanURL( $path );
  93. if ( strlen( $path ) == 1 &&
  94. ( !$contentView && ( $ini->variable( 'HTTPHeaderSettings', 'OnlyForContent' ) === 'enabled' ) ) &&
  95. $uriString != '/' )
  96. {
  97. continue;
  98. }
  99. if ( strpos( $uriString, $path ) === 0 )
  100. {
  101. $config = eZStringUtils::explodeStr( $value, ';' );
  102. $headerValue = $config[0];
  103. $depth = isset( $config[1] ) ? $config[1] : null;
  104. $level = isset( $config[2] ) ? $config[2] : null;
  105. if ( $header == 'Expires' )
  106. {
  107. $headerValue = gmdate( 'D, d M Y H:i:s', time() + $headerValue ) . ' GMT';
  108. }
  109. if ( $depth === null )
  110. {
  111. $headerArray[$header] = $headerValue;
  112. }
  113. else
  114. {
  115. $pathLevel = count( explode( '/', $path ) );
  116. $uriLevel = count( explode( '/', $uriString ) );
  117. if ( $level === null )
  118. {
  119. if ( $uriLevel <= $pathLevel + $depth )
  120. {
  121. $headerArray[$header] = $headerValue;
  122. }
  123. }
  124. else
  125. {
  126. if ( $uriLevel <= $pathLevel + $depth &&
  127. $uriLevel >= $pathLevel + $level )
  128. {
  129. $headerArray[$header] = $headerValue;
  130. }
  131. }
  132. }
  133. }
  134. }
  135. }
  136. return $headerArray;
  137. }
  138. }
  139. ?>