Skip to content
Code-Schnipsel Gruppen Projekte
Brick.php 4,59 KiB
Newer Older
Henning Leutz's avatar
Henning Leutz committed
<?php

/**
Henning Leutz's avatar
Henning Leutz committed
 * This file contains \QUI\Bricks\Brick
Henning Leutz's avatar
Henning Leutz committed
namespace QUI\Bricks;
Henning Leutz's avatar
Henning Leutz committed

use QUI;

/**
Henning Leutz's avatar
Henning Leutz committed
 * Class Brick
 * A Brick from the Brickmanager
Henning Leutz's avatar
Henning Leutz committed
 *
 * @author www.pcsg.de (Henning Leutz)
Henning Leutz's avatar
Henning Leutz committed
 * @package quiqqer/bricks
Henning Leutz's avatar
Henning Leutz committed
 */
Henning Leutz's avatar
Henning Leutz committed
class Brick extends QUI\QDOM
Henning Leutz's avatar
Henning Leutz committed
{
Henning Leutz's avatar
Henning Leutz committed
    /**
Henning Leutz's avatar
Henning Leutz committed
     * Brick settings
Henning Leutz's avatar
Henning Leutz committed
     * @var array
     */
    protected $_settings = array();

Henning Leutz's avatar
Henning Leutz committed
    /**
     * Constructor
Henning Leutz's avatar
Henning Leutz committed
     * @param array $params - brick params
Henning Leutz's avatar
Henning Leutz committed
     */
    public function __construct($params=array())
    {
        // default
Henning Leutz's avatar
Henning Leutz committed
        $default = array(
            'type'        => 'content',
            'content'     => '',
            'title'       => '',
            'description' => '',
            'project'     => '',
            'areas'       => ''
        );

        $this->setAttributes( $default );

Henning Leutz's avatar
Henning Leutz committed
        foreach ( $default as $key => $value )
        {
            if ( isset( $params[ $key ] ) ) {
                $this->setAttribute( $key, $params[ $key ] );
            }
        }


        // default settings from control
        $Control = $this->_getControl();
        $Manager = new Manager();

        $availableSettings = $Manager->getAvailableBrickSettingsByBrickType(
            $this->getAttribute( 'type' )
        );

        foreach ( $availableSettings as $entry ) {
            $this->_settings[ $entry['name'] ] = false;
        }

        // control default settings
        if ( $Control )
        {
            $controlSettings = $Control->getAttributes();

            foreach ( $this->_settings as $key => $value )
            {
                if ( isset( $controlSettings[ $key ] ) ) {
                    $this->_settings[ $key ] = $controlSettings[ $key ];
                }
            }
        }

        // settings from database
Henning Leutz's avatar
Henning Leutz committed
        if ( isset( $params['settings'] ) )
        {
            $settings = $params['settings'];

            if ( is_string( $settings ) ) {
                $settings = json_decode( $settings, true );
            }

Henning Leutz's avatar
Henning Leutz committed
            if ( !is_array( $settings ) ) {
                return;
            }
Henning Leutz's avatar
Henning Leutz committed

Henning Leutz's avatar
Henning Leutz committed
            foreach ( $this->_settings as $key => $value )
            {
                if ( isset( $settings[ $key ] ) ) {
                    $this->_settings[ $key ] = $settings[ $key ];
                }
Henning Leutz's avatar
Henning Leutz committed
            }
        }
Henning Leutz's avatar
Henning Leutz committed
    /**
     * Check, if control canbe created
     *
     * @throws QUI\Exception
     * @return QUI\Bricks\Brick
     */
    public function check()
    {
        $Control = $this->_getControl();

        if ( !$Control ) {
            throw new QUI\Exception( 'Control not found. Brick could not be created' );
        }

        return $Control;
    }

Henning Leutz's avatar
Henning Leutz committed
    /**
Henning Leutz's avatar
Henning Leutz committed
     * Return the HTML of the Brick
Henning Leutz's avatar
Henning Leutz committed
     *
     * @throw QUI\Exception
Henning Leutz's avatar
Henning Leutz committed
     */
    public function create()
    {
Henning Leutz's avatar
Henning Leutz committed
        if ( $this->getAttribute( 'type' ) == 'content' ) {
            return $this->getAttribute( 'content' );
        }
Henning Leutz's avatar
Henning Leutz committed
        $Control = $this->_getControl();

        if ( !$Control ) {
Henning Leutz's avatar
Henning Leutz committed
            throw new QUI\Exception( 'Control not found. Brick could not be created' );
Henning Leutz's avatar
Henning Leutz committed
        }

        $Control->setAttributes( $this->getSettings() );

        return $Control->create();
    }
Henning Leutz's avatar
Henning Leutz committed
    /**
     * Return the internal control
     * @return QUI\Control|Bool
     */
    protected function _getControl()
    {
Henning Leutz's avatar
Henning Leutz committed
        $Ctrl = $this->getAttribute( 'type' );
        if ( !is_callable( $Ctrl ) && !class_exists( $Ctrl ) ) {
Henning Leutz's avatar
Henning Leutz committed
            return false;
Henning Leutz's avatar
Henning Leutz committed
        }
Henning Leutz's avatar
Henning Leutz committed
        /* @var $Control \QUI\Control */
Henning Leutz's avatar
Henning Leutz committed
        $Control = new $Ctrl( $this->getSettings() );
Henning Leutz's avatar
Henning Leutz committed
        if ( !($Control instanceof QUI\Control) || !$Control ) {
Henning Leutz's avatar
Henning Leutz committed
            return false;
Henning Leutz's avatar
Henning Leutz committed
        return $Control;
Henning Leutz's avatar
Henning Leutz committed
    }

    /**
Henning Leutz's avatar
Henning Leutz committed
     * Return the brick settings
Henning Leutz's avatar
Henning Leutz committed
     *
     * @return Array
Henning Leutz's avatar
Henning Leutz committed
     */
    public function getSettings()
    {
        return $this->_settings;
Henning Leutz's avatar
Henning Leutz committed

    /**
     * Set brick settings
     *
     * @param Array $settings
     */
    public function setSettings($settings)
    {
        foreach ( $settings as $key => $value ) {
            $this->setSetting( $key, $value );
        }
    }

    /**
     * Return the setting of the brick
     *
     * @param String $name - Name of the setting
     * @return Bool|String
     */
    public function getSetting($name)
    {
        if ( isset( $this->_settings[ $name ] ) ) {
            return $this->_settings[ $name ];
        }

        return false;
    }

    /**
     * Set a brick setting
     *
     * @param String $name - name of the setting
     * @param String $value - value of the setting
     */
    public function setSetting($name, $value)
    {
        if ( isset( $this->_settings[ $name ] ) ) {
            $this->_settings[ $name ] = $value;
        }
    }
}