1<?php
2
3/**
4 * Gallery view
5 *
6 * Implemented as an unorder list
7 *
8 * @uses $vars['items']         Array of ElggEntity, ElggAnnotation or ElggRiverItem objects
9 * @uses $vars['offset']        Index of the first list item in complete list
10 * @uses $vars['limit']         Number of items per page
11 * @uses $vars['count']         Number of items in the complete list
12 * @uses $vars['pagination']    Show pagination? (default: true)
13 * @uses $vars['position']      Position of the pagination: before, after, or both
14 * @uses $vars['full_view']     Show the full view of the items (default: false)
15 * @uses $vars['gallery_class'] Additional CSS class for the <ul> element
16 * @uses $vars['item_class']    Additional CSS class for the <li> elements
17 * @uses $vars['item_view']     Alternative view to render list items
18 * @uses $vars['no_results']    Message to display if no results (string|Closure)
19 */
20$items = elgg_extract('items', $vars);
21$count = elgg_extract('count', $vars);
22$pagination = elgg_extract('pagination', $vars, true);
23$position = elgg_extract('position', $vars, 'after');
24$no_results = elgg_extract('no_results', $vars, '');
25
26if ($no_results === true) {
27	$no_results = elgg_echo('notfound');
28}
29
30if (!$items && $no_results) {
31	echo elgg_view('page/components/no_results', $vars);
32	return;
33}
34
35if (!is_array($items) || count($items) == 0) {
36	return;
37}
38
39elgg_push_context('gallery');
40
41$list_classes = elgg_extract_class($vars, 'elgg-gallery', 'gallery_class');
42
43$item_classes = elgg_extract_class($vars, 'elgg-item', 'item_class');
44
45$nav = ($pagination) ? elgg_view('navigation/pagination', $vars) : '';
46
47$index = 0;
48$list_items = '';
49foreach ($items as $item) {
50	$item_view_vars = $vars;
51	$item_view_vars['list_item_index'] = $index;
52	$item_view = elgg_view_list_item($item, $item_view_vars);
53	if (!$item_view) {
54		continue;
55	}
56
57	$li_attrs = ['class' => $item_classes];
58
59	if ($item instanceof \ElggEntity) {
60		$li_attrs['id'] = "elgg-{$item->getType()}-{$item->getGUID()}";
61	} else if (is_callable([$item, 'getType'])) {
62		$li_attrs['id'] = "item-{$item->getType()}-{$item->id}";
63	}
64
65	$list_items .= elgg_format_element('li', $li_attrs, $item_view);
66	$index++;
67}
68
69if ($position == 'before' || $position == 'both') {
70	echo $nav;
71}
72
73if (empty($list_items) && $no_results) {
74	// there are scenarios where item views do not output html. In those cases show the no results info
75	echo elgg_view('page/components/no_results', $vars);
76} else {
77	echo elgg_format_element('ul', ['class' => $list_classes], $list_items);
78}
79
80if ($position == 'after' || $position == 'both') {
81	echo $nav;
82}
83
84elgg_pop_context();
85