ILIAS  release_6 Revision v6.24-5-g0c8bfefb3b8
Renderer.php
Go to the documentation of this file.
1<?php
2
3/* Copyright (c) 2017 Alex Killing <killing@leifos.de> Extended GPL, see docs/LICENSE */
4
6
8use ILIAS\UI\Renderer as RendererInterface;
10
12{
16 public function render(Component\Component $component, RendererInterface $default_renderer)
17 {
18 $this->checkComponent($component);
19
20 if ($component instanceof Component\Item\Notification) {
21 return $this->renderNotification($component, $default_renderer);
22 } elseif ($component instanceof Component\Item\Group) {
23 return $this->renderGroup($component, $default_renderer);
24 } elseif ($component instanceof Component\Item\Standard) {
25 return $this->renderStandard($component, $default_renderer);
26 }
27 }
28
29 protected function renderGroup(Component\Item\Group $component, RendererInterface $default_renderer)
30 {
31 $tpl = $this->getTemplate("tpl.group.html", true, true);
32 $title = $component->getTitle();
33 $items = $component->getItems();
34
35 // items
36 foreach ($items as $item) {
37 $tpl->setCurrentBlock("item");
38 $tpl->setVariable("ITEM", $default_renderer->render($item));
39 $tpl->parseCurrentBlock();
40 }
41
42 if ($title != "") {
43 $tpl->setCurrentBlock("title");
44 $tpl->setVariable("TITLE", $title);
45 $tpl->parseCurrentBlock();
46 }
47
48 // actions
49 $actions = $component->getActions();
50 if ($actions !== null) {
51 $tpl->setVariable("ACTIONS", $default_renderer->render($actions));
52 } else {
53 $tpl->setVariable("ACTIONS", "");
54 }
55
56
57
58 return $tpl->get();
59 }
60
61 protected function renderStandard(Component\Item\Item $component, RendererInterface $default_renderer)
62 {
63 $tpl = $this->getTemplate("tpl.item_standard.html", true, true);
64
65 $this->renderTitle($component, $default_renderer, $tpl);
66 $this->renderDescription($component, $default_renderer, $tpl);
67 $this->renderProperties($component, $default_renderer, $tpl);
68 // color
69 $color = $component->getColor();
70 if ($color !== null) {
71 $tpl->setCurrentBlock("color");
72 $tpl->setVariable("COLOR", $color->asHex());
73 $tpl->parseCurrentBlock();
74 }
75
76 // lead
77 $lead = $component->getLead();
78 if ($lead != null) {
79 if (is_string($lead)) {
80 $tpl->setCurrentBlock("lead_text");
81 $tpl->setVariable("LEAD_TEXT", $lead);
82 $tpl->parseCurrentBlock();
83 }
84 if ($lead instanceof Component\Image\Image) {
85 $tpl->setCurrentBlock("lead_image");
86 $tpl->setVariable("LEAD_IMAGE", $default_renderer->render($lead));
87 $tpl->parseCurrentBlock();
88 }
89 if ($lead instanceof Component\Symbol\Icon\Icon) {
90 $tpl->setCurrentBlock("lead_icon");
91 $tpl->setVariable("LEAD_ICON", $default_renderer->render($lead));
92 $tpl->parseCurrentBlock();
93 $tpl->setCurrentBlock("lead_start_icon");
94 $tpl->parseCurrentBlock();
95 } else {
96 $tpl->setCurrentBlock("lead_start");
97 $tpl->parseCurrentBlock();
98 }
99 $tpl->touchBlock("lead_end");
100 }
101 // actions
102 $actions = $component->getActions();
103 if ($actions !== null) {
104 $tpl->setVariable("ACTIONS", $default_renderer->render($actions));
105 }
106 return $tpl->get();
107 }
108
109 protected function renderNotification(Component\Item\Notification $component, RendererInterface $default_renderer)
110 {
111 $tpl = $this->getTemplate("tpl.item_notification.html", true, true);
112 $this->renderTitle($component, $default_renderer, $tpl);
113 $this->renderDescription($component, $default_renderer, $tpl);
114 $this->renderProperties($component, $default_renderer, $tpl);
115 $tpl->setVariable("LEAD_ICON", $default_renderer->render($component->getLeadIcon()));
116
117 // actions
118 $actions = $component->getActions();
119 if ($actions !== null) {
120 $tpl->setVariable("ACTIONS", $default_renderer->render($actions));
121 }
122
123 // additional content
124 if ($component->getAdditionalContent()) {
125 $tpl->setCurrentBlock("additional_content");
126 $tpl->setVariable("ADDITIONAL_CONTENT", $default_renderer->render($component->getAdditionalContent()));
127 $tpl->parseCurrentBlock();
128 }
129
130 $aggregates_html = "";
131
132 // aggregate notification
133 $title = $this->getUIFactory()->button()->bulky($this->getUIFactory()->symbol()->glyph()->back(), $this->txt("back"), "");
134 $aggregates_html = $default_renderer->render(
135 $this->getUIFactory()->mainControls()->slate()->notification($default_renderer->render($title), $component->getAggregateNotifications())
136 );
137
138 $toggleable = true;
139 if (!empty($component->getAggregateNotifications())) {
140 $toggleable = false;
141 }
142
143 $component = $component->withAdditionalOnLoadCode(
144 function ($id) use ($toggleable) {
145 return "il.UI.item.notification.getNotificationItemObject($($id)).registerAggregates($toggleable);";
146 }
147 );
148
149 //Bind id
150 $item_id = $this->bindJavaScript($component);
151
152 $tpl->setCurrentBlock("aggregate_notifications");
153 $tpl->setVariable("AGGREGATES", $aggregates_html);
154 $tpl->setVariable("PARENT_ID", $item_id);
155 $tpl->parseCurrentBlock();
156
157 // close action
158 if ($component->getCloseAction()) {
159 $url = $component->getCloseAction();
160 $close_action = $this->getUIFactory()->button()->close()->withAdditionalOnLoadCode(
161 function ($id) use ($url, $item_id) {
162 return "il.UI.item.notification.getNotificationItemObject($($id)).registerCloseAction('$url',1);";
163 }
164 );
165 $tpl->setVariable("CLOSE_ACTION", $default_renderer->render($close_action));
166 }
167
168 $tpl->setCurrentBlock("id");
169 $tpl->setVariable('ID', $item_id);
170 $tpl->parseCurrentBlock();
171
172
173 return $tpl->get();
174 }
175
176 protected function renderTitle(
177 Component\Item\Item $component,
178 RendererInterface $default_renderer,
179 \ILIAS\UI\Implementation\Render\Template $tpl
180 ) {
181 $title = $component->getTitle();
182 if ($title instanceof \ILIAS\UI\Component\Button\Shy || $title instanceof \ILIAS\UI\Component\Link\Link) {
183 $title = $default_renderer->render($title);
184 }
185 $tpl->setVariable("TITLE", $title);
186 }
187
188 protected function renderDescription(
189 Component\Item\Item $component,
190 RendererInterface $default_renderer,
191 \ILIAS\UI\Implementation\Render\Template $tpl
192 ) {
193 // description
194 $desc = $component->getDescription();
195 if (trim($desc) != "") {
196 $tpl->setCurrentBlock("desc");
197 $tpl->setVariable("DESC", $desc);
198 $tpl->parseCurrentBlock();
199 }
200 }
201
202 protected function renderProperties(
203 Component\Item\Item $component,
204 RendererInterface $default_renderer,
205 \ILIAS\UI\Implementation\Render\Template $tpl
206 ) {
207 // properties
208 $props = $component->getProperties();
209 if (count($props) > 0) {
210 $cnt = 0;
211 foreach ($props as $name => $value) {
212 if ($value instanceof \ILIAS\UI\Component\Button\Shy) {
213 $value = $default_renderer->render($value);
214 }
215 $cnt++;
216 if ($cnt % 2 == 1) {
217 $tpl->setCurrentBlock("property_row");
218 $tpl->setVariable("PROP_NAME_A", $name);
219 $tpl->setVariable("PROP_VAL_A", $value);
220 } else {
221 $tpl->setVariable("PROP_NAME_B", $name);
222 $tpl->setVariable("PROP_VAL_B", $value);
223 $tpl->parseCurrentBlock();
224 }
225 }
226 if ($cnt % 2 == 1) {
227 $tpl->parseCurrentBlock();
228 }
229 $tpl->setCurrentBlock("properties");
230 $tpl->parseCurrentBlock();
231 }
232 }
233
237 public function registerResources(\ILIAS\UI\Implementation\Render\ResourceRegistry $registry)
238 {
239 parent::registerResources($registry);
240 $registry->register('./src/UI/templates/js/Item/notification.js');
241 }
242
246 protected function getComponentInterfaceName()
247 {
248 return array(
249 Component\Item\Standard::class,
250 Component\Item\Group::class,
251 Component\Item\Notification::class
252 );
253 }
254}
back()
Definition: back.php:2
An exception for terminatinating execution or to throw for unit testing.
Common interface to all items.
Definition: Group.php:14
Common interface to all items.
Definition: Item.php:14
getComponentInterfaceName()
Get the name of the component-interface this renderer is supposed to render.ATTENTION: Fully qualifie...
Definition: Renderer.php:246
renderProperties(Component\Item\Item $component, RendererInterface $default_renderer, \ILIAS\UI\Implementation\Render\Template $tpl)
Definition: Renderer.php:202
renderTitle(Component\Item\Item $component, RendererInterface $default_renderer, \ILIAS\UI\Implementation\Render\Template $tpl)
Definition: Renderer.php:176
renderStandard(Component\Item\Item $component, RendererInterface $default_renderer)
Definition: Renderer.php:61
renderGroup(Component\Item\Group $component, RendererInterface $default_renderer)
Definition: Renderer.php:29
renderNotification(Component\Item\Notification $component, RendererInterface $default_renderer)
Definition: Renderer.php:109
registerResources(\ILIAS\UI\Implementation\Render\ResourceRegistry $registry)
Definition: Renderer.php:237
render(Component\Component $component, RendererInterface $default_renderer)
Definition: Renderer.php:16
renderDescription(Component\Item\Item $component, RendererInterface $default_renderer, \ILIAS\UI\Implementation\Render\Template $tpl)
Definition: Renderer.php:188
getTemplate($name, $purge_unfilled_vars, $purge_unused_blocks)
Get template of component this renderer is made for.
bindJavaScript(JavaScriptBindable $component)
Bind the component to JavaScript.
checkComponent(Component $component)
Check if a given component fits this renderer and throw \LogicError if that is not the case.
A component is the most general form of an entity in the UI.
Definition: Component.php:14
An entity that renders components to a string output.
Definition: Renderer.php:15
if($format !==null) $name
Definition: metadata.php:230
Class ChatMainBarProvider \MainMenu\Provider.
Class Factory.
notification()
Definition: notification.php:2
$url
if(isset($_FILES['img_file']['size']) && $_FILES['img_file']['size'] > 0) $tpl