diff --git a/lib/WeBWorK/ContentGenerator.pm b/lib/WeBWorK/ContentGenerator.pm index d13689cc6f..e96264cd34 100644 --- a/lib/WeBWorK/ContentGenerator.pm +++ b/lib/WeBWorK/ContentGenerator.pm @@ -1200,7 +1200,7 @@ sub systemLink ($c, $urlpath, %options) { if (!defined $params{$name} && defined $c->param($name) && $c->param($name) ne ''); } - return %params ? $url->query([ map { $_, $params{$_} } sort { $a cmp $b } keys %params ]) : $url; + return %params ? $url->query(%params) : $url; } =item nbsp($string) diff --git a/lib/WeBWorK/Utils.pm b/lib/WeBWorK/Utils.pm index e6b7f4a5c0..e4aa20694d 100644 --- a/lib/WeBWorK/Utils.pm +++ b/lib/WeBWorK/Utils.pm @@ -358,31 +358,23 @@ sub generateURLs ($c, %params) { if ($userName) { my $routePath; - my $args = {}; + my %args; if (defined $params{set_id} && $params{set_id} ne '') { if ($params{problem_id}) { $routePath = $c->url_for('problem_detail', setID => $params{set_id}, problemID => $params{problem_id}); - $args = { - displayMode => undef, - showOldAnswers => undef, - showCorrectAnswers => undef, - showHints => undef, - showSolutions => undef, - showProblemGrader => 1 - }; + for my $name ('displayMode', 'showCorrectAnswers', 'showHints', 'showOldAnswers', 'showSolutions') { + $args{$name} = [ $c->param($name) ] if defined $c->param($name) && $c->param($name) ne ''; + } + $args{showProblemGrader} = 1; } else { $routePath = $c->url_for('problem_list', setID => $params{set_id}); } } else { $routePath = $c->url_for('set_list'); } - $emailableURL = $c->systemLink( - $routePath, - authen => 0, - params => { effectiveUser => undef, %{$args} }, - use_abs_url => 1, - ); - $returnURL = $c->systemLink($routePath); + $args{effectiveUser} = [ $c->param('effectiveUser') ] if defined $c->param('effectiveUser'); + $emailableURL = $routePath->to_abs->query(map { $_ => $args{$_} } sort keys %args); + $returnURL = $c->systemLink($routePath); } else { $emailableURL = '(not available)'; $returnURL = '';