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

raeburn lon-capa-cvs@mail.lon-capa.org
Sat, 15 Apr 2006 16:44:57 -0000


This is a MIME encoded message

--raeburn1145119497
Content-Type: text/plain

raeburn		Sat Apr 15 12:44:57 2006 EDT

  Modified files:              
    /loncom/imspackages	imsprocessor.pm 
  Log:
  Modifications so WebCT Vista 4 learning modules are imported.  Change file name modifications so Spanish language characters are preserved in file names. 
  
  
--raeburn1145119497
Content-Type: text/plain
Content-Disposition: attachment; filename="raeburn-20060415124457.txt"

Index: loncom/imspackages/imsprocessor.pm
diff -u loncom/imspackages/imsprocessor.pm:1.39 loncom/imspackages/imsprocessor.pm:1.40
--- loncom/imspackages/imsprocessor.pm:1.39	Wed Apr  5 19:36:52 2006
+++ loncom/imspackages/imsprocessor.pm	Sat Apr 15 12:44:56 2006
@@ -2178,6 +2178,10 @@
         my ($tagname, $attr) = @_;
         push @state, $tagname;
         my @seq = ();
+        if ("@state" eq "questestinterop assessment") {
+            $$qzparams{$res}{id} = $attr->{'ident'};
+            $$qzparams{$res}{title} = $attr->{'title'};
+        }
         if ("@state" eq "questestinterop assessment section itemref") {
             $id = $attr->{linkrefid};
             push(@{$allids},$id);
@@ -2186,7 +2190,6 @@
         if ("@state" eq "questestinterop assessment section selection_ordering order") {
            $$qzparams{$res}{order_type} = $attr->{order_type};
         }
-
      }, "tagname, attr"],
      text_h =>
      [sub {
@@ -2414,7 +2417,7 @@
             %{$$settings{$id}{$str_id}{$label}} = ();
             $$settings{$id}{$str_id}{$label}{fibtype} = $fibtype;
             if ($$settings{$id}{class} eq 'string') {
-                $$settings{$id}{text} .= '[blank]';
+                $$settings{$id}{text} .= '________';
             }
         }
         if ("@state" eq "questestinterop item presentation flow response_str render_fib response_label material mattext") { # Paragraph
@@ -2448,6 +2451,7 @@
             } elsif (($$settings{$id}{class} eq 'string') ||
                      ($$settings{$id}{class} eq 'shortanswer')) {
                 $label = $attr->{respident};
+                $$settings{$id}{$label}{case} = $attr->{'case'};
             } elsif ($$settings{$id}{class} eq 'match') {
                 $grp = $attr->{respident};
             }
@@ -3140,21 +3144,22 @@
         unless($$dbparse) {
             foreach my $res (sort keys %{$allquestions}) {
                 my $parent = $$allquestions{$res};
-                &parse_webctvista4_question($res,$docroot,$resources,$hrefs,$settings,\@allquestids,\%allanswers,\%allchoices,$parent,$catinfo);
+                &parse_webctvista4_question($res,$docroot,$resources,$hrefs,$qzdbsettings,\@allquestids,\%allanswers,\%allchoices,$parent,$catinfo);
             }
             &build_category_sequences($destdir,$catinfo,$sequencesfiles,$pagesfiles,$destresdir,$newdir,$cms,$total,$randompickflag,$context,$udom,$uname,$dirname,$cid,$cdom,$cnum,$qzdbsettings);
             $$dbparse = 1;
         }
-        &parse_webctvista4_assessment($res,$docroot,$hrefs,\@allids,\%qzparams);
+        &parse_webctvista4_assessment($res,$docroot,$$resources{$res}{file},\@allids,\%qzparams);
         if ($qzparams{$res}{numpick} < @allids) {
             $$randompicks{$$resources{$res}{revitm}} = $qzparams{$res}{numpick};
             $randompickflag = 1;
         }
     }
     my $dirtitle;
