Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Develop wwclientsup8 #672

Merged
merged 34 commits into from
Mar 2, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
26a01fe
Commenting out, temporarily, calls to mod_perl.pm and MP2 which are n…
mgage Dec 27, 2015
939a69f
Store tentative changes to sendXMLRPC.pl
mgage Dec 28, 2015
db89f64
Place holder commits -- both sendxmlrpc and standalone work on some p…
mgage Dec 30, 2015
a79fd55
add new formatting files
mgage Dec 30, 2015
44adcb1
Simplified template for embedding using LTI
mgage Dec 30, 2015
521cd00
Add process time duration reporting for -C option
mgage Dec 31, 2015
255498a
Abstract out the editor command used to read pg source file.
mgage Jan 1, 2016
498e3c1
Add small script that will redirect a text file in Bbedit through the…
mgage Jan 1, 2016
f791c02
Merge branch 'develop_wwclientsup5' into develop_wwclientsup8
mgage Jan 1, 2016
726dcb3
Replace password by course password
mgage Jan 18, 2016
66a7b2f
Refactor similarities/differences between sendXMLRPC and standalonePG…
mgage Jan 18, 2016
0eed8ea
Respond to bug fix requests
mgage Jan 18, 2016
1079210
Replace $xxx->{ce} with $xxx->ce
mgage Jan 18, 2016
21cfce3
Clean up -- responding to bugs
mgage Jan 18, 2016
62c48f8
Merge commit 'e1f1b6e0da16a3c9e25605351aae975da066f535' into develop_…
mgage Jan 18, 2016
5908441
Merge branch 'origin_develop' into develop_wwclientsup8
mgage Jan 24, 2016
6e8616c
Remove system2.templates -- simple.template is used instead.
mgage Jan 26, 2016
47f74a7
Remove FormatRenderedProblem.pm for now -- it will eventually be refa…
mgage Jan 26, 2016
901530e
Add or move testing files to webwork/t directory
mgage Jan 26, 2016
e5c4161
Allow simple.template to be used for course homepage, for the homewor…
mgage Jan 26, 2016
7fe08c4
Update instructions on the test page.
mgage Jan 26, 2016
58692e9
Merge branch 'develop_wwclientsup8' of https://github.com/mgage/webwo…
goehle Feb 2, 2016
157ed84
Fixed some localstorage stuff.
goehle Feb 2, 2016
30a7b92
Report error unless displayMode, userID, courseID and problemSeed are…
mgage Feb 21, 2016
ede3c06
Point all problems to hosted2 as the most stable of the public servers.
mgage Feb 21, 2016
03f6e6b
Housekeeping -- deleting obsolete comments
mgage Feb 21, 2016
0a60086
Update simple template to conform with system template
mgage Feb 21, 2016
b66257c
Update test file for simple/system template appearance.
mgage Feb 21, 2016
7606b6d
Update test file for comparing appearance of simple template used via…
mgage Feb 21, 2016
d589bb8
Fix extraneous display of Show: when there are only hints or solution…
mgage Feb 21, 2016
f02b82b
Moved more configuration to the ww_credentials.dist file. Check that …
mgage Feb 21, 2016
d222e18
Merge branch 'myclients8' of https://github.com/goehle/webwork2 into …
mgage Feb 21, 2016
f89767f
Rearrange test pg files and put older versions of sendXMLRPC in the …
mgage Feb 21, 2016
6ab62d3
Improve comments placed in log file.
mgage Feb 22, 2016
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
File renamed without changes.
File renamed without changes.
File renamed without changes.
105 changes: 64 additions & 41 deletions clients/sendXMLRPC.pl
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,6 @@ =head1 DESCRIPTION
time returns an answer hash which contains the correct answers. The question is
then resubmitted to the renderer with the correct answers filled in and displayed.

IMPORTANT: Remember to configure the local output file and display command near the
top of this script. !!!!!!!!

IMPORTANT: Create a valid credentials file.

