source: trunk/LATMOS-Accounts-Web/lib/LATMOS/Accounts/Web/Model/AttrForms.pm @ 1348

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

Add endcircuit attribute

File size: 7.3 KB
Line 
1package LATMOS::Accounts::Web::Model::AttrForms;
2
3use strict;
4use warnings;
5use base 'Catalyst::Model';
6use LATMOS::Accounts::Log;
7use HTML::Prototype;
8
9=head1 NAME
10
11LATMOS::Accounts::Web::Model::AttrForms - Catalyst Model
12
13=head1 DESCRIPTION
14
15Catalyst Model.
16
17=cut
18
19my $forms = {
20    usersys => {
21        name => 'SystÚme',
22        attrs => [ qw(
23            sn givenName description
24            comment
25            uid uidNumber gidNumber gecos homeDirectory loginShell
26            mail initials nickname
27            expire
28            endcircuit
29            locked
30            create
31            date
32        ) ],
33    },
34    user => {
35        name => 'Statut RH',
36        attrs => [ qw(
37            sn givenName description
38            comment
39            company
40            department
41            manager
42            managerContact
43            contratType
44            expire
45            endcircuit
46            snNative
47            givenNameNative
48            wWWHomePage
49            halReference
50            create
51            date
52        ) ],
53    },
54    useraddress => {
55        name => 'Adresse',
56        attrs => [ qw(
57            initials
58            mail
59        ) ],
60    },
61    usermy => {
62        name => 'My',
63        attrs => [ qw(
64            snNative
65            givenNameNative
66            wWWHomePage
67            halReference
68        ) ],
69    },
70    site => {
71        name => 'Site',
72        attrs => [ qw(
73            description
74            siteNick
75            streetAddress
76            postOfficeBox
77            postalCode
78            l
79            st
80            co
81            facsimileTelephoneNumber
82            create
83            date
84        ) ],
85    },
86    address => {
87        name => 'Adresse',
88        attrs => [ qw(
89            isMainAddress
90            telephoneNumber
91            streetAddress
92            postOfficeBox
93            postalCode
94            l
95            st
96            physicalDeliveryOfficeName
97            site
98            co
99            unexported
100            description
101            facsimileTelephoneNumber
102        ) ],
103    },
104    group => {
105        name => 'SystÚme',
106        attrs => [ qw(
107            gidNumber
108            description label
109            comment
110            managedBy
111            managedAlsoBy
112            autoMemberFilter
113            sutype
114            create
115            date
116        ) ],
117    },
118    nethost => {
119        name => 'Ordinateur',
120        attrs => [ qw(
121            name
122            description
123            comment
124            related
125            serialNumber
126            encryptKey
127            owner
128            user
129            ip
130            macaddr
131            puppetClass
132            noInheritPuppet
133            noDynamic
134            cname
135            otherName
136            reverse
137            create
138            date
139            unexported
140            sshfp
141        ) ],
142    },
143    netzone => {
144        name => 'Zone réseau',
145        attrs => [ qw(
146            name
147            description
148            type
149            net
150            netExclude
151            puppetClass
152            outputD
153            templateD
154            site
155            allow_dyn
156            dynFrom
157            domain
158            ipCount
159            freeIPCount
160            create
161            date
162            dnsRevision
163            lastUpdate
164            unexported
165        ) ],
166    },
167    aliases => {
168        name => 'Alias mail',
169        attrs => [ qw(
170            forward
171            expire
172            description
173            comment
174            finalpoint
175            parents
176            create
177            date
178            unexported
179        )],
180    },
181    services => {
182        name => 'Services',
183        attrs => [ qw(
184            type
185            description
186            comment
187            start
188            end
189            manager
190            dependOn
191            create
192            date
193            unexported
194        )],
195    },
196};
197
198sub escape {
199    my ($self, $text) = @_;
200    $text ||= '';
201    for ($text) {
202        s/&/&/g;
203        s/</&lt;/g;
204        s/>/&gt;/g;
205        s/"/&quot;/g;
206    }
207    $text;
208}
209
210sub new {
211    my ($class) = @_;
212    bless({}, $class);
213}
214
215# call either OBJ or type + base
216
217sub ACCEPT_CONTEXT {
218    my ($self, $c, $form, $object, $base) = @_;
219    my $new = {};
220    $new->{c} = $c;
221    $new->{form} = $form;
222    $new->{object} = $object if (ref $object);
223    $new->{base} = $base || (ref $object ? $object->base : undef) or return $self;
224    $new->{otype} = ref $object ? $object->type : $object;
225
226
227    foreach (@{ $forms->{$form}->{attrs} }) {
228        $new->{_attr}{$_} = $c->model('AttrFormsA', $_, ($object
229                ? ($object)
230                : ($base, $new->{otype})))
231            or die "Cannot get attribute $_";
232    }
233
234    bless($new, __PACKAGE__);
235}
236
237sub base {
238    my ( $self ) = @_;
239    $self->{base}
240}
241
242sub otype {
243    my ($self) = @_;
244    $self->{otype};
245}
246
247sub object {
248    my ($self) = @_;
249    $self->{object};
250}
251
252sub label {
253    my ($self) = @_;
254    $forms->{$self->{form}}->{name} || ''
255}
256
257sub attributes {
258    my ($self, $for) = @_;
259    grep { $_ }
260    grep { $self->base->attribute($self->otype, $_) }
261    @{ $forms->{$self->{form}}->{attrs} };
262}
263
264sub _uri_part {
265    my ($self, $ref) = @_;
266    my $uri_part = {
267        user => 'users',
268        group => 'groups',
269        nethost => 'nethosts',
270        netzone => 'netzones',
271        site => 'sites',
272        aliasess => 'aliases',
273    }->{$ref};
274}
275
276sub attr_label {
277    my ($self, $attr, $label, $hint) = @_;
278
279    if ($label) {
280        return $label;
281    } elsif (my $hash = LATMOS::Accounts::Web->config->{attrs}{$attr}) {
282        return $hash->{label};
283    } else {
284       return $attr;
285    } 
286}
287
288sub attr_hint {
289    my ($self, $attr) = @_;
290
291    $self->{_attr}{$attr}->attr_hint;
292}
293
294sub attr_field {
295    my ($self, $attr, $type) = @_;
296
297    $self->{_attr}{$attr}->attr_field($type);
298}
299
300sub field {
301    my ($self, $attr, $type) = @_;
302
303    if (!$self->{_attr}{$attr}) {
304        $self->{_attr}{$attr} = $self->{c}->model('AttrFormsA', $attr, ($self->object
305                ? ($self->object)
306                : ($self->base, $self->otype)))
307            or die "Cannot get attribute $_";
308    }
309
310    $self->{_attr}{$attr};
311}
312
313
314sub write_attributes {
315    my ($self) = @_;
316    my @attrs;
317    foreach (values %{ $self->{_attr} }) {
318        $_->readonly and next;
319        push(@attrs, $_);
320    }
321    @attrs;
322}
323
324sub set_attrs {
325    my ($self, $attrs) = @_;
326    $self->{c}->req->param($self->label) || $attrs or return;
327    my %fields;
328    foreach ($attrs ? @{ $attrs } : $self->write_attributes) {
329        my $attr = ref $_ ? $_ : $self->{_attr}{$_};
330        if ($attr->{multiple}) {
331            $fields{$attr->name} = [ grep { $_ } $self->{c}->req->param($attr->htmlname) ];
332        } else {
333            $fields{$attr->name} = $self->{c}->req->param($attr->htmlname);
334        }
335    }
336    $self->{object}->set_c_fields(%fields) or do {
337        $self->{c}->stash->{page}{error} =
338            LATMOS::Accounts::Log::lastmessage(LA_ERR);
339        $self->{object}->base->rollback;
340        return;
341    };
342    $self->{object}->base->commit;
343}
344
345sub submit {
346    my ($self) = @_;
347    return sprintf(
348        '<input type="submit" name="%s" value="Enregistrer">',
349        $self->escape($self->label),
350    );
351}
352
353
354=head1 AUTHOR
355
356Thauvin Olivier
357
358=head1 LICENSE
359
360This library is free software, you can redistribute it and/or modify
361it under the same terms as Perl itself.
362
363=cut
364
3651;
Note: See TracBrowser for help on using the repository browser.