[LON-CAPA-cvs] cvs: loncom /imspackages imsimport.pm imsimportdocs.pm imsprocessor.pm

raeburn lon-capa-cvs@mail.lon-capa.org
Mon, 13 Dec 2004 20:01:09 -0000


This is a MIME encoded message

--raeburn1102968069
Content-Type: text/plain

raeburn		Mon Dec 13 15:01:09 2004 EDT

  Modified files:              
    /loncom/imspackages	imsimport.pm imsimportdocs.pm imsprocessor.pm 
  Log:
  Save each set of imported questions in a page (for an assessment) or in a sequence (for a pool).  Make sure directories are created, and replicated (if using DOCS to import into a course).  Distinguish between question import for CSTR and DOCS. Also some minor improvements in appearance. 
  
  
--raeburn1102968069
Content-Type: text/plain
Content-Disposition: attachment; filename="raeburn-20041213150109.txt"

Index: loncom/imspackages/imsimport.pm
diff -u loncom/imspackages/imsimport.pm:1.7 loncom/imspackages/imsimport.pm:1.8
--- loncom/imspackages/imsimport.pm:1.7	Thu Aug  5 19:21:49 2004
+++ loncom/imspackages/imsimport.pm	Mon Dec 13 15:01:09 2004
@@ -679,7 +679,7 @@
         my @topnames = ();
         my @packages = ();
 
-        &Apache::imsprocessor::process_resinfo($cms,'CSTR',$tempdir,$destdir,\%items,\%resources,\@boards,\@announcements,\@quizzes,\@surveys,\@groups,\%messages,\@timestamp,\%boardnum,\%resinfo,$udom,$uname,$cdom,$crs,$db_handling,$user_handling,\%total,$newdir,$seqstem,\@resrcfiles,\@packages,\%hrefs);
+        &Apache::imsprocessor::process_resinfo($cms,'CSTR',$tempdir,$destdir,\%items,\%resources,\@boards,\@announcements,\@quizzes,\@surveys,\@groups,\%messages,\@timestamp,\%boardnum,\%resinfo,$udom,$uname,$cdom,$crs,$db_handling,$user_handling,\%total,$newdir,$seqstem,\@resrcfiles,\@packages,\%hrefs,\@pages,\@sequences);
 
         my $copy_result = &Apache::imsprocessor::copy_resources('CSTR',$cms,\%hrefs,$tempdir,\@targets,\%urls,$crs,$cdom,$chome,$destdir,$timenow);
    
Index: loncom/imspackages/imsimportdocs.pm
diff -u loncom/imspackages/imsimportdocs.pm:1.7 loncom/imspackages/imsimportdocs.pm:1.8
--- loncom/imspackages/imsimportdocs.pm:1.7	Thu Aug  5 19:21:49 2004
+++ loncom/imspackages/imsimportdocs.pm	Mon Dec 13 15:01:09 2004
@@ -158,7 +158,7 @@
     my $allowed=&Apache::lonnet::allowed('mdc',$ENV{'request.course.id'});
     unless ($allowed) {
         $r->print("<html><head><title>The LearningOnline Network with CAPA</title></head>");
-        $r->print(&Apache::loncommon::bodytag('Import IMS package'));  
+        $r->print(&Apache::loncommon::bodytag('Import IMS package',undef,'',1));  
         $r->print('<h3>'.&mt('Modification of Course Contents Disallowed').'</h3>'.&mt('Your current role does not grant you the right to modify course content in this course.').'</body></html>');
         return OK;
     }
@@ -187,7 +187,7 @@
 </head>
 ENDHEAD
 # -------------------------------------------------------------------- Body tag
