Вход Регистрация
Файл: concrete5.7.5.6/concrete/src/Block/View/BlockViewTemplate.php
Строк: 192
<?php
namespace ConcreteCoreBlockView;
use 
Loader;
use 
Environment;
use 
CacheLocal;
use 
AssetList;
use 
View;
use 
Block;
use 
ConcreteCorePackagePackageList;
use 
ConcreteCoreAssetJavascriptAsset;
use 
ConcreteCoreAssetCssAsset;

class 
BlockViewTemplate {

    protected 
$basePath '';

    protected 
$bFilename;
    protected 
$btHandle;
    protected 
$obj;
    protected 
$baseURL;
    protected 
$checkAssets true;
    protected 
$itemsToCheck = array(
        
'CSS' => 'view.css',
        
'JAVASCRIPT' => 'view.js'
    
);
    protected 
$render FILENAME_BLOCK_VIEW;

    public function 
__construct($obj) {
        
$this->btHandle $obj->getBlockTypeHandle();
        
$this->obj $obj;
        if (
$obj instanceof Block) {
            
$this->bFilename $obj->getBlockFilename();
        }
        
$this->computeView();
    }

    protected function 
computeView() {
        
$bFilename $this->bFilename;
        
$obj $this->obj;

        
// if we've passed in "templates/" as the first part, we strip that off.
        
if (strpos($bFilename'templates/') === 0) {
            
$bFilename substr($bFilename10);
        }

        
// The filename might be a directory name with .php-appended (BlockView does that), strip it.
        
$bFilenameWithoutDotPhp $bFilename;
        if ( 
substr$bFilename, -) === ".php" ) {
            
$bFilenameWithoutDotPhp substr$bFilename0strlen$bFilename ) -);
        }

        if (
$bFilename) {
            if (
is_file(DIR_FILES_BLOCK_TYPES '/' $obj->getBlockTypeHandle() . '/' DIRNAME_BLOCK_TEMPLATES '/' $bFilename)) {
                
$template DIR_FILES_BLOCK_TYPES '/' $obj->getBlockTypeHandle() . '/' DIRNAME_BLOCK_TEMPLATES '/' $bFilename;
                
$bv = new BlockView($obj);
                
$this->baseURL $bv->getBlockURL();
                
$this->basePath $bv->getBlockPath($this->render);
            } else if (
is_file(DIR_FILES_BLOCK_TYPES_CORE '/' $obj->getBlockTypeHandle() . '/' DIRNAME_BLOCK_TEMPLATES '/' $bFilename)) {
                
$template DIR_FILES_BLOCK_TYPES_CORE '/' $obj->getBlockTypeHandle() . '/' DIRNAME_BLOCK_TEMPLATES '/' $bFilename;
                
$this->baseURL ASSETS_URL '/' DIRNAME_BLOCKS '/' $obj->getBlockTypeHandle();
                
$this->basePath DIR_FILES_BLOCK_TYPES_CORE '/' $obj->getBlockTypeHandle();
            } else if (
is_dir(DIR_FILES_BLOCK_TYPES '/' $obj->getBlockTypeHandle() . '/' DIRNAME_BLOCK_TEMPLATES '/' $bFilename)) {
                
$template DIR_FILES_BLOCK_TYPES '/' $obj->getBlockTypeHandle() . '/' DIRNAME_BLOCK_TEMPLATES '/' $bFilename '/' $this->render;
                
$this->basePath DIR_FILES_BLOCK_TYPES '/' $obj->getBlockTypeHandle() . '/' DIRNAME_BLOCK_TEMPLATES '/' $bFilename;
                
$this->baseURL REL_DIR_APPLICATION '/' DIRNAME_BLOCKS '/' $obj->getBlockTypeHandle() . '/' DIRNAME_BLOCK_TEMPLATES '/' $bFilename;
            } else if (
is_dir(DIR_FILES_BLOCK_TYPES_CORE '/' $obj->getBlockTypeHandle() . '/' DIRNAME_BLOCK_TEMPLATES '/' $bFilename)) {
                
$template DIR_FILES_BLOCK_TYPES_CORE '/' $obj->getBlockTypeHandle() . '/' DIRNAME_BLOCK_TEMPLATES '/' $bFilename '/'  $this->render;
                
$this->basePath DIR_FILES_BLOCK_TYPES_CORE '/' $obj->getBlockTypeHandle() . '/' DIRNAME_BLOCK_TEMPLATES '/' $bFilename;
                
$this->baseURL ASSETS_URL '/' DIRNAME_BLOCKS '/' $obj->getBlockTypeHandle() . '/' DIRNAME_BLOCK_TEMPLATES '/' $bFilename;
            } else if ( 
$bFilename !== $bFilenameWithoutDotPhp ) {
                if (
is_dir(DIR_FILES_BLOCK_TYPES '/' $obj->getBlockTypeHandle() . '/' DIRNAME_BLOCK_TEMPLATES '/' $bFilenameWithoutDotPhp)) {
                    
$template DIR_FILES_BLOCK_TYPES '/' $obj->getBlockTypeHandle() . '/' DIRNAME_BLOCK_TEMPLATES '/' $bFilenameWithoutDotPhp '/' $this->render;
                    
$this->basePath DIR_FILES_BLOCK_TYPES '/' $obj->getBlockTypeHandle() . '/' DIRNAME_BLOCK_TEMPLATES '/' $bFilenameWithoutDotPhp;
                    
$this->baseURL REL_DIR_APPLICATION '/' DIRNAME_BLOCKS '/' $obj->getBlockTypeHandle() . '/' DIRNAME_BLOCK_TEMPLATES '/' $bFilenameWithoutDotPhp;
                } else if (
is_dir(DIR_FILES_BLOCK_TYPES_CORE '/' $obj->getBlockTypeHandle() . '/' DIRNAME_BLOCK_TEMPLATES '/' $bFilenameWithoutDotPhp)) {
                    
$template DIR_FILES_BLOCK_TYPES_CORE '/' $obj->getBlockTypeHandle() . '/' DIRNAME_BLOCK_TEMPLATES '/' $bFilenameWithoutDotPhp '/'  $this->render;
                    
$this->basePath DIR_FILES_BLOCK_TYPES_CORE '/' $obj->getBlockTypeHandle() . '/' DIRNAME_BLOCK_TEMPLATES '/' $bFilenameWithoutDotPhp;
                    
$this->baseURL ASSETS_URL '/' DIRNAME_BLOCKS '/' $obj->getBlockTypeHandle() . '/' DIRNAME_BLOCK_TEMPLATES '/' $bFilenameWithoutDotPhp;
                }
            }

            
// we check all installed packages
            
if (!isset($template)) {
                
$pl PackageList::get();
                
$packages $pl->getPackages();
                foreach(
$packages as $pkg) {
                    
$d '';
                    if (
is_dir(DIR_PACKAGES '/' $pkg->getPackageHandle())) {
                        
$d DIR_PACKAGES '/'$pkg->getPackageHandle();
                    } else if (
is_dir(DIR_PACKAGES_CORE '/'$pkg->getPackageHandle())) {
                        
$d DIR_PACKAGES_CORE '/'$pkg->getPackageHandle();
                    }

                    if (
$d != '') {
                        
$baseStub = (is_dir(DIR_PACKAGES '/' $pkg->getPackageHandle())) ? DIR_REL '/' DIRNAME_PACKAGES '/'$pkg->getPackageHandle() : ASSETS_URL '/'DIRNAME_PACKAGES '/' $pkg->getPackageHandle();

                        if (
is_file($d '/' DIRNAME_BLOCKS '/' $obj->getBlockTypeHandle() . '/' $bFilename)) {
                            
$template $d '/' DIRNAME_BLOCKS '/' $obj->getBlockTypeHandle() . '/' $bFilename;
                            
$this->baseURL ASSETS_URL '/' DIRNAME_BLOCKS '/' $obj->getBlockTypeHandle();
                            
$this->basePath DIR_FILES_BLOCK_TYPES_CORE '/' $obj->getBlockTypeHandle();
                        } else if (
is_file($d '/' DIRNAME_BLOCKS '/' $obj->getBlockTypeHandle() . '/' DIRNAME_BLOCK_TEMPLATES '/' $bFilename)) {
                            
$template $d '/' DIRNAME_BLOCKS '/' $obj->getBlockTypeHandle() . '/' DIRNAME_BLOCK_TEMPLATES '/' $bFilename;
                            
$this->baseURL $baseStub '/' DIRNAME_BLOCKS '/' $obj->getBlockTypeHandle();
                            
$this->basePath $d '/' DIRNAME_BLOCKS '/' $obj->getBlockTypeHandle();
                        } else if (
is_dir($d '/' DIRNAME_BLOCKS '/' $obj->getBlockTypeHandle() . '/' DIRNAME_BLOCK_TEMPLATES '/' $bFilename)) {
                            
$template $d '/' DIRNAME_BLOCKS '/' $obj->getBlockTypeHandle() . '/' DIRNAME_BLOCK_TEMPLATES '/' $bFilename '/' $this->render;
                            
$this->baseURL $baseStub '/' DIRNAME_BLOCKS '/' $obj->getBlockTypeHandle() . '/' DIRNAME_BLOCK_TEMPLATES '/' $bFilename;
                        }
                    }

                    if (
$this->baseURL != '') {
                        continue;
                    }

                }
            }

        } else if (
file_exists(DIR_FILES_BLOCK_TYPES '/' $obj->getBlockTypeHandle() . '.php')) {
            
$template DIR_FILES_BLOCK_TYPES '/' $obj->getBlockTypeHandle() . '.php';
            
$bv = new BlockView($obj);
            
$this->baseURL $bv->getBlockURL();
            
$this->basePath $bv->getBlockPath($this->render);
        } else if (
file_exists(DIR_FILES_BLOCK_TYPES '/' $obj->getBlockTypeHandle() . '/' $this->render)) {
            
$template DIR_FILES_BLOCK_TYPES '/' $obj->getBlockTypeHandle() . '/' $this->render;
            
$this->baseURL REL_DIR_APPLICATION '/' DIRNAME_BLOCKS '/' $obj->getBlockTypeHandle();
        }

        if (!isset(
$template)) {
            
$bv = new BlockView($obj);
            
$template $bv->getBlockPath($this->render) . '/' $this->render;
            
$this->baseURL $bv->getBlockURL($this->render);
        }

        if (
$this->basePath == '') {
            
$this->basePath dirname($template);
        }
        