=cut
Expand All @@ -63,10 +60,10 @@ =head2 credentials file
courseID => "the name of the webwork course",
site_url => "url of rendering site
site_password => "site password" # preliminary access to site
form_action_url => 'http://localhost:80/webwork2/html2xml'; #action url for form
WWdisplayMode => 'MathJax', # optional
form_action_url => 'http://localhost:80/webwork2/html2xml'; #action url for form
ww_display_mode => 'MathJax', # optional
# -- 'MathJax' and 'images' are the possible values
HTMLdisplayCommand => "open -a 'Google Chrome' " # optional
html_display_command => "open -a 'Google Chrome' " # optional
# for Mac: have Chrome read html output file
# modify this for other platforms or browsers
);
Expand Down Expand Up @@ -97,7 +94,7 @@ =head2 Options

=item -h

Prints to the command line the entire object returned by
Prints to STDOUT the entire object returned by
the webwork_client xmlrpc request.
This includes the answer information displayed by -a and -A and much more.

Expand Down Expand Up @@ -148,7 +145,7 @@ =head2 Options
Triggers the printing of the all of the variables available to the PG question.
The table appears within the question content. Use in conjunction with -b or -B.

=item --anshash
=item --anshash

Prints the answer hash for each answer in the PG_debug output which appears below
the question content. Use in conjunction with -b or -B.
Expand All @@ -168,6 +165,9 @@ =head2 Options
=item --help

Prints help information.

=item --log
Sets path to log file

=back
=cut
Expand Down Expand Up @@ -213,21 +213,18 @@ BEGIN
### verbose output when UNIT_TESTS_ON =1;
our $UNIT_TESTS_ON = 0;

### Command line for displaying the temporary file in a browser.
#use constant DISPLAY_COMMAND => 'open -a firefox '; #browser opens tempoutputfile
#Default display commands.
use constant HTML_DISPLAY_COMMAND => "open -a 'Google Chrome' "; # (MacOS command)
use constant HASH_DISPLAY_COMMAND => " less "; # display tempoutputfile with less
#use constant HASH_DISPLAY_COMMAND => ""; # display tempoutputfile to STDOUT

### Path to a temporary file for storing the output of renderProblem.pl
use constant TEMPOUTPUTDIR => "$ENV{WEBWORK_ROOT}/DATA/";
die "You must make the directory ".TEMPOUTPUTDIR().
" writeable " unless -w TEMPOUTPUTDIR();
use constant TEMPOUTPUTFILE => TEMPOUTPUTDIR()."temporary_output.html";

### Path to a temporary file for storing the output of sendXMLRPC.pl
use constant LOG_FILE => "$ENV{WEBWORK_ROOT}/DATA/bad_problems.txt";
die "You must first create an output file at ".LOG_FILE().
" with permissions 777 " unless -w LOG_FILE();
### Default path to a temporary file for storing the output of sendXMLRPC.pl
use constant LOG_FILE => "$ENV{WEBWORK_ROOT}/DATA/xmlrpc_results.log";

### set display mode
use constant DISPLAYMODE => 'MathJax';
Expand Down Expand Up @@ -258,6 +255,7 @@ BEGIN
my $print_pg_hash;
my $print_help_message;
my $read_list_from_this_file;
my $path_to_log_file;
GetOptions(
'a' => \$display_ans_output1,
'A' => \$display_ans_output2,
Expand All @@ -276,11 +274,13 @@ BEGIN
'f=s' => \$format,
'credentials=s' => \$credentials_path,
'help' => \$print_help_message,
'log=s' => \$path_to_log_file,
);


print_help_message() if $print_help_message;


####################################################
# get credentials
####################################################
Expand All @@ -298,9 +298,9 @@ BEGIN
site_url => "url of rendering site",
site_password => "site password", # preliminary access to site
form_action_url => 'http://localhost:80/webwork2/html2xml', #action url for form
WWdisplayMode => 'MathJax', # optional
ww_display_mode => 'MathJax', # optional
# -- 'MathJax' and 'images' are the possible values
HTMLdisplayCommand => "open -a 'Google Chrome' " # optional
html_display_command => "open -a 'Google Chrome' " # optional
# for Mac: have Chrome read html output file
# modify this for other platforms or browsers
);
Expand Down Expand Up @@ -340,8 +340,20 @@ BEGIN
}

