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