Вход Регистрация
Файл: concrete5.7.5.6/concrete/src/Support/JSConstantGenerator.php
Строк: 138
<?php
namespace ConcreteCoreSupport;

class 
JSConstantGenerator
{
    private 
$_constants = array();

    private 
$_register = null;


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

    public function 
setConstants( array $constants = array() )
    {
        
$this->_constants = $constants;
        
$this->_register = null;
    }

    public function 
scanSourceTree( $sourceDir )
    {
        
$fh = Core::make( 'helper/file' );

        echo 
"Scanning $sourceDir n";

        
$list = $fh->getDirectoryContents( $sourceDir, array(), true );

        foreach ( 
$list as $file )
        {
            if ( !
preg_match ( '/.php$/', $file ) ) continue;

            
$content = $fh->getContents($file);
            if ( !
preg_match( ',^s*consts*.*s*//!<s*@javascript-exported,m', $content)) continue;

            
$ns = '';
            
$class = '';
            
$var = '';

            
$content = str_replace( "nr", "n", $content );
            
$ln = 0;
            foreach ( 
explode( "n", $content ) as $line )
            {
                
$ln ++;
                if ( 
preg_match( '/s*namespace .*;/', $line ) ) $ns = preg_replace( ',s*namespaces+([^ -;]+);.*$,', '1', $line );

                if ( 
preg_match( '/^s*class.*/', $line ) )       $class = preg_replace( ',s*classs+([^ -;{]+).*$,', '1', $line );

                if ( 
preg_match( ',^s*consts*.*s*//!<s*@javascript-exported,', $line))
                {
                    
$var = preg_replace( ',s*consts+([^ ]+)s*=.*$,', '1', $line );
                    
$const = "$ns\$class::$var";
                    
$this->addConstant($const);
                }
            }
        }

        
    }

    public function 
addConstant( $const ) { $this->_constants[] = $const; }
    public function 
addConstants( array $consts ) { $this->_constants = array_merge( $this->_constants, $consts); }

    protected function 
_populateRegister()
    {
        
$register = array();
        foreach ( 
$this->_constants as $constant )
        {
            
$value = eval(" return $constant;");
            
$pathArray = preg_split( ',\\|::,', $constant );

            
$current = &$register;
            while ( 
count($pathArray) )
            {
                
$key = '';
                while ( 
'' == $key && count($pathArray) ) $key = array_shift($pathArray);

                if ( 
count( $pathArray) )
                {
                    if ( !
array_key_exists($key, $current ) || !is_array( $current[$key] ) ) $current[$key] = array();
                    
$current = &$current[$key];
                }
                else
                {
                    
$current[$key] = $value;
                    break;
                }
            }
        }

        return 
$register;
    }

    public function 
getConstantList() { return $this->_constants; }

    public function 
getRegister()
    {
        if ( 
is_null($this->_register) )
        {
            
$this->_register = $this->_populateRegister();
        }
        return 
$this->_register;
    }


    public function 
render( $path = 'Concrete' )
    {
        
$register = $this->getRegister();

        
$extract = $register;
        if ( 
$path )
        {
            
$pathArray = preg_split( ',\\|::,', $path );
            while ( 
count($pathArray) )
            {
                
$key = '';
                while ( 
'' == $key && count($pathArray) ) $key = array_shift($pathArray);
                if ( 
$key ) $extract = $register[$key];
            }
        }


        return 
json_encode( $extract, JSON_FORCE_OBJECT | JSON_PRETTY_PRINT );
    }
}
Онлайн: 2
Реклама