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

namespace ConcreteBlockCoreAreaLayout;

use 
ConcreteCoreAreaLayoutCustomLayout;
use 
ConcreteCoreAreaLayoutPresetLayout;
use 
ConcreteCoreAreaLayoutThemeGridLayout;
use 
ConcreteCoreAreaSubArea;
use 
Core;
use 
Database;
use 
ConcreteCoreBlockBlockController;
use 
ConcreteCoreAreaLayoutLayout as AreaLayout;
use 
ConcreteCoreAreaLayoutPresetPreset as AreaLayoutPreset;
use 
ConcreteCoreAreaLayoutCustomLayout as CustomAreaLayout;
use 
ConcreteCoreAreaLayoutThemeGridLayout as ThemeGridAreaLayout;
use 
ConcreteCoreStyleCustomizerInlineStyleSet;
use 
ConcreteCoreAssetCssAsset;
use 
URL;
use 
Page;

class 
Controller extends BlockController
{
    protected 
$btSupportsInlineAdd true;
    protected 
$btSupportsInlineEdit true;
    protected 
$btTable 'btCoreAreaLayout';
    protected 
$btIsInternal true;

    public function 
getBlockTypeDescription()
    {
        return 
t("Proxy block for area layouts.");
    }

    public function 
getBlockTypeName()
    {
        return 
t("Area Layout");
    }

    public function 
registerViewAssets($outputContent '')
    {
        if (
is_object($this->block) && $this->block->getBlockFilename() == 'parallax') {
            
$this->requireAsset('javascript''jquery');
            
$this->requireAsset('javascript''core/frontend/parallax-image');
        }
    }

    public function 
duplicate($newBID)
    {
        
$db Database::connection();
        
parent::duplicate($newBID);
        
$ar AreaLayout::getByID($this->arLayoutID);
        
$nr $ar->duplicate();
        
$db->Execute(
            
'update btCoreAreaLayout set arLayoutID = ? where bID = ?',
            array(
$nr->getAreaLayoutID(), $newBID)
        );
    }

    public function 
getAreaLayoutObject()
    {
        if (
$this->arLayoutID) {
            
$arLayout AreaLayout::getByID($this->arLayoutID);
            
$b $this->getBlockObject();
            if (
is_object($b)) {
                
$arLayout->setBlockObject($b);
            }

            return 
$arLayout;
        }
    }

    public function 
delete()
    {
        
$arLayout $this->getAreaLayoutObject();
        if (
is_object($arLayout)) {
            
$arLayout->delete();
        }
        
parent::delete();
    }

    public function 
export(SimpleXMLElement $blockNode)
    {
        
$layout $this->getAreaLayoutObject();
        
$layout->export($blockNode);
    }

    public function 
save($post)
    {
        if (isset(
$post['arLayoutID']) && !isset($post['arLayoutEdit'])) {
            
// terribly lame, but in import we pass arLayoutID and we also pass it in the post of editing a layout
            // We need to somehow differentiate the two. If it's JUST arLayoutID we're using the migration tool
            // if it includes arLayoutEdit (which is included in the form) then run the standrd block save.
            // we are passing it in directly –likely from import
            
$values = array('arLayoutID' => $post['arLayoutID']);
            
parent::save($values);
            return;
        } else {

            
$db Database::connection();
            
$arLayoutID $db->GetOne('select arLayoutID from btCoreAreaLayout where bID = ?', array($this->bID));
            if (!
$arLayoutID) {
                
$arLayout $this->addFromPost($post);
            } else {
                
$arLayout AreaLayout::getByID($arLayoutID);
                if (
$arLayout instanceof PresetLayout) {
                    return;
                }
                
// save spacing
                
if ($arLayout->isAreaLayoutUsingThemeGridFramework()) {
                    
$columns $arLayout->getAreaLayoutColumns();
                    for (
$i 0$i count($columns); ++$i) {
                        
$col $columns[$i];
                        
$span = ($post['span'][$i]) ? $post['span'][$i] : 0;
                        
$offset = ($post['offset'][$i]) ? $post['offset'][$i] : 0;
                        
$col->setAreaLayoutColumnSpan($span);
                        
$col->setAreaLayoutColumnOffset($offset);
                    }
                } else {
                    
$arLayout->setAreaLayoutColumnSpacing($post['spacing']);
                    if (
$post['isautomated']) {
                        
$arLayout->disableAreaLayoutCustomColumnWidths();
                    } else {
                        
$arLayout->enableAreaLayoutCustomColumnWidths();
                        
$columns $arLayout->getAreaLayoutColumns();
                        for (
$i 0$i count($columns); ++$i) {
                            
$col $columns[$i];
                            
$width = ($post['width'][$i]) ? $post['width'][$i] : 0;
                            
$col->setAreaLayoutColumnWidth($width);
                        }
                    }
                }
            }

            
$values = array('arLayoutID' => $arLayout->getAreaLayoutID());
            
parent::save($values);
        }
    }

    public function 
getImportData($blockNode$page)
    {
        
$args = array();
        if (isset(
$blockNode->arealayout)) {
            
$type = (string) $blockNode->arealayout['type'];
            
$node $blockNode->arealayout;
            switch (
$type) {
                case 
'theme-grid':
                    
$args['gridType'] = 'TG';
                    
$args['arLayoutMaxColumns'] = (string) $node['columns'];
                    
$args['themeGridColumns'] = intval(count($node->columns->column));
                    
$args['offset'] = array();
                    
$args['span'] = array();
                    
$i 0;
                    foreach (
$node->columns->column as $column) {
                        
$args['span'][$i] = intval($column['span']);
                        
$args['offset'][$i] = intval($column['offset']);
                        ++
$i;
                    }
                    break;
                case 
'custom':
                    
$args['gridType'] = 'FF';
                    
$args['isautomated'] = true;
                    
$args['spacing'] = intval($node['spacing']);
                    
$args['columns'] = intval(count($node->columns->column));
                    
$customWidths intval($node['custom-widths']);
                    if (
$customWidths == 1) {
                        
$args['isautomated'] = false;
                    }
                    
$args['width'] = array();
                    
$i 0;
                    foreach (
$node->columns->column as $column) {
                        
$args['width'][$i] = intval($column['width']);
                        ++
$i;
                    }
                    break;
            }
        }

        return 
$args;
    }

    protected function 
importAdditionalData($b$blockNode)
    {
        
$controller $b->getController();
        
$arLayout $controller->getAreaLayoutObject();

        
$columns $arLayout->getAreaLayoutColumns();
        
$layoutArea $b->getBlockAreaObject();
        
$arLayout->setAreaObject($b->getBlockAreaObject());
        
$page $b->getBlockCollectionObject();

        
$i 0;
        foreach (
$blockNode->arealayout->columns->column as $columnNode) {
            
$column $columns[$i];
            
$as = new SubArea($column->getAreaLayoutColumnDisplayID(), $layoutArea->getAreaHandle(), $layoutArea->getAreaID());
            
$as->load($page);
            
$column->setAreaID($as->getAreaID());
            
$area $column->getAreaObject();
            if (
$columnNode->style) {
                
$set StyleSet::import($columnNode->style);
                
$page->setCustomStyleSet($area$set);
            }
            foreach (
$columnNode->block as $bx) {
                
$bt BlockType::getByHandle($bx['type']);
                if (!
is_object($bt)) {
                    throw new 
Exception(t('Invalid block type handle: %s'strval($bx['type'])));
                }
                
$btc $bt->getController();
                
$btc->import($page$area->getAreaHandle(), $bx);
            }
            ++
$i;
        }
    }

    public function 
addFromPost($post)
    {
        
// we are adding a new layout
        
switch ($post['gridType']) {
            case 
'TG':
                
$arLayout ThemeGridAreaLayout::add();
                
$arLayout->setAreaLayoutMaxColumns($post['arLayoutMaxColumns']);
                for (
$i 0$i $post['themeGridColumns']; ++$i) {
                    
$span = ($post['span'][$i]) ? $post['span'][$i] : 0;
                    
$offset = ($post['offset'][$i]) ? $post['offset'][$i] : 0;
                    
$column $arLayout->addLayoutColumn();
                    
$column->setAreaLayoutColumnSpan($span);
                    
$column->setAreaLayoutColumnOffset($offset);
                }
                break;
            case 
'FF':
                if ((!
$post['isautomated']) && $post['columns'] > 1) {
                    
$iscustom 1;
                } else {
                    
$iscustom 0;
                }
                
$arLayout CustomAreaLayout::add($post['spacing'], $iscustom);
                for (
$i 0$i $post['columns']; ++$i) {
                    
$width = ($post['width'][$i]) ? $post['width'][$i] : 0;
                    
$column $arLayout->addLayoutColumn();
                    
$column->setAreaLayoutColumnWidth($width);
                }
                break;
            default: 
// a preset
                
$arLayoutPreset AreaLayoutPreset::getByID($post['arLayoutPresetID']);
                
$arLayout PresetLayout::add($arLayoutPreset);
                foreach (
$arLayoutPreset->getColumns() as $column) {
                    
$arLayout->addLayoutColumn();
                }
                break;
        }

        return 
$arLayout;
    }

    public function 
view()
    {
        
$b $this->getBlockObject();
        
$a $b->getBlockAreaObject();
        
$this->arLayout $this->getAreaLayoutObject();
        if (
is_object($this->arLayout)) {
            
$this->arLayout->setAreaObject($a);
            
$this->set('columns'$this->arLayout->getAreaLayoutColumns());
            
$c Page::getCurrentPage();
            
$this->set('c'$c);

            
$gf false;
            if (
$this->arLayout->isAreaLayoutUsingThemeGridFramework()) {
                
$pt $c->getCollectionThemeObject();
                
$gf $pt->getThemeGridFrameworkObject();
            }
            if (
$this->arLayout instanceof CustomLayout) {
                
$asset = new CssAsset();
                
$asset->setAssetURL(URL::to('/ccm/system/css/layout'$this->arLayout->getAreaLayoutID()));
                
$asset->setAssetSupportsMinification(false);
                
$asset->setAssetSupportsCombination(false);
                
$this->requireAsset($asset);
            }

            
$formatter $this->arLayout->getFormatter();
            
$this->set('formatter'$formatter);
        } else {
            
$this->set('columns', array());
        }
    }

    public function 
edit()
    {
        
$this->addHeaderItem(Core::make('helper/html')->javascript('layouts.js'));
        
$this->view();
        
// since we set a render override in view() we have to explicitly declare edit
        
if ($this->arLayout->isAreaLayoutUsingThemeGridFramework()) {
            
$c Page::getCurrentPage();
            
$pt $c->getCollectionThemeObject();
            
$gf $pt->getThemeGridFrameworkObject();
        }
        if (
$this->arLayout instanceof ThemeGridLayout) {
            
$this->set('enableThemeGrid'true);
            
$this->set('themeGridFramework'$gf);
            
$this->set('themeGridMaxColumns'$this->arLayout->getAreaLayoutMaxColumns());
            
$this->set('themeGridName'$gf->getPageThemeGridFrameworkName());
            
$this->render("edit_grid");
        } elseif (
$this->arLayout instanceof CustomLayout) {
            
$this->set('enableThemeGrid'false);
            
$this->set('spacing'$this->arLayout->getAreaLayoutSpacing());
            
$this->set('iscustom'$this->arLayout->hasAreaLayoutCustomColumnWidths());
            
$this->set('maxColumns'12);
            
$this->render('edit');
        } else {
            
$preset $this->arLayout->getPresetObject();
            
$this->set('selectedPreset'$preset);
            
$this->render('edit_preset');
        }
        
$this->set('columnsNum'count($this->arLayout->getAreaLayoutColumns()));
        
$this->requireAsset('core/style-customizer');
    }

    public function 
add()
    {
        
$this->addHeaderItem(Core::make('helper/html')->javascript('layouts.js'));
        
$maxColumns 12// normally
        // now we check our active theme and see if it has other plans
        
$c Page::getCurrentPage();
        
$pt $c->getCollectionThemeObject();
        if (
is_object($pt) && $pt->supportsGridFramework() && is_object(
                
$this->area
            
) && $this->area->getAreaGridMaximumColumns()
        ) {
            
$gf $pt->getThemeGridFrameworkObject();
            
$this->set('enableThemeGrid'true);
            
$this->set('themeGridName'$gf->getPageThemeGridFrameworkName());
            
$this->set('themeGridFramework'$gf);
            
$this->set('themeGridMaxColumns'$this->area->getAreaGridMaximumColumns());
        } else {
            
$this->set('enableThemeGrid'false);
        }
        
$this->set('columnsNum'1);
        
$this->set('maxColumns'$maxColumns);
        
$this->requireAsset('core/style-customizer');
    }


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