From: Mike G. v. a. <we...@ma...> - 2005-02-06 01:40:57
|
Log Message: ----------- Back porting changes made to ContentGenerator.pm. These include: preserving display options through links. Moving definition of options menu up to ContentGenerator. Allowing warnings to contain HTML in order to display tables used when debugging fun_cmp calls. Tags: ---- rel-2-1-patches Modified Files: -------------- webwork2/lib/WeBWorK: ContentGenerator.pm Revision Data ------------- Index: ContentGenerator.pm =================================================================== RCS file: /webwork/cvs/system/webwork2/lib/WeBWorK/ContentGenerator.pm,v retrieving revision 1.123.2.2 retrieving revision 1.123.2.3 diff -Llib/WeBWorK/ContentGenerator.pm -Llib/WeBWorK/ContentGenerator.pm -u -r1.123.2.2 -r1.123.2.3 --- lib/WeBWorK/ContentGenerator.pm +++ lib/WeBWorK/ContentGenerator.pm @@ -49,6 +49,7 @@ use Date::Format; use URI::Escape; use WeBWorK::Template qw(template); +use WeBWorK::PG; ############################################################################### @@ -294,7 +295,7 @@ =cut -# FIXME: we should probably + sub addmessage { my ($self, $message) = @_; @@ -487,16 +488,27 @@ if ($authz->hasPermissions($user, "report_bugs")) { print CGI::p(CGI::a({style=>"font-size:larger", href=>$ce->{webworkURLs}{bugReporter}}, "Report bugs")),CGI::hr(); } - + my %displayOptions = (displayMode => $self->{displayMode}, + showOldAnswers => $self->{will}->{showOldAnswers} + ); print CGI::start_ul({class=>"LinksMenu"}); print CGI::li(CGI::span({style=>"font-size:larger"}, - CGI::a({href=>$self->systemLink($sets)}, sp2nbsp("Homework Sets")))); + CGI::a({href=>$self->systemLink($sets, + params=>{ %displayOptions,} + )}, sp2nbsp("Homework Sets"))) + ); if ($authz->hasPermissions($user, "change_password") or $authz->hasPermissions($user, "change_email_address")) { - print CGI::li(CGI::a({href=>$self->systemLink($options)}, sp2nbsp($options->name))); + print CGI::li(CGI::a({href=>$self->systemLink($options, + params=>{ %displayOptions,} + ) + }, sp2nbsp($options->name)) + ); } - print CGI::li(CGI::a({href=>$self->systemLink($grades)}, sp2nbsp($grades->name))); + print CGI::li(CGI::a({href=>$self->systemLink($grades, + params=>{ %displayOptions,} + )}, sp2nbsp($grades->name))); print CGI::li(CGI::a({href=>$self->systemLink($logout)}, sp2nbsp($logout->name))); if ($authz->hasPermissions($user, "access_instructor_tools")) { @@ -534,55 +546,54 @@ my $fileMgr = $urlpath->newFromModule("${ipfx}FileManager", %args); - my $fileXfer = $urlpath->newFromModule("${ipfx}FileXfer", %args); + #my $fileXfer = $urlpath->newFromModule("${ipfx}FileXfer", %args); print CGI::hr(); print CGI::start_li(); print CGI::span({style=>"font-size:larger"}, - CGI::a({href=>$self->systemLink($instr)}, space2nbsp($instr->name)) + CGI::a({href=>$self->systemLink($instr,params=>{ %displayOptions,})}, space2nbsp($instr->name)) ); print CGI::start_ul(); - #print CGI::li(CGI::a({href=>$self->systemLink($addUsers)}, sp2nbsp($addUsers->name))) if $authz->hasPermissions($user, "modify_student_data"); - print CGI::li(CGI::a({href=>$self->systemLink($userList)}, sp2nbsp($userList->name))); + print CGI::li(CGI::a({href=>$self->systemLink($userList,params=>{ %displayOptions,})}, sp2nbsp($userList->name))); print CGI::start_li(); - print CGI::a({href=>$self->systemLink($setList)}, sp2nbsp($setList->name)); + print CGI::a({href=>$self->systemLink($setList,params=>{ %displayOptions,})}, sp2nbsp($setList->name)); if (defined $setID and $setID ne "") { print CGI::start_ul(); print CGI::start_li(); - print CGI::a({href=>$self->systemLink($setDetail)}, $setID); + print CGI::a({href=>$self->systemLink($setDetail,params=>{ %displayOptions,})}, $setID); if (defined $problemID and $problemID ne "") { print CGI::ul( - CGI::li(CGI::a({href=>$self->systemLink($problemEditor)}, $problemID)) + CGI::li(CGI::a({href=>$self->systemLink($problemEditor,params=>{ %displayOptions,})}, $problemID)) ); } print CGI::end_li(); print CGI::end_ul(); } print CGI::end_li(); - print CGI::li(CGI::a({href=>$self->systemLink($maker)}, sp2nbsp($maker->name))) if $authz->hasPermissions($user, "modify_problem_sets"); - print CGI::li(CGI::a({href=>$self->systemLink($assigner)}, sp2nbsp($assigner->name))) if $authz->hasPermissions($user, "assign_problem_sets"); + print CGI::li(CGI::a({href=>$self->systemLink($maker,params=>{ %displayOptions,})}, sp2nbsp($maker->name))) if $authz->hasPermissions($user, "modify_problem_sets"); + print CGI::li(CGI::a({href=>$self->systemLink($assigner,params=>{ %displayOptions,})}, sp2nbsp($assigner->name))) if $authz->hasPermissions($user, "assign_problem_sets"); - print CGI::li(CGI::a({href=>$self->systemLink($stats)}, sp2nbsp($stats->name))); + print CGI::li(CGI::a({href=>$self->systemLink($stats,params=>{ %displayOptions,})}, sp2nbsp($stats->name))); ## Added Link for Student Progress - print CGI::li(CGI::a({href=>$self->systemLink($progress)}, sp2nbsp($progress->name))); + print CGI::li(CGI::a({href=>$self->systemLink($progress,params=>{ %displayOptions,})}, sp2nbsp($progress->name))); print CGI::start_li(); if (defined $userID and $userID ne "") { print CGI::ul( - CGI::li(CGI::a({href=>$self->systemLink($userProgress)}, $userID)) + CGI::li(CGI::a({href=>$self->systemLink($userProgress,params=>{ %displayOptions,})}, $userID)) ); } if (defined $setID and $setID ne "") { print CGI::ul( - CGI::li(CGI::a({href=>$self->systemLink($setProgress)}, space2nbsp($setID))) + CGI::li(CGI::a({href=>$self->systemLink($setProgress,params=>{ %displayOptions,})}, space2nbsp($setID))) ); } print CGI::end_li(); - print CGI::li(CGI::a({href=>$self->systemLink($scoring)}, sp2nbsp($scoring->name))) if $authz->hasPermissions($user, "score_sets"); - print CGI::li(CGI::a({href=>$self->systemLink($mail)}, sp2nbsp($mail->name))) if $authz->hasPermissions($user, "send_mail"); - print CGI::li(CGI::a({href=>$self->systemLink($fileMgr)}, sp2nbsp($fileMgr->name))); - print CGI::li(CGI::a({href=>$self->systemLink($fileXfer)}, sp2nbsp($fileXfer->name))); + print CGI::li(CGI::a({href=>$self->systemLink($scoring,params=>{ %displayOptions,})}, sp2nbsp($scoring->name))) if $authz->hasPermissions($user, "score_sets"); + print CGI::li(CGI::a({href=>$self->systemLink($mail,params=>{ %displayOptions,})}, sp2nbsp($mail->name))) if $authz->hasPermissions($user, "send_mail"); + print CGI::li(CGI::a({href=>$self->systemLink($fileMgr,params=>{ %displayOptions,})}, sp2nbsp($fileMgr->name))); + #print CGI::li(CGI::a({href=>$self->systemLink($fileXfer)}, sp2nbsp($fileXfer->name))); print CGI::li( $self->helpMacro('instructor_links')); print CGI::end_ul(); @@ -664,11 +675,105 @@ =item options() -Not defined in this package. Print an auxiliary options form, related to the content displayed in the C<body>. +=cut + +sub options { + my ($self) = @_; + + return "" if $self->{invalidProblem}; + my $sourceFilePathfield = ''; + if($self->r->param("sourceFilePath")) { + $sourceFilePathfield = CGI::hidden(-name => "sourceFilePath", + -value => $self->r->param("sourceFilePath")); + } + + my $r = $self->{r}; + my $ce = $self->{ce}; + # insure that certain defaults are defined + $self->{must} = {} unless defined $self->{must}; + $self->{can} = {} unless defined $self->{can}; + $self->{will} = {} unless defined $self->{will}; + + # displayMode + my $displayMode = $r->param("displayMode") || $ce->{pg}->{options}->{displayMode}; + $self->{displayMode} = $displayMode unless defined $self->{displayMode}; + + # showOldAnswers + my $want_to_showOldAnswers = defined($r->param("showOldAnswers")) ? + $r->param("showOldAnswers") : $ce->{pg}->{options}->{showOldAnswers}; + $self->{can}->{showOldAnswers} = 1; + $self->{will}->{showOldAnswers} = $self->{can}->{showOldAnswers} && $want_to_showOldAnswers; + + return join("", + CGI::start_form("POST", $self->{r}->uri), + $self->hidden_authen_fields, + $sourceFilePathfield, + CGI::hr(), + CGI::start_div({class=>"viewOptions"}), + $self->viewOptions(), + CGI::end_div(), + CGI::end_form() + ); +} + +sub viewOptions { + my ($self) = @_; + my $ce = $self->r->ce; + + # don't show options if we don't have anything to show + return if $self->{invalidSet} or $self->{invalidProblem}; + #return unless $self->{isOpen}; + + my $displayMode = $self->{displayMode}; + my %must = %{ $self->{must} }; + my %can = %{ $self->{can} }; + my %will = %{ $self->{will} }; + + my $optionLine; + $can{showOldAnswers} and $optionLine .= join "", + "Show saved answers?".CGI::br(), + CGI::radio_group( + -name => "showOldAnswers", + -values => [1,0], + -default => $will{showOldAnswers}, + -labels => { + 0 => 'No', + 1 => 'Yes', + }, + ), .CGI::br(); + + $optionLine and $optionLine .= join "", CGI::br(); + + my %display_modes = %{WeBWorK::PG::DISPLAY_MODES()}; + my @active_modes = grep { exists $display_modes{$_} } + @{$ce->{pg}->{displayModes}}; + my $modeLine = (scalar(@active_modes) > 1) ? + "View equations as: ".CGI::br(). + CGI::radio_group( + -name => "displayMode", + -values => \@active_modes, + -default => $displayMode, + -linebreak=>'true', + -labels => { + plainText => "plain", + formattedText => "formatted", + images => "images", + jsMath => "jsMath", + asciimath => "asciimath", + }, + ). CGI::br().CGI::hr() : ''; + + return CGI::div({-style=>"border: thin groove; padding: 1ex; margin: 2ex align: left"}, + $modeLine, + $optionLine, + CGI::submit(-name=>"redisplay", -label=>"Apply Options"), + ); +} + =item path($args) Defined in this package. @@ -778,6 +883,7 @@ print "\n<!-- BEGIN " . __PACKAGE__ . "::message -->\n"; print $self->{status_message} if exists $self->{status_message}; + print "<!-- END " . __PACKAGE__ . "::message -->\n"; return ""; @@ -839,18 +945,45 @@ my $self = shift; my $args = shift; my $name = $args->{name}; - + # old naming scheme #$name = lc($self->r->urlpath->name) unless defined($name); #$name =~ s/\s/_/g; - + $name = $self->r->urlpath->module unless defined($name); $name =~ s/WeBWorK::ContentGenerator:://; $name =~ s/://g; - + $self->helpMacro($name); } +=item url($args) + +Defined in this package. + +Returns the specified URL from either %webworkURLs or %courseURLs in the course +environment. $args is a reference to a hash containing the following fields: + + type => type of URL: webwork|course + name => name of URL (key in URL hash) + +=cut + +sub url { + my ($self, $args) = @_; + my $ce = $self->r->ce; + my $type = $args->{type}; + my $name = $args->{name}; + + if ($type eq "webwork") { + return $ce->{webworkURLs}->{$name}; + } elsif ($type eq "course") { + return $ce->{courseURLs}->{$name}; + } else { + warn __PACKAGE__."::url: unrecognized type '$type'.\n"; + } +} + =back =cut @@ -1264,6 +1397,19 @@ return $self->url_args("user", "effectiveUser", "key"); } +=item url_display_args() + +Use url_args to return a URL query string for request fields used in +authentication. + +=cut + +sub url_display_args { + my ($self) = @_; + + return $self->url_args("displayMode", "showOldAnswer"); +} + =item print_form_data($begin, $middle, $end, $omit) Return a string containing every request field not matched by the quoted reguar @@ -1379,7 +1525,16 @@ @values = $r->param($name); } #FIXME -- evntually we'd like to catch where this happens - croak "internal error -- user has been multiply defined!" if $name eq 'user' and @values >1; + if ($name eq 'user' and @values >1 ) { + warn "internal error -- user has been multiply defined! You may need to logout and log back in to correct this."; + my $user = $r->param("user"); + $r->param(user => $user); + @values = ($user); + warn "requesting page is ", $r->headers_in->{'Referer'}; + warn "Parameters are ", join("|",$r->param()); + + } + if (@values) { if ($first) { $url .= "?"; @@ -1487,7 +1642,7 @@ my @warnings = split m/\n+/, $warnings; foreach my $warning (@warnings) { - $warning = escapeHTML($warning); + #$warning = escapeHTML($warning); # this would prevent using tables in output from answer evaluators $warning = CGI::li(CGI::code($warning)); } $warnings = join("", @warnings); |