]> git.decadent.org.uk Git - memories.git/blob - Memories/Album.pm
Update to policy version 3.8.0
[memories.git] / Memories / Album.pm
1 package Memories::Album;
2 use base qw(Memories::DBI Maypole::Model::CDBI::Plain);
3 __PACKAGE__->columns(Essential => qw/id name user privacy/);
4 Memories::Album->has_a(user => "Memories::User");
5 Memories::User->has_many(albums => "Memories::Album");
6
7 sub view :Exported {
8     my ($self, $r) = @_;
9     my $album = $r->objects->[0];
10     if ($album->privacy && $album->user != $r->user) {
11         $r->template("denied"); return;
12     }
13     $r->template_args->{photos} = [ $album->photos ];
14 }
15
16 sub list :Exported {
17     my ($self, $r) = @_;
18     my $page = $r->{params}{page} || 1;
19     my $pager = Memories::Album->pager(
20         Memories->config->{photos_per_page}, $page);
21     $r->{objects} = [$pager->search(privacy => 0)];
22     $r->{template_args}{pager} = $pager;
23 }
24
25 sub edit :Exported {
26     my ($self, $r) = @_;
27     use Data::Dumper; warn Dumper($r->{params});
28     my $album;
29     if ($r->{params}{album}) { # We're adding to an album
30         $album = $self->retrieve($r->{params}{album});
31         if (!$album or $album->user != $r->user) { 
32             $r->template("denied"); return;
33         }
34         for (map /(\d+)/,grep /add\d+/, keys %{$r->{params}}) {
35             Memories::AlbumEntry->create({
36                     album => $album->id,
37                     photo => $_
38                 });
39         }
40     } else {
41         $album = $r->{objects}[0];
42         if (!$album or $album->user != $r->user) { 
43             $r->template("denied"); return;
44         }
45         for (map /(\d+)/,grep /delete\d+/, keys %{$r->{params}}) {
46             my ($ae) = Memories::AlbumEntry->search({
47                     album => $album->id,
48                     photo => $_
49                 });
50             $ae->delete if $ae;
51         }
52     }
53     $r->objects([ $album ]);
54     $r->template("view"); $self->view($r);
55 }
56
57 package Memories::AlbumEntry;
58 use base qw(Memories::DBI);
59 __PACKAGE__->table("album_entry");
60 __PACKAGE__->columns(TEMP => qw/count/);
61 __PACKAGE__->columns(Essential => qw/id album photo/);
62 __PACKAGE__->set_sql(summary => qq/
63 SELECT  id, album, count(*) AS count
64 FROM album_entry;
65 GROUP BY album
66 ORDER BY count DESC
67 LIMIT 50
68     /);
69 Memories::AlbumEntry->has_a("photo" => "Memories::Photo");
70 Memories::AlbumEntry->has_a("album" => "Memories::Album");
71
72 Memories::Photo->has_many(albums => ["Memories::AlbumEntry" => "album"]);
73 Memories::Photo->has_many(albumentries => "Memories::AlbumEntry");
74 Memories::Album->has_many(photos => ["Memories::AlbumEntry" => "photo"] );
75 Memories::Album->has_many(albumentries => "Memories::AlbumEntry");
76
77 1;