version 1.3, 2004/02/24 15:21:16
|
version 1.4, 2004/02/29 00:55:39
|
Line 1
|
Line 1
|
package Apache::imsimport; |
package Apache::imsimport; |
|
|
use strict; |
use strict; |
use Apache::Constants qw(:common :http :methods); |
use Apache::Constants qw(:common :http :methods); |
use Apache::loncacc; |
use Apache::loncacc; |
use Apache::loncommon(); |
use Apache::loncommon(); |
use Apache::Log(); |
use Apache::Log(); |
use Apache::lonnet; |
use Apache::lonnet; |
use HTML::Parser; |
use HTML::Parser; |
use HTML::Entities(); |
use HTML::Entities(); |
use Apache::lonlocal; |
use Apache::lonlocal; |
use Apache::lonupload; |
use Apache::lonupload; |
use File::Basename(); |
use File::Basename(); |
# ---------------------------------------------------------------- Display Control |
# ---------------------------------------------------------------- Display Control |
sub display_control { |
sub display_control { # figure out what page we're on and where we're heading. |
# figure out what page we're on and where we're heading. |
|
my $page = $ENV{'form.page'}; |
my $page = $ENV{'form.page'}; |
my $command = $ENV{'form.go'}; |
my $command = $ENV{'form.go'}; |
my $current_page = &calculate_page($page,$command); |
my $current_page = &calculate_page($page,$command); |
return $current_page; |
return $current_page; |
} |
} |
|
|
# CALCULATE THE CURRENT PAGE |
# ---------------------------------------------------------------- Calculate Page |
sub calculate_page($$) { |
sub calculate_page($$) { |
my ($prev,$dir) = @_; |
my ($prev,$dir) = @_; |
return 0 if $prev eq ''; # start with first page |
return 0 if $prev eq ''; |
return $prev + 1 if $dir eq 'NextPage'; |
return $prev + 1 if $dir eq 'NextPage'; |
return $prev - 1 if $dir eq 'PreviousPage'; |
return $prev - 1 if $dir eq 'PreviousPage'; |
return $prev if $dir eq 'ExitPage'; |
return $prev if $dir eq 'ExitPage'; |
Line 305 Please choose a destination LON-CAPA dir
|
Line 304 Please choose a destination LON-CAPA dir
|
END_OF_ONE |
END_OF_ONE |
} |
} |
|
|
# ---------------------------------------------------------------- Expand bb5 |
# ---------------------------------------------------------------- Expand Blackboard 5 imsmanifest |
sub expand_bb5 { |
sub expand_bb5 { |
my ($r,$uname,$udom,$fn,$page,$bb_crs,$bb_cdom,$bb_handling,$users_crs,$users_cdom,$users_handling) = @_; |
my ($r,$uname,$udom,$fn,$page,$bb_crs,$bb_cdom,$bb_handling,$users_crs,$users_cdom,$users_handling,$announce_handling) = @_; |
my @state = (); |
my @state = (); |
my @seq = "Top"; |
my @seq = "Top"; |
my $lastitem; |
my $lastitem; |
|
my %revitm = (); |
my %resnum = (); |
my %resnum = (); |
my %title = (); |
my %title = (); |
my %filepath = (); |
my %filepath = (); |
Line 328 sub expand_bb5 {
|
Line 328 sub expand_bb5 {
|
my @timestamp = (); |
my @timestamp = (); |
my @boards = (); |
my @boards = (); |
my @groups = (); |
my @groups = (); |
|
my @announcements = (); |
|
my @quizzes = (); |
|
my @surveys = (); |
my $board_count = 0; |
my $board_count = 0; |
my $board_id = time; |
my $board_id = time; |
my $totseq = 0; |
my $totseq = 0; |
my $totpage = 0; |
my $totpage = 0; |
|
my $totquiz = 0; |
|
my $totsurv = 0; |
my $totprob = 0; |
my $totprob = 0; |
my $docroot = $ENV{'form.newdir'}; |
my $docroot = $ENV{'form.newdir'}; |
if (!-e "$docroot/temp") { |
if (!-e "$docroot/temp") { |
Line 349 sub expand_bb5 {
|
Line 354 sub expand_bb5 {
|
print "$_<br />"; |
print "$_<br />"; |
} |
} |
close(OUTPUT); |
close(OUTPUT); |
} |
} else { |
|
return 'nozip'; |
|
} |
|
|
|
unless (-e "$docroot/temp/imsmanifest.xml") { |
|
return 'nomanifest'; |
|
} |
my $xmlfile = $docroot.'/temp/imsmanifest.xml'; |
my $xmlfile = $docroot.'/temp/imsmanifest.xml'; |
my $p = HTML::Parser->new |
my $p = HTML::Parser->new |
( |
( |
Line 374 sub expand_bb5 {
|
Line 384 sub expand_bb5 {
|
if (("@state" eq $searchstr) && (@state > 3)) { |
if (("@state" eq $searchstr) && (@state > 3)) { |
my $itm = $attr->{identifier}; |
my $itm = $attr->{identifier}; |
$resnum{$itm} = $attr->{identifierref}; |
$resnum{$itm} = $attr->{identifierref}; |
|
$revitm{$resnum{$itm}} = $itm; |
$title{$itm} = $attr->{title}; |
$title{$itm} = $attr->{title}; |
|
$contentscount{$itm} = 0; |
if ($start > @seq) { |
if ($start > @seq) { |
unless ($lastitem eq '') { |
unless ($lastitem eq '') { |
push @seq, $lastitem; |
push @seq, $lastitem; |
Line 430 sub expand_bb5 {
|
Line 442 sub expand_bb5 {
|
$p->parse_file($xmlfile); |
$p->parse_file($xmlfile); |
$p->eof; |
$p->eof; |
|
|
my $topnum = 0; |
|
my $destdir = $docroot; |
my $destdir = $docroot; |
|
my $seqstem ="/res/$udom/$uname/$newdir/sequences"; |
if (!-e "$destdir") { |
if (!-e "$destdir") { |
mkdir("$destdir",0755); |
mkdir("$destdir",0755); |
} |
} |
Line 476 sub expand_bb5 {
|
Line 488 sub expand_bb5 {
|
} elsif ($type{$key} eq "resource/x-bb-discussionboard") { |
} elsif ($type{$key} eq "resource/x-bb-discussionboard") { |
%{$resinfo{$key}} = (); |
%{$resinfo{$key}} = (); |
unless ($bb_handling eq 'ignore') { |
unless ($bb_handling eq 'ignore') { |
$contentscount{Top} ++; |
|
push @boards, $key; |
push @boards, $key; |
$timestamp[$board_count] = $board_id; |
$timestamp[$board_count] = $board_id; |
&process_db($key,$docroot,$destdir,$board_id,$bb_crs,$bb_cdom,$bb_handling,$uname,\%{$resinfo{$key}}); |
&process_db($key,$docroot,$destdir,$board_id,$bb_crs,$bb_cdom,$bb_handling,$uname,\%{$resinfo{$key}}); |
$board_id ++; |
$board_id ++; |
$board_count ++; |
$board_count ++; |
} |
} |
} elsif ($type{$key} eq "resource/x-bb-announcement") { |
|
%{$resinfo{$key}} = (); |
|
&process_announce($key,$docroot,$destdir,\%{$resinfo{$key}}); |
|
} elsif ($type{$key} eq "assessment/x-bb-pool") { |
} elsif ($type{$key} eq "assessment/x-bb-pool") { |
%{$resinfo{$key}} = (); |
%{$resinfo{$key}} = (); |
&process_assessment($key,$docroot,'pool',$dirname,$destdir,\%{$resinfo{$key}},\$totpage,\$totprob); |
&process_assessment($key,$docroot,'pool',$dirname,$destdir,\%{$resinfo{$key}},\$totpage,\$totprob,$udom,$uname); |
} elsif ($type{$key} eq "assessment/x-bb-quiz") { |
} elsif ($type{$key} eq "assessment/x-bb-quiz") { |
%{$resinfo{$key}} = (); |
%{$resinfo{$key}} = (); |
&process_assessment($key,$docroot,'quiz',$dirname,$destdir,\%{$resinfo{$key}},\$totpage,\$totprob); |
&process_assessment($key,$docroot,'quiz',$dirname,$destdir,\%{$resinfo{$key}},\$totpage,\$totprob,$udom,$uname); |
|
push @quizzes, $key; |
|
|
} elsif ($type{$key} eq "assessment/x-bb-survey") { |
} elsif ($type{$key} eq "assessment/x-bb-survey") { |
%{$resinfo{$key}} = (); |
%{$resinfo{$key}} = (); |
&process_assessment($key,$docroot,'survey',$dirname,$destdir,\%{$resinfo{$key}},\$totpage,\$totprob); |
&process_assessment($key,$docroot,'survey',$dirname,$destdir,\%{$resinfo{$key}},\$totpage,\$totprob,$udom,$uname); |
|
push @surveys, $key; |
} elsif ($type{$key} eq "assessment/x-bb-group") { |
} elsif ($type{$key} eq "assessment/x-bb-group") { |
%{$resinfo{$key}} = (); |
%{$resinfo{$key}} = (); |
$contentscount{Top} ++; |
|
push @groups, $key; |
push @groups, $key; |
&process_group($key,$docroot,$destdir,\%{$resinfo{$key}}); |
&process_group($key,$docroot,$destdir,\%{$resinfo{$key}}); |
} elsif ($type{$key} eq "resource/x-bb-user") { |
} elsif ($type{$key} eq "resource/x-bb-user") { |
Line 505 sub expand_bb5 {
|
Line 515 sub expand_bb5 {
|
unless ($users_handling eq 'ignore') { |
unless ($users_handling eq 'ignore') { |
&process_user($key,$docroot,$destdir,\%{$resinfo{$key}},$users_crs,$users_cdom,$users_handling); |
&process_user($key,$docroot,$destdir,\%{$resinfo{$key}},$users_crs,$users_cdom,$users_handling); |
} |
} |
|
} elsif ($type{$key} eq "resource/x-bb-announcement") { |
|
unless ($announce_handling eq 'ignore') { |
|
push @announcements, $key; |
|
%{$resinfo{$key}} = (); |
|
&process_announce($key,$docroot,$destdir,\%{$resinfo{$key}},\%resinfo,$seqstem,\%revitm); |
|
} |
} |
} |
} |
} |
|
if (@announcements) { |
|
$contentscount{Top} ++; |
|
} |
|
if (@boards) { |
|
$contentscount{Top} ++; |
|
} |
|
if (@quizzes) { |
|
$contentscount{Top} ++; |
|
$totquiz = @quizzes; |
|
} |
|
if (@surveys) { |
|
$contentscount{Top} ++; |
|
$totsurv = @surveys; |
|
} |
|
|
|
my $topnum = 0; |
my $nextnum = 0; |
my $nextnum = 0; |
open(TOPFILE,">$destdir/sequences/ims_import.sequence"); |
open(TOPFILE,">$destdir/sequences/ims_import.sequence"); |
print TOPFILE "<map>\n"; |
print TOPFILE "<map>\n"; |
Line 522 sub expand_bb5 {
|
Line 553 sub expand_bb5 {
|
my %seqflag = (); |
my %seqflag = (); |
my %seqcount = (); |
my %seqcount = (); |
|
|
|
if (@announcements) { |
|
&process_specials('announcements',\@announcements,\$topnum,\%contentscount,$destdir,$udom,$uname,$newdir,\@timestamp,\%resinfo); |
|
} |
|
|
foreach my $key (sort keys %resnum) { |
foreach my $key (sort keys %resnum) { |
$pageflag{$key} = 0; |
$pageflag{$key} = 0; |
$seqflag{$key} = 0; |
$seqflag{$key} = 0; |
Line 726 sub expand_bb5 {
|
Line 761 sub expand_bb5 {
|
} |
} |
} |
} |
} |
} |
if (@boards > 0) { |
|
$topnum ++; |
if ($fileopen) { |
print TOPFILE qq|<resource id="$topnum" src="/res/$udom/$uname/$newdir/sequences/bulletinboards.sequence" title="Course Bulletin Boards"|; |
if ($areacount == 0) { |
$nextnum = $topnum +1; |
print AREAFILE qq|<resource id="1" src="" type="start"> |
if ($topnum == 1) { |
<link from="1" to="2" index="1"></link> |
print TOPFILE qq| type="start"></resource> |
<resource id="2" src="" type="finish">\n|; |
<link from="$topnum" to="$nextnum" index="$topnum"></link>\n|; |
} elsif ($areacount == 1) { |
if ($topnum == $contentscount{'Top'}) { |
print AREAFILE qq|<resource id="2" src="" type="finish">\n|; |
print TOPFILE qq|<resource id="$nextnum" src="" type="finish"></resource>\n|; |
|
} |
|
} else { |
|
if ($topnum == $contentscount{'Top'}) { |
|
print TOPFILE qq| type="finish"></resource>\n|; |
|
} else { |
|
print TOPFILE qq|></resource> |
|
<link from="$topnum" to="$nextnum" index="$topnum"></link>\n|; |
|
} |
|
} |
|
open(BOARD,">$destdir/sequences/bulletinboards.sequence"); |
|
print BOARD qq|<map> |
|
<resource id="1" src="/adm/$udom/$uname/$timestamp[0]/bulletinboard" title="$resinfo{$boards[0]}{title}" type="start"></resource> |
|
<link from="1" to="2" index="1"></link>|; |
|
if (@boards == 1) { |
|
print BOARD qq| |
|
<resource id="2" src="" type="finish"></resource>\n|; |
|
} else { |
} else { |
for (my $i=1; $i<@boards; $i++) { |
print AREAFILE qq|$lastentry\n|; |
print BOARD qq|<resource id="$i" src="/adm/$udom/$uname/$timestamp[$i]/bulletinboard" title="$resinfo{$boards[$i]}{title}"|; |
|
my $curr = $i+1; |
|
my $next = $i+2; |
|
if (@boards == $i) { |
|
print BOARD qq| type="finish"></resource>\n|; |
|
} else { |
|
print BOARD qq|></resource> |
|
<link from="$curr" to="$next" index="$next">\n|; |
|
} |
|
} |
|
} |
} |
print BOARD qq|</map>|; |
print AREAFILE "</map>\n"; |
close(BOARD); |
close(AREAFILE); |
|
$fileopen = 0; |
|
} |
|
if (@boards > 0) { |
|
&process_specials('boards',\@boards,\$topnum,\%contentscount,$destdir,$udom,$uname,$newdir,\@timestamp,\%resinfo); |
|
} |
|
if (@quizzes) { |
|
&process_specials('quizzes',\@quizzes,\$topnum,\%contentscount,$destdir,$udom,$uname,$newdir,\@timestamp,\%resinfo); |
|
} |
|
if (@surveys) { |
|
&process_specials('surveys',\@surveys,\$topnum,\%contentscount,$destdir,$udom,$uname,$newdir,\@timestamp,\%resinfo); |
} |
} |
print TOPFILE "</map>"; |
print TOPFILE "</map>"; |
close(TOPFILE); |
close(TOPFILE); |
Line 797 sub expand_bb5 {
|
Line 815 sub expand_bb5 {
|
close(PAGEFILE); |
close(PAGEFILE); |
} |
} |
} |
} |
system(" rm -r $docroot/temp"); |
system(" rm -r $docroot/temp"); # Need to add sanity checking |
return($totseq,$totpage,$totprob); |
return('ok',$totseq,$totpage,$board_count,$totquiz,$totsurv,$totprob); |
} |
} |
|
|
|
# ---------------------------------------------------------------- Process Blackboard specials - announcements, bulletin boards, quizzes and surveys |
|
sub process_specials { |
|
my ($type,$items,$topnum,$contentscount,$destdir,$udom,$uname,$newdir,$timestamp,$resinfo) = @_; |
|
my $src = ''; |
|
my $itemsrc = ''; |
|
my $nextnum = 0; |
|
my $seqstem = '/res/'.$udom.'/'.$uname.'/'.$newdir; |
|
my %seqnames = ( |
|
boards => 'bulletinboards', |
|
quizzes => 'quizzes', |
|
surveys => 'surveys', |
|
announcements => 'announcements', |
|
); |
|
my %seqtitles = ( |
|
boards => 'Course Bulletin Boards', |
|
quizzes => 'Course Quizzes', |
|
surveys => 'Course Surveys', |
|
announcements => 'Course Announcements', |
|
); |
|
$$topnum ++; |
|
if ($type eq 'announcements') { |
|
$src = "$seqstem/pages/$seqnames{$type}.page"; |
|
} else { |
|
$src = "$seqstem/sequences/$seqnames{$type}.sequence"; |
|
} |
|
print TOPFILE qq|<resource id="$$topnum" src="$src" title="$seqtitles{$type}"|; |
|
$nextnum = $$topnum +1; |
|
if ($$topnum == 1) { |
|
print TOPFILE qq| type="start"></resource> |
|
<link from="$$topnum" to="$nextnum" index="$$topnum"></link>\n|; |
|
if ($$topnum == $$contentscount{'Top'}) { |
|
print TOPFILE qq|<resource id="$nextnum" src="" type="finish"></resource>\n|; |
|
} |
|
} else { |
|
if ($$topnum == $$contentscount{'Top'}) { |
|
print TOPFILE qq| type="finish"></resource>\n|; |
|
} else { |
|
print TOPFILE qq|></resource> |
|
<link from="$$topnum" to="$nextnum" index="$$topnum"></link>\n|; |
|
} |
|
} |
|
|
|
if ($type eq "announcements") { |
|
open(ITEM,">$destdir/pages/$seqnames{$type}.page"); |
|
} else { |
|
open(ITEM,">$destdir/sequences/$seqnames{$type}.sequence"); |
|
} |
|
|
|
if ($type eq 'boards') { |
|
$itemsrc = "/adm/$udom/$uname/$$timestamp[0]/bulletinboard"; |
|
} elsif ($type eq 'announcements') { |
|
$itemsrc = "/res/$udom/$uname/$newdir/resfiles/$$items[0].html"; |
|
} else { |
|
$itemsrc = "/res/$udom/$uname/$newdir/pages/$$items[0].page"; |
|
} |
|
print ITEM qq|<map> |
|
<resource id="1" src="$itemsrc" title="$$resinfo{$$items[0]}{title}" type="start"></resource> |
|
<link from="1" to="2" index="1"></link>|; |
|
if (@{$items} == 1) { |
|
print ITEM qq| |
|
<resource id="2" src="" type="finish"></resource>\n|; |
|
} else { |
|
for (my $i=1; $i<@{$items}; $i++) { |
|
my $curr = $i+1; |
|
my $next = $i+2; |
|
if ($type eq 'boards') { |
|
$itemsrc = "/adm/$udom/$uname/$$timestamp[$i]/bulletinboard"; |
|
} elsif ($type eq 'announcements') { |
|
$itemsrc = "/res/$udom/$uname/$newdir/resfiles/$$items[$i].html"; |
|
} else { |
|
$itemsrc = "/res/$udom/$uname/$newdir/pages/$$items[$i].page"; |
|
} |
|
print ITEM qq|<resource id="$curr" src="$itemsrc" title="$$resinfo{$$items[$i]}{title}"|; |
|
if (@{$items} == $i+1) { |
|
print ITEM qq| type="finish"></resource>\n|; |
|
} else { |
|
print ITEM qq|></resource> |
|
<link from="$curr" to="$next" index="$next">\n|; |
|
} |
|
} |
|
} |
|
print ITEM qq|</map>|; |
|
close(ITEM); |
|
} |
|
|
|
# ---------------------------------------------------------------- Process Blackboard users |
sub process_user { |
sub process_user { |
my ($res,$docroot,$destdir,$settings,$user_crs,$user_cdom,$user_handling) = @_; |
my ($res,$docroot,$destdir,$settings,$user_crs,$user_cdom,$user_handling) = @_; |
my $xmlfile = $docroot."/temp/".$res.".dat"; |
my $xmlfile = $docroot."/temp/".$res.".dat"; |
Line 883 sub process_user {
|
Line 986 sub process_user {
|
} |
} |
} |
} |
|
|
|
# ---------------------------------------------------------------- Process Blackboard groups |
sub process_group { |
sub process_group { |
my ($res,$docroot,$destdir,$settings) = @_; |
my ($res,$docroot,$destdir,$settings) = @_; |
my $xmlfile = $docroot."/".$res.".dat"; |
my $xmlfile = $docroot."/".$res.".dat"; |
Line 933 sub process_group {
|
Line 1037 sub process_group {
|
$p->eof; |
$p->eof; |
} |
} |
|
|
|
# ---------------------------------------------------------------- Process Blackboard Staff |
sub process_staff { |
sub process_staff { |
my ($res,$docroot,$dirname,$destdir,$settings) = @_; |
my ($res,$docroot,$dirname,$destdir,$settings) = @_; |
my $xmlfile = $docroot."/temp/".$res.".dat"; |
my $xmlfile = $docroot."/temp/".$res.".dat"; |
Line 1112 $staffentry
|
Line 1217 $staffentry
|
close(FILE); |
close(FILE); |
} |
} |
|
|
|
# ---------------------------------------------------------------- Process Blackboard Links |
sub process_link { |
sub process_link { |
my ($res,$docroot,$dirname,$destdir,$settings) = @_; |
my ($res,$docroot,$dirname,$destdir,$settings) = @_; |
my $xmlfile = $docroot."/temp/".$res.".dat"; |
my $xmlfile = $docroot."/temp/".$res.".dat"; |
Line 1129 sub process_link {
|
Line 1235 sub process_link {
|
$$settings{textcolor} = $attr->{value}; |
$$settings{textcolor} = $attr->{value}; |
} elsif (@state eq "EXTERNALLINK DESCRIPTION FLAGS ISHTML") { |
} elsif (@state eq "EXTERNALLINK DESCRIPTION FLAGS ISHTML") { |
$$settings{ishtml} = $attr->{value}; |
$$settings{ishtml} = $attr->{value}; |
} elsif ("@state" eq "EXTERNALLINKS FLAGS ISAVAILABLE" ) { |
} elsif ("@state" eq "EXTERNALLINK FLAGS ISAVAILABLE" ) { |
$$settings{isavailable} = $attr->{value}; |
$$settings{isavailable} = $attr->{value}; |
} elsif ("@state" eq "EXTERNALLINKS FLAGS LAUNCHINNEWWINDOW" ) { |
} elsif ("@state" eq "EXTERNALLINK FLAGS LAUNCHINNEWWINDOW" ) { |
$$settings{newwindow} = $attr->{value}; |
$$settings{newwindow} = $attr->{value}; |
} elsif ("@state" eq "EXTERNALLINKS FLAGS ISFOLDER" ) { |
} elsif ("@state" eq "EXTERNALLINK FLAGS ISFOLDER" ) { |
$$settings{isfolder} = $attr->{value}; |
$$settings{isfolder} = $attr->{value}; |
} elsif ("@state" eq "EXTERNALLINKS POSITION" ) { |
} elsif ("@state" eq "EXTERNALLINK POSITION" ) { |
$$settings{position} = $attr->{value}; |
$$settings{position} = $attr->{value}; |
} elsif ("@state" eq "EXTERNALLINKS URL" ) { |
} elsif ("@state" eq "EXTERNALLINK URL" ) { |
$$settings{url} = $attr->{value}; |
$$settings{url} = $attr->{value}; |
} |
} |
}, "tagname, attr"], |
}, "tagname, attr"], |
text_h => |
text_h => |
[sub { |
[sub { |
my ($text) = @_; |
my ($text) = @_; |
if ("@state" eq "EXTERNALLINKS DESCRIPTION TEXT") { |
if ("@state" eq "EXTERNALLINK DESCRIPTION TEXT") { |
$$settings{text} = $text; |
$$settings{text} = $text; |
} |
} |
}, "dtext"], |
}, "dtext"], |
Line 1196 $$settings{text}
|
Line 1302 $$settings{text}
|
close(FILE); |
close(FILE); |
} |
} |
|
|
|
# ---------------------------------------------------------------- Process Blackboard Discussion Boards |
sub process_db { |
sub process_db { |
my ($res,$docroot,$destdir,$timestamp,$crs,$cdom,$handling,$uname,$settings) = @_; |
my ($res,$docroot,$destdir,$timestamp,$crs,$cdom,$handling,$uname,$settings) = @_; |
my $xmlfile = $docroot."/temp/".$res.".dat"; |
my $xmlfile = $docroot."/temp/".$res.".dat"; |
Line 1206 sub process_db {
|
Line 1313 sub process_db {
|
if ($crs =~ m/^(\d)(\d)(\d)/) { |
if ($crs =~ m/^(\d)(\d)(\d)/) { |
$longcrs = $1.'/'.$2.'/'.$3.'/'.$crs; |
$longcrs = $1.'/'.$2.'/'.$3.'/'.$crs; |
} |
} |
my %threads; # all quotes, keyed by message ID |
my %threads; # all threads, keyed by message ID |
my $msg_id; # the current message ID |
my $msg_id; # the current message ID |
my %message; # the current message being accumulated for $msg_id |
my %message; # the current message being accumulated for $msg_id |
|
|
Line 1381 sub process_db {
|
Line 1488 sub process_db {
|
} |
} |
} |
} |
|
|
|
# ---------------------------------------------------------------- Add Posting to Bulletin Board |
sub addposting { |
sub addposting { |
my ($symb,$contrib,$cdom,$crs)=@_; |
my ($symb,$contrib,$cdom,$crs)=@_; |
my $status=''; |
my $status=''; |
if (($symb) && ($$contrib{message})) { |
if (($symb) && ($$contrib{message})) { |
my $crsdom = $cdom.'_'.$crs; |
my $crsdom = $cdom.'_'.$crs; |
&Apache::lonnet::store($contrib,$symb,$crsdom,$cdom,$crs); |
&Apache::lonnet::store($contrib,$symb,$crsdom,$cdom,$crs); |
my %storenewentry=($symb => time); |
my %storenewentry=($symb => time); |
&Apache::lonnet::put('discussiontimes',\%storenewentry,$cdom,$crs); |
&Apache::lonnet::put('discussiontimes',\%storenewentry,$cdom,$crs); |
} |
} |
my %record=&Apache::lonnet::restore('_discussion'); |
my %record=&Apache::lonnet::restore('_discussion'); |
my ($temp)=keys %record; |
my ($temp)=keys %record; |
Line 1403 sub addposting {
|
Line 1511 sub addposting {
|
} |
} |
return $status; |
return $status; |
} |
} |
|
# ---------------------------------------------------------------- Process Blackboard Assessments - pools, quizzes, surveys |
sub process_assessment { |
sub process_assessment { |
my ($res,$docroot,$container,$dirname,$destdir,$settings,$totpageref,$totprobref) = @_; |
my ($res,$docroot,$container,$dirname,$destdir,$settings,$totpageref,$totprobref,,$udom,$uname) = @_; |
my $xmlfile = $docroot."/temp/".$res.".dat"; |
my $xmlfile = $docroot."/temp/".$res.".dat"; |
# print "XML file is $xmlfile\n"; |
# print "XML file is $xmlfile\n"; |
my @state = (); |
my @state = (); |
my @allids = (); |
my @allids = (); |
my %allanswers = (); |
my %allanswers = (); |
my %allchoices = (); |
my %allchoices = (); |
my $id; # the current question ID |
my $resdir = ''; |
my $answer_id; # the current answer ID |
if ($docroot =~ m|public_html/(.+)$|) { |
my %toptag = ( pool => 'POOL', |
$resdir = $1; |
|
} |
|
my $id; # the current question ID |
|
my $answer_id; # the current answer ID |
|
my %toptag = ( pool => 'POOL', |
quiz => 'ASSESSMENT', |
quiz => 'ASSESSMENT', |
survey => 'ASSESSMENT' |
survey => 'ASSESSMENT' |
); |
); |
# print "process_assessment is called, incoming: $res,$docroot,$container,$destdir\n"; |
|
|
|
my $p = HTML::Parser->new |
my $p = HTML::Parser->new |
( |
( |
xml_mode => 1, |
xml_mode => 1, |
start_h => |
start_h => |
Line 1431 sub process_assessment {
|
Line 1542 sub process_assessment {
|
my @seq = (); |
my @seq = (); |
my $class; |
my $class; |
my $state_str = join(" ",@state); |
my $state_str = join(" ",@state); |
# print "Current state is $state_str\n"; |
|
if ($container eq "pool") { |
if ($container eq "pool") { |
if ("@state" eq "POOL TITLE") { |
if ("@state" eq "POOL TITLE") { |
$$settings{title} = $attr->{value}; |
$$settings{title} = $attr->{value}; |
# print "Title is $attr->{value}\n"; |
|
} |
} |
} else { |
} else { |
if ("@state" eq "ASSESSMENT TITLE") { |
if ("@state" eq "ASSESSMENT TITLE") { |
Line 1472 sub process_assessment {
|
Line 1581 sub process_assessment {
|
@{$$settings{$id}{correctanswer}} = (); |
@{$$settings{$id}{correctanswer}} = (); |
} elsif ( ($state[0] eq $toptag{$container}) && ($state[-1] =~ m/^QUESTION_(\w+)$/) ) { |
} elsif ( ($state[0] eq $toptag{$container}) && ($state[-1] =~ m/^QUESTION_(\w+)$/) ) { |
$id = $attr->{id}; |
$id = $attr->{id}; |
} elsif ( ($state[0] eq $toptag{$container}) && ($state[1] =~ m/^QUESTION_(\w+)$/) && ($state[2] eq "BODY") && ($state[3] eq "FLAGS") && ($state[4] eq "ISHTML") ) { |
} elsif ( ($state[0] eq $toptag{$container}) && ($state[1] =~ m/^QUESTION_(\w+)$/) && ($state[2] eq "BODY") && ($state[3] eq "FLAGS") ) { |
$$settings{$id}{html} = $attr->{value}; |
if ($state[4] eq "ISHTML") { |
} elsif ( ($state[0] eq $toptag{$container}) && ($state[1] =~ m/^QUESTION_(\w+)$/) && ($state[2] eq "BODY") && ($state[3] eq "FLAGS") && ($state[4] eq "ISNEWLINELITERAL") ) { |
$$settings{$id}{html} = $attr->{value}; |
$$settings{$id}{newline} = $attr->{value}; |
} elsif ($state[4] eq "ISNEWLINELITERAL") { |
|
$$settings{$id}{newline} = $attr->{value}; |
|
} |
} elsif ( ($state[0] eq $toptag{$container}) && ($state[1] =~ m/^QUESTION_(\w+)$/) && ($state[2] eq "IMAGE") ) { |
} elsif ( ($state[0] eq $toptag{$container}) && ($state[1] =~ m/^QUESTION_(\w+)$/) && ($state[2] eq "IMAGE") ) { |
$$settings{$id}{image} = $attr->{value}; |
$$settings{$id}{image} = $attr->{value}; |
$$settings{$id}{style} = $attr->{style}; |
$$settings{$id}{style} = $attr->{style}; |
Line 1498 sub process_assessment {
|
Line 1609 sub process_assessment {
|
$$settings{$id}{$answer_id}{position} = $attr->{position}; |
$$settings{$id}{$answer_id}{position} = $attr->{position}; |
$$settings{$id}{$answer_id}{placement} = $attr->{placement}; |
$$settings{$id}{$answer_id}{placement} = $attr->{placement}; |
$$settings{$id}{$answer_id}{type} = 'choice'; |
$$settings{$id}{$answer_id}{type} = 'choice'; |
} elsif ( ($state[0] eq $toptag{$container}) && ($state[1] =~ m/^QUESTION_(\w+)$/) && ($state[2] eq "ANSWER") && ($state[3] eq "IMAGE") ) { |
} elsif ( ($state[0] eq $toptag{$container}) && ($state[1] =~ m/^QUESTION_(\w+)$/) && ($state[2] eq "ANSWER") ) { |
$$settings{$id}{$answer_id}{image} = $attr->{value}; |
if ($state[3] eq "IMAGE") { |
$$settings{$id}{$answer_id}{style} = $attr->{style}; |
$$settings{$id}{$answer_id}{image} = $attr->{value}; |
} elsif ( ($state[0] eq $toptag{$container}) && ($state[1] =~ m/^QUESTION_(\w+)$/) && ($state[2] eq "ANSWER") && ($state[3] eq "URL") ) { |
$$settings{$id}{$answer_id}{style} = $attr->{style}; |
$$settings{$id}{$answer_id}{url} = $attr->{value}; |
} elsif ($state[3] eq "URL") { |
} elsif ( ($state[0] eq $toptag{$container}) && ($state[1] =~ m/^QUESTION_(\w+)$/) && ($state[2] eq "CHOICE") && ($state[3] eq "IMAGE") ) { |
$$settings{$id}{$answer_id}{url} = $attr->{value}; |
$$settings{$id}{$answer_id}{image} = $attr->{value}; |
} |
$$settings{$id}{$answer_id}{style} = $attr->{style}; |
} elsif ( ($state[0] eq $toptag{$container}) && ($state[1] =~ m/^QUESTION_(\w+)$/) && ($state[2] eq "CHOICE") ) { |
} elsif ( ($state[0] eq $toptag{$container}) && ($state[1] =~ m/^QUESTION_(\w+)$/) && ($state[2] eq "CHOICE") && ($state[3] eq "URL") ) { |
if ($state[3] eq "IMAGE") { |
$$settings{$id}{$answer_id}{url} = $attr->{value}; |
$$settings{$id}{$answer_id}{image} = $attr->{value}; |
|
$$settings{$id}{$answer_id}{style} = $attr->{style}; |
|
} elsif ($state[3] eq "URL") { |
|
$$settings{$id}{$answer_id}{url} = $attr->{value}; |
|
} |
} elsif ( ($state[0] eq $toptag{$container}) && ($state[1] =~ m/^QUESTION_(\w+)$/) && ($state[2] eq "GRADABLE") && ($state[3] eq "CORRECTANSWER") ) { |
} elsif ( ($state[0] eq $toptag{$container}) && ($state[1] =~ m/^QUESTION_(\w+)$/) && ($state[2] eq "GRADABLE") && ($state[3] eq "CORRECTANSWER") ) { |
my $corr_answer = $attr->{answer_id}; |
my $corr_answer = $attr->{answer_id}; |
push @{$$settings{$id}{correctanswer}}, $corr_answer; |
push @{$$settings{$id}{correctanswer}}, $corr_answer; |
# print "Answer $corr_answer for question $id is correct\n"; |
|
my $type = $1; |
my $type = $1; |
if ($type eq 'TRUEFALSE') { |
if ($type eq 'TRUEFALSE') { |
$$settings{$id}{$corr_answer}{answer_position} = $attr->{position}; |
$$settings{$id}{$corr_answer}{answer_position} = $attr->{position}; |
Line 1550 sub process_assessment {
|
Line 1664 sub process_assessment {
|
pop @state; |
pop @state; |
}, "tagname"], |
}, "tagname"], |
); |
); |
$p->unbroken_text(1); |
$p->unbroken_text(1); |
$p->parse_file($xmlfile); |
$p->parse_file($xmlfile); |
$p->eof; |
$p->eof; |
|
|
my $dirtitle = $$settings{'title'}; |
my $dirtitle = $$settings{'title'}; |
$dirtitle =~ s/\W//g; |
$dirtitle =~ s/\W//g; |
$dirtitle .= '_'.$res; |
$dirtitle .= '_'.$res; |
if (!-e "$destdir/problems/$dirtitle") { |
if (!-e "$destdir/problems/$dirtitle") { |
mkdir("$destdir/problems/$dirtitle",0755); |
mkdir("$destdir/problems/$dirtitle",0755); |
} |
} |
my $newdir = "$destdir/problems/$dirtitle"; |
my $newdir = "$destdir/problems/$dirtitle"; |
my $pagedir = "$destdir/pages"; |
my $pagedir = "$destdir/pages"; |
my $curr_id = 0; |
my $curr_id = 0; |
my $next_id = 0; |
my $next_id = 1; |
unless ($container eq 'pool') { |
unless ($container eq 'pool') { |
open(PAGEFILE,">$pagedir/$res.page"); |
open(PAGEFILE,">$pagedir/$res.page"); |
print PAGEFILE qq|<map> |
print PAGEFILE qq|<map> |
|; |
|; |
$$totpageref ++; |
$$totpageref ++; |
} |
print PAGEFILE qq|<resource id="1" src="/res/$udom/$uname/$resdir/problems/$dirtitle/$allids[0].problem" type="start"></resource>|; |
foreach my $id (@allids) { |
if (@allids == 1) { |
$curr_id ++; |
print PAGEFILE qq| |
$next_id = $curr_id + 1; |
<link from="1" to="2" index="1"></link> |
if ($curr_id == 0) { |
|
print PAGEFILE qq|<resource id="1" src="$newdir/$id.problem" type="start"></resource>\n|; |
|
} else { |
|
print PAGEFILE qq| |
|
<link from="$curr_id" to="$next_id" index="$curr_id"></link> |
|
<resource id="$curr_id" src="$newdir/$id.problem"|; |
|
$curr_id ++; |
|
$next_id = $curr_id + 1; |
|
if ($curr_id == @allids) { |
|
print PAGEFILE qq| type="finish"></resource>\n|; |
|
} else { |
|
print PAGEFILE qq|></resource>|; |
|
} |
|
} |
|
# print "Current ID is $id, type is $$settings{$id}{class} \n"; |
|
if (@allids == 1) { |
|
print PAGEFILE qq|<link from="1" to="2" index="1"></link> |
|
<resource id="2" src="" type="finish">\n|; |
<resource id="2" src="" type="finish">\n|; |
} |
|
|
|
my $output = qq|<problem> |
|
|; |
|
$$totprobref ++; |
|
if ($$settings{$id}{class} eq "QUESTION_ESSAY") { |
|
$output .= qq|<startouttext />$$settings{$id}{text}<endouttext /> |
|
<essayresponse> |
|
<textfield></textfield> |
|
</essayresponse> |
|
<postanswerdate> |
|
$$settings{$id}{feedbackcorr} |
|
</postanswerdate> |
|
|; |
|
} else { |
|
$output .= qq|<startouttext />$$settings{$id}{text}\n|; |
|
if ( defined($$settings{$id}{image}) ) { |
|
if ( $$settings{$id}{style} eq 'embed' ) { |
|
$output .= qq|<br /><img src="$dirname/resfiles/$res/$$settings{$id}{image}" /><br />|; |
|
} else { |
} else { |
$output .= qq|<br /><a href="$dirname/resfiles/$res/$$settings{$id}{image}">Link to file</a><br />|; |
for (my $j=1; $j<@allids; $j++) { |
|
$curr_id = $j; |
|
$next_id = $curr_id + 1; |
|
print PAGEFILE 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>|; |
|
} |
|
} |
} |
} |
|
print PAGEFILE qq|</map>|; |
|
close(PAGEFILE); |
} |
} |
if ( defined($$settings{$id}{url}) ) { |
foreach my $id (@allids) { |
$output .= qq|<br /><a href="$$settings{$id}{url}">$$settings{$id}{name}</a><br />|; |
my $output = qq|<problem> |
} |
|; |
$output .= qq| |
$$totprobref ++; |
<endouttext />|; |
if ($$settings{$id}{class} eq "QUESTION_ESSAY") { |
if ($$settings{$id}{class} eq 'QUESTION_MULTIPLECHOICE') { |
$output .= qq|<startouttext />$$settings{$id}{text}<endouttext /> |
my $numfoils = @{$allanswers{$id}}; |
<essayresponse> |
$output .= qq| |
<textfield></textfield> |
<radiobuttonresponse max="$numfoils" randomize="yes"> |
</essayresponse> |
<foilgroup> |
<postanswerdate> |
|; |
$$settings{$id}{feedbackcorr} |
for (my $k=0; $k<@{$allanswers{$id}}; $k++) { |
</postanswerdate> |
$output .= " <foil name=\"foil".$k."\" value=\""; |
|; |
if (grep/^$allanswers{$id}[$k]$/,@{$$settings{$id}{correctanswer}}) { |
} else { |
$output .= "true\" location=\""; |
$output .= qq|<startouttext />$$settings{$id}{text}\n|; |
} else { |
if ( defined($$settings{$id}{image}) ) { |
$output .= "false\" location=\""; |
if ( $$settings{$id}{style} eq 'embed' ) { |
} |
$output .= qq|<br /><img src="$dirname/resfiles/$res/$$settings{$id}{image}" /><br />|; |
if (lc ($allanswers{$id}[$k]) =~ m/^\s?([Aa]ll)|([Nn]one)\sof\sthe\sabove\.?/) { |
|
$output .= "bottom\""; |
|
} else { |
|
$output .= "random\""; |
|
} |
|
$output .= "\><startouttext />".$$settings{$id}{$allanswers{$id}[$k]}{text}; |
|
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 />|; |
|
} else { |
} else { |
$output .= qq|<br /><a href="$dirname/resfiles/$res/$$settings{$id}{$allanswers{$id}[$k]}{image}" />Link to file</a><br/>|; |
$output .= qq|<br /><a href="$dirname/resfiles/$res/$$settings{$id}{image}">Link to file</a><br />|; |
} |
} |
} |
} |
$output .= qq|<endouttext /></foil>\n|; |
if ( defined($$settings{$id}{url}) ) { |
} |
$output .= qq|<br /><a href="$$settings{$id}{url}">$$settings{$id}{name}</a><br />|; |
chomp($output); |
} |
$output .= qq| |
$output .= qq| |
</foilgroup> |
<endouttext />|; |
</radiobuttonresponse> |
if ($$settings{$id}{class} eq 'QUESTION_MULTIPLECHOICE') { |
|; |
my $numfoils = @{$allanswers{$id}}; |
} elsif ($$settings{$id}{class} eq 'QUESTION_TRUEFALSE') { |
$output .= qq| |
my $numfoils = @{$allanswers{$id}}; |
<radiobuttonresponse max="$numfoils" randomize="yes"> |
# print "Number of foils is $numfoils\n"; |
<foilgroup> |
$output .= qq| |
|; |
|
for (my $k=0; $k<@{$allanswers{$id}}; $k++) { |
|
$output .= " <foil name=\"foil".$k."\" value=\""; |
|
if (grep/^$allanswers{$id}[$k]$/,@{$$settings{$id}{correctanswer}}) { |
|
$output .= "true\" location=\""; |
|
} else { |
|
$output .= "false\" location=\""; |
|
} |
|
if (lc ($allanswers{$id}[$k]) =~ m/^\s?([Aa]ll)|([Nn]one)\sof\sthe\sabove\.?/) { |
|
$output .= "bottom\""; |
|
} else { |
|
$output .= "random\""; |
|
} |
|
$output .= "\><startouttext />".$$settings{$id}{$allanswers{$id}[$k]}{text}; |
|
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 />|; |
|
} else { |
|
$output .= qq|<br /><a href="$dirname/resfiles/$res/$$settings{$id}{$allanswers{$id}[$k]}{image}" />Link to file</a><br/>|; |
|
} |
|
} |
|
$output .= qq|<endouttext /></foil>\n|; |
|
} |
|
chomp($output); |
|
$output .= qq| |
|
</foilgroup> |
|
</radiobuttonresponse> |
|
|; |
|
} elsif ($$settings{$id}{class} eq 'QUESTION_TRUEFALSE') { |
|
my $numfoils = @{$allanswers{$id}}; |
|
$output .= qq| |
<radiobuttonresponse max="$numfoils" randomize="yes"> |
<radiobuttonresponse max="$numfoils" randomize="yes"> |
<foilgroup> |
<foilgroup> |
|; |
|; |
for (my $k=0; $k<@{$allanswers{$id}}; $k++) { |
for (my $k=0; $k<@{$allanswers{$id}}; $k++) { |
$output .= " <foil name=\"foil".$k."\" value=\""; |
$output .= " <foil name=\"foil".$k."\" value=\""; |
if (grep/^$allanswers{$id}[$k]$/,@{$$settings{$id}{correctanswer}}) { |
if (grep/^$allanswers{$id}[$k]$/,@{$$settings{$id}{correctanswer}}) { |
$output .= "true\" location=\"random\""; |
$output .= "true\" location=\"random\""; |
} else { |
} else { |
$output .= "false\" location=\"random\""; |
$output .= "false\" location=\"random\""; |
} |
} |
$output .= "\><startouttext />".$$settings{$id}{$allanswers{$id}[$k]}{text}."<endouttext /></foil>\n"; |
$output .= "\><startouttext />".$$settings{$id}{$allanswers{$id}[$k]}{text}."<endouttext /></foil>\n"; |
} |
} |
chomp($output); |
chomp($output); |
$output .= qq| |
$output .= qq| |
</foilgroup> |
</foilgroup> |
</radiobuttonresponse> |
</radiobuttonresponse> |
|; |
|; |
} elsif ($$settings{$id}{class} eq 'QUESTION_MULTIPLEANSWER') { |
} elsif ($$settings{$id}{class} eq 'QUESTION_MULTIPLEANSWER') { |
my $numfoils = @{$allanswers{$id}}; |
my $numfoils = @{$allanswers{$id}}; |
# print "Number of foils is $numfoils\n"; |
$output .= qq| |
$output .= qq| |
|
<optionresponse max="$numfoils" randomize="yes"> |
<optionresponse max="$numfoils" randomize="yes"> |
<foilgroup options="('True','False')"> |
<foilgroup options="('True','False')"> |
|; |
|; |
for (my $k=0; $k<@{$allanswers{$id}}; $k++) { |
for (my $k=0; $k<@{$allanswers{$id}}; $k++) { |
$output .= " <foil name=\"foil".$k."\" value=\""; |
$output .= " <foil name=\"foil".$k."\" value=\""; |
if (grep/^$allanswers{$id}[$k]$/,@{$$settings{$id}{correctanswer}}) { |
if (grep/^$allanswers{$id}[$k]$/,@{$$settings{$id}{correctanswer}}) { |
$output .= "True\""; |
$output .= "True\""; |
} else { |
} else { |
$output .= "False\""; |
$output .= "False\""; |
} |
} |
$output .= "\><startouttext />".$$settings{$id}{$allanswers{$id}[$k]}{text}."<endouttext /></foil>\n"; |
$output .= "\><startouttext />".$$settings{$id}{$allanswers{$id}[$k]}{text}."<endouttext /></foil>\n"; |
} |
} |
chomp($output); |
chomp($output); |
$output .= qq| |
$output .= qq| |
</foilgroup> |
</foilgroup> |
</optionresponse> |
</optionresponse> |
|; |
|; |
} elsif ($$settings{$id}{class} eq 'QUESTION_ORDER') { |
} elsif ($$settings{$id}{class} eq 'QUESTION_ORDER') { |
my $numfoils = @{$allanswers{$id}}; |
my $numfoils = @{$allanswers{$id}}; |
$output .= qq| |
$output .= qq| |
<rankresponse max="$numfoils" randomize="yes"> |
<rankresponse max="$numfoils" randomize="yes"> |
<foilgroup> |
<foilgroup> |
|; |
|; |
for (my $k=0; $k<@{$allanswers{$id}}; $k++) { |
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"; |
$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); |
chomp($output); |
$output .= qq| |
$output .= qq| |
</foilgroup> |
</foilgroup> |
</rankresponse> |
</rankresponse> |
|; |
|; |
} elsif ($$settings{$id}{class} eq 'QUESTION_FILLINBLANK') { |
} elsif ($$settings{$id}{class} eq 'QUESTION_FILLINBLANK') { |
my $numerical = 1; |
my $numerical = 1; |
for (my $k=0; $k<@{$allanswers{$id}}; $k++) { |
for (my $k=0; $k<@{$allanswers{$id}}; $k++) { |
if ($$settings{$id}{$allanswers{$id}[$k]}{text} =~ m/([^\d\.]|\.\.)/) { |
if ($$settings{$id}{$allanswers{$id}[$k]}{text} =~ m/([^\d\.]|\.\.)/) { |
$numerical = 0; |
$numerical = 0; |
} |
|
} |
|
if ($numerical) { |
|
my $numans; |
|
my $tol; |
|
if (@{$allanswers{$id}} == 1) { |
|
$tol = 5; |
|
$numans = $$settings{$id}{$allanswers{$id}[0]}{text}; |
|
} else { |
|
my $min = $$settings{$id}{$allanswers{$id}[0]}{text}; |
|
my $max = $$settings{$id}{$allanswers{$id}[0]}{text}; |
|
for (my $k=1; $k<@{$allanswers{$id}}; $k++) { |
|
if ($$settings{$id}{$allanswers{$id}[$k]}{text} <= $min) { |
|
$min = $$settings{$id}{$allanswers{$id}[$k]}{text}; |
|
} |
|
if ($$settings{$id}{$allanswers{$id}[$k]}{text} >= $max) { |
|
$max = $$settings{$id}{$allanswers{$id}[$k]}{text}; |
|
} |
} |
} |
} |
$numans = ($max + $min)/2; |
if ($numerical) { |
$tol = 100*($max - $min)/($numans*2); |
my $numans; |
} |
my $tol; |
$output .= qq| |
if (@{$allanswers{$id}} == 1) { |
|
$tol = 5; |
|
$numans = $$settings{$id}{$allanswers{$id}[0]}{text}; |
|
} else { |
|
my $min = $$settings{$id}{$allanswers{$id}[0]}{text}; |
|
my $max = $$settings{$id}{$allanswers{$id}[0]}{text}; |
|
for (my $k=1; $k<@{$allanswers{$id}}; $k++) { |
|
if ($$settings{$id}{$allanswers{$id}[$k]}{text} <= $min) { |
|
$min = $$settings{$id}{$allanswers{$id}[$k]}{text}; |
|
} |
|
if ($$settings{$id}{$allanswers{$id}[$k]}{text} >= $max) { |
|
$max = $$settings{$id}{$allanswers{$id}[$k]}{text}; |
|
} |
|
} |
|
$numans = ($max + $min)/2; |
|
$tol = 100*($max - $min)/($numans*2); |
|
} |
|
$output .= qq| |
<numericalresponse answer="$numans"> |
<numericalresponse answer="$numans"> |
<responseparam type="tolerance" default="$tol%" name="tol" description="Numerical Tolerance" /> |
<responseparam type="tolerance" default="$tol%" name="tol" description="Numerical Tolerance" /> |
<responseparam name="sig" type="int_range,0-16" default="0,15" description="Significant Figures" |
<responseparam name="sig" type="int_range,0-16" default="0,15" description="Significant Figures" |
/> |
/> |
<textline /> |
<textline /> |
</numericalresponse> |
</numericalresponse> |
|; |
|; |
} else { |
} else { |
if (@{$allanswers{$id}} == 1) { |
if (@{$allanswers{$id}} == 1) { |
$output .= qq| |
$output .= qq| |
<stringresponse answer="$$settings{$id}{$allanswers{$id}[0]}{text}" type="ci"> |
<stringresponse answer="$$settings{$id}{$allanswers{$id}[0]}{text}" type="ci"> |
<textline> |
<textline> |
</textline> |
</textline> |
</stringresponse> |
</stringresponse> |
|; |
|; |
} else { |
} else { |
my @answertext = (); |
my @answertext = (); |
for (my $k=0; $k<@{$allanswers{$id}}; $k++) { |
for (my $k=0; $k<@{$allanswers{$id}}; $k++) { |
$$settings{$id}{$allanswers{$id}[$k]}{text} =~ s/\|/\|/g; |
$$settings{$id}{$allanswers{$id}[$k]}{text} =~ s/\|/\|/g; |
push @answertext, $$settings{$id}{$allanswers{$id}[$k]}{text}; |
push @answertext, $$settings{$id}{$allanswers{$id}[$k]}{text}; |
} |
} |
my $regexpans = join('|',@answertext); |
my $regexpans = join('|',@answertext); |
$regexpans = '/^('.$regexpans.')\b/'; |
$regexpans = '/^('.$regexpans.')\b/'; |
$output .= qq| |
$output .= qq| |
<stringresponse answer="$regexpans" type="re"> |
<stringresponse answer="$regexpans" type="re"> |
<textline> |
<textline> |
</textline> |
</textline> |
</stringresponse> |
</stringresponse> |
|; |
|; |
} |
} |
} |
} |
} elsif ($$settings{$id}{class} eq "QUESTION_MATCH") { |
} elsif ($$settings{$id}{class} eq "QUESTION_MATCH") { |
$output .= qq| |
$output .= qq| |
<matchresponse max="10" randomize="yes"> |
<matchresponse max="10" randomize="yes"> |
<foilgroup> |
<foilgroup> |
<itemgroup> |
<itemgroup> |
|; |
|; |
for (my $k=0; $k<@{$allchoices{$id}}; $k++) { |
for (my $k=0; $k<@{$allchoices{$id}}; $k++) { |
$output .= qq| |
$output .= qq| |
<item name="$allchoices{$id}[$k]"> |
<item name="$allchoices{$id}[$k]"> |
<startouttext />$$settings{$id}{$allchoices{$id}[$k]}{text}<endouttext /> |
<startouttext />$$settings{$id}{$allchoices{$id}[$k]}{text}<endouttext /> |
</item> |
</item> |
|; |
|; |
} |
} |
$output .= qq| |
$output .= qq| |
</itemgroup> |
</itemgroup> |
|; |
|; |
for (my $k=0; $k<@{$allanswers{$id}}; $k++) { |
for (my $k=0; $k<@{$allanswers{$id}}; $k++) { |
$output .= qq| |
$output .= qq| |
<foil location="random" value="$$settings{$id}{$allanswers{$id}[$k]}{choice_id}" name="$allanswers{$id}[$k]"> |
<foil location="random" value="$$settings{$id}{$allanswers{$id}[$k]}{choice_id}" name="$allanswers{$id}[$k]"> |
<startouttext />$$settings{$id}{$allanswers{$id}[$k]}{text}<endouttext /> |
<startouttext />$$settings{$id}{$allanswers{$id}[$k]}{text}<endouttext /> |
</foil> |
</foil> |
|; |
|; |
} |
} |
$output .= qq| |
$output .= qq| |
</foilgroup> |
</foilgroup> |
</matchresponse> |
</matchresponse> |
|; |
|
} |
|
} |
|
$output .= qq|</problem> |
|
|; |
|
open(PROB,">$newdir/$id.problem"); |
|
print PROB $output; |
|
close PROB; |
|
} |
|
unless ($container eq 'pool') { |
|
print PAGEFILE qq|</map>|; |
|
close(PAGEFILE); |
|
} |
|
} |
|
|
|
|
|
sub create_ess { |
|
my ($newdir,$qnid,$qsettings,$container) = @_; |
|
my $output; |
|
if ($container eq 'pool') { |
|
$output = qq|<problem> |
|
<startouttext />$$qsettings{text}<endouttext /> |
|
|; |
|; |
} else { |
} |
$output = qq|<problem> |
} |
<startouttext />$$qsettings{text}<endouttext /> |
|
|; |
|
} |
|
$output .= qq| |
|
<essayresponse> |
|
<textfield></textfield> |
|
</essayresponse> |
|
<postanswerdate> |
|
$$qsettings{feedbackcorr} |
|
</postanswerdate> |
|
|; |
|
if ($container eq 'pool') { |
|
$output .= qq|</problem> |
|
|; |
|
open(PROB,">$newdir/$qnid.problem"); |
|
print PROB $output; |
|
close PROB; |
|
} else { |
|
$output .= qq|</problem> |
$output .= qq|</problem> |
|; |
|; |
open(PROB,">$newdir/$qnid.problem"); |
open(PROB,">$newdir/$id.problem"); |
print PROB $output; |
print PROB $output; |
close PROB; |
close PROB; |
} |
} |
return; |
|
} |
} |
|
|
|
# ---------------------------------------------------------------- Process Blackboard Announcements |
sub process_announce { |
sub process_announce { |
my ($res,$docroot,$destdir,$settings) = @_; |
my ($res,$docroot,$destdir,$settings,$globalresref,$seqstem,$revitmref) = @_; |
my $xmlfile = $docroot."/temp/".$res.".dat"; |
my $xmlfile = $docroot."/temp/".$res.".dat"; |
my @state = (); |
my @state = (); |
my @assess = (); |
my @assess = (); |
my $id; |
my $id; |
my $p = HTML::Parser->new |
my $p = HTML::Parser->new |
( |
( |
xml_mode => 1, |
xml_mode => 1, |
start_h => |
start_h => |
Line 1861 sub process_announce {
|
Line 1932 sub process_announce {
|
if ("@state" eq "ANNOUNCEMENT TITLE") { |
if ("@state" eq "ANNOUNCEMENT TITLE") { |
$$settings{title} = $attr->{value}; |
$$settings{title} = $attr->{value}; |
$$settings{startassessment} = (); |
$$settings{startassessment} = (); |
# print "Title is $$settings{title}\n"; |
|
} elsif (@state eq "ANNOUNCEMENT DESCRIPTION FLAGS ISHTML") { |
} elsif (@state eq "ANNOUNCEMENT DESCRIPTION FLAGS ISHTML") { |
$$settings{ishtml} = $attr->{value}; |
$$settings{ishtml} = $attr->{value}; |
} elsif ("@state" eq "ANNOUNCEMENT DESCRIPTION FLAGS ISNEWLINELITERAL" ) { |
} elsif ("@state" eq "ANNOUNCEMENT DESCRIPTION FLAGS ISNEWLINELITERAL" ) { |
$$settings{isnewline} = $attr->{value}; |
$$settings{isnewline} = $attr->{value}; |
} elsif ("@state" eq "CONTENT ISPERMANENT" ) { |
} elsif ("@state" eq "ANNOUNCEMENT ISPERMANENT" ) { |
$$settings{ispermanent} = $attr->{value}; |
$$settings{ispermanent} = $attr->{value}; |
|
} elsif ("@state" eq "ANNOUNCEMENT DATES UPDATED") { |
|
$$settings{dates} = $attr->{value}; |
} elsif ("@state" eq "ANNOUNCEMENT FILES STARTASSESSMENT" ) { |
} elsif ("@state" eq "ANNOUNCEMENT FILES STARTASSESSMENT" ) { |
$id = $attr->{id}; |
$id = $attr->{id}; |
%{$$settings{startassessment}{$id}} = (); |
%{$$settings{startassessment}{$id}} = (); |
Line 1881 sub process_announce {
|
Line 1953 sub process_announce {
|
[sub { |
[sub { |
my ($text) = @_; |
my ($text) = @_; |
if ("@state" eq "ANNOUNCEMENT DESCRIPTION TEXT") { |
if ("@state" eq "ANNOUNCEMENT DESCRIPTION TEXT") { |
$$settings{text} = $text; |
$$settings{text} = $text; |
# print "TEXT $text\n"; |
|
} |
} |
}, "dtext"], |
}, "dtext"], |
end_h => |
end_h => |
Line 1891 sub process_announce {
|
Line 1962 sub process_announce {
|
pop @state; |
pop @state; |
}, "tagname"], |
}, "tagname"], |
); |
); |
$p->unbroken_text(1); |
$p->unbroken_text(1); |
$p->parse_file($xmlfile); |
$p->parse_file($xmlfile); |
$p->eof; |
$p->eof; |
|
|
if (defined($$settings{text})) { |
if (defined($$settings{text})) { |
if ($$settings{ishtml} eq "false") { |
if ($$settings{ishtml} eq "false") { |
if ($$settings{isnewline} eq "true") { |
if ($$settings{isnewline} eq "true") { |
$$settings{text} =~ s#\n#<br/>#g; |
$$settings{text} =~ s#\n#<br/>#g; |
} |
} |
} else { |
} else { |
$$settings{text} = &HTML::Entities::decode($$settings{text}); |
$$settings{text} = &HTML::Entities::decode($$settings{text}); |
} |
} |
} |
} |
|
|
if (@assess > 0) { |
if (@assess > 0) { |
foreach my $id (@assess) { |
foreach my $id (@assess) { |
$$settings{text} .= "Please use 'NAV' to locate the link to the folder of problems entitled -"; |
$$settings{text} = "A $$settings{startassessment}{$id}{assessment_type}, entitled $$globalresref{$$settings{startassessment}{$id}{assessment_id}}{title} is available. Click <a href='$seqstem/$$revitmref{$$settings{startassessment}{$id}{assessment_id}}.sequence'>here</a> to enter the folder the contains the problems in this assessment."; |
foreach my $key (keys %{$$settings{startassessment}{$id}}) { |
} |
# print STDERR "Quiz announcement - $id, key: $key, value: $$settings{startassessment}{$id}{$key}\n"; |
} |
} |
|
} |
|
} |
|
|
|
open(FILE,">$destdir/resfiles/$res.html"); |
open(FILE,">$destdir/resfiles/$res.html"); |
print FILE qq|<html> |
print FILE qq|<html> |
<head> |
<head> |
<title>$$settings{title}</title> |
<title>$$settings{title}</title> |
</head> |
</head> |
<body bgcolor='#ffffff'> |
<body bgcolor='#ffffff'> |
|
<table> |
|
<tr> |
|
<td bgcolor='#CCCCFF'>$$settings{title} - announcement date: $$settings{date}</td> |
|
</tr> |
|
</table> |
|
<br/> |
$$settings{text} |
$$settings{text} |
|; |
|; |
print FILE qq| |
print FILE qq| |
</body> |
</body> |
</html>|; |
</html>|; |
close(FILE); |
close(FILE); |
} |
} |
|
|
|
# ---------------------------------------------------------------- Process Blackboard Content |
sub process_content { |
sub process_content { |
my ($res,$docroot,$destdir,$settings,$dom,$user) = @_; |
my ($res,$docroot,$destdir,$settings,$dom,$user) = @_; |
my $xmlfile = $docroot."/temp/".$res.".dat"; |
my $xmlfile = $docroot."/temp/".$res.".dat"; |
my $destresdir = $destdir; |
my $destresdir = $destdir; |
$destresdir =~ s|/home/$user/public_html/|/res/$dom/$user/|; |
$destresdir =~ s|/home/$user/public_html/|/res/$dom/$user/|; |
my $filecount = 0; |
my $filecount = 0; |
my @state; |
my @allrelfiles = (); |
@{$$settings{files}} = (); |
my @state; |
my $p = HTML::Parser->new |
@{$$settings{files}} = (); |
|
my $p = HTML::Parser->new |
( |
( |
xml_mode => 1, |
xml_mode => 1, |
start_h => |
start_h => |
[sub { |
[sub { |
my ($tagname, $attr) = @_; |
my ($tagname, $attr) = @_; |
push @state, $tagname; |
push @state, $tagname; |
if (@state eq "CONTENT MAINDATA") { |
if (@state eq "CONTENT MAINDATA") { |
Line 1957 sub process_content {
|
Line 2033 sub process_content {
|
$$settings{isfolder} = $attr->{value}; |
$$settings{isfolder} = $attr->{value}; |
} elsif ("@state" eq "CONTENT FLAGS LAUNCHINNEWWINDOW" ) { |
} elsif ("@state" eq "CONTENT FLAGS LAUNCHINNEWWINDOW" ) { |
$$settings{newwindow} = $attr->{value}; |
$$settings{newwindow} = $attr->{value}; |
} elsif ("@state" eq "CONTENT FILES") { |
|
# @{$$settings{files}} = (); |
|
} elsif ("@state" eq "CONTENT FILES FILEREF") { |
} elsif ("@state" eq "CONTENT FILES FILEREF") { |
%{$$settings{files}[$filecount]} = (); |
%{$$settings{files}[$filecount]} = (); |
%{$$settings{files}[$filecount]{registry}} = (); |
%{$$settings{files}[$filecount]{registry}} = (); |
} elsif ("@state" eq "CONTENT FILES FILEREF RELFILE" ) { |
} elsif ("@state" eq "CONTENT FILES FILEREF RELFILE" ) { |
$$settings{files}[$filecount]{'relfile'} = $attr->{value}; |
$$settings{files}[$filecount]{'relfile'} = $attr->{value}; |
|
push @allrelfiles, $attr->{value}; |
} elsif ("@state" eq "CONTENT FILES FILEREF MIMETYPE") { |
} elsif ("@state" eq "CONTENT FILES FILEREF MIMETYPE") { |
$$settings{files}[$filecount]{mimetype} = $attr->{value}; |
$$settings{files}[$filecount]{mimetype} = $attr->{value}; |
} elsif ("@state" eq "CONTENT FILES FILEREF CONTENTTYPE") { |
} elsif ("@state" eq "CONTENT FILES FILEREF CONTENTTYPE") { |
Line 1978 sub process_content {
|
Line 2053 sub process_content {
|
my $key = $attr->{key}; |
my $key = $attr->{key}; |
$$settings{files}[$filecount]{registry}{$key} = $attr->{value}; |
$$settings{files}[$filecount]{registry}{$key} = $attr->{value}; |
} |
} |
}, "tagname, attr"], |
}, "tagname, attr"], |
text_h => |
text_h => |
[sub { |
[sub { |
my ($text) = @_; |
my ($text) = @_; |
if ("@state" eq "CONTENT TITLE") { |
if ("@state" eq "CONTENT TITLE") { |
$$settings{title} = $text; |
$$settings{title} = $text; |
Line 1989 sub process_content {
|
Line 2064 sub process_content {
|
} elsif ("@state" eq "CONTENT FILES FILEREF REFTEXT") { |
} elsif ("@state" eq "CONTENT FILES FILEREF REFTEXT") { |
$$settings{files}[$filecount]{reftext} = $text; |
$$settings{files}[$filecount]{reftext} = $text; |
} |
} |
}, "dtext"], |
}, "dtext"], |
end_h => |
end_h => |
[sub { |
[sub { |
my ($tagname) = @_; |
my ($tagname) = @_; |
if ("@state" eq "CONTENT FILES FILEREF") { |
if ("@state" eq "CONTENT FILES FILEREF") { |
$filecount ++; |
$filecount ++; |
} |
} |
pop @state; |
pop @state; |
}, "tagname"], |
}, "tagname"], |
); |
); |
$p->unbroken_text(1); |
$p->unbroken_text(1); |
$p->parse_file($xmlfile); |
$p->parse_file($xmlfile); |
$p->eof; |
$p->eof; |
my $linktag = ''; |
my $linktag = ''; |
my $fontcol = ''; |
my $fontcol = ''; |
if (@{$$settings{files}} > 0) { |
if (@{$$settings{files}} > 0) { |
for (my $filecount=0; $filecount<@{$$settings{files}}; $filecount++) { |
for (my $filecount=0; $filecount<@{$$settings{files}}; $filecount++) { |
if ($$settings{files}[$filecount]{'fileaction'} eq 'embed') { |
if ($$settings{files}[$filecount]{'fileaction'} eq 'embed') { |
if ( $$settings{files}[$filecount]{reftext} =~ m#<\!\-\-\s_(\d+)\\_\s\-\-\>#) { |
if ( $$settings{files}[$filecount]{reftext} =~ m#<\!\-\-\s_(\d+)\\_\s\-\-\>#) { |
my $newtag = qq|<img src="$destresdir/resfiles/$res/$$settings{files}[$filecount]{relfile}"/>|; |
my $newtag = qq|<img src="$destresdir/resfiles/$res/$$settings{files}[$filecount]{relfile}"/>|; |
$$settings{maindata}{text} =~ s#<\!\-\-\s_/($1)\\_\s\-\-\>#$newtag#; |
$$settings{maindata}{text} =~ s#<\!\-\-\s_/($1)\\_\s\-\-\>#$newtag#; |
} elsif ( $$settings{files}[$filecount]{reftext} =~m#^_/(\d+)\\_$# ) { |
} elsif ( $$settings{files}[$filecount]{reftext} =~m#^_/(\d+)\\_$# ) { |
my $reftag = $1; |
my $reftag = $1; |
my $newtag; |
my $newtag; |
if ($$settings{files}[$filecount]{mimetype} =~ m/^image/) { |
if ($$settings{files}[$filecount]{mimetype} =~ m/^image/) { |
$newtag = qq|<img src="$destresdir/resfiles/$res/$$settings{files}[$filecount]{relfile}"|; |
$newtag = qq|<img src="$destresdir/resfiles/$res/$$settings{files}[$filecount]{relfile}"|; |
if ( defined($$settings{files}[$filecount]{registry}{alttext}) ) { |
if ( defined($$settings{files}[$filecount]{registry}{alttext}) ) { |
$newtag .= qq| alt="$$settings{files}[$filecount]{registry}{alttext}"|; |
$newtag .= qq| alt="$$settings{files}[$filecount]{registry}{alttext}"|; |
} |
} |
if ( defined($$settings{files}[$filecount]{registry}{alignment}) ) |
if ( defined($$settings{files}[$filecount]{registry}{alignment}) ) |
{ |
{ |
$newtag .= qq| align="$$settings{files}[$filecount]{registry}{alignment}"|; |
$newtag .= qq| align="$$settings{files}[$filecount]{registry}{alignment}"|; |
} |
} |
if ( defined($$settings{files}[$filecount]{registry}{border}) ) { |
if ( defined($$settings{files}[$filecount]{registry}{border}) ) { |
$newtag .= qq| border="$$settings{files}[$filecount]{registry}{border}"|; |
$newtag .= qq| border="$$settings{files}[$filecount]{registry}{border}"|; |
} |
} |
$newtag .= " />"; |
$newtag .= " />"; |
my $reftext = $$settings{files}[$filecount]{reftext}; |
my $reftext = $$settings{files}[$filecount]{reftext}; |
my $fname = $$settings{files}[$filecount]{'relfile'}; |
my $fname = $$settings{files}[$filecount]{'relfile'}; |
$$settings{maindata}{text} =~ s/<!\-\-\sCOMMENT\sBLOCK\sFOR\sEMBEDDED\sFILE:\s$fname[\s\n]+DO\sNOT\sEDIT\sTHIS\sCOMMENT\sBLOCK[\s\n]+//; |
$$settings{maindata}{text} =~ s/<!\-\-\sCOMMENT\sBLOCK\sFOR\sEMBEDDED\sFILE:\s$fname[\s\n]+DO\sNOT\sEDIT\sTHIS\sCOMMENT\sBLOCK[\s\n]+//; |
# $$settings{maindata}{text} =~ s/DO\sNOT\sEDIT\sTHIS\sCOMMENT\sBLOCK[\s\n]+//; |
# $$settings{maindata}{text} =~ s/DO\sNOT\sEDIT\sTHIS\sCOMMENT\sBLOCK[\s\n]+//; |
$$settings{maindata}{text} =~ s/Move\swhole\scomment\sto\schange\sfile\splacement\swithin\spage\.[\s\n]+//; |
$$settings{maindata}{text} =~ s/Move\swhole\scomment\sto\schange\sfile\splacement\swithin\spage\.[\s\n]+//; |
$$settings{maindata}{text} =~ s/_\/$reftag\\_/$newtag/; |
$$settings{maindata}{text} =~ s/_\/$reftag\\_/$newtag/; |
$$settings{maindata}{text} =~ s/END\sOF\sBLOCK\sON\sNEXT\sLINE[\s\n]+//; |
$$settings{maindata}{text} =~ s/END\sOF\sBLOCK\sON\sNEXT\sLINE[\s\n]+//; |
$$settings{maindata}{text} =~ s/\-\->//; |
$$settings{maindata}{text} =~ s/\-\->//; |
# $$settings{maindata}{text} =~ s/<!\-\-\sCOMMENT\sBLOCK\sFOR\sEMBEDDED\sFILE:\s$fname[\s\n]+DO\sNOT\sEDIT\sTHIS\sCOMMENT\sBLOCK[\s\n\]+_\/$reftag\\_[\s\n]+END\sOF\sBLOCK\sON\sNEXT\sLINE[\s\n\]+\-\->/$newtag/; |
# $$settings{maindata}{text} =~ s/<!\-\-\sCOMMENT\sBLOCK\sFOR\sEMBEDDED\sFILE:\s$fname[\s\n]+DO\sNOT\sEDIT\sTHIS\sCOMMENT\sBLOCK[\s\n\]+_\/$reftag\\_[\s\n]+END\sOF\sBLOCK\sON\sNEXT\sLINE[\s\n\]+\-\->/$newtag/; |
# print STDERR $$settings{maindata}{text}; |
# print STDERR $$settings{maindata}{text}; |
} |
} |
} else { |
} else { |
my $filename=$$settings{files}[$filecount]{'relfile'}; |
my $filename=$$settings{files}[$filecount]{'relfile'}; |
# print "File is $filename\n"; |
# print "File is $filename\n"; |
my $newfilename="$destresdir/resfiles/$res/$$settings{files}[$filecount]{relfile}"; |
my $newfilename="$destresdir/resfiles/$res/$$settings{files}[$filecount]{relfile}"; |
# print "New filename is $newfilename\n"; |
# print "New filename is $newfilename\n"; |
$$settings{maindata}{text} =~ s#(src|SRC|value)="$filename"#$1="$newfilename"#g; |
$$settings{maindata}{text} =~ s#(src|SRC|value)="$filename"#$1="$newfilename"#g; |
} |
} |
} elsif ($$settings{files}[$filecount]{fileaction} eq 'link') { |
} elsif ($$settings{files}[$filecount]{fileaction} eq 'link') { |
$linktag = qq|<a href="$destresdir/resfiles/$res/$$settings{files}[$filecount]{relfile}"|; |
unless (($$settings{files}[$filecount]{packageparent} ne '') && (grep/^$$settings{files}[$filecount]{packageparent}$/,@{$$settings{files}}) ) { |
if ($$settings{newwindow} eq "true") { |
$linktag .= qq|<a href="$destresdir/resfiles/$res/$$settings{files}[$filecount]{relfile}"|; |
$linktag .= qq| target="$res$filecount"|; |
if ($$settings{newwindow} eq "true") { |
} |
$linktag .= qq| target="$res$filecount"|; |
foreach my $entry (keys %{$$settings{files}[$filecount]{registry}}) { |
} |
$linktag .= qq| $entry="$$settings{files}[$filecount]{registry}{$entry}"|; |
foreach my $entry (keys %{$$settings{files}[$filecount]{registry}}) { |
} |
$linktag .= qq| $entry="$$settings{files}[$filecount]{registry}{$entry}"|; |
$linktag .= qq|>$$settings{files}[$filecount]{linkname}</a>|; |
} |
} elsif ($$settings{files}[$filecount]{fileaction} eq 'package') { |
$linktag .= qq|>$$settings{files}[$filecount]{linkname}</a><br/>\n|; |
|
} |
|
} elsif ($$settings{files}[$filecount]{fileaction} eq 'package') { |
# print "Found a package\n"; |
# print "Found a package\n"; |
} |
} |
} |
} |
} |
} |
if (defined($$settings{maindata}{textcolor})) { |
if (defined($$settings{maindata}{textcolor})) { |
$fontcol = qq|<font color="$$settings{maindata}{textcolor}">|; |
$fontcol = qq|<font color="$$settings{maindata}{textcolor}">|; |
} |
} |
if (defined($$settings{maindata}{text})) { |
if (defined($$settings{maindata}{text})) { |
if ($$settings{maindata}{ishtml} eq "false") { |
if ($$settings{maindata}{ishtml} eq "false") { |
if ($$settings{maindata}{isnewline} eq "true") { |
if ($$settings{maindata}{isnewline} eq "true") { |
$$settings{maindata}{text} =~ s#\n#<br/>#g; |
$$settings{maindata}{text} =~ s#\n#<br/>#g; |
} |
} |
} else { |
} else { |
$$settings{maindata}{text} = &HTML::Entities::decode($$settings{maindata}{text}); |
$$settings{maindata}{text} = &HTML::Entities::decode($$settings{maindata}{text}); |
} |
} |
} |
} |
|
|
open(FILE,">$destdir/resfiles/$res.html"); |
open(FILE,">$destdir/resfiles/$res.html"); |
print FILE qq|<html> |
print FILE qq|<html> |
<head> |
<head> |
<title>$$settings{title}</title> |
<title>$$settings{title}</title> |
</head> |
</head> |
<body bgcolor='#ffffff'> |
<body bgcolor='#ffffff'> |
$fontcol |
$fontcol |
|; |
|; |
unless ($$settings{title} eq '') { |
unless ($$settings{title} eq '') { |
print FILE qq|$$settings{title}<br/><br/>\n|; |
print FILE qq|$$settings{title}<br/><br/>\n|; |
} |
} |
print FILE qq| |
print FILE qq| |
$$settings{maindata}{text} |
$$settings{maindata}{text} |
$linktag|; |
$linktag|; |
if (defined($$settings{maindata}{textcolor})) { |
if (defined($$settings{maindata}{textcolor})) { |
print FILE qq|</font>|; |
print FILE qq|</font>|; |
} |
} |
print FILE qq| |
print FILE qq| |
</body> |
</body> |
</html>|; |
</html>|; |
close(FILE); |
close(FILE); |
} |
} |
|
|
|
# ---------------------------------------------------------------- Expand ANGEL IMS package |
sub expand_angel { |
sub expand_angel { |
my ($r,$uname,$udom,$fn,$page,$bb_crs,$bb_cdom,$bb_handling) = @_; |
my ($r,$uname,$udom,$fn,$page,$bb_crs,$bb_cdom,$bb_handling) = @_; |
my @state = (); |
my @state = (); |
Line 2114 sub expand_angel {
|
Line 2192 sub expand_angel {
|
my %resinfo = (); |
my %resinfo = (); |
my $numfolders = 0; |
my $numfolders = 0; |
my $numpages = 0; |
my $numpages = 0; |
|
my $totseq = 0; |
|
my $totpage = 0; |
|
my $totquiz = 0; |
|
my $totsurv = 0; |
my $docroot = $ENV{'form.newdir'}; |
my $docroot = $ENV{'form.newdir'}; |
if (!-e "$docroot/temp") { |
if (!-e "$docroot/temp") { |
mkdir "$docroot/temp"; |
mkdir "$docroot/temp"; |
Line 2125 sub expand_angel {
|
Line 2207 sub expand_angel {
|
my $dirname = "/res/$udom/$uname/$newdir"; |
my $dirname = "/res/$udom/$uname/$newdir"; |
my $zipfile = '/home/'.$uname.'/public_html'.$fn; |
my $zipfile = '/home/'.$uname.'/public_html'.$fn; |
if ($fn =~ m|\.zip$|i) { |
if ($fn =~ m|\.zip$|i) { |
open(OUTPUT, "unzip -o $zipfile -d $docroot/temp 2> /dev/null |"); |
open(OUTPUT, "unzip -o $zipfile -d $docroot/temp 2> /dev/null |"); |
while (<OUTPUT>) { |
while (<OUTPUT>) { |
print "$_<br />"; |
print "$_<br />"; |
} |
} |
close(OUTPUT); |
close(OUTPUT); |
} |
} |
|
|
my $xmlfile = $docroot.'/temp/imsmanifest.xml'; |
my $xmlfile = $docroot.'/temp/imsmanifest.xml'; |
Line 2144 sub expand_angel {
|
Line 2226 sub expand_angel {
|
my $start = $num; |
my $start = $num; |
my $statestr = ''; |
my $statestr = ''; |
foreach (@state) { |
foreach (@state) { |
$statestr .= "$_ "; |
$statestr .= "$_ "; |
} |
} |
if ( ($state[0] eq "manifest") && ($state[1] eq "organizations") && ($state[2] eq "organization") ) { |
if ( ($state[0] eq "manifest") && ($state[1] eq "organizations") && ($state[2] eq "organization") ) { |
my $searchstr = "manifest organizations organization"; |
my $searchstr = "manifest organizations organization"; |
Line 2154 sub expand_angel {
|
Line 2236 sub expand_angel {
|
} |
} |
if (("@state" eq $searchstr) && (@state > 3)) { |
if (("@state" eq $searchstr) && (@state > 3)) { |
$itm = $attr->{identifier}; |
$itm = $attr->{identifier}; |
|
$contentscount{$itm} = 0; |
if ($attr->{identifierref} =~ m/^res(.+)$/) { |
if ($attr->{identifierref} =~ m/^res(.+)$/) { |
$resnum{$itm} = $1; |
$resnum{$itm} = $1; |
} |
} |
Line 2169 sub expand_angel {
|
Line 2252 sub expand_angel {
|
} |
} |
} |
} |
elsif ($start < @seq) { |
elsif ($start < @seq) { |
my $diff = @seq - $start; |
my $diff = @seq - $start; |
while ($diff > 0) { |
while ($diff > 0) { |
pop @seq; |
pop @seq; |
$diff --; |
$diff --; |
} |
} |
if (@seq) { |
if (@seq) { |
push @{$contents{$seq[-1]}}, $itm; |
push @{$contents{$seq[-1]}}, $itm; |
} |
} |
} else { |
} else { |
push @{$contents{$seq[-1]}}, $itm; |
push @{$contents{$seq[-1]}}, $itm; |
} |
} |
my $path; |
my $path; |
if (@seq > 1) { |
if (@seq > 1) { |
$path = join(',',@seq); |
$path = join(',',@seq); |
} elsif (@seq > 0) { |
} elsif (@seq > 0) { |
$path = $seq[0]; |
$path = $seq[0]; |
} |
} |
$filepath{$itm} = $path; |
$filepath{$itm} = $path; |
$contentscount{$seq[-1]} ++; |
$contentscount{$seq[-1]} ++; |
Line 2240 sub expand_angel {
|
Line 2323 sub expand_angel {
|
} |
} |
foreach my $key (sort keys %href) { |
foreach my $key (sort keys %href) { |
foreach my $file (@{$href{$key}}) { |
foreach my $file (@{$href{$key}}) { |
print STDERR "File is $file, for $key\n"; |
|
$file =~ s-\\-/-g; |
$file =~ s-\\-/-g; |
my $filepath = $file; |
unless ($file eq 'pg'.$key.'.htm') { |
if (!-e "$destdir/resfiles/$key") { |
if (!-e "$destdir/resfiles/$key") { |
mkdir("$destdir/resfiles/$key",0755); |
mkdir("$destdir/resfiles/$key",0755); |
|
} |
} |
} |
|
my $filepath = $file; |
while ($filepath =~ m-(\w+)/(.+)-) { |
while ($filepath =~ m-(\w+)/(.+)-) { |
$filepath = $2; |
$filepath = $2; |
if (!-e "$destdir/resfiles/$key/$1") { |
if (!-e "$destdir/resfiles/$key/$1") { |
mkdir("$destdir/resfiles/$key/$1",0755); |
mkdir("$destdir/resfiles/$key/$1",0755); |
} |
} |
} |
} |
system("cp $docroot/temp/_assoc/$key/$file $destdir/resfiles/$key/$file"); |
unless ($file eq 'pg'.$key.'.htm') { |
|
system("cp $docroot/temp/_assoc/$key/$file $destdir/resfiles/$key/$file"); |
|
} |
} |
} |
} |
} |
|
|
|
# ANGEL types FILE FOLDER PAGE LINK MESSAGE FORM QUIZ BOARD DROPBOX IMS |
# ANGEL types FILE FOLDER PAGE LINK MESSAGE FORM QUIZ BOARD |
|
my $currboard = ''; |
my $currboard = ''; |
my @boards = (); |
my @boards = (); |
my %messages = (); |
my %messages = (); |
Line 2276 sub expand_angel {
|
Line 2361 sub expand_angel {
|
$board_count ++; |
$board_count ++; |
} elsif ($type{$key} eq "MESSAGE") { |
} elsif ($type{$key} eq "MESSAGE") { |
push @{$messages{$currboard}}, $key; |
push @{$messages{$currboard}}, $key; |
} elsif ($type{$key} eq "FILE" || $type{$key} eq "FOLDER" || $type{$key} eq "PAGE" || $type{$key} eq "LINK") { |
} elsif ($type{$key} eq "PAGE" || $type{$key} eq "LINK") { |
%{$resinfo{$key}} = (); |
%{$resinfo{$key}} = (); |
|
&angel_content($key,$docroot,$destdir,\%{$resinfo{$key}},$udom,$uname,$type{$key},$title{$revitm{$key}}); |
} elsif ($type{$key} eq "QUIZ") { |
} elsif ($type{$key} eq "QUIZ") { |
%{$resinfo{$key}} = (); |
%{$resinfo{$key}} = (); |
# &angel_assessment($key,$docroot,$dirname,$destdir,\%{$resinfo{$key}}); |
# &angel_assessment($key,$docroot,$dirname,$destdir,\%{$resinfo{$key}}); |
} elsif ($type{$key} eq "FORM") { |
} elsif ($type{$key} eq "FORM") { |
%{$resinfo{$key}} = (); |
%{$resinfo{$key}} = (); |
# &angel_assessment($key,$docroot,$dirname,$destdir,\%{$resinfo{$key}}); |
# &angel_assessment($key,$docroot,$dirname,$destdir,\%{$resinfo{$key}}); |
|
} elsif ($type{$key} eq "DROPBOX") { |
|
%{$resinfo{$key}} = (); |
} |
} |
} |
} |
|
|
Line 2295 sub expand_angel {
|
Line 2383 sub expand_angel {
|
my %msgidx = (); |
my %msgidx = (); |
my $forumtext = ''; |
my $forumtext = ''; |
my $boardname = 'bulletinpage_'.$timestamp[$i]; |
my $boardname = 'bulletinpage_'.$timestamp[$i]; |
my $forumfile = "$destdir/resfiles/$boards[$i]/$file{$boards[$i]}"; |
my $forumfile = $docroot.'/temp/_assoc/'.$boards[$i].'/pg'.$boards[$i].'.htm'; |
my @state = (); |
my @state = (); |
my $p = HTML::Parser->new |
my $p = HTML::Parser->new |
( |
( |
Line 2318 sub expand_angel {
|
Line 2406 sub expand_angel {
|
pop @state; |
pop @state; |
}, "tagname"], |
}, "tagname"], |
); |
); |
$p->parse_file($xmlfile); |
$p->parse_file($forumfile); |
$p->eof; |
$p->eof; |
|
|
my %boardinfo = ( |
my %boardinfo = ( |
Line 2330 sub expand_angel {
|
Line 2418 sub expand_angel {
|
my $msgcount = 0; |
my $msgcount = 0; |
|
|
my $putresult = &Apache::lonnet::put($boardname,\%boardinfo,$bb_cdom,$bb_crs); |
my $putresult = &Apache::lonnet::put($boardname,\%boardinfo,$bb_cdom,$bb_crs); |
|
print STDERR "putresult is $putresult for $boardname $bb_cdom $bb_crs\n"; |
if ($bb_handling eq 'importall') { |
if ($bb_handling eq 'importall') { |
foreach my $msg_id (@{$messages{$boards[$i]}}) { |
foreach my $msg_id (@{$messages{$boards[$i]}}) { |
$msgcount ++; |
$msgcount ++; |
$msgidx{$msg_id} = $msgcount; |
$msgidx{$msg_id} = $msgcount; |
my %contrib = ( |
my %contrib = ( |
'sendername' => 'Username not recorded', |
'sendername' => 'NoName', |
'senderdomain' => $bb_cdom, |
'senderdomain' => $bb_cdom, |
'screenname' => '', |
'screenname' => '', |
'message' => $title{$revitm{$msg_id}} |
'message' => $title{$revitm{$msg_id}} |
); |
); |
unless ( $parentseq{$revitm{$msg_id}} eq $revitm{$boards[$i]} ) { |
unless ( $parentseq{$revitm{$msg_id}} eq $revitm{$boards[$i]} ) { |
$contrib{replyto} = $msgidx{$resnum{$parentseq{$revitm{$msg_id}}}}; |
unless ( $msgidx{$resnum{$parentseq{$revitm{$msg_id}}}} eq ''){ |
|
$contrib{replyto} = $msgidx{$resnum{$parentseq{$revitm{$msg_id}}}}; |
|
print STDERR "$msgidx{$resnum{$revitm{$msg_id}}} is replying to $msgidx{$resnum{$parentseq{$revitm{$msg_id}}}}\n"; |
|
} |
} |
} |
if ( @{$href{$msg_id}} > 1 ) { |
if ( @{$href{$msg_id}} > 1 ) { |
my $newurl = ''; |
my $newurl = ''; |
foreach my $file (@{$href{$msg_id}}) { |
foreach my $file (@{$href{$msg_id}}) { |
unless ($file eq 'pg'.$msg_id.'.htm') { |
unless ($file eq 'pg'.$msg_id.'.htm') { |
$newurl = $msg_id.$file; |
$newurl = $msg_id.$file; |
|
print STDERR "Msg is $msg_id, File is $file, newurl is $newurl\n"; |
unless ($longcrs eq '') { |
unless ($longcrs eq '') { |
if (!-e "/home/httpd/lonUsers/$bb_cdom/$longcrs/userfiles") { |
if (!-e "/home/httpd/lonUsers/$bb_cdom/$longcrs/userfiles") { |
mkdir("/home/httpd/lonUsers/$bb_cdom/$longcrs/userfiles",0755); |
mkdir("/home/httpd/lonUsers/$bb_cdom/$longcrs/userfiles",0755); |
} |
} |
if (!-e "/home/httpd/lonUsers/$bb_cdom/$longcrs/userfiles/$newurl") { |
if (!-e "/home/httpd/lonUsers/$bb_cdom/$longcrs/userfiles/$newurl") { |
system("cp $destdir/resfiles/$file /home/httpd/lonUsers/$bb_cdom/$longcrs/userfiles/$newurl"); |
system("cp $destdir/resfiles/$msg_id/$file /home/httpd/lonUsers/$bb_cdom/$longcrs/userfiles/$newurl"); |
} |
} |
$contrib{attachmenturl} = '/uploaded/'.$bb_cdom.'/'.$bb_crs.'/'.$newurl; |
$contrib{attachmenturl} = '/uploaded/'.$bb_cdom.'/'.$bb_crs.'/'.$newurl; |
} |
} |
} |
} |
} |
} |
} |
} |
my $xmlfile = "$destdir/resfiles/$msg_id/$file{$msg_id}"; |
my $xmlfile = $docroot.'/temp/_assoc/'.$msg_id.'/'.$file{$msg_id}; |
&angel_message($msg_id,\%contrib,$xmlfile); |
&angel_message($msg_id,\%contrib,$xmlfile); |
unless ($file{$msg_id} eq '') { |
unless ($file{$msg_id} eq '') { |
unlink($xmlfile); |
unlink($xmlfile); |
Line 2383 sub expand_angel {
|
Line 2476 sub expand_angel {
|
my %seqcount = (); |
my %seqcount = (); |
my %boardflag = (); |
my %boardflag = (); |
my %boardcount = (); |
my %boardcount = (); |
|
my %fileflag = (); |
|
my %filecount = (); |
|
|
foreach my $key (@resources) { |
foreach my $key (@resources) { |
print STDERR "Key is $key, resnum is $resnum{$key}, type is $type{$resnum{$key}}\n"; |
|
$pageflag{$key} = 0; |
$pageflag{$key} = 0; |
$seqflag{$key} = 0; |
$seqflag{$key} = 0; |
$seqcount{$key} = 0; |
$seqcount{$key} = 0; |
$pagecount{$key} = -1; |
$pagecount{$key} = -1; |
$boardflag{$key} = 0; |
$boardflag{$key} = 0; |
$boardcount{$key} = 0; |
$boardcount{$key} = 0; |
|
$fileflag{$key} = 0; |
|
$filecount{$key} = 0; |
my $src =""; |
my $src =""; |
|
my $srcstem = "/res/$udom/$uname/$newdir"; |
my $next_id = 1; |
my $next_id = 1; |
my $curr_id = 0; |
my $curr_id = 0; |
if ($type{$resnum{$key}} eq "FOLDER") { |
if ($type{$resnum{$key}} eq "FOLDER") { |
Line 2404 sub expand_angel {
|
Line 2501 sub expand_angel {
|
<resource id="2" src="" type="finish"></resource>\n|; |
<resource id="2" src="" type="finish"></resource>\n|; |
} else { |
} else { |
if ($type{$resnum{$contents{$key}[0]}} eq "FOLDER") { |
if ($type{$resnum{$contents{$key}[0]}} eq "FOLDER") { |
$src = 'sequences/'.$contents{$key}[0].".sequence"; |
$src = $srcstem.'/sequences/'.$contents{$key}[0].".sequence"; |
$pageflag{$key} = 0; |
$pageflag{$key} = 0; |
$seqflag{$key} = 1; |
$seqflag{$key} = 1; |
$seqcount{$key} ++; |
$seqcount{$key} ++; |
} elsif ($type{$resnum{$contents{$key}[0]}} eq "BOARD") { |
} elsif ($type{$resnum{$contents{$key}[0]}} eq "BOARD") { |
$src = "/adm/$bb_cdom/$uname/$timestamp[$boardnum{$key}]/bulletinboard"; |
$src = '/adm/'.$bb_cdom.'/'.$uname.'/'.$timestamp[$boardnum{$resnum{$contents{$key}[0]}}].'/bulletinboard'; |
$pageflag{$key} = 0; |
$pageflag{$key} = 0; |
$boardflag{$key} = 1; |
$boardflag{$key} = 1; |
$boardcount{$key} ++; |
$boardcount{$key} ++; |
} elsif ($type{$resnum{$contents{$key}[0]}} ne "MESSAGE") { |
} elsif ($type{$resnum{$contents{$key}[0]}} eq "FILE") { |
|
foreach my $file (@{$href{$resnum{$contents{$key}[0]}}}) { |
|
unless ($file eq 'pg'.$resnum{$contents{$key}[0]}.'.htm') { |
|
$src = $srcstem.'/resfiles/'.$resnum{$contents{$key}[0]}.'/'.$file; |
|
} |
|
} |
|
$pageflag{$key} = 0; |
|
$fileflag{$key} = 1; |
|
} elsif ( ($type{$resnum{$contents{$key}[0]}} eq "PAGE") || ($type{$resnum{$contents{$key}[0]}} eq "LINK") ) { |
if ($pageflag{$key}) { |
if ($pageflag{$key}) { |
push @{$pagecontents{$key}[$pagecount{$key}]},$contents{$key}[0]; |
if ($pagecount{key} == -1) { |
|
print STDERR "Array index is -1, we shouldnt be here\n"; |
|
} else { |
|
push @{$pagecontents{$key}[$pagecount{$key}]},$contents{$key}[0]; |
|
} |
} else { |
} else { |
$pagecount{$key} ++; |
$pagecount{$key} ++; |
$src = 'pages/'.$key.'_'.$pagecount{$key}.'.page'; |
$src = $srcstem.'/pages/'.$key.'_'.$pagecount{$key}.'.page'; |
@{$pagecontents{$key}[$pagecount{$key}]} = ("$contents{$key}[0]"); |
@{$pagecontents{$key}[$pagecount{$key}]} = ("$contents{$key}[0]"); |
$seqflag{$key} = 0; |
$seqflag{$key} = 0; |
} |
} |
} |
} |
unless ($pageflag{$key}) { |
unless ($pageflag{$key}) { |
print LOCFILE qq|<resource id="1" src="/res/$udom/$uname/$newdir/$src" title="$title{$contents{$key}[0]}" type="start"|; |
print LOCFILE qq|<resource id="1" src="$src" title="$title{$contents{$key}[0]}" type="start"|; |
unless ($seqflag{$key} || $boardflag{$key}) { |
unless ($seqflag{$key} || $boardflag{$key} || $fileflag{$key}) { |
$pageflag{$key} = 1; |
$pageflag{$key} = 1; |
} |
} |
} |
} |
Line 2437 sub expand_angel {
|
Line 2546 sub expand_angel {
|
if ($contentscount{$key} > 2 ) { |
if ($contentscount{$key} > 2 ) { |
for (my $i=1; $i<$contentscount{$key}-1; $i++) { |
for (my $i=1; $i<$contentscount{$key}-1; $i++) { |
if ($type{$resnum{$contents{$key}[$i]}} eq "FOLDER") { |
if ($type{$resnum{$contents{$key}[$i]}} eq "FOLDER") { |
$src = 'sequences/'.$contents{$key}[$i].".sequence"; |
$src = $srcstem.'/sequences/'.$contents{$key}[$i].".sequence"; |
$pageflag{$key} = 0; |
$pageflag{$key} = 0; |
$seqflag{$key} = 1; |
$seqflag{$key} = 1; |
$seqcount{$key} ++; |
$seqcount{$key} ++; |
} elsif ($type{$resnum{$contents{$key}[0]}} eq "BOARD") { |
} elsif ($type{$resnum{$contents{$key}[$i]}} eq "BOARD") { |
$src = "/adm/$bb_cdom/$uname/$timestamp[$boardnum{$key}]/bulletinboard"; |
$src = '/adm/'.$bb_cdom.'/'.$uname.'/'.$timestamp[$boardnum{$resnum{$contents{$key}[$i]}}].'/bulletinboard'; |
$pageflag{$key} = 0; |
$pageflag{$key} = 0; |
$boardflag{$key} = 1; |
$boardflag{$key} = 1; |
$boardcount{$key} ++; |
$boardcount{$key} ++; |
} elsif ($type{$resnum{$contents{$key}[0]}} ne "MESSAGE") { |
} elsif ($type{$resnum{$contents{$key}[$i]}} eq "FILE") { |
|
foreach my $file (@{$href{$resnum{$contents{$key}[$i]}}}) { |
|
unless ($file eq 'pg'.$resnum{$contents{$key}[$i]}.'.htm') { |
|
$src = $srcstem.'/resfiles/'.$resnum{$contents{$key}[$i]}.'/'.$file; |
|
} |
|
} |
|
$pageflag{$key} = 0; |
|
$fileflag{$key} = 1; |
|
$filecount{$key} ++; |
|
} elsif ( ($type{$resnum{$contents{$key}[$i]}} eq "PAGE") || ($type{$resnum{$contents{$key}[$i]}} eq "LINK") ) { |
if ($pageflag{$key}) { |
if ($pageflag{$key}) { |
push @{$pagecontents{$key}[$pagecount{$key}]},$contents{$key}[$i]; |
if ($pagecount{$key} == -1) { |
|
print STDERR "array index is -1, we shouldnt be here\n"; |
|
} else { |
|
push @{$pagecontents{$key}[$pagecount{$key}]},$contents{$key}[$i]; |
|
} |
} else { |
} else { |
$pagecount{$key} ++; |
$pagecount{$key} ++; |
$src = 'pages/'.$key.'_'.$pagecount{$key}.'.page'; |
$src = $srcstem.'/pages/'.$key.'_'.$pagecount{$key}.'.page'; |
@{$pagecontents{$key}[$pagecount{$key}]} = ("$contents{$key}[$i]"); |
@{$pagecontents{$key}[$pagecount{$key}]} = ("$contents{$key}[$i]"); |
$seqflag{$key} = 0; |
$seqflag{$key} = 0; |
} |
} |
Line 2461 sub expand_angel {
|
Line 2583 sub expand_angel {
|
$next_id ++; |
$next_id ++; |
print LOCFILE qq|></resource> |
print LOCFILE qq|></resource> |
<link from="$curr_id" to="$next_id" index="$curr_id"></link> |
<link from="$curr_id" to="$next_id" index="$curr_id"></link> |
<resource id="$next_id" src="/res/$udom/$uname/$newdir/$src" title="$title{$contents{$key}[$i]}"|; |
<resource id="$next_id" src="$src" title="$title{$contents{$key}[$i]}"|; |
unless ($seqflag{$key} || $boardflag{$key}) { |
unless ($seqflag{$key} || $boardflag{$key} || $fileflag{$key}) { |
$pageflag{$key} = 1; |
$pageflag{$key} = 1; |
} |
} |
} |
} |
} |
} |
} |
} |
if ($type{$resnum{$contents{$key}[$contentscount{$key}-1]}} eq "FOLDER") { |
if ($type{$resnum{$contents{$key}[$contentscount{$key}-1]}} eq "FOLDER") { |
$src = 'sequences/'.$contents{$key}[$contentscount{$key}-1].".sequence"; |
$src = $srcstem.'/sequences/'.$contents{$key}[$contentscount{$key}-1].".sequence"; |
$pageflag{$key} = 0; |
$pageflag{$key} = 0; |
$seqflag{$key} = 1; |
$seqflag{$key} = 1; |
} elsif ($type{$resnum{$contents{$key}[0]}} eq "BOARD") { |
} elsif ($type{$resnum{$contents{$key}[$contentscount{$key}-1]}} eq "BOARD") { |
$src = "/adm/$bb_cdom/$uname/$timestamp[$boardnum{$key}]/bulletinboard"; |
$src = "/adm/$bb_cdom/$uname/$timestamp[$boardnum{$resnum{$contents{$key}[$contentscount{$key}-1]}}]/bulletinboard"; |
$pageflag{$key} = 0; |
$pageflag{$key} = 0; |
$boardflag{$key} = 1; |
$boardflag{$key} = 1; |
} elsif ($type{$resnum{$contents{$key}[0]}} ne "MESSAGE") { |
} elsif ($type{$resnum{$contents{$key}[$contentscount{$key}-1]}} eq "FILE") { |
|
foreach my $file (@{$href{$resnum{$contents{$key}[$contentscount{$key}-1]}}}) { |
|
unless ($file eq 'pg'.$resnum{$contents{$key}[$contentscount{$key}-1]}.'.htm') { |
|
$src = $srcstem.'/resfiles/'.$resnum{$contents{$key}[$contentscount{$key}-1]}.'/'.$file; |
|
} |
|
} |
|
$pageflag{$key} = 0; |
|
$fileflag{$key} = 1; |
|
$filecount{$key} ++; |
|
} elsif ( ($type{$resnum{$contents{$key}[$contentscount{$key}-1]}} eq "PAGE") || ($type{$resnum{$contents{$key}[$contentscount{$key}-1]}} eq "LINK") ) { |
if ($pageflag{$key}) { |
if ($pageflag{$key}) { |
push @{$pagecontents{$key}[$pagecount{$key}]},$contents{$key}[$contentscount{$key}-1]; |
push @{$pagecontents{$key}[$pagecount{$key}]},$contents{$key}[$contentscount{$key}-1]; |
} else { |
} else { |
$pagecount{$key} ++; |
$pagecount{$key} ++; |
$src = 'pages/'.$key.'_'.$pagecount{$key}.'.page'; |
$src = $srcstem.'/pages/'.$key.'_'.$pagecount{$key}.'.page'; |
@{$pagecontents{$key}[$pagecount{$key}]} = ("$contents{$key}[$contentscount{$key}-1]"); |
@{$pagecontents{$key}[$pagecount{$key}]} = ("$contents{$key}[$contentscount{$key}-1]"); |
} |
} |
} |
} |
if ($pageflag{$key}) { |
if ($pageflag{$key}) { |
if ($seqcount{$key} + $pagecount{$key} + $boardcount{$key} +1 == 1) { |
if ($seqcount{$key} + $pagecount{$key} + $boardcount{$key} + $filecount{$key} +1 == 1) { |
print LOCFILE qq|></resource> |
print LOCFILE qq|></resource> |
<link from="1" index="1" to="2"> |
<link from="1" index="1" to="2"> |
<resource id ="2" src="" title="" type="finish"></resource>\n|; |
<resource id ="2" src="" title="" type="finish"></resource>\n|; |
Line 2498 sub expand_angel {
|
Line 2629 sub expand_angel {
|
$next_id ++; |
$next_id ++; |
print LOCFILE qq|></resource> |
print LOCFILE qq|></resource> |
<link from="$curr_id" to="$next_id" index="$curr_id"></link> |
<link from="$curr_id" to="$next_id" index="$curr_id"></link> |
<resource id="$next_id" src="/res/$udom/$uname/$newdir/$src" title="$title{$contents{$key}[$contentscount{$key}-1]}" type="finish"></resource>\n|; |
<resource id="$next_id" src="$src" title="$title{$contents{$key}[$contentscount{$key}-1]}" type="finish"></resource>\n|; |
} |
} |
} |
} |
} |
} |
print LOCFILE "</map>\n"; |
print LOCFILE "</map>\n"; |
close(LOCFILE); |
close(LOCFILE); |
|
$pagecount{$key} ++; |
|
$totpage += $pagecount{$key}; |
} |
} |
|
$totseq += $seqcount{$key}; |
} |
} |
|
|
foreach my $key (sort keys %pagecontents) { |
foreach my $key (sort keys %pagecontents) { |
Line 2513 sub expand_angel {
|
Line 2647 sub expand_angel {
|
my $filename = $destdir.'/pages/'.$key.'_'.$i.'.page'; |
my $filename = $destdir.'/pages/'.$key.'_'.$i.'.page'; |
open(PAGEFILE,">$filename"); |
open(PAGEFILE,">$filename"); |
print PAGEFILE qq|<map> |
print PAGEFILE qq|<map> |
<resource src="$filestem/resfiles/$resnum{$pagecontents{$key}[$i][0]}.html" id="1" type="start" title="$title{$pagecontents{$key}[$i][0]}"></resource> |
<resource src="$filestem/resfiles/$resnum{$pagecontents{$key}[$i][0]}/$resnum{$pagecontents{$key}[$i][0]}.html" id="1" type="start" title="$title{$pagecontents{$key}[$i][0]}"></resource> |
<link to="2" index="1" from="1">\n|; |
<link to="2" index="1" from="1">\n|; |
if (@{$pagecontents{$key}[$i]} == 1) { |
if (@{$pagecontents{$key}[$i]} == 1) { |
print PAGEFILE qq|<resource src="" id="2" type="finish"></resource>|; |
print PAGEFILE qq|<resource src="" id="2" type="finish"></resource>|; |
} elsif (@{$pagecontents{$key}[$i]} == 2) { |
} elsif (@{$pagecontents{$key}[$i]} == 2) { |
print PAGEFILE qq|<resource src="$filestem/resfiles/$resnum{$pagecontents{$key}[$i][1]}.html" id="2" type="finish" title="$title{$pagecontents{$key}[$i][1]}"></resource>|; |
print PAGEFILE qq|<resource src="$filestem/resfiles/$resnum{$pagecontents{$key}[$i][1]}/$resnum{$pagecontents{$key}[$i][1]}.html" id="2" type="finish" title="$title{$pagecontents{$key}[$i][1]}"></resource>|; |
} else { |
} else { |
for (my $j=1; $j<@{$pagecontents{$key}[$i]}-1; $j++) { |
for (my $j=1; $j<@{$pagecontents{$key}[$i]}-1; $j++) { |
my $curr_id = $j+1; |
my $curr_id = $j+1; |
my $next_id = $j+2; |
my $next_id = $j+2; |
my $resource = $filestem.'/resfiles/'.$resnum{$pagecontents{$key}[$i][$j]}.'.html'; |
my $resource = $filestem.'/resfiles/'.$resnum{$pagecontents{$key}[$i][1]}.'/'.$resnum{$pagecontents{$key}[$i][$j]}.'.html'; |
print PAGEFILE qq|<resource src="$resource" id="$curr_id" title="$title{$pagecontents{$key}[$i][$j]}"></resource> |
print PAGEFILE qq|<resource src="$resource" id="$curr_id" title="$title{$pagecontents{$key}[$i][$j]}"></resource> |
<link to="$next_id" index="$curr_id" from="$curr_id">\n|; |
<link to="$next_id" index="$curr_id" from="$curr_id">\n|; |
} |
} |
my $final_id = @{$pagecontents{$key}[$i]}; |
my $final_id = @{$pagecontents{$key}[$i]}; |
print PAGEFILE qq|<resource src="$filestem/resfiles/$resnum{$pagecontents{$key}[$i][-1]}.html" id="$final_id" type="finish" title="$title{$pagecontents{$key}[$i][-1]}"></resource>\n|; |
print PAGEFILE qq|<resource src="$filestem/resfiles/$resnum{$pagecontents{$key}[$i][-1]}/$resnum{$pagecontents{$key}[$i][-1]}.html" id="$final_id" type="finish" title="$title{$pagecontents{$key}[$i][-1]}"></resource>\n|; |
} |
} |
print PAGEFILE "</map>"; |
print PAGEFILE "</map>"; |
close(PAGEFILE); |
close(PAGEFILE); |
} |
} |
} |
} |
# system(" rm -r $docroot/temp"); |
system(" rm -r $docroot/temp"); # Need to add sanity checking |
|
return('ok',$totseq,$totpage,$board_count); |
|
} |
|
|
|
# ---------------------------------------------------------------- ANGEL content |
|
sub angel_content { |
|
my ($res,$docroot,$destdir,$settings,$dom,$user,$type,$title) = @_; |
|
my $xmlfile = $docroot.'/temp/_assoc/'.$res.'/pg'.$res.'.htm'; |
|
my $filecount = 0; |
|
my $firstline; |
|
my $lastline; |
|
my @buffer = (); |
|
my @state; |
|
@{$$settings{links}} = (); |
|
my $p = HTML::Parser->new |
|
( |
|
xml_mode => 1, |
|
start_h => |
|
[sub { |
|
my ($tagname, $attr) = @_; |
|
push @state, $tagname; |
|
}, "tagname, attr"], |
|
text_h => |
|
[sub { |
|
my ($text) = @_; |
|
if ("@state" eq "html body table tr td div small span") { |
|
$$settings{'subtitle'} = $text; |
|
} elsif ("@state" eq "html body div div") { |
|
$$settings{'text'} = $text; |
|
} elsif ("@state" eq "html body div div a") { |
|
push @{$$settings{'links'}}, $text; |
|
} |
|
}, "dtext"], |
|
end_h => |
|
[sub { |
|
my ($tagname) = @_; |
|
pop @state; |
|
}, "tagname"], |
|
); |
|
$p->parse_file($xmlfile); |
|
$p->eof; |
|
if ($type eq "PAGE") { |
|
open(FILE,"<$xmlfile"); |
|
@buffer = <FILE>; |
|
close(FILE); |
|
chomp(@buffer); |
|
$firstline = -1; |
|
$lastline = 0; |
|
for (my $i=0; $i<@buffer; $i++) { |
|
if (($firstline == -1) && ($buffer[$i] =~ m/<div\sclass="normalDiv"><div\sclass="normalSpan">/)) { |
|
$firstline = $i; |
|
$buffer[$i] = substr($buffer[$i],index($buffer[$i],'"normalSpan"')+13); |
|
} |
|
if (($firstline > -1) && ($buffer[$i] =~ m-<p></p></div></div>-)) { |
|
$buffer[$i] = substr($buffer[$i],0,index($buffer[$i],'<p></p></div></div>')); |
|
$lastline = $i; |
|
} |
|
} |
|
} |
|
if (!-e "$destdir/resfiles/$res") { |
|
mkdir("$destdir/resfiles/$res/",0755); |
|
} |
|
open(FILE,">$destdir/resfiles/$res/$res.html"); |
|
print FILE qq|<html> |
|
<head> |
|
<title>$title</title> |
|
</head> |
|
<body bgcolor='#ffffff'> |
|
|; |
|
unless ($title eq '') { |
|
print FILE qq|<b>$title</b><br/>\n|; |
|
} |
|
unless ($$settings{subtitle} eq '') { |
|
print FILE qq|$$settings{subtitle}<br/>\n|; |
|
} |
|
print FILE "<br/>\n"; |
|
if ($type eq "LINK") { |
|
foreach my $link (@{$$settings{links}}) { |
|
print FILE qq|<a href="$link">$link</a><br/>\n|; |
|
} |
|
} elsif ($type eq "PAGE") { |
|
if ($firstline > -1) { |
|
for (my $i=$firstline; $i<=$lastline; $i++) { |
|
print FILE "$buffer[$i]\n"; |
|
} |
|
} |
|
} |
|
print FILE qq| |
|
</body> |
|
</html>|; |
|
close(FILE); |
} |
} |
|
|
|
# ---------------------------------------------------------------- Process ANGEL message board messages |
sub angel_message { |
sub angel_message { |
my ($msg_id,$contrib,$xmlfile) = @_; |
my ($msg_id,$contrib,$xmlfile) = @_; |
my @state = (); |
my @state = (); |
Line 2562 sub angel_message {
|
Line 2787 sub angel_message {
|
my ($tagname) = @_; |
my ($tagname) = @_; |
pop @state; |
pop @state; |
}, "tagname"], |
}, "tagname"], |
); |
); |
$p->parse_file($xmlfile); |
$p->parse_file($xmlfile); |
$p->eof; |
$p->eof; |
} |
} |
|
|
|
# ---------------------------------------------------------------- Get LON-CAPA Course Coordinator roles for this user |
sub get_ccroles { |
sub get_ccroles { |
my ($uname,$dom,$crsentry) = @_; |
my ($uname,$dom,$crsentry) = @_; |
my %roles = (); |
my %roles = (); |
Line 2716 sub handler {
|
Line 2942 sub handler {
|
my $bb_crs = ''; |
my $bb_crs = ''; |
my $bb_cdom = ''; |
my $bb_cdom = ''; |
my $bb_handling = ''; |
my $bb_handling = ''; |
|
my $announce_handling = 'ok'; |
my $source = $ENV{'form.source'}; |
my $source = $ENV{'form.source'}; |
if ( defined($ENV{'form.bb_crs'}) ) { |
if ( defined($ENV{'form.bb_crs'}) ) { |
($bb_cdom,$bb_crs) = split/\//,$ENV{'form.bb_crs'}; |
($bb_cdom,$bb_crs) = split/\//,$ENV{'form.bb_crs'}; |
Line 2732 sub handler {
|
Line 2959 sub handler {
|
if ( defined($ENV{'form.user_handling'}) ) { |
if ( defined($ENV{'form.user_handling'}) ) { |
$users_handling = $ENV{'form.user_handling'}; |
$users_handling = $ENV{'form.user_handling'}; |
} |
} |
my ($totseq,$totpage,$totprob); |
my ($result,$totseq,$totpage,$totprob,$totboard,$totquiz,$totsurv); |
print STDERR "Page name is $page_name\n"; |
|
if ($page_name eq 'ChooseDir') { |
if ($page_name eq 'ChooseDir') { |
&display_zero ($r,$uname,$fn,$current_page,$fullpath); |
&display_zero ($r,$uname,$fn,$current_page,$fullpath); |
} elsif ($page_name eq 'Confirmation') { |
} elsif ($page_name eq 'Confirmation') { |
($totseq,$totpage,$totprob) = &expand_bb5 ($r,$uname,$udom,$fn,$current_page,$bb_crs,$bb_cdom,$bb_handling,$users_crs,$users_cdom,$users_handling) if $source eq 'bb5'; |
($result,$totseq,$totpage,$totboard,$totquiz,$totsurv,$totprob) = &expand_bb5 ($r,$uname,$udom,$fn,$current_page,$bb_crs,$bb_cdom,$bb_handling,$users_crs,$users_cdom,$users_handling,$announce_handling) if $source eq 'bb5'; |
($totseq,$totpage,$totprob) = &expand_angel ($r,$uname,$udom,$fn,$current_page,$bb_crs,$bb_cdom,$bb_handling) if $source eq 'angel'; |
($totseq,$totpage,$totboard) = &expand_angel ($result,$uname,$udom,$fn,$current_page,$bb_crs,$bb_cdom,$bb_handling) if $source eq 'angel'; |
&expand_webct ($r,$uname,$udom,$fn,$current_page) if $source eq 'webct'; |
&expand_webct ($r,$uname,$udom,$fn,$current_page) if $source eq 'webct'; |
} |
} |
$r->print("<h3>Step 3: Publish your new LON-CAPA materials</h3>"); |
|
$r->print("<font face='arial,helvetica,sans-serif'>Your IMS package has been processed successfully. A total of $totseq sequences, $totpage pages, and $totprob problems have been created.<br /><br />\n"); |
if ($result eq 'nozip') { |
|
$r->print("<font face='arial,helvetica,sans-serif'>Processing of your IMS package failed, because you did not upload a IMS content package compressed in zip format."); |
|
} elsif ($result eq 'nomanifest') { |
|
$r->print("<font face='arial,helvetica,sans-serif'>Processing of your IMS package failed, because the IMS content package did not contain an IMS manifest file ."); |
|
} else { |
|
$r->print("<h3>Step 3: Publish your new LON-CAPA materials</h3>"); |
|
if ($source eq 'bb5') { |
|
$r->print("<font face='arial,helvetica,sans-serif'>Your IMS package has been processed successfully. A total of $totseq sequences, $totpage pages, $totboard bulletin boards, $totquiz quizzes, $totsurv surveys and $totprob problems have been created.<br /><br />\n"); |
|
} elsif ($source eq 'angel') { |
|
$r->print("<font face='arial,helvetica,sans-serif'>Your IMS package has been processed successfully. A total of $totseq sequences, $totpage pages, and $totboard bulletin boards have been created.<br /><br />\n"); |
|
} |
|
} |
} elsif ($ENV{'form.phase'} eq 'two') { |
} elsif ($ENV{'form.phase'} eq 'two') { |
my $flag = &Apache::lonupload::phasetwo($r,$fn,$uname,$udom,'imsimport'); |
my $flag = &Apache::lonupload::phasetwo($r,$fn,$uname,$udom,'imsimport'); |
if ($flag eq 'ok') { |
if ($flag eq 'ok') { |