ILIAS  release_6 Revision v6.24-5-g0c8bfefb3b8
All Data Structures Namespaces Files Functions Variables Modules Pages
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 
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 }
Class Factory.
if(isset($_FILES['img_file']['size']) && $_FILES['img_file']['size'] > 0) $tpl
renderGroup(Component\Item\Group $component, RendererInterface $default_renderer)
Definition: Renderer.php:29
checkComponent(Component $component)
Check if a given component fits this renderer and throw if that is not the case. ...
renderDescription(Component\Item\Item $component, RendererInterface $default_renderer, \ILIAS\UI\Implementation\Render\Template $tpl)
Definition: Renderer.php:188
registerResources(\ILIAS\UI\Implementation\Render\ResourceRegistry $registry)
Definition: Renderer.php:237
Class ChatMainBarProvider .
Common interface to all items.
Definition: Item.php:13
back()
Definition: back.php:2
render(Component\Component $component, RendererInterface $default_renderer)
Definition: Renderer.php:16
if($format !==null) $name
Definition: metadata.php:230
Common interface to all items.
Definition: Group.php:13
renderStandard(Component\Item\Item $component, RendererInterface $default_renderer)
Definition: Renderer.php:61
notification()
Definition: notification.php:2
renderNotification(Component\Item\Notification $component, RendererInterface $default_renderer)
Definition: Renderer.php:109
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
$url
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.