source: LATMOS-Accounts-Web/lib/LATMOS/Accounts/Web/Controller/Users.pm @ 545

Last change on this file since 545 was 545, checked in by nanardon, 15 years ago
  • don't show all users on only one page, split results into several pages (1, 2, ...)
  • Property svn:keywords set to Id Rev
File size: 5.1 KB
Line 
1package LATMOS::Accounts::Web::Controller::Users;
2
3use strict;
4use warnings;
5use base 'LATMOS::Accounts::Web::Controller';
6
7=head1 NAME
8
9LATMOS::Accounts::Web::Controller::Users - Catalyst Controller
10
11=head1 DESCRIPTION
12
13Catalyst Controller.
14
15=head1 METHODS
16
17=cut
18
19
20=head2 index
21
22=cut
23
24sub index : Private {
25    my ( $self, $c ) = @_;
26
27    $c->stash->{ofilter} = $c->model('AttrFilter', 'user');
28    my $start = ($c->req->param('start') || '0') * 20 ;
29    $c->stash->{uparams} = { %{ $c->req->params || {} } };
30    my @userlist = map { $_->id } @{ $c->stash->{objectslist} };
31    $c->stash->{pagecount} = int(@userlist / 20);
32    splice(@userlist, 0, $start) if($start);
33    $c->stash->{userslist} = [
34        @userlist[0 .. ($#userlist > 19 ? 19 : $#userlist)]
35    ];
36}
37
38sub default : LocalPath {
39    my ( $self, $c, undef, $username, $subform, $arg ) = @_;
40
41    my $base = $c->model('Accounts')->db;
42
43    $c->stash->{username} = $username;
44    $c->stash->{user} = $base->get_object('user', $username);
45    $c->stash->{subform} = $subform || '';
46
47    for ($subform || '') {
48        # Exceptions...
49        /^passwd$/ and do {
50            $c->stash->{template} = 'users/passwd.tt';
51            if ($c->req->param('passwd')) {
52                if ($c->req->param('passwd') eq ($c->req->param('cpasswd') || '')) {
53                    my $sync = $c->model('Accounts')->sync_access;
54                    my $suser = $sync->get_object('user', $username);
55                    if ($suser && $suser->set_password($c->req->param('passwd'))) {
56                        $c->stash->{pchanged} = 1;
57                        $sync->commit;
58                    } else {
59                        $c->stash->{notchanged} = 1;
60                    }
61                } else {
62                    $c->stash->{pmismatch} = 1;
63                }
64            }
65            last;
66        };
67        /^groups$/ and do {
68            $c->stash->{template} = 'users/groups.tt';
69            # list of group for which users can be added
70            my %ingroups = map { $_ => 1 } @{ $c->stash->{user}->get_c_field('memberOf') || []};
71            if ($c->req->param('addgroup')) {
72                $c->stash->{user}->set_c_fields('memberOf', [ keys %ingroups, $c->req->param('addgroup') ]);
73                $c->stash->{user}->base->commit;
74                # reread:
75                %ingroups = map { $_ => 1 } @{ $c->stash->{user}->get_c_field('memberOf') || []};
76            } elsif ($c->req->param('delgroup')) {
77                $c->stash->{user}->set_c_fields('memberOf',
78                    [ grep { $_ ne $c->req->param('delgroup') } keys %ingroups ]
79                );
80                $c->stash->{user}->base->commit;
81                %ingroups = map { $_ => 1 } @{ $c->stash->{user}->get_c_field('memberOf') || []};
82            }
83
84            $c->stash->{othergroups} = [ grep { ! $ingroups{$_} } $base->list_objects('group') ];
85            last;
86        };
87        /^address$/ and do {
88            if ($arg) {
89                $c->stash->{address} = $base->get_object('address', $arg);
90                $c->stash->{form} = $c->model('AttrForms', 'address',
91                    $c->stash->{address});
92                $c->stash->{template} = 'users/address.tt';
93                $c->stash->{form}->set_attrs;
94            } else {
95                $c->stash->{form} = $c->model('AttrForms', 'address', 'address',
96                    $base);
97                if ($c->req->param('delete')) {
98                    $base->delete_object('address', $c->req->param('delete'));
99                    $base->commit;
100                } elsif ($c->req->param('create')) {
101                    my $addname = $username . join('', map
102                        {('a'..'z')[rand(26)]}(0..4));
103                    $base->create_c_object('address',
104                        $addname,
105                        map { $_ => $c->req->param($_) }
106                        $c->stash->{form}->attributes('w'),
107                        user => $username,
108                    );
109                    $base->commit;
110                    $c->res->redirect($c->uri_for($username, 'address',
111                            $addname));
112                    return;
113                }
114                $c->stash->{template} = 'users/addresses.tt';
115            }
116            last;
117        };
118        /^mail$/ and do {
119
120            $c->stash->{db} = $base;
121            $c->stash->{template} = 'users/mail.tt';
122
123            if ($c->req->param('usermail')) {
124                $c->stash->{user}->set_c_fields(
125                    mail => $c->req->param('mail') || undef,
126                    aliases => [ grep { $_ } $c->req->param('aliases') ],
127                    revaliases => $c->req->param('revaliases') || undef,
128                    forward => $c->req->param('forward') || undef,
129                ) and $base->commit;
130            }
131
132            last;
133        };
134
135        $c->stash->{form} = $c->model('AttrForms', 'user' . $c->stash->{subform}, $c->stash->{user});
136        $c->stash->{form}->set_attrs;
137    }
138}
139
140=head1 AUTHOR
141
142Thauvin Olivier
143
144=head1 LICENSE
145
146This library is free software, you can redistribute it and/or modify
147it under the same terms as Perl itself.
148
149=cut
150
1511;
Note: See TracBrowser for help on using the repository browser.