Вход Регистрация
Файл: 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($bFilename, 10);
        }

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

        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($renderFilename, 10);
            
$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->basePath, strpos($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->basePath, strpos($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->basePath, strpos($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);
                    }
                }
            }
        }
    }




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