Вход Регистрация
Файл: concrete5.7.5.6/concrete/src/Config/Renderer.php
Строк: 65
<?php

namespace ConcreteCoreConfig;

class 
Renderer
{
    protected 
$config = null;

    public function 
__construct(array $config)
    {
        
$this->config = $config;
    }

    public function 
render($eol = PHP_EOL, $spacer = '    ', $header = "<?phpnnreturn ", $footer = ";n")
    {
        return 
$this->renderString($this->config, $eol, $spacer, $header, $footer);
    }

    protected function 
renderString(
        
$array,
        
$eol = PHP_EOL,
        
$spacer = '    ',
        
$header = "<?phpnnreturn ",
        
$footer = ";n"
    
) {
        
$rendered = $this->renderRecursive($array, $eol, $spacer);

        return 
$header . $rendered . $footer;
    }

    protected function 
renderRecursive(array $array, $eol = PHP_EOL, $spacer = '    ', $depth = 1)
    {
        
$results = array();

        
$scalars = array();
        
$arrays = array();

        
$associative = false;
        
$expect = 0;

        foreach (
$array as $key => $value) {
            if (
$key !== $expect++) {
                
$associative = true;
            }
            if (
is_array($value)) {
                
$arrays[] = array($key, $value);
            } elseif (
is_scalar($value)) {
                
$scalars[] = array($key, $value);
            } elseif (
is_null($value)) {
                
$scalars[] = array($key, $value);
            } else {
                
$type = gettype($value);
                throw new 
RendererInvalidTypeException(
                    
'Invalid configuration type "' . $type . '", configuration supports array and scalar values only.');
            }
        }

        
$space = str_repeat($spacer, $depth);
        foreach (
$scalars as $scalar) {
            list(
$key, $value) = $scalar;

            if (
is_string($value)) {
                
$clean_value = "'" . addcslashes($value, "'\") . "'";
            } elseif (is_bool($value)) {
                $clean_value = $value ? '
true' : 'false';
            } elseif (is_null($value)) {
                $clean_value = '
null';
            } else {
                $clean_value = $value;
            }

            if ($associative) {
                $results[] = $space . "'" . addcslashes(
$key, "'\") . "' => " . $clean_value;
            } else {
                
$results[] = $space . $clean_value;
            }
        }

        foreach (
$arrays as $array) {
            list(
$key, $value) = $array;
            
$rendered = $this->renderRecursive($value, $eol, $spacer, $depth + 1);

            if (
$associative) {
                
$results[] = $space . "'" . addcslashes($key, "'\") . "' => " . $rendered;
            } else {
                $results[] = $space . $rendered;
            }
        }

        $result = '
array(' . $eol;
        if (!empty($results)) {
            $result .= implode('
,' . $eol, $results) . ',' . $eol;
        }
        if ($depth > 0) {
            $result .= str_repeat($spacer, $depth - 1);
        }
        $result .= '
)';

        return $result;
    }
}
Онлайн: 1
Реклама