<%args> $check => undef $glossmax => undef $placemax => undef $langid => undef $definitiontxt => undef $definition => undef $notes => undef $jargon => undef $langtag => undef $selmaho => undef <%shared> our $titlestr; our $notready = 0; <%method title> Editing Definition: <% $titlestr %> <%init> our($dbh,%session); use utils; use Unicode::String; use String::Approx 'amatch'; $r->content_type("text/html; charset=utf-8"); my $editbitsret; my $valsiid; my $type; <%perl> #print "
".Dumper(\%ARGS)."
"; unless(defined($session{'username'})) { You ought not have been able to view this page, as you aren't logged in! <%perl> return; } unless(defined($definition)) { Not enough info to know what to do. <%perl> return; } # Don't do any prep if we're just checking the deinition if( ! defined( $check ) ) { $valsiid = $dbh->selectrow_array("SELECT valsiid FROM definitions where definitionid=?", undef, $definition); $type = $dbh->selectrow_array("SELECT descriptor FROM valsitypes where typeid= (SELECT typeid FROM valsi WHERE valsiid=?)", undef, $valsiid); my $defquery = $dbh->prepare("SELECT * FROM convenientdefinitions WHERE definitionid=?"); $defquery->execute($definition); my $defrow = $defquery->fetchrow_hashref; if(defined($defquery->fetchrow_hashref)) { $m->out("big nasty fatal error in editdef.html"); return; } my $glossesref = $dbh->selectall_arrayref("SELECT nlw.word, nlw.meaning FROM keywordmapping g, natlangwords nlw WHERE g.place = 0 AND g.natlangwordid=nlw.wordid AND g.definitionid=? ORDER BY nlw.word, nlw.meaning", undef, $defrow->{'definitionid'}); my @glosswords = @{ $glossesref }; my %glosses; for(my $i=0; $i<(scalar @glosswords); $i++) { $glosses{ 'glossw'.($i+1) } = $glosswords[$i]->[0]; $glosses{ 'glossm'.($i+1) } = $glosswords[$i]->[1]; } my $placesref = $dbh->selectall_arrayref("SELECT nlw.word, nlw.meaning, p.place FROM keywordmapping p, natlangwords nlw WHERE p.place > 0 AND p.natlangwordid=nlw.wordid AND p.definitionid=? ORDER BY p.place", undef, $defrow->{'definitionid'}); my @placewords = @{ $placesref }; my %places; foreach my $place (@placewords) { $places{'placew'.$place->[2]} = $place->[0]; $places{'placem'.$place->[2]} = $place->[1]; } if( ! defined( $glossmax ) ) { $glossmax = 1 + (scalar @glosswords); } if( ! defined( $placemax ) ) { $placemax = 1 + (scalar @placewords); } #print "
".Dumper(\%glosses)."
"; #print "
".Dumper(\%places)."
"; Editing <% $defrow->{'langrealname'} %> definition of "<% $defrow->{'word'} %>"
Internal definition ID: <% $defrow->{'definitionid'} %>
<%doc> editbits does all the actual work, and returns 0 if more work is needed, 1 if we're readt to save, and undef on error. <%perl> $editbitsret = $m->comp( 'editbits', %ARGS, %glosses, %places, glossmax => $glossmax, placemax => $placemax, actionPage => 'editdef.html' ); # If we're just checking the definition, do that } else { $editbitsret = $m->comp( 'editbits', %ARGS, actionPage => 'editdef.html' ); } if( $editbitsret ) { # Get the current data, for mail use my %oldcontent = $m->comp( 'getdef', definitionid => $definition ); #print "
".Dumper(\%oldcontent)."
"; # Deal with the natural language words. my @nlwrets = $m->comp( 'nlwbits', %ARGS ); #print "
".Dumper(\@nlwrets)."
"; my @glosskeywords = @{ $nlwrets[0] }; my @placekeywords = @{ $nlwrets[1] }; #print "
".Dumper(\@glosskeywords)."
"; #print "
".Dumper(\@placekeywords)."
"; my $lang = $dbh->selectrow_array("SELECT langid FROM definitions WHERE definitionid = ?", undef, $definition); $dbh->do("UPDATE definitions SET definition=?, notes=?, jargon=?, time=?, selmaho=? WHERE definitionid=?", undef, $definitiontxt, $notes, $jargon, time(), $selmaho, $definition); $dbh->do("DELETE FROM keywordmapping WHERE definitionid=?", { }, $definition); for(my $i=0; $i<=$#glosskeywords; $i++) { next unless (defined $glosskeywords[$i] && $glosskeywords[$i]->[0]); my @tmp = @{ $glosskeywords[$i] }; my $meaning = $tmp[1] ? $tmp[1] : undef; $dbh->do("INSERT INTO keywordmapping (definitionid, place, natlangwordid) VALUES (?, 0, (SELECT wordid FROM natlangwords WHERE langid=(SELECT langid FROM definitions WHERE definitionid=?::integer) AND word=?::text AND (meaning=?::text OR (?::text IS NULL AND meaning IS NULL)) ))", undef, $definition, $definition, $tmp[0], $meaning, $meaning ); } for(my $i=0; $i<=$#placekeywords; $i++) { next unless (defined $placekeywords[$i] && $placekeywords[$i]->[0]); my @tmp = @{ $placekeywords[$i] }; my $meaning = $tmp[1] ? $tmp[1] : undef; $dbh->do("INSERT INTO keywordmapping (definitionid, place, natlangwordid) VALUES (?, ?, (SELECT wordid FROM natlangwords WHERE langid=(SELECT langid FROM definitions WHERE definitionid=?::integer) AND word=?::text AND (meaning=?::text OR (?::text IS NULL AND meaning IS NULL)) ))", undef, $definition, $i+1, $definition, $tmp[0], $meaning, $meaning ); } my $valsiid = $dbh->selectrow_array("SELECT valsiid FROM definitions where definitionid=?", undef, $definition); $dbh->do("DELETE FROM definitionvotes WHERE valsiid=? and langid=? and userid=?", undef, $valsiid, $lang, $session{'userid'}); $dbh->do("INSERT INTO definitionvotes (valsiid, langid, definitionid, value, userid, time) VALUES (?, ?, ?, (SELECT votesize FROM users WHERE userid=?), ?, ?)", undef, $valsiid, $lang, $definition, $session{'userid'}, $session{'userid'}, time()); # Deal with the voting $m->comp( 'votebits', %ARGS, definition => $definition ); $dbh->commit; my $errstr = $dbh->errstr; if( ! $errstr ) { # Update valsibestguesses my $jbovlastedir = $m->base_comp->attr('jbovlaste_dir'); system( "$jbovlastedir/bin/updatevbg $jbovlastedir $lang $valsiid $session{'userid'} $definition \&" ); } my @result = $dbh->selectrow_array("SELECT word FROM convenientdefinitions WHERE definitionid=?",{},$definition); # Get the current definition data my %newcontent = $m->comp( 'getdef', definitionid => $definition); # Send e-mail to various people $m->comp( 'mailbits', oldcontent => \%oldcontent, newcontent => \%newcontent, type => "edited", typeUpper => "Edited", valsiid => $valsiid, langid => $langid, valsiword => $result[0], ); if(!defined($errstr)) {

If you're seeing this, it probably worked. Please go to the definition you edited and check on things. <%perl> } else {

There might've been an error:

"<% $errstr %>"

If that looks error-like, please let an admin know. Otherwise, you can go back to where you were and check on things.

<%perl> } }