#!/usr/bin/perl use lib qw!/home/webpaper/perl/lib/perl5 /home/webpaper/perl/lib/perl5/site_perl!; use Fcntl; use CGI qw/:standard/; use XML::DT ; use MLDBM qw/DB_File Storable/; use Encode qw(_utf8_on); my $filename = "webpaper.xml"; my $cla = param("cla"); tie %db, 'MLDBM', '/home/webpaper/public_html/cgi-bin/webpaper_ans.db', O_RDWR, 0666 or die $!; my $cdata = $db{$cla}; $cdata->{status} = "busy"; $db{$cla} = $cdata; untie %db; print header(-charset=>'utf-8'); print start_html(-encoding=>'utf-8', -style=>{-code=><<"EOS"}); ul { border: solid 2px; padding-top: 15px; } ul:before { content: "Perguntas de " attr(id) " pontos"; font-size: 15px; font-weight: bold; display: block; padding-bottom: 10px;} table.x { margin-bottom: 30px } input { border: solid 1px } span.ans { background-color: #ddeeff; padding: 3px; margin: 2px; } span.url { background-color: #ffeedd; padding: 3px; margin: 2px; } span.theans { background-color: #000; color: #fff; padding: 3px; margin: 2px; } span.correcta {background-color: #00bb00; color: #fff; padding: 3px; margin: 2px; } span.errada {background-color: #bb0000; color: #fff; padding: 3px; margin: 2px; } .id { border: dotted 2px #999; margin-left: 25%; margin-right: 25%; padding: 10px; background-color: #eee} h3 { margin: 0px } EOS print start_form; if (param("total")) { tie %db, 'MLDBM', '/home/webpaper/public_html/cgi-bin/webpaper_ans.db', O_RDWR, 0666 or die $!; my $cladata = $db{$cla}; $cladata->{status} = "done"; $cladata->{pts} = param("total"); $db{$cla} = $cladata; untie %db; print a({-href=>'/~webpaper/cgi-bin/status'}, "back to work"); exit; } my $qid = 0; my $total = 0; my $count = 0; print "CLA: $cla\n"; tie %db, 'MLDBM', '/home/webpaper/public_html/cgi-bin/webpaper_ans.db', O_RDWR, 0666 or die $!; %handler=( 'img' => sub{ toxml }, 'group' => sub{ $total+=$v{pointperquestion}*$count; $count=0; ul({-id=>$v{pointperquestion}}, $c) }, 'question' => sub{ ++$qid; my $ANS = $db{$cla}{$qid}{ans}; _utf8_on($ANS); my $URL = $db{$cla}{$qid}{url}; my $ok; if (param("q$qid")) { $ok = (param("q$qid") eq "correcta")?1:0; } else { $ok = ($ANS =~ m!$v{answer}!i)?1:0; } $count++ if ($ok); li($c). table({-class=>'x'}, Tr(td(["resposta: ",span({-class=>'ans'},$ANS)])), Tr(td(["url: ",span({-class=>'url'}, a({-href=>$URL}, $URL))])), Tr(td(["resposta oficial: ", span({-class=>'theans'}, $v{answer})])), Tr(td(["a resposta está: ", ($ok?span({-class=>"correcta"}, "correcta"):span( {-class=>"errada"}, "errada"))])) ).radio_group(-name=>"q$qid", -values=>['correcta','errada'], -default=>($ok?'correcta':'errada'), -linebreak=>'true').hr }, 'webpaper' => sub{ $c }, ); print dt($filename,%handler); print "TOTAL: $total "; print hidden("cla",$cla); print br,submit(" REFRESH "); untie %db; print end_form; print start_form; print hidden("total",$total); print hidden("cla",$cla); print submit(" SAVE "); print end_form; print end_html;