]> git.decadent.org.uk Git - memories.git/blob - Memories/User.pm
Branched from version 1.1.
[memories.git] / Memories / User.pm
1 package Memories::User;
2 use base qw(Memories::DBI Maypole::Model::CDBI::Plain);
3 __PACKAGE__->columns(All => qw/id name password/);
4 __PACKAGE__->has_many(photos => "Memories::Photo");
5
6 sub register :Exported {
7     my ($class, $r) = @_;
8     my $login = $r->params->{name};
9     my $pass  = $r->params->{password};
10     $r->template("frontpage");
11     return if $r->user;
12
13     # Do we already exist?
14     if (!$login) { $r->template("login"); $r->message("You didn't enter a user name"); return; }
15     my ($user) = $class->search(name => $login);
16     if ($user) { $r->template("login"); $r->message("User name already exists"); return; }
17     $user = $class->create({name => $login, password => $pass });
18     $r->user($user, 0);
19     $r->login_user($user->id);
20
21 }
22
23 sub view :Exported {
24     my ($self, $r) = @_;
25     my $user = $r->objects->[0]; 
26     my $page = $r->params->{page} || 1;
27     my $pager = Class::DBI::Pager::_pager("Memories::Photo",
28         Memories->config->{photos_per_page}, $page); 
29     $r->{template_args}{photos} = [$pager->search(uploader =>
30     $user->id,{order_by => "uploaded desc"}) ];
31     $r->{template_args}{pager} = $pager;
32     $r->{template_args}{albums} = [$user->albums(privacy => 0)];
33 }
34
35 # Album support!
36
37 sub edit_albums :Exported {
38     my ($self, $r) = @_;
39     $r->{template} = "view";
40     $self->view($r);
41     my $user = $r->objects->[0];
42     return unless $r->user and $r->user->id == $user->id;
43     if ($r->{params}{create}) {
44         $user->add_to_albums({
45             privacy => !!($r->{params}{new_privacy}),
46             name => $r->{params}{new_name}
47         });
48     } elsif ($r->{params}{changes}) {
49         for my $album ($user->albums) { #XXX
50             warn "Setting $album privacy to ".
51                 $r->{params}{"privacy_".$album->id};
52             $album->privacy(!!$r->{params}{"privacy_".$album->id});
53         }
54     } else {
55         my @to_delete = map /(\d+)/,
56             grep /delete_\d+/, keys %{$r->{params}};
57         for (@to_delete) {
58             my $album = Memories::Album->retrieve($_);
59             if ($album and $album->user->id == $user->id) {
60                 $album->delete
61             }
62         }
63     }
64     
65 }
66
67 1;