Вход Регистрация
Файл: concrete5.7.5.6/concrete/blocks/core_stack_display/controller.php
Строк: 164
<?php

namespace ConcreteBlockCoreStackDisplay;

use 
Stack;
use 
Permissions;
use 
Page;
use 
ConcreteCoreBlockBlockController;

/**
 * The controller for the stack display block. This is an internal proxy block that is inserted when a stack's contents are displayed in a page.
 *
 * @package Blocks
 * @subpackage Core Stack Display
 *
 * @author Andrew Embler <andrew@concrete5.org>
 * @copyright  Copyright (c) 2003-2012 Concrete5. (http://www.concrete5.org)
 * @license    http://www.concrete5.org/license/     MIT License
 */
class Controller extends BlockController
{
    protected 
$btCacheBlockRecord true;
    protected 
$btTable 'btCoreStackDisplay';
    protected 
$btIsInternal true;
    protected 
$btCacheSettingsInitialized false;

    public function 
getBlockTypeDescription()
    {
        return 
t("Proxy block for stacks added through the UI.");
    }

    public function 
getBlockTypeName()
    {
        return 
t("Stack Display");
    }

    public function 
getOriginalBlockID()
    {
        return 
$this->bOriginalID;
    }

    public function 
getImportData($blockNode$page)
    {
        
$args = array();
        
$content = (string) $blockNode->stack;
        
$stack Stack::getByName($content);
        
$args['stID'] = 0;
        if (
is_object($stack)) {
            
$args['stID'] = $stack->getCollectionID();
        }

        return 
$args;
    }

    public function 
isValidControllerTask($method$parameters = array())
    {
        
$b $this->findBlockForAction($method$parameters);

        return !empty(
$b);
    }

    public function 
runAction($action$parameters = array())
    {
        
$b $this->findBlockForAction($action$parameters);
        if (empty(
$b)) {
            return;
        }

        
$controller $b->getController();

        return 
$controller->runAction($action$parameters);
    }

    public function 
findBlockForAction($method$parameters)
    {
        
$stack Stack::getByID($this->stID);
        if (!
is_object($stack)) {
            return 
null;
        }
        
$blocks $stack->getBlocks();
        foreach (
$blocks as $b) {
            
$controller $b->getController();
            if (
$controller->isValidControllerTask($method$parameters)) {
                return 
$b;
            }
        }

        return 
null;
    }

    public function 
export(SimpleXMLElement $blockNode)
    {
        
$stack Stack::getByID($this->stID);
        if (
is_object($stack)) {
            
$cnode $blockNode->addChild('stack');
            
$node dom_import_simplexml($cnode);
            
$no $node->ownerDocument;
            
$node->appendChild($no->createCDataSection($stack->getCollectionName()));
        }
    }

    public function 
on_page_view($page)
    {
        
$stack Stack::getByID($this->stID);
        if (!
is_object($stack)) {
            return 
false;
        }
        
$p = new Permissions($stack);
        if (
$p->canViewPage()) {
            
$blocks $stack->getBlocks();
            foreach (
$blocks as $b) {
                
$bp = new Permissions($b);
                if (
$bp->canViewBlock()) {
                    
$btc $b->getInstance();
                    if (
'Controller' != get_class($btc)) {
                        
$btc->outputAutoHeaderItems();
                    }
                    
$csr $b->getCustomStyle();
                    if (
is_object($csr)) {
                        
$css $csr->getCSS();
                        if (
$css !== '') {
                            
$styleHeader $csr->getStyleWrapper($css);
                            
$btc->addHeaderItem($styleHeader);
                        }
                    }
                    
$btc->runTask('on_page_view', array($page));
                }
            }
        }
    }

    protected function 
setupCacheSettings()
    {
        if (
$this->btCacheSettingsInitialized || Page::getCurrentPage()->isEditMode()) {
            return;
        }

        
$this->btCacheSettingsInitialized true;

        
//Block cache settings are only as good as the weakest cached item inside. So loop through and check.
        
$btCacheBlockOutput true;
        
$btCacheBlockOutputOnPost true;
        
$btCacheBlockOutputLifetime 0;

        
$stack Stack::getByID($this->stID);
        if (!
is_object($stack)) {
            return 
false;
        }

        
$p = new Permissions($stack);
        if (
$p->canViewPage()) {
            
$blocks $stack->getBlocks();
            foreach (
$blocks as $b) {
                
$btCacheBlockOutput $btCacheBlockOutput && $b->cacheBlockOutput();
                
$btCacheBlockOutputOnPost $btCacheBlockOutputOnPost && $b->cacheBlockOutputOnPost();

                
//As soon as we find something which cannot be cached, entire block cannot be cached, so stop checking.
                
if (!$btCacheBlockOutput) {
                    return;
                }

                if (
$expires $b->getBlockOutputCacheLifetime()) {
                    if (
$expires && $btCacheBlockOutputLifetime $expires) {
                        
$btCacheBlockOutputLifetime $expires;
                    }
                }
            }
        }

        
$this->btCacheBlockOutput $btCacheBlockOutput;
        
$this->btCacheBlockOutputOnPost $btCacheBlockOutputOnPost;
        
$this->btCacheBlockOutputLifetime $btCacheBlockOutputLifetime;
    }

    public function 
cacheBlockOutput()
    {
        
$this->setupCacheSettings();

        return 
$this->btCacheBlockOutput;
    }

    public function 
cacheBlockOutputOnPost()
    {
        
$this->setupCacheSettings();

        return 
$this->btCacheBlockOutputOnPost;
    }

    public function 
getBlockTypeCacheOutputLifetime()
    {
        
$this->setupCacheSettings();

        return 
$this->btCacheBlockOutputLifetime;
    }
}
Онлайн: 1
Реклама