version 1.1, 2004/02/10 23:36:32
|
version 1.2, 2004/02/23 14:14:45
|
Line 32 sub calculate_page($$) {
|
Line 32 sub calculate_page($$) {
|
|
|
# ---------------------------------------------------------------- Jscript Zero |
# ---------------------------------------------------------------- Jscript Zero |
sub jscript_zero { |
sub jscript_zero { |
my ($fullpath,$jsref) = @_; |
my ($fullpath,$jsref,$uname,$dom) = @_; |
my $source = ''; |
my $source = ''; |
if (exists($ENV{'form.go'}) ) { |
if (exists($ENV{'form.go'}) ) { |
$source = $ENV{'form.go'}; |
$source = $ENV{'form.go'}; |
} |
} |
|
my %crsentry = (); |
|
my $course_list; |
|
my $title_list; |
|
my @crslist = (); |
|
@crslist = &get_ccroles($uname,$dom,\%crsentry); |
|
if (@crslist > 0) { |
|
$crsentry{$crslist[0]} =~ s/("|,)//g; |
|
$title_list = '"'.$crsentry{$crslist[0]}.'"'; |
|
if (@crslist > 1) { |
|
for (my $i=1; $i<@crslist; $i++) { |
|
$crsentry{$crslist[$i]} =~ s/("|,)//g; |
|
$title_list .= ',"'.$crsentry{$crslist[$i]}.'"'; |
|
} |
|
} |
|
} |
|
$course_list = '"'.join('","',@crslist).'"'; |
|
|
$$jsref = <<"END_OF_ONE"; |
$$jsref = <<"END_OF_ONE"; |
function verify() { |
function verify() { |
if ((document.forms.dataForm.newdir.value == '') || (!document.forms.dataForm.newdir.value)) { |
if ((document.forms.dataForm.newdir.value == '') || (!document.forms.dataForm.newdir.value)) { |
Line 46 function verify() {
|
Line 63 function verify() {
|
if (document.forms.dataForm.source.selectedIndex == 0) { |
if (document.forms.dataForm.source.selectedIndex == 0) { |
alert("You must choose the Course Management System from which the IMS package was exported"); |
alert("You must choose the Course Management System from which the IMS package was exported"); |
return false |
return false |
} |
} |
return true |
return true |
} |
} |
|
|
function nextPage() { |
function nextPage() { |
if (verify()) { |
if (verify()) { |
document.forms.dataForm.go.value="NextPage" |
document.forms.dataForm.go.value="NextPage" |
Line 80 function createWin() {
|
Line 97 function createWin() {
|
newWindow.document.close() |
newWindow.document.close() |
newWindow.focus() |
newWindow.focus() |
} |
} |
|
|
|
function setCourse(caller) { |
|
courseID_array = new Array($course_list) |
|
courseTitle_array = new Array($title_list) |
|
var step1Form = document.forms.dataForm |
|
var curVal = step1Form.elements[caller*2+3].options[step1Form.elements[caller*2+3].selectedIndex].value |
|
step1Form.elements[caller*2+4].length = 0 |
|
if (step1Form.elements[caller*2+3].options[step1Form.elements[caller*2+3].selectedIndex].value == "-1") { |
|
step1Form.elements[caller*2+4].options[0] = new Option("<--- Set type ","-1",true,true) |
|
} |
|
else { |
|
if ((step1Form.elements[caller*2+3].selectedIndex == 2 ) || (step1Form.elements[caller*2+3].selectedIndex == 3)) { |
|
step1Form.elements[caller*2+4].options[0] = new Option("Please Select","-1",true,true) |
|
if (courseID_array.length > 0) { |
|
step1Form.elements[caller*2+4].options[0] = new Option("Please Select","-1",true,true) |
|
for (var i=0; i<courseID_array.length; i++) { |
|
step1Form.elements[caller*2+4].options[i+1] = new Option(courseTitle_array[i],courseID_array[i],false,false) |
|
} |
|
} |
|
else { |
|
step1Form.elements[caller*2+4].options[0] = new Option("No courses available","-2",true,true) |
|
step1Form.elements[caller*2+3].selectedIndex == 1 |
|
} |
|
step1Form.elements[caller*2+4].selectedIndex = 0 |
|
} |
|
else { |
|
step1Form.elements[caller*2+4].options[0] = new Option("Not required","0",true,true) |
|
} |
|
} |
|
} |
|
|
END_OF_ONE |
END_OF_ONE |
|
|
} |
} |
|
|
# ---------------------------------------------------------------- Display Zero |
# ---------------------------------------------------------------- Display Zero |
sub display_zero { |
sub display_zero { |
my ($r,$uname,$fn,$page) = @_; |
my ($r,$uname,$fn,$page,$fullpath) = @_; |
|
|
$r->print(<<"END_OF_ONE"); |
$r->print(<<"END_OF_ONE"); |
<h3><font face='arial,helvetica,sans-serif'>Step 1: Selection of IMS package type and destination directory for the package contents</b> </font></h3> |
|
<form name="dataForm" method="post"> |
<form name="dataForm" method="post"> |
<table border='0' bgcolor='#CCFFDD' cellspacing='0' cellpadding ='0' width='100%'> |
<table border='0' bgcolor='#CCFFDD' cellspacing='0' cellpadding ='0' width='100%'> |
<tr> |
<tr> |
Line 100 sub display_zero {
|
Line 146 sub display_zero {
|
</td> |
</td> |
</tr> |
</tr> |
<tr bgcolor='#ccddaa'> |
<tr bgcolor='#ccddaa'> |
<td width='30' align='top'> |
<td valign='middle'><img src='/res/adm/pages/bl_step1.gif'> |
</td> |
</td> |
<td width='100%' align='left'> |
<td width='100%' align='left'> |
<font size='+1' face='arial,helvetica,sans-serif'><b>Specify the Course Management system used to create the package.</b></font> |
<font face='arial,helvetica,sans-serif'><b>Specify the Course Management system used to create the package.</b> |
|
</font> |
</td> |
</td> |
</tr> |
</tr> |
<tr> |
<tr> |
Line 113 sub display_zero {
|
Line 160 sub display_zero {
|
<td> </td> |
<td> </td> |
<td> |
<td> |
<font face='Arial,Helvetica,sans-serif'> |
<font face='Arial,Helvetica,sans-serif'> |
Please choose the CMS used to create your IMS content package.</font> |
Please choose the CMS used to create your IMS content package. |
</td> |
|
</tr> |
|
<tr> |
|
<td colspan='2'> </td> |
|
</tr> |
|
<tr> |
|
<tr> |
|
<td> </td> |
|
<td> |
|
<font face='Arial,Helvetica,sans-serif'> |
|
<select name="source"> |
<select name="source"> |
<option value='-1' selected="true">Please select |
<option value='-1' selected="true">Please select |
<option value='bb5'>Blackboard 4 or 5 |
<option value='bb5'>Blackboard 5 |
<option value='bb6'>Blackboard 6 |
|
<option value='angel'>ANGEL |
<option value='angel'>ANGEL |
<option value='webct'>WebCT |
|
</select> |
</select> |
|
</font> |
</td> |
</td> |
</tr> |
</tr> |
<tr> |
<tr> |
<td colspan='2'> </td> |
<td colspan='2'> </td> |
</tr> |
</tr> |
|
<tr> |
|
<td colspan='2'> </td> |
|
</tr> |
<tr bgcolor='#ccddaa'> |
<tr bgcolor='#ccddaa'> |
<td width='30' align='top'> |
<td valign='middle'><img src='/res/adm/pages/bl_step2.gif'> |
</td> |
</td> |
<td width='100%' align='left'> |
<td width='100%' align='left'> |
<font size='+1' face='arial,helvetica,sans-serif'><b>Create a directory where you will unpack your IMS package.</b></font> |
<font face='arial,helvetica,sans-serif'><b>Create a directory where you will unpack your IMS package.</b> </font></td> |
</td> |
|
</tr> |
</tr> |
<tr> |
<tr> |
<td colspan='2'> </td> |
<td colspan='2'> </td> |
</tr> |
</tr> |
<tr> |
|
<td> </td> |
<td> </td> |
<td> |
<td> |
<font face='Arial,Helvetica,sans-serif'> |
<font face='Arial,Helvetica,sans-serif'> |
Please choose a destination LON-CAPA directory in which to store the contents of the IMS package file</font> |
Please choose a destination LON-CAPA directory in which to store the contents of the IMS package file. <input type="button" name="createdir" value="Create Directory" onClick="javascript:createWin()"><input type="hidden" name="newdir" value=""></font> |
|
</td> |
|
</tr> |
|
<tr> |
|
<td colspan='2'> <br /><br /></td> |
|
</tr> |
|
<tr bgcolor='#ccddaa'> |
|
<td valign='middle'><img src='/res/adm/pages/bl_step3.gif'> |
|
</td> |
|
<td width='100%' align='left'> |
|
<font face='arial,helvetica,sans-serif'><b>Indicate how any discussion boards and user data in the package should be handled</b></font> |
</td> |
</td> |
</tr> |
</tr> |
<tr> |
<tr> |
Line 158 Please choose a destination LON-CAPA dir
|
Line 205 Please choose a destination LON-CAPA dir
|
</tr> |
</tr> |
<tr> |
<tr> |
<td> </td> |
<td> </td> |
<td><input type="button" name="createdir" value="Create Directory" onClick="javascript:createWin()"><input type="hidden" name="newdir" value=""></td> |
<td> |
|
<table border='0' cellspacing='0' cellpadding='1' bgcolor='#000000'> |
|
<tr> |
|
<td> |
|
<table border='0' cellspacing='0' cellpadding='0' bgcolor='#ffffff' width='100%'> |
|
<tr> |
|
<td> |
|
<table border='0' cellspacing='1' cellpadding='1' bgcolor='#CCFFDD' width='100%'> |
|
<tr bgcolor='#ccddaa'> |
|
<td align='center'><font face='arial,helvetica,sans-serif'><b>Type of data</b></font></td> |
|
<td align='center'><font face='arial,helvetica,sans-serif'><b>Action</b></font></td> |
|
<td align='center'><font face='arial,helvetica,sans-serif'><b>Target course</b></font></td> |
|
</tr> |
|
<tr bgcolor='#eeeeee'> |
|
<td align='left'><font face='arial,helvetica,sans-serif'> Discussion boards  </font></td> |
|
<td align='left'><font face='arial,helvetica,sans-serif'> |
|
<select name='bb_handling' onChange="setCourse('0')"> |
|
<option value='-1'>Select |
|
<option value='ignore'>Disregard |
|
<option value='topics'>Import topics only |
|
<option value='importall'>Import topics & posts |
|
</select> |
|
</font> |
|
</td> |
|
<td align='left'> <font face='arial,helvetica,sans-serif'> |
|
<select name='bb_crs'> |
|
<option value='-1'><--Pick action first |
|
</select> |
|
</font> |
|
</td> |
|
</tr> |
|
<tr bgcolor='#dddddd'> |
|
<td align='left'><font face='arial,helvetica,sans-serif'> User information</font> </td> |
|
<td align='left'> |
|
<select name='user_handling' onChange="setCourse('1')"> |
|
<option value='-1'>Select |
|
<option value='ignore'>Disregard |
|
<option value='students'>Enroll students only |
|
<option value='enrollall'>Emroll all users |
|
</select> |
|
</font> |
|
</td> |
|
<td align='left'> |
|
<font face='arial,helvetica,sans-serif'> |
|
<select name='user_crs'> |
|
<option value='-1'><--Pick action first |
|
</select> |
|
</font> |
|
</td> |
|
</tr> |
|
</table> |
|
</td> |
|
</tr> |
|
</table> |
|
</td> |
|
</tr> |
|
</table> |
|
</td> |
</tr> |
</tr> |
<tr> |
<tr> |
<td colspan='2'> </td> |
<td colspan='2'> <br /><br /></td> |
</tr> |
</tr> |
<tr> |
<tr> |
<td> </td> |
<td> </td> |
<td><font face='arial,helvetica,sans-serif'>If you have created a destination directory you should use the "Next Page" button to complete the process of unpacking your IMS package.</font></td> |
<td><font face='arial,helvetica,sans-serif'>If you have created a destination directory, and have made your selections for the disposition of bulletin boards and user information, you should click the 'Convert' button to unpack your IMS package.</font></td> |
</tr> |
</tr> |
<tr> |
<tr> |
<td colspan='2'> |
<td colspan='2'> |
Line 183 Please choose a destination LON-CAPA dir
|
Line 287 Please choose a destination LON-CAPA dir
|
<td colspan='2'> |
<td colspan='2'> |
<table border='0' cellspacing='0' cellpadding='0' width="100%"> |
<table border='0' cellspacing='0' cellpadding='0' width="100%"> |
<tr> |
<tr> |
<td align='left'> |
<td align='left'> |
|
<input type='button' name='exitpage' value='Exit now' onClick="javascript:location.href='$fullpath'"> |
</td> |
</td> |
<td align='right'> |
<td align='right'> |
<input type="button" name="nextpage" value="Continue to step 2" onClick="javascript:nextPage()"> |
<input type="button" name="nextpage" value="Convert" onClick="javascript:nextPage()"> |
</td> |
</td> |
</tr> |
</tr> |
</table> |
</table> |
Line 200 Please choose a destination LON-CAPA dir
|
Line 305 Please choose a destination LON-CAPA dir
|
END_OF_ONE |
END_OF_ONE |
} |
} |
|
|
# ---------------------------------------------------------------- Display One |
# ---------------------------------------------------------------- Expand bb5 |
|
|
sub expand_bb5 { |
sub expand_bb5 { |
my ($r,$uname,$udom,$fn,$page) = @_; |
my ($r,$uname,$udom,$fn,$page,$bb_crs,$bb_cdom,$bb_handling,$users_crs,$users_cdom,$users_handling) = @_; |
my @state = (); |
my @state = (); |
my @seq = "Top"; |
my @seq = "Top"; |
my $lastitem; |
my $lastitem; |
Line 221 sub expand_bb5 {
|
Line 325 sub expand_bb5 {
|
my %resinfo = (); |
my %resinfo = (); |
my $numfolders = 0; |
my $numfolders = 0; |
my $numpages = 0; |
my $numpages = 0; |
|
my @timestamp = (); |
|
my @boards = (); |
|
my @groups = (); |
|
my $board_count = 0; |
|
my $board_id = time; |
|
my $totseq = 0; |
|
my $totpage = 0; |
|
my $totprob = 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 232 sub expand_bb5 {
|
Line 344 sub expand_bb5 {
|
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'; |
# print STDERR "XML file is $xmlfile\n"; |
|
my $p = HTML::Parser->new |
my $p = HTML::Parser->new |
( |
( |
xml_mode => 1, |
xml_mode => 1, |
Line 252 sub expand_bb5 {
|
Line 363 sub expand_bb5 {
|
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 "tableofcontents") ) { |
if ( ($state[0] eq "manifest") && ($state[1] eq "organizations") && ($state[2] eq "tableofcontents") ) { |
my $searchstr = "manifest organizations tableofcontents"; |
my $searchstr = "manifest organizations tableofcontents"; |
while ($num > 0) { |
while ($num > 0) { |
$searchstr .= " item"; |
$searchstr .= " item"; |
$num --; |
$num --; |
} |
} |
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}; |
$title{$itm} = $attr->{title}; |
$title{$itm} = $attr->{title}; |
if ($start > @seq) { |
if ($start > @seq) { |
unless ($lastitem eq '') { |
unless ($lastitem eq '') { |
push @seq, $lastitem; |
push @seq, $lastitem; |
unless ( defined($contents{$seq[-1]}) ) { |
unless ( defined($contents{$seq[-1]}) ) { |
@{$contents{$seq[-1]}} = (); |
@{$contents{$seq[-1]}} = (); |
|
} |
|
push @{$contents{$seq[-1]}},$itm; |
|
$parentseq{$itm} = $seq[-1]; |
} |
} |
push @{$contents{$seq[-1]}},$itm; |
|
$parentseq{$itm} = $seq[-1]; |
|
} |
} |
|
elsif ($start < @seq) { |
|
my $diff = @seq - $start; |
|
while ($diff > 0) { |
|
pop @seq; |
|
$diff --; |
|
} |
|
if (@seq) { |
|
push @{$contents{$seq[-1]}}, $itm; |
|
} |
|
} else { |
|
push @{$contents{$seq[-1]}}, $itm; |
|
} |
|
my $path; |
|
if (@seq > 1) { |
|
$path = join(',',@seq); |
|
} elsif (@seq > 0) { |
|
$path = $seq[0]; |
|
} |
|
$filepath{$itm} = $path; |
|
$contentscount{$seq[-1]} ++; |
|
$lastitem = $itm; |
} |
} |
elsif ($start < @seq) { |
|
my $diff = @seq - $start; |
|
while ($diff > 0) { |
|
pop @seq; |
|
$diff --; |
|
} |
|
if (@seq) { |
|
push @{$contents{$seq[-1]}}, $itm; |
|
} |
|
} else { |
|
push @{$contents{$seq[-1]}}, $itm; |
|
} |
|
my $path; |
|
if (@seq > 1) { |
|
$path = join(',',@seq); |
|
} elsif (@seq > 0) { |
|
$path = $seq[0]; |
|
} |
|
$filepath{$itm} = $path; |
|
$contentscount{$seq[-1]} ++; |
|
$lastitem = $itm; |
|
} |
|
} elsif ("@state" eq "manifest resources resource" ) { |
} elsif ("@state" eq "manifest resources resource" ) { |
$identifier = $attr->{identifier}; |
$identifier = $attr->{identifier}; |
$base{$identifier} = $attr->{baseurl}; |
$base{$identifier} = $attr->{baseurl}; |
$file{$identifier} = $attr->{file}; |
$file{$identifier} = $attr->{file}; |
$type{$identifier} = $attr->{type}; |
$type{$identifier} = $attr->{type}; |
} elsif ("@state" eq "manifest resources resource file") { |
} elsif ("@state" eq "manifest resources resource file") { |
push@{$href{$identifier}},$attr->{href}; |
push @{$href{$identifier}},$attr->{href}; |
} |
} |
}, "tagname, attr"], |
}, "tagname, attr"], |
text_h => |
text_h => |
Line 321 sub expand_bb5 {
|
Line 432 sub expand_bb5 {
|
|
|
my $topnum = 0; |
my $topnum = 0; |
my $destdir = $docroot; |
my $destdir = $docroot; |
# print STDERR "Destdir is $destdir\n"; |
|
if (!-e "$destdir") { |
if (!-e "$destdir") { |
mkdir("$destdir",0755); |
mkdir("$destdir",0755); |
} |
} |
Line 337 sub expand_bb5 {
|
Line 447 sub expand_bb5 {
|
if (!-e "$destdir/problems") { |
if (!-e "$destdir/problems") { |
mkdir("$destdir/problems",0755); |
mkdir("$destdir/problems",0755); |
} |
} |
open(FILE,">$destdir/sequences/ims_import.sequence"); |
|
print FILE "<map>\n"; |
|
|
|
foreach my $key (sort keys %href) { |
foreach my $key (sort keys %href) { |
foreach my $file (@{$href{$key}}) { |
foreach my $file (@{$href{$key}}) { |
my $filepath = $file; |
my $filepath = $file; |
Line 362 sub expand_bb5 {
|
Line 469 sub expand_bb5 {
|
&process_content($key,$docroot,$destdir,\%{$resinfo{$key}},$udom,$uname); |
&process_content($key,$docroot,$destdir,\%{$resinfo{$key}},$udom,$uname); |
} elsif ($type{$key} eq "resource/x-bb-staffinfo") { |
} elsif ($type{$key} eq "resource/x-bb-staffinfo") { |
%{$resinfo{$key}} = (); |
%{$resinfo{$key}} = (); |
&process_staff($key,$docroot,$destdir,\%{$resinfo{$key}}); |
&process_staff($key,$docroot,$dirname,$destdir,\%{$resinfo{$key}}); |
} elsif ($type{$key} eq "resource/x-bb-externallink") { |
} elsif ($type{$key} eq "resource/x-bb-externallink") { |
%{$resinfo{$key}} = (); |
%{$resinfo{$key}} = (); |
&process_link($key,$docroot,$destdir,\%{$resinfo{$key}}); |
&process_link($key,$docroot,$dirname,$destdir,\%{$resinfo{$key}}); |
} elsif ($type{$key} eq "resource/x-bb-discussionboard") { |
} elsif ($type{$key} eq "resource/x-bb-discussionboard") { |
%{$resinfo{$key}} = (); |
%{$resinfo{$key}} = (); |
&process_db($key,$docroot,$destdir,\%{$resinfo{$key}}); |
unless ($bb_handling eq 'ignore') { |
|
$contentscount{Top} ++; |
|
push @boards, $key; |
|
$timestamp[$board_count] = $board_id; |
|
&process_db($key,$docroot,$destdir,$board_id,$bb_crs,$bb_cdom,$bb_handling,$uname,\%{$resinfo{$key}}); |
|
$board_id ++; |
|
$board_count ++; |
|
} |
} elsif ($type{$key} eq "resource/x-bb-announcement") { |
} elsif ($type{$key} eq "resource/x-bb-announcement") { |
%{$resinfo{$key}} = (); |
%{$resinfo{$key}} = (); |
&process_announce($key,$docroot,$destdir,\%{$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}}); |
&process_assessment($key,$docroot,'pool',$dirname,$destdir,\%{$resinfo{$key}},\$totpage,\$totprob); |
} 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}}); |
&process_assessment($key,$docroot,'quiz',$dirname,$destdir,\%{$resinfo{$key}},\$totpage,\$totprob); |
} 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}}); |
&process_assessment($key,$docroot,'survey',$dirname,$destdir,\%{$resinfo{$key}},\$totpage,\$totprob); |
} 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; |
&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") { |
%{$resinfo{$key}} = (); |
%{$resinfo{$key}} = (); |
&process_user($key,$docroot,$destdir,\%{$resinfo{$key}}); |
unless ($user_handling eq 'ignore') { |
|
&process_user($key,$docroot,$destdir,\%{$resinfo{$key}},$user_crs,$user_cdom,$user_handling); |
|
} |
} |
} |
} |
} |
|
|
Line 405 sub expand_bb5 {
|
Line 523 sub expand_bb5 {
|
my %seqcount = (); |
my %seqcount = (); |
|
|
foreach my $key (sort keys %resnum) { |
foreach my $key (sort keys %resnum) { |
# print STDERR "$key $filepath{$key} $resnum{$key} $title{$key}\n"; |
|
$pageflag{$key} = 0; |
$pageflag{$key} = 0; |
$seqflag{$key} = 0; |
$seqflag{$key} = 0; |
$seqcount{$key} = 0; |
$seqcount{$key} = 0; |
Line 453 sub expand_bb5 {
|
Line 570 sub expand_bb5 {
|
$areacount = 0; |
$areacount = 0; |
} else { |
} else { |
if ($filepath{$key} eq "Top,$areakey") { |
if ($filepath{$key} eq "Top,$areakey") { |
# print STDERR "$key $filepath{$key} $resnum{$key} $title{$key}\n"; |
|
my $src = ''; |
my $src = ''; |
if ($areacount == 0) { |
if ($areacount == 0) { |
if ($resinfo{$resnum{$key}}{'isfolder'} eq "true") { |
if ($resinfo{$resnum{$key}}{'isfolder'} eq "true") { |
Line 522 sub expand_bb5 {
|
Line 638 sub expand_bb5 {
|
# print STDERR "Contents Count for $key is $contentscount{$key}\n"; |
# print STDERR "Contents Count for $key is $contentscount{$key}\n"; |
open(LOCFILE,">$destdir/sequences/$key.sequence"); |
open(LOCFILE,">$destdir/sequences/$key.sequence"); |
print LOCFILE "<map>\n"; |
print LOCFILE "<map>\n"; |
|
$totseq ++; |
if ($contentscount{$key} == 0) { |
if ($contentscount{$key} == 0) { |
print LOCFILE qq|<resource id="1" src="" type="start"></resource> |
print LOCFILE qq|<resource id="1" src="" type="start"></resource> |
<link from="1" to="2" index="1"></link> |
<link from="1" to="2" index="1"></link> |
Line 603 sub expand_bb5 {
|
Line 720 sub expand_bb5 {
|
} else { |
} else { |
print LOCFILE qq| type="finish"></resource>\n|; |
print LOCFILE qq| type="finish"></resource>\n|; |
} |
} |
print STDERR "seqcount is $seqcount{$key}, pagecount is $pagecount{$key} for $key\n"; |
|
} else { |
} else { |
$curr_id ++; |
$curr_id ++; |
$next_id ++; |
$next_id ++; |
Line 618 sub expand_bb5 {
|
Line 734 sub expand_bb5 {
|
} |
} |
} |
} |
} |
} |
|
if (@boards > 0) { |
|
$topnum ++; |
|
print TOPFILE qq|<resource id="$topnum" src="/res/$udom/$uname/$newdir/sequences/bulletinboards.sequence" title="Course Bulletin Boards"|; |
|
$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|; |
|
} |
|
} |
|
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 { |
|
for (my $i=1; $i<@boards; $i++) { |
|
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>|; |
|
close(BOARD); |
|
} |
print TOPFILE "</map>"; |
print TOPFILE "</map>"; |
close(TOPFILE); |
close(TOPFILE); |
foreach my $key (sort keys %pagecontents) { |
foreach my $key (sort keys %pagecontents) { |
for (my $i=0; $i<@{$pagecontents{$key}}; $i++) { |
for (my $i=0; $i<@{$pagecontents{$key}}; $i++) { |
my $filestem = "/res/$udom/$uname/$newdir"; |
my $filestem = "/res/$udom/$uname/$newdir"; |
my $filename = $destdir.'/pages/'.$key.'_'.$i.'.page'; |
my $filename = $destdir.'/pages/'.$key.'_'.$i.'.page'; |
|
$totpage ++; |
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]}.html" id="1" type="start" title="$title{$pagecontents{$key}[$i][0]}"></resource> |
Line 648 sub expand_bb5 {
|
Line 806 sub expand_bb5 {
|
} |
} |
} |
} |
system(" rm -r $docroot/temp"); |
system(" rm -r $docroot/temp"); |
|
return($totseq,$totpage,$totprob); |
} |
} |
|
|
|
|
sub process_user { |
sub process_user { |
my ($res,$docroot,$destdir,$settings) = @_; |
my ($res,$docroot,$destdir,$settings,$user_crs,$user_cdom,$user_handling) = @_; |
my $xmlfile = $docroot."/temp/".$res.".dat"; |
my $xmlfile = $docroot."/temp/".$res.".dat"; |
my $filecount = 0; |
my $filecount = 0; |
my @state; |
my @state; |
Line 665 sub process_user {
|
Line 825 sub process_user {
|
[sub { |
[sub { |
my ($tagname, $attr) = @_; |
my ($tagname, $attr) = @_; |
push @state, $tagname; |
push @state, $tagname; |
if (@state eq " USERS USER") { |
if (@state eq "USERS USER") { |
$userid = $attr->{value}; |
$userid = $attr->{value}; |
%{$$$settings{$userid}} = (); |
%{$$settings{$userid}} = (); |
@{$$settings{$userid}{links}} = (); |
@{$$settings{$userid}{links}} = (); |
} elsif (@state eq "USERS USER LOGINID") { |
} elsif (@state eq "USERS USER LOGINID") { |
$$settings{$userid}{loginid} = $attr->{value}; |
$$settings{$userid}{loginid} = $attr->{value}; |
Line 718 sub process_user {
|
Line 878 sub process_user {
|
$p->unbroken_text(1); |
$p->unbroken_text(1); |
$p->parse_file($xmlfile); |
$p->parse_file($xmlfile); |
$p->eof; |
$p->eof; |
|
|
|
my $configvars = &LONCAPA::Configuration::read_conf('loncapa.conf'); |
|
my $xmlstem = $$configvars{'lonDaemons'}."/tmp/".$dom."_".$crs."_"; |
|
|
|
open (STUFILE,"> |
|
foreach my $user_id (keys %{$settings}) { |
|
if ($$settings{$user_id}{user_role} eq "s") { |
|
# enroll as a single student |
|
} elsif ($user_handling eq 'enrollall') { |
|
# enroll as another user type |
|
} |
|
} |
} |
} |
|
|
sub process_group { |
sub process_group { |
Line 771 sub process_group {
|
Line 943 sub process_group {
|
} |
} |
|
|
sub process_staff { |
sub process_staff { |
my ($res,$docroot,$destdir,$settings) = @_; |
my ($res,$docroot,$dirname,$destdir,$settings) = @_; |
my $xmlfile = $docroot."/temp/".$res.".dat"; |
my $xmlfile = $docroot."/temp/".$res.".dat"; |
my $filecount = 0; |
my $filecount = 0; |
my @state; |
my @state; |
Line 787 sub process_staff {
|
Line 959 sub process_staff {
|
push @state, $tagname; |
push @state, $tagname; |
if (@state eq "STAFFINFO TITLE") { |
if (@state eq "STAFFINFO TITLE") { |
$$settings{title} = $attr->{value}; |
$$settings{title} = $attr->{value}; |
} elsif (@state eq "STAFFINFO BIOGRAPHY TEXTCOLOR") { |
} elsif (@state eq "STAFFINFO BIOGRAPHY TEXTCOLOR") { |
$$settings{textcolor} = $attr->{value}; |
$$settings{textcolor} = $attr->{value}; |
} elsif (@state eq "STAFFINFO BIOGRAPHY FLAGS ISHTML") { |
} elsif (@state eq "STAFFINFO BIOGRAPHY FLAGS ISHTML") { |
$$settings{ishtml} = $attr->{value}; |
$$settings{ishtml} = $attr->{value}; |
} elsif ("@state" eq "STAFFINFO FLAGS ISAVAILABLE" ) { |
} elsif ("@state" eq "STAFFINFO FLAGS ISAVAILABLE" ) { |
$$settings{isavailable} = $attr->{value}; |
$$settings{isavailable} = $attr->{value}; |
} elsif ("@state" eq "STAFFINFO FLAGS ISFOLDER" ) { |
} elsif ("@state" eq "STAFFINFO FLAGS ISFOLDER" ) { |
Line 834 sub process_staff {
|
Line 1006 sub process_staff {
|
$p->unbroken_text(1); |
$p->unbroken_text(1); |
$p->parse_file($xmlfile); |
$p->parse_file($xmlfile); |
$p->eof; |
$p->eof; |
|
|
|
my $fontcol = ''; |
|
if (defined($$settings{textcolor})) { |
|
$fontcol = qq|color="$$settings{textcolor}"|; |
|
} |
|
if (defined($$settings{text})) { |
|
if ($$settings{ishtml} eq "true") { |
|
$$settings{text} = &HTML::Entities::decode($$settings{text}); |
|
} |
|
} |
|
my $staffentry = qq| |
|
<table border="0" cellpadding="0" cellspacing="0" width="100%"> |
|
<tr> |
|
<td colspan="2"><hr /><font face="arial,helv" size="3"><b>$$settings{name}{formaltitle} $$settings{name}{given} $$settings{name}{family}</b></font> |
|
</td> |
|
</tr> |
|
<tr> |
|
<td valign="top"> |
|
<table width="100% border="0" cols="2" cellpadding="0" cellspacing="0">|; |
|
if ( defined($$settings{email}) && $$settings{email} ne '') { |
|
$staffentry .= qq| |
|
<tr> |
|
<td width="100" valign="top"> |
|
<font face="arial" size="2"><b>Email:</b></font> |
|
</td> |
|
<td> |
|
<font face="arial" size="2"><a href="mailto:$$settings{email}">$$settings{email}</a></font> |
|
</td> |
|
</tr> |
|
|; |
|
} |
|
if (defined($$settings{phone}) && $$settings{phone} ne '') { |
|
$staffentry .= qq| |
|
<tr> |
|
<td width="100" valign="top"> |
|
<font face="arial" size="2"><b>Phone:</b></font> |
|
</td> |
|
<td> |
|
<font face="arial" size="2">$$settings{phone}</font> |
|
</td> |
|
</tr> |
|
|; |
|
} |
|
if (defined($$settings{office}{address}) && $$settings{office}{address} ne '') { |
|
$staffentry .= qq| |
|
<tr> |
|
<td width="100" valign="top"> |
|
<font face="arial" size="2"><b>Address:</b></font> |
|
</td> |
|
<td> |
|
<font face="arial" size="2">$$settings{office}{address}</font> |
|
</td> |
|
</tr> |
|
|; |
|
} |
|
if (defined($$settings{office}{hours}) && $$settings{office}{hours} ne '') { |
|
$staffentry .= qq| |
|
<tr> |
|
<td width="100" valign="top"> |
|
<font face="arial" size="2"><b>Office Hours:</b></font> |
|
</td> |
|
<td> |
|
<font face=arial size=2>$$settings{office}{hours}</font> |
|
</td> |
|
</tr> |
|
|; |
|
} |
|
if ( defined($$settings{homepage}) && $$settings{homepage} ne '') { |
|
$staffentry .= qq| |
|
<tr> |
|
<td width="100" valign="top"> |
|
<font face="arial" size="2"><b>Personal Link:</b></font> |
|
</td> |
|
<td> |
|
<font face="arial" size="2"><a href="$$settings{homepage}">$$settings{homepage}</a></font> |
|
</td> |
|
</tr> |
|
|; |
|
} |
|
if (defined($$settings{text}) && $$settings{text} ne '') { |
|
$staffentry .= qq| |
|
<tr> |
|
<td colspan="2"> |
|
<font face="arial" size="2" $fontcol><b>Other Information:</b><br/>$$settings{text}</font> |
|
</td> |
|
</tr> |
|
|; |
|
} |
|
$staffentry .= qq| |
|
</table> |
|
</td> |
|
<td align="right" valign="top"> |
|
|; |
|
if ( defined($$settings{image}) ) { |
|
$staffentry .= qq| |
|
<img src="$dirname/resfiles/$res/$$settings{image}"> |
|
|; |
|
} |
|
$staffentry .= qq| |
|
</td> |
|
</tr> |
|
</table> |
|
|; |
|
open(FILE,">$destdir/resfiles/$res.html"); |
|
print FILE qq|<html> |
|
<head> |
|
<title>$$settings{title}</title> |
|
</head> |
|
<body bgcolor='#ffffff'> |
|
$staffentry |
|
</body> |
|
</html>|; |
|
close(FILE); |
} |
} |
|
|
sub process_link { |
sub process_link { |
my ($res,$docroot,$destdir,$settings) = @_; |
my ($res,$docroot,$dirname,$destdir,$settings) = @_; |
my $xmlfile = $docroot."/temp/".$res.".dat"; |
my $xmlfile = $docroot."/temp/".$res.".dat"; |
my @state = (); |
my @state = (); |
%{$$settings{name}} = (); |
my $p = HTML::Parser->new |
%{$$settings{office}} = (); |
|
|
|
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 "EXTERNALLINK TITLE") { |
if (@state eq "EXTERNALLINK TITLE") { |
$$settings{title} = $attr->{value}; |
$$settings{title} = $attr->{value}; |
} elsif (@state eq "EXTERNALLINK TEXTCOLOR") { |
} elsif (@state eq "EXTERNALLINK TEXTCOLOR") { |
$$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 "EXTERNALLINKS FLAGS ISAVAILABLE" ) { |
$$settings{isavailable} = $attr->{value}; |
$$settings{isavailable} = $attr->{value}; |
} elsif ("@state" eq "EXTERNALLINKS FLAGS LAUNCHINNEWWINDOW" ) { |
} elsif ("@state" eq "EXTERNALLINKS FLAGS LAUNCHINNEWWINDOW" ) { |
$$settings{newwindow} = $attr->{value}; |
$$settings{newwindow} = $attr->{value}; |
} elsif ("@state" eq "EXTERNALLINKS FLAGS ISFOLDER" ) { |
} elsif ("@state" eq "EXTERNALLINKS FLAGS ISFOLDER" ) { |
$$settings{isfolder} = $attr->{value}; |
$$settings{isfolder} = $attr->{value}; |
} elsif ("@state" eq "EXTERNALLINKS POSITION" ) { |
} elsif ("@state" eq "EXTERNALLINKS POSITION" ) { |
$$settings{position} = $attr->{value}; |
$$settings{position} = $attr->{value}; |
} elsif ("@state" eq "EXTERNALLINKS URL" ) { |
} elsif ("@state" eq "EXTERNALLINKS URL" ) { |
$$settings{url} = $attr->{value}; |
$$settings{url} = $attr->{value}; |
|
} |
|
}, "tagname, attr"], |
|
text_h => |
|
[sub { |
|
my ($text) = @_; |
|
if ("@state" eq "EXTERNALLINKS DESCRIPTION TEXT") { |
|
$$settings{text} = $text; |
|
} |
|
}, "dtext"], |
|
end_h => |
|
[sub { |
|
my ($tagname) = @_; |
|
pop @state; |
|
}, "tagname"], |
|
); |
|
$p->unbroken_text(1); |
|
$p->parse_file($xmlfile); |
|
$p->eof; |
|
|
|
my $linktag = ''; |
|
my $fontcol = ''; |
|
if (defined($$settings{textcolor})) { |
|
$fontcol = qq|<font color="$$settings{textcolor}">|; |
|
} |
|
if (defined($$settings{text})) { |
|
if ($$settings{ishtml} eq "true") { |
|
$$settings{text} = &HTML::Entities::decode($$settings{text}); |
} |
} |
}, "tagname, attr"], |
} |
text_h => |
|
[sub { |
if (defined($$settings{url}) ) { |
my ($text) = @_; |
$linktag = qq|<a href="$$settings{url}"|; |
if ("@state" eq "EXTERNALLINKS DESCRIPTION TEXT") { |
if ($$settings{newwindow} eq "true") { |
$$settings{text} = $text; |
$linktag .= qq| target="launch"|; |
} |
} |
}, "dtext"], |
$linktag .= qq|>$$settings{title}</a>|; |
end_h => |
} |
[sub { |
|
my ($tagname) = @_; |
open(FILE,">$destdir/resfiles/$res.html"); |
pop @state; |
print FILE qq|<html> |
}, "tagname"], |
<head> |
); |
<title>$$settings{title}</title> |
$p->unbroken_text(1); |
</head> |
$p->parse_file($xmlfile); |
<body bgcolor='#ffffff'> |
$p->eof; |
$fontcol |
|
$linktag |
|
$$settings{text} |
|
|; |
|
if (defined($$settings{textcolor})) { |
|
print FILE qq|</font>|; |
|
} |
|
print FILE qq| |
|
</body> |
|
</html>|; |
|
close(FILE); |
} |
} |
|
|
sub process_db { |
sub process_db { |
my ($res,$docroot,$destdir,$settings) = @_; |
my ($res,$docroot,$destdir,$timestamp,$crs,$cdom,$handling,$uname,$settings) = @_; |
my $xmlfile = $docroot."/temp/".$res.".dat"; |
my $xmlfile = $docroot."/temp/".$res.".dat"; |
my @state = (); |
my @state = (); |
my %threads; # all quotes, keyed by message ID |
my @allmsgs = (); |
my $msg_id; # the current message ID |
my %msgidx = (); |
my %message; # the current message being accumulated for $msg_id |
my $longcrs = ''; |
|
if ($crs =~ m/^(\d)(\d)(\d)/) { |
|
$longcrs = $1.'/'.$2.'/'.$3.'/'.$crs; |
|
} |
|
my %threads; # all quotes, keyed by message ID |
|
my $msg_id; # the current message ID |
|
my %message; # the current message being accumulated for $msg_id |
|
|
my $p = HTML::Parser->new |
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; |
my $depth = 0; |
my $depth = 0; |
my @seq = (); |
my @seq = (); |
if (@state eq "FORUM TITLE") { |
if ("@state" eq "FORUM TITLE") { |
$$settings{title} = $attr->{value}; |
$$settings{title} = $attr->{value}; |
} elsif (@state eq "STAFFINFO BIOGRAPHY TEXTCOLOR") { |
} elsif ("@state" eq "FORUM DESCRIPTION TEXTCOLOR") { |
$$settings{textcolor} = $attr->{value}; |
$$settings{textcolor} = $attr->{value}; |
} elsif (@state eq "FORUM DESCRIPTION FLAGS ISHTML") { |
} elsif ("@state" eq "FORUM DESCRIPTION FLAGS ISHTML") { |
$$settings{ishtml} = $attr->{value}; |
$$settings{ishtml} = $attr->{value}; |
} elsif (@state eq "FORUM DESCRIPTION FLAGS ISNEWLINELITERAL") { |
} elsif ("@state" eq "FORUM DESCRIPTION FLAGS ISNEWLINELITERAL") { |
$$settings{newline} = $attr->{value}; |
$$settings{newline} = $attr->{value}; |
} elsif ("@state" eq "FORUM POSITION" ) { |
} elsif ("@state" eq "FORUM POSITION" ) { |
$$settings{position} = $attr->{value}; |
$$settings{position} = $attr->{value}; |
} elsif ("@state" eq "FORUM FLAGS ISREADONLY") { |
} elsif ("@state" eq "FORUM FLAGS ISREADONLY") { |
$$settings{isavailable} = $attr->{value}; |
$$settings{isreadonly} = $attr->{value}; |
} elsif ("@state" eq "FORUM FLAGS ISAVAILABLE" ) { |
} elsif ("@state" eq "FORUM FLAGS ISAVAILABLE" ) { |
$$settings{isavailable} = $attr->{value}; |
$$settings{isavailable} = $attr->{value}; |
} elsif ("@state" eq "FORUM FLAGS ALLOWANONYMOUSPOSTINGS" ) { |
} elsif ("@state" eq "FORUM FLAGS ALLOWANONYMOUSPOSTINGS" ) { |
$$settings{isfolder} = $attr->{value}; |
$$settings{allowanon} = $attr->{value}; |
} elsif ( ($state[0] eq "FORUM") && ($state[1] eq "MESSAGETHREADS") && ($state[2] eq "MSG") ) { |
} elsif ( ($state[0] eq "FORUM") && ($state[1] eq "MESSAGETHREADS") && ($state[2] eq "MSG") ) { |
if ($state[@state-1] eq "MSG") { |
if ($state[-1] eq "MSG") { |
$depth = @state - 3; |
unless ($msg_id eq '') { |
if ($depth > @seq) { |
push @{$threads{$msg_id}}, { %message }; |
unless ($msg_id eq '') { |
$depth = @state - 3; |
push @seq, $msg_id; |
if ($depth > @seq) { |
} |
push @seq, $msg_id; |
} |
} |
if ($depth < @seq) { |
} |
pop @seq; |
if ($depth < @seq) { |
} |
pop @seq; |
$msg_id = $attr->{value}; |
} |
%message = (); |
$msg_id = $attr->{id}; |
$message{depth} = $depth; |
push @allmsgs, $msg_id; |
if ($depth > 0) { |
$msgidx{$msg_id} = @allmsgs; |
$message{parent} = $seq[-1]; |
%message = (); |
} else { |
$message{depth} = $depth; |
$message{parent} = "None"; |
if ($depth > 0) { |
} |
$message{parent} = $seq[-1]; |
} elsif ($state[@state-1] eq "TITLE") { |
} else { |
$message{title} = $attr->{value}; |
$message{parent} = "None"; |
} elsif ( ( $state[@state-3] eq "MESSAGETEXT" ) && ( $state[@state-2] eq "FLAGS" ) && ( $state[@state-1] eq "ISHTML" ) ) { |
} |
$message{ishtml} = $attr->{value}; |
} elsif ($state[-1] eq "TITLE") { |
} elsif ( ( $state[@state-3] eq "MESSAGETEXT" ) && ( $state[@state-2] eq "FLAGS" ) && ( $state[@state-1] eq "ISNEWLINELITERAL" ) ) { |
$message{title} = $attr->{value}; |
$message{newline} = $attr->{value}; |
} elsif ( ( $state[-3] eq "MESSAGETEXT" ) && ( $state[-2] eq "FLAGS" ) && ( $state[-1] eq "ISHTML" ) ) { |
} elsif ( ( $state[@state-2] eq "DATES" ) && ( $state[@state-1] eq "CREATED" ) ) { |
$message{ishtml} = $attr->{value}; |
$message{created} = $attr->{value}; |
} elsif ( ( $state[-3] eq "MESSAGETEXT" ) && ( $state[-2] eq "FLAGS" ) && ( $state[-1] eq "ISNEWLINELITERAL" ) ) { |
} elsif ( $state[@state-2] eq "FLAGS") { |
$message{newline} = $attr->{value}; |
if ($state[@state-1] eq "ISANONYMOUS") { |
} elsif ( ( $state[-2] eq "DATES" ) && ( $state[-1] eq "CREATED" ) ) { |
$message{isanonymous} = $attr->{value}; |
$message{created} = $attr->{value}; |
} |
} elsif ( $state[@state-2] eq "FLAGS") { |
} elsif ( $state[@state-2] eq "USER" ) { |
if ($state[@state-1] eq "ISANONYMOUS") { |
if ($state[@state-1] eq "USERID") { |
$message{isanonymous} = $attr->{value}; |
$message{userid} = $attr->{value}; |
} |
} elsif ($state[@state-1] eq "USERNAME") { |
} elsif ( $state[-2] eq "USER" ) { |
$message{username} = $attr->{value}; |
if ($state[-1] eq "USERID") { |
} elsif ($state[@state-1] eq "EMAIL") { |
$message{userid} = $attr->{value}; |
$message{email} = $attr->{value}; |
} elsif ($state[@state-1] eq "USERNAME") { |
} |
$message{username} = $attr->{value}; |
} elsif ( ($state[@state-2] eq "FILELIST") && ($state[@state-2] eq "IMAGE") ) { |
} elsif ($state[@state-1] eq "EMAIL") { |
$message{attachment} = $attr->{value}; |
$message{email} = $attr->{value}; |
|
} |
|
} elsif ( ($state[-2] eq "FILELIST") && ($state[-1] eq "IMAGE") ) { |
|
$message{attachment} = $attr->{value}; |
|
} |
|
} |
|
}, "tagname, attr"], |
|
text_h => |
|
[sub { |
|
my ($text) = @_; |
|
if ("@state" eq "FORUM DESCRIPTION TEXT") { |
|
$$settings{text} = $text; |
|
} elsif ( ($state[0] eq "FORUM") && ($state[1] eq "MESSAGETHREADS") && ($state[2] eq "MSG") ) { |
|
if ( ($state[-2] eq "MESSAGETEXT") && ($state[-1] eq "TEXT") ){ |
|
$message{text} = $text; |
|
} |
|
} |
|
}, "dtext"], |
|
end_h => |
|
[sub { |
|
my ($tagname) = @_; |
|
if ( $state[-1] eq "MESSAGETHREADS" ) { |
|
push @{$threads{$msg_id}}, { %message }; |
|
} |
|
pop @state; |
|
}, "tagname"], |
|
); |
|
$p->unbroken_text(1); |
|
$p->parse_file($xmlfile); |
|
$p->eof; |
|
|
|
# if ($destcourse =~ m/^(\d)(\d)(\d)/) { |
|
# $longcourse = $1.'/'.$2.'/'.$3.'/'.$destcourse; |
|
# } |
|
# my $bbfilename = '/home/httpd/lonUsers/'.$udom.'/'.$longcourse.'bulletinpage_'.$timestamp.'.db'; |
|
# my %hash; |
|
# tie(%hash,'GDBM_File',$bbfilename,&GDBM_WRCREAT,0640); |
|
# $hash{'aaa_title'}=$$settings{title}; |
|
# untie %hash; |
|
if (defined($$settings{text})) { |
|
if ($$settings{ishtml} eq "false") { |
|
if ($$settings{isnewline} eq "true") { |
|
$$settings{text} =~ s#\n#<br/>#g; |
} |
} |
|
} else { |
|
$$settings{text} = &HTML::Entities::decode($$settings{text}); |
} |
} |
}, "tagname, attr"], |
if (defined($$settings{fontcolor}) ) { |
text_h => |
$$settings{text} = "<font color=\"".$$settings{textcolor}."\">".$$settings{text}."</font>"; |
[sub { |
|
my ($text) = @_; |
|
if ("@state" eq "FORUM DESCRIPTION TEXT") { |
|
$$settings{text} = $text; |
|
} elsif ( ($state[0] eq "FORUM") && ($state[1] eq "MESSAGETHREADS") && ($state[2] eq "MSG") ) { |
|
if ( ($state[@state-2] eq "MESSAGETEXT") && ($state[@state-1] eq "TEXT") ){ |
|
$message{text} = $text; |
|
} |
|
} |
} |
}, "dtext"], |
} |
end_h => |
my $boardname = 'bulletinpage_'.$timestamp; |
[sub { |
my %boardinfo = ( |
my ($tagname) = @_; |
'aaa_title' => $$settings{title}, |
if ( ($state[0] eq "FORUM") && ($state[1] eq "MESSAGETHREADS") && ($state[2] eq "MSG") ) { |
'bbb_content' => $$settings{text}, |
if ($state[@state-1] eq "MSG") { |
'ccc_webreferences' => '', |
push @{$threads{$msg_id}}, { %message }; |
'uploaded.lastmodified' => time, |
|
); |
|
|
|
my $putresult = &Apache::lonnet::put($boardname,\%boardinfo,$cdom,$crs); |
|
if ($handling eq 'importall') { |
|
foreach my $msg_id (@allmsgs) { |
|
foreach my $message ( @{$threads{$msg_id}} ) { |
|
my %contrib = ( |
|
'sendername' => $$message{userid}, |
|
'senderdomain' => $cdom, |
|
'screenname' => '', |
|
'plainname' => $$message{username}, |
|
); |
|
unless ($$message{parent} eq 'None') { |
|
$contrib{replyto} = $msgidx{$$message{parent}}; |
|
} |
|
if (defined($$message{isanonymous}) ) { |
|
if ($$message{isanonymous} eq 'true') { |
|
$contrib{'anonymous'} = 'true'; |
|
} |
|
} |
|
if ( defined($$message{attachment}) ) { |
|
my $url = $$message{attachment}; |
|
my $oldurl = $url; |
|
my $newurl = $url; |
|
unless ($url eq '') { |
|
$newurl =~ s/\//_/g; |
|
unless ($longcrs eq '') { |
|
if (!-e "/home/httpd/lonUsers/$cdom/$longcrs/userfiles") { |
|
mkdir("/home/httpd/lonUsers/$cdom/$longcrs/userfiles",0755); |
|
} |
|
if (!-e "/home/httpd/lonUsers/$cdom/$longcrs/userfiles/$newurl") { |
|
system("cp $destdir/resfiles/$res/$$message{attachment} /home/httpd/lonUsers/$cdom/$longcrs/userfiles/$newurl"); |
|
} |
|
$contrib{attachmenturl} = '/uploaded/'.$cdom.'/'.$crs.'/'.$newurl; |
|
} |
|
} |
|
} |
|
if (defined($$message{title}) ) { |
|
$contrib{'message'} = $$message{title}; |
|
} |
|
if (defined($$message{text})) { |
|
if ($$message{ishtml} eq "false") { |
|
if ($$message{isnewline} eq "true") { |
|
$$message{text} =~ s#\n#<br/>#g; |
|
} |
|
} else { |
|
$$message{text} = &HTML::Entities::decode($$message{text}); |
|
} |
|
$contrib{'message'} .= '<br /><br />'.$$message{text}; |
|
my $symb = 'bulletin___'.$timestamp.'___adm/wrapper/adm/'.$cdom.'/'.$uname.'/'.$timestamp.'/bulletinboard'; |
|
my $postresult = &addposting($symb,\%contrib,$cdom,$crs); |
|
} |
} |
} |
} |
} |
pop @state; |
} |
}, "tagname"], |
} |
); |
|
$p->unbroken_text(1); |
sub addposting { |
$p->parse_file($xmlfile); |
my ($symb,$contrib,$cdom,$crs)=@_; |
$p->eof; |
my $status=''; |
|
if (($symb) && ($$contrib{message})) { |
|
my $crsdom = $cdom.'_'.$crs; |
|
&Apache::lonnet::store($contrib,$symb,$crsdom,$cdom,$crs); |
|
my %storenewentry=($symb => time); |
|
&Apache::lonnet::put('discussiontimes',\%storenewentry,$cdom,$crs); |
|
} |
|
my %record=&Apache::lonnet::restore('_discussion'); |
|
my ($temp)=keys %record; |
|
unless ($temp=~/^error\:/) { |
|
my %newrecord=(); |
|
$newrecord{'resource'}=$symb; |
|
$newrecord{'subnumber'}=$record{'subnumber'}+1; |
|
&Apache::lonnet::cstore(\%newrecord,'_discussion'); |
|
$status = 'ok'; |
|
} else { |
|
$status.='Failed.'; |
|
} |
|
return $status; |
} |
} |
|
|
sub process_assessment { |
sub process_assessment { |
my ($res,$docroot,$container,$dirname,$destdir,$settings) = @_; |
my ($res,$docroot,$container,$dirname,$destdir,$settings,$totpageref,$totprobref) = @_; |
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 = (); |
Line 1046 sub process_assessment {
|
Line 1477 sub process_assessment {
|
} |
} |
if ("@state" eq "$toptag{$container} QUESTIONLIST QUESTION") { |
if ("@state" eq "$toptag{$container} QUESTIONLIST QUESTION") { |
$id = $attr->{id}; |
$id = $attr->{id}; |
push @allids, $id; |
unless ($container eq 'pool') { |
|
push @allids, $id; |
|
} |
%{$$settings{$id}} = (); |
%{$$settings{$id}} = (); |
@{$allanswers{$id}} = (); |
@{$allanswers{$id}} = (); |
$$settings{$id}{class} = $attr->{class}; |
$$settings{$id}{class} = $attr->{class}; |
Line 1145 sub process_assessment {
|
Line 1578 sub process_assessment {
|
mkdir("$destdir/problems/$dirtitle",0755); |
mkdir("$destdir/problems/$dirtitle",0755); |
} |
} |
my $newdir = "$destdir/problems/$dirtitle"; |
my $newdir = "$destdir/problems/$dirtitle"; |
foreach my $id (@allids) { |
my $pagedir = "$destdir/pages"; |
# print "Current ID is $id, type is $$settings{$id}{class} \n"; |
my $curr_id = 0; |
if ($$settings{$id}{class} eq "QUESTION_ESSAY") { |
my $next_id = 0; |
my $output; |
unless ($container eq 'pool') { |
if ($container eq 'pool') { |
open(PAGEFILE,">$pagedir/$res.page"); |
$output = qq|<problem> |
print PAGEFILE qq|<map> |
<startouttext />$$settings{$id}{text}<endouttext /> |
|
|; |
|; |
|
$$totpageref ++; |
|
} |
|
foreach my $id (@allids) { |
|
$curr_id ++; |
|
$next_id = $curr_id + 1; |
|
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 { |
} else { |
$output = qq|<problem> |
print PAGEFILE qq|></resource>|; |
<startouttext />$$settings{$id}{text}<endouttext /> |
|
|; |
|
} |
} |
$output .= qq| |
} |
|
# 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|; |
|
} |
|
|
|
my $output = qq|<problem> |
|
|; |
|
$$totprobref ++; |
|
if ($$settings{$id}{class} eq "QUESTION_ESSAY") { |
|
$output .= qq|<startouttext />$$settings{$id}{text}<endouttext /> |
<essayresponse> |
<essayresponse> |
<textfield></textfield> |
<textfield></textfield> |
</essayresponse> |
</essayresponse> |
Line 1166 sub process_assessment {
|
Line 1622 sub process_assessment {
|
$$settings{$id}{feedbackcorr} |
$$settings{$id}{feedbackcorr} |
</postanswerdate> |
</postanswerdate> |
|; |
|; |
if ($container eq 'pool') { |
|
$output .= qq|</problem> |
|
|; |
|
open(PROB,">$newdir/$id.problem"); |
|
print PROB $output; |
|
close PROB; |
|
} else { |
|
$output .= qq|</problem> |
|
|; |
|
open(PROB,">$newdir/$id.problem"); |
|
print PROB $output; |
|
close PROB; |
|
} |
|
} else { |
} else { |
my $output; |
|
if ($container eq 'pool') { |
|
$output = qq|<problem> |
|
|; |
|
} else { |
|
$output = qq|<problem> |
|
|; |
|
} |
|
$output .= qq|<startouttext />$$settings{$id}{text}\n|; |
$output .= qq|<startouttext />$$settings{$id}{text}\n|; |
if ( defined($$settings{$id}{image}) ) { |
if ( defined($$settings{$id}{image}) ) { |
if ( $$settings{$id}{style} eq 'embed' ) { |
if ( $$settings{$id}{style} eq 'embed' ) { |
Line 1274 sub process_assessment {
|
Line 1709 sub process_assessment {
|
chomp($output); |
chomp($output); |
$output .= qq| |
$output .= qq| |
</foilgroup> |
</foilgroup> |
</radiobuttonresponse> |
</optionresponse> |
|; |
|; |
} elsif ($$settings{$id}{class} eq 'QUESTION_ORDER') { |
} elsif ($$settings{$id}{class} eq 'QUESTION_ORDER') { |
my $numfoils = @{$allanswers{$id}}; |
my $numfoils = @{$allanswers{$id}}; |
Line 1293 sub process_assessment {
|
Line 1728 sub process_assessment {
|
} 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++) { |
unless ($$settings{$id}{$allanswers{$id}[$k]}{text} =~ m/^\d+\.?\d*$/) { |
if ($$settings{$id}{$allanswers{$id}[$k]}{text} =~ m/([^\d\.]|\.\.)/) { |
$numerical = 0; |
$numerical = 0; |
} |
} |
} |
} |
Line 1377 sub process_assessment {
|
Line 1812 sub process_assessment {
|
</matchresponse> |
</matchresponse> |
|; |
|; |
} |
} |
if ($container eq 'pool') { |
|
$output .= qq|</problem> |
|
|; |
|
open(PROB,">$newdir/$id.problem"); |
|
print PROB $output; |
|
close PROB; |
|
} else { |
|
$output .= qq|</problem> |
|
|; |
|
open(PROB,">$newdir/$id.problem"); |
|
print PROB $output; |
|
close PROB; |
|
} |
|
|
|
} |
} |
|
$output .= qq|</problem> |
|
|; |
|
open(PROB,">$newdir/$id.problem"); |
|
print PROB $output; |
|
close PROB; |
|
} |
|
unless ($container eq 'pool') { |
|
print PAGEFILE qq|</map>|; |
|
close(PAGEFILE); |
} |
} |
} |
} |
|
|
Line 1436 sub process_announce {
|
Line 1866 sub process_announce {
|
my ($res,$docroot,$destdir,$settings) = @_; |
my ($res,$docroot,$destdir,$settings) = @_; |
my $xmlfile = $docroot."/temp/".$res.".dat"; |
my $xmlfile = $docroot."/temp/".$res.".dat"; |
my @state = (); |
my @state = (); |
|
my @assess = (); |
my $id; |
my $id; |
my $p = HTML::Parser->new |
my $p = HTML::Parser->new |
( |
( |
Line 1456 sub process_announce {
|
Line 1887 sub process_announce {
|
$$settings{ispermanent} = $attr->{value}; |
$$settings{ispermanent} = $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}} = (); |
|
push @assess,$id; |
} elsif ("@state" eq "ANNOUNCEMENT FILES STARTASSESSMENT ATTRIB" ) { |
} elsif ("@state" eq "ANNOUNCEMENT FILES STARTASSESSMENT ATTRIB" ) { |
my $key = $attr->{key}; |
my $key = $attr->{key}; |
$$settings{startassessment}{$id}{$key} = $attr->{value}; |
$$settings{startassessment}{$id}{$key} = $attr->{value}; |
Line 1466 sub process_announce {
|
Line 1898 sub process_announce {
|
[sub { |
[sub { |
my ($text) = @_; |
my ($text) = @_; |
if ("@state" eq "ANNOUNCEMENT DESCRIPTION TEXT") { |
if ("@state" eq "ANNOUNCEMENT DESCRIPTION TEXT") { |
$$settings{maindata}{text} = $text; |
$$settings{text} = $text; |
# print "TEXT $text\n"; |
# print "TEXT $text\n"; |
} |
} |
}, "dtext"], |
}, "dtext"], |
Line 1479 sub process_announce {
|
Line 1911 sub process_announce {
|
$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 ($$settings{ishtml} eq "false") { |
|
if ($$settings{isnewline} eq "true") { |
|
$$settings{text} =~ s#\n#<br/>#g; |
|
} |
|
} else { |
|
$$settings{text} = &HTML::Entities::decode($$settings{text}); |
|
} |
|
} |
|
|
|
if (@assess > 0) { |
|
foreach my $id (@assess) { |
|
$$settings{text} .= "Please use 'NAV' to locate the link to the folder of problems entitled -"; |
|
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"); |
|
print FILE qq|<html> |
|
<head> |
|
<title>$$settings{title}</title> |
|
</head> |
|
<body bgcolor='#ffffff'> |
|
$$settings{text} |
|
|; |
|
print FILE qq| |
|
</body> |
|
</html>|; |
|
close(FILE); |
} |
} |
|
|
sub process_content { |
sub process_content { |
Line 1647 $linktag|;
|
Line 2111 $linktag|;
|
close(FILE); |
close(FILE); |
} |
} |
|
|
|
sub expand_angel { |
|
my ($r,$uname,$udom,$fn,$page) = @_; |
|
my @state = (); |
|
my @seq = "Top"; |
|
my $lastitem; |
|
my $itm = ''; |
|
my %resnum = (); |
|
my %title = (); |
|
my %filepath = (); |
|
my %contentscount = ("Top" => 0); |
|
my %contents = (); |
|
my %parentseq = (); |
|
my %file = (); |
|
my %type = (); |
|
my %href = (); |
|
my $identifier = ''; |
|
my %resinfo = (); |
|
my $numfolders = 0; |
|
my $numpages = 0; |
|
my $docroot = $ENV{'form.newdir'}; |
|
if (!-e "$docroot/temp") { |
|
mkdir "$docroot/temp"; |
|
} |
|
my $newdir = ''; |
|
if ($docroot =~ m|public_html/(.+)$|) { |
|
$newdir = $1; |
|
} |
|
my $dirname = "/res/$udom/$uname/$newdir"; |
|
my $zipfile = '/home/'.$uname.'/public_html'.$fn; |
|
if ($fn =~ m|\.zip$|i) { |
|
open(OUTPUT, "unzip -o $zipfile -d $docroot/temp 2> /dev/null |"); |
|
while (<OUTPUT>) { |
|
print "$_<br />"; |
|
} |
|
close(OUTPUT); |
|
} |
|
|
|
my $xmlfile = $docroot.'/temp/imsmanifest.xml'; |
|
my $p = HTML::Parser->new |
|
( |
|
xml_mode => 1, |
|
start_h => |
|
[sub { |
|
my ($tagname, $attr) = @_; |
|
push @state, $tagname; |
|
my $num = @state - 3; |
|
my $start = $num; |
|
my $statestr = ''; |
|
foreach (@state) { |
|
$statestr .= "$_ "; |
|
} |
|
if ( ($state[0] eq "manifest") && ($state[1] eq "organizations") && ($state[2] eq "organization") ) { |
|
my $searchstr = "manifest organizations organization"; |
|
while ($num > 0) { |
|
$searchstr .= " item"; |
|
$num --; |
|
} |
|
if (("@state" eq $searchstr) && (@state > 3)) { |
|
$itm = $attr->{identifier}; |
|
$resnum{$itm} = $attr->{identifierref}; |
|
if ($start > @seq) { |
|
unless ($lastitem eq '') { |
|
push @seq, $lastitem; |
|
unless ( defined($contents{$seq[-1]}) ) { |
|
@{$contents{$seq[-1]}} = (); |
|
} |
|
push @{$contents{$seq[-1]}},$itm; |
|
$parentseq{$itm} = $seq[-1]; |
|
} |
|
} |
|
elsif ($start < @seq) { |
|
my $diff = @seq - $start; |
|
while ($diff > 0) { |
|
pop @seq; |
|
$diff --; |
|
} |
|
if (@seq) { |
|
push @{$contents{$seq[-1]}}, $itm; |
|
} |
|
} else { |
|
push @{$contents{$seq[-1]}}, $itm; |
|
} |
|
my $path; |
|
if (@seq > 1) { |
|
$path = join(',',@seq); |
|
} elsif (@seq > 0) { |
|
$path = $seq[0]; |
|
} |
|
$filepath{$itm} = $path; |
|
$contentscount{$seq[-1]} ++; |
|
$lastitem = $itm; |
|
} |
|
} elsif ("@state" eq "manifest resources resource" ) { |
|
$identifier = $attr->{identifier}; |
|
$file{$identifier} = $attr->{href}; |
|
@{$href{$identifier}} = (); |
|
} elsif ("@state" eq "manifest resources resource file") { |
|
push @{$href{$identifier}},$attr->{href}; |
|
if ($attr->{href} =~ m/^Icons\\icon(\w+)\.gif/) { |
|
$type{$identifier} = $1; |
|
} |
|
} |
|
}, "tagname, attr"], |
|
text_h => |
|
[sub { |
|
my ($text) = @_; |
|
if ($state[0] eq "manifest" && $state[1] eq "organizations" && $state[2] eq "organization" && $state[-1] eq "title") { |
|
$title{$itm} = $text; |
|
} |
|
}, "dtext"], |
|
end_h => |
|
[sub { |
|
my ($tagname) = @_; |
|
pop @state; |
|
}, "tagname"], |
|
); |
|
$p->parse_file($xmlfile); |
|
$p->eof; |
|
|
|
my $topnum = 0; |
|
my $destdir = $docroot; |
|
if (!-e "$destdir") { |
|
mkdir("$destdir",0755); |
|
} |
|
if (!-e "$destdir/sequences") { |
|
mkdir("$destdir/sequences",0755); |
|
} |
|
if (!-e "$destdir/resfiles") { |
|
mkdir("$destdir/resfiles",0755); |
|
} |
|
if (!-e "$destdir/pages") { |
|
mkdir("$destdir/pages",0755); |
|
} |
|
if (!-e "$destdir/problems") { |
|
mkdir("$destdir/problems",0755); |
|
} |
|
foreach my $key (sort keys %href) { |
|
foreach my $file (@{$href{$key}}) { |
|
if ($file =~ m/^_assoc/) { |
|
my $filepath = $file; |
|
if (!-e "$destdir/resfiles/$key") { |
|
mkdir("$destdir/resfiles/$key",0755); |
|
} |
|
while ($filepath =~ m-(\w+)\\(.+)-) { |
|
$filepath = $2; |
|
if (!-e "$destdir/resfiles/$key/$1") { |
|
mkdir("$destdir/resfiles/$key/$1",0755); |
|
} |
|
} |
|
system("cp $docroot/temp/$key/$file $destdir/resfiles/$key/$file"); |
|
} |
|
} |
|
} |
|
|
|
# ANGEL types FILE FOLDER PAGE MESSAGE FORM QUIZ BOARD |
|
|
|
foreach my $key (sort keys %type) { |
|
if ($type{$key} eq "BOARD") { |
|
%{$resinfo{$key}} = (); |
|
&angel_db($key,$docroot,$destdir,\%{$resinfo{$key}},$udom,$uname); |
|
} elsif ($type{$key} eq "FILE" || $type{$key} eq "FOLDER" || $type{$key} eq "PAGE") { |
|
%{$resinfo{$key}} = (); |
|
&angel_content($key,$docroot,$dirname,$destdir,\%{$resinfo{$key}}); |
|
} elsif ($type{$key} eq "QUIZ") { |
|
%{$resinfo{$key}} = (); |
|
&angel_assessment($key,$docroot,$dirname,$destdir,\%{$resinfo{$key}}); |
|
} elsif ($type{$key} eq "FORM") { |
|
%{$resinfo{$key}} = (); |
|
&angel_assessment($key,$docroot,$dirname,$destdir,\%{$resinfo{$key}}); |
|
} |
|
} |
|
|
|
my $nextnum = 0; |
|
open(TOPFILE,">$destdir/sequences/ims_import.sequence"); |
|
print TOPFILE "<map>\n"; |
|
my $fileopen = 0; |
|
my $areakey; |
|
my $areacount = 0; |
|
my $lastentry = ''; |
|
my $notlastentry = ''; |
|
my %pagecount = (); |
|
my %pagecontents = (); |
|
my %pageflag = (); |
|
my %seqflag = (); |
|
my %seqcount = (); |
|
|
|
foreach my $key (sort keys %resnum) { |
|
$pageflag{$key} = 0; |
|
$seqflag{$key} = 0; |
|
$seqcount{$key} = 0; |
|
$pagecount{$key} = -1; |
|
if ($filepath{$key} eq 'Top') { |
|
$topnum ++; |
|
$nextnum = $topnum +1; |
|
print TOPFILE qq|<resource id="$topnum" src="/res/$udom/$uname/$newdir/sequences/$key.sequence" title="$title{$key}"|; |
|
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|; |
|
} |
|
} |
|
|
|
my $src =""; |
|
my $next_id = 1; |
|
my $curr_id = 0; |
|
if ($type{$resnum{$key}} eq "FOLDER") { |
|
open(LOCFILE,">$destdir/sequences/$key.sequence"); |
|
print LOCFILE "<map>\n"; |
|
if ($contentscount{$key} == 0) { |
|
print LOCFILE qq|<resource id="1" src="" type="start"></resource> |
|
<link from="1" to="2" index="1"></link> |
|
<resource id="2" src="" type="finish"></resource>\n|; |
|
} else { |
|
if ($type{$resnum{$contents{$key}[0]}} eq "FOLDER") { |
|
$src = 'sequences/'.$contents{$key}[0].".sequence"; |
|
$pageflag{$key} = 0; |
|
$seqflag{$key} = 1; |
|
$seqcount{$key} ++; |
|
} else { |
|
if ($pageflag{$key}) { |
|
push @{$pagecontents{$key}[$pagecount{$key}]},$contents{$key}[0]; } else { |
|
$pagecount{$key} ++; |
|
$src = 'pages/'.$key.'_'.$pagecount{$key}.'.page'; |
|
@{$pagecontents{$key}[$pagecount{$key}]} = ("$contents{$key}[0]"); |
|
$seqflag{$key} = 0; |
|
} |
|
} |
|
unless ($pageflag{$key}) { |
|
print LOCFILE qq|<resource id="1" src="/res/$udom/$uname/$newdir/$src" title="$title{$contents{$key}[0]}" type="start"|; |
|
unless ($seqflag{$key}) { |
|
$pageflag{$key} = 1; |
|
} |
|
} |
|
if ($contentscount{$key} == 1) { |
|
print LOCFILE qq|></resource> |
|
<link from="1" to="2" index="1"></link> |
|
<resource id="2" src="" type="finish"></resource>\n|; |
|
} else { |
|
if ($contentscount{$key} > 2 ) { |
|
for (my $i=1; $i<$contentscount{$key}-1; $i++) { |
|
if ($resinfo{$resnum{$contents{$key}[$i]}}{'isfolder'} eq "true") { |
|
$src = 'sequences/'.$contents{$key}[$i].".sequence"; |
|
$pageflag{$key} = 0; |
|
$seqflag{$key} = 1; |
|
$seqcount{$key} ++; |
|
} else { |
|
if ($pageflag{$key}) { |
|
push @{$pagecontents{$key}[$pagecount{$key}]},$contents{$key}[$i]; |
|
} else { |
|
$pagecount{$key} ++; |
|
$src = 'pages/'.$key.'_'.$pagecount{$key}.'.page'; |
|
@{$pagecontents{$key}[$pagecount{$key}]} = ("$contents{$key}[$i]"); |
|
$seqflag{$key} = 0; |
|
} |
|
} |
|
unless ($pageflag{$key}) { |
|
$curr_id ++; |
|
$next_id ++; |
|
print LOCFILE qq|></resource> |
|
<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]}"|; |
|
unless ($seqflag{$key}) { |
|
$pageflag{$key} = 1; |
|
} |
|
} |
|
} |
|
} |
|
if ($resinfo{$resnum{$contents{$key}[$contentscount{$key}-1]}}{'isfolder'} eq "true") { |
|
$src = 'sequences/'.$contents{$key}[$contentscount{$key}-1].".sequence"; |
|
$pageflag{$key} = 0; |
|
$seqflag{$key} = 1; |
|
} else { |
|
if ($pageflag{$key}) { |
|
push @{$pagecontents{$key}[$pagecount{$key}]},$contents{$key}[$contentscount{$key}-1]; |
|
} else { |
|
$pagecount{$key} ++; |
|
$src = 'pages/'.$key.'_'.$pagecount{$key}.'.page'; |
|
@{$pagecontents{$key}[$pagecount{$key}]} = ("$contents{$key}[$contentscount{$key}-1]"); |
|
} |
|
} |
|
if ($pageflag{$key}) { |
|
if ($seqcount{$key} + $pagecount{$key} +1 == 1) { |
|
print LOCFILE qq|></resource> |
|
<link from="1" index="1" to="2"> |
|
<resource id ="2" src="" title="" type="finish"></resource>\n|; |
|
} else { |
|
print LOCFILE qq| type="finish"></resource>\n|; |
|
} |
|
} else { |
|
$curr_id ++; |
|
$next_id ++; |
|
print LOCFILE qq|></resource> |
|
<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|; |
|
} |
|
} |
|
} |
|
print LOCFILE "</map>\n"; |
|
close(LOCFILE); |
|
} |
|
} |
|
|
|
foreach my $key (sort keys %pagecontents) { |
|
for (my $i=0; $i<@{$pagecontents{$key}}; $i++) { |
|
my $filestem = "/res/$udom/$uname/$newdir"; |
|
my $filename = $destdir.'/pages/'.$key.'_'.$i.'.page'; |
|
open(PAGEFILE,">$filename"); |
|
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> |
|
<link to="2" index="1" from="1">\n|; |
|
if (@{$pagecontents{$key}[$i]} == 1) { |
|
print PAGEFILE qq|<resource src="" id="2" type="finish"></resource>|; |
|
} 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>|; |
|
} else { |
|
for (my $j=1; $j<@{$pagecontents{$key}[$i]}-1; $j++) { |
|
my $curr_id = $j+1; |
|
my $next_id = $j+2; |
|
my $resource = $filestem.'/resfiles/'.$resnum{$pagecontents{$key}[$i][$j]}.'.html'; |
|
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|; |
|
} |
|
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 "</map>"; |
|
close(PAGEFILE); |
|
} |
|
} |
|
system(" rm -r $docroot/temp"); |
|
} |
|
|
|
sub get_ccroles { |
|
my ($uname,$dom,$crsentry) = @_; |
|
my %roles = (); |
|
unless ($uname eq '') { |
|
%roles = &Apache::lonnet::dump('roles',$dom,$uname); |
|
} |
|
my $iter = 0; |
|
my @codes = (); |
|
my %courses = (); |
|
my @crslist = (); |
|
my %descrip =(); |
|
foreach my $key (keys %roles ) { |
|
if ($key =~ m/^\/(\w+)\/(\w+)_cc$/) { |
|
my $cdom = $1; |
|
my $crs = $2; |
|
my $role_end = 0; |
|
my $role_start = 0; |
|
my $active_chk = 1; |
|
if ( $roles{$key} =~ m/^cc_(\d+)/ ) { |
|
$role_end = $1; |
|
if ( $roles{$key} =~ m/^cc_($role_end)_(\d+)$/ ) |
|
{ |
|
$role_start = $2; |
|
} |
|
} |
|
if ($role_start > 0) { |
|
if (time < $role_start) { |
|
$active_chk = 0; |
|
} |
|
} |
|
if ($role_end > 0) { |
|
if (time > $role_end) { |
|
$active_chk = 0; |
|
} |
|
} |
|
if ($active_chk) { |
|
my $currcode = ''; |
|
my %settings = &Apache::lonnet::get('environment',['internal.coursecode','description'],$cdom,$crs); |
|
if (defined($settings{'description'}) ) { |
|
$descrip{$crs} = $settings{'description'}; |
|
} else { |
|
$descrip{$crs} = 'Unknown'; |
|
} |
|
if (defined($settings{'internal.coursecode'}) ) { |
|
$currcode = $settings{'internal.coursecode'}; |
|
if ($currcode eq '') { |
|
$currcode = "____".$iter; |
|
$iter ++; |
|
} |
|
} else { |
|
$currcode = "____".$iter; |
|
$iter ++; |
|
} |
|
unless (grep/^$currcode$/,@codes) { |
|
push @codes,$currcode; |
|
@{$courses{$currcode}} = (); |
|
} |
|
push @{$courses{$currcode}}, $cdom.'/'.$crs; |
|
} |
|
} |
|
} |
|
foreach my $code (sort @codes) { |
|
foreach my $crsdom (@{$courses{$code}}) { |
|
my ($cdom,$crs) = split/\//,$crsdom; |
|
my $showcode = ''; |
|
unless ($code =~m/^____\d+$/) { $showcode = $code; } |
|
$$crsentry{$crsdom} = $showcode.':'.$descrip{$crs}; |
|
push @crslist, $crsdom; |
|
} |
|
} |
|
return @crslist; |
|
} |
|
|
|
|
# ---------------------------------------------------------------- Main Handler |
# ---------------------------------------------------------------- Main Handler |
sub handler { |
sub handler { |
my $r=shift; |
my $r=shift; |
Line 1705 sub handler {
|
Line 2580 sub handler {
|
$page_name = $PAGES[$current_page]; |
$page_name = $PAGES[$current_page]; |
|
|
if ($page_name eq 'ChooseDir') { |
if ($page_name eq 'ChooseDir') { |
&jscript_zero($fullpath,\$javascript); |
&jscript_zero($fullpath,\$javascript,$uname,$udom); |
} elsif ($page_name eq 'Confirmation') { |
} elsif ($page_name eq 'Confirmation') { |
&jscript_two(\$javascript,$uname); |
&jscript_two(\$javascript,$uname); |
} |
} |
} elsif ($ENV{'form.phase'} eq 'two') { |
} elsif ($ENV{'form.phase'} eq 'two') { |
&jscript_zero($fullpath,\$javascript); |
&jscript_zero($fullpath,\$javascript,$uname,$udom); |
} |
} |
$r->print("<html><head><title>LON-CAPA Construction Space</title><script type=\"text/javascript\">\n//<!--\n$javascript\n// --></script>\n</head>"); |
$r->print("<html><head><title>LON-CAPA Construction Space</title><script type=\"text/javascript\">\n//<!--\n$javascript\n// --></script>\n</head>"); |
|
|
Line 1722 sub handler {
|
Line 2597 sub handler {
|
} |
} |
|
|
if ($ENV{'form.phase'} eq 'three') { |
if ($ENV{'form.phase'} eq 'three') { |
&display_zero ($r,$uname,$fn,$current_page) if $page_name eq 'ChooseDir'; |
my $bb_crs = ''; |
&expand_bb5 ($r,$uname,$udom,$fn,$fullpath,$current_page) if $page_name eq 'Blackboard5'; |
my $bb_cdom = ''; |
&expand_angel ($r,$uname,$udom,$fn,$fullpath,$current_page) if $page_name eq 'ANGEL'; |
my $bb_handling = ''; |
&expand_webct ($r,$uname,$udom,$fn,$fullpath,$current_page) if $page_name eq 'WebCT'; |
if ( defined($ENV{'form.bb_crs'}) ) { |
|
($bb_cdom,$bb_crs) = split/\//,$ENV{'form.bb_crs'}; |
|
} |
|
if ( defined($ENV{'form.bb_handling'}) ) { |
|
$bb_handling = $ENV{'form.bb_handling'}; |
|
} |
|
my $users_crs = ''; |
|
my $users_cdom = ''; |
|
my $users_handling = ''; |
|
if ( defined($ENV{'form.user_crs'}) ) { |
|
($users_cdom,$users_crs) = split/\//,$ENV{'form.user_crs'}; |
|
} |
|
if ( defined($ENV{'form.user_handling'}) ) { |
|
$users_handling = $ENV{'form.user_handling'}; |
|
} |
|
my ($totseq,$totpage,$totprob); |
|
&display_zero ($r,$uname,$fn,$current_page,$fullpath) if $page_name eq 'ChooseDir'; |
|
($totseq,$totpage,$totprob) = &expand_bb5 ($r,$uname,$udom,$fn,$current_page,$bb_crs,$bb_cdom,$bb_handling,$users_crs,$users_cdom,$users_handling) if $page_name eq 'Blackboard5'; |
|
($totseq,$totpage,$totprob) = &expand_angel ($r,$uname,$udom,$fn,$current_page) if $page_name eq 'ANGEL'; |
|
&expand_webct ($r,$uname,$udom,$fn,$current_page) if $page_name 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"); |
|
|
} 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') { |
my $current_page = 0; |
my $current_page = 0; |
&display_zero($r,$uname,$fn,$current_page); |
&display_zero($r,$uname,$fn,$current_page,$fullpath); |
} |
} |
} else { |
} else { |
&Apache::lonupload::phaseone($r,$fn,$uname,$udom,'imsimport'); |
&Apache::lonupload::phaseone($r,$fn,$uname,$udom,'imsimport'); |