Вход Регистрация
Файл: concrete5.7.5.6/concrete/src/Page/View/PageView.php
Строк: 286
<?php
namespace ConcreteCorePageView;

use 
Environment;
use 
Events;
use 
Loader;
use 
PageCache;
use 
PageTemplate;
use 
PageTheme;
use 
Permissions;
use 
URL;
use 
User;
use 
View;
use 
Config;

class 
PageView extends View
{

    protected 
$c// page
    
protected $cp;
    protected 
$pTemplateID;
    protected 
$customStyleMap;

    public function 
getScopeItems()
    {
        
$items parent::getScopeItems();
        
$items['c'] = $this->c;
        
$items['theme'] = $this->themeObject;
        return 
$items;
    }

    
/**
     * Called from previewing functions, this lets us override the page's template with one of our own choosing
     */
    
public function setCustomPageTemplate(PageTemplate $pt)
    {
        
$this->pTemplateID $pt->getPageTemplateID();
    }

    public function 
getPageTemplate() {
        return 
PageTemplate::getByID($this->pTemplateID);
    }

    
/**
     * Called from previewing functions, this lets us override the page's theme with one of our own choosing
     */
    
public function setCustomPageTheme(PageTheme $pt)
    {
        
$this->themeObject $pt;
        
$this->pkgHandle $pt->getPackageHandle();
    }

    public function 
renderSinglePageByFilename($cFilename)
    {
        
$env Environment::get();
        
$cFilename trim($cFilename'/');

        
// if we have this exact template in the theme, we use that as the outer wrapper and we don't do an inner content file
        
$exactThemeTemplate $env->getRecord(DIRNAME_THEMES '/' $this->themeHandle '/' $cFilename$this->pkgHandle);
        if (
$exactThemeTemplate->exists()) {
            
$this->setViewTemplate($exactThemeTemplate->file);
        } else {
            
// use a content wrapper from themes/core if specified
            // e.g. $this->render('your/page', 'none') would use themes/core/none.php to print the $innerContent without a wrapper
            
$coreThemeTemplate $env->getRecord(DIRNAME_THEMES '/' DIRNAME_THEMES_CORE '/' $this->pkgHandle '.php');
            if (
$coreThemeTemplate->exists()) {
                
$this->setViewTemplate($coreThemeTemplate->file);
            } else {
                
// check for other themes or in a package if one was specified
                
$themeTemplate $env->getRecord(DIRNAME_THEMES '/' $this->themeHandle '/' $this->controller->getThemeViewTemplate(), $this->pkgHandle);
                if (
$themeTemplate->exists()) {
                    
$this->setViewTemplate($themeTemplate->file);
                } else {
                    
// fall back to the active theme wrapper if nothing else was found
                    
$fallbackTheme PageTheme::getByHandle($this->themeHandle);
                    
$fallbackPkgHandle = ($fallbackTheme instanceof PageTheme) ? $fallbackTheme->getPackageHandle() : $this->pkgHandle;
                    
$fallbackTemplate $env->getRecord(DIRNAME_THEMES '/' $this->themeHandle '/' $this->controller->getThemeViewTemplate(), $fallbackPkgHandle);
                    
$this->setViewTemplate($fallbackTemplate->file);
                }
            }

            
// set the inner content for the theme wrapper we found
            
$this->setInnerContentFile(
                
$env->getPath(
                    
DIRNAME_PAGES '/' $cFilename,
                    
$this->c->getPackageHandle()
                )
            );
        }
    }
    
    public function 
setupRender()
    {
        
$this->loadViewThemeObject();
        
$env Environment::get();

        if (isset(
$this->innerContentFile)) {
            
// this has already been rendered (e.g. by calling $this->render()
            // from within a controller. So we don't reset it.
            
return false;
        }


        if (
$this->c->getPageTypeID() == && $this->c->getCollectionFilename()) {
            
$this->renderSinglePageByFilename($this->c->getCollectionFilename());
        } else {
            
$pt $this->getPageTemplate();
            
$rec null;
            if (
$pt) {
                
$rec $env->getRecord(
                    
DIRNAME_THEMES '/' $this->themeHandle '/' $pt->getPageTemplateHandle() . '.php',
                    
$this->pkgHandle);
            }
            if (
$rec && $rec->exists()) {
                
$this->setViewTemplate(
                    
$env->getPath(
                        
DIRNAME_THEMES '/' $this->themeHandle '/' $pt->getPageTemplateHandle() . '.php',
                        
$this->pkgHandle));
            } else {
                
$rec $env->getRecord(
                    
DIRNAME_PAGE_TEMPLATES '/' $this->c->getPageTypeHandle() . '.php',
                    
$this->pTemplatePkgHandle);
                if (
$rec->exists()) {
                    
$this->setInnerContentFile(
                        
$env->getPath(
                            
DIRNAME_PAGE_TEMPLATES '/' $this->c->getPageTypeHandle() . '.php',
                            
$this->pTemplatePkgHandle));
                    
$this->setViewTemplate(
                        
$env->getPath(
                            
DIRNAME_THEMES '/' $this->themeHandle '/' $this->controller->getThemeViewTemplate(),
                            
$this->pkgHandle));
                } else {
                    
$this->setViewTemplate(
                        
$env->getPath(
                            
DIRNAME_THEMES '/' $this->themeHandle '/' FILENAME_THEMES_DEFAULT,
                            
$this->pkgHandle));
                }
            }
        }
    }

    public function 
getStyleSheet($stylesheet)
    {
        if (
$this->themeObject->isThemePreviewRequest()) {
            return 
$this->themeObject->getStylesheet($stylesheet);
        }

        if (
$this->c->hasPageThemeCustomizations()) {
            if (
$this->c->getVersionObject()->isApproved()) {
                return 
URL::to('/ccm/system/css/page'$this->c->getCollectionID(), $stylesheet);
            } else {
                
// this means that we're potentially viewing customizations that haven't been approved yet. So we're going to
                // pipe them all through a handler script, basically uncaching them.
                
return URL::to('/ccm/system/css/page'$this->c->getCollectionID(), $stylesheet$this->c->getVersionID());
            }
        }

        
$env Environment::get();
        
$output Config::get('concrete.cache.directory') . '/pages/' $this->c->getCollectionID() . '/' DIRNAME_CSS '/' $this->getThemeHandle();
        
$relative REL_DIR_FILES_CACHE '/pages/' $this->c->getCollectionID() . '/' DIRNAME_CSS '/' $this->getThemeHandle();
        
$r $env->getRecord(
            
DIRNAME_THEMES '/' $this->themeObject->getThemeHandle() . '/' DIRNAME_CSS '/' $stylesheet,
            
$this->themeObject->getPackageHandle());
        if (
$r->exists()) {
            
$sheetObject = new ConcreteCoreStyleCustomizerStylesheet(
                
$stylesheet,
                
$r->file,
                
$r->url,
                
$output,
                
$relative);
            if (
$sheetObject->outputFileExists()) {
                return 
$sheetObject->getOutputRelativePath();
            }

            return 
$this->themeObject->getStylesheet($stylesheet);
        }

        
/**
         * deprecated - but this is for backward compatibility. If we don't have a stylesheet in the css/
         * directory we just pass through and return the passed file in the current directory.
         */
        
return $env->getURL(
            
DIRNAME_THEMES '/' $this->themeObject->getThemeHandle() . '/' $stylesheet,
            
$this->themeObject->getPackageHandle()
        );
    }

    public function 
startRender()
    {
        
parent::startRender();
        
$this->c->outputCustomStyleHeaderItems();
        
// do we have any custom menu plugins?
        
$cp = new Permissions($this->c);
        
$this->cp $cp;
        if (
$cp->canViewToolbar()) {
            
$dh Loader::helper('concrete/dashboard');
            if (!
$dh->inDashboard()
                && 
$this->c->getCollectionPath() != '/page_not_found'
                
&& $this->c->getCollectionPath() != '/download_file'
                
&& $this->c->isActive() && !$this->c->isMasterCollection()) {
                
$u = new User();
                
$u->markPreviousFrontendPage($this->c);
            }
        }
    }

    public function 
finishRender($contents)
    {
        
$contents parent::finishRender($contents);

        
$event = new SymfonyComponentEventDispatcherGenericEvent();
        
$event->setArgument('contents'$contents);
        
Events::dispatch('on_page_output'$event);
        
$contents $event->getArgument('contents');

        
$cache PageCache::getLibrary();
        
$shouldAddToCache $cache->shouldAddToCache($this);
        if (
$shouldAddToCache) {
            
$cache->set($this->c$contents);
        }
        return 
$contents;
    }

    
/**
     * @deprecated
     */
    
public function getCollectionObject()
    {
        return 
$this->getPageObject();
    }

    public function 
getPageObject()
    {
        return 
$this->c;
    }

    public function 
section($url)
    {
        if (!empty(
$this->viewPath)) {
            
$url '/' trim($url'/');
            if (
strpos($this->viewPath$url) !== false && strpos($this->viewPath$url) == 0) {
                return 
true;
            }
        }
    }

    protected function 
constructView($page)
    {
        
$this->$page;
        
parent::constructView($page->getCollectionPath());
        if (!isset(
$this->pTemplateID)) {
            
$this->pTemplateID $this->c->getPageTemplateID();
            
$pto $this->c->getPageTemplateObject();
            if (
$pto && $pto->getPackageID()) {
                
$this->pTemplatePkgHandle $this->c->getPageTemplateObject()->getPackageHandle();
            }
        }
        if (!isset(
$this->pThemeID)) {
            
$this->pThemeID $this->c->getPageTemplateID();
        }
    }

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