@@ -760,19 +760,16 @@ public function updateUserObject(&$userObject)
760
760
$ userroles = $ userObject ->getRoles ();
761
761
//remove all mapped roles before
762
762
763
- $ userroles = $ userObject ->getRoles ();
764
- //remove all mapped roles before
765
-
766
763
$ oldRoles = array ();
767
764
$ newRoles = array ();
768
765
769
766
if (is_array ($ userroles )) {
770
- foreach ($ userroles as $ key => $ role ) {
771
- if ((AuthService::getRole ($ key )) && !(strpos ($ key , $ this ->mappedRolePrefix ) === false )) {
772
- if (isSet ($ matchFilter ) && !preg_match ($ matchFilter , $ key )) continue ;
773
- if (isSet ($ valueFilters ) && !in_array ($ key , $ valueFilters )) continue ;
767
+ foreach ($ userroles as $ rkey => $ role ) {
768
+ if ((AuthService::getRole ($ rkey )) && !(strpos ($ rkey , $ this ->mappedRolePrefix ) === false )) {
769
+ if (isSet ($ matchFilter ) && !preg_match ($ matchFilter , $ rkey )) continue ;
770
+ if (isSet ($ valueFilters ) && !in_array ($ rkey , $ valueFilters )) continue ;
774
771
//$userObject->removeRole($key);
775
- $ oldRoles [$ key ] = $ role ;
772
+ $ oldRoles [$ rkey ] = $ role ;
776
773
}
777
774
}
778
775
}
@@ -797,30 +794,73 @@ public function updateUserObject(&$userObject)
797
794
(count (array_diff (array_keys ($ newRoles ), array_keys ($ oldRoles ))) > 0 ) )
798
795
{
799
796
// remove old roles
800
- foreach ($ oldRoles as $ key => $ role ) {
801
- if ((AuthService::getRole ($ key )) && !(strpos ($ key , $ this ->mappedRolePrefix ) === false )) {
802
- $ userObject ->removeRole ($ key );
797
+ foreach ($ oldRoles as $ rkey => $ role ) {
798
+ if ((AuthService::getRole ($ rkey )) && !(strpos ($ rkey , $ this ->mappedRolePrefix ) === false )) {
799
+ $ userObject ->removeRole ($ rkey );
803
800
}
804
801
}
805
802
806
803
//Add new roles;
807
- foreach ($ newRoles as $ key => $ role ){
808
- if ((AuthService::getRole ($ key )) && !(strpos ($ key , $ this ->mappedRolePrefix ) === false )) {
804
+ foreach ($ newRoles as $ rkey => $ role ){
805
+ if ((AuthService::getRole ($ rkey )) && !(strpos ($ rkey , $ this ->mappedRolePrefix ) === false )) {
809
806
$ userObject ->addRole ($ role );
810
807
}
811
808
}
812
809
$ userObject ->recomputeMergedRole ();
813
810
$ changes = true ;
814
811
}
815
812
816
- } else {
813
+ } else { // Others attributes mapping
814
+ $ oldRoles = array ();
815
+ $ newRoles = array ();
816
+ $ userroles = $ userObject ->getRoles ();
817
+
818
+ // Get old roles
819
+ if (is_array ($ userroles )) {
820
+ foreach ($ userroles as $ rkey => $ role ) {
821
+ if ((AuthService::getRole ($ rkey )) && (strpos ($ rkey , $ this ->mappedRolePrefix ) === false )) {
822
+ if (isSet ($ matchFilter ) && !preg_match ($ matchFilter , $ rkey )) continue ;
823
+ if (isSet ($ valueFilters ) && !in_array ($ rkey , $ valueFilters )) continue ;
824
+ //$userObject->removeRole($key);
825
+ $ oldRoles [$ rkey ] = $ rkey ;
826
+ }
827
+ }
828
+ }
829
+
830
+ // Get new roles
817
831
foreach ($ entry [$ key ] as $ uniqValue ) {
818
832
if (isSet ($ matchFilter ) && !preg_match ($ matchFilter , $ uniqValue )) continue ;
819
833
if (isSet ($ valueFilters ) && !in_array ($ uniqValue , $ valueFilters )) continue ;
820
- if ((!in_array ($ uniqValue , array_keys ($ userObject ->getRoles ()))) && !empty ($ uniqValue )) {
821
- $ userObject ->addRole (AuthService::getRole ($ uniqValue , true ));
822
- $ changes = true ;
834
+ if (!empty ($ uniqValue )) {
835
+ $ roleToAdd = AuthService::getRole ($ uniqValue );
836
+ if ($ roleToAdd === false ){
837
+ $ roleToAdd = AuthService::getRole ($ uniqValue , true );
838
+ $ roleToAdd ->setLabel ($ uniqValue );
839
+ AuthService::updateRole ($ roleToAdd );
840
+ }
841
+ //$userObject->addRole(AuthService::getRole($uniqValue, true));
842
+ //$changes = true;
843
+ $ newRoles [$ uniqValue ] = $ roleToAdd ;
844
+ }
845
+ }
846
+
847
+ // Do the sync if two sets of roles are different
848
+ if ( (count (array_diff (array_keys ($ oldRoles ), array_keys ($ newRoles ))) > 0 ) ||
849
+ (count (array_diff (array_keys ($ newRoles ), array_keys ($ oldRoles ))) > 0 )){
850
+ // remove old roles
851
+ foreach ($ oldRoles as $ rkey => $ role ) {
852
+ if ((AuthService::getRole ($ rkey )) && (strpos ($ rkey , $ this ->mappedRolePrefix ) === false )) {
853
+ $ userObject ->removeRole ($ rkey );
854
+ }
823
855
}
856
+ //Add new roles;
857
+ foreach ($ newRoles as $ rkey => $ role ){
858
+ if ((AuthService::getRole ($ rkey )) && (strpos ($ rkey , $ this ->mappedRolePrefix ) === false )) {
859
+ $ userObject ->addRole ($ role );
860
+ }
861
+ }
862
+ $ userObject ->recomputeMergedRole ();
863
+ $ changes = true ;
824
864
}
825
865
}
826
866
break ;
0 commit comments