/**
 * Sendet den Content zum Client,
 * fügt ggf. HTTP1.1 cache headers hinzu
 *
 * @param $REX_ARTICLE rex_article Den zu sendenen Artikel
 * @param $content string Inhalt des Artikels
 * @param $environment string Die Umgebung aus der der Inhalt gesendet wird
 * (frontend/backend)
 */
function rex_send_content($REX_ARTICLE, $content, $environment)
{
    global $REX;
    // ----- EXTENSION POINT
    $content = rex_register_extension_point('OUTPUT_FILTER', $content);
    // ----- EXTENSION POINT - keine Manipulation der Ausgaben ab hier (read only)
    rex_register_extension_point('OUTPUT_FILTER_CACHE', $content, '', true);
    // ----- Last-Modified
    if ($REX['USE_LAST_MODIFIED'] === 'true' || $REX['USE_LAST_MODIFIED'] == $environment) {
        rex_send_last_modified($REX_ARTICLE);
    }
    // ----- ETAG
    if ($REX['USE_ETAG'] === 'true' || $REX['USE_ETAG'] == $environment) {
        rex_send_etag($REX_ARTICLE, $content);
    }
    // ----- GZIP
    if ($REX['USE_GZIP'] === 'true' || $REX['USE_GZIP'] == $environment) {
        $content = rex_send_gzip($content);
    }
    // Evtl offene Db Verbindungen schließen
    rex_sql::disconnect(null);
    echo $content;
}
/**
 * Sendet den Content zum Client,
 * fügt ggf. HTTP1.1 cache headers hinzu
 *
 * @param $content string Inhalt des Artikels
 * @param $lastModified integer Last-Modified Timestamp
 * @param $cacheKey string Cachekey zur identifizierung des Caches
 * @param $environment string Die Umgebung aus der der Inhalt gesendet wird
 * (frontend/backend)
 */
function rex_send_content($content, $lastModified, $cacheKey, $environment)
{
    global $REX;
    // ----- Last-Modified
    if ($REX['USE_LAST_MODIFIED'] === 'true' || $REX['USE_LAST_MODIFIED'] == $environment) {
        rex_send_last_modified($lastModified);
    }
    // ----- ETAG
    if ($REX['USE_ETAG'] === 'true' || $REX['USE_ETAG'] == $environment) {
        rex_send_etag($cacheKey);
    }
    // ----- GZIP
    if ($REX['USE_GZIP'] === 'true' || $REX['USE_GZIP'] == $environment) {
        $content = rex_send_gzip($content);
    }
    // ----- MD5 Checksum
    if ($REX['USE_MD5'] === 'true' || $REX['USE_MD5'] == $environment) {
        rex_send_checksum(md5($content));
    }
    // Evtl offene Db Verbindungen schließen
    rex_sql::disconnect(null);
    echo $content;
}
/**
 * Sendet den Content zum Client,
 * fügt ggf. HTTP1.1 cache headers hinzu
 *
 * @param $content string Inhalt des Artikels
 * @param $lastModified integer Last-Modified Timestamp
 * @param $cacheKey string Cachekey zur identifizierung des Caches
 * @param $environment string Die Umgebung aus der der Inhalt gesendet wird
 * (frontend/backend)
 * @param $sendcharset boolean TRUE, wenn der Charset mitgeschickt werden soll, sonst FALSE
 */
function rex_send_content($content, $lastModified, $etag, $environment, $sendcharset = false)
{
    global $REX;
    if ($sendcharset) {
        global $I18N;
        // Im Frontend gibts kein I18N
        if (!is_object($I18N)) {
            $I18N = rex_create_lang($REX['LANG']);
        }
        header('Content-Type: text/html; charset=' . $I18N->msg('htmlcharset'));
    }
    // ----- Last-Modified
    if ($REX['USE_LAST_MODIFIED'] === 'true' || $REX['USE_LAST_MODIFIED'] == $environment) {
        rex_send_last_modified($lastModified);
    }
    // ----- ETAG
    if ($REX['USE_ETAG'] === 'true' || $REX['USE_ETAG'] == $environment) {
        rex_send_etag($etag);
    }
    // ----- GZIP
    if ($REX['USE_GZIP'] === 'true' || $REX['USE_GZIP'] == $environment) {
        $content = rex_send_gzip($content);
    }
    // ----- MD5 Checksum
    // dynamische teile sollen die md5 summe nicht beeinflussen
    if ($REX['USE_MD5'] === 'true' || $REX['USE_MD5'] == $environment) {
        rex_send_checksum(md5(preg_replace('@<!--DYN-->.*<!--/DYN-->@', '', $content)));
    }
    // Evtl offene Db Verbindungen schließen
    rex_sql::disconnect(null);
    // content length schicken, damit der browser einen ladebalken anzeigen kann
    if (!ini_get('zlib.output_compression')) {
        header('Content-Length: ' . strlen($content));
    }
    echo $content;
}
/**
 * Sendet den Content zum Client,
 * fügt ggf. HTTP1.1 cache headers hinzu
 *
 * @param $content string Inhalt des Artikels
 * @param $lastModified integer Last-Modified Timestamp
 * @param $cacheKey string Cachekey zur identifizierung des Caches
 * @param $environment string Die Umgebung aus der der Inhalt gesendet wird
 * (frontend/backend)
 */
function rex_send_content($content, $lastModified, $etag, $environment, $sendcharset = FALSE)
{
    global $REX;
    // Cachen erlauben, nach revalidierung
    // see http://xhtmlforum.de/35221-php-session-etag-header.html#post257967
    session_cache_limiter('none');
    header('Cache-Control: must-revalidate, proxy-revalidate, private');
    if ($sendcharset) {
        global $I18N;
        header('Content-Type: text/html; charset=' . $I18N->msg('htmlcharset'));
    }
    // ----- Last-Modified
    if ($REX['USE_LAST_MODIFIED'] === 'true' || $REX['USE_LAST_MODIFIED'] == $environment) {
        rex_send_last_modified($lastModified);
    }
    // ----- ETAG
    if ($REX['USE_ETAG'] === 'true' || $REX['USE_ETAG'] == $environment) {
        rex_send_etag($etag);
    }
    // ----- GZIP
    if ($REX['USE_GZIP'] === 'true' || $REX['USE_GZIP'] == $environment) {
        $content = rex_send_gzip($content);
    }
    // ----- MD5 Checksum
    // dynamische teile sollen die md5 summe nicht beeinflussen
    if ($REX['USE_MD5'] === 'true' || $REX['USE_MD5'] == $environment) {
        rex_send_checksum(md5(preg_replace('@<!--DYN-->.*<!--/DYN-->@', '', $content)));
    }
    // Evtl offene Db Verbindungen schließen
    rex_sql::disconnect(null);
    // content length schicken, damit der browser einen ladebalken anzeigen kann
    header('Content-Length: ' . strlen($content));
    echo $content;
}