#allow credentials to overrride the default displayMode and the browser display
our $HTML_DISPLAY_COMMAND = $credentials{HTMLdisplayCommand}//HTML_DISPLAY_COMMAND();
our $DISPLAYMODE = $credentials{WWdisplayMode}//DISPLAYMODE();
our $HTML_DISPLAY_COMMAND = $credentials{html_display_command}//HTML_DISPLAY_COMMAND();
#our $HASH_DISPLAY_COMMAND = $credentials{hashdisplayCommand}//HASH_DISPLAY_COMMAND();

our $DISPLAYMODE = $credentials{ww_display_mode}//DISPLAYMODE();
$path_to_log_file = $path_to_log_file //$credentials{path_to_log_file}//LOG_FILE(); #set log file path.

eval { # attempt to create log file
local(*FH);
open(FH, '>>',$path_to_log_file) or die "Can't open file $path_to_log_file for writing";
close(FH);
};
die "You must first create an output file at $path_to_log_file
with permissions 777 " unless -w $path_to_log_file;

##################################################
# END gathering credentials for client
##################################################
Expand Down Expand Up @@ -584,7 +596,7 @@ sub record_problem_ok1 {
}

local(*FH);
open(FH, '>>',LOG_FILE()) or die "Can't open file ".LOG_FILE()." for writing";
open(FH, '>>',$path_to_log_file) or die "Can't open file $path_to_log_file for writing";
print FH $return_string;
close(FH);
return $SHORT_RETURN_STRING;
Expand All @@ -602,11 +614,11 @@ sub record_problem_ok2 {
$xmlrpc_client->return_object->{answers}->{$ans}->{score};
$all_correct =$all_correct && $scores{$ans};
}
$all_correct = "2" if $some_correct_answers_not_specified;
$ALL_CORRECT = ($all_correct == 1)?'All answers correct':'Some answers are incorrect';
$all_correct = ".5" if $some_correct_answers_not_specified;
$ALL_CORRECT = ($all_correct == 1)?'All answers are correct':'Some answers are incorrect';
local(*FH);
open(FH, '>>',LOG_FILE()) or die "Can't open file ".LOG_FILE()." for writing";
print FH "$all_correct Answers for $file_path are all correct = $all_correct; errors: $error_flag\n";
open(FH, '>>',$path_to_log_file) or die "Can't open file $path_to_log_file for writing";
print FH "$all_correct $file_path\n"; # do we need this? compile_errors=$error_flag\n";
close(FH);
return $ALL_CORRECT;
}
Expand Down Expand Up @@ -717,12 +729,13 @@ sub display_hash_output { # print the entire hash output to the command line
$file_name =~ s/\.\w+$/\.txt/; # replace extension with html
my $output_file = TEMPOUTPUTDIR().$file_name;
my $output_text2 = pretty_print_rh($output_text);
local(*FH);
open(FH, '>', $output_file) or die "Can't open file $output_file writing";
print FH $output_text2;
close(FH);

system(HASH_DISPLAY_COMMAND().$output_file."; rm $output_file;");
print STDOUT $output_text2;
# local(*FH);
# open(FH, '>', $output_file) or die "Can't open file $output_file writing";
# print FH $output_text2;
# close(FH);
#
# system(HASH_DISPLAY_COMMAND().$output_file."; rm $output_file;");
#sleep 1; #wait 1 seconds
#unlink($output_file);
}
Expand All @@ -736,14 +749,15 @@ sub display_ans_output { # print the collection of answer hashes to the command
$file_name =~ s/\.\w+$/\.txt/; # replace extension with html
my $output_file = TEMPOUTPUTDIR().$file_name;
my $output_text = pretty_print_rh($return_object->{answers});
local(*FH);
open(FH, '>', $output_file) or die "Can't open file $output_file writing";
print FH $output_text;
close(FH);

system(HASH_DISPLAY_COMMAND().$output_file."; rm $output_file;");
sleep 1; #wait 1 seconds
unlink($output_file);
print STDOUT $output_text;
# local(*FH);
# open(FH, '>', $output_file) or die "Can't open file $output_file writing";
# print FH $output_text;
# close(FH);
#
# system(HASH_DISPLAY_COMMAND().$output_file."; rm $output_file;");
# sleep 1; #wait 1 seconds
# unlink($output_file);
}

