1{* $Id$ *}
2
3{title help="Groups Management" admpage="login"}{tr}Admin groups{/tr}{/title}
4{if !$ts.ajax}
5	<div class="t_navbar mb-4">
6		{button href="tiki-adminusers.php" class="btn btn-primary" _type="link" _icon_name="user" _text="{tr}Admin Users{/tr}"}
7		{button href="tiki-admingroups.php?clean=y" class="btn btn-link" _type="link" _icon_name="trash" _text="{tr}Clear cache{/tr}"}
8		{if $groupname}
9			{if $prefs.feature_tabs ne 'y'}
10				{button href="tiki-admingroups.php?add=1&amp;cookietab=2#tab2" class="btn btn-primary" _icon_name="create" _text="{tr}Add New Group{/tr}"}
11			{else}
12				{button href="tiki-admingroups.php?add=1&amp;cookietab=2" class="btn btn-primary" _icon_name="create" _text="{tr}Add New Group{/tr}"}
13			{/if}
14		{/if}
15		{button href="tiki-objectpermissions.php" class="btn btn-link" _type="link" _icon_name="permission" _text="{tr}Permissions{/tr}"}
16		{if $prefs.feature_invite eq 'y' and $tiki_p_invite eq 'y'}
17			{button href="tiki-list_invite.php" class="btn btn-primary" _type="link" _icon_name="thumbs-up" _text="{tr}Invitation List{/tr}"}
18		{/if}
19	</div>
20{/if}
21{tabset name='tabs_admingroups'}
22
23{tab name="{tr}List{/tr}"}
24{* ----------------------- tab with list --------------------------------------- *}
25	{if !$ts.ajax}
26		<h2>{tr}List of existing groups{/tr}</h2>
27		{if !$ts.enabled}
28			{include file='find.tpl' find_show_num_rows='y'}
29			{if $cant_pages > $maxRecords or !empty($initial) or !empty($find)}
30				{initials_filter_links}
31			{/if}
32		{/if}
33		<form id="checkform1" method="post">
34		<div class="{if $js}table-responsive {/if}ts-wrapperdiv"> {* table-responsive class cuts off css drop-down menus *}
35	{/if}
36		<table id="{$ts.tableid}" class="table normal table-striped table-hover" data-count="{$cant_pages|escape}">
37			<thead>
38			<tr>
39				<th id="checkbox">{select_all checkbox_names='checked[]'}</th>
40				<th id="id">{self_link _sort_arg='sort_mode' _sort_field='id'}{tr}ID{/tr}{/self_link}</th>
41				<th id="group">{self_link _sort_arg='sort_mode' _sort_field='groupName'}{tr}Name{/tr}{/self_link}</th>
42				<th id="inherits">{tr}Inherits Permissions from{/tr}</th>
43				{if $prefs.useGroupHome eq 'y'}
44					<th id="home">{self_link _sort_arg='sort_mode' _sort_field='groupHome'}{tr}Homepage{/tr}{/self_link}</th>
45				{/if}
46				<th id="choice">{self_link _sort_arg='sort_mode' _sort_field='userChoice'}{tr}User Choice{/tr}{/self_link}</th>
47				<th id="actions"></th>
48			</tr>
49			</thead>
50			<tbody>
51			{section name=user loop=$users}
52				{if $groupname == $users[user].groupName}
53					{$href = '#'}
54					{$onclick = "onclick='showTab(2); return false;'"}
55				{else}
56					{$href = "tiki-admingroups.php?group={$users[user].groupName|escape:'url'}"}
57					{$onclick = ''}
58				{/if}
59				<tr>
60					<td class="checkbox-cell">
61						<div class="form-check">
62							{if $users[user].groupName ne 'Admins' and $users[user].groupName ne 'Anonymous' and $users[user].groupName ne 'Registered'}
63								<input type="checkbox" name="checked[]" value="{$users[user].groupName|escape}">
64							{/if}
65						</div>
66					</td>
67					<td class="id">{$users[user].id|escape}</td>
68					<td class="text">
69						<a class="link tips" href="{$href}"{$onclick} title="{tr}Edit group{/tr}:{$users[user].groupName|escape}">
70							{$users[user].groupName|escape}
71						</a>
72						{if $users[user].isTplGroup eq 'y' and $prefs.feature_templated_groups eq 'y'}
73							<sup class="tikihelp" title="{tr}Templated Groups Container{/tr}"> T </sup>
74						{/if}
75						{if $users[user].isRole eq 'y' and $prefs.feature_templated_groups eq 'y'}
76							<sup class="tikihelp" title="{tr}Role Group{/tr}"> R </sup>
77						{/if}
78						<div class="text">{tr}{$users[user].groupDesc|escape|nl2br}{/tr}</div>
79					</td>
80					<td class="text">
81						{foreach $users[user].included as $incl}
82							<div>
83								{if in_array($incl, $users[user].included_direct)}
84									{$incl|escape}
85								{else}
86									<i>{$incl|escape}</i>
87								{/if}
88							</div>
89						{/foreach}
90					</td>
91
92					{if $prefs.useGroupHome eq 'y'}
93						<td class="text">
94							<a class="link" href="tiki-index.php?page={$users[user].groupHome|escape:"url"}" title="{tr}Group Homepage{/tr}">{tr}{$users[user].groupHome}{/tr}</a>
95						</td>
96					{/if}
97
98					<td class="text">{tr}{$users[user].userChoice}{/tr}</td>
99					<td class="action">
100						{actions}
101						{strip}
102							<action>
103								<a href="tiki-admingroups.php?group={$users[user].groupName|escape:"url"}{if $prefs.feature_tabs ne 'y'}#tab2{/if}">
104									{icon name="edit" _menu_text='y' _menu_icon='y' alt="{tr}Edit{/tr}"}
105								</a>
106							</action>
107							<action>
108								{permission_link mode=text group=$users[user].groupName count=$users[user].permcant}
109							</action>
110							{if $users[user].groupName ne 'Anonymous' and $users[user].groupName ne 'Registered' and $users[user].groupName ne 'Admins'}
111								<action>
112									<a href="{bootstrap_modal controller=group action=remove_groups checked=$users[user].groupName}">
113										{icon name="remove" _menu_text='y' _menu_icon='y' alt="{tr}Remove{/tr}"}
114									</a>
115								</action>
116							{/if}
117						{/strip}
118						{/actions}
119					</td>
120				</tr>
121			{/section}
122			</tbody>
123		</table>
124	{if !$ts.ajax}
125		</div>
126		<div class="input-group col-sm-8">
127			<label for="submit_mult" class="col-form-label sr-only">{tr}Select action to perform with checked{/tr}</label>
128			<select name="action" class="form-control">
129				<option value="no_action" selected="selected">{tr}Select action to perform with checked{/tr}...</option>
130				<option value="remove_groups">{tr}Remove{/tr}</option>
131			</select>
132			<div class="input-group-append">
133				<input type="submit" form="checkform1" formaction="{bootstrap_modal controller=group}" class="btn btn-secondary" value="{tr}OK{/tr}" onclick="confirmAjax(event)">
134			</div>
135		</div>
136		</form>
137		{if !$ts.enabled}
138			{pagination_links cant=$cant_pages step=$prefs.maxRecords offset=$offset}{/pagination_links}
139		{/if}
140	{/if}
141{/tab}
142
143{if $groupname}
144	{assign var=tabaddeditgroup_admgrp value="{tr}Edit{/tr}"}
145	{$gname = "<i>{$groupname|escape}</i>"}
146{else}
147	{assign var=tabaddeditgroup_admgrp value="{tr}Create group{/tr}"}
148	{$gname = ""}
149{/if}
150
151{tab name="{$tabaddeditgroup_admgrp} {$gname}"}
152{* ----------------------- tab with form --------------------------------------- *}
153	{if !$ts.ajax}
154		{if !empty($user) and $prefs.feature_user_watches eq 'y' && !empty($groupname)}
155			<div class="float-sm-right">
156				{if not $group_info.isWatching}
157					{self_link watch=$groupname _class="tips" _title="{$groupname}:{tr}Group is NOT being monitored. Click icon to START monitoring.{/tr}"}
158					{icon name='watch' alt="{tr}Group is NOT being monitored. Click icon to START monitoring.{/tr}"}
159					{/self_link}
160				{else}
161					{self_link unwatch=$groupname _class="tips" _title="{$groupname}:{tr}Group IS being monitored. Click icon to STOP monitoring.{/tr}"}
162					{icon name='stop-watching' alt="{tr}Group IS being monitored. Click icon to STOP monitoring.{/tr}"}
163					{/self_link}
164				{/if}
165			</div>
166		{/if}
167		<h2>{$tabaddeditgroup_admgrp}</h2>
168		<form class="form-horizontal" action="tiki-admingroups.php" id="groupEdit" method="post">
169			<div class="form-group row">
170				<label for="groups_group" class="col-form-label col-md-3">{tr}Group{/tr}</label>
171				<div class="col-md-9">
172					{if $groupname neq 'Anonymous' and $groupname neq 'Registered' and $groupname neq 'Admins'}
173						<input type="text" name="name" id="groups_group" value="{$groupname|escape}" class="form-control">
174					{else}
175						<input type="hidden" name="name" id="groups_group" value="{$groupname|escape}">
176						{$groupname|escape}
177					{/if}
178				</div>
179			</div>
180			<div class="form-group row">
181				<label for="groups_desc" class="col-form-label col-md-3">{tr}Description{/tr}</label>
182				<div class="col-md-9">
183					<textarea rows="5" name="desc" id="groups_desc" class="form-control">{$groupdesc|escape}</textarea>
184				</div>
185			</div>
186			<div class="form-group row">
187				<label for="groups_inc" class="col-form-label col-md-3">{tr}Inheritance{/tr}</label>
188				<div class="col-md-9">
189					{if $inc|@count > 20 and $hasOneIncludedGroup eq "y"}
190						<ul>
191							{foreach key=gr item=yn from=$inc}
192								{if $yn eq 'y'}
193									<li>{$gr|escape}</li>
194								{/if}
195							{/foreach}
196						</ul>
197					{/if}
198					<select name="include_groups[]" id="groups_inc" multiple="multiple" size="8" class="form-control">
199						{if !empty($groupname)}
200							<option value="">{tr}None{/tr}</option>{/if}
201						{foreach key=gr item=yn from=$inc}
202							<option value="{$gr|escape}" {if $yn eq 'y'} selected="selected"{/if}>{$gr|truncate:"52"|escape}</option>
203						{/foreach}
204					</select>
205					<div class="form-text">
206						<p>{tr}Permissions will be inherited from these groups.{/tr} {if $prefs.jquery_ui_chosen neq 'y'}{tr}Use Ctrl+Click to select multiple options{/tr}</p>{/if}
207					</div>
208					{if $indirectly_inherited_groups|@count > 0}
209						<p>{tr}Indirectly included groups:{/tr}</p>
210						<ul>
211							{foreach $indirectly_inherited_groups as $gr}
212								<li>{$gr|escape}</li>
213							{/foreach}
214						</ul>
215					{/if}
216				</div>
217			</div>
218			{if $prefs.useGroupHome eq 'y'}
219				<div class="form-group row">
220					<label for="groups_home" class="col-form-label col-md-3">{tr}Group Home{/tr}</label>
221					<div class="col-md-9">
222						<input type="text" class="form-control" name="home" id="groups_home" value="{$grouphome|escape}">
223						{autocomplete element='#groups_home' type='pagename'}
224						<div class="form-text">
225							{tr}Use wiki page name or full URL.{/tr}
226							{tr}For other Tiki features, use links relative to the Tiki root (such as
227								<em>/tiki-forums.php</em>
228								).{/tr}
229						</div>
230					</div>
231				</div>
232			{/if}
233			{if $prefs.feature_categories eq 'y'}
234				<div class="form-group row">
235					<label for="groups_defcat" class="col-form-label col-md-3">{tr}Default Category{/tr}</label>
236					<div class="col-md-9">
237						<select name="defcat" id="groups_defcat" class="form-control">
238							<option value="" {if ($groupdefcat eq "") or ($groupdefcat eq 0)} selected="selected"{/if}>{tr}none{/tr}</option>
239							{foreach $categories as $id=>$category}
240								<option value="{$id|escape}" {if $id eq $groupdefcat}selected="selected"{/if}>{$category.categpath|escape}</option>
241							{/foreach}
242						</select>
243						<div class="form-text">
244							{tr}Default category assigned to uncategorized objects edited by a user with this default group.{/tr}
245						</div>
246					</div>
247				</div>
248			{/if}
249			{if $prefs.useGroupTheme eq 'y'}
250				<div class="form-group row">
251					<label for="groups_theme" class="col-form-label col-md-3">{tr}Group theme{/tr}</label>
252					<div class="col-md-9">
253						<select name="theme" id="groups_theme" class="form-control">
254							<option value="" {if $grouptheme eq ""} selected="selected"{/if}>{tr}none{/tr}
255								({tr}Use site default{/tr})
256							</option>
257							{foreach from=$group_themes key=theme item=theme_name}
258								<option value="{$theme|escape}" {if $grouptheme eq $theme}selected="selected"{/if}>{$theme_name}</option>
259							{/foreach}
260						</select>
261					</div>
262				</div>
263			{/if}
264			{if $prefs.feature_conditional_formatting eq 'y'}
265				<div class="form-group row">
266					<label for="groups_color" class="col-form-label col-md-3">{tr}Group color{/tr}</label>
267					<div class="col-md-9">
268						<input type="text" class="form-control" name="color" id="groups_color" value="{$groupcolor|escape}">
269						<div class="form-text">
270							{tr}Default color to use when plotting values for this group in charts. Use HEX notation, e.g. #FF0000 for red color.{/tr}
271						</div>
272					</div>
273				</div>
274			{/if}
275			{if $prefs.groupTracker eq 'y'}
276				<div class="form-group row">
277					<label for="groupstracker" class="col-form-label col-md-3">{tr}Group Information Tracker{/tr}</label>
278					<div class="col-md-9">
279						<select name="groupstracker" id="groupstracker" class="form-control">
280							<option value="0">{tr}choose a group tracker ...{/tr}</option>
281							{foreach key=tid item=tit from=$trackers}
282								<option value="{$tid}"{if isset($grouptrackerid) && $tid eq $grouptrackerid} {assign var="ggr" value="$tit"}selected="selected"{/if}>{$tit|escape}</option>
283							{/foreach}
284						</select>
285						<div class="form-text">
286							{tr}Choose a group tracker which can be used to add user registration fields or allow group permissions on a tracker. The tracker must have one user selector field that is set to auto-assign.{/tr}
287						</div>
288						{if isset($grouptrackerid) || $prefs.javascript_enabled eq 'y'}
289							<div id="groupfielddiv"{if empty($grouptrackerid) and $prefs.javascript_enabled eq 'y' and $prefs.jquery_ui_chosen neq 'y'} style="display: none;"{/if}>
290								<select name="groupfield" class="form-control">
291									<option value="0">{tr}choose a field ...{/tr}</option>
292									{if isset($groupFields)}
293										{section name=ix loop=$groupFields}
294											<option value="{$groupFields[ix].fieldId}"{if $groupFields[ix].fieldId eq $groupfieldid} selected="selected"{/if}>{$groupFields[ix].name|escape}</option>
295										{/section}
296									{/if}
297								</select>
298								<div class="form-text">
299									{tr}Select the user selector field from the above tracker.{/tr}
300								</div>
301							</div>
302						{/if}
303						{if isset($grouptrackerid)}
304							{button href="tiki-admin_tracker_fields.php?trackerId=$grouptrackerid" _text="{tr}Admin{/tr} $ggr"}
305						{else}
306							{button href="tiki-list_trackers.php" _text="{tr}Go to trackers list{/tr}"}
307						{/if}
308					</div>
309				</div>
310			{/if}
311			{if $prefs.userTracker eq 'y'}
312				<div class="form-group row">
313					<label for="userstracker" class="col-form-label col-md-3">{tr}User Registration Tracker{/tr}</label>
314					<div class="col-md-9">
315						<select name="userstracker" id="userstracker" class="form-control">
316							<option value="0">{tr}choose a user tracker ...{/tr}</option>
317							{foreach key=tid item=tit from=$trackers}
318								<option value="{$tid}"{if isset($userstrackerid) && $tid eq $userstrackerid} {assign var="ugr" value="$tit"}selected="selected"{/if}>{$tit|escape}</option>
319							{/foreach}
320						</select>
321						<div class="form-text">
322							{tr}Choose a user tracker to provide fields for a new user to complete upon registration. The tracker must have one user selector field that is set to auto-assign.{/tr}
323						</div>
324						{if (isset($userstrackerid) or $prefs.javascript_enabled eq 'y')}
325							<div id="usersfielddiv"{if empty($userstrackerid) and $prefs.javascript_enabled eq 'y' and $prefs.jquery_ui_chosen neq 'y'} style="display: none;"{/if}>
326								<label>{tr}Select user field{/tr}</label> <select name="usersfield" class="form-control">
327									{if !empty($usersFields)}
328										<option value="0">{tr}Choose a field ...{/tr}</option>
329										{section name=ix loop=$usersFields}
330											<option value="{$usersFields[ix].fieldId}"{if $usersFields[ix].fieldId eq $usersfieldid} selected="selected"{/if}>{$usersFields[ix].fieldId}
331												- {$usersFields[ix].name|escape}</option>
332										{/section}
333									{else}
334										<option value="0">{tr}No fields in tracker ...{/tr}</option>
335									{/if}
336								</select>
337								<div class="form-text">
338									{tr}Select the user selector field from the above tracker to link a tracker item to the user upon registration.{/tr}
339								</div>
340							</div>
341							{jq}
342								$("#userstracker, #groupstracker").change(function () {
343								var $element = this.id,
344								$fields = $element == 'userstracker' ? $('select[name=usersfield]') : $('select[name=groupfield]'),
345								$showid = $element == 'userstracker' ? '#usersfielddiv' : '#groupfielddiv';
346								if ($(this).val() > 0) {
347								$.getJSON($.service('tracker', 'list_fields'), {trackerId: $(this).val()}, function (data) {
348								if (data && data.fields) {
349								if (data.fields.length > 0) {
350								$fields.empty().append('
351								<option value="0">{tr}choose a field ...{/tr}</option>
352								'); var sel = ''; $(data.fields).each(function () { if (this.type === 'u' && this.options_array[0] == 1) { sel = ' selected="selected"'; } else { sel = ''; } $fields.append('
353								<option value="' + this.fieldId + '"
354								' + sel + '>' + this.fieldId + ' - ' + this.name + '</option>'); }); } else { $fields.empty().append('
355								<option value="0">{tr}No fields in this tracker{/tr}</option>
356								');
357								}
358								$($showid).show();
359								$('#registerfields').show();
360								if (jqueryTiki.chosen) {
361								$fields.trigger("chosen:updated");
362								}
363								}
364								});
365								} else {
366								$fields.empty();
367								$($showid).hide();
368								}
369								});
370							{/jq}
371						{/if}
372						{if isset($userstrackerid)}
373							{button href="tiki-admin_tracker_fields.php?trackerId=$userstrackerid" _text="{tr}Admin{/tr} $ugr"}
374						{else}
375							{button href="tiki-list_trackers.php" _text="{tr}Go to tracker list{/tr}"}
376						{/if}
377					</div>
378				</div>
379				{if $prefs.feature_wizard_user eq 'y' and $groupname == 'Registered'}
380					<div class="form-group row">
381						<label class="col-form-label col-md-3">{tr}User Wizard Fields{/tr}</label>
382						<div class="col-md-9">
383							{tr}By default, the same fields as in registration are used.{/tr} {tr _0="tiki-admin.php?page=login"}You can choose in the
384							<a href="%0">Login admin
385								panel</a> to show different fields in User Wizard than the ones asked at Registration Time{/tr}
386							.</td>
387						</div>
388					</div>
389				{/if}
390			{/if}
391			{if $prefs.userTracker == 'y' || $prefs.useGroupTheme == 'y'}
392				<div id="registerfields" class="form-group row"{if empty($userstrackerid) && empty($grouptrackerid) && $prefs.javascript_enabled == 'y' && $prefs.jquery_ui_chosen != 'y'} style="display: none;"{/if}>
393					<label for="registrationUserFieldIds" class="col-form-label col-md-3">{tr}Group or User Tracker Registration Fields{/tr}</label>
394					<div class="col-md-9">
395						<input type="text" class="form-control" name="registrationUsersFieldIds" value="{$registrationUsersFieldIds|escape}">
396						<div class="form-text">
397							<p>{tr}If either a group information tracker or user registration tracker has been selected above, enter colon-separated field ID numbers for the tracker fields in the above tracker to include on the registration form for a new user to complete.{/tr}</p>
398						</div>
399					</div>
400				</div>
401			{/if}
402			{if $groupname neq 'Anonymous' and $groupname neq 'Registered' and $groupname neq 'Admins'}
403				<div class="form-group row">
404					<label class="col-form-label col-md-3">{tr}User Choice{/tr}</label>
405					<div class="col-md-9">
406						<div class="form-check">
407							<label class="form-check-label">
408								<input class="form-check-input" type="checkbox" name="userChoice"{if $userChoice eq 'y'} checked="checked"{/if}>
409								{tr}User can assign himself or herself to the group{/tr}
410							</label>
411						</div>
412					</div>
413				</div>
414				<div class="form-group row">
415					<label class="col-form-label col-md-3">{tr}Membership expiry{/tr}</label>
416					<div class="col-md-9">
417						<label>{tr}Anniversary{/tr}</label>
418						<input type="text" name="anniversary" class="form-control" value="{$group_info.anniversary|escape}">
419						<div class="form-text">{tr}Use MMDD to specify an annual date as of which all users will be unassigned from the group, or DD to specify a monthly date.{/tr}</div>
420						<label>{tr}Or{/tr}</label><br> <label>{tr}Number of Days{/tr}</label>
421						<input type="text" class="form-control" name="expireAfter" value="{$group_info.expireAfter|escape}">
422						<div class="form-text">
423							{tr}Number of days after which all users will be unassigned from the group.{/tr}
424						</div>
425					</div>
426				</div>
427				<div class="form-group row">
428					<label for="prorateInterval" class="col-form-label col-md-3">{tr}Pro-Rate Membership{/tr}</label>
429					<div class="col-md-9">
430						<select name="prorateInterval" class="form-control">
431							<option value="day" {if $group_info.prorateInterval eq 'day'}selected="selected"{/if}>{tr}Day{/tr}</option>
432							<option value="month" {if $group_info.prorateInterval eq 'month'}selected="selected"{/if}>{tr}Month{/tr}</option>
433							<option value="year" {if $group_info.prorateInterval eq 'year'}selected="selected"{/if}>{tr}Year{/tr}</option>
434						</select>
435						<div class="form-text">
436							{tr}Payment for membership extension is prorated at a minimum interval.{/tr}
437						</div>
438					</div>
439				</div>
440			{/if}
441			<div class="form-group row">
442				<label class="col-form-label col-md-3">{tr}Group{/tr}</label>
443				<div class="col-md-9">
444					<input class="form-control" type="text" size="40" name="emailPattern" value="{$group_info.emailPattern|escape}">
445					<div class="form-text">
446						<p>{tr}Users are automatically assigned at registration in the group if their emails match the pattern.{/tr}</p>
447						<p>{tr}Example:{/tr} /@(tw.org$)|(tw\.com$)/</p>
448					</div>
449				</div>
450			</div>
451			{if $prefs.feature_templated_groups eq 'y'}
452				<div class="form-group row">
453					<label class="col-form-label col-md-3">{tr}Role Group{/tr}</label>
454					<div class="col-md-9">
455						<div class="form-check">
456							<label class="form-check-label">
457								<input class="form-check-input" type="checkbox" name="isRole"{if $isRole eq 'y'} checked="checked"{/if}>
458								{tr}This group is used as a role{/tr}
459							</label>
460						</div>
461					</div>
462				</div>
463				<div class="form-group row">
464					<label class="col-form-label col-md-3">{tr}Templated Groups{/tr}</label>
465					<div class="col-md-9">
466						<div class="form-check">
467							<label class="form-check-label">
468								<input class="form-check-input" type="checkbox" name="isTplGroup"{if $isTplGroup eq 'y'} checked="checked"{/if}>
469								{tr}This group is a container for templated groups{/tr}
470							</label>
471						</div>
472					</div>
473				</div>
474			{/if}
475			{if $group ne '' and $groupname neq 'Anonymous'}
476				<div class="form-group row">
477					<label class="col-form-label col-md-3">{tr}Assign group<em>management</em>permissions{/tr}</label>
478					<div class="col-md-9">
479						{self_link _script="tiki-objectpermissions.php" objectType="group" objectId=$groupname objectName=$groupname permType="group"}
480						{icon _text="{tr}Assign Permissions{/tr}" name="key"}
481						{/self_link}
482					</div>
483				</div>
484			{/if}
485
486			<div class="submit form-group row">
487				<div class="col-md-9 offset-md-3">
488					{if $group ne ''}
489						<input type="hidden" name="olgroup" value="{$group|escape}">
490						<button type="submit" class="btn btn-secondary" form="groupEdit" formaction="{bootstrap_modal controller=group action=modify_group}" onclick="confirmAjax(event)">
491							{tr}Save{/tr}
492						</button>
493					{else}
494						<button type="submit" class="btn btn-secondary" form="groupEdit" formaction="{bootstrap_modal controller=group action=new_group}" onclick="confirmAjax(event)">
495							{tr}Add{/tr}
496						</button>
497					{/if}
498				</div>
499			</div>
500			<br><br>
501
502			{if $prefs.groupTracker eq 'y'}
503				<div class="form-group row">
504					<div class="col-md-9 offset-md-3">
505						{if !empty($grouptrackerid) and $groupitemid}
506							{tr}Group tracker item : {$groupitemid}{/tr}
507							{button href="tiki-view_tracker_item.php?trackerId=$grouptrackerid&amp;itemId=$groupitemid&amp;show=mod" _text="{tr}Edit Item{/tr}"}
508						{elseif !empty($grouptrackerid)}
509							{if $groupfieldid}
510								{tr}Group tracker item not found{/tr}
511								{button href="tiki-view_tracker.php?trackerId=$grouptrackerid" _text="{tr}Create Item{/tr}"}
512							{else}
513								{tr}Choose a field ...{/tr}
514							{/if}
515						{/if}
516						<br><br>
517					</div>
518				</div>
519			{/if}
520		</form>
521	{/if}
522{/tab}
523
524{if $groupname}
525	{assign var=tabgroup_memberstabgroup value="{tr}Members{/tr}"}
526	{$gname = "{$groupname|escape}"}
527
528	{tab name="{$tabgroup_memberstabgroup} {$gname}"}
529	{* ----------------------- tab with memberlist --------------------------------------- *}
530		<div class="form-group row">
531			{if $membersCount > 0}
532				{if !$ts.ajax}
533					<div class="col-lg-8">
534					<h2>{tr}Members{/tr} <span class="badge badge-secondary">{$membersCount}</span></h2>
535					<form id="checkform2" method="post">
536					<input type="hidden" name="group" value="{$group|escape}"/>
537					<div class="ts-wrapperdiv">
538				{/if}
539				<table id="groupsMembers" class="table normal table-striped table-hover" data-count="{$membersCount}">
540					<thead>
541					<tr>
542						<th id="checkbox" class="auto">{if $memberslist}{select_all checkbox_names='checked[]'}{/if}</th>
543						<th id="user">{self_link _sort_arg='sort_mode_member' _sort_field='login'}{tr}User{/tr}{/self_link}</th>
544						<th id="assigned">{self_link _sort_arg='sort_mode_member' _sort_field='created'}{tr}Assigned{/tr}{/self_link}</th>
545						<th id="expires">{self_link _sort_arg='sort_mode_member' _sort_field='expire'}{tr}Expires{/tr}{/self_link}</th>
546						<th id="actions"></th>
547					</tr>
548					</thead>
549					<tbody>
550					{foreach from=$memberslist item=member}
551						<tr>
552							<td class="checkbox-cell">
553								<div class="form-check"><input type="checkbox" name="checked[]" value="{$member.login}">
554								</div>
555							</td>
556							<td class="username">{$member.login|userlink}</td>
557							<td class="date">{if not empty($member.created)}{$member.created|tiki_short_datetime}{/if}</td>
558							<td class="date">{if not empty($member.expire)}{$member.expire|tiki_short_datetime}{/if}</td>
559							<td class="action">
560								{actions}
561								{strip}
562									<action>
563										<a href="tiki-adminusers.php?user={$member.userId|escape:"url"}{if $prefs.feature_tabs ne 'y'}#tab2{/if}">
564											{icon name="edit" _menu_text='y' _menu_icon='y' alt="{tr}Edit user{/tr}"}
565										</a>
566									</action>
567									{if $groupname neq 'Registered'}
568										<action>
569											<a href="{bootstrap_modal controller=user action=manage_groups checked=$member.login groupremove=$groupname anchor='#contenttabs_admingroups-3'}">
570												{icon name="remove" _menu_text='y' _menu_icon='y' alt="{tr}Remove from group{/tr}"}
571											</a>
572										</action>
573									{/if}
574								{/strip}
575								{/actions}
576							</td>
577						</tr>
578					{/foreach}
579					</tbody>
580				</table>
581				{if !$ts.ajax}
582					</div>
583
584					{if $groupname neq 'Registered'}
585						<div class="input-group">
586							<select class="form-control" name="action">
587								<option value="no_action" selected="selected">
588									{tr}Select action to perform with checked{/tr}...
589								</option>
590								<option value="manage_groups">{tr}Unassign{/tr}</option>
591							</select> <span class="input-group-append">
592										<input type="submit" class="btn btn-primary" form="checkform2" formaction="{bootstrap_modal controller=user groupremove="$groupname" anchor='#contenttabs_admingroups-3'}" value="{tr}OK{/tr}" onclick="confirmAjax(event)">
593									</span>
594						</div>
595					{/if}
596					</form>
597					</div>
598					{if !$ts.enabled}
599						{pagination_links cant=$membersCount step=$prefs.maxRecords offset=$membersOffset offset_arg='membersOffset'}{/pagination_links}
600					{/if}
601				{/if}
602			{else}
603				<div class="col-lg-8">
604					<h2>{tr}Members{/tr} <span class="badge badge-secondary">{$membersCount}</span></h2>
605					<em>{tr}No members{/tr}</em>
606				</div>
607			{/if}
608			<div class="col-lg-4">
609				<form id="addorban" method="post" action="tiki-admingroups.php">
610					<h2>{tr}Add or ban users{/tr}</h2>
611					<div>
612						<select name="user[]" multiple="multiple" size="10" class="custom-select">
613							{foreach from=$userslist item=iuser}
614								<option>{$iuser|escape}</option>
615							{/foreach}
616						</select>
617					</div>
618					<div class="mt-1">
619						<button type="submit" class="btn btn-link tips" form="addorban" formaction="{bootstrap_modal controller=group action=add_user}" title=":{tr}Add to group{/tr}" onclick="confirmAjax(event)">
620							{icon name=add}
621						</button>
622						<button type="submit" class="btn btn-link tips" form="addorban" formaction="{bootstrap_modal controller=group action=ban_user}" title=":{tr}Ban from group{/tr}" onclick="confirmAjax(event)">
623							{icon name=ban iclass="text-danger"}
624						</button>
625					</div>
626					<input type="hidden" name="group" value="{$groupname|escape}">
627				</form>
628			</div>
629		</div>
630	{/tab}
631
632	{assign var=tabgroup_bannedtabgroup value="{tr}Users banned from{/tr}"}
633	{$gname = "{$groupname|escape}"}
634
635	{tab name="{$tabgroup_bannedtabgroup} {$gname}"}
636	{* ----------------------- tab with users banned from group --------------------------------------- *}
637		<h2>{tr}Banned members{/tr} <span class="badge badge-secondary">{$bannedCount}</span></h2>
638		{if $bannedlist|count > 0}
639			<div class="{if $js}table-responsive {/if}ts-wrapperdiv"> {* table-responsive class cuts off css drop-down menus *}
640				<form id="checkform3" method="post">
641					<table id="bannedMembers" class="table normal table-striped table-hover" data-count="{$bannedCount}">
642						<thead>
643						<tr>
644							<th id="checkbox" class="auto">{select_all checkbox_names='user[]'}</th>
645							<th id="user">{tr}User{/tr}</th>
646							<th id="unban">{tr}Unban user{/tr}</th>
647						</tr>
648						</thead>
649						<tbody>
650						{foreach from=$bannedlist item=member}
651							<tr>
652								<td class="checkbox-cell">
653									<div class="form-check"><input type="checkbox" name="user[]" value="{$member}"></div>
654								</td>
655								<td class="username">{$member|userlink}</td>
656								<td class="action">
657									<a href="{bootstrap_modal controller=group action=unban_user user=$member group=$groupname}" class="tips" title=":{tr _0=$member _1=$group}Unban user %0 from group %1{/tr}">
658										{icon name="ok"}
659									</a>
660								</td>
661							</tr>
662						{/foreach}
663						</tbody>
664					</table>
665					<input type="hidden" name="group" value="{$groupname}">
666			</div>
667			{if !$ts.ajax}
668				<div class="input-group col-sm-8">
669					<select class="form-control" name="action">
670						<option value="no_action" selected="selected">
671							{tr}Select action to perform with checked{/tr}...
672						</option>
673						<option value="unban_user">{tr}Unban{/tr}</option>
674					</select> <span class="input-group-append">
675							<input type="submit" class="btn btn-primary" form="checkform3" formaction="{bootstrap_modal controller=group}" value="{tr}OK{/tr}" onclick="confirmAjax(event)">
676						</span>
677				</div>
678				</form>
679				<br>
680			{/if}
681		{else}
682			<div class="col-sm-12">
683				<em>{tr}No banned members{/tr}</em>
684			</div>
685			<br>
686		{/if}
687	{/tab}
688{/if}
689
690{if $groupname}
691	{assign var=tabgroup_importexporttabgroup value="{tr}Import/export{/tr}"}
692	{$gname = "{$groupname|escape}"}
693
694	{tab name="{$tabgroup_importexporttabgroup} {$gname}"}
695	{* ----------------------- tab with import/export --------------------------------------- *}
696
697		{if !$ts.ajax}
698			<form method="post" action="tiki-admingroups.php" enctype="multipart/form-data" class="form-horizontal">
699				<input type="hidden" name="group" value="{$groupname|escape}">
700
701				<h2>{tr}Export group users (CSV file){/tr}</h2>				<br>
702				<div class="form-group row">
703					<label class="col-sm-3 col-form-label">{tr}Charset encoding{/tr}</label>
704					<div class="col-sm-7">
705						<select name="encoding" class="form-control">
706							<option value="UTF-8" selected="selected">{tr}UTF-8{/tr}</option>
707							<option value="ISO-8859-1">{tr}ISO-8859-1{/tr}</option>
708						</select>
709					</div>
710				</div>
711				<div class="form-group row">
712					<label class="col-sm-3 col-form-label">{tr}Fields{/tr}</label>
713					<div class="col-sm-7">
714						<div class="form-check">
715							<label class="form-check-label">
716								<input class="form-check-input" type="checkbox" name="username" checked="checked"> {tr}Username{/tr}
717							</label>
718						</div>
719						<div class="form-check">
720							<label class="form-check-label">
721								<input class="form-check-input" type="checkbox" name="email"> {tr}Email{/tr}
722							</label>
723						</div>
724						<div class="form-check">
725							<label class="form-check-label">
726								<input class="form-check-input" type="checkbox" name="lastLogin"> {tr}Last login{/tr}
727							</label>
728						</div>
729					</div>
730				</div>
731				<div class="form-group row">
732					<label class="col-sm-3 col-form-label"></label>
733					<div class="col-sm-7">
734						<input type="submit" class="btn btn-primary" name="export" value="{tr}Export{/tr}">
735					</div>
736				</div>
737				<br>
738				<h2>{tr}Import users to group (CSV file){/tr}</h2>				<br>
739				<div class="form-group row">
740					<label class="col-sm-3 col-form-label">
741						{tr}CSV File{/tr}
742						<a title="{tr}Help{/tr}" {popup text='user<br>user1<br>user2'}>{icon name='help'}</a> </label>
743					<div class="col-sm-7">
744						<input name="csvlist" type="file" class="form-control">
745						<div class="form-text">
746							{tr}Imported users must already exist. To create users and assign them to groups, go to
747								<a href="tiki-adminusers.php">admin->users</a>
748								.{/tr}
749						</div>
750					</div>
751				</div>
752				<div class="form-group row">
753					<label class="col-sm-3 col-form-label"></label>
754					<div class="col-sm-7">
755						<input type="submit" class="btn btn-primary" name="import" value="{tr}Import{/tr}">
756					</div>
757				</div>
758			</form>
759		{/if}
760	{/tab}
761{/if}
762
763{/tabset}
764