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

Last change on this file since 467 was 467, checked in by nanardon, 15 years ago
  • fix some issue due to aliases management changes
  • Property svn:keywords set to Id Rev
File size: 5.2 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    $c->stash->{userslist} = [  map { $_->id } @{ $c->stash->{objectslist} } ];
29}
30
31sub default : LocalPath {
32    my ( $self, $c, undef, $username, $subform, $arg ) = @_;
33
34    my $base = $c->model('Accounts')->db;
35
36    $c->stash->{username} = $username;
37    $c->stash->{user} = $base->get_object('user', $username);
38    $c->stash->{subform} = $subform || '';
39
40    for ($subform || '') {
41        # Exceptions...
42        /^passwd$/ and do {
43            $c->stash->{template} = 'users/passwd.tt';
44            if ($c->req->param('passwd')) {
45                if ($c->req->param('passwd') eq ($c->req->param('cpasswd') || '')) {
46                    my $sync = $c->model('Accounts')->sync_access;
47                    my $suser = $sync->get_object('user', $username);
48                    if ($suser && $suser->set_password($c->req->param('passwd'))) {
49                        $c->stash->{pchanged} = 1;
50                        $sync->commit;
51                    } else {
52                        $c->stash->{notchanged} = 1;
53                    }
54                } else {
55                    $c->stash->{pmismatch} = 1;
56                }
57            }
58            last;
59        };
60        /^groups$/ and do {
61            $c->stash->{template} = 'users/groups.tt';
62            # list of group for which users can be added
63            my %ingroups = map { $_ => 1 } @{ $c->stash->{user}->get_c_field('memberOf') || []};
64            if ($c->req->param('addgroup')) {
65                $c->stash->{user}->set_c_fields('memberOf', [ keys %ingroups, $c->req->param('addgroup') ]);
66                $c->stash->{user}->base->commit;
67                # reread:
68                %ingroups = map { $_ => 1 } @{ $c->stash->{user}->get_c_field('memberOf') || []};
69            } elsif ($c->req->param('delgroup')) {
70                $c->stash->{user}->set_c_fields('memberOf',
71                    [ grep { $_ ne $c->req->param('delgroup') } keys %ingroups ]
72                );
73                $c->stash->{user}->base->commit;
74                %ingroups = map { $_ => 1 } @{ $c->stash->{user}->get_c_field('memberOf') || []};
75            }
76
77            $c->stash->{othergroups} = [ grep { ! $ingroups{$_} } $base->list_objects('group') ];
78            last;
79        };
80        /^address$/ and do {
81            if ($arg) {
82                $c->stash->{address} = $base->get_object('address', $arg);
83                $c->stash->{form} = $c->model('AttrForms', 'address',
84                    $c->stash->{address});
85                $c->stash->{template} = 'users/address.tt';
86                $c->stash->{form}->set_attrs;
87            } else {
88                $c->stash->{form} = $c->model('AttrForms', 'address', 'address',
89                    $base);
90                if ($c->req->param('delete')) {
91                    $base->delete_object('address', $c->req->param('delete'));
92                    $base->commit;
93                } elsif ($c->req->param('create')) {
94                    my $addname = $username . join('', map
95                        {('a'..'z')[rand(26)]}(0..4));
96                    $base->create_c_object('address',
97                        $addname,
98                        map { $_ => $c->req->param($_) }
99                        $c->stash->{form}->attributes('w'),
100                        user => $username,
101                    );
102                    $base->commit;
103                    $c->res->redirect($c->uri_for($username, 'address',
104                            $addname));
105                    return;
106                }
107                $c->stash->{template} = 'users/addresses.tt';
108            }
109            last;
110        };
111        /^mail$/ and do {
112
113            $c->stash->{db} = $base;
114            $c->stash->{template} = 'users/mail.tt';
115            my %aliases;
116            my @faliases = $c->stash->{user}->get_attributes('aliases');
117            foreach my $al (@faliases) {
118                $aliases{$al} = $base->get_object('aliases', $al);
119                delete($aliases{$al}) if (!$aliases{$al});
120            }
121            my %samealiases;
122            foreach my $alias (values %aliases) {
123                foreach my $sameid ($alias->get_attributes('samedestination')) {
124                    exists($aliases{$sameid}) and next;
125                    $sameid eq $username and next; # skip the forward
126                    $samealiases{$sameid} ||= $base->get_object('aliases',
127                        $sameid);
128                }
129            }
130            @{ $c->stash->{samealiases} } = values %samealiases;
131            $c->stash->{forward} = $base->get_object('aliases', $username);
132            $c->stash->{aliases} = [ values %aliases ];
133            last;
134        };
135
136        $c->stash->{form} = $c->model('AttrForms', 'user' . $c->stash->{subform}, $c->stash->{user});
137        $c->stash->{form}->set_attrs;
138    }
139}
140
141=head1 AUTHOR
142
143Thauvin Olivier
144
145=head1 LICENSE
146
147This library is free software, you can redistribute it and/or modify
148it under the same terms as Perl itself.
149
150=cut
151
1521;
Note: See TracBrowser for help on using the repository browser.