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

Last change on this file since 718 was 718, checked in by nanardon, 14 years ago
  • trap error when object does not exists instead dying
  • Property svn:keywords set to Id Rev
File size: 6.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');
29    $c->stash->{uparams} = { %{ $c->req->params || {} } };
30    my %initials;
31    my @userlist;
32    foreach (map { $_->id } @{ $c->stash->{objectslist} }) {
33        $initials{substr($_, 0, 1)} = 1;
34        if ($start) {
35            if (index($_, $start) == 0) {
36                push(@userlist, $_);
37            }
38        }
39    }
40    if (@{ $c->stash->{objectslist} } < 20) {
41        @userlist = map { $_->id } @{ $c->stash->{objectslist} };
42    } else {
43        $c->stash->{initials} = [ sort keys %initials ];
44    }
45    $c->stash->{userslist} = \@userlist;
46}
47
48sub default : LocalPath {
49    my ( $self, $c, undef, $username, $subform, $arg ) = @_;
50
51    my $base = $c->model('Accounts')->db;
52
53    $c->stash->{username} = $username;
54    $c->stash->{user} = $base->get_object('user', $username) or do {
55        $c->forward('/no_object');
56        return;
57    };
58    $c->stash->{subform} = $subform || '';
59
60    for ($subform || '') {
61        # Exceptions...
62        /^passwd$/ and do {
63            $c->stash->{template} = 'users/passwd.tt';
64            if ($c->req->param('passwd')) {
65                if ($c->req->param('passwd') eq ($c->req->param('cpasswd') || '')) {
66                    my $sync = $c->model('Accounts')->sync_access;
67                   
68                    # This is widelly burk:
69                    # synchaccess do not manage connect() at time, opening a
70                    # backdoor then :\
71                    foreach ($sync->bases) { $_->{_user} = $c->user->{username} }
72                   
73                    my $suser = $sync->get_object('user', $username);
74                    my $msg = $c->stash->{user}->check_password($c->req->param('passwd'));
75                    if ($msg ne 'ok') {
76                        $c->stash->{pmerror} = $msg . ', mot de passe inchangé';
77                    } elsif ($suser && $suser->set_password($c->req->param('passwd'))) {
78                        $c->stash->{pmerror} = 'Mot de passe changé';
79                        $sync->commit;
80                    } else {
81                        $c->stash->{pmerror} = 'Erreur lors du changement de mot de passe';
82                    }
83                } else {
84                    $c->stash->{pmerror} = 'Mot de passe différents';
85                }
86            }
87            last;
88        };
89        /^groups$/ and do {
90            $c->stash->{template} = 'users/groups.tt';
91            # list of group for which users can be added
92            my %ingroups = map { $_ => 1 } @{ $c->stash->{user}->get_c_field('memberOf') || []};
93            if ($c->req->param('addgroup')) {
94                $c->stash->{user}->set_c_fields('memberOf', [ keys %ingroups, $c->req->param('addgroup') ]);
95                $c->stash->{user}->base->commit;
96                # reread:
97                %ingroups = map { $_ => 1 } @{ $c->stash->{user}->get_c_field('memberOf') || []};
98            } elsif ($c->req->param('delgroup')) {
99                $c->stash->{user}->set_c_fields('memberOf',
100                    [ grep { $_ ne $c->req->param('delgroup') } keys %ingroups ]
101                );
102                $c->stash->{user}->base->commit;
103                %ingroups = map { $_ => 1 } @{ $c->stash->{user}->get_c_field('memberOf') || []};
104            }
105
106            $c->stash->{othergroups} = [ grep { ! $ingroups{$_} } $base->list_objects('group') ];
107            last;
108        };
109        /^address$/ and do {
110            if ($arg) {
111                $c->stash->{address} = $base->get_object('address', $arg);
112                $c->stash->{form} = $c->model('AttrForms', 'address',
113                    $c->stash->{address});
114                $c->stash->{template} = 'users/address.tt';
115                $c->stash->{form}->set_attrs;
116            } else {
117                $c->stash->{form} = $c->model('AttrForms', 'address', 'address',
118                    $base);
119                if ($c->req->param('delete')) {
120                    $base->delete_object('address', $c->req->param('delete'));
121                    $base->commit;
122                } elsif ($c->req->param('create')) {
123                    my $addname = $username . join('', map
124                        {('a'..'z')[rand(26)]}(0..4));
125                    $base->create_c_object('address',
126                        $addname,
127                        map { $_ => $c->req->param($_) }
128                        $c->stash->{form}->attributes('w'),
129                        user => $username,
130                    );
131                    $base->commit;
132                    $c->res->redirect($c->uri_for($username, 'address',
133                            $addname));
134                    return;
135                }
136                $c->stash->{template} = 'users/addresses.tt';
137            }
138            last;
139        };
140        /^mail$/ and do {
141
142            $c->stash->{db} = $base;
143            $c->stash->{template} = 'users/mail.tt';
144
145            if ($c->req->param('usermail')) {
146                $c->stash->{user}->set_c_fields(
147                    mail => $c->req->param('mail') || undef,
148                    aliases => [ grep { $_ } $c->req->param('aliases') ],
149                    revaliases => $c->req->param('revaliases') || undef,
150                    forward => $c->req->param('forward') || undef,
151                ) and $base->commit;
152            }
153
154            last;
155        };
156        /^dump$/ and do {
157            $c->stash->{db} = $base;
158            $c->stash->{template} = 'users/dump.tt'
159            #$c->res->body($c->stash->{user}->dump({only_rw => 1}));
160        };
161
162        $c->stash->{form} = $c->model('AttrForms', 'user' . $c->stash->{subform}, $c->stash->{user});
163        $c->stash->{form}->set_attrs;
164    }
165}
166
167=head1 AUTHOR
168
169Thauvin Olivier
170
171=head1 LICENSE
172
173This library is free software, you can redistribute it and/or modify
174it under the same terms as Perl itself.
175
176=cut
177
1781;
Note: See TracBrowser for help on using the repository browser.