allow ownership change by email; remove from old user too
[scpubgit/stemmaweb.git] / lib / stemmaweb / Controller / Root.pm
index 5ab5e92..7987334 100644 (file)
@@ -40,6 +40,17 @@ sub index :Path :Args(0) {
     $c->stash->{template} = 'index.tt';
 }
 
+=head2 about
+
+A general overview/documentation page for the site.
+
+=cut
+
+sub about :Local :Args(0) {
+       my( $self, $c ) = @_;
+       $c->stash->{template} = 'about.tt';
+}
+
 =head1 Elements of index page
 
 =head2 directory
@@ -119,7 +130,10 @@ sub newtradition :Local :Args(0) {
                        } catch {
                                $errmsg = "Unexpected parsing error";
                        }
-                       last if $tradition;
+                       if( $tradition ) {
+                               $errmsg = undef;
+                               last;
+                       }
                }
        } elsif( $ext =~ /^(txt|csv|xls(x)?)$/ ) {
                # If it's Excel we need to pass excel => $ext;
@@ -176,6 +190,9 @@ Returns information about a particular text.
 sub textinfo :Local :Args(1) {
        my( $self, $c, $textid ) = @_;
        my $tradition = $c->model('Directory')->tradition( $textid );
+       ## Have to keep users in the same scope as tradition
+       my $newuser;
+       my $olduser;
        unless( $tradition ) {
                return _json_error( $c, 404, "No tradition with ID $textid" );
        }       
@@ -223,20 +240,23 @@ sub textinfo :Local :Args(1) {
                }
                
                # Handle ownership change
-               my $newuser;
                if( exists $params->{'owner'} ) {
                        # Only admins can update user / owner
                        my $newownerid = delete $params->{'owner'};
                        unless( !$newownerid || 
-                               ( $tradition->has_user && $tradition->user->id eq $newownerid ) ) {
+                               ( $tradition->has_user && $tradition->user->email eq $newownerid ) ) {
                                unless( $c->user->get_object->is_admin ) {
                                        return _json_error( $c, 403, 
                                                "Only admin users can change tradition ownership" );
                                }
-                               $newuser = $m->find_user({ username => $newownerid });
+                               $newuser = $m->find_user({ email => $newownerid });
                                unless( $newuser ) {
                                        return _json_error( $c, 500, "No such user " . $newownerid );
                                }
+                               if( $tradition->has_user ) {
+                                       $olduser = $tradition->user;
+                                       $olduser->remove_tradition( $tradition );
+                               }
                                $newuser->add_tradition( $tradition );
                                $changed = 1;
                        }
@@ -256,11 +276,11 @@ sub textinfo :Local :Args(1) {
                textid => $textid,
                name => $tradition->name,
                language => $tradition->language,
-               public => $tradition->public,
-               owner => $tradition->user ? $tradition->user->id : undef,
+               public => $tradition->public || 0,
+               owner => $tradition->user ? $tradition->user->email : undef,
                witnesses => [ map { $_->sigil } $tradition->witnesses ],
        };
-       my @stemmasvg = map { $_->as_svg({ size => [ 500, 375 ] }) } $tradition->stemmata;
+       my @stemmasvg = map { $_->as_svg() } $tradition->stemmata;
        map { $_ =~ s/\n/ /mg } @stemmasvg;
        $textinfo->{stemmata} = \@stemmasvg;
        $c->stash->{'result'} = $textinfo;
@@ -347,7 +367,7 @@ sub stemma :Local :Args(2) {
        if( !$stemma && $tradition->stemma_count > $stemmaid ) {
                $stemma = $tradition->stemma( $stemmaid );
        }
-       my $stemma_xml = $stemma ? $stemma->as_svg( { size => [ 500, 375 ] } ) : '';
+       my $stemma_xml = $stemma ? $stemma->as_svg() : '';
        # What was requested, XML or JSON?
        my $return_view = 'SVG';
        if( my $accept_header = $c->req->header('Accept') ) {