-    $r->print(&Apache::loncommon::bodytag('Import IMS package'));
+    $r->print(&Apache::loncommon::bodytag('Import IMS package',undef,'',1));
     if ($ENV{'form.phase'} eq 'one') {
         &display_one($r);       
     } elsif ($ENV{'form.phase'} eq 'two') {
@@ -542,9 +542,9 @@
     if (defined($ENV{'form.foldername'}) ) {
         $foldername = $ENV{'form.foldername'}; 
     }
- 
+
     foreach my $area (@{$areas}) {
-        if (defined($ENV{"form.$area"}) ) {          
+        if (defined($ENV{"form.$area"}) && ($ENV{'form.'.$area} ne '')) {
             if ($cms eq 'angel' && $area eq 'doc') {
                 foreach (@{$cmsmap{$cms}{$area}}) {
                     $imports{$_} = 1;
@@ -590,7 +590,7 @@
         my @topnames = ();
         my @packages = ();
 
-        &Apache::imsprocessor::process_resinfo($cms,'DOCS',$tempdir,$destdir,\%items,\%resources,\@boards,\@announcements,\@quizzes,\@surveys,\@groups,\%messages,\@timestamp,\%boardnum,\%resinfo,$udom,$uname,$cdom,$crs,$db_handling,$user_handling,\%total,$seqstem,$seqstem,\@resrcfiles,\@packages,\%hrefs);
+        &Apache::imsprocessor::process_resinfo($cms,'DOCS',$tempdir,$destdir,\%items,\%resources,\@boards,\@announcements,\@quizzes,\@surveys,\@groups,\%messages,\@timestamp,\%boardnum,\%resinfo,$udom,$uname,$cdom,$crs,$db_handling,$user_handling,\%total,$seqstem,$seqstem,\@resrcfiles,\@packages,\%hrefs,\@pages,\@sequences);
 
         my $copy_result = &Apache::imsprocessor::copy_resources('DOCS',$cms,\%hrefs,$tempdir,\@targets,\%urls,$crs,$cdom,$chome,$destdir,$timenow);
 
@@ -630,7 +630,7 @@
             $Apache::lonratedt::order[0]=1;
             $Apache::lonratedt::resources[1]='';
         }
-        my ($errtext,$fatal)=&Apache::londocs::group_import($crs, $cdom, $folder,@imports);
+        my ($errtext,$fatal)=&Apache::londocs::group_import($crs,$cdom,$folder,'sequence','imsimport',@imports);
         if ($fatal) {
             print STDERR "Fatal error during group_import\n";
         }
@@ -670,7 +670,7 @@
            <input type="button" value="|;
     $initblock .= &mt('re-initializing course');
     $initblock .= qq|" onClick="javascript:init(this.form)"/>|;
-    $initblock .= &mt('or the next time you log in.');
+    $initblock .= ', '.&mt('or the next time you log in.');
     $initblock .= qq|</font></h3></form>|;  
     $r->print($initblock);
     $r->print(<<ENDBLOCKTWO);
Index: loncom/imspackages/imsprocessor.pm
diff -u loncom/imspackages/imsprocessor.pm:1.10 loncom/imspackages/imsprocessor.pm:1.11
--- loncom/imspackages/imsprocessor.pm:1.10	Thu Aug  5 19:21:49 2004
+++ loncom/imspackages/imsprocessor.pm	Mon Dec 13 15:01:09 2004
@@ -41,10 +41,8 @@
                 survey => 'assessment/x-bb-survey',
                 users => 'course/x-bb-user',
                 );
-
     %{$$cmsmap{bb6}} =  %{$$cmsmap{bb5}};
     $$cmsmap{bb6}{conference} = 'resource/x-bb-conference';
- 
     %{$$cmsmap{angel}} =  (
                 board => 'BOARD',
                 extlink => 'LINK',
@@ -52,10 +50,7 @@
                 quiz => 'QUIZ',
                 survey => 'FORM',
                 );
-
     @{$$cmsmap{angel}{doc}} = ('FILE','PAGE');
-
-
     %{$areaname} = (
                 announce => 'Announcements',
                 board => 'Discussion Boards',
@@ -67,7 +62,6 @@
                 survey => 'Surveys',
                 users => 'Enrollment',
                 );
-         
 }
  
 sub create_tempdir {
@@ -173,7 +167,6 @@
         $$resources{'toplevel'}{type} = 'resource/x-bb-document';
     }
 
-
     unless (-e "$tempdir/imsmanifest.xml") {
         return 'nomanifest';
     } 
@@ -259,14 +252,14 @@
                     }
                 } elsif ("@state" eq "manifest resources resource" ) {
                     $identifier = $attr->{identifier};
-                    if ($cms eq 'bb5' || $cms eq 'bb6') {                 
+                    if ($cms eq 'bb5' || $cms eq 'bb6') {
                         $$resources{$identifier}{file} = $attr->{file};
                         $$resources{$identifier}{type} = $attr->{type};
                     } elsif ($cms eq 'angel') {
                         $identifier = substr($identifier,3);
                         if ($attr->{href} =~ m-^_assoc/$identifier/(.+)$-) {
                             $$resources{$identifier}{file} = $1;
-                        }                    
+                        }
                     }
                     @{$$hrefs{$identifier}} = ();
                 } elsif ("@state" eq "manifest resources resource file") {
@@ -277,7 +270,7 @@
                             push @{$$hrefs{$identifier}},$1;
                         } elsif ($attr->{href} =~ m/^Icons\\icon(\w+)\.gif/) {
                             $$resources{$identifier}{type} = $1;
-                        } 
+                        }
                     }
                 }
            }, "tagname, attr"],
