|
eZ Publish
[trunk]
|
00001 <?php 00002 /** 00003 * File containing the eZHTTPHeader class. 00004 * 00005 * @copyright Copyright (C) 1999-2012 eZ Systems AS. All rights reserved. 00006 * @license http://www.gnu.org/licenses/gpl-2.0.txt GNU General Public License v2 00007 * @version //autogentag// 00008 * @package kernel 00009 */ 00010 00011 /*! 00012 \class eZHTTPHeader ezhttpheader.php 00013 \brief The class eZHTTPHeader does 00014 00015 */ 00016 00017 class eZHTTPHeader 00018 { 00019 /*! 00020 * \static 00021 * Returns true if the custom HTTP headers are enabled, false otherwise. 00022 * The result is cached in memory to save time on multiple invocations. 00023 */ 00024 static function enabled() 00025 { 00026 if ( isset( $GLOBALS['eZHTTPHeaderCustom'] ) ) 00027 { 00028 return $GLOBALS['eZHTTPHeaderCustom']; 00029 } 00030 00031 $ini = eZINI::instance(); 00032 if ( !$ini->hasVariable( 'HTTPHeaderSettings', 'CustomHeader' ) ) 00033 { 00034 $GLOBALS['eZHTTPHeaderCustom'] = false; 00035 } 00036 else 00037 { 00038 if ( $ini->variable( 'HTTPHeaderSettings', 'CustomHeader' ) === 'enabled' 00039 && $ini->hasVariable( 'HTTPHeaderSettings', 'OnlyForAnonymous' ) 00040 && $ini->variable( 'HTTPHeaderSettings', 'OnlyForAnonymous' ) === 'enabled' ) 00041 { 00042 $user = eZUser::currentUser(); 00043 $GLOBALS['eZHTTPHeaderCustom'] = !$user->isLoggedIn(); 00044 } 00045 else 00046 { 00047 $GLOBALS['eZHTTPHeaderCustom'] = $ini->variable( 'HTTPHeaderSettings', 'CustomHeader' ) == 'enabled'; 00048 } 00049 } 00050 00051 return $GLOBALS['eZHTTPHeaderCustom']; 00052 } 00053 00054 /*! 00055 \static 00056 Get Header override array by requested URI 00057 */ 00058 static function headerOverrideArray( $uri ) 00059 { 00060 $headerArray = array(); 00061 00062 if ( !eZHTTPHeader::enabled() ) 00063 { 00064 return $headerArray; 00065 } 00066 00067 $contentView = false; 00068 00069 $uriString = eZURLAliasML::cleanURL( $uri->uriString() ); 00070 00071 // If content/view used, get url alias for node 00072 if ( strpos( $uriString, 'content/view/' ) === 0 ) 00073 { 00074 $urlParts = explode( '/', $uriString ); 00075 $nodeID = $urlParts[3]; 00076 if ( !$nodeID ) 00077 { 00078 return $headerArray; 00079 } 00080 00081 $node = eZContentObjectTreeNode::fetch( $nodeID ); 00082 if ( !$node ) 00083 { 00084 return $headerArray; 00085 } 00086 00087 $uriString = $node->pathWithNames(); 00088 $contentView = true; 00089 } 00090 else 00091 { 00092 $uriCopy = clone $uri; 00093 eZURLAliasML::translate( $uriCopy ); 00094 if ( strpos( $uriCopy->uriString(), 'content/view' ) === 0 ) 00095 { 00096 $contentView = true; 00097 } 00098 } 00099 00100 $uriString = '/' . eZURLAliasML::cleanURL( $uriString ); 00101 $ini = eZINI::instance(); 00102 00103 foreach( $ini->variable( 'HTTPHeaderSettings', 'HeaderList' ) as $header ) 00104 { 00105 foreach( $ini->variable( 'HTTPHeaderSettings', $header ) as $path => $value ) 00106 { 00107 $path = '/' . eZURLAliasML::cleanURL( $path ); 00108 if ( strlen( $path ) == 1 && 00109 ( !$contentView && ( $ini->variable( 'HTTPHeaderSettings', 'OnlyForContent' ) === 'enabled' ) ) && 00110 $uriString != '/' ) 00111 { 00112 continue; 00113 } 00114 00115 if ( strpos( $uriString, $path ) === 0 ) 00116 { 00117 @list( $headerValue, $depth, $level ) = explode( ';', $value ); 00118 00119 if ( $header == 'Expires' ) 00120 { 00121 $headerValue = gmdate( 'D, d M Y H:i:s', time() + $headerValue ) . ' GMT'; 00122 } 00123 00124 if ( $depth === null ) 00125 { 00126 $headerArray[$header] = $headerValue; 00127 } 00128 else 00129 { 00130 $pathLevel = count( explode( '/', $path ) ); 00131 $uriLevel = count( explode( '/', $uriString ) ); 00132 if ( $level === null ) 00133 { 00134 if ( $uriLevel <= $pathLevel + $depth ) 00135 { 00136 $headerArray[$header] = $headerValue; 00137 } 00138 } 00139 else 00140 { 00141 if ( $uriLevel <= $pathLevel + $depth && 00142 $uriLevel >= $pathLevel + $level ) 00143 { 00144 $headerArray[$header] = $headerValue; 00145 } 00146 } 00147 } 00148 } 00149 } 00150 } 00151 00152 return $headerArray; 00153 } 00154 } 00155 00156 ?>