##################################################
Expand Down Expand Up @@ -876,7 +890,7 @@ sub print_help_message {
Same as -b but renders the question with the correct answers submitted.

-h
Prints to the command line the entire object returned by
Prints to STDOUT the entire object returned by
the webwork_client xmlrpc request.
This includes the answer information displayed by -a and -A and much more.

Expand Down Expand Up @@ -906,6 +920,12 @@ sub print_help_message {
Open the source file in an editor.

The single letter options can be "bundled" e.g. -vcCbB

--list pg_list
Read and process a list of .pg files contained in the file C<pg_list>. C<pg_list>
consists of a sequence of lines each of which contains the full path to a pg
file that should be processed. (For example this might be the output from an
earlier run of sendXMLRPC using the -c flag. )

--pg
Triggers the printing of the all of the variables available to the PG question.
Expand All @@ -925,8 +945,11 @@ sub print_help_message {
--credentials=s
Specifies a file s where the credential information can be found.

--help
Prints help information.
--help
Prints help information.

--log
Sets path to log file


EOT
Expand Down
4 changes: 4 additions & 0 deletions clients/sendxmlrpc_bbedit.pl
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#!/usr/bin/perl -w
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This whole tool is too mac specific. It has hardcoded paths and is centered around BB edit. I would just keep this on your computer as a personal tool, or find some way to make it configurable to work on linux with emacs/vim/nano/whatever.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P.S. A good place for this (and other scripts you find useful) would be http://webwork.maa.org/wiki/Contributed_Admin_Scripts_(Large_Installations)#.VqVM3N9vGEI

I think it would be great if this page could be cleaned up and brought into the light a little bit more. We need a place for tools which sys admins may find useful but which are not polished enough, or are too specific, for git.

Copy link
Sponsor Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What I was envisioning was having a number of tools like this -- one for each OS. The tool is so small it's hardly worth configuring. Which editor do you use? Could you write a matching tool for that? It's convenient to write in your favorite editor and then just hit a button to see what you have rendered so far.

It could go in admin scripts (it has the same flavor in that it almost demands being customized to the users environment) but it's really more of an author tool -- as are the various flavors of clients. Maybe when we polish up the admin page we can add one for author tools.

Copy link
Sponsor Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd really like to see some versions of this file for emacs, or vim or nano or sublime, etc. Then authors will have some models to start with to build connecting links that suit their own work flow.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think having multiple versions is the wrong way to go. IMO it should be a single tool configurable by things like environment variables, config files, etc... For example most linux distributions have an EDITOR environment variable that people will set (https://en.wikibooks.org/wiki/Guide_to_Unix/Environment_Variables). If you used that you could probably get rid of the BB edit specific stuff.

More generally, I'm not a fan of having files that you need to configure to use be managed by git. It really interferes with the git workflow since those files are tracked and your changes will have a tendency to revert, get overwritten, or cause conflicts.

Copy link
Sponsor Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It wouldn't work for BBedit -- this file is an extension of BBedit and needs to be moved to a specific directory in order to work. It's like writing a small extension for emacs.

Copy link
Sponsor Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

By the way — its ok if the bbedit connection file is stored somewhere else as long as it is highly visible to people who want to use it as a model to
write their own connecting tool.

On Jan 24, 2016, at 7:42 PM, Geoff Goehle notifications@github.com wrote:

In clients/sendxmlrpc_bbedit.pl https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_openwebwork_webwork2_pull_672-23discussion-5Fr50646605&d=BQMCaQ&c=kbmfwr1Yojg42sGEpaQh5ofMHBeTl9EI2eaqQZhHbOU&r=C6Pt5AGtImanmAdcooarL-JZO8M5dSFPfs3VweYXYkE&m=ks-sV4IwC-I5SHSObvclCpZW-Xt8uu3XYG1iJsbHRcM&s=ftySQNCO85ZZ5w2V0Js9_iB_zBj0UIF-frmKy-GfIqc&e=:

@@ -0,0 +1,4 @@
+#!/usr/bin/perl -w
I think having multiple versions is the wrong way to go. IMO it should be a single tool configurable by things like environment variables, config files, etc... For example most linux distributions have an EDITOR environment variable that people will set (https://en.wikibooks.org/wiki/Guide_to_Unix/Environment_Variables https://urldefense.proofpoint.com/v2/url?u=https-3A__en.wikibooks.org_wiki_Guide-5Fto-5FUnix_Environment-5FVariables&d=BQMCaQ&c=kbmfwr1Yojg42sGEpaQh5ofMHBeTl9EI2eaqQZhHbOU&r=C6Pt5AGtImanmAdcooarL-JZO8M5dSFPfs3VweYXYkE&m=ks-sV4IwC-I5SHSObvclCpZW-Xt8uu3XYG1iJsbHRcM&s=GswFzmTp4Rj1NWw078NB7RgtxFrE5P2Px_ZHc-kGMFs&e=). If you used that you could probably get rid of the BB edit specific stuff.

More generally, I'm not a fan of having files that you need to configure to use be managed by git. It really interferes with the git workflow since those files are tracked and your changes will have a tendency to revert, get overwritten, or cause conflicts.


Reply to this email directly or view it on GitHub https://urldefense.proofpoint.com/v2/url?u=https-3A__github.com_openwebwork_webwork2_pull_672_files-23r50646605&d=BQMCaQ&c=kbmfwr1Yojg42sGEpaQh5ofMHBeTl9EI2eaqQZhHbOU&r=C6Pt5AGtImanmAdcooarL-JZO8M5dSFPfs3VweYXYkE&m=ks-sV4IwC-I5SHSObvclCpZW-Xt8uu3XYG1iJsbHRcM&s=kM4ZPkOKTuytsixKoRHS6ugL733oXczk_02vF_UAWWI&e=.

die "BB_DOC_PATH is not present. You must first save the document\n" unless defined $ENV{BB_DOC_PATH};
$command = "/Volumes/WW_test/opt/local/bin/perl /Volumes/WW_test/opt/webwork/webwork2/clients/sendXMLRPC.pl -bB $ENV{BB_DOC_PATH}";
system($command);
38 changes: 23 additions & 15 deletions clients/ww_credentials.dist
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,27 @@
# our @path_list = ("$ENV{HOME}/.ww_credentials", "$ENV{HOME}/ww_session_credentials", 'ww_credentials', 'ww_credentials.dist');
# Place a credential file containing the following information at one of the locations above.

# %credentials = (
# userID => "my login name for the webwork course",
# course_password => "my password ",
# courseID => "the name of the webwork course",
# );

# This will allow you to test renderProblem.pl, checkProblem.pl and similar files
# hosted2 is not a production site so it may not always be available
%credentials = (
userID => "daemon",
course_password => "daemon",
courseID => "daemon",
site_url => 'https://hosted2.webwork.rochester.edu/webwork2',
site_password => 'xmlrpc',
form_action_url => 'https://hosted2.webwork.rochester.edu/webwork2/html2xml',
);
# %credentials = (
# userID => "daemon",
# course_password => "daemon",
# courseID => "daemon_course",
# site_url => 'http://localhost:80',
# site_password => 'xmlrpc',
# form_action_url => 'http://localhost:80/webwork2/html2xml',
# ww_display_mode => "images",
# html_display_command => "open -a 'Google Chrome' ", # "open -a Safari ", "lynx "
# # path_to_log_file =>"",
# );

%credentials = (
userID => "daemon",
course_password => "daemon",
courseID => "daemon_course",
site_url => 'http://localhost:80',
site_password => 'xmlrpc',
form_action_url => 'http://localhost:80/webwork2/html2xml',
ww_display_mode => "images",
html_display_command => "open -a 'Google Chrome' ", # "open -a Safari ", "lynx "
# path_to_log_file =>"",
);
11 changes: 6 additions & 5 deletions htdocs/js/apps/LocalStorage/localstorage.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,9 @@ var WWLocalStorage = function(givenContainer) {
.each(function(index,input) {
if ($(input).attr('type').toUpperCase() == 'RADIO') {
var name = $(input).attr('name');
storedData['inputs'][name] = $('input[name="'+name'"]:checked').val();
} else if (!/previous_/.test($(input).attr('name'))) {

storedData['inputs'][name] = $('input[name="'+name+'"]:checked').val();
} else if (/AnSwEr/.test($(input).attr('name'))) {
storedData['inputs'][$(input).attr('name')] = $(input).val();
}
});
Expand All @@ -47,7 +47,7 @@ var WWLocalStorage = function(givenContainer) {
var keys = Object.keys(storedData['inputs']);

keys.forEach(function(key) {
my input = $(container).find('[name="'+key'"]');
var input = $(container).find('[name="'+key+'"]');

if (input.length > 0 &&
$(input).attr('type').toUpperCase() == 'RADIO') {
Expand All @@ -56,13 +56,14 @@ var WWLocalStorage = function(givenContainer) {
if ($(this).val() == storedData['inputs'][key]) {
$(this).attr('checked',true);
}
});

} else if (input.length > 0) {
$(input).val(storedData['inputs'][key]);
}
});
}

if ($('#problem-result-score').length > 0) {
if (!storedData['score'] ||
storedData['score'] < $('#problem-result-score').val()) {
Expand Down
4 changes: 2 additions & 2 deletions htdocs/themes/math4/simple.template
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
################################################################################
-->

<link rel="shortcut icon" href="<!--#url type="webwork" name="htdocs"-->/images/favicon.ico"/>
<link rel="icon" type="x-image/icon" href="<!--#url type="webwork" name="htdocs"-->/images/favicon.ico"/>

<!-- CSS Loads -->
<link rel="stylesheet" type="text/css" href="<!--#url type="webwork" name="htdocs"-->/js/vendor/bootstrap/css/bootstrap.css"/>
Expand Down Expand Up @@ -70,7 +70,7 @@ var tabberOptions = {manualStartup:true};
<script type="text/javascript" src="<!--#url type="webwork" name="theme"-->/math4-overrides.js"></script>
<!--#endif-->

<title>Simple--<!--#path style="text" text=" : " textonly="1"--></title>
<title><!--#path style="text" text=" : " textonly="1"--></title>

<!--#head-->
</head>
Expand Down
7 changes: 1 addition & 6 deletions lib/WeBWorK/ContentGenerator/Problem.pm
Original file line number Diff line number Diff line change
Expand Up @@ -348,9 +348,6 @@ sub templateName {
my $self = shift;
my $r = $self->r;
my $templateName = $r->param('templateName')//'system';
unless ($templateName =~/^system$|^gateway$|^simple$/ ) {
$templateName = 'system';
}
$self->{templateName}= $templateName;
$templateName;
}
Expand Down Expand Up @@ -1287,7 +1284,6 @@ sub output_checkboxes{
my $useKnowlsForHints = $ce->{pg}->{options}->{use_knowls_for_hints};
my $useKnowlsForSolutions = $ce->{pg}->{options}->{use_knowls_for_solutions};
if ($can{showCorrectAnswers} or $can{showAnsGroupInfo} or
$can{showHints} or $can{showSolutions} or
$can{showAnsHashInfo} or $can{showPGInfo} or $can{showResourceInfo} ) {
print "Show: &nbsp;&nbsp;";
}
Expand Down Expand Up @@ -1435,7 +1431,7 @@ sub output_checkboxes{


if ($can{showCorrectAnswers} or $can{showAnsGroupInfo} or
$can{showHints} or $can{showSolutions} or
$can{showHints} or $can{showSolutions} or # needed to put buttons on newline
$can{showAnsHashInfo} or $can{showPGInfo} or $can{showResourceInfo}) {
print CGI::br();
}
Expand Down Expand Up @@ -2066,7 +2062,6 @@ sub output_email_instructor{
}

# output_hidden_info subroutine

# outputs the hidden fields required for the form

sub output_hidden_info {
Expand Down