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

Last change on this file since 2265 was 2204, checked in by nanardon, 5 years ago

Track parent object in SQL log

File size: 13.2 KB
RevLine 
[306]1package LATMOS::Accounts::Bases::Sql::Address;
2
3use 5.010000;
4use strict;
5use warnings;
6
7use base qw(LATMOS::Accounts::Bases::Sql::objects);
[1551]8use LATMOS::Accounts::I18N;
[306]9
10our $VERSION = (q$Rev: 594 $ =~ /^Rev: (\d+) /)[0];
11
12=head1 NAME
13
[1023]14LATMOS::Accounts::Bases::Sql::Address - Physical office Adress Support
[306]15
16=head1 DESCRIPTION
17
[1023]18C<Address> objects allow to store user's several office addresses.
[306]19
[1023]20Notice most of other bases (Ldap, ...) support only one address.
[306]21
22=cut
23
[1329]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
[1014]38sub _object_table { 'address' }
[306]39
[1014]40sub _key_field { 'name' }
[306]41
[1014]42sub _has_extended_attributes { 1 }
[306]43
[861]44sub _get_attr_schema {
45    my ($class, $base) = @_;
[306]46
[861]47    $class->SUPER::_get_attr_schema($base,
48        {
49            name =>         { inline => 1, },
50            exported =>     { inline => 1, },
[1550]51            user =>         {
52                inline => 1,
[861]53                reference => 'user',
[1550]54                label => l('User'),
[861]55            },
56            site =>         {
57                reference => 'site',
[1550]58                label => l('Site'),
[861]59            },
[1315]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($attr->name);
69                },
[1550]70                label => l('Last name'),
[1315]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($attr->name);
81                },
[1550]82                label => l('Email'),
[1315]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($attr->name);
93                },
[1550]94                label => l('First name'),
[1315]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                },
[1550]117                label => l('Postal address'),
[1315]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                },
[1550]130                label => l('Name'),
[1315]131            },
132            co => {
133                managed => 1,
[861]134                ro => sub { $_[0] && $_[0]->get_attributes('site') ? 1 : 0 },
[1315]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($self->name);
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($self->name, $data)
150                    }
151                },
[1550]152                label => l('Country'),
[861]153            },
[1315]154            l => {
155                managed => 1,
[861]156                ro => sub { $_[0] && $_[0]->get_attributes('site') ? 1 : 0 },
[1315]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($self->name);
162                        }
163                    }
164                    return $self->object->get_field($self->name);
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                },
[1550]174                label => l('City'),
[861]175            },
176            postalCode =>   {
[1315]177                managed => 1,
[861]178                ro => sub { $_[0] && $_[0]->get_attributes('site') ? 1 : 0 },
[1315]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($self->name);
184                        }
185                    }
186                    return $self->object->get_field($self->name);
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($self->name, $data)
194                    }
195                },
[1550]196                label => l('Postal code'),
[861]197            },
198            streetAddress => {
[1315]199                managed => 1,
[861]200                formtype => 'TEXTAREA',
201                ro => sub { $_[0] && $_[0]->get_attributes('site') ? 1 : 0 },
[1315]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($self->name);
207                        }
208                    }
209                    return $self->object->get_field($self->name);
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($self->name, $data)
217                    }
218                },
[1550]219                label => l('Street'),
[861]220            },
221            postOfficeBox => {
[1315]222                managed => 1,
[861]223                ro => sub { $_[0] && $_[0]->get_attributes('site') ? 1 : 0 },
[1315]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($self->name);
229                        }
230                    }
231                    return $self->object->get_field($self->name);
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($self->name, $data)
239                    }
240                },
[1550]241                label => l('Post office box'),
[861]242            },
[1315]243            st => {
244                managed => 1,
[861]245                ro => sub { $_[0] && $_[0]->get_attributes('site') ? 1 : 0 },
[1315]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($self->name);
251                        }
252                    }
253                    return $self->object->get_field($self->name);
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($self->name, $data)
261                    }
262                },
[1550]263                label => l('Street'),
[861]264            },
265            facsimileTelephoneNumber => {
[1315]266                managed => 1,
[861]267                ro => sub { $_[0] && $_[0]->get_attributes('site') ? 1 : 0 },
[1315]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($self->name);
273                        }
274                    }
275                    return $self->object->get_field($self->name);
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($self->name, $data)
283                    }
284                },
[1550]285                label => l('Fax number'),
[861]286            },
287            o =>            {
[1315]288                managed => 1,
[861]289                ro => sub { $_[0] && $_[0]->get_attributes('site') ? 1 : 0 },
[1315]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($self->name);
295                        }
296                    }
297                    return $self->object->get_field($self->name);
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($self->name, $data)
305                    }
306                },
[1613]307                label => l('Company'),
[861]308            },
[1550]309            isMainAddress => {
310                formtype => 'CHECKBOX',
311                label => l('Main address'),
312            },
[2078]313            contactOnly => {
314                formtype => 'CHECKBOX',
315                label => l('For contact only'),
316            },
[943]317            active => { ro => 1 },
[1550]318            telephoneNumber => {
319                label => l('Phone number'),
320            },
321            physicalDeliveryOfficeName => {
322                label => l('Office'),
323            },
[1315]324            otherTelephone => { },
325            ipPhone => { },
326            homePhone => { },
[1550]327            description => {
328                label => l('Description'),
329            },
[1865]330            expire    => {
331                inline => 1,
332                formtype => 'DATE',
333                label => l('Expire'),
334            },
[861]335        }
[306]336    );
337}
338
[2204]339sub ParentObject {
340    my ($self) = @_;
341
342    return $self->base->get_object('user', $self->_get_attributes('user'));
343}
344
[394]345sub _create {
346    my ($class, $base, $id, %data) = @_;
347    $data{user} or return;
348    my $user = $base->get_object('user', $data{user});
[861]349    $user or return;
[2000]350    if (!$user->get_c_field('mainaddress')) {
[394]351        $data{isMainAddress} = 1;
352    }
[1498]353    $data{exported} = $user->get_attributes('exported');
[394]354    $class->SUPER::_create($base, $id, %data);
355}
356
[306]3571;
358
359__END__
360
361=head1 SEE ALSO
362
[1023]363L<LATMOS::Accounts::Bases::Sql>
364
365L<LATMOS::Accounts::Bases::Sql::Onlyaddress>
366
[306]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.