$this->template $template;
    }


    public function 
getBasePath() {return $this->basePath;}
    public function 
getBaseURL() {return $this->baseURL;}
    public function 
setBlockCustomTemplate($bFilename) {
        
$this->bFilename $bFilename;
        
$this->computeView();
    }

    public function 
setBlockCustomRender($renderFilename) {
        
// if we've passed in "templates/" as the first part, we strip that off.
        
if (strpos($renderFilename'templates/') === 0) {
            
$bFilename substr($renderFilename10);
            
$this->setBlockCustomTemplate($bFilename);
        } else {
            
$this->render $renderFilename;
        }
        
$this->computeView();
    }


    public function 
getTemplate() {
        return 
$this->template;
    }

    public function 
registerTemplateAssets() {
        
$items = array();
        
$h Loader::helper("html");
        
$dh Loader::helper('file');
        if (
$this->checkAssets == false) {
            return 
$items;
        } else {
            
$al AssetList::getInstance();
            
$v View::getInstance();
            foreach(
$this->itemsToCheck as $t => $i) {
                if (
file_exists($this->basePath '/' $i)) {
                    
$identifier substr($this->basePathstrpos($this->basePath'blocks'));
                    
// $identifier = 'blocks/page_list', 'blocks/feature', 'blocks/page_list/templates/responsive', etc...
                    
switch($t) {
                        case 
'CSS':
                            
$asset = new CssAsset($identifier);
                            
$asset->setAssetURL($this->getBaseURL() . '/' $i);
                            
$asset->setAssetPath($this->basePath '/' $i);
                            
$al->registerAsset($asset);
                            
$v->requireAsset('css'$identifier);
                            break;
                        case 
'JAVASCRIPT':
                            
$asset = new JavascriptAsset($identifier);
                            
$asset->setAssetURL($this->getBaseURL() . '/' $i);
                            
$asset->setAssetPath($this->basePath '/' $i);
                            
$al->registerAsset($asset);
                            
$v->requireAsset('javascript'$identifier);
                            break;
                    }
                }
            }
            
$css $dh->getDirectoryContents($this->basePath '/' DIRNAME_CSS);
            
$js $dh->getDirectoryContents($this->basePath '/' DIRNAME_JAVASCRIPT);
            if (
count($css) > 0) {
                foreach(
$css as $i) {
                    if(
substr($i,-4)=='.css') {
                        
$identifier substr($this->basePathstrpos($this->basePath'blocks')) . '/' $i;
                        
$asset = new CssAsset($identifier);
                        
$asset->setAssetURL($this->getBaseURL() . '/' DIRNAME_CSS '/' $i);
                        
$asset->setAssetPath($this->basePath '/' DIRNAME_CSS '/' $i);
                        
$al->registerAsset($asset);
                        
$v->requireAsset('css'$identifier);
                    }
                }
            }
            if (
count($js) > 0) {
                foreach(
$js as $i) {
                    if (
substr($i,-3)=='.js') {
                        
$identifier substr($this->basePathstrpos($this->basePath'blocks')) . '/' $i;
                        
$asset = new JavascriptAsset($identifier);
                        
$asset->setAssetURL($this->getBaseURL() . '/' DIRNAME_JAVASCRIPT '/' $i);
                        
$asset->setAssetPath($this->basePath '/' DIRNAME_JAVASCRIPT '/' $i);
                        
$al->registerAsset($asset);
                        
$v->requireAsset('javascript'$identifier);
                    }
                }
            }
        }
    }




}
Онлайн: 0
Реклама