X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=stemmaweb%2Flib%2Fstemmaweb%2FController%2FRelation.pm;h=08421244d8111e3ceeebb9078218f38d11440ad8;hb=a1411d50483bfd6cc561d7f8d81941cd6d6f61a9;hp=4bae11da35765ab6735593e7aeaf7b8f3a65dab3;hpb=fedee8dac79426f8a1f7ae70d95478c6fcd5d69a;p=scpubgit%2Fstemmatology.git diff --git a/stemmaweb/lib/stemmaweb/Controller/Relation.pm b/stemmaweb/lib/stemmaweb/Controller/Relation.pm index 4bae11d..0842124 100644 --- a/stemmaweb/lib/stemmaweb/Controller/Relation.pm +++ b/stemmaweb/lib/stemmaweb/Controller/Relation.pm @@ -298,12 +298,14 @@ sub reading :Chained('text') :PathPart :Args(1) { $c->stash->{'result'} = $rdg ? _reading_struct( $rdg ) : { 'error' => "No reading with ID $reading_id" }; } elsif ( $c->request->method eq 'POST' ) { + my $errmsg; # Are we re-lemmatizing? if( $c->request->param('relemmatize') ) { my $nf = $c->request->param('normal_form'); # TODO throw error unless $nf $rdg->normal_form( $nf ); # TODO throw error if lemmatization fails + # TODO skip this if normal form hasn't changed $rdg->lemmatize(); } else { # Set all the values that we have for the reading. @@ -311,26 +313,35 @@ sub reading :Chained('text') :PathPart :Args(1) { foreach my $p ( keys %{$c->request->params} ) { if( $p =~ /^morphology_(\d+)$/ ) { # Set the form on the correct lexeme + my $morphval = $c->request->param( $p ); + next unless $morphval; my $midx = $1; - $c->log->debug( "Fetching lexeme $midx" ); my $lx = $rdg->lexeme( $midx ); - my $strrep = $rdg->language . ' // ' - . $c->request->param( $p ); + my $strrep = $rdg->language . ' // ' . $morphval; my $idx = $lx->has_form( $strrep ); unless( defined $idx ) { # Make the word form and add it to the lexeme. - $c->log->debug("Adding new form for $strrep"); - $idx = $lx->add_matching_form( $strrep ) - 1; + try { + $idx = $lx->add_matching_form( $strrep ) - 1; + } catch( Text::Tradition::Error $e ) { + $c->response->status( '403' ); + $errmsg = $e->message; + } catch { + # Something else went wrong, probably a Moose error + $c->response->status( '403' ); + $errmsg = 'Something went wrong with the request'; + } } - $lx->disambiguate( $idx ); + $lx->disambiguate( $idx ) if defined $idx; } elsif( $read_write_keys{$p} ) { my $val = _clean_booleans( $rdg, $p, $c->request->param( $p ) ); $rdg->$p( $val ); } } } - $m->save( $tradition ); - $c->stash->{'result'} = _reading_struct( $rdg ); + $m->save( $rdg ); + $c->stash->{'result'} = $errmsg ? { 'error' => $errmsg } + : _reading_struct( $rdg ); } $c->forward('View::JSON');