Вход Регистрация
Файл: concrete5.7.5.6/concrete/src/Area/Layout/Layout.php
Строк: 157
<?php

namespace ConcreteCoreAreaLayout;

use 
Core;
use 
Database;
use 
ConcreteCoreFoundationObject;
use 
Area;
use 
ConcreteCoreBlockBlock;

abstract class 
Layout extends Object
{
    
/**
     * @var Area
     */
    
public $area;

    
/**
     * @var Block
     */
    
public $block;

    
/**
     * @var int
     */
    
public $arLayoutID;

    
/**
     * @var bool
     */
    
public $arLayoutUsesThemeGridFramework;

    
/**
     * @var int
     */
    
public $arLayoutNumColumns;

    
/**
     * @param int $arLayoutID
     *
     * @return CustomLayout|ThemeGridLayout|null
     */
    
public static function getByID($arLayoutID)
    {
        
$db Database::connection();
        
$row $db->GetRow('select arLayoutID, arLayoutIsPreset, arLayoutUsesThemeGridFramework from AreaLayouts where arLayoutID = ?', array($arLayoutID));
        if (
is_array($row) && $row['arLayoutID']) {
            if (
$row['arLayoutUsesThemeGridFramework']) {
                
$al = new ThemeGridLayout();
            } elseif (
$row['arLayoutIsPreset']) {
                
$al = new PresetLayout();
            } else {
                
$al = new CustomLayout();
            }
            
$al->setPropertiesFromArray($row);
            
$al->loadDetails();
            
$al->loadColumnNumber();

            return 
$al;
        }
    }

    protected function 
loadColumnNumber()
    {
        
$db Database::connection();
        
$this->arLayoutNumColumns $db->GetOne('select count(arLayoutColumnID) as totalColumns from AreaLayoutColumns where arLayoutID = ?', array($this->arLayoutID));
    }

    
/**
     * @param Area $a
     */
    
public function setAreaObject(Area $a)
    {
        
$this->area $a;
    }

    
/**
     * @param Block $b
     */
    
public function setBlockObject(Block $b)
    {
        
$this->block $b;
    }

    
/**
     * @return Block
     */
    
public function getBlockObject()
    {
        return 
$this->block;
    }

    
/**
     * @return Area
     */
    
public function getAreaObject()
    {
        return 
$this->area;
    }

    
/**
     * @return int
     */
    
public function getAreaLayoutID()
    {
        return 
$this->arLayoutID;
    }

    
/**
     * @return bool
     */
    
public function isAreaLayoutUsingThemeGridFramework()
    {
        return 
$this->arLayoutUsesThemeGridFramework;
    }

    
/**
     * @return int
     */
    
public function getAreaLayoutNumColumns()
    {
        return 
$this->arLayoutNumColumns;
    }

    
/**
     * @return ConcreteCoreAreaLayoutColumn[]
     */
    
public function getAreaLayoutColumns()
    {
        
$db Database::connection();
        
$r $db->Execute('select arLayoutColumnID from AreaLayoutColumns where arLayoutID = ? order by arLayoutColumnIndex asc', array($this->arLayoutID));
        
$columns = array();
        
$class '\Concrete\Core\Area\Layout\' . Core::make('helper/text')->camelcase($this->arLayoutType) . 'Column';
        while ($row = $r->FetchRow()) {
            $column = call_user_func_array(array($class, '
getByID'), array($row['arLayoutColumnID']));
            if (is_object($column)) {
                $column->setAreaLayoutObject($this);
                $columns[] = $column;
            }
        }

        return $columns;
    }

    /**
     * @return int
     */
    public function addLayoutColumn()
    {
        $db = Database::connection();
        $arLayoutColumnDisplayID = $db->GetOne('
select max(arLayoutColumnDisplayID) as arLayoutColumnDisplayID from AreaLayoutColumns');
        if ($arLayoutColumnDisplayID) {
            ++$arLayoutColumnDisplayID;
        } else {
            $arLayoutColumnDisplayID = 1;
        }
        $index = $db->GetOne('
select count(arLayoutColumnIDfrom AreaLayoutColumns where arLayoutID = ?', array($this->arLayoutID));
        $db->Execute('
insert into AreaLayoutColumns (arLayoutIDarLayoutColumnIndexarLayoutColumnDisplayIDvalues (?, ?, ?)', array($this->arLayoutID, $index, $arLayoutColumnDisplayID));
        $arLayoutColumnID = $db->Insert_ID();

        return $arLayoutColumnID;
    }

    abstract public function duplicate();
    abstract public function exportDetails($node);

    /**
     * @param SimpleXMLElement $node
     */
    public function export($node)
    {
        $layout = $node->addChild('
arealayout');
        if ($this->isAreaLayoutUsingThemeGridFramework()) {
            $layout->addAttribute('
type', 'theme-grid');
        } else {
            $layout->addAttribute('
type', 'custom');
        }
        $this->exportDetails($layout);
        $columns = $layout->addChild('
columns');
        foreach ($this->getAreaLayoutColumns() as $column) {
            $column->export($columns);
        }
    }

    public function delete()
    {
        $columns = $this->getAreaLayoutColumns();
        foreach ($columns as $col) {
            $col->delete();
        }
        $db = Database::connection();
        $db->Execute('
delete from AreaLayouts where arLayoutID = ?', array($this->arLayoutID));
        $db->Execute('
delete from AreaLayoutPresets where arLayoutID = ?', array($this->arLayoutID));
    }

    /**
     * @return ConcreteCoreAreaLayoutFormatterFormatterInterface
     */
    public function getFormatter()
    {
        $class = '
\Concrete\Core\Area\Layout\' .
            '
Formatter\' . Core::make('helper/text')->camelcase($this->arLayoutType) . 'Formatter';
        $o = new $class($this);

        return $o;
    }
}
Онлайн: 0
Реклама