source: LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Sql/Address.pm @ 943

Last change on this file since 943 was 943, checked in by nanardon, 12 years ago
  • change icons for unexported addresses
File size: 5.2 KB
Line 
1package LATMOS::Accounts::Bases::Sql::Address;
2
3use 5.010000;
4use strict;
5use warnings;
6
7use base qw(LATMOS::Accounts::Bases::Sql::objects);
8
9our $VERSION = (q$Rev: 594 $ =~ /^Rev: (\d+) /)[0];
10
11=head1 NAME
12
13LATMOS::Ad - Perl extension for blah blah blah
14
15=head1 SYNOPSIS
16
17  use LATMOS::Accounts::Bases;
18  my $base = LATMOS::Accounts::Bases->new('sql');
19  ...
20
21=head1 DESCRIPTION
22
23Account base access over standard unix file format.
24
25=head1 FUNCTIONS
26
27=cut
28
29=head2 new(%options)
30
31Create a new LATMOS::Ad object for windows AD $domain.
32
33domain / server: either the Ad domain or directly the server
34
35ldap_args is an optionnal list of arguments to pass to L<Net::LDAP>.
36
37=cut
38
39sub object_table { 'address' }
40
41sub key_field { 'name' }
42
43sub has_extended_attributes { 1 }
44
45sub _get_attr_schema {
46    my ($class, $base) = @_;
47
48    $class->SUPER::_get_attr_schema($base,
49        {
50            name =>         { inline => 1, },
51            exported =>     { inline => 1, },
52            user =>         { inline => 1,
53                reference => 'user',
54            },
55            site =>         {
56                reference => 'site',
57            },
58            sn =>           { ro => 1, },
59            mail =>         { ro => 1, },
60            givenName =>    { ro => 1, },
61            postalAddress => { ro => 1, },
62            displayName =>  { ro => 1, },
63            co =>           {
64                ro => sub { $_[0] && $_[0]->get_attributes('site') ? 1 : 0 },
65            },
66            l =>            {
67                ro => sub { $_[0] && $_[0]->get_attributes('site') ? 1 : 0 },
68            },
69            postalCode =>   {
70                ro => sub { $_[0] && $_[0]->get_attributes('site') ? 1 : 0 },
71            },
72            streetAddress => {
73                formtype => 'TEXTAREA',
74                ro => sub { $_[0] && $_[0]->get_attributes('site') ? 1 : 0 },
75            },
76            postOfficeBox => {
77                ro => sub { $_[0] && $_[0]->get_attributes('site') ? 1 : 0 },
78            },
79            st =>           {
80                ro => sub { $_[0] && $_[0]->get_attributes('site') ? 1 : 0 },
81            },
82            facsimileTelephoneNumber => {
83                ro => sub { $_[0] && $_[0]->get_attributes('site') ? 1 : 0 },
84            },
85            o =>            {
86                ro => sub { $_[0] && $_[0]->get_attributes('site') ? 1 : 0 },
87            },
88            isMainAddress => { formtype => 'CHECKBOX', },
89            active => { ro => 1 },
90        }
91    );
92}
93
94sub _create {
95    my ($class, $base, $id, %data) = @_;
96    $data{user} or return;
97    my $user = $base->get_object('user', $data{user});
98    $user or return;
99    if (!$user->get_c_field('otheraddress')) {
100        $data{isMainAddress} = 1;
101    }
102    $class->SUPER::_create($base, $id, %data);
103}
104
105sub get_field {
106    my ($self, $field) = @_;
107    if ((grep { $field eq $_ } (qw(
108            co l
109            postalCode streetAddress
110            postOfficeBox st
111            facsimileTelephoneNumber o
112            ))) && (my $fsite = $self->get_c_field('site'))) {
113        my $site = $self->base->get_object('site', $fsite);
114        if ($site) {
115            return $site->get_field($field);
116        }
117    } elsif ($field =~ /^(sn|givenName|mail)$/) {
118        my $user = $self->base->get_object('user', $self->_get_c_field('user'))
119            or return;
120        return $user->_get_c_field($field);
121    } elsif ($field eq 'postalAddress' ) {
122        my $bp = $self->_get_c_field('postOfficeBox');
123        return join("\n", grep { $_ } (
124            $self->_get_c_field('o'),
125            $self->_get_c_field('streetAddress'),
126            ($bp ? 'BP ' . $bp : ''),
127            join(' ', grep { $_ } (
128                    $self->_get_c_field('postalCode'),
129                    $self->_get_c_field('l'),)),
130            join(' ', grep { $_ } (
131                    $self->_get_c_field('st'),
132                    $self->_get_c_field('co'),),
133            )
134        ));
135    } elsif ($field eq 'displayName') {
136        return join(' ', grep { $_ } (
137            $self->_get_c_field('givenName'),
138            $self->_get_c_field('sn'),
139        ));
140    } else {
141        return $self->SUPER::get_field($field);
142    }
143}
144
145sub set_fields {
146    my ($self, %data) = @_;
147    my %fdata;
148    foreach my $attr (keys %data) {
149        $attr =~ /^site$/ and do {
150            my $site =
151            $self->base->get_object('site',
152                $data{$attr});
153            if ($site) {
154                foreach (qw(co l postalCode streetAddress postOfficeBox st
155                        facsimileTelephoneNumber o)) {
156                    $fdata{$_} = undef;
157                    $data{$_} = undef;
158                }
159            }
160            $fdata{$attr} = $data{$attr} || undef;
161            next;
162        };
163        $fdata{$attr} = $data{$attr} || undef;
164    }
165    if  (keys %fdata) {
166        $self->SUPER::set_fields(%fdata);
167    }
168}
169
1701;
171
172__END__
173
174=head1 SEE ALSO
175
176=head1 AUTHOR
177
178Olivier Thauvin, E<lt>olivier.thauvin@latmos.ipsl.frE<gt>
179
180=head1 COPYRIGHT AND LICENSE
181
182Copyright (C) 2008, 2009 CNRS SA/CETP/LATMOS
183
184This library is free software; you can redistribute it and/or modify
185it under the same terms as Perl itself, either Perl version 5.10.0 or,
186at your option, any later version of Perl 5 you may have available.
187
188
189=cut
Note: See TracBrowser for help on using the repository browser.