]> git.decadent.org.uk Git - memories.git/blobdiff - Memories/User.pm
Memories as at 1.3
[memories.git] / Memories / User.pm
diff --git a/Memories/User.pm b/Memories/User.pm
new file mode 100644 (file)
index 0000000..b0020a5
--- /dev/null
@@ -0,0 +1,77 @@
+package Memories::User;
+use base qw(Memories::DBI Maypole::Model::CDBI::Plain);
+__PACKAGE__->columns(All => qw/id name password/);
+__PACKAGE__->has_many(photos => "Memories::Photo");
+
+sub register :Exported {
+    my ($class, $r) = @_;
+    my $login = $r->params->{name};
+    my $pass  = $r->params->{password};
+    $r->template("frontpage");
+    return if $r->user;
+
+    # Do we already exist?
+    if (!$login) { $r->template("login"); $r->message("You didn't enter a user name"); return; }
+    my ($user) = $class->search(name => $login);
+    if ($user) { $r->template("login"); $r->message("User name already exists"); return; }
+    $user = $class->create({name => $login, password => $pass });
+    $r->user($user, 0);
+    $r->login_user($user->id);
+
+}
+
+sub view :Exported {
+    my ($self, $r) = @_;
+    my $user = $r->objects->[0]; 
+    my $page = $r->params->{page} || 1;
+    my $pager = Class::DBI::Pager::_pager("Memories::Photo",
+        Memories->config->{photos_per_page}, $page); 
+    $r->{template_args}{photos} = [$pager->search(uploader =>
+    $user->id,{order_by => "uploaded desc"}) ];
+    $r->{template_args}{pager} = $pager;
+    $r->{template_args}{albums} = [$user->albums(privacy => 0)];
+    $r->last_search;
+}
+
+# Album support!
+
+sub edit_albums :Exported {
+    my ($self, $r) = @_;
+    $r->{template} = "view";
+    $self->view($r);
+    my $user = $r->objects->[0];
+    return unless $r->user and $r->user->id == $user->id;
+    if ($r->{params}{create}) {
+        $user->add_to_albums({
+            privacy => !!($r->{params}{new_privacy}),
+            name => $r->{params}{new_name}
+        });
+    } elsif ($r->{params}{changes}) {
+        for my $album ($user->albums) { #XXX
+            warn "Setting $album privacy to ".
+                $r->{params}{"privacy_".$album->id};
+            $album->privacy(!!$r->{params}{"privacy_".$album->id});
+        }
+    } else {
+        my @to_delete = map /(\d+)/,
+            grep /delete_\d+/, keys %{$r->{params}};
+        for (@to_delete) {
+            my $album = Memories::Album->retrieve($_);
+            if ($album and $album->user->id == $user->id) {
+                $album->delete
+            }
+        }
+    }
+    
+}
+
+sub api_taglist :Exported {
+    my ($self, $r) = @_;
+    my $user = $r->objects->[0];
+    $r->{output} .= $_->{tag}.":".$_->{count}."\n"
+        for Memories::Tagging->search_user_summary($user->id);
+    $r->{output}.= "\n";
+    $r->{content_type} = "text/plain";
+}
+
+1;