@@ -401,7 +394,7 @@
 }
 
 sub process_resinfo {
-    my ($cms,$context,$docroot,$destdir,$items,$resources,$boards,$announcements,$quizzes,$surveys,$groups,$messages,$timestamp,$boardnum,$resinfo,$udom,$uname,$cdom,$crs,$db_handling,$user_handling,$total,$dirname,$seqstem,$resrcfiles,$packages,$hrefs) = @_;
+    my ($cms,$context,$docroot,$destdir,$items,$resources,$boards,$announcements,$quizzes,$surveys,$groups,$messages,$timestamp,$boardnum,$resinfo,$udom,$uname,$cdom,$crs,$db_handling,$user_handling,$total,$dirname,$seqstem,$resrcfiles,$packages,$hrefs,$pagesfiles,$sequencesfiles) = @_;
     my $board_id = time;
     my $board_count = 0;
     my $announce_handling = 'include';
@@ -461,14 +454,14 @@
                 }
             } elsif ($$resources{$key}{type} eq "assessment/x-bb-pool") {
                 %{$$resinfo{$key}} = ();
-                &process_assessment($key,$docroot,'pool',$dirname,$destdir,\%{$$resinfo{$key}},$total,$udom,$uname);
+                &process_assessment($context,$key,$docroot,'pool',$dirname,$destdir,\%{$$resinfo{$key}},$total,$udom,$uname,$pagesfiles,$sequencesfiles);
             } elsif ($$resources{$key}{type} eq "assessment/x-bb-quiz") {
                 %{$$resinfo{$key}} = ();
-                &process_assessment($key,$docroot,'quiz',$dirname,$destdir,\%{$$resinfo{$key}},$total,$udom,$uname);
+                &process_assessment($context,$key,$docroot,'quiz',$dirname,$destdir,\%{$$resinfo{$key}},$total,$udom,$uname,$pagesfiles,$sequencesfiles);
                 push @{$quizzes}, $key;
             } elsif ($$resources{$key}{type} eq "assessment/x-bb-survey") {
                 %{$$resinfo{$key}} = ();
-                &process_assessment($key,$docroot,'survey',$dirname,$destdir,\%{$$resinfo{$key}},$total,$udom,$uname);
+                &process_assessment($context,$key,$docroot,'survey',$dirname,$destdir,\%{$$resinfo{$key}},$total,$udom,$uname,$pagesfiles,$sequencesfiles);
                 push @{$surveys}, $key;
             } elsif ($$resources{$key}{type} eq "assessment/x-bb-group") {
                 %{$$resinfo{$key}} = ();
@@ -1511,7 +1504,7 @@
 }
 # ---------------------------------------------------------------- Process Blackboard Assessments - pools, quizzes, surveys
 sub process_assessment {
-    my ($res,$docroot,$container,$dirname,$destdir,$settings,$total,$udom,$uname) = @_;
+    my ($context,$res,$docroot,$container,$dirname,$destdir,$settings,$total,$udom,$uname,$pagesfiles,$sequencesfiles) = @_;
     my $xmlfile = $docroot.'/'.$res.".dat";
 #  print "XML file is $xmlfile\n";
     my @state = ();
@@ -1567,9 +1560,7 @@
         }    
         if ("@state" eq "$toptag{$container} QUESTIONLIST QUESTION") {  
             $id = $attr->{id};
-            unless ($container eq 'pool') {
-                push @allids, $id;
-            }
+            push @allids, $id;
             %{$$settings{$id}} = ();
             @{$allanswers{$id}} = ();
             $$settings{$id}{class} = $attr->{class};
@@ -1669,46 +1660,77 @@
     my $dirtitle = $$settings{'title'};
     $dirtitle =~ s/\W//g;
     $dirtitle .= '_'.$res;
+    if (!-e "$destdir/problems") {
+        mkdir("$destdir/problems",0755);
+    }
     if (!-e "$destdir/problems/$dirtitle") {
         mkdir("$destdir/problems/$dirtitle",0755);
     }
     my $newdir = "$destdir/problems/$dirtitle";
+    my $seqdir = "$destdir/sequences";
     my $pagedir = "$destdir/pages";
     my $curr_id = 0;
     my $next_id = 1;
-    unless ($container eq 'pool') {
-        open(PAGEFILE,">$pagedir/$res.page");
-        print PAGEFILE qq|<map>
-|;
-        $$total{page} ++; 
-        print PAGEFILE qq|<resource id="1" src="/res/$udom/$uname/$resdir/problems/$dirtitle/$allids[0].problem" type="start"></resource>|;
-        if (@allids == 1) {
-            print PAGEFILE qq|
+    my $fh;
+    my $containerdir;
+    if ($container eq 'pool') {
+        $containerdir = $seqdir.'/'.$res.'.sequence';
+        if (!-e "$seqdir") {
+            mkdir("$seqdir",0770);
+        }
+        open($fh,">$containerdir");
+        $$total{seq} ++;
+        push @{$sequencesfiles},$res.'.sequence';
+    } else {
+        $containerdir = $pagedir.'/'.$res.'.page';
+        if (!-e "$destdir/pages") {
+            mkdir("$destdir/pages",0770);
+        }
+        open($fh,">$containerdir");
+        $$total{page} ++;
+        push @{$pagesfiles},$res.'.page';
+    }
+    print $fh qq|<map>
+|;
+    my $probsrc="/res/$udom/$uname/$resdir/problems/$dirtitle/$allids[0].problem";
+    print $fh qq|<resource id="1" src="$probsrc" type="start" title="question_0001"></resource>|;
+    if (@allids == 1) {
+        print $fh qq|
 <link from="1" to="2" index="1"></link>
 <resource id="2" src="" type="finish">\n|;
-        } else {
-            for (my $j=1; $j<@allids; $j++) {
-                $curr_id = $j;
-                $next_id = $curr_id + 1;
-                print PAGEFILE qq|
+    } else {
+        for (my $j=1; $j<@allids; $j++) {
+            my $qntitle = $j;
+            while (length($qntitle) <4) {
+                $qntitle = '0'.$qntitle;
+            }
+            $curr_id = $j;
+            $next_id = $curr_id + 1;
+            if ($context eq 'CSTR') {
+                $probsrc = "/res/$udom/$uname/$resdir/problems/$dirtitle/$allids[$j].problem";
+            }
+            print $fh qq|
 <link from="$curr_id" to="$next_id" index="$curr_id"></link>
-<resource id="$next_id" src="/res/$udom/$uname/$resdir/problems/$dirtitle/$allids[$j].problem"|;
-                if ($next_id == @allids) {
-                    print PAGEFILE qq| type="finish"></resource>\n|;
-                } else {
-                    print PAGEFILE qq|></resource>|;
-                }
+<resource id="$next_id" src="$probsrc" title="question_$qntitle"|;
+            if ($next_id == @allids) {
+                print $fh qq| type="finish"></resource>\n|;
+            } else {
+                print $fh qq|></resource>|;
             }
         }
-        print PAGEFILE qq|</map>|;
-        close(PAGEFILE);
     }
+    print $fh qq|</map>|;
+    close($fh);
     foreach my $id (@allids) {
-        my $output = qq|<problem>
+        my $output;
+        if ($context eq 'CSTR') {
+            $output = qq|<problem>
 |;
+        }
         $$total{prob} ++;
         if ($$settings{$id}{class} eq "QUESTION_ESSAY") {
-            $output .= qq|<startouttext />$$settings{$id}{text}<endouttext />
+            if ($context eq 'CSTR') {
+                $output .= qq|<startouttext />$$settings{$id}{text}<endouttext />
  <essayresponse>
  <textfield></textfield>
  </essayresponse>
@@ -1716,26 +1738,34 @@
  $$settings{$id}{feedbackcorr}
  </postanswerdate>
 |;
+             }
         } else {
-            $output .= qq|<startouttext />$$settings{$id}{text}\n|;
-            if ( defined($$settings{$id}{image}) ) { 
+            if ($context eq 'CSTR') {
+                $output .= qq|<startouttext />$$settings{$id}{text}\n|;
+            }
+            my ($image,$imglink,$url);
+            if ( defined($$settings{$id}{image}) ) {
                 if ( $$settings{$id}{style} eq 'embed' ) {
-                    $output .= qq|<br /><img src="$dirname/resfiles/$res/$$settings{$id}{image}" /><br />|;
+                    $image = qq|<br /><img src="$dirname/resfiles/$res/$$settings{$id}{image}" /><br />|;
                 } else {
-                    $output .= qq|<br /><a href="$dirname/resfiles/$res/$$settings{$id}{image}">Link to file</a><br />|;
+                    $imglink = qq|<br /><a href="$dirname/resfiles/$res/$$settings{$id}{image}">Link to file</a><br />|;
                 }
             }
             if ( defined($$settings{$id}{url}) ) {
-                $output .= qq|<br /><a href="$$settings{$id}{url}">$$settings{$id}{name}</a><br />|;
+                $url = qq|<br /><a href="$$settings{$id}{url}">$$settings{$id}{name}</a><br />|;
+            }
+            if ($context eq 'CSTR') {
+                $output .= $image.$imglink.$url.'
+<endouttext />';
             }
-            $output .= qq|
-<endouttext />|;
             if ($$settings{$id}{class} eq 'QUESTION_MULTIPLECHOICE') {
                 my $numfoils = @{$allanswers{$id}};
-                $output .= qq|
+                if ($context eq 'CSTR') {
+                    $output .= qq|
  <radiobuttonresponse max="$numfoils" randomize="yes">
   <foilgroup>
 |;
+                }
                 for (my $k=0; $k<@{$allanswers{$id}}; $k++) {
                     $output .= "   <foil name=\"foil".$k."\" value=\"";
                     if (grep/^$allanswers{$id}[$k]$/,@{$$settings{$id}{correctanswer}}) {
@@ -1749,26 +1779,31 @@
                         $output .= "random\"";
                     }
                     $output .= "\><startouttext />".$$settings{$id}{$allanswers{$id}[$k]}{text};
+                    my ($ans_image,$ans_link);
                     if ( defined($$settings{$id}{$allanswers{$id}[$k]}{image}) ) {
                         if ( $$settings{$id}{$allanswers{$id}[$k]}{style} eq 'embed' ) {
-                            $output .= qq|<br /><img src="$dirname/resfiles/$res/$$settings{$id}{$allanswers{$id}[$k]}{image}" /><br />|;
+                            $ans_image .= qq|<br /><img src="$dirname/resfiles/$res/$$settings{$id}{$allanswers{$id}[$k]}{image}" /><br />|;
                         } else {
-                            $output .= qq|<br /><a href="$dirname/resfiles/$res/$$settings{$id}{$allanswers{$id}[$k]}{image}" />Link to file</a><br/>|;
+                            $ans_link .= qq|<br /><a href="$dirname/resfiles/$res/$$settings{$id}{$allanswers{$id}[$k]}{image}" />Link to file</a><br/>|;
                         }
                     }
-                    $output .= qq|<endouttext /></foil>\n|;
+                    $output .= $ans_image.$ans_link.'<endouttext /></foil>'."\n";
                 }
-                chomp($output);
-                $output .= qq|
+                if ($context eq 'CSTR') {
+                    chomp($output);
+                    $output .= qq|
   </foilgroup>
  </radiobuttonresponse>
 |;
+                }
             } elsif ($$settings{$id}{class} eq 'QUESTION_TRUEFALSE') {
                 my $numfoils = @{$allanswers{$id}};
-                $output .= qq|
+                if ($context eq 'CSTR') {
+                    $output .= qq|
    <radiobuttonresponse max="$numfoils" randomize="yes">
     <foilgroup>
 |;
+                }
                 for (my $k=0; $k<@{$allanswers{$id}}; $k++) {
                     $output .= "   <foil name=\"foil".$k."\" value=\"";
                     if (grep/^$allanswers{$id}[$k]$/,@{$$settings{$id}{correctanswer}}) {
@@ -1778,17 +1813,21 @@
                     }
                     $output .= "\><startouttext />".$$settings{$id}{$allanswers{$id}[$k]}{text}."<endouttext /></foil>\n";
                 }
-                chomp($output);
-                $output .= qq|
+                if ($context eq 'CSTR') {
+                    chomp($output);
+                    $output .= qq|
     </foilgroup>
    </radiobuttonresponse>
 |;
+                }
             } elsif ($$settings{$id}{class} eq 'QUESTION_MULTIPLEANSWER') {
                 my $numfoils = @{$allanswers{$id}};
-                $output .= qq|
+                if ($context eq 'CSTR') {
+                    $output .= qq|
    <optionresponse max="$numfoils" randomize="yes">
     <foilgroup options="('True','False')">
 |;
+                }
                 for (my $k=0; $k<@{$allanswers{$id}}; $k++) {
                     $output .= "   <foil name=\"foil".$k."\" value=\"";
                     if (grep/^$allanswers{$id}[$k]$/,@{$$settings{$id}{correctanswer}}) {
@@ -1798,30 +1837,42 @@
                     }
                     $output .= "\><startouttext />".$$settings{$id}{$allanswers{$id}[$k]}{text}."<endouttext /></foil>\n";
                 }
-                chomp($output);
-                $output .= qq|
+                if ($context eq 'CSTR') {  
+                    chomp($output);
+                    $output .= qq|
     </foilgroup>
    </optionresponse>
 |;
+                }
             } elsif ($$settings{$id}{class} eq 'QUESTION_ORDER') {
                 my $numfoils = @{$allanswers{$id}};
-                $output .= qq|
+                if ($context eq 'CSTR') {
+                    $output .= qq|
    <rankresponse max="$numfoils" randomize="yes">
     <foilgroup>
 |;
+                }
                 for (my $k=0; $k<@{$allanswers{$id}}; $k++) {
-                    $output .= "   <foil location=\"random\" name=\"foil".$k."\" value=\"".$$settings{$id}{$allanswers{$id}[$k]}{order}."\"><startouttext />".$$settings{$id}{$allanswers{$id}[$k]}{text}."<endouttext /></foil>\n";
+                    if ($context eq 'CSTR') {
+                        $output .= "   <foil location=\"random\" name=\"foil".$k."\" value=\"".$$settings{$id}{$allanswers{$id}[$k]}{order}."\"><startouttext />".$$settings{$id}{$allanswers{$id}[$k]}{text}."<endouttext /></foil>\n";
+                    }
                 }
-                chomp($output);
-                $output .= qq|
+                if ($context eq 'CSTR') {
+                    chomp($output);
+                    $output .= qq|
     </foilgroup>
    </rankresponse>
 |;
+                }
             } elsif ($$settings{$id}{class} eq 'QUESTION_FILLINBLANK') {
                 my $numerical = 1;
-                for (my $k=0; $k<@{$allanswers{$id}}; $k++) {
-                    if ($$settings{$id}{$allanswers{$id}[$k]}{text} =~ m/([^\d\.]|\.\.)/) {
-                        $numerical = 0;
+                if ($context eq 'DOCS') {
+                    $numerical = 0;
+                } else {
+                    for (my $k=0; $k<@{$allanswers{$id}}; $k++) {
+                        if ($$settings{$id}{$allanswers{$id}[$k]}{text} =~ m/([^\d\.]|\.\.)/) {
+                            $numerical = 0;
+                        }
                     }
                 }
                 if ($numerical) {
@@ -1844,7 +1895,8 @@
                         $numans = ($max + $min)/2;
                         $tol = 100*($max - $min)/($numans*2);
                     }
-                    $output .= qq|
+                    if ($context eq 'CSTR') {
+                        $output .= qq|
 <numericalresponse answer="$numans">
         <responseparam type="tolerance" default="$tol%" name="tol" description="Numerical Tolerance" />
         <responseparam name="sig" type="int_range,0-16" default="0,15" description="Significant Figures"
@@ -1852,64 +1904,79 @@
         <textline />
 </numericalresponse>
 |;
+                    }
                 } else {
-                    if (@{$allanswers{$id}} == 1) {
-                        $output .= qq|
+                    if ($context eq 'CSTR') {
+                        if (@{$allanswers{$id}} == 1) {
+                            $output .= qq|
 <stringresponse answer="$$settings{$id}{$allanswers{$id}[0]}{text}" type="ci">
 <textline>
 </textline>
 </stringresponse>
 |;
-                    } else {
-                        my @answertext = ();
-                        for (my $k=0; $k<@{$allanswers{$id}}; $k++) {
-                            $$settings{$id}{$allanswers{$id}[$k]}{text} =~ s/\|/\|/g;
-                            push @answertext, $$settings{$id}{$allanswers{$id}[$k]}{text};
-                        }
-                        my $regexpans = join('|',@answertext);
-                        $regexpans = '/^('.$regexpans.')\b/';
-                        $output .= qq|
+                        } else {
+                            my @answertext = ();
+                            for (my $k=0; $k<@{$allanswers{$id}}; $k++) {
+                                $$settings{$id}{$allanswers{$id}[$k]}{text} =~ s/\|/\|/g;
+                                push @answertext, $$settings{$id}{$allanswers{$id}[$k]}{text};
+                            }
+                            my $regexpans = join('|',@answertext);
+                            $regexpans = '/^('.$regexpans.')\b/';
+                            $output .= qq|
 <stringresponse answer="$regexpans" type="re">
 <textline>
 </textline>
 </stringresponse>
 |;
-                    }
+                        }
+                    } 
                 }
             } elsif ($$settings{$id}{class} eq "QUESTION_MATCH") {
-                $output .= qq|
+                if ($context eq 'CSTR') {
+                    $output .= qq|
 <matchresponse max="10" randomize="yes">
     <foilgroup>
         <itemgroup>
 |;
+                }
                 for (my $k=0; $k<@{$allchoices{$id}}; $k++) {
-                    $output .= qq|
+                    if ($context eq 'CSTR') {
+                        $output .= qq|
 <item name="$allchoices{$id}[$k]">
 <startouttext />$$settings{$id}{$allchoices{$id}[$k]}{text}<endouttext />
 </item>
                     |;
+                    }
                 }
-                $output .= qq|
+                if ($context eq 'CSTR') {
+                    $output .= qq|
         </itemgroup>
 |;
+                }
                 for (my $k=0; $k<@{$allanswers{$id}}; $k++) {
-                    $output .= qq|
+                    if ($context eq 'CSTR') {
+                        $output .= qq|
         <foil location="random" value="$$settings{$id}{$allanswers{$id}[$k]}{choice_id}" name="$allanswers{$id}[$k]">
          <startouttext />$$settings{$id}{$allanswers{$id}[$k]}{text}<endouttext />
         </foil>
 |;
+                    }
                 }
-                $output .= qq|
+                if ($context eq 'CSTR') {
+                    $output .= qq|
     </foilgroup>
 </matchresponse>
 |;
+                }
             }
         }
-        $output .= qq|</problem>
+        if ($context eq 'CSTR') {
+            $output .= qq|</problem>
 |;
-        open(PROB,">$newdir/$id.problem");
-        print PROB $output;
-        close PROB;
+            open(PROB,">$newdir/$id.problem");
+            print PROB $output;
+            close PROB;
+        }
     }
 }
 

--raeburn1102968069--