source: trunk/LATMOS-Accounts-Web/lib/LATMOS/Accounts/Web/Model/AttrFilter.pm @ 1131

Last change on this file since 1131 was 1131, checked in by nanardon, 12 years ago

AttrFilter? don't automatically fill stash anymore

File size: 3.7 KB
Line 
1package LATMOS::Accounts::Web::Model::AttrFilter;
2
3use strict;
4use warnings;
5use base 'Catalyst::Model';
6
7=head1 NAME
8
9LATMOS::Accounts::Web::Model::AttrFilter - Catalyst Model
10
11=head1 DESCRIPTION
12
13Catalyst Model.
14
15=cut
16
17my $fields = {
18    user => [ qw(uid sn givenName description uidNumber gidNumber company department manager) ],
19    group => [ qw(cn description gidNumber sutype) ],
20    site => [ qw(l) ],
21    nethost => [ qw(name cname otherName ip macaddr owner serialNumber) ],
22    netzone => [ qw(net group type site) ],
23    aliases => [ qw(as) ],
24};
25
26sub new {
27    my ($class) = @_;
28    return bless({}, $class);
29}
30
31sub ACCEPT_CONTEXT {
32    my ($self, $c, $otype) = @_;
33
34    my $new = {};
35    $new->{c} = $c;
36    $new->{otype} = $otype;
37    $new->{base} = $c->model('Accounts')->db;
38    $self = bless($new, __PACKAGE__);
39
40    my $base = $new->{base};
41
42    my @objlist = ();
43    if ($c->req->params->{'q'}) {
44        my %objs;
45        foreach my $attr (@{ $c->config->{objects}{$otype}{quick_search} || [ 'cn' ]}) {
46            foreach ($base->search_objects(
47                    $otype, "$attr~" . $c->req->params->{'q'})) {
48                $objs{$_} = 1;
49            }
50            @objlist = sort keys %objs;
51        }
52    } elsif (exists($c->req->params->{'attr'})) {
53        $self->{filter}{'attr'} = [ $c->req->param('attr') ];
54        $self->{filter}{'attrval'} = [ $c->req->param('attrval') ];
55        my @filter = $self->filter;
56        @objlist = $base->search_objects($otype, @filter);
57    } else {
58        @objlist = $base->list_objects($otype);
59    }
60
61    $self->{objectslist} = \@objlist;
62
63    my $start = $c->req->param('start');
64    $self->{uparams} = { %{ $c->req->params || {} } };
65    my %initials;
66    my @sublist;
67    foreach (@{ $self->{objectslist} }) {
68        $initials{substr($_, 0, 1)} = 1;
69        if ($start) {
70            if (index($_, $start) == 0) {
71                push(@sublist, $_);
72            }
73        }
74    }
75    $self->{sublist} = [ @sublist ];
76    $self->{initials} = [ sort keys %initials ];
77
78    $self
79}
80
81sub otype {
82    my ($self) = @_;
83    $self->{otype};
84}
85
86sub submit {
87    my ($self) = @_;
88    return sprintf(
89        '<input type="submit" name="%s">',
90        $self->escape($self->label),
91    );
92}
93
94sub current_value {
95    my ($self) = @_;
96    my @vals = @{ $self->{filter}{attrval} || [] };
97    my @fies = @{ $self->{filter}{attr} || [] };
98    my @couples;
99    foreach (@fies) {
100        my $val = shift(@vals);
101        $_ && $val or next;
102        push(@couples, { f => $_, v => $val});
103    }
104    push(@couples, {});
105    @couples;
106}
107
108sub count_field {
109    my ($self) = @_;
110    return [ (0 .. (scalar($self->current_value) -1)) ];
111}
112
113sub search_field {
114    my ($self, $count) = @_;
115    my $form = $self->{c}->model('AttrForms', '', $self->otype, $self->{c}->stash->{db});
116    my $html = '<select name="attr">
117    <option value=""></option>';
118    my @values = $self->current_value;
119    foreach (@{ $fields->{$self->otype} }) {
120        $html .= sprintf('<option value="%s"%s>%s</option>' . "\n",
121            $_,
122            (($values[$count]->{f} || '') eq $_ ? ' selected="on"' : ''),
123            $form->attr_label($_),
124        );
125    }
126
127    $html .= '</select>';
128}
129
130sub val_field {
131    my ($self, $count) = @_;
132    my @values = $self->current_value;
133    return sprintf('<input type="text" name="attrval" value="%s">',
134        $values[$count]->{v} || '');
135}
136
137sub filter {
138    my ($self) = @_;
139    map { $_->{f} . '~' .  $_->{v} } grep { $_->{f} } $self->current_value;
140}
141
142sub objectslist {
143    my ($self) = @_;
144    warn $self->{objectslist};
145    $self->{objectslist};
146}
147
148=head1 AUTHOR
149
150Thauvin Olivier
151
152=head1 LICENSE
153
154This library is free software, you can redistribute it and/or modify
155it under the same terms as Perl itself.
156
157=cut
158
1591;
Note: See TracBrowser for help on using the repository browser.