Changeset 1782


Ignore:
Timestamp:
06/20/16 23:52:02 (8 years ago)
Author:
nanardon
Message:

Add autoFromSutype attribute: merge group member

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/LATMOS-Accounts-Web/lib/LATMOS/Accounts/Web/Model/AttrForms.pm

    r1738 r1782  
    138138            managedAlsoBy 
    139139            autoMemberFilter 
     140            autoFromSutype 
    140141            sutype 
    141142            services 
     
    208209            comment 
    209210            autoMemberFilter 
     211            autoFromSutype 
    210212            autoExclude 
    211213            create 
  • trunk/LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Sql/Aliases.pm

    r1729 r1782  
    161161                label => l('Automatics filters'), 
    162162            }, 
     163            autoFromSutype => { 
     164                multiple => 1, 
     165                set => sub { 
     166                    my ($self, $data) = @_; 
     167                    $self->object->set_fields($self->name, $data) or return; 
     168                    $self->object->populate_dyn_aliases; 
     169                    return 1; 
     170                }, 
     171                label => l('From group type'), 
     172            }, 
    163173            autoExclude => { 
    164174                multiple => 1, 
     
    227237 
    228238 
    229     if (!$self->get_field('autoMemberFilter')) { 
     239    if (!$self->get_field('autoMemberFilter') 
     240     && !$self->get_field('autoFromSutype') ) { 
    230241        return 0; 
    231242    } 
     
    246257 
    247258    my %email = $self->base->attributes_summary_by_object('user', 'mail'); 
    248  
    249     my $filter = $self->get_field('autoMemberFilter'); 
     259    my %users; 
     260 
    250261    my $autoex = $self->get_field('autoExclude'); 
    251262    my %exclude = map { $_ => 1 } grep { $_  } (ref $autoex ? @$autoex : $autoex); 
    252263 
    253     my @users = $self->base->search_objects('user', ref $filter ? @{ $filter } : $filter); 
     264    if (my $filter = $self->get_field('autoMemberFilter')) { 
     265        $users{$_} = 1 foreach( $self->base->search_objects('user', ref $filter ? @{ $filter } : $filter) ); 
     266    } 
     267 
     268    if (my $filter = $self->get_field('autoFromSutype')) { 
     269        my @suTypeFilter = map { "sutype=$_" } (ref $filter ? @{ $filter } : $filter); 
     270        foreach my $group ($self->base->search_objects('group', @suTypeFilter)) { 
     271            foreach ($self->base->search_objects('user', "memberOf=$group")) { 
     272                $users{$_} = 1; 
     273            } 
     274        } 
     275    } 
    254276 
    255277    my %forward = (); 
    256278 
    257     foreach my $user (@users) { 
     279    foreach my $user (keys %users) { 
    258280        $exclude{$user} and next; 
    259281        $email{$user} or next; 
  • trunk/LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Sql/Group.pm

    r1737 r1782  
    4646                    $_[0] &&  
    4747                    (($_[0]->_get_c_field('sutype') ||'') =~ /^(jobtype|contrattype)$/ 
    48                      || $_[0]->_get_c_field('autoMemberFilter')) 
     48                     || $_[0]->_get_c_field('autoMemberFilter') 
     49                     || $_[0]->_get_c_field('autoFromSutype')) 
    4950                    ? 1 : 0  
    5051                }, 
     
    8283                    $_[0] &&  
    8384                    (($_[0]->_get_c_field('sutype') ||'') =~ /^(jobtype|contrattype)$/ 
    84                      || $_[0]->_get_c_field('autoMemberFilter')) 
     85                     || $_[0]->_get_c_field('autoMemberFilter') 
     86                     || $_[0]->_get_c_field('autoFromSutype')) 
    8587                    ? 1 : 0  
    8688                }, 
     
    125127                monitored => 1, 
    126128                label => l('Structure'), 
     129                multiple => 1, 
    127130            }, 
    128131            autoMemberFilter => { 
     
    135138                }, 
    136139                label => l('Automatics filters'), 
     140            }, 
     141            autoFromSutype => { 
     142                reference => 'sutype', 
     143                multiple => 1, 
     144                set => sub { 
     145                    my ($self, $data) = @_; 
     146                    $self->object->set_fields($self->name, $data) or return; 
     147                    $self->object->populate_dyn_group; 
     148                    return 1; 
     149                }, 
     150                label => l('From group type'), 
    137151            }, 
    138152            label => { 
     
    206220    my ($self) = @_; 
    207221 
    208     if (!$self->get_field('autoMemberFilter')) { 
     222    if ( 
     223           !$self->get_field('autoMemberFilter') 
     224        && !$self->get_field('autoFromSutype')) { 
    209225        return 0; 
    210226    } 
    211227    $self->base->log(LA_DEBUG, 
    212         "Populating group %s from autoMemberFilter attribute", 
     228        "Populating group %s from autoMemberFilter/autoFromSutype attribute", 
    213229        $self->id 
    214230    ); 
    215     my $filter = $self->get_field('autoMemberFilter'); 
    216     my $res = $self->_set_group_members( 
    217         [ $self->base->search_objects( 
    218             'user', 
    219             ref $filter ? @{ $filter } : $filter 
    220         ) ] 
    221     ); 
     231 
     232    my %users; 
     233 
     234    if (my $filter = $self->get_field('autoFromSutype')) { 
     235        my @suTypeFilter = map { "sutype=$_" } (ref $filter ? @{ $filter } : $filter); 
     236        foreach my $group ($self->base->search_objects('group', @suTypeFilter)) { 
     237            foreach ($self->base->search_objects('user', "memberOf=$group")) { 
     238                $users{$_} = 1; 
     239            } 
     240        } 
     241    } 
     242 
     243     
     244    if (my $filter = $self->get_field('autoMemberFilter')) { 
     245        foreach ($self->base->search_objects( 
     246                'user', 
     247                ref $filter ? @{ $filter } : $filter)) { 
     248            $users{$_} = 1; 
     249        } 
     250    } 
     251 
     252    my $res = $self->_set_group_members([ keys %users ]); 
     253 
    222254    $res; 
    223255} 
  • trunk/LATMOS-Accounts/man/man8/latmos-accounts-base-sql.pod

    r1628 r1782  
    213213The C<forward> attributes is automatically set with email address of selected 
    214214user, user w/o email address are ignored. 
     215 
     216=head2 Group AutoFromSutype 
     217 
     218Group object can be tagged with the C<sutype> attribute. 
     219 
     220When C<autoFromSutype> is set the group member will be computed from member of 
     221all groups having C<sutype> set this value. 
     222 
     223The goal of this attribute is to setup magic group like with the 
     224C<autoMemberFilter> but working even a new group is created. 
     225 
     226=head2 Aliases AutoFromSutype 
     227 
     228This attribute allow to create automatics dynamics aliases according filter 
     229rules exactly like L<Group AutoFromType> works. 
     230 
     231The C<forward> attributes is automatically set with email address of selected 
     232user, user w/o email address are ignored. 
Note: See TracChangeset for help on using the changeset viewer.