%args> $check => undef $glossmax => undef $placemax => undef $langid => undef $definitiontxt => undef $definition => undef $notes => undef $jargon => undef $langtag => undef $selmaho => undef %args> <%shared> our $titlestr; our $notready = 0; %shared> <%method title> Editing Definition: <% $titlestr %> %method> <%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; %init> <%perl> #print "
".Dumper(\%ARGS).""; unless(defined($session{'username'})) { %perl> You ought not have been able to view this page, as you aren't logged in! <%perl> return; } unless(defined($definition)) { %perl> 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).""; %perl> Editing <% $defrow->{'langrealname'} %> definition of "<% $defrow->{'word'} %>"
<% $defrow->{'definitionid'} %>
".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)) { %perl>
If you're seeing this, it probably worked. Please go to the definition you edited and check on things. <%perl> } else { %perl>
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> } } %perl>