Ignore:
Timestamp:
03/20/15 18:48:21 (9 years ago)
Author:
nanardon
Message:

Backport changes reporting

Location:
branches/4.0
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/4.0

  • branches/4.0/LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Sql/User.pm

    r1284 r1294  
    521521        }; 
    522522        $attr =~ /^memberOf$/ and do { 
    523             my %member; 
     523            my %members; 
    524524            my $memberof = $self->get_field('memberOf'); 
    525525            foreach (ref $memberof 
    526526                ? @{ $memberof } 
    527527                : $memberof || ()) { 
    528                 $member{$_}{c} = 1; 
     528                $members{$_}{c} = 1; 
    529529            } 
    530530            foreach (grep { $_ } ref $data{$attr} ? @{ $data{$attr} || []} : $data{$attr}) { 
    531                 $member{$_}{n} = 1; 
    532             } 
    533  
    534             foreach (keys %member) { 
    535                 $member{$_}{c} && $member{$_}{n} and next; # no change ! 
    536                 my $group = $self->base->get_object('group', $_) or next; 
     531                $members{$_}{n} = 1; 
     532            } 
     533 
     534            foreach my $member (keys %members) { 
     535                $members{$member}{c} && $members{$member}{n} and next; # no change ! 
     536                my $group = $self->base->get_object('group', $member) or do { 
     537                    la_log(LA_WARN, "Cannot get group %s to set members", $member);  
     538                    next; 
     539                }; 
    537540                ($group->_get_c_field('sutype') || '') =~ /^(jobtype|contrattype)$/ and next; 
    538                 if ($member{$_}{n}) { 
    539                     my $sth = $self->db->prepare_cached( 
    540                         q{insert into group_attributes_users (value, attr, okey) values (?,?,?)} 
    541                     ); 
    542                     $sth->execute($self->id, 'memberUID', $group->_get_ikey); 
    543                     $res++; 
    544                 } elsif ($member{$_}{c}) { 
    545                     if (($self->get_c_field('department') || '') eq $group->id) { 
     541                if ($members{$member}{n}) { 
     542                    my @newmembers = $group->get_attributes('memberUID'); 
     543                    $res += $group->_set_c_fields('memberUID', [ $self->id, @newmembers ]); 
     544                } elsif ($members{$member}{c}) { 
     545                    if (($self->_get_c_field('department') || '') eq $group->id) { 
    546546                        $self->base->log(LA_WARN, 
    547547                            "Don't removing user %s from group %s: is it's department", 
     
    549549                        next; 
    550550                    } 
    551                     my $sth = $self->db->prepare_cached( 
    552                         q{delete from group_attributes_users where value = ? and attr = ? and okey = ?} 
    553                     ); 
    554                     $sth->execute($self->id, 'memberUID', $group->_get_ikey); 
    555                     $res++; 
     551                    my @newmembers = grep { $_ ne $self->id } $group->get_attributes('memberUID'); 
     552                    $res += $group->_set_c_fields('memberUID', [ @newmembers ]); 
    556553                } # else {} # can't happend 
    557554            } 
Note: See TracChangeset for help on using the changeset viewer.