--- loncom/imspackages/imsprocessor.pm 2004/08/05 23:21:49 1.10
+++ loncom/imspackages/imsprocessor.pm 2004/12/23 18:38:45 1.13
@@ -41,10 +41,8 @@ sub ims_config {
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 @@ sub ims_config {
quiz => 'QUIZ',
survey => 'FORM',
);
-
@{$$cmsmap{angel}{doc}} = ('FILE','PAGE');
-
-
%{$areaname} = (
announce => 'Announcements',
board => 'Discussion Boards',
@@ -67,7 +62,6 @@ sub ims_config {
survey => 'Surveys',
users => 'Enrollment',
);
-
}
sub create_tempdir {
@@ -173,7 +167,6 @@ sub process_manifest {
$$resources{'toplevel'}{type} = 'resource/x-bb-document';
}
-
unless (-e "$tempdir/imsmanifest.xml") {
return 'nomanifest';
}
@@ -259,14 +252,14 @@ sub process_manifest {
}
} 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 @@ sub process_manifest {
push @{$$hrefs{$identifier}},$1;
} elsif ($attr->{href} =~ m/^Icons\\icon(\w+)\.gif/) {
$$resources{$identifier}{type} = $1;
- }
+ }
}
}
}, "tagname, attr"],
@@ -401,7 +394,7 @@ sub process_coursefile {
}
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 @@ sub process_resinfo {
}
} 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}} = ();
@@ -498,7 +491,6 @@ sub process_resinfo {
}
if (@{$surveys}) {
$$items{'Top'}{'contentscount'} ++;
-
}
}
@@ -687,7 +679,6 @@ sub build_structure {
if (@{$surveys} > 0) {
&process_specials($context,'surveys',$surveys,\$topnum,$$items{'Top'}{contentscount},$destdir,$udom,$uname,$cdom,$crs,$timenow,$newdir,$timestamp,$resinfo,\$seqtext{'Top'},$pagesfiles,$seqfiles,$topurls,$topnames);
}
-
$seqtext{'Top'} .= "\n";
open(TOPFILE,">$destdir/sequences/Top.sequence");
print TOPFILE $seqtext{'Top'};
@@ -1511,7 +1502,7 @@ sub addposting {
}
# ---------------------------------------------------------------- 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 +1558,7 @@ sub process_assessment {
}
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 +1658,99 @@ sub process_assessment {
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||;
+ close($fh);
+ my $qnum = 0;
foreach my $id (@allids) {
- my $output = qq|
+ $qnum ++;
+ my $output;
+ my $permcontainer = $containerdir;
+ $permcontainer =~ s#/home/httpd/html/userfiles#uploaded#;
+ my $symb = $cid.'.'.$permcontainer.'___'.$qnum.'___lib/templates/simpleproblem.problem.0.';
+ my %resourcedata = ();
+ for (my $i=0; $i<10; $i++) {
+ my $iter = $i+1;
+ $resourcedata{$symb.'text'.$iter} = "";
+ $resourcedata{$symb.'value'.$iter} = "unused";
+ $resourcedata{$symb.'position'.$iter} = "random";
+ }
+ $resourcedata{$symb.'randomize'} = 'yes';
+ $resourcedata{$symb.'maxfoils'} = 10;
+ if ($context eq 'CSTR') {
+ $output = qq|
|;
+ }
$$total{prob} ++;
if ($$settings{$id}{class} eq "QUESTION_ESSAY") {
- $output .= qq|$$settings{$id}{text}
+ if ($context eq 'CSTR') {
+ $output .= qq|$$settings{$id}{text}
@@ -1716,112 +1758,194 @@ sub process_assessment {
$$settings{$id}{feedbackcorr}
|;
+ } else {
+ $resourcedata{$symb.'questiontext'} = $$settings{$id}{text};
+ $resourcedata{$symb.'hiddenparts'} = '!essay';
+ $resourcedata{$symb.'questiontype'} = 'essay';
+ }
} else {
- $output .= qq|$$settings{$id}{text}\n|;
- if ( defined($$settings{$id}{image}) ) {
+ if ($context eq 'CSTR') {
+ $output .= qq|$$settings{$id}{text}\n|;
+ } else {
+ $resourcedata{$symb.'questiontext'} = $$settings{$id}{text};
+ }
+ my ($image,$imglink,$url);
+ if ( defined($$settings{$id}{image}) ) {
if ( $$settings{$id}{style} eq 'embed' ) {
- $output .= qq|
|;
+ $image = qq|
|;
} else {
- $output .= qq|
Link to file
|;
+ $imglink = qq|
Link to file
|;
}
}
if ( defined($$settings{$id}{url}) ) {
- $output .= qq|
$$settings{$id}{name}
|;
+ $url = qq|
$$settings{$id}{name}
|;
+ }
+ if ($context eq 'CSTR') {
+ $output .= $image.$imglink.$url.'
+';
+ } else {
+ $resourcedata{$symb.'questiontext'} .= $image.$imglink.$url;
}
- $output .= qq|
-|;
if ($$settings{$id}{class} eq 'QUESTION_MULTIPLECHOICE') {
my $numfoils = @{$allanswers{$id}};
- $output .= qq|
+ if ($context eq 'CSTR') {
+ $output .= qq|
|;
+ } else {
+ $resourcedata{$symb.'hiddenparts'} = '!radio';
+ $resourcedata{$symb.'questiontype'} = 'radio';
+ $resourcedata{$symb.'maxfoils'} = $numfoils;
+ }
for (my $k=0; $k<@{$allanswers{$id}}; $k++) {
+ my $iter = $k+1;
$output .= "
|;
+ $ans_image .= qq|
|;
} else {
- $output .= qq|
Link to file
|;
+ $ans_link .= qq|
Link to file
|;
}
}
- $output .= qq|\n|;
+ $output .= $ans_image.$ans_link.''."\n";
+ $resourcedata{$symb.'text'.$iter} .= $ans_image.$ans_link;
}
- chomp($output);
- $output .= qq|
+ if ($context eq 'CSTR') {
+ chomp($output);
+ $output .= qq|
|;
+ }
} elsif ($$settings{$id}{class} eq 'QUESTION_TRUEFALSE') {
my $numfoils = @{$allanswers{$id}};
- $output .= qq|
+ if ($context eq 'CSTR') {
+ $output .= qq|
|;
+ } else {
+ $resourcedata{$symb.'maxfoils'} = $numfoils;
+ $resourcedata{$symb.'hiddenparts'} = '!radio';
+ $resourcedata{$symb.'questiontype'} = 'radio';
+ }
for (my $k=0; $k<@{$allanswers{$id}}; $k++) {
+ my $iter = $k+1;
$output .= " \n";
+ $resourcedata{$symb.'text'.$iter} = $$settings{$id}{$allanswers{$id}[$k]}{text};
}
- chomp($output);
- $output .= qq|
+ if ($context eq 'CSTR') {
+ chomp($output);
+ $output .= qq|
|;
+ }
} elsif ($$settings{$id}{class} eq 'QUESTION_MULTIPLEANSWER') {
my $numfoils = @{$allanswers{$id}};
- $output .= qq|
+ if ($context eq 'CSTR') {
+ $output .= qq|
|;
+ } else {
+ $resourcedata{$symb.'newopt'} = '';
+ $resourcedata{$symb.'delopt'} = '';
+ $resourcedata{$symb.'options'} = "('True','False')";
+ $resourcedata{$symb.'hiddenparts'} = '!option';
+ $resourcedata{$symb.'questiontype'} = 'option';
+ $resourcedata{$symb.'maxfoils'} = $numfoils;
+ }
for (my $k=0; $k<@{$allanswers{$id}}; $k++) {
+ my $iter = $k+1;
$output .= " \n";
+ $resourcedata{$symb.'text'.$iter} = $$settings{$id}{$allanswers{$id}[$k]}{text};
}
- chomp($output);
- $output .= qq|
+ if ($context eq 'CSTR') {
+ chomp($output);
+ $output .= qq|
|;
+ }
} elsif ($$settings{$id}{class} eq 'QUESTION_ORDER') {
my $numfoils = @{$allanswers{$id}};
- $output .= qq|
+ my @allorder = ();
+ if ($context eq 'CSTR') {
+ $output .= qq|
|;
+ } else {
+ $resourcedata{$symb.'newopt'} = '';
+ $resourcedata{$symb.'delopt'} = '';
+ $resourcedata{$symb.'hiddenparts'} = '!option';
+ $resourcedata{$symb.'questiontype'} = 'option';
+ $resourcedata{$symb.'maxfoils'} = $numfoils;
+ }
for (my $k=0; $k<@{$allanswers{$id}}; $k++) {
- $output .= " ".$$settings{$id}{$allanswers{$id}[$k]}{text}."\n";
+ if ($context eq 'CSTR') {
+ $output .= " ".$$settings{$id}{$allanswers{$id}[$k]}{text}."\n";
+ } else {
+ my $iter = $k+1;
+ $resourcedata{$symb.'text'.$iter} = $$settings{$id}{$allanswers{$id}[$k]}{text};
+ if (!grep/^$$settings{$id}{$allanswers{$id}[$k]}{order}$/,@allorder) {
+ push @allorder, $$settings{$id}{$allanswers{$id}[$k]}{order};
+ }
+ }
}
- chomp($output);
- $output .= qq|
+ if ($context eq 'CSTR') {
+ chomp($output);
+ $output .= qq|
|;
+ } else {
+ @allorder = sort {$a <=> $b} @allorder;
+ $resourcedata{$symb.'options'} = "('".join("','",@allorder)."')";
+ }
} 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 +1968,8 @@ sub process_assessment {
$numans = ($max + $min)/2;
$tol = 100*($max - $min)/($numans*2);
}
- $output .= qq|
+ if ($context eq 'CSTR') {
+ $output .= qq|
|;
+ }
} else {
- if (@{$allanswers{$id}} == 1) {
- $output .= qq|
+ if ($context eq 'DOCS') {
+ $resourcedata{$symb.'hiddenparts'} = '!string';
+ $resourcedata{$symb.'questiontype'} = 'string';
+ $resourcedata{$symb.'maxfoils'} = @{$allanswers{$id}};
+ $resourcedata{$symb.'hiddenparts'} = '!string';
+ $resourcedata{$symb.'stringtype'} = 'ci';
+ $resourcedata{$symb.'stringanswer'} = $$settings{$id}{$allanswers{$id}[0]}{text};
+ } else {
+ if (@{$allanswers{$id}} == 1) {
+ $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|
+ } 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|
|;
- }
+ }
+ }
}
} elsif ($$settings{$id}{class} eq "QUESTION_MATCH") {
- $output .= qq|
+ my @allmatchers = ();
+ my %matchtext = ();
+ if ($context eq 'CSTR') {
+ $output .= qq|
|;
+ } else {
+ $resourcedata{$symb.'newopt'} = '';
+ $resourcedata{$symb.'delopt'} = '';
+ $resourcedata{$symb.'hiddenparts'} = '!option';
+ $resourcedata{$symb.'questiontype'} = 'option';
+ $resourcedata{$symb.'maxfoils'} = @{$allanswers{$id}};
+ }
for (my $k=0; $k<@{$allchoices{$id}}; $k++) {
- $output .= qq|
+ if ($context eq 'CSTR') {
+ $output .= qq|
-
$$settings{$id}{$allchoices{$id}[$k]}{text}
|;
+ } else {
+ if (!grep/^$$settings{$id}{$allchoices{$id}[$k]}{text}$/,@allmatchers) {
+ push @allmatchers, $$settings{$id}{$allchoices{$id}[$k]}{text};
+ $matchtext{$allchoices{$id}[$k]} = $$settings{$id}{$allchoices{$id}[$k]}{text};
+ }
+ }
}
- $output .= qq|
+ if ($context eq 'CSTR') {
+ $output .= qq|
|;
+ }
for (my $k=0; $k<@{$allanswers{$id}}; $k++) {
- $output .= qq|
+ if ($context eq 'CSTR') {
+ $output .= qq|
$$settings{$id}{$allanswers{$id}[$k]}{text}
|;
+ } else {
+ my $iter = $k+1;
+ $resourcedata{$symb.'value'.$iter} = $matchtext{$$settings{$id}{$allanswers{$id}[$k]}{choice_id}};
+ $resourcedata{$symb.'text'.$iter} = $$settings{$id}{$allanswers{$id}[$k]}{text};
+ }
}
- $output .= qq|
+ if ($context eq 'CSTR') {
+ $output .= qq|
|;
+ } else {
+ $resourcedata{$symb.'options'} = "('".join("','",@allmatchers)."')";
+ }
}
}
- $output .= qq|
+ if ($context eq 'CSTR') {
+ $output .= qq|
|;
- open(PROB,">$newdir/$id.problem");
- print PROB $output;
- close PROB;
+ open(PROB,">$newdir/$id.problem");
+ print PROB $output;
+ close PROB;
+ } else {
+# put %resourcedata;
+ my $reply=&Apache::lonnet::cput
+ ('resourcedata',\%resourcedata,$cdom,$cnum);
+ }
}
}