1<?php
2
3/* Copyright (c) 2016 Timon Amstutz <timon.amstutz@ilub.unibe.ch> Extended GPL, see docs/LICENSE */
4
5namespace ILIAS\UI\Implementation\Component\Panel;
6
7use ILIAS\UI\Implementation\Render\AbstractComponentRenderer;
8use ILIAS\UI\Renderer as RendererInterface;
9use ILIAS\UI\Component;
10
11/**
12 * Class Renderer
13 * @package ILIAS\UI\Implementation\Component\Panel
14 */
15class Renderer extends AbstractComponentRenderer
16{
17    /**
18     * @inheritdocs
19     */
20    public function render(Component\Component $component, RendererInterface $default_renderer)
21    {
22        /**
23         * @var Component\Panel\Panel $component
24         */
25        $this->checkComponent($component);
26
27        if ($component instanceof Component\Panel\Standard) {
28            /**
29             * @var Component\Panel\Standard $component
30             */
31            return $this->renderStandard($component, $default_renderer);
32        } elseif ($component instanceof Component\Panel\Sub) {
33            /**
34             * @var Component\Panel\Sub $component
35             */
36            return $this->renderSub($component, $default_renderer);
37        }
38        /**
39         * @var Component\Panel\Report $component
40         */
41        return $this->renderReport($component, $default_renderer);
42    }
43
44    /**
45     * @param Component\Component $component
46     * @param RendererInterface $default_renderer
47     * @return string
48     */
49    protected function getContentAsString(Component\Component $component, RendererInterface $default_renderer)
50    {
51        $content = "";
52        foreach ($component->getContent() as $item) {
53            $content .= $default_renderer->render($item);
54        }
55        return $content;
56    }
57
58    /**
59     * @param Component\Panel\Standard $component
60     * @param RendererInterface $default_renderer
61     * @return string
62     */
63    protected function renderStandard(Component\Panel\Standard $component, RendererInterface $default_renderer)
64    {
65        $tpl = $this->getTemplate("tpl.standard.html", true, true);
66
67        $view_controls = $component->getViewControls();
68        if ($view_controls) {
69            foreach ($view_controls as $view_control) {
70                $tpl->setCurrentBlock("view_controls");
71                $tpl->setVariable("VIEW_CONTROL", $default_renderer->render($view_control));
72                $tpl->parseCurrentBlock();
73            }
74        }
75
76        // actions
77        $actions = $component->getActions();
78        if ($actions !== null) {
79            $tpl->setVariable("ACTIONS", $default_renderer->render($actions));
80        }
81
82        $tpl->setVariable("TITLE", $component->getTitle());
83        $tpl->setVariable("BODY", $this->getContentAsString($component, $default_renderer));
84        return $tpl->get();
85    }
86
87    /**
88     * @param Component\Panel\Sub $component
89     * @param RendererInterface $default_renderer
90     * @return string
91     */
92    protected function renderSub(Component\Panel\Sub $component, RendererInterface $default_renderer)
93    {
94        $tpl = $this->getTemplate("tpl.sub.html", true, true);
95
96        $actions = $component->getActions();
97
98        if ($component->getTitle() != "" || $actions !== null) {
99            $tpl->setCurrentBlock("title");
100
101            // actions
102            if ($actions !== null) {
103                $tpl->setVariable("ACTIONS", $default_renderer->render($actions));
104            }
105
106            // title
107            $tpl->setVariable("TITLE", $component->getTitle());
108            $tpl->parseCurrentBlock();
109        }
110
111        if ($component->getCard()) {
112            $tpl->setCurrentBlock("with_card");
113            $tpl->setVariable("BODY", $this->getContentAsString($component, $default_renderer));
114            $tpl->setVariable("CARD", $default_renderer->render($component->getCard()));
115            $tpl->parseCurrentBlock();
116        } else {
117            $tpl->setCurrentBlock("no_card");
118            $tpl->setVariable("BODY", $this->getContentAsString($component, $default_renderer));
119            $tpl->parseCurrentBlock();
120        }
121
122        return $tpl->get();
123    }
124
125    /**
126     * @param Component\Panel\Report $component
127     * @param RendererInterface $default_renderer
128     * @return string
129     */
130    protected function renderReport(Component\Panel\Report $component, RendererInterface $default_renderer)
131    {
132        $tpl = $this->getTemplate("tpl.report.html", true, true);
133        $tpl->setVariable("TITLE", $component->getTitle());
134        $tpl->setVariable("BODY", $this->getContentAsString($component, $default_renderer));
135        return $tpl->get();
136    }
137
138    /**
139     * @inheritdocs
140     */
141    protected function getComponentInterfaceName()
142    {
143        return [Component\Panel\Panel::class];
144    }
145}
146