Вход Регистрация
Файл: 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;
    }
}
Онлайн: 0
Реклама