@@ -660,17 +660,34 @@ public function updateAttributes($uid,
660
660
}
661
661
662
662
if ($ newGroups !== null ) {
663
+ $ prefix = '' ;
664
+ if ($ this ->config ->getAppValue ('user_saml ' , 'unique_groups_per_idp ' , '0 ' ) === '1 ' ) {
665
+ list (, $ idp ) = explode ('@ ' , $ uid );
666
+ $ prefix = substr (md5 ($ idp ), 0 , 7 );
667
+ $ newGroups = array_map (
668
+ function ($ g ) use ($ prefix ) {
669
+ return $ prefix . '- ' . $ g ;
670
+ }, $ newGroups
671
+ );
672
+ }
673
+
663
674
$ groupManager = $ this ->groupManager ;
664
675
$ oldGroups = $ groupManager ->getUserGroupIds ($ user );
665
676
666
677
$ groupsToAdd = array_unique (array_diff ($ newGroups , $ oldGroups ));
667
678
$ groupsToRemove = array_diff ($ oldGroups , $ newGroups );
668
679
669
- foreach ($ groupsToAdd as $ group ) {
670
- if (!($ groupManager ->groupExists ($ group ))) {
671
- $ groupManager ->createGroup ($ group );
680
+ foreach ($ groupsToAdd as $ gid ) {
681
+ if (!($ groupManager ->groupExists ($ gid ))) {
682
+ $ group = $ groupManager ->createGroup ($ gid );
683
+ if ($ prefix !== '' ) {
684
+ $ group ->setDisplayName (substr ($ gid , strlen ($ prefix ) + 1 ));
685
+ }
686
+ } else {
687
+ $ group = $ groupManager ->get ($ gid );
672
688
}
673
- $ groupManager ->get ($ group )->addUser ($ user );
689
+
690
+ $ group ->addUser ($ user );
674
691
}
675
692
676
693
foreach ($ groupsToRemove as $ group ) {
0 commit comments