X-Git-Url: http://git.cyclocoop.org/%7B%24www_url%7Dadmin/compta/exercices/modifier.php?a=blobdiff_plain;f=includes%2FPreferences.php;h=6d15c1eec5614afc71d8806c7bd17c8984b7fe78;hb=73224f4f8b8a26b9a9a04e338bb1c3c2f163a820;hp=a5e9d7734434d837c4325e2ea7d16a25cd00a3f3;hpb=bb90278a2c8bafc603f31a545d383bac3b9b6bc9;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/Preferences.php b/includes/Preferences.php index a5e9d77344..6d15c1eec5 100644 --- a/includes/Preferences.php +++ b/includes/Preferences.php @@ -222,24 +222,48 @@ class Preferences { 'section' => 'personal/info', ]; + $lang = $context->getLanguage(); + # Get groups to which the user belongs $userEffectiveGroups = $user->getEffectiveGroups(); - $userGroups = $userMembers = []; + $userGroupMemberships = $user->getGroupMemberships(); + $userGroups = $userMembers = $userTempGroups = $userTempMembers = []; foreach ( $userEffectiveGroups as $ueg ) { if ( $ueg == '*' ) { // Skip the default * group, seems useless here continue; } - $groupName = User::getGroupName( $ueg ); - $userGroups[] = User::makeGroupLinkHTML( $ueg, $groupName ); - $memberName = User::getGroupMember( $ueg, $userName ); - $userMembers[] = User::makeGroupLinkHTML( $ueg, $memberName ); - } - asort( $userGroups ); - asort( $userMembers ); + if ( isset( $userGroupMemberships[$ueg] ) ) { + $groupStringOrObject = $userGroupMemberships[$ueg]; + } else { + $groupStringOrObject = $ueg; + } - $lang = $context->getLanguage(); + $userG = UserGroupMembership::getLink( $groupStringOrObject, $context, 'html' ); + $userM = UserGroupMembership::getLink( $groupStringOrObject, $context, 'html', + $userName ); + + // Store expiring groups separately, so we can place them before non-expiring + // groups in the list. This is to avoid the ambiguity of something like + // "administrator, bureaucrat (until X date)" -- users might wonder whether the + // expiry date applies to both groups, or just the last one + if ( $groupStringOrObject instanceof UserGroupMembership && + $groupStringOrObject->getExpiry() + ) { + $userTempGroups[] = $userG; + $userTempMembers[] = $userM; + } else { + $userGroups[] = $userG; + $userMembers[] = $userM; + } + } + sort( $userGroups ); + sort( $userMembers ); + sort( $userTempGroups ); + sort( $userTempMembers ); + $userGroups = array_merge( $userTempGroups, $userGroups ); + $userMembers = array_merge( $userTempMembers, $userMembers ); $defaultPreferences['usergroups'] = [ 'type' => 'info',