#!/usr/bin/perl -w BEGIN { $CAM::db = "flashcards"; # Get lib path if ($0 =~ /(.*)\//) { unshift @INC, $1, "$1/../lib"; } else { unshift @INC, ".", "../lib"; } } use strict; use CGI; use CAM::Utilities; use CAM::FlashCards; delete $ENV{PATH}; my $cgi = new CGI; ### Configuration: my %state = &compute_state($cgi); my $op = $cgi->param('op') || ""; my %user = &get_user_data(\%state, $cgi, \$op); print $cgi->header; my ($questions, $answers) = &read_db_data(\%state, \%user); $state{NCARDS} = scalar @$questions; $state{HASDECK} = ($state{NCARDS} > 0); if ($op eq "create") { # should never get here -- should be handled and reset in &get_user_data die; } elsif ($op eq "makenext") { $state{N} = $state{NCARDS}+1; print &replace_file($state{tmpl_directory} . "/edit_tmpl.html", \%state); } elsif ($op eq "redo") { $state{N} = $state{NCARDS}; $state{QUESTION} = $$questions[$#$questions]; $state{ANSWER} = $$answers[$#$questions]; print &replace_file($state{tmpl_directory} . "/edit_tmpl.html", \%state); } elsif ($op eq "preview") { if (defined $cgi->param('question')) { my $n = $cgi->param('n') || $state{NCARDS}+1; $n = ($n > 0 ? $n-1 : 0); my $q = &unpad($cgi->param('question')); my $a = &unpad($cgi->param('answer')); #$q = &trim_text($q); #$a = &trim_text($a); $$questions[$n] = $q; $$answers[$n] = $a; &save_db_data(\%state, \%user, $questions, $answers); } $state{QUESTION} = $$questions[$#$questions]; $state{ANSWER} = $$answers[$#$questions]; &set_font_state(\%state, &get_font_class($state{QUESTION}), &get_font_class($state{ANSWER})); $state{QUESTION} = &htmlify(&trim_text($state{QUESTION})); $state{ANSWER} = &htmlify(&trim_text($state{ANSWER})); print &replace_file($state{tmpl_directory} . "/preview_tmpl.html", \%state); } elsif ($op eq "usedeck") { print &replace_file($state{tmpl_directory} . "/usedeck_tmpl.html", \%state); } elsif ($op eq "startquiz") { print &replace_file($state{tmpl_directory} . "/startquiz_tmpl.html", \%state); } elsif ($op eq "endquiz") { print &replace_file($state{tmpl_directory} . "/endquiz_tmpl.html", \%state); } elsif ($op eq "pdf") { print &replace_file($state{tmpl_directory} . "/pdf_tmpl.html", \%state); } elsif ($op eq "showquestion" || $op eq "showanswer") { my $type = $op; $type =~ s/^show//; my $n = $cgi->param('n') || 1; if ($n !~ /^\d+$/) { $n = 1; } $state{N} = $n; $state{QUESTION} = $$questions[$n-1]; $state{ANSWER} = $$answers[$n-1]; &set_font_state(\%state, &get_font_class($state{QUESTION}), &get_font_class($state{ANSWER})); $state{QUESTION} = &htmlify(&trim_text($state{QUESTION})); $state{ANSWER} = &htmlify(&trim_text($state{ANSWER})); $state{NEXT} = $n+1; $state{LAST} = ($n == $state{NCARDS}); print &replace_file($state{tmpl_directory} . "/${type}_tmpl.html", \%state); } else { print &replace_file($state{tmpl_directory} . "/main_tmpl.html", \%state); }