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

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

use QUI;
use QUI\Utils\XML;
Henning Leutz's avatar
Henning Leutz committed
use QUI\Projects\Project;
Henning Leutz's avatar
Henning Leutz committed

/**
 * Class Utils
Henning Leutz's avatar
Henning Leutz committed
 * Bricks helper class
Henning Leutz's avatar
Henning Leutz committed
 *
Henning Leutz's avatar
Henning Leutz committed
 * @package quiqqer/bricks
Henning Leutz's avatar
Henning Leutz committed
 * @author www.pcsg.de (Henning Leutz)
 */

class Utils
{
    /**
Henning Leutz's avatar
Henning Leutz committed
     * Return the bricks from a xml file
Henning Leutz's avatar
Henning Leutz committed
     *
     * @param String $file
     * @return array
     */
Henning Leutz's avatar
Henning Leutz committed
    static function getBricksFromXML($file)
Henning Leutz's avatar
Henning Leutz committed
    {
        if ( !file_exists( $file ) ) {
            return array();
        }

        $Dom  = XML::getDomFromXml( $file );
        $Path = new \DOMXPath( $Dom );

Henning Leutz's avatar
Henning Leutz committed
        $bricks = $Path->query( "//quiqqer/bricks/brick" );
Henning Leutz's avatar
Henning Leutz committed
        $list   = array();

Henning Leutz's avatar
Henning Leutz committed
        if ( !$bricks->length ) {
Henning Leutz's avatar
Henning Leutz committed
            return $list;
        }

Henning Leutz's avatar
Henning Leutz committed
        foreach ( $bricks as $Brick ) {
Henning Leutz's avatar
Henning Leutz committed
            $list[] = self::parseAreaToArray( $Brick, $Path );
Henning Leutz's avatar
Henning Leutz committed
        }

        return $list;
    }

    /**
Henning Leutz's avatar
Henning Leutz committed
     * Return the template bricks from a xml file
Henning Leutz's avatar
Henning Leutz committed
     *
     * @param string $file - path to xm file
Henning Leutz's avatar
Henning Leutz committed
     * @param string|bool $layoutType - optional, return only the bricks for the specific layout type
Henning Leutz's avatar
Henning Leutz committed
     * @return array
     */
Henning Leutz's avatar
Henning Leutz committed
    static function getTemplateAreasFromXML($file, $layoutType=false)
Henning Leutz's avatar
Henning Leutz committed
    {
        if ( !file_exists( $file ) ) {
            return array();
        }

        $Dom  = XML::getDomFromXml( $file );
        $Path = new \DOMXPath( $Dom );

Henning Leutz's avatar
Henning Leutz committed
        $globalAreas = $Path->query( "//quiqqer/bricks/templateAreas/areas/area" );
Henning Leutz's avatar
Henning Leutz committed
        if ( $layoutType )
Henning Leutz's avatar
Henning Leutz committed
            $typeAreas = $Path->query(
Henning Leutz's avatar
Henning Leutz committed
                "//quiqqer/bricks/templateAreas/layouts/layout[@layout='{$layoutType}']/area"
Henning Leutz's avatar
Henning Leutz committed
            $typeAreas = $Path->query( "//quiqqer/bricks/templateAreas/layouts/layout/area" );
Henning Leutz's avatar
Henning Leutz committed

        $list = array();

Henning Leutz's avatar
Henning Leutz committed
        if ( $globalAreas->length )
Henning Leutz's avatar
Henning Leutz committed
        {
Henning Leutz's avatar
Henning Leutz committed
            foreach ( $globalAreas as $Area ) {
                $list[] = self::parseAreaToArray( $Area, $Path );
Henning Leutz's avatar
Henning Leutz committed
            }
Henning Leutz's avatar
Henning Leutz committed
        }
Henning Leutz's avatar
Henning Leutz committed
        if ( $typeAreas->length )
Henning Leutz's avatar
Henning Leutz committed
        {
Henning Leutz's avatar
Henning Leutz committed
            foreach ( $typeAreas as $Area ) {
                $list[] = self::parseAreaToArray( $Area, $Path );
Henning Leutz's avatar
Henning Leutz committed
            }
Henning Leutz's avatar
Henning Leutz committed
        }
Henning Leutz's avatar
Henning Leutz committed
        return $list;
    }


    static function getGlobalTemplateAreasFromXML()
    {

    }

Henning Leutz's avatar
Henning Leutz committed
    static function getTypeTemplateAreasFromXML($file, $siteType)
    {

    }

    /**
Henning Leutz's avatar
Henning Leutz committed
     * parse a <area> xml node to an array
Henning Leutz's avatar
Henning Leutz committed
     *
Henning Leutz's avatar
Henning Leutz committed
     * @param \DOMElement $Brick
Henning Leutz's avatar
Henning Leutz committed
     * @param \DOMXPath $Path
     * @return array
     */
Henning Leutz's avatar
Henning Leutz committed
    static function parseAreaToArray(\DOMElement $Brick, \DOMXPath $Path)
Henning Leutz's avatar
Henning Leutz committed
    {
Henning Leutz's avatar
Henning Leutz committed
        $control     = $Brick->getAttribute( 'control' );
        $name        = $Brick->getAttribute( 'name' );
Henning Leutz's avatar
Henning Leutz committed
        $title       = array();
        $description = array();

Henning Leutz's avatar
Henning Leutz committed
        $titleLocale = $Path->query( './title/locale', $Brick );
        $descLocale  = $Path->query( './description/locale', $Brick );
Henning Leutz's avatar
Henning Leutz committed

        if ( $titleLocale->length )
        {
            $title = array(
                'group' => $titleLocale->item( 0 )->getAttribute( 'group' ),
                'var'   => $titleLocale->item( 0 )->getAttribute( 'var' )
Henning Leutz's avatar
Henning Leutz committed
        if ( $descLocale->length )
        {
            $description = array(
                'group' => $descLocale->item( 0 )->getAttribute( 'group' ),
                'var'   => $descLocale->item( 0 )->getAttribute( 'var' )
            );
        }

        return array(
            'control'     => $control,
            'name'        => $name,
            'title'       => $title,
Henning Leutz's avatar
Henning Leutz committed
            'description' => $description,
            'inheritance' => $Brick->getAttribute( 'inheritance' )
Henning Leutz's avatar
Henning Leutz committed
        );
Henning Leutz's avatar
Henning Leutz committed

    /**
     *
     * @param Project $Project
     * @param String $areaName
     * @return bool
     */
    static function hasInheritance(Project $Project, $areaName)
    {
        $template = $Project->getAttribute( 'template' );

        // getAreasByProject
        $brickXML = realpath( OPT_DIR . $template .'/bricks.xml' );
        $bricks   = self::getTemplateAreasFromXML( $brickXML );

        foreach ( $bricks as $brickData )
        {
            QUI\Log::writeRecursive( $brickData );
        }

        return true;
    }