Skip to content
Code-Schnipsel Gruppen Projekte
NavTabs.php 3,93 KiB
Newer Older
  • Learn to ignore specific revisions
  • <?php
    
    /**
     * This file contains QUI\Menu\NavTabs
     */
    
    namespace QUI\Menu;
    
    use QUI;
    
    use QUI\Projects\Site\Utils;
    
    use function count;
    
    
    /**
     * Class NavTabs
     *
     * @author  Michael Danielczok
     * @package QUI\Menu
     */
    class NavTabs extends QUI\Control
    {
        /**
         * entries array
         * [
         *   'title'   => string,
         *   'content' => string
         * ]
         *
         * @var array
         */
    
        private array $entries = [];
    
    
        /**
         * @param array $attributes
         */
    
        public function __construct(array $attributes = [])
    
        {
            $this->setAttributes([
    
                'nodeName' => 'div',
                'class' => 'quiqqer-menu-navTabs',
                'data-qui' => 'package/quiqqer/menu/bin/Controls/NavTabs',
    
                'activeEntry' => 1, // number
    
                'parentSite' => false, // for child sites, example: index.php?project=test&lang=de&id=1
                'showShort' => false, // only if parentSite set
                'max' => 10,
                'entries' => [],
                'template' => 'default'
    
            ]);
    
            parent::__construct($attributes);
    
    
            $this->addCSSFile(dirname(__FILE__) . '/NavTabs.css');
    
        }
    
        /**
         * @return string
         * @throws QUI\Exception
         */
    
        public function getBody(): string
    
        {
            $Engine = QUI::getTemplateManager()->getEngine();
            $this->setJavaScriptControlOption('animation', 'slide');
    
            if ($this->getAttribute('parentSite')) {
                $this->entries = $this->getChildrenFromParent();
            }
    
            $active = 1;
    
            if ($this->getAttribute('activeEntry') && $this->getAttribute('activeEntry') > 0) {
                $active = $this->getAttribute('activeEntry');
            }
    
            $Engine->assign([
    
                'this' => $this,
    
                'entries' => $this->entries,
    
                'active' => $active
    
            return $Engine->fetch(dirname(__FILE__) . '/NavTabs.html');
    
        }
    
        /**
         * Get children sites from parent site
         *
         * @return array|string
         * @throws QUI\Exception
         */
    
        private function getChildrenFromParent(): array | string
    
        {
            $ParentSite = null;
    
            if ($this->getAttribute('parentSite')) {
                try {
    
                    $ParentSite = Utils::getSiteByLink($this->getAttribute('parentSite'));
    
                } catch (QUI\Exception $Exception) {
                    QUI\System\Log::addDebug($Exception->getMessage());
    
                    return '';
                }
            }
    
            $sites = $ParentSite->getChildren([
                'where' => [
                    'active' => 1,
                ],
                'limit' => $this->getAttribute('max')
            ]);
    
            $entries = [];
    
            /** @var QUI\Projects\Site $Site */
            foreach ($sites as $Site) {
                $short = '';
    
                if ($this->getAttribute('showShort') && $Site->getAttribute('short')) {
    
                    $short = '<div class="quiqqer-menu-navTabs-content-item-shortDesc text-muted">' .
                        $Site->getAttribute('short') .
                        '</div>';
    
                $entryContent = $short . $Site->getAttribute('content');
    
                    'title' => $Site->getAttribute('title'),
    
                    'content' => $entryContent,
                ];
    
                $entries[] = $entry;
            }
    
            return $entries;
        }
    
        /**
         * Convert data set to entries
         * [
         *   ['title1', 'content1],
         *   ['title2', 'content2],
         *   ['title3', 'content3],
         *   .....................
         * ]
         *
         * @param array $data
         * @return false|void
         */
        public function setData(array $data)
        {
    
            if (count($data) < 1) {
    
                return false;
            }
    
            $entries = [];
    
            foreach ($data as $dataSet) {
    
                if (count($dataSet) < 2) {
    
                    continue;
                }
    
                $entry = [
    
                    'title' => $dataSet[0],
    
                    'content' => $dataSet[1],
                ];
    
                $entries[] = $entry;
            }
    
            $this->entries = $entries;
        }
    }