X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;ds=sidebyside;f=Memories%2FUser.pm;fp=Memories%2FUser.pm;h=b0020a53fd4dd211cbc063ab40c4717836c3c6b4;hb=b9d021d4af1018ac2c60640678c1b790251190e9;hp=0000000000000000000000000000000000000000;hpb=619ab99c593a8fe9adc50834d27d25b5fa24f4e3;p=memories.git diff --git a/Memories/User.pm b/Memories/User.pm new file mode 100644 index 0000000..b0020a5 --- /dev/null +++ b/Memories/User.pm @@ -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;