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

Last change on this file since 1315 was 1315, checked in by nanardon, 9 years ago

merge changes

File size: 11.7 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::Accounts::Bases::Sql::Address - Physical office Adress Support
14
15=head1 DESCRIPTION
16
17C<Address> objects allow to store user's several office addresses.
18
19Notice most of other bases (Ldap, ...) support only one address.
20
21=cut
22
23sub _object_table { 'address' }
24
25sub _key_field { 'name' }
26
27sub _has_extended_attributes { 1 }
28
29sub _get_attr_schema {
30    my ($class, $base) = @_;
31
32    $class->SUPER::_get_attr_schema($base,
33        {
34            name =>         { inline => 1, },
35            exported =>     { inline => 1, },
36            user =>         { inline => 1,
37                reference => 'user',
38            },
39            site =>         {
40                reference => 'site',
41            },
42            sn =>           {
43                managed => 1,
44                ro => 1,
45                get => sub {
46                    my ($attr) = @_;
47                    my $self = $attr->object;
48                    my $user = $self->base->get_object('user', $self->_get_c_field('user'))
49                        or return;
50                    return $user->_get_c_field($attr->name);
51                },
52            },
53            mail =>         {
54                managed => 1,
55                ro => 1,
56                get => sub {
57                    my ($attr) = @_;
58                    my $self = $attr->object;
59                    my $user = $self->base->get_object('user', $self->_get_c_field('user'))
60                        or return;
61                    return $user->_get_c_field($attr->name);
62                },
63            },
64            givenName => {
65                managed => 1,
66                ro => 1,
67                get => sub {
68                    my ($attr) = @_;
69                    my $self = $attr->object;
70                    my $user = $self->base->get_object('user', $self->_get_c_field('user'))
71                        or return;
72                    return $user->_get_c_field($attr->name);
73                },
74            },
75            postalAddress => {
76                managed => 1,
77                ro => 1,
78                get => sub {
79                    my ($attr) = @_;
80                    my $self = $attr->object;
81                    my $bp = $self->_get_c_field('postOfficeBox');
82                    return join("\n", grep { $_ } (
83                            $self->_get_c_field('o'),
84                            $self->_get_c_field('streetAddress'),
85                            ($bp ? 'BP ' . $bp : ''),
86                            join(' ', grep { $_ } (
87                                    $self->_get_c_field('postalCode'),
88                                    $self->_get_c_field('l'),)),
89                            join(' ', grep { $_ } (
90                                    $self->_get_c_field('st'),
91                                    $self->_get_c_field('co'),),
92                            )
93                        )
94                    );
95                },
96            },
97            displayName =>  {
98                managed => 1,
99                ro => 1,
100                get => sub {
101                    my $self = $_[0]->object;
102                    return join(' ', grep { $_ } (
103                            $self->_get_c_field('givenName'),
104                            $self->_get_c_field('sn'),
105                        )
106                    );
107                },
108            },
109            co => {
110                managed => 1,
111                ro => sub { $_[0] && $_[0]->get_attributes('site') ? 1 : 0 },
112                get => sub {
113                    my ($self) = @_;
114                    if (my $site = $self->object->get_attributes('site')) {
115                        if (my $osite = $self->base->get_object('site', $site)) {
116                            return $osite->get_attributes($self->name);
117                        }
118                    }
119                    return $self->object->get_field($self->name);
120                },
121                set => sub {
122                    my ($self, $data) = @_;
123                    if (my $site = $self->object->get_attributes('site')) {
124                        return 1;
125                    } else {
126                        return $self->object->set_fields($self->name, $data)
127                    }
128                },
129            },
130            l => {
131                managed => 1,
132                ro => sub { $_[0] && $_[0]->get_attributes('site') ? 1 : 0 },
133                get => sub {
134                    my ($self) = @_;
135                    if (my $site = $self->object->get_attributes('site')) {
136                        if (my $osite = $self->base->get_object('site', $site)) {
137                            return $osite->get_attributes($self->name);
138                        }
139                    }
140                    return $self->object->get_field($self->name);
141                },
142                set => sub {
143                    my ($self, $data) = @_;
144                    if (my $site = $self->object->get_attributes('site')) {
145                        return 1;
146                    } else {
147                        return $self->object->set_fields($self->name, $data)
148                    }
149                },
150            },
151            postalCode =>   {
152                managed => 1,
153                ro => sub { $_[0] && $_[0]->get_attributes('site') ? 1 : 0 },
154                get => sub {
155                    my ($self) = @_;
156                    if (my $site = $self->object->get_attributes('site')) {
157                        if (my $osite = $self->base->get_object('site', $site)) {
158                            return $osite->get_attributes($self->name);
159                        }
160                    }
161                    return $self->object->get_field($self->name);
162                },
163                set => sub {
164                    my ($self, $data) = @_;
165                    if (my $site = $self->object->get_attributes('site')) {
166                        return 1;
167                    } else {
168                        return $self->object->set_fields($self->name, $data)
169                    }
170                },
171            },
172            streetAddress => {
173                managed => 1,
174                formtype => 'TEXTAREA',
175                ro => sub { $_[0] && $_[0]->get_attributes('site') ? 1 : 0 },
176                get => sub {
177                    my ($self) = @_;
178                    if (my $site = $self->object->get_attributes('site')) {
179                        if (my $osite = $self->base->get_object('site', $site)) {
180                            return $osite->get_attributes($self->name);
181                        }
182                    }
183                    return $self->object->get_field($self->name);
184                },
185                set => sub {
186                    my ($self, $data) = @_;
187                    if (my $site = $self->object->get_attributes('site')) {
188                        return 1;
189                    } else {
190                        return $self->object->set_fields($self->name, $data)
191                    }
192                },
193            },
194            postOfficeBox => {
195                managed => 1,
196                ro => sub { $_[0] && $_[0]->get_attributes('site') ? 1 : 0 },
197                get => sub {
198                    my ($self) = @_;
199                    if (my $site = $self->object->get_attributes('site')) {
200                        if (my $osite = $self->base->get_object('site', $site)) {
201                            return $osite->get_attributes($self->name);
202                        }
203                    }
204                    return $self->object->get_field($self->name);
205                },
206                set => sub {
207                    my ($self, $data) = @_;
208                    if (my $site = $self->object->get_attributes('site')) {
209                        return 1;
210                    } else {
211                        return $self->object->set_fields($self->name, $data)
212                    }
213                },
214            },
215            st => {
216                managed => 1,
217                ro => sub { $_[0] && $_[0]->get_attributes('site') ? 1 : 0 },
218                get => sub {
219                    my ($self) = @_;
220                    if (my $site = $self->object->get_attributes('site')) {
221                        if (my $osite = $self->base->get_object('site', $site)) {
222                            return $osite->get_attributes($self->name);
223                        }
224                    }
225                    return $self->object->get_field($self->name);
226                },
227                set => sub {
228                    my ($self, $data) = @_;
229                    if (my $site = $self->object->get_attributes('site')) {
230                        return 1;
231                    } else {
232                        return $self->object->set_fields($self->name, $data)
233                    }
234                },
235            },
236            facsimileTelephoneNumber => {
237                managed => 1,
238                ro => sub { $_[0] && $_[0]->get_attributes('site') ? 1 : 0 },
239                get => sub {
240                    my ($self) = @_;
241                    if (my $site = $self->object->get_attributes('site')) {
242                        if (my $osite = $self->base->get_object('site', $site)) {
243                            return $osite->get_attributes($self->name);
244                        }
245                    }
246                    return $self->object->get_field($self->name);
247                },
248                set => sub {
249                    my ($self, $data) = @_;
250                    if (my $site = $self->object->get_attributes('site')) {
251                        return 1;
252                    } else {
253                        return $self->object->set_fields($self->name, $data)
254                    }
255                },
256            },
257            o =>            {
258                managed => 1,
259                ro => sub { $_[0] && $_[0]->get_attributes('site') ? 1 : 0 },
260                get => sub {
261                    my ($self) = @_;
262                    if (my $site = $self->object->get_attributes('site')) {
263                        if (my $osite = $self->base->get_object('site', $site)) {
264                            return $osite->get_attributes($self->name);
265                        }
266                    }
267                    return $self->object->get_field($self->name);
268                },
269                set => sub {
270                    my ($self, $data) = @_;
271                    if (my $site = $self->object->get_attributes('site')) {
272                        return 1;
273                    } else {
274                        return $self->object->set_fields($self->name, $data)
275                    }
276                },
277            },
278            isMainAddress => { formtype => 'CHECKBOX', },
279            active => { ro => 1 },
280            telephoneNumber => { },
281            physicalDeliveryOfficeName => { },
282            otherTelephone => { },
283            ipPhone => { },
284            homePhone => { },
285            description => { },
286        }
287    );
288}
289
290sub _create {
291    my ($class, $base, $id, %data) = @_;
292    $data{user} or return;
293    my $user = $base->get_object('user', $data{user});
294    $user or return;
295    if (!$user->get_c_field('otheraddress')) {
296        $data{isMainAddress} = 1;
297    }
298    $class->SUPER::_create($base, $id, %data);
299}
300
3011;
302
303__END__
304
305=head1 SEE ALSO
306
307L<LATMOS::Accounts::Bases::Sql>
308
309L<LATMOS::Accounts::Bases::Sql::Onlyaddress>
310
311=head1 AUTHOR
312
313Olivier Thauvin, E<lt>olivier.thauvin@latmos.ipsl.frE<gt>
314
315=head1 COPYRIGHT AND LICENSE
316
317Copyright (C) 2008, 2009 CNRS SA/CETP/LATMOS
318
319This library is free software; you can redistribute it and/or modify
320it under the same terms as Perl itself, either Perl version 5.10.0 or,
321at your option, any later version of Perl 5 you may have available.
322
323
324=cut
Note: See TracBrowser for help on using the repository browser.