Вход Регистрация
Файл: concrete5.7.5.6/concrete/controllers/backend/user_interface/block.php
Строк: 108
<?php
namespace ConcreteControllerBackendUserInterface;

use 
Exception;
use 
Page as ConcretePage;
use 
Permissions;

abstract class 
Block extends Page
{

    protected 
$page;
    protected 
$area;
    protected 
$block;

    public function 
on_start()
    {
        
parent::on_start();
        
$request = $this->request;
        
$arHandle = $request->query->get('arHandle');
        
$bID = $request->query->get('bID');
        
$a = Area::get($this->page, $arHandle);
        if (!
is_object($a)) {
            throw new 
Exception('Invalid Area');
        }
        
$this->area = $a;
        if (!
$a->isGlobalArea()) {
            
$b = Block::getByID($bID, $this->page, $a);
            
$this->set('isGlobalArea', false);
        } else {
            
$stack = Stack::getByName($arHandle);
            
$sc = ConcretePage::getByID($stack->getCollectionID(), 'RECENT');
            
$b = Block::getByID($bID, $sc, STACKS_AREA_NAME);
            
$b->setBlockAreaObject($a); // set the original area object
            
$this->set('isGlobalArea', true);
        }
        
$this->block = $b;
        
$this->permissions = new Permissions($b);
        
$this->set('bp', $this->permissions);
        
$this->set('b', $b);
    }

    public function 
getViewObject()
    {
        if (
$this->permissions->canViewEditInterface() && $this->canAccess()) {
            return 
ConcreteCoreControllerController::getViewObject();
        }
        throw new 
Exception(t('Access Denied'));
    }

    protected function 
getBlockToEdit()
    {
        
$ax = $this->area;
        
$cx = $this->page;
        if (
$this->area->isGlobalArea()) {
            
$ax = STACKS_AREA_NAME;
            
$cx = Stack::getByName($_REQUEST['arHandle']);
        }


        
$b = Block::getByID($_REQUEST['bID'], $cx, $ax);
        
$nvc = $cx->getVersionToModify();
        if (
$this->area->isGlobalArea()) {
            
$xvc = $this->page->getVersionToModify(); // we need to create a new version of THIS page as well.
            
$xvc->relateVersionEdits($nvc);
        }

        
$b->loadNewCollection($nvc);

        if (
$b->getBlockTypeHandle() == BLOCK_HANDLE_SCRAPBOOK_PROXY) {
            
// if we're editing a scrapbook display block, we add a new block in this position for the real block type
            // set the block to the display order
            // delete the scrapbook display block, and save the data
            /*
            $originalDisplayOrder = $b->getBlockDisplayOrder();
            $btx = BlockType::getByHandle($_b->getBlockTypeHandle());
            $nb = $nvc->addBlock($btx, $ax, array());
            $nb->setAbsoluteBlockDisplayOrder($originalDisplayOrder);
            $b->deleteBlock();
            $b = &$nb;
            */

            
$originalDisplayOrder = $b->getBlockDisplayOrder();
            
$cnt = $b->getController();
            
$ob = Block::getByID($cnt->getOriginalBlockID());
            
$ob->loadNewCollection($nvc);
            if (!
is_object($ax)) {
                
$ax = Area::getOrCreate($cx, $ax);
            }
            
$ob->setBlockAreaObject($ax);
            
$nb = $ob->duplicate($nvc);
            
$nb->setAbsoluteBlockDisplayOrder($originalDisplayOrder);
            
$b->deleteBlock();
            
$b = & $nb;

        } else {
            if (
$b->isAlias()) {

                
// then this means that the block we're updating is an alias. If you update an alias, you're actually going
                // to duplicate the original block, and update the newly created block. If you update an original, your changes
                // propagate to the aliases
                
$nb = $b->duplicate($nvc);
                
$b->deleteBlock();
                
$b = $nb;
            }
        }

        return 
$b;
    }

    public function 
action()
    {
        
$url = call_user_func_array('parent::action', func_get_args());
        
$url .= '&arHandle=' . urlencode($this->area->getAreaHandle());
        
$url .= '&bID=' . $this->block->getBlockID();
        return 
$url;
    }

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