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

Last change on this file was 2541, checked in by nanardon, 17 months ago

Add cache on Address attributes

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