Ignore:
Timestamp:
12/02/11 11:42:17 (13 years ago)
Author:
nanardon
Message:
  • reimport missing files from previous svn
File:
1 edited

Legend:

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

    r840 r861  
    4545sub has_extended_attributes { 1 } 
    4646 
    47 sub _delayed_fields { 
    48     my ($self)= @_; 
    49     return qw(memberOf manager directReports department); 
    50 } 
    51  
    52 sub _office_address_fields { qw(telephoneNumber physicalDeliveryOfficeName site) } 
    53  
    54 sub _inline_fields { 
    55     my ($class, $for, $base) = @_; 
    56     return ( 
    57         uidNumber => 'uidnumber', 
    58         gidNumber => 'gidnumber', 
    59         exported  => 'exported', 
    60         expire    => 'expire', 
    61         ($for !~ /w/) ? ( 
    62             name      => 'name', 
    63             cn => 'name', 
    64             create    => 'create', 
    65             date      => 'date', 
    66         ) : (), 
    67     ); 
    68 } 
    69  
    70 sub _managed_fields { 
    71     my ($self, $for, $base) = @_; 
    72     return ( 
    73         memberOf        => 'memberOf', 
    74         forward => 'forward', 
    75         aliases => 'aliases', 
    76         revaliases => 'revaliases', 
    77         (map { $_ => $_ } $self->_address_fields), 
    78         (map { $_ => $_ } $self->_office_address_fields), 
    79         (($for !~ /w/) ? ( 
    80         uid => 'name', 
    81         cn => 'name', 
    82         gecos        => 'gecos', 
    83         displayName  => 'displayName', 
    84         sAMAccountName  => 'sAMAccountName', 
    85         accountExpires => 'accountExpires', 
    86         shadowExpire => 'shadowExpire', 
    87         directReports => 'directReports', 
    88         managedObjects => 'managedObjects', 
    89         otheraddress => 'otheraddress', 
    90         mainaddress => 'mainaddress', 
    91         postalAddress => 'postalAddress', 
    92         facsimileTelephoneNumber => 'facsimileTelephoneNumber', 
    93         allsite   => 'allsite', 
    94         managerContact => 'managerContact', 
    95         expireText => 'expireText', 
    96         cells  => 'cells', 
    97         departments => 'departments', 
    98         ) : ()), 
     47sub _get_attr_schema { 
     48    my ($class, $base) = @_; 
     49 
     50    $class->SUPER::_get_attr_schema($base, 
     51        { 
     52            uidNumber => { inline => 1, iname => 'uidnumber', uniq => 1, 
     53                mandatory => 1, }, 
     54            uidnumber => { inline => 1, hide => 1, }, 
     55            gidNumber => {  
     56                inline => 1, 
     57                iname => 'gidnumber', 
     58                mandatory => 1, 
     59                can_values => sub { 
     60                    map { $base->get_object('group', 
     61                            $_)->get_attributes('gidNumber') } 
     62                    $base->list_objects('group') 
     63                }, 
     64                display => sub { 
     65                    my ($self, $val) = @_; 
     66                    my ($gr) = $self->base->search_objects('group', "gidNumber=$val") 
     67                        or return; 
     68                    return $gr; 
     69                }, 
     70                reference => 'group', 
     71            }, 
     72            loginShell => { mandatory => 1 }, 
     73            gidnumber => { inline => 1, hide => 1, 
     74                can_values => sub { 
     75                    map { $_->get_attributes('gidNumber') } 
     76                    map { $base->get_object('group', $_) } 
     77                    $base->list_objects('group') 
     78                }, 
     79                mandatory => 1, 
     80                reference => 'group', 
     81            }, 
     82            exported  => { 
     83                inline => 1, 
     84                formtype => 'CHECKBOX', 
     85            }, 
     86            locked    => { 
     87                formtype => 'CHECKBOX', 
     88                formopts => { rawvalue => 1, }, 
     89            }, 
     90            expire    => { inline => 1, formtype => 'DATE', }, 
     91            name      => { inline => 1, ro => 1, }, 
     92            cn        => { inline => 1, ro => 1, iname => 'name' }, 
     93            create    => { inline => 1, ro => 1, }, 
     94            date      => { inline => 1, ro => 1, }, 
     95            memberOf  => { multiple => 1, delayed => 1, }, 
     96            forward   => {}, 
     97            aliases   => { 
     98                reference => 'aliases', 
     99                formtype => 'TEXT', 
     100                multiple => 1, 
     101            }, 
     102            revaliases => { 
     103                reference => 'revaliases', 
     104                formtype => 'TEXT', 
     105            }, 
     106            manager => { 
     107                delayed => 1, 
     108                can_values => sub { 
     109                    my %uniq = map { $_ => 1 } grep { $_ } 
     110                    ($_[1] ? $_[1]->get_attributes('manager') : ()), 
     111                    $base->search_objects('user', 'active=*'); 
     112                    sort keys %uniq; 
     113                }, 
     114                reference => 'user', 
     115            }, 
     116            department => { 
     117                reference => 'group', 
     118                can_values => sub { 
     119                    $base->search_objects('group', 'sutype=dpmt') 
     120                } 
     121            }, 
     122            contratType => { 
     123                reference => 'group', 
     124                can_values => sub { 
     125                    $base->search_objects('group', 'sutype=contrattype') 
     126                } 
     127            }, 
     128            site => { 
     129                reference => 'site', 
     130                can_values => sub { 
     131                    $base->search_objects('site') 
     132                } 
     133            }, 
     134            co => { }, 
     135            l => { }, 
     136            postalCode => { }, 
     137            streetAddress => { formtype => 'TEXTAREA', }, 
     138            postOfficeBox => { }, 
     139            st => { }, 
     140            facsimileTelephoneNumber => { }, 
     141            o => { }, 
     142            telephoneNumber => { }, 
     143            physicalDeliveryOfficeName => { }, 
     144            uid => { iname => 'name', ro => 1 }, 
     145            cn =>  { iname => 'name', ro => 1 }, 
     146            gecos => { ro => 1, }, 
     147            displayName  => { ro => 1, managed => 1, }, 
     148            sAMAccountName  => { ro => 1, managed => 1  }, 
     149            accountExpires => { ro => 1, managed => 1 }, 
     150            shadowExpire => { ro => 1, managed => 1 }, 
     151            directReports => { 
     152                reference => 'user', 
     153                ro => 1, 
     154                delayed => 1, 
     155            }, 
     156            managedObjects => { ro => 1, reference => 'group', }, 
     157            otheraddress => { ro => 1, reference => 'address', }, 
     158            mainaddress => { ro => 1, reference => 'address', }, 
     159            postalAddress => { ro => 1, }, 
     160            facsimileTelephoneNumber => { ro => 1, }, 
     161            allsite   => { 
     162                ro => 1, 
     163                reference => 'site', 
     164            }, 
     165            managerContact => { 
     166                ro => 1, 
     167                reference => 'user', 
     168            }, 
     169            expireText => { ro => 1, }, 
     170            krb5ValidEnd => { ro => 1, }, 
     171            cells  => { 
     172                ro => 1, 
     173                reference => 'group', 
     174            }, 
     175            departments => { 
     176                reference => 'group', 
     177                delayed => 1, 
     178                ro => 1, 
     179            }, 
     180            arrivalDate => { }, 
     181            expired => { ro => 1 }, 
     182            active => { ro => 1 }, 
     183                pwdAccountLockedTime => { managed => 1, ro => 1 } 
     184        } 
    99185    ) 
    100186} 
     
    177263        $res->{expire} =~ /(\d+) days\s*(\w)?/; 
    178264        return $1 + ($2 ? 1 : 0); 
     265    } elsif ($field eq 'krb5ValidEnd') { 
     266        my $sth = $self->db->prepare_cached( 
     267            sprintf( 
     268                q{select date_part('epoch', expire)::int as expire 
     269                from %s where %s = ?}, 
     270                $self->db->quote_identifier($self->object_table), 
     271                $self->db->quote_identifier($self->key_field), 
     272            ) 
     273        ); 
     274        $sth->execute($self->id); 
     275        my $res = $sth->fetchrow_hashref; 
     276        $sth->finish; 
     277        return $res->{expire} 
    179278    } elsif ($field eq 'expireText') { 
    180279        my $sth = $self->db->prepare_cached( 
     
    190289        $sth->finish; 
    191290        return $res->{expire} 
     291    } elsif ($field eq 'pwdAccountLockedTime') { 
     292        if ($self->_get_c_field('locked')) { 
     293            return '000001010000Z'; 
     294        } else { 
     295            my $sth = $self->db->prepare_cached( 
     296                sprintf( 
     297                    q{select to_char(expire AT TIME ZONE 'Z', 'YYYYMMDDHH24MISSZ') as expire 
     298                    from %s where %s = ? and expire < now()}, 
     299                    $self->db->quote_identifier($self->object_table), 
     300                    $self->db->quote_identifier($self->key_field), 
     301                ) 
     302            ); 
     303            $sth->execute($self->id); 
     304            my $res = $sth->fetchrow_hashref; 
     305            $sth->finish; 
     306            return $res->{expire} 
     307        } 
    192308    } elsif ($field eq 'otheraddress') { 
    193309        my $sth = $self->db->prepare_cached(q{ 
     
    209325        $sth->finish; 
    210326        return $res->{name}; 
    211     } elsif (grep { $field eq $_ } __PACKAGE__->_address_fields(), 
    212         $self->_office_address_fields, 'postalAddress') { 
     327    } elsif (grep { $field eq $_ } qw(postalAddress 
     328            co l postalCode streetAddress  
     329            postOfficeBox st  
     330            facsimileTelephoneNumber  
     331            o telephoneNumber  
     332            physicalDeliveryOfficeName  
     333            site 
     334        )) { 
    213335        if (my $fmainaddress = $self->_get_c_field('mainaddress')) { 
    214336            my $address = $self->base->get_object('address', $fmainaddress); 
     
    262384} 
    263385 
     386sub _get_state { 
     387    my ($self, $state) = @_; 
     388    for ($state) { 
     389        /^expired$/ and do { 
     390            my $attribute = $self->attribute('expire'); 
     391            $attribute->check_acl('r') or return; 
     392            my $sth = $self->db->prepare_cached( 
     393                q{ select coalesce(expire < now(), false) as exp from "user"  
     394                where "user".name = ?} 
     395            ); 
     396            $sth->execute($self->id); 
     397            my $res = $sth->fetchrow_hashref; 
     398            $sth->finish; 
     399            return $res->{exp} ? 1 : 0; 
     400        }; 
     401    } 
     402} 
     403 
    264404sub set_fields { 
    265405    my ($self, %data) = @_; 
     
    267407    my $res = 0; 
    268408    foreach my $attr (keys %data) { 
     409        $attr eq 'gidnumber' && $data{$attr} !~ /^\d+$/ and do { 
     410            my $group = $self->base->get_object('group', $data{$attr}) or do { 
     411                $self->base->log(LA_ERROR, 
     412                    "Can't set gidNumber to %s: no such group", $data{$attr}); 
     413                return; 
     414            }; 
     415            $data{$attr} = $group->get_attributes('gidNumber'); 
     416        }; 
    269417        $attr =~ /^memberOf$/ and do { 
    270418            my %member; 
     
    287435                    $res++; 
    288436                } elsif ($member{$_}{c}) { 
     437                    if (($self->get_c_field('department') || '') eq $group->id) { 
     438                        $self->base->log(LA_WARN, 
     439                            "Don't removing user %s from group %s: is it's department", 
     440                            $self->id, $group->id); 
     441                        next; 
     442                    } 
    289443                    my $sth = $self->db->prepare_cached( 
    290444                        q{delete from group_attributes_users where value = ? and attr = ? and okey = ?} 
     
    421575            } 
    422576        };           
    423         grep { $attr eq $_ } (__PACKAGE__->_office_address_fields, __PACKAGE__->_address_fields()) and do { 
     577        grep { $attr eq $_ } (qw(co l postalCode streetAddress  
     578            postOfficeBox st facsimileTelephoneNumber  
     579            o telephoneNumber physicalDeliveryOfficeName site)) and do { 
    424580            my $fmainaddress = $self->_get_c_field('mainaddress'); 
    425581            # set address attribute => create address object on the fly 
     
    439595            if ($fmainaddress &&  
    440596                (my $address = $self->base->get_object('address', $fmainaddress))) { 
    441                 $res += $address->set_c_fields($attr => $data{$attr}) ||0; 
     597                if ($address->attribute($attr) && 
     598                    !$address->attribute($attr)->ro) { 
     599                    $res += $address->set_c_fields($attr => $data{$attr}) ||0; 
     600                } 
    442601            } 
    443602            next; 
     
    446605    } 
    447606    if (keys %fdata) { 
    448         return $self->SUPER::set_fields(%fdata) + $res; 
     607        if (defined(my $res2 = $self->SUPER::set_fields(%fdata))) { 
     608           return $res2 + $res; 
     609       } else { 
     610           return; 
     611       } 
    449612    } else { return $res; } 
    450613} 
Note: See TracChangeset for help on using the changeset viewer.