Seditio Source
Root |
./othercms/xenForo 2.2.8/src/XF/CssWriter.php
<?php

namespace XF;

use
XF\Http\Request;

use function
count, is_scalar;

class
CssWriter
{
   
/**
     * @var App
     */
   
protected $app;

   
/**
     * @var CssRenderer
     */
   
protected $renderer;

   
/**
     * @var callable|null
     */
   
protected $validator;

    public function
__construct(App $app, CssRenderer $renderer)
    {
       
$this->app = $app;
       
$this->renderer = $renderer;
    }

    public function
run(array $templates, $styleId, $languageId, $validation = null)
    {
       
$language = $this->app->language($languageId);
        \
XF::setLanguage($language);
       
$this->renderer->getTemplater()->setLanguage($language);

        if (
$styleId)
        {
           
$style = $this->app->container()->create('style', $styleId);
           
$this->renderer->setStyle($style);
        }

        if (
count($templates) > 1 && $validation !== null && $this->validator)
        {
           
$validator = $this->validator;
           
$validationExpected = $validator($templates);
            if (
$validationExpected !== $validation)
            {
               
// if we don't have a matching validation value, don't try to write to the cache
               
$this->renderer->setAllowFinalCacheUpdate(false);
            }
        }

       
$output = $this->renderer->render($templates);
       
$output = $this->finalizeOutput($output);

        return
$this->getResponse($output);
    }

    public function
setValidator(callable $validator)
    {
       
$this->validator = $validator;
    }

    public function
finalizeOutput($output)
    {
        return
'@charset "UTF-8";' . "\n\n" . $output;
    }

    public function
canSend304(Request $request)
    {
        if (!
$this->renderer->getAllowCached())
        {
            return
false;
        }

       
$browserModified = $request->getServer('HTTP_IF_MODIFIED_SINCE');

        if (!
$browserModified || !is_scalar($browserModified))
        {
            return
false;
        }

        return
true;
    }

    public function
getResponse($output)
    {
       
$response = $this->app->response();
       
$response->contentType('text/css', 'utf-8');
        if (
$this->renderer->getAllowCached())
        {
           
$response->header('Expires', gmdate('D, d M Y H:i:s', \XF::$time + 365 * 86400) . ' GMT');
           
$response->header('Last-Modified', gmdate('D, d M Y H:i:s', $this->renderer->getLastModifiedDate()) . ' GMT');
           
$response->header('Cache-Control', 'public, max-age=' . (365 * 86400));
        }
        else
        {
           
$response->header('Last-Modified', gmdate('D, d M Y H:i:s', \XF::$time) . ' GMT');
           
$response->header('Cache-Control', 'no-store, no-cache, must-revalidate, max-age=0');
        }
       
$response->body($output);

        return
$response;
    }

    public function
get304Response()
    {
       
$response = $this->app->response();
       
$response->contentType('text/css', 'utf-8');
       
$response->httpCode(304);

        return
$response;
    }
}