]> git.decadent.org.uk Git - memories.git/blob - Memories/User.pm
Update to policy version 3.8.0
[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     $r->last_search;
34 }
35
36 # Album support!
37
38 sub edit_albums :Exported {
39     my ($self, $r) = @_;
40     $r->{template} = "view";
41     $self->view($r);
42     my $user = $r->objects->[0];
43     return unless $r->user and $r->user->id == $user->id;
44     if ($r->{params}{create}) {
45         $user->add_to_albums({
46             privacy => !!($r->{params}{new_privacy}),
47             name => $r->{params}{new_name}
48         });
49     } elsif ($r->{params}{changes}) {
50         for my $album ($user->albums) { #XXX
51             warn "Setting $album privacy to ".
52                 $r->{params}{"privacy_".$album->id};
53             $album->privacy(!!$r->{params}{"privacy_".$album->id});
54         }
55     } else {
56         my @to_delete = map /(\d+)/,
57             grep /delete_\d+/, keys %{$r->{params}};
58         for (@to_delete) {
59             my $album = Memories::Album->retrieve($_);
60             if ($album and $album->user->id == $user->id) {
61                 $album->delete
62             }
63         }
64     }
65     
66 }
67
68 sub api_taglist :Exported {
69     my ($self, $r) = @_;
70     my $user = $r->objects->[0];
71     $r->{output} .= $_->{tag}.":".$_->{count}."\n"
72         for Memories::Tagging->search_user_summary($user->id);
73     $r->{output}.= "\n";
74     $r->{content_type} = "text/plain";
75 }
76
77 1;