<?php # ���������� ������, ��� �� ���� ����� ��������� ������������� ��������������

#<? # � ��� ��� ���������� �����?
# �� ���������� �������� � PHP, ����������� � ������������ � ��������������� ��� �������������, ���� ���� ������ ����� ������ ������� � �������
class CCompress
{
    function 
OnPageStart()
    {
        
ob_start();
        
ob_start(); // second buffering envelope for PHP URL rewrite, see http://bugs.php.net/bug.php?id=35933
        # �� ��, �������, ������ ���������� � ������������ ��������, ��� ������� � IPB, ���� ����� ��������������� ������������ ����������?
        
ob_implicit_flush(0);
    }

    function 
OnAfterEpilog()
    {
        
$bShowTime = ($_SESSION["SESS_SHOW_TIME_EXEC"] == 'Y');
        
# roflmao, � ������� �������� ������ 'Y'/'N'
        
$bShowStat = ($GLOBALS["DB"]->ShowSqlStat && ($GLOBALS["USER"]->IsAdmin() || $_SESSION["SHOW_SQL_STAT"]=="Y"));
        
# OMFG, $GLOBALS? In my OOP?
        
$ENCODING CCompress::CheckCanGzip();
        
# ���������, ������� ������� �������� ��� ���� ����� ������ ��������? ���� �� ��������� ������� ����� ���������� ���������� - ������
        
if($ENCODING)
        {
            
$level 4;
            
# ������� ������ ����������, nuff said
            # ����, ���� �� �����, ������� ������ ����� IQ ������ ���� ������

            
if (strtoupper($_GET["compress"])=="Y")
                
$_SESSION["SESS_COMPRESS"] = "Y";
                
# lolwut?
            
elseif (strtoupper($_GET["compress"])=="N")
                unset(
$_SESSION["SESS_COMPRESS"]);
                
# OMG %)

            
if(!defined("ADMIN_AJAX_MODE"))
            {
                
# AJAX_MODE. Web 2.0 �� ������������, ����
                
if($bShowTime || $bShowStat)
                {
                    
# ����? �, �����, ��� �� ���������� �� ������ �������, ���������� ������� �������...
                    # ������ �������? �� ������, ��� ����� ���������� ����� �������
                    
$main_exec_time round((getmicrotime()-START_EXEC_TIME), 4);
                    
# ������, � � �����_����.��� ����� ���� ������ �������?
                    
include_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/interface/debug_info.php");
                }

                if(
$_SESSION["SESS_COMPRESS"]=="Y")
                    include(
$_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/compression/table.php");
                    
# � ������ ������ ������� ���� BitrixCompression-table.phps, ������� �����!!!11!1111������
                    # �� � ���� ������ �� ������ ������, ���� �� ��������� ��� ����!
            
}

            
ob_end_flush();
            
# ��������
            
$Contents ob_get_contents(); # ...� ����� ����� ���� ������...
            
ob_end_clean();

            if(!
defined("BX_SPACES_DISABLED") || BX_SPACES_DISABLED!==true)
            
# ����������. ������� ������ ������� - ������ � 1�-�������!
                
if((strpos($GLOBALS["HTTP_USER_AGENT"], "MSIE 5")>|| strpos($GLOBALS["HTTP_USER_AGENT"], "MSIE 6.0")>0) && strpos($GLOBALS["HTTP_USER_AGENT"], "Opera")===false)
                    
$Contents str_repeat(" "2048)."\r\n".$Contents;
                
# ������? register_long_arrays = off ��������? ��� ����, �������� - �� PHP 6 ��������. ��� ������ ����� GLOBALS, � �� _SERVER???777����

            
$Size strlen($Contents);
            
$Crc crc32($Contents);
            
$Contents gzcompress($Contents$level);
            
# � ����� ������� ���...
            
$Contents substr($Contents0, -4);

            
header("Content-Encoding: $ENCODING");
            print 
"\x1f\x8b\x08\x00\x00\x00\x00\x00";
            print 
$Contents;
            print 
pack('V',$Crc);
            print 
pack('V',$Size);
            
# ������ gzip? � 2009-� ����?? � PHP??? NO WAI!!11
        
}
        else
        {
            
ob_end_flush();
            
ob_end_flush();
            
# ��������
            
if(($bShowTime || $bShowStat) && !defined("ADMIN_AJAX_MODE"))
            {
                
$main_exec_time round((getmicrotime()-START_EXEC_TIME), 4);
                include_once(
$_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/interface/debug_info.php");
                
# ��������
            
}
        }
    }

    function 
DisableCompression()
    {
        
define("BX_COMPRESSION_DISABLED"true);
        
# ��. ����
    
}

    function 
Disable2048Spaces()
    {
        
define("BX_SPACES_DISABLED"true);
        
# ��� � ���� - ��� �������� ��� ����� (�� ����������) ���� ������� - ��� �������
    
}

    function 
CheckCanGzip()
    {
        
# �� ��, �� �� ����������� ����, ob_gzhandler �� �� �����, ������ ���� ���������, ����� �� ������� ����� ������
        
if(function_exists("gzcompress"))
        {
            if(
headers_sent() || connection_aborted()) return 0;
            if(
defined("BX_COMPRESSION_DISABLED") && BX_COMPRESSION_DISABLED===true) return 0;
            if(
$GLOBALS["HTTP_ACCEPT_ENCODING"] == '') return 0;
            
# �.�. ��� ��������� �������� register_globals = off, ������� ���������� �� ���������� ������
            
if(strpos($_SERVER["HTTP_ACCEPT_ENCODING"],'x-gzip') !== false) return "x-gzip";
            if(
strpos($_SERVER["HTTP_ACCEPT_ENCODING"],'gzip') !== false) return "gzip";
        }
        return 
0;
    }
}
?>