version 1.8, 2012/01/29 19:51:01
|
version 1.9, 2012/03/31 12:02:29
|
Line 32 use Apache::lonnet;
|
Line 32 use Apache::lonnet;
|
use Apache::loncommon; |
use Apache::loncommon; |
use Apache::lonhtmlcommon; |
use Apache::lonhtmlcommon; |
use Apache::lonnavmaps; |
use Apache::lonnavmaps; |
|
use Apache::loncourserespicker; |
use Apache::lonlocal; |
use Apache::lonlocal; |
use Cwd; |
use Cwd; |
use LONCAPA qw(:DEFAULT :match); |
use LONCAPA qw(:DEFAULT :match); |
Line 39 use LONCAPA qw(:DEFAULT :match);
|
Line 40 use LONCAPA qw(:DEFAULT :match);
|
sub exportcourse { |
sub exportcourse { |
my $r=shift; |
my $r=shift; |
my $crstype = &Apache::loncommon::course_type(); |
my $crstype = &Apache::loncommon::course_type(); |
my %discussiontime = &Apache::lonnet::dump('discussiontimes', |
my ($navmap,$errormsg) = |
$env{'course.'.$env{'request.course.id'}.'.domain'}, $env{'course.'.$env{'request.course.id'}.'.num'}); |
&Apache::loncourserespicker::get_navmap_object($crstype,'imsexport'); |
my $numdisc = keys(%discussiontime); |
unless (ref($navmap)) { |
my $numprobs = 0; |
$r->print($errormsg); |
my $navmap = Apache::lonnavmaps::navmap->new(); |
|
if (!defined($navmap)) { |
|
$r->print(&Apache::loncommon::start_page('Export '.$crstype.' to IMS Package'). |
|
'<h2>'.&mt('IMS Export Failed').'</h2>'. |
|
'<div class="LC_error">'); |
|
if ($crstype eq 'Community') { |
|
$r->print(&mt('Unable to retrieve information about community contents')); |
|
} else { |
|
$r->print(&mt('Unable to retrieve information about course contents')); |
|
} |
|
$r->print('</div><a href="/adm/coursedocs">'); |
|
if ($crstype eq 'Community') { |
|
$r->print(&mt('Return to Community Editor')); |
|
} else { |
|
$r->print(&mt('Return to Course Editor')); |
|
} |
|
$r->print('</a>'); |
|
&Apache::lonnet::logthis('IMS export failed - could not create navmap object in '.lc($crstype).':'.$env{'request.course.id'}); |
|
return; |
return; |
} |
} |
my $it=$navmap->getIterator(undef,undef,undef,1,undef,undef); |
|
my $curRes; |
|
my $outcome; |
|
|
|
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
['finishexport']); |
['finishexport']); |
if ($env{'form.finishexport'}) { |
if ($env{'form.finishexport'}) { |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
['archive','discussion']); |
['archive','discussion']); |
|
my $outcome; |
my $format = $env{'form.format'}; |
my $format = $env{'form.format'}; |
my @exportitems = &Apache::loncommon::get_env_multiple('form.archive'); |
my @exportitems = &Apache::loncommon::get_env_multiple('form.archive'); |
my @discussions = &Apache::loncommon::get_env_multiple('form.discussion'); |
my @discussions = &Apache::loncommon::get_env_multiple('form.discussion'); |
Line 138 sub exportcourse {
|
Line 117 sub exportcourse {
|
$r->print($outcome); |
$r->print($outcome); |
$r->print(&Apache::loncommon::end_page()); |
$r->print(&Apache::loncommon::end_page()); |
} else { |
} else { |
my $display='<form name="exportdoc" action="" method="post">'."\n". |
$r->print(&Apache::loncourserespicker::create_picker($navmap,'imsexport', |
'<p>'. |
'exportdoc',$crstype)); |
&mt('Choose which items you wish to export from your '.$crstype.'.'). |
|
'</p>'. |
|
'<div class="LC_columnSection"><fieldset>'. |
|
'<legend>'.&mt('Content items').'</legend>'. |
|
'<input type="button" value="'.&mt('check all').'" '. |
|
'onclick="javascript:checkAll(document.exportdoc.archive)" />'. |
|
' <input type="button" value="'.&mt('uncheck all').'"'. |
|
' onclick="javascript:uncheckAll(document.exportdoc.archive)" /></fieldset>'; |
|
if ($numdisc > 0) { |
|
$display .= '<fieldset>'. |
|
'<legend>'.&mt('Discussion posts').'</legend>'. |
|
'<input type="button" value="'.&mt('check all').'"'. |
|
' onclick="javascript:checkAll(document.exportdoc.discussion)" />'. |
|
' <input type="button" value="'.&mt('uncheck all').'"'. |
|
' onclick="javascript:uncheckAll(document.exportdoc.discussion)" />'. |
|
'</fieldset>'; |
|
} |
|
$display .= '</div>'; |
|
my $curRes; |
|
my $depth = 0; |
|
my $count = 0; |
|
my $boards = 0; |
|
my $startcount = 5; |
|
my %parent = (); |
|
my %children = (); |
|
my $lastcontainer = $startcount; |
|
$display .= &Apache::loncommon::start_data_table() |
|
.&Apache::loncommon::start_data_table_header_row() |
|
.'<th>'.&mt('Export content item?').'</th>'; |
|
if ($numdisc > 0) { |
|
$display .= '<th>'.&mt('Export discussion posts?').'</th>'; |
|
} |
|
$display .= &Apache::loncommon::end_data_table_header_row(); |
|
while ($curRes = $it->next()) { |
|
if (ref($curRes)) { |
|
$count ++; |
|
} |
|
if ($curRes == $it->BEGIN_MAP()) { |
|
$depth++; |
|
$parent{$depth} = $lastcontainer; |
|
} |
|
if ($curRes == $it->END_MAP()) { |
|
$depth--; |
|
$lastcontainer = $parent{$depth}; |
|
} |
|
if (ref($curRes)) { |
|
my $symb = $curRes->symb(); |
|
my $ressymb = $symb; |
|
if ($ressymb =~ m|adm/($match_domain)/($match_username)/(\d+)/bulletinboard$|) { |
|
unless ($ressymb =~ m|adm/wrapper/adm|) { |
|
$ressymb = 'bulletin___'.$3.'___adm/wrapper/adm/'.$1.'/'.$2.'/'.$3.'/bulletinboard'; |
|
} |
|
} |
|
my $currelem = $count+$boards+$startcount; |
|
$display .= &Apache::loncommon::start_data_table_row() |
|
.'<td>'."\n" |
|
.'<input type="checkbox" name="archive" value="'.$count.'" '; |
|
if (($curRes->is_sequence()) || ($curRes->is_page())) { |
|
$lastcontainer = $currelem; |
|
$display .= 'onclick="javascript:propagateCheck(this.form,'."'$currelem'".')"'; |
|
} elsif ($curRes->is_problem()) { |
|
$numprobs ++; |
|
} |
|
$display .= ' />'."\n"; |
|
for (my $i=0; $i<$depth; $i++) { |
|
$display .= ('<img src="/adm/lonIcons/whitespace1.gif" class="LC_docs_spacer" alt="" />' x2)."\n"; |
|
} |
|
if ($curRes->is_sequence()) { |
|
$display .= '<img src="/adm/lonIcons/navmap.folder.open.gif" alt="" /> '."\n"; |
|
} elsif ($curRes->is_page()) { |
|
$display .= '<img src="/adm/lonIcons/navmap.page.open.gif" alt="" /> '."\n"; |
|
} |
|
$children{$parent{$depth}} .= $currelem.':'; |
|
$display .= ' '.$curRes->title().'</td>'."\n"; |
|
|
|
# Existing discussion posts? |
|
if ($discussiontime{$ressymb} > 0) { |
|
$boards ++; |
|
$display .= '<td align="right">' |
|
.'<input type="checkbox" name="discussion" value="'.$count.'" />' |
|
.'</td>'."\n"; |
|
} elsif ($numdisc > 0) { |
|
$display .= '<td> </td>'."\n"; |
|
} |
|
$display .= &Apache::loncommon::end_data_table_row(); |
|
} |
|
} |
|
$display .= &Apache::loncommon::end_data_table(); |
|
my $numcount = $count + $boards + $startcount; |
|
my $scripttag = &export_javascript($startcount,$numcount,%children); |
|
$r->print(&Apache::loncommon::start_page('Export '.$crstype.' to IMS Package', |
|
$scripttag)); |
|
$r->print(&Apache::lonhtmlcommon::breadcrumbs('IMS Export')); |
|
if ($numprobs > 0) { |
|
$display .= '<p><span class="LC_nobreak">'. |
|
&mt('Export format for LON-CAPA problems:'). |
|
'<label><input type="radio" name="format" value="xml" checked="checked" />'. |
|
' '.&mt('XML').'</label>'.(' ' x3). |
|
'<label><input type="radio" name="format" value="html" />'. |
|
' '.&mt('HTML').'</label>'.(' ' x3). |
|
'<label><input type="radio" name="format" value="plaintext" />'. |
|
' '.&mt('Text').'</label></span></p>'; |
|
} |
|
$r->print($display. |
|
'<p><input type="hidden" name="finishexport" value="1" />'. |
|
'<input type="submit" name="exportcourse" value="'. |
|
&mt('Export').'" /></p></form>'); |
|
} |
} |
} |
return; |
|
|
sub export_javascript { |
|
my ($startcount,$numitems,%children) = @_; |
|
my $scripttag = <<"START"; |
|
<script type="text/javascript"> |
|
// <![CDATA[ |
|
function checkAll(field) { |
|
if (field.length > 0) { |
|
for (i = 0; i < field.length; i++) { |
|
field[i].checked = true ; |
|
} |
|
} else { |
|
field.checked = true |
|
} |
|
} |
|
|
|
function uncheckAll(field) { |
|
if (field.length > 0) { |
|
for (i = 0; i < field.length; i++) { |
|
field[i].checked = false ; |
|
} |
|
} else { |
|
field.checked = false ; |
|
} |
|
} |
|
|
|
function propagateCheck(form,item) { |
|
if (form.elements[item].checked == true) { |
|
containerCheck(form,item) |
|
} |
|
} |
|
|
|
numitems = $numitems |
|
var parents = new Array(numitems) |
|
for (var i=$startcount; i<numitems; i++) { |
|
parents[i] = new Array |
|
} |
|
|
|
START |
|
|
|
foreach my $container (sort { $a <=> $b } (keys(%children))) { |
|
my @contents = split(/:/,$children{$container}); |
|
for (my $i=0; $i<@contents; $i ++) { |
|
$scripttag .= 'parents['.$container.']['.$i.'] = '.$contents[$i]."\n"; |
|
} |
|
} |
|
|
|
$scripttag .= <<"END"; |
|
|
|
function containerCheck(form,item) { |
|
form.elements[item].checked = true; |
|
if(Object.prototype.toString.call(parents[item]) === '[object Array]') { |
|
if (parents[item].length > 0) { |
|
for (var j=0; j<parents[item].length; j++) { |
|
containerCheck(form,parents[item][j]) |
|
} |
|
} |
|
} |
|
} |
|
// ]]> |
|
</script> |
|
|
|
END |
|
return $scripttag; |
|
} |
} |
|
|
sub create_ims_store { |
sub create_ims_store { |
Line 1075 described at http://www.lon-capa.org.
|
Line 883 described at http://www.lon-capa.org.
|
|
|
=item exportcourse() |
=item exportcourse() |
|
|
=item export_javascript() |
|
|
|
=item create_ims_store() |
=item create_ims_store() |
|
|
=item build_package() |
=item build_package() |