eZ Publish  [trunk]
ezhttpheader.php
Go to the documentation of this file.
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 ?>