version 1.35, 2012/10/29 17:38:55
|
version 1.46, 2023/07/23 01:09:04
|
Line 89 function createWin() {
|
Line 89 function createWin() {
|
newWindow.document.write("<input type='hidden' name='callingmode' value='testbank' />") |
newWindow.document.write("<input type='hidden' name='callingmode' value='testbank' />") |
newWindow.document.write("<input type='hidden' name='inhibitmenu' value='yes' />") |
newWindow.document.write("<input type='hidden' name='inhibitmenu' value='yes' />") |
newWindow.document.write("$webpath<input type='text' name='newfilename' value='' />") |
newWindow.document.write("$webpath<input type='text' name='newfilename' value='' />") |
newWindow.document.write("<input type='button' value='$lt{'go'}' onClick='document.fileaction.submit();' /></form>") |
newWindow.document.write("<input type='button' value='$lt{'go'}' onclick='document.fileaction.submit();' /></form>") |
newWindow.document.write('$end_page') |
newWindow.document.write('$end_page') |
newWindow.document.close() |
newWindow.document.close() |
newWindow.focus() |
newWindow.focus() |
Line 289 function colSet(caller) {
|
Line 289 function colSet(caller) {
|
else { |
else { |
if ((poolForm.elements[caller*5+3].options[poolForm.elements[caller*5+3].selectedIndex].value == "MC") || (poolForm.elements[caller*5+3].options[poolForm.elements[caller*5+3].selectedIndex].value == "MA") || (poolForm.elements[caller*5+3].options[poolForm.elements[caller*5+3].selectedIndex].value == "Ord")) { |
if ((poolForm.elements[caller*5+3].options[poolForm.elements[caller*5+3].selectedIndex].value == "MC") || (poolForm.elements[caller*5+3].options[poolForm.elements[caller*5+3].selectedIndex].value == "MA") || (poolForm.elements[caller*5+3].options[poolForm.elements[caller*5+3].selectedIndex].value == "Ord")) { |
poolForm.elements[caller*5+4].options[0] = new Option("Select","-1",true,true) |
poolForm.elements[caller*5+4].options[0] = new Option("Select","-1",true,true) |
poolForm.elements[caller*5+4].options[1] = new Option("a.","lcperiod",false,false) |
poolForm.elements[caller*5+4].options[1] = new Option("a ","lcspace",false,false) |
poolForm.elements[caller*5+4].options[2] = new Option("A.","ucperiod",false,false) |
poolForm.elements[caller*5+4].options[2] = new Option("A ","ucspace",false,false) |
poolForm.elements[caller*5+4].options[3] = new Option("(a)","lcparen",false,false) |
poolForm.elements[caller*5+4].options[3] = new Option("a.","lcperiod",false,false) |
poolForm.elements[caller*5+4].options[4] = new Option("(A)","ucparen",false,false) |
poolForm.elements[caller*5+4].options[4] = new Option("A.","ucperiod",false,false) |
poolForm.elements[caller*5+4].options[5] = new Option("a)","lconeparen",false,false) |
poolForm.elements[caller*5+4].options[5] = new Option("(a)","lcparen",false,false) |
poolForm.elements[caller*5+4].options[6] = new Option("A)","uconeparen",false,false) |
poolForm.elements[caller*5+4].options[6] = new Option("(A)","ucparen",false,false) |
poolForm.elements[caller*5+4].options[7] = new Option("a.)","lcdotparen",false,false) |
poolForm.elements[caller*5+4].options[7] = new Option("a)","lconeparen",false,false) |
poolForm.elements[caller*5+4].options[8] = new Option("A.)","ucdotparen",false,false) |
poolForm.elements[caller*5+4].options[8] = new Option("A)","uconeparen",false,false) |
poolForm.elements[caller*5+4].options[9] = new Option("(i)","romparen",false,false) |
poolForm.elements[caller*5+4].options[9] = new Option("a.)","lcdotparen",false,false) |
poolForm.elements[caller*5+4].options[10] = new Option("i)","romoneparen",false,false) |
poolForm.elements[caller*5+4].options[10] = new Option("A.)","ucdotparen",false,false) |
poolForm.elements[caller*5+4].options[11] = new Option("i.)","romdotparen",false,false) |
poolForm.elements[caller*5+4].options[11] = new Option("(i)","romparen",false,false) |
poolForm.elements[caller*5+4].options[12] = new Option("i.","romperiod",false,false) |
poolForm.elements[caller*5+4].options[12] = new Option("i)","romoneparen",false,false) |
|
poolForm.elements[caller*5+4].options[13] = new Option("i.)","romdotparen",false,false) |
|
poolForm.elements[caller*5+4].options[14] = new Option("i.","romperiod",false,false) |
poolForm.elements[caller*5+4].selectedIndex = 0 |
poolForm.elements[caller*5+4].selectedIndex = 0 |
} |
} |
else { |
else { |
Line 444 function verify() {
|
Line 446 function verify() {
|
if ($numitems > 0) { |
if ($numitems > 0) { |
my $maxnum = $numitems - 1; |
my $maxnum = $numitems - 1; |
my %lt = &Apache::lonlocal::texthash( |
my %lt = &Apache::lonlocal::texthash( |
fnmb => 'File names must be unique', |
fnmb => 'Filenames must be unique', |
isum => 'is used more than once', |
isum => 'is used more than once', |
); |
); |
$$jsref .= qq| |
$$jsref .= qq| |
Line 487 sub display_zero {
|
Line 489 sub display_zero {
|
my ($r,$fn,$page,$webpath) = @_; |
my ($r,$fn,$page,$webpath) = @_; |
my $go_default = 'NextPage'; |
my $go_default = 'NextPage'; |
if ($fn eq '') { |
if ($fn eq '') { |
$r->print('<b>'.&mt('Incomplete file upload').'</b> '.&mt('Return to the [_1]construction space menu[_2] to upload a file','<a href="'.$webpath.'">','</a>')); |
$r->print('<b>'.&mt('Incomplete file upload').'</b> '.&mt('Return to the [_1]Authoring Space menu[_2] to upload a file','<a href="'.$webpath.'">','</a>')); |
} |
} |
$r->print(&mt('The <b>Testbank Upload</b> utility can be used by LON-CAPA authors to generate LON-CAPA problem files from a testbank file of questions/answers.').'<br />'. |
$r->print(&mt('The [_1]Testbank Upload[_2] utility can be used by LON-CAPA authors to generate LON-CAPA problem files from a testbank file of questions/answers.','<b>','</b>').'<br />'. |
&mt('The following question types can be converted:').' |
&mt('The following question types can be converted:').' |
<ul> |
<ul> |
<li>'.&mt('multiple choice').'</li> |
<li>'.&mt('multiple choice').'</li> |
Line 510 sub display_zero {
|
Line 512 sub display_zero {
|
</ol><form name="info" method="post" action="/adm/testbank">'. |
</ol><form name="info" method="post" action="/adm/testbank">'. |
&Apache::lonhtmlcommon::topic_bar(1,&mt('Optional: create a sub-directory in which the testbank questions will be saved')). |
&Apache::lonhtmlcommon::topic_bar(1,&mt('Optional: create a sub-directory in which the testbank questions will be saved')). |
&mt('By default, LON-CAPA problems generated from the testbank file will be stored in the current directory.').' '.&mt('To store them in a new sub-directory:'). |
&mt('By default, LON-CAPA problems generated from the testbank file will be stored in the current directory.').' '.&mt('To store them in a new sub-directory:'). |
' <input type="button" name="createdir" value="'.&mt('Create sub-directory').'" onClick="javascript:createWin()" />'. |
' <input type="button" name="createdir" value="'.&mt('Create sub-directory').'" onclick="javascript:createWin()" />'. |
&page_footer($env{'form.newdir'},$fn,$page,$webpath).' |
&page_footer($env{'form.newdir'},$fn,$page,$webpath).' |
</form>'); |
</form>'); |
} |
} |
Line 536 sub display_one {
|
Line 538 sub display_one {
|
&Apache::lonhtmlcommon::topic_bar(2,$topics{2}).'<p>'. |
&Apache::lonhtmlcommon::topic_bar(2,$topics{2}).'<p>'. |
&mt('A number in the specified format should appear at the start of each question.').'<br />'. |
&mt('A number in the specified format should appear at the start of each question.').'<br />'. |
&mt('For multiple choice questions, the question number must begin the line that contains the question text; foils (starting (a), (i) etc.) should occur on subsequent lines.').'<br />'."\n". |
&mt('For multiple choice questions, the question number must begin the line that contains the question text; foils (starting (a), (i) etc.) should occur on subsequent lines.').'<br />'."\n". |
&mt('Correct answers should be numbered in the same way as the questions and should appear after <b>all</b> the questions (including question text and possible foils for all questions).').'<br />'."\n". |
&mt('Correct answers should be numbered in the same way as the questions and should appear after [_1]all[_2] the questions (including question text and possible foils for all questions).','<b>','</b>').'<br />'."\n". |
&mt('Each numbered question must have a corresponding numbered answer, although the answer itself may be blank for essay questions.').'<br /><br />'."\n". |
&mt('Each numbered question must have a corresponding numbered answer, although the answer itself may be blank for essay questions.').'<br /><br />'."\n". |
&mt('For example, you would select <b>1.</b> if your testbank file contained the following questions:').'<br /><blockquote>'. |
&mt('For example, you would select [_1]1.[_2] if your testbank file contained the following questions:','<b>','</b>').'<br /><blockquote>'. |
'<pre> |
'<pre> |
1. '.&mt('The capital of the USA is ...').' |
1. '.&mt('The capital of the USA is ...').' |
(a) Washington D.C. |
(a) Washington D.C. |
Line 557 sub display_one {
|
Line 559 sub display_one {
|
</pre>'. |
</pre>'. |
'</blockquote></p>'. |
'</blockquote></p>'. |
&Apache::lonhtmlcommon::topic_bar(3,$topics{3}).'<p>'. |
&Apache::lonhtmlcommon::topic_bar(3,$topics{3}).'<p>'. |
&mt('For example, you would enter <b>6</b> if your testbank file contained the following sequence of questions:').'</p><blockquote>'. |
&mt('For example, you would enter [_1]6[_2] if your testbank file contained the following sequence of questions:','<b>','</b>').'</p><blockquote>'. |
&mt('10 multiple choice questions').'<br />'. |
&mt('10 multiple choice questions').'<br />'. |
&mt('5 essay questions').'<br />'. |
&mt('5 essay questions').'<br />'. |
&mt('5 fill-in-the-blank questions').'<br />'. |
&mt('5 fill-in-the-blank questions').'<br />'. |
Line 577 sub display_two {
|
Line 579 sub display_two {
|
my $blocks = $env{'form.blocks'}; |
my $blocks = $env{'form.blocks'}; |
my $qnumformat = $env{'form.qnumformat'}; |
my $qnumformat = $env{'form.qnumformat'}; |
my @types = ("MC","MA","TF","Ess","FIB","Ord"); |
my @types = ("MC","MA","TF","Ess","FIB","Ord"); |
my %typenames = ( |
my %typenames = &Apache::lonlocal::texthash( |
MC => "Multiple Choice", |
MC => "Multiple Choice", |
TF => "True/False", |
TF => "True/False", |
MA => "Multiple Answer", |
MA => "Multiple Answer", |
Line 601 sub display_two {
|
Line 603 sub display_two {
|
my $steptitle = &mt('Information about question types and formats in each block.'); |
my $steptitle = &mt('Information about question types and formats in each block.'); |
$r->print('<h3>'.&mt('Classification of blocks').'</h3>'. |
$r->print('<h3>'.&mt('Classification of blocks').'</h3>'. |
'<form method="post" name="display" action="/adm/testbank"><p>'. |
'<form method="post" name="display" action="/adm/testbank"><p>'. |
&mt('You indicated that <b>all</b> questions (and the corresponding answer(s) for each question) begin with a number in the following format: [_1].','<b>'.$qnumtypes{$qnumformat}.'</b>').'</p><p>'. |
&mt('You indicated that [_1]all[_2] questions (and the corresponding answer(s) for each question) begin with a number in the following format: [_3].','<b>','</b>','<b>'.$qnumtypes{$qnumformat}.'</b>').'</p><p>'. |
&mt('A total of <b>[quant,_1,question]</b> and <b>[quant,_2,answer]</b> were found in the file you uploaded.',$qcount,$qcount).' '. |
&mt('A total of [_1][quant,_3,question][_2] and [_1][quant,_4,answer][_2] were found in the file you uploaded.','<b>','</b>',$qcount,$qcount).' '. |
&mt('If this total does not match the number you expect, examine your original testbank file to verify that each question <i>and</i> each answer begins with a number in the specified format.').' '. |
&mt('If this total does not match the number you expect, examine your original testbank file to verify that each question [_1]and[_2] each answer begins with a number in the specified format.','<i>','</i>').' '. |
&mt('If necessary use an editor to edit your testbank file of questions, and click "Previous Page" on this page and the "Exit Now" on the preceding page, so you can upload your file again.').'</p><p>'. |
&mt('If necessary use an editor to edit your testbank file of questions, and click "Previous Page" on this page and the "Exit Now" on the preceding page, so you can upload your file again.').'</p><p>'. |
&mt('You also indicated that the <b>[quant,_1,question]</b> can be divided into <b>[quant,_2,block]</b> of questions of a particular question type.',$qcount,$blocks).'</p><p>'. |
&mt('You also indicated that the [_1][quant,_3,question][_2] can be divided into [_1][quant,_4,block][_2] of questions of a particular question type.','<b>','</b>',$qcount,$blocks).'</p><p>'. |
&mt('Provide additional information below, about the types of questions you have uploaded, and, if applicable, the format of answers and "foils" for specific types of questions.').'</p>'. |
&mt('Provide additional information below, about the types of questions you have uploaded, and, if applicable, the format of answers and "foils" for specific types of questions.').'</p>'. |
&show_uploaded_data($textref,$header). |
&show_uploaded_data($textref,$header). |
&Apache::lonhtmlcommon::topic_bar(4,$steptitle).'<p>'. |
&Apache::lonhtmlcommon::topic_bar(4,$steptitle).'<p>'. |
&mt('For <i>each</i> of the [_1] question blocks, specify the question numbers of the first and last questions in the block (e.g., 1 and 10), and the question type of the questions in the block.','<b>'.$blocks.'</b>').' '. |
&mt('For [_1]each[_2] of the [_3] question blocks, specify the question numbers of the first and last questions in the block (e.g., 1 and 10), and the question type of the questions in the block.','<i>','</i>','<b>'.$blocks.'</b>').' '. |
&mt('If required, provide additional information about foil formats and answer formats for the question types you select.').'</p><p>'. |
&mt('If required, provide additional information about foil formats and answer formats for the question types you select.').'</p><p>'. |
&Apache::loncommon::start_data_table(). |
&Apache::loncommon::start_data_table(). |
&Apache::loncommon::start_data_table_header_row(). |
&Apache::loncommon::start_data_table_header_row(). |
Line 627 sub display_two {
|
Line 629 sub display_two {
|
'<td valign="top"> <input type="text" name="start_'.$i.'" value="'.$bl1st.'" size="5" /> </td>'."\n". |
'<td valign="top"> <input type="text" name="start_'.$i.'" value="'.$bl1st.'" size="5" /> </td>'."\n". |
'<td valign="top"> <input type="text" name="end_'.$i.'" value="'.$bl1end.'" size="5" /> </td>'."\n". |
'<td valign="top"> <input type="text" name="end_'.$i.'" value="'.$bl1end.'" size="5" /> </td>'."\n". |
'<td valign="top"> |
'<td valign="top"> |
<select name="qtype_'.$i.'" onChange="colSet('.$i.')"> |
<select name="qtype_'.$i.'" onchange="colSet('.$i.')"> |
<option value="-1" selected="selected">'.&mt('Select').'</option>'."\n"); |
<option value="-1" selected="selected">'.&mt('Select').'</option>'."\n"); |
foreach my $qtype (@types) { |
foreach my $qtype (@types) { |
$r->print('<option value="'.$qtype.'">'.$typenames{$qtype}.'</option>'."\n"); |
$r->print('<option value="'.$qtype.'">'.$typenames{$qtype}.'</option>'."\n"); |
Line 647 sub display_two {
|
Line 649 sub display_two {
|
&Apache::loncommon::end_data_table_row()); |
&Apache::loncommon::end_data_table_row()); |
} |
} |
$r->print(&Apache::loncommon::end_data_table().'</p><ul><li>'. |
$r->print(&Apache::loncommon::end_data_table().'</p><ul><li>'. |
&mt('For <i>multiple choice</i>, <i>multiple correct answer</i> and <i>ranking</i> type questions, you must use the <b>Foil format</b> column to choose the format of the identifier used for each of the possible answers (e.g., (a), a, a., i, (i) etc.) provided for a given question stem.').'</li><li>'. |
&mt('For [_1]multiple choice[_2], [_1]multiple correct answer[_2] and [_1]ranking[_2] type questions, you must use the [_3]Foil format[_4] column to choose the format of the identifier used for each of the possible answers (e.g., (a), a, a., i, (i) etc.) provided for a given question stem.','<i>','</i>','<b>','</b>').'</li><li>'. |
&mt('For <i>multiple correct answer</i> and <i>fill-in-the-blank</i> questions with more than one correct answer you must use the <b>Answer format</b> column to choose the separator used between the answers, e.g., if the correct answers for question 28. were listed as:[_1] you would choose "comma", or if they were listed as:[_2] you would choose "new line".','<blockquote><pre>28. (a),(d),(e)</pre></blockquote>','<blockquote><pre> |
&mt('For [_1]multiple correct answer[_2] and [_1]fill-in-the-blank[_2] questions with more than one correct answer you must use the [_3]Answer format[_4] column to choose the separator used between the answers, e.g., if the correct answers for question 28. were listed as:[_5] you would choose "comma", or if they were listed as:[_6] you would choose "new line".','<i>','</i>','<b>','</b>','<blockquote><pre>28. (a),(d),(e)</pre></blockquote>','<blockquote><pre> |
28. (a) |
28. (a) |
(d) |
(d) |
(e) |
(e) |
</pre></blockquote>').'</li><li>'. |
</pre></blockquote>').'</li><li>'. |
&mt('For <i>true/false</i> questions you must use the <b>Answer format</b> column to choose how the correct answer - True or False, is displayed in the text file (e.g., T or F, true or false etc.).').'</li><li>'. |
&mt('For [_1]true/false[_2] questions you must use the [_3]Answer format[_4] column to choose how the correct answer - True or False, is displayed in the text file (e.g., T or F, true or false etc.).','<i>','</i>','<b>','</b>').'</li><li>'. |
&mt('For <i>ranking</i> questions you must use the <b>Answer format</b> column to choose the separator used between the (ranked) answers.').'</li></ul> |
&mt('For [_1]ranking[_2] questions you must use the [_3]Answer format[_4] column to choose the separator used between the (ranked) answers.','<i>','</i>','<b>','</b>').'</li></ul> |
<input type="hidden" name="blocks" value="'.$blocks.'" /> |
<input type="hidden" name="blocks" value="'.$blocks.'" /> |
<input type="hidden" name="qnumformat" value="'.$qnumformat.'" />'. |
<input type="hidden" name="qnumformat" value="'.$qnumformat.'" />'. |
&page_footer($env{'form.newdir'},$fn,$page).' |
&page_footer($env{'form.newdir'},$fn,$page).' |
Line 681 sub display_three {
|
Line 683 sub display_three {
|
my %lt = &Apache::lonlocal::texthash ( |
my %lt = &Apache::lonlocal::texthash ( |
crt => 'Create?', |
crt => 'Create?', |
typ => 'Type', |
typ => 'Type', |
fnam => 'File Name', |
fnam => 'Filename', |
ques => 'Question', |
ques => 'Question', |
answ => 'Answer', |
answ => 'Answer', |
chka => 'check all', |
chka => 'check all', |
Line 774 sub display_three {
|
Line 776 sub display_three {
|
'<td valign="top">'.$showqn.'<br /><br />'."\n"); |
'<td valign="top">'.$showqn.'<br /><br />'."\n"); |
} else { |
} else { |
my $foiltag = ''; |
my $foiltag = ''; |
if ($foilformats[$i] eq "lcperiod") { |
if ($foilformats[$i] eq "lcspace") { |
|
$foiltag = $alphabet->[$k-1].' '; |
|
} elsif ($foilformats[$i] eq "ucspace") { |
|
$foiltag = $alphabet->[$k-1].' '; |
|
$foiltag =~ tr/a-z/A-Z/; |
|
} elsif ($foilformats[$i] eq "lcperiod") { |
$foiltag = $alphabet->[$k-1].'.'; |
$foiltag = $alphabet->[$k-1].'.'; |
} elsif ($foilformats[$i] eq "lcparen") { |
} elsif ($foilformats[$i] eq "lcparen") { |
$foiltag = '('.$alphabet->[$k-1].')'; |
$foiltag = '('.$alphabet->[$k-1].')'; |
Line 924 sub final_display {
|
Line 931 sub final_display {
|
$items->[$k] =~ tr/A-Z/a-z/; |
$items->[$k] =~ tr/A-Z/a-z/; |
$items->[$k] =~ s/<\/?[^>]+>//g; |
$items->[$k] =~ s/<\/?[^>]+>//g; |
$items->[$k] =~ s/\W//g; |
$items->[$k] =~ s/\W//g; |
if ($foilformats[$i] eq "lcperiod" || $foilformats[$i] eq "lcparen" || $foilformats[$i] eq "lconeparen" || $foilformats[$i] eq "lcdotparen" || $foilformats[$i] eq "ucparen" || $foilformats[$i] eq "ucperiod" || $foilformats[$i] eq "uconeparen" || $foilformats[$i] eq "ucdotparen") { |
if ($foilformats[$i] eq "lcspace" || $foilformats[$i] eq "ucspace" || $foilformats[$i] eq "lcperiod" || $foilformats[$i] eq "lcparen" || $foilformats[$i] eq "lconeparen" || $foilformats[$i] eq "lcdotparen" || $foilformats[$i] eq "ucparen" || $foilformats[$i] eq "ucperiod" || $foilformats[$i] eq "uconeparen" || $foilformats[$i] eq "ucdotparen") { |
for (my $j=0; $j<@{$alphabet}; $j++) { |
for (my $j=0; $j<@{$alphabet}; $j++) { |
if ($alphabet->[$j] eq $items->[$k]) { |
if ($alphabet->[$j] eq $items->[$k]) { |
push @{$answers{$qnum}}, $j; |
push @{$answers{$qnum}}, $j; |
Line 957 sub final_display {
|
Line 964 sub final_display {
|
} else { |
} else { |
$correct =~s/\W//g; |
$correct =~s/\W//g; |
} |
} |
if ($foilformats[$i] eq "lcperiod" || $foilformats[$i] eq "lcparen" || $foilformats[$i] eq "ucparen" || $foilformats[$i] eq "ucperiod") { |
if ($foilformats[$i] eq "lcspace" || $foilformats[$i] eq "ucspace" || $foilformats[$i] eq "lcperiod" || $foilformats[$i] eq "lcparen" || $foilformats[$i] eq "ucparen" || $foilformats[$i] eq "ucperiod") { |
if (($qtype[$i] eq "Ord") && (@tied > 0)) { |
if (($qtype[$i] eq "Ord") && (@tied > 0)) { |
my @ties; |
my @ties; |
foreach my $tie (@tied) { |
foreach my $tie (@tied) { |
Line 1275 sub file_split {
|
Line 1282 sub file_split {
|
if (${$numsref}[$i] > 0) { |
if (${$numsref}[$i] > 0) { |
if ((${$qtyperef}[$i] eq "MC") || (${$qtyperef}[$i] eq "MA") || (${$qtyperef}[$i] eq "Ord")) { |
if ((${$qtyperef}[$i] eq "MC") || (${$qtyperef}[$i] eq "MA") || (${$qtyperef}[$i] eq "Ord")) { |
my $splitstr = ''; |
my $splitstr = ''; |
if (${$foilsref}[$i] eq "lcperiod") { |
if (${$foilsref}[$i] eq "lcspace") { |
|
$splitstr = '[a-z]\s'; |
|
} elsif (${$foilsref}[$i] eq "ucspace") { |
|
$splitstr = '[A-Z]\s'; |
|
} elsif (${$foilsref}[$i] eq "lcperiod") { |
$splitstr = '[a-z]\.'; |
$splitstr = '[a-z]\.'; |
} elsif (${$foilsref}[$i] eq "lcparen") { |
} elsif (${$foilsref}[$i] eq "lcparen") { |
$splitstr = '\([a-z]\)'; |
$splitstr = '\([a-z]\)'; |
Line 1497 sub create_mcq {
|
Line 1508 sub create_mcq {
|
if (-e $destdir.$libfile) { |
if (-e $destdir.$libfile) { |
$result = 'exists'; |
$result = 'exists'; |
} else { |
} else { |
if (open(PROB,">$destdir$libfile")) { |
if (open(PROB,">",$destdir.$libfile)) { |
print PROB $output; |
print PROB $output; |
close(PROB); |
close(PROB); |
$result = 'ok'; |
$result = 'ok'; |
Line 1575 sub create_ess {
|
Line 1586 sub create_ess {
|
if (-e $destdir.$libfile) { |
if (-e $destdir.$libfile) { |
$result = 'exists'; |
$result = 'exists'; |
} else { |
} else { |
if (open(PROB,">$destdir$libfile")) { |
if (open(PROB,">",$destdir.$libfile)) { |
print PROB $output; |
print PROB $output; |
close(PROB); |
close(PROB); |
|
$result = 'ok'; |
} else { |
} else { |
$result = 'failed'; |
$result = 'failed'; |
} |
} |
Line 1605 sub file_error {
|
Line 1617 sub file_error {
|
my ($r,$fn,$current_page,$webpath,$res) = @_; |
my ($r,$fn,$current_page,$webpath,$res) = @_; |
$r->print('<p><form name="display" method="post" action="/adm/testbank">'.&mt('The file you uploaded does not appear to be in the correct format.'). |
$r->print('<p><form name="display" method="post" action="/adm/testbank">'.&mt('The file you uploaded does not appear to be in the correct format.'). |
'</p><p>'.&mt('Extraction of questions is only possible for the following file types:'). |
'</p><p>'.&mt('Extraction of questions is only possible for the following file types:'). |
'<ul><li>'.&mt('plain text').'</li><li>RTF</li><li>HTML</li></ul>'. |
'<ul>'. |
|
'<li>'.&mt('plain text').'</li>'. |
|
'<li>'.&mt('RTF').'</li>'. |
|
'<li>'.&mt('HTML').'</li></ul>'. |
&mt('The file type identified for the file you uploaded is [_1].','<b>'.$res.'</b>').'</p>'); |
&mt('The file type identified for the file you uploaded is [_1].','<b>'.$res.'</b>').'</p>'); |
$r->print(&page_footer($env{'form.newdir'},$fn,$current_page,$webpath,undef,'badfile'). |
$r->print(&page_footer($env{'form.newdir'},$fn,$current_page,$webpath,undef,'badfile'). |
'</form>'); |
'</form>'); |
Line 1621 sub parse_datafile {
|
Line 1636 sub parse_datafile {
|
$res = $mm->checktype_filename($dirpath.$filename); |
$res = $mm->checktype_filename($dirpath.$filename); |
if ($env{'form.phase'} eq 'three') { |
if ($env{'form.phase'} eq 'three') { |
if ($res eq 'text/plain') { |
if ($res eq 'text/plain') { |
open(TESTBANK,"<$dirpath$filename"); |
open(TESTBANK,"<",$dirpath.$filename); |
@{$text} = <TESTBANK>; |
@{$text} = <TESTBANK>; |
close(TESTBANK); |
close(TESTBANK); |
} elsif ($res eq 'application/rtf') { |
} elsif ($res eq 'application/rtf') { |
Line 1772 sub build_image_url {
|
Line 1787 sub build_image_url {
|
} |
} |
|
|
sub print_header { |
sub print_header { |
my ($uname,$udom,$javascript,$loadentries,$title,$current_page,$pagesref, |
my ($uname,$udom,$javascript,$loadentries,$title,$crumbtext,$crumbhref, |
$namesref) = @_; |
$crsauthor,$current_page,$pagesref,$namesref) = @_; |
my $brcrum = [{'href' => &Apache::loncommon::authorspace("/priv/$udom/$uname/"), |
my $brcrum = [{'href' => $crumbhref), |
'text' => 'Construction Space'}]; |
'text' => $crumbtext}]; |
if ($env{'form.phase'} eq 'three') { |
if ($env{'form.phase'} eq 'three') { |
if (ref($pagesref) eq 'ARRAY') { |
if (ref($pagesref) eq 'ARRAY') { |
for (my $i=0; $i<$current_page; $i++) { |
for (my $i=0; $i<$current_page; $i++) { |
Line 1801 sub print_header {
|
Line 1816 sub print_header {
|
my $output = &Apache::loncommon::start_page($title,$javascript, |
my $output = &Apache::loncommon::start_page($title,$javascript, |
{'bread_crumbs' => $brcrum, |
{'bread_crumbs' => $brcrum, |
'add_entries' => $loadentries}); |
'add_entries' => $loadentries}); |
if (($uname ne $env{'user.name'}) || ($udom ne $env{'user.domain'})) { |
unless ($crsauthor) { |
$output .= '<p class="LC_info">' |
if (($uname ne $env{'user.name'}) || ($udom ne $env{'user.domain'})) { |
.&mt('Co-Author [_1]',$uname.':'.$udom) |
$output .= '<p class="LC_info">' |
.'</p>'; |
.&mt('Co-Author [_1]',$uname.':'.$udom) |
|
.'</p>'; |
|
} |
} |
} |
return $output; |
return $output; |
} |
} |
Line 1837 sub handler {
|
Line 1854 sub handler {
|
my $page_name = ''; |
my $page_name = ''; |
my $current_page = ''; |
my $current_page = ''; |
my $qcount = ''; |
my $qcount = ''; |
my $title = 'Upload testbank questions to Construction Space'; |
my $crsauthor; |
|
my $title = 'Upload testbank questions to Authoring Space'; |
|
my $crumbtext = 'Authoring Space'; |
|
my $crumbhref = &Apache::loncommon::authorspace($fn); |
|
if ($env{'request.course.id'}) { |
|
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
if ($crumbhref eq "/priv/$cdom/$cnum/") { |
|
$title = 'Upload testbank questions to Course Authoring Space'; |
|
$crumbtext = 'Course Authoring Space'; |
|
$crsauthor = 1; |
|
} |
|
} |
|
|
# ----------------------------------------------------------- Start page output |
# ----------------------------------------------------------- Start page output |
&Apache::loncommon::content_type($r,'text/html'); |
&Apache::loncommon::content_type($r,'text/html'); |
Line 1850 sub handler {
|
Line 1879 sub handler {
|
if ($env{'form.phase'} eq 'three') { |
if ($env{'form.phase'} eq 'three') { |
$current_page = &display_control(); |
$current_page = &display_control(); |
@pages = ('Welcome','Blocks','Format','Target','Confirmation'); |
@pages = ('Welcome','Blocks','Format','Target','Confirmation'); |
%names = ( |
%names = &Apache::lonlocal::texthash( |
Welcome => 'Testbank Format', |
Welcome => 'Testbank Format', |
Blocks => 'Classification', |
Blocks => 'Classification', |
Format => 'Selection', |
Format => 'Selection', |
Line 1899 sub handler {
|
Line 1928 sub handler {
|
} |
} |
|
|
$r->print(&print_header($uname,$udom,$javascript,\%loadentries,$title, |
$r->print(&print_header($uname,$udom,$javascript,\%loadentries,$title, |
$current_page,\@pages,\%names)); |
$crumbtext,$crumbhref,$crsauthor,$current_page, |
|
\@pages,\%names)); |
|
|
if (($env{'form.phase'} eq 'four') || ($env{'form.phase'} eq 'three')) { |
if (($env{'form.phase'} eq 'four') || ($env{'form.phase'} eq 'three')) { |
if ($env{'form.phase'} eq 'four') { |
if ($env{'form.phase'} eq 'four') { |
Line 1946 sub handler {
|
Line 1976 sub handler {
|
&page_footer('',$fn).'</form>'); |
&page_footer('',$fn).'</form>'); |
} |
} |
} else { |
} else { |
&Apache::lonupload::phaseone($r,$fn,'testbank'); |
&Apache::lonupload::phaseone($r,$fn,'testbank',$uname,$udom); |
} |
} |
$r->print(&Apache::loncommon::end_page()); |
$r->print(&Apache::loncommon::end_page()); |
return OK; |
return OK; |