-    unless ($cms eq 'webctce4') {
+    unless ($cms eq 'webctce4' || $cms eq 'webctvista4') {
         $dirtitle = $$settings{'title'};
-        $dirtitle =~ s/\W//g;
+        $dirtitle =~ s/\s+/_/g;
+        $dirtitle =~ s/:/_/g;
         $dirtitle .= '_'.$res;
         if (!-e "$destdir/problems") {
             mkdir("$destdir/problems",0755);
@@ -3168,14 +3173,14 @@
     if ($cms eq 'webctce4') {
         &build_problem_container($cms,$dirtitle,$destdir,$container,$res,$total,$sequencesfiles,$pagesfiles,$randompickflag,$context,\@allids,$udom,$uname,$dirname,\$containerdir,$cid,$cdom,$cnum,$catinfo,$qzdbsettings);
     } else {
-        &build_problem_container($cms,$dirtitle,$destdir,$container,$res,$total,$sequencesfiles,$pagesfiles,$randompickflag,$context,\@allids,$udom,$uname,$dirname,\$containerdir,$cid,$cdom,$cnum,$catinfo,$settings);
+        &build_problem_container($cms,$dirtitle,$destdir,$container,$res,$total,$sequencesfiles,$pagesfiles,$randompickflag,$context,\@allids,$udom,$uname,$dirname,\$containerdir,$cid,$cdom,$cnum,$catinfo,$qzdbsettings,\%qzparams);
     }
     if ($cms eq 'bb5') {
         &write_bb5_questions(\@allids,$containerdir,$context,$settings,$dirname,$destdir,$res,\%allanswers,\%allchoices,$total,$newdir,$cid,$cdom,$cnum,$docroot);
     } elsif ($cms eq 'bb6') {
         &write_bb6_questions(\@allids,$containerdir,$context,$settings,$dirname,$destdir,$res,$total,$newdir,$cid,$cdom,$cnum,$docroot);
     } elsif ($cms eq 'webctvista4') {
-        &write_webct4_questions($cms,\@allquestids,$context,$settings,$dirname,\%allanswers,\%allchoices,$total,$cid,$cdom,$cnum,$destdir,$catinfo);
+        &write_webct4_questions($cms,\@allquestids,$context,$qzdbsettings,$dirname,\%allanswers,\%allchoices,$total,$cid,$cdom,$cnum,$destdir,$catinfo,$dirtitle);
     }
 }
 
@@ -3191,9 +3196,14 @@
     open($fh,">$destdir/sequences/question_database.sequence");
     push @{$sequencesfiles},'question_database.sequence';
     foreach my $category (sort keys %{$catinfo}) {
-        my $seqname = $$catinfo{$category}{title}.'_'.$category;
-        $seqname =~ s/\s/_/g;
-        $seqname =~ s/\W//g;
+        my $seqname;
+        if ($cms eq 'webct4ce') { 
+            $seqname = $$catinfo{$category}{title}.'_'.$category;
+        } else {
+            $seqname = $$catinfo{$category}{title};
+        }
+        $seqname =~ s/\s+/_/g;
+        $seqname =~ s/:/_/g;
         push(@{$sequencesfiles},$seqname.'.sequence');
         my $catsrc = "$destresdir/sequences/$seqname.sequence";
         if ($curr_id == 0) {
@@ -3231,28 +3241,35 @@
 }
 
 sub build_problem_container {
-    my ($cms,$dirtitle,$destdir,$container,$res,$total,$sequencesfiles,$pagesfiles,$randompickflag,$context,$allids,$udom,$uname,$dirname,$containerdir,$cid,$cdom,$cnum,$catinfo,$settings) = @_;
+    my ($cms,$dirtitle,$destdir,$container,$res,$total,$sequencesfiles,$pagesfiles,$randompickflag,$context,$allids,$udom,$uname,$dirname,$containerdir,$cid,$cdom,$cnum,$catinfo,$settings,$qzparams) = @_;
     my $seqdir = "$destdir/sequences";
     my $pagedir = "$destdir/pages";
     my $curr_id = 0;
     my $next_id = 1;
     my $fh;
+    my $mapname = $res;
+    if ($cms eq 'webctvista4' && ref($$qzparams{$res}) eq 'HASH') {
+        if ($$qzparams{$res}{title}) {
+            $mapname = $$qzparams{$res}{title};
+            $mapname =~ s/\s+/_/g;
+        }
+    }
     if ($container eq 'pool' || $randompickflag || $container eq 'database') {
-        $$containerdir = $seqdir.'/'.$res.'.sequence';
+        $$containerdir = $seqdir.'/'.$mapname.'.sequence';
         if (!-e "$seqdir") {
             mkdir("$seqdir",0770);
         }
         open($fh,">$$containerdir");
         $$total{seq} ++;
-        push @{$sequencesfiles},$res.'.sequence';
+        push @{$sequencesfiles},$mapname.'.sequence';
     } else {
-        $$containerdir = $pagedir.'/'.$res.'.page';
+        $$containerdir = $pagedir.'/'.$mapname.'.page';
         if (!-e "$destdir/pages") {
             mkdir("$destdir/pages",0770);
         }
         open($fh,">$$containerdir");
         $$total{page} ++;
-        push @{$pagesfiles},$res.'.page';
+        push @{$pagesfiles},$mapname.'.page';
     }
     print $fh qq|<map>
 |;
@@ -3265,16 +3282,26 @@
             } else {
                 $probtitle{$id} = $$settings{title};
             }
-            $probtitle{$id} =~ s/\s/_/g;
-            $probtitle{$id} =~ s/\W//g;
+            $probtitle{$id} =~ s/\s+/_/g;
+            $probtitle{$id} =~ s/:/_/g;
             $probtitle{$id} .= '_'.$id;
         }
-        if ($cms eq 'webctce4' && $container ne 'database') {
+        if (($cms eq 'webct4ce' && $container ne 'database') ||
+            ($cms eq 'webctvista4'))   {
+            my $probdir;
             my $catid = $$settings{$$allids[0]}{category};
-            my $probdir = $$catinfo{$catid}{title}.'_'.$catid;
-            $probdir =~ s/\s/_/g;
-            $probdir =~ s/\W//g;
-            $probsrc = "$dirname/problems/$probdir/$probtitle{$$allids[0]}.problem";
+            if ($catid) {
+                if ($cms eq 'webct4ce') { 
+                    $probdir = $$catinfo{$catid}{title}.'_'.$catid;
+                } else {
+                    $probdir = $$catinfo{$catid}{title};
+                }
+                $probdir =~ s/\s+/_/g;
+                $probdir =~ s/:/_/g;
+                $probsrc = "$dirname/problems/$probdir/$probtitle{$$allids[0]}.problem";
+            } else {
+                $probsrc="$dirname/problems/$dirtitle/$probtitle{$$allids[0]}.problem";
+            }
         } else {
             $probsrc="$dirname/problems/$dirtitle/$probtitle{$$allids[0]}.problem";
         }
@@ -3293,12 +3320,22 @@
             $curr_id = $j;
             $next_id = $curr_id + 1;
             if ($context eq 'CSTR') {
-                if ($cms eq 'webctce4' && $container ne 'database') {
+                if (($cms eq 'webctce4' && $container ne 'database') ||
+                    ($cms eq 'webctvista4')) {
+                    my $probdir;
                     my $catid = $$settings{$$allids[$j]}{category};
-                    my $probdir = $$catinfo{$catid}{title}.'_'.$catid;
-                    $probdir =~ s/\s/_/g;
-                    $probdir =~ s/\W//g;
-                    $probsrc = "$dirname/problems/$probdir/$probtitle{$$allids[$j]}.problem";
+                    if ($catid) {
+                        if ($cms eq 'webct4ce') {
+                            $probdir = $$catinfo{$catid}{title}.'_'.$catid;
+                        } else {
+                            $probdir = $$catinfo{$catid}{title};
+                        }
+                        $probdir =~ s/\s/_/g;
+                        $probdir =~ s/:/_/g;
+                        $probsrc = "$dirname/problems/$probdir/$probtitle{$$allids[$j]}.problem";
+                    } else {
+                        $probsrc = "$dirname/problems/$dirtitle/$probtitle{$$allids[$j]}.problem";
+                    }
                 } else {
                     $probsrc = "$dirname/problems/$dirtitle/$probtitle{$$allids[$j]}.problem";
                 }
@@ -3696,7 +3733,7 @@
 }
 
 sub write_webct4_questions {
-    my ($cms,$alldbquestids,$context,$settings,$dirname,$allanswers,$allchoices,$total,$cid,$cdom,$cnum,$destdir,$catinfo) = @_;
+    my ($cms,$alldbquestids,$context,$settings,$dirname,$allanswers,$allchoices,$total,$cid,$cdom,$cnum,$destdir,$catinfo,$dirtitle) = @_;
     my $qnum = 0;
     foreach my $id (@{$alldbquestids}) {
         $qnum ++;
@@ -4265,10 +4302,19 @@
             }
         }
         if ($context eq 'CSTR') {
+            my $probdir;
             my $catid = $$settings{$id}{category};
-            my $probdir = $$catinfo{$catid}{title}.'_'.$catid;
-            $probdir =~ s/\s/_/g;
-            $probdir =~ s/\W//g;
+            if ($catid) {
+                if ($cms eq 'webct4ce') {
+                    $probdir = $$catinfo{$catid}{title}.'_'.$catid;
+                } else {
+                    $probdir = $$catinfo{$catid}{title};
+                }
+                $probdir =~ s/\s/_/g;
+                $probdir =~ s/://g;
+            } elsif (defined($dirtitle)) {
+                $probdir = $dirtitle;
+            }
             if (!-e "$destdir/problems/$probdir") {
                 mkdir("$destdir/problems/$probdir",0755);
             }
@@ -4276,8 +4322,8 @@
 |;
             my $title = $$settings{$id}{title};
             $title =~ s/\s/_/g;
-            $title =~ s/\W//g;
-            $title .= '_'.$id; 
+            $title =~ s/:/_/g;
+            $title .= '_'.$id;
             open(PROB,">$destdir/problems/$probdir/$title.problem");
             print PROB $output;
             close PROB;

--raeburn1145119497--