1<?php
2// (c) Copyright by authors of the Tiki Wiki CMS Groupware Project
3//
4// All Rights Reserved. See copyright.txt for details and a complete list of authors.
5// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details.
6// $Id$
7//this script may only be included - so its better to die if called directly.
8if (strpos($_SERVER["SCRIPT_NAME"], basename(__FILE__)) !== false) {
9	header("location: index.php");
10	exit;
11}
12
13/**
14 * @return array
15 */
16function module_users_list_info()
17{
18	return [
19		'name' => tra('Users List'),
20		'description' => tra('Display a list of users with optional extra information from each.'),
21		'prefs' => ['feature_wiki'],
22		'params' => [
23			'login' => [
24				'name' => tra('Login'),
25				'description' => tra('Show the user name.') . ' ' . tra('Possible values:') . ' ' . tra('y|n'),
26				'filter' => 'word',
27				'required' => false,
28				'default' => 'y'
29			],
30			'realName' => [
31				'name' => tra('Real Name'),
32				'description' => tra('Show the user real name.') . ' ' . tra('Possible values:') . ' ' . tra('y|n'),
33				'filter' => 'word',
34				'required' => false,
35				'default' => 'n'
36			],
37			'lastLogin' => [
38				'name' => tra('Last Login'),
39				'description' => tra('Show the last login date.') . ' ' . tra('Possible values:') . ' ' . tra('y|n'),
40				'filter' => 'word',
41				'required' => false,
42				'default' => 'n'
43			],
44			'groups' => [
45				'name' => tra('Groups'),
46				'description' => tra('Show the direct and included groups a user belongs to.') . ' ' . tra('Possible values:') . ' ' . tra('y|n'),
47				'filter' => 'word',
48				'required' => false,
49				'default' => 'n'
50			],
51			'avatar' => [
52				'name' => tra('Profile picture'),
53				'description' => tra('Show the user profile picture.') . ' ' . tra('Possible values:') . ' ' . tra('y|n'),
54				'filter' => 'word',
55				'required' => false,
56				'default' => 'n'
57			],
58			'userPage' => [
59				'name' => tra('User Page'),
60				'description' => tra('Show a link to the userPage.') . ' ' . tra('Possible values:') . ' ' . tra('y|n'),
61				'filter' => 'word',
62				'required' => false,
63				'default' => 'n'
64			],
65			'log' => [
66				'name' => tra('Log'),
67				'description' => tra('Show a link to the user logs(feature actionlog must be activated).') . ' ' . tra('Possible values:') . ' ' . tra('y|n'),
68				'filter' => 'word',
69				'required' => false,
70				'default' => 'n'
71			],
72			'group' => [
73				'name' => tra('Group'),
74				'description' => tra('Show only the users of the group.') . ' ' . tra('Possible values:') . ' ' . tra('Groupname'),
75				'filter' => 'word',
76				'required' => false,
77				'default' => 'n'
78			],
79			'includedGroups' => [
80				'name' => tra('Included Groups'),
81				'description' => tra('Show only the users of the group group and of a group including group.') . ' ' . tra('Possible values:') . ' ' . tra('y|n'),
82				'filter' => 'word',
83				'required' => false,
84				'default' => 'n'
85			],
86			'initial' => [
87				'name' => tra('initial'),
88				'description' => tra('Show only the users whose name begins with the letter.') . ' ' . tra('Possible values:') . ' ' . tra('a letter'),
89				'filter' => 'word',
90				'required' => false,
91				'default' => 'n'
92			],
93			'heading' => [
94				'name' => tra('heading'),
95				'description' => tra('Show the table heading.') . ' ' . tra('Possible values:') . ' ' . tra('y|n'),
96				'filter' => 'word',
97				'required' => false,
98				'default' => 'y'
99			],
100			'sort_mode' => [
101				'name' => tra('Sort Mode'),
102				'description' => tra('Sort users in ascending or descending order using these values: ') .
103					'login_asc, login_desc, email_asc, email_desc.',
104				'filter' => 'word',
105				'required' => false,
106				'default' => 'login_asc'
107			],
108		],
109		'common_params' => ['nonums', 'rows']
110	];
111}
112
113/**
114 * @param $module_params
115 */
116function module_users_list($module_params)
117{
118	global $prefs;
119	$userlib = TikiLib::lib('user');
120	$tikilib = TikiLib::lib('tiki');
121	$smarty = TikiLib::lib('smarty');
122
123	if (isset($module_params['params']['group'])) {
124		$group = [$module_params['params']['group']];
125		if (isset($module_params['params']['includedGroups']) && $module_params['params']['includedGroups'] == 'y') {
126			$group = array_merge($group, $userlib->get_including_groups($group[0]));
127		}
128	} else {
129		$group = '';
130	}
131
132	if (! isset($module_params['params']['sort_mode'])) {
133		$sort_mode = 'login_asc';
134	} else {
135		$sort_mode = $module_params['params']['sort_mode'];
136	}
137
138	$users = $userlib->get_users(0, -1, $sort_mode, '', ! empty($module_params['initial']) ? $module_params['initial'] : '', isset($module_params['groups']) ? true : false, $group);
139	if (isset($_REQUEST["realName"]) && ($prefs['auth_ldap_nameattr'] == '' || $prefs['auth_method'] != 'ldap')) {
140		$tikilib->set_user_preference($userwatch, 'realName', $_REQUEST["realName"]);
141		if ($prefs['user_show_realnames'] == 'y') {
142			$cachelib = TikiLib::lib('cache');
143			$cachelib->invalidate('userlink.' . $user . '0');
144		}
145	}
146
147	for ($i = 0; $i < $users['cant']; ++$i) {
148		$my_user = $users['data'][$i]['user'];
149		if (isset($module_params['params']['realName']) && $module_params['params']['realName'] == 'y') {
150			$users['data'][$i]['realName'] = $tikilib->get_user_preference($my_user, 'realName', '');
151		}
152		if (isset($module_params['params']['avatar']) && $module_params['params']['avatar'] == 'y') {
153			$users['data'][$i]['avatar'] = $tikilib->get_user_avatar($my_user);
154		}
155		if ((isset($module_params['params']['realName']) && $module_params['params']['realName'] == 'y')
156			|| (isset($module_params['params']['login']) && $module_params['params']['login'] == 'y')) {
157			$users['data'][$i]['info_public'] = $tikilib->get_user_preference($my_user, 'user_information', 'public') != 'private' ? 'y' : 'n';
158		}
159		if (isset($module_params['params']['userPage']) && $module_params['params']['userPage'] == 'y') {
160			global $feature_wiki_userpage;
161			if ($prefs['feature_wiki_userpage'] == 'y' or $feature_wiki_userpage == 'y') {
162				if (! isset($prefs['feature_wiki_userpage_prefix'])) {//trick compat 1.9, 1.10
163					global $feature_wiki_userpage_prefix;
164					$pre = $feature_wiki_userpage_prefix;
165				} else {
166					$pre = $prefs['feature_wiki_userpage_prefix'];
167				}
168				if ($tikilib->page_exists($pre . $my_user)) {
169					$users['data'][$i]['userPage'] = $pre . $my_user;
170				}
171			}
172		}
173	}
174	if (isset($module_params['params']['log']) && $module_params['params']['log'] == 'y' && $prefs['feature_actionlog'] != 'y') {
175		$module_params['params']['log'] = 'n';
176	}
177	$smarty->assign_by_ref('users', $users['data']);
178	$smarty->assign_by_ref('module_params_users_list', $module_params['params']);
179}
180