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&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&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&itemId=$groupitemid&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