Ignore:
Timestamp:
12/01/15 09:25:48 (9 years ago)
Author:
nanardon
Message:

Add filter based aliases (dynamics)

Location:
trunk/LATMOS-Accounts/lib/LATMOS/Accounts/Bases
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Sql.pm

    r1457 r1490  
    137137} 
    138138 
     139sub _sync_dyn_aliases { 
     140    my ($self) = @_; 
     141 
     142    my @groups = $self->search_objects('aliases', 'autoMemberFilter=*'); 
     143 
     144    foreach (@groups) { 
     145        my $g = $self->get_object('aliases', $_) or next; 
     146        $g->populate_dyn_aliases; 
     147    } 
     148} 
     149 
    139150sub _commit { 
    140151    my ($self) = @_; 
    141152 
    142153    $self->_sync_dyn_group; 
     154    $self->_sync_dyn_aliases; 
    143155 
    144156    if ($ENV{LA_NO_COMMIT}) { 
  • trunk/LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Sql/Aliases.pm

    r1472 r1490  
    7777                    ); 
    7878                }, 
     79                ro => sub { 
     80                    $_[0] && $_[0]->_get_c_field('autoMemberFilter') ? 1 : 0 
     81                }, 
    7982            }, 
    8083            finalpoint      => { 
     
    136139            }, 
    137140            comment => { }, 
     141            autoMemberFilter => { 
     142                multiple => 1, 
     143                set => sub { 
     144                    my ($self, $data) = @_; 
     145                    $self->object->set_fields($self->name, $data) or return; 
     146                    $self->object->populate_dyn_aliases; 
     147                    return 1; 
     148                } 
     149 
     150            }, 
     151            autoExclude => { 
     152                multiple => 1, 
     153                reference => 'user', 
     154            }, 
    138155        } 
    139156    ) 
     
    186203} 
    187204 
     205=head2 populate_dyn_aliases 
     206 
     207Synchronise aliase's forward according filter set into C<autoMemberFilter> attribute. 
     208 
     209=cut 
     210 
     211sub populate_dyn_aliases { 
     212    my ($self) = @_; 
     213 
     214 
     215    if (!$self->get_field('autoMemberFilter')) { 
     216        return 0; 
     217    } 
     218 
     219    my %email = $self->base->attributes_summary_by_object('user', 'mail'); 
     220 
     221    $self->base->log(LA_DEBUG, 
     222        "Populating alaises %s from autoMemberFilter attribute", 
     223        $self->id 
     224    ); 
     225    my $filter = $self->get_field('autoMemberFilter'); 
     226    my $autoex = $self->get_field('autoExclude'); 
     227    my %exclude = map { $_ => 1 } grep { $_  } (ref $autoex ? @$autoex : $autoex); 
     228 
     229    my @users = $self->base->search_objects('user', ref $filter ? @{ $filter } : $filter); 
     230 
     231    my @forward = (); 
     232 
     233    foreach my $user (@users) { 
     234        $exclude{$user} and next; 
     235        $email{$user} or next; 
     236        my $mail = $email{$user}->[0] or next; 
     237        push(@forward, $mail); 
     238    } 
     239 
     240    my $sth = $self->base->db->prepare_cached( 
     241        'UPDATE aliases SET forward = ? WHERE ikey = ?' 
     242    ); 
     243    if (!$sth->execute(\@forward, $self->Iid)) { 
     244        $self->base->log(LA_ERR, "Cannot update forward for aliases %s: %s", $self->id, $sth->errstr()); 
     245        return; 
     246    } 
     247 
     248    return 1; 
     249} 
    188250 
    1892511; 
Note: See TracChangeset for help on using the changeset viewer.