1<?php
2/**
3 * Group module (also called a group widget)
4 *
5 * @uses $vars['title']          The title of the module
6 * @uses $vars['content']        The module content
7 * @uses $vars['all_link']       A link to list content
8 * @uses $vars['add_link']       A link to create content
9 * @uses $vars['entity']         The ElggGroup for which this module is shown (default: page owner)
10 * @uses $vars['entity_type']    The entity type to use to generate title, links and content
11 * @uses $vars['entity_subtype'] The entity subtype to use to generate title, links and content
12 * @uses $vars['no_results']     The no result text to show in the listing (default: true => elgg_echo('notfound'))
13 */
14
15$group = elgg_extract('entity', $vars, elgg_get_page_owner_entity());
16if (!$group instanceof ElggGroup) {
17	return;
18}
19
20$entity_type = elgg_extract('entity_type', $vars);
21$entity_subtype = elgg_extract('entity_subtype', $vars);
22
23$can_default = (!empty($entity_type) && !empty($entity_subtype));
24
25// module title
26$title = elgg_extract('title', $vars);
27if (!isset($title) && $can_default) {
28	$title = elgg_echo("collection:{$entity_type}:{$entity_subtype}:group");
29}
30
31// link to listing page
32$menu = '';
33$all_link = elgg_extract('all_link', $vars);
34if (!isset($all_link) && $can_default) {
35	$all_href = elgg_generate_url("collection:{$entity_type}:{$entity_subtype}:group", [
36		'guid' => $group->guid,
37	]);
38	if (!empty($all_href)) {
39		$all_link = elgg_view('output/url', [
40			'href' => $all_href,
41			'text' => elgg_echo('link:view:all'),
42			'is_trusted' => true,
43		]);
44	}
45}
46
47if (!empty($all_link)) {
48	$menu = elgg_format_element('span', [
49		'class' => 'groups-widget-viewall',
50	], $all_link);
51}
52
53// content
54$content = elgg_extract('content', $vars);
55if (!isset($content) && $can_default) {
56	elgg_push_context('widgets');
57
58	$content = elgg_list_entities([
59		'type' => $entity_type,
60		'subtype' => $entity_subtype,
61		'container_guid' => $group->guid,
62		'limit' => 6,
63		'full_view' => false,
64		'pagination' => false,
65		'preload_containers' => false,
66		'no_results' => elgg_extract('no_results', $vars, true),
67	]);
68
69	elgg_pop_context();
70}
71
72// link to add page
73$footer = '';
74
75$add_link = elgg_extract('add_link', $vars);
76if (!isset($add_link) && $can_default) {
77	$add_href = elgg_generate_url("add:{$entity_type}:{$entity_subtype}", [
78		'guid' => $group->guid,
79	]);
80	if (!empty($add_href)) {
81		$add_link = elgg_view('output/url', [
82			'href' => $add_href,
83			'text' => elgg_echo("add:{$entity_type}:{$entity_subtype}"),
84			'is_trusted' => true,
85		]);
86	}
87}
88
89if (!empty($add_link)) {
90	$check_type = $entity_type ?: 'all';
91	$check_subtype = $entity_subtype ?: 'all';
92
93	if ($group->canWriteToContainer(0, $check_type, $check_subtype)) {
94		$footer = elgg_format_element('span', [
95			'class' => 'elgg-widget-more',
96		], $add_link);
97	}
98}
99
100// draw module
101echo elgg_view_module('info', $title, $content, [
102	'menu' => $menu,
103	'class' => 'elgg-module-group',
104	'footer' => $footer,
105]);
106