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

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

Merge branch 'jquery'

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