version 1.457, 2011/08/15 16:31:55
|
version 1.477, 2012/02/28 02:02:16
|
Line 26
|
Line 26
|
# http://www.lon-capa.org/ |
# http://www.lon-capa.org/ |
# |
# |
|
|
|
|
|
|
package Apache::londocs; |
package Apache::londocs; |
|
|
use strict; |
use strict; |
Line 41 use Apache::lonratedt();
|
Line 39 use Apache::lonratedt();
|
use Apache::lonxml; |
use Apache::lonxml; |
use Apache::lonclonecourse; |
use Apache::lonclonecourse; |
use Apache::lonnavmaps; |
use Apache::lonnavmaps; |
|
use Apache::lonnavdisplay(); |
use HTML::Entities; |
use HTML::Entities; |
use GDBM_File; |
use GDBM_File; |
use Apache::lonlocal; |
use Apache::lonlocal; |
Line 176 sub dumpcourse {
|
Line 175 sub dumpcourse {
|
$newfilename=&clean($newfilename); |
$newfilename=&clean($newfilename); |
$newfilename.='.'.$ext; |
$newfilename.='.'.$ext; |
my @dirs=split(/\//,$newfilename); |
my @dirs=split(/\//,$newfilename); |
my $path='/home/'.$ca.'/public_html'; |
my $path=$r->dir_config('lonDocRoot')."/priv/$cd/$ca"; |
my $makepath=$path; |
my $makepath=$path; |
my $fail=0; |
my $fail=0; |
for (my $i=0;$i<$#dirs;$i++) { |
for (my $i=0;$i<$#dirs;$i++) { |
Line 264 sub dumpcourse {
|
Line 263 sub dumpcourse {
|
} |
} |
} |
} |
|
|
|
|
|
|
sub exportbutton { |
sub exportbutton { |
my $crstype = &Apache::loncommon::course_type(); |
my $crstype = &Apache::loncommon::course_type(); |
return "<a class='LC_menubuttons_link' href='javascript:injectData(document.courseverify, \"dummy\", \"exportcourse\", \"".&mt('IMS Export')."\")'>".&mt('IMS Export')."</a>". |
return "<a class='LC_menubuttons_link' href='javascript:injectData(document.courseverify, \"dummy\", \"exportcourse\", \"".&mt('IMS Export')."\")'>".&mt('IMS Export')."</a>". |
&Apache::loncommon::help_open_topic('Docs_Export_Course_Docs').'<br />'; |
&Apache::loncommon::help_open_topic('Docs_Export_Course_Docs').'<br />'; |
} |
} |
|
|
|
|
|
|
sub exportcourse { |
|
my $r=shift; |
|
my $crstype = &Apache::loncommon::course_type(); |
|
my %discussiontime = &Apache::lonnet::dump('discussiontimes', |
|
$env{'course.'.$env{'request.course.id'}.'.domain'}, $env{'course.'.$env{'request.course.id'}.'.num'}); |
|
my $numdisc = keys(%discussiontime); |
|
my $numprobs = 0; |
|
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; |
|
} |
|
my $it=$navmap->getIterator(undef,undef,undef,1,undef,undef); |
|
my $curRes; |
|
my $outcome; |
|
|
|
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
|
['finishexport']); |
|
if ($env{'form.finishexport'}) { |
|
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
|
['archive','discussion']); |
|
|
|
my $format = $env{'form.format'}; |
|
my @exportitems = &Apache::loncommon::get_env_multiple('form.archive'); |
|
my @discussions = &Apache::loncommon::get_env_multiple('form.discussion'); |
|
if (@exportitems == 0 && @discussions == 0) { |
|
$outcome = |
|
'<p class="LC_warning">' |
|
.&mt('As you did not select any content items or discussions' |
|
.' for export, an IMS package has not been created.') |
|
.'</p>' |
|
.'<p>' |
|
.&mt('Please [_1]go back[_2] to select either content items' |
|
.' or discussions for export.' |
|
,'<a href="javascript:history.go(-1)">' |
|
,'</a>') |
|
.'</p>'; |
|
} else { |
|
my $now = time; |
|
my %symbs; |
|
my $manifestok = 0; |
|
my $imsresources; |
|
my $tempexport; |
|
my $copyresult; |
|
my $testbank; |
|
my $ims_manifest = &create_ims_store($now,\$manifestok,\$outcome,\$tempexport,$format,\$testbank); |
|
if ($manifestok) { |
|
&build_package($now,$navmap,\@exportitems,\@discussions,\$outcome,$tempexport,\$copyresult,$ims_manifest,$format,$testbank); |
|
close($ims_manifest); |
|
|
|
#Create zip file in prtspool |
|
my $imszipfile = '/prtspool/'. |
|
$env{'user.name'}.'_'.$env{'user.domain'}.'_'. |
|
time.'_'.rand(1000000000).'.zip'; |
|
my $cwd = &Cwd::getcwd(); |
|
my $imszip = '/home/httpd/'.$imszipfile; |
|
chdir $tempexport; |
|
open(OUTPUT, "zip -r $imszip * 2> /dev/null |"); |
|
close(OUTPUT); |
|
chdir $cwd; |
|
$outcome .= '<p>' |
|
.&mt('[_1]Your IMS package[_2] is ready for download.' |
|
,'<a href="'.$imszipfile.'">','</a>') |
|
.'</p>'; |
|
if ($copyresult) { |
|
$outcome .= '<p class="LC_error">' |
|
.&mt('The following errors occurred during export - [_1]' |
|
,$copyresult) |
|
.'</p>'; |
|
} |
|
} else { |
|
$outcome = '<p class="LC_error">' |
|
.&mt('Unfortunately you will not be able to retrieve' |
|
.' an IMS archive of your course at this time,' |
|
.' because there was a problem creating a' |
|
.' manifest file.') |
|
.'</p>' |
|
.'<p><a href="javascript:history.go(-1)">' |
|
.&mt('Go Back') |
|
.'</a></p>'; |
|
} |
|
} |
|
$r->print(&Apache::loncommon::start_page('Export '.$crstype.' to IMS Package')); |
|
$r->print(&Apache::lonhtmlcommon::breadcrumbs('IMS Export')); |
|
$r->print($outcome); |
|
$r->print(&Apache::loncommon::end_page()); |
|
} else { |
|
my $display='<form name="exportdoc" action="" method="post">'."\n". |
|
'<p>'. |
|
&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('."'$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 $scripttag = qq| |
|
<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(item) { |
|
if (document.exportdoc.elements[item].checked == true) { |
|
containerCheck(item) |
|
} |
|
} |
|
|
|
function containerCheck(item) { |
|
document.exportdoc.elements[item].checked = true |
|
var numitems = $count + $boards + $startcount |
|
var parents = new Array(numitems) |
|
for (var i=$startcount; i<numitems; i++) { |
|
parents[i] = new Array |
|
} |
|
|; |
|
|
|
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 .= qq| |
|
if (parents[item].length > 0) { |
|
for (var j=0; j<parents[item].length; j++) { |
|
containerCheck(parents[item][j]) |
|
} |
|
} |
|
} |
|
// ]]> |
|
</script> |
|
|; |
|
$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>'); |
|
} |
|
} |
|
|
|
sub create_ims_store { |
|
my ($now,$manifestok,$outcome,$tempexport,$format,$testbank) = @_; |
|
$$tempexport = $Apache::lonnet::perlvar{'lonDaemons'}.'/tmp/ims_exports'; |
|
my $ims_manifest; |
|
if (!-e $$tempexport) { |
|
mkdir($$tempexport,0700); |
|
} |
|
$$tempexport .= '/'.$now; |
|
if (!-e $$tempexport) { |
|
mkdir($$tempexport,0700); |
|
} |
|
$$tempexport .= '/'.$env{'user.domain'}.'_'.$env{'user.name'}; |
|
if (!-e $$tempexport) { |
|
mkdir($$tempexport,0700); |
|
} |
|
if (!-e "$$tempexport/resources") { |
|
mkdir("$$tempexport/resources",0700); |
|
} |
|
# open manifest file |
|
my $manifest = '/imsmanifest.xml'; |
|
my $manifestfilename = $$tempexport.$manifest; |
|
if ($ims_manifest = Apache::File->new('>'.$manifestfilename)) { |
|
$$manifestok=1; |
|
print $ims_manifest |
|
'<?xml version="1.0" encoding="UTF-8"?>'."\n". |
|
'<manifest xmlns="http://www.imsglobal.org/xsd/imscp_v1p1"'. |
|
' xmlns:imsmd="http://www.imsglobal.org/xsd/imsmd_v1p2"'. |
|
' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"'. |
|
' identifier="MANIFEST-'.$env{'request.course.id'}.'-'.$now.'"'. |
|
' xsi:schemaLocation="http://www.imsglobal.org/xsd/imscp_v1p1imscp_v1p1.xsd'. |
|
' http://www.imsglobal.org/xsd/imsmd_v1p2 imsmd_v1p2p2.xsd">'."\n". |
|
' <metadata> |
|
<schema></schema> |
|
<imsmd:lom> |
|
<imsmd:general> |
|
<imsmd:identifier>'.$env{'request.course.id'}.'</imsmd:identifier> |
|
<imsmd:title> |
|
<imsmd:langstring xml:lang="en">'.$env{'course.'.$env{'request.course.id'}.'.description'}.'</imsmd:langstring> |
|
</imsmd:title> |
|
</imsmd:general> |
|
</imsmd:lom> |
|
</metadata>'."\n". |
|
' <organizations default="ORG-'.$env{'request.course.id'}.'-'.$now.'">'."\n". |
|
' <organization identifier="ORG-'.$env{'request.course.id'}.'-'.$now.'"'. |
|
' structure="hierarchical">'."\n". |
|
' <title>'.$env{'course.'.$env{'request.course.id'}.'.description'}.'</title>'; |
|
if ($format eq 'plaintext') { |
|
my $testbankfilename = $$tempexport.'/testbank.txt'; |
|
$$testbank = Apache::File->new('>'.$testbankfilename); |
|
} |
|
} else { |
|
$$outcome .= 'An error occurred opening the IMS manifest file.<br />' |
|
; |
|
} |
|
return $ims_manifest; |
|
} |
|
|
|
sub build_package { |
|
my ($now,$navmap,$exportitems,$discussions,$outcome,$tempexport,$copyresult, |
|
$ims_manifest,$format,$testbank) = @_; |
|
# first iterator to look for dependencies |
|
my $it = $navmap->getIterator(undef,undef,undef,1,undef,undef); |
|
my $curRes; |
|
my $count = 0; |
|
my $depth = 0; |
|
my $lastcontainer = 0; |
|
my %parent = (); |
|
my @dependencies = (); |
|
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
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)) { |
|
if ($curRes->is_sequence() || $curRes->is_page()) { |
|
$lastcontainer = $count; |
|
} |
|
if (grep(/^$count$/,@$exportitems)) { |
|
&get_dependencies($exportitems,\%parent,$depth,\@dependencies); |
|
} |
|
} |
|
} |
|
# second iterator to build manifest and store resources |
|
$it = $navmap->getIterator(undef,undef,undef,1,undef,undef); |
|
$depth = 0; |
|
my $prevdepth; |
|
$count = 0; |
|
my $imsresources; |
|
my $pkgdepth; |
|
my $currdirpath = 'Top'; |
|
while ($curRes = $it->next()) { |
|
if ($curRes == $it->BEGIN_MAP()) { |
|
$prevdepth = $depth; |
|
$depth++; |
|
} |
|
if ($curRes == $it->END_MAP()) { |
|
$prevdepth = $depth; |
|
$depth--; |
|
} |
|
|
|
if (ref($curRes)) { |
|
$count ++; |
|
if ((grep(/^$count$/,@$exportitems)) || (grep(/^$count$/,@dependencies))) { |
|
my $symb = $curRes->symb(); |
|
my $isvisible = 'true'; |
|
my $resourceref; |
|
if ($curRes->randomout()) { |
|
$isvisible = 'false'; |
|
} |
|
unless ($curRes->is_sequence()) { |
|
$resourceref = 'identifierref="RES-'.$env{'request.course.id'}.'-'.$count.'"'; |
|
} |
|
my $step = $prevdepth - $depth; |
|
if (($step >= 0) && ($count > 1)) { |
|
while ($step >= 0) { |
|
print $ims_manifest "\n".' </item>'."\n"; |
|
$step --; |
|
} |
|
} |
|
$prevdepth = $depth; |
|
|
|
my $itementry = |
|
'<item identifier="ITEM-'.$env{'request.course.id'}.'-'.$count. |
|
'" isvisible="'.$isvisible.'" '.$resourceref.'>'. |
|
'<title>'.$curRes->title().'</title>'; |
|
print $ims_manifest "\n".$itementry; |
|
|
|
if ($curRes->is_sequence()) { |
|
$currdirpath = 'Top'; |
|
my $pcslist = $curRes->map_hierarchy(); |
|
if ($pcslist ne '') { |
|
foreach my $pc (split(/,/,$pcslist),$curRes->map_pc()) { |
|
next if ($pc <= 1); |
|
my $res = $navmap->getByMapPc($pc); |
|
if (ref($res)) { |
|
my $encloser = $res->title(); |
|
if ($encloser) { |
|
if ($currdirpath) { |
|
$currdirpath .= ' -> '; |
|
} |
|
$currdirpath .= $encloser; |
|
} |
|
} |
|
} |
|
} |
|
} else { |
|
my $content_file; |
|
my @hrefs = (); |
|
&process_content($count,$curRes,$cdom,$cnum,$symb,\$content_file,\@hrefs,$copyresult,$tempexport,$format,$currdirpath,$testbank); |
|
if ($content_file) { |
|
$imsresources .= "\n". |
|
' <resource identifier="RES-'.$env{'request.course.id'}.'-'.$count. |
|
'" type="webcontent" href="'.$content_file.'">'."\n". |
|
' <file href="'.$content_file.'" />'."\n"; |
|
foreach my $item (@hrefs) { |
|
$imsresources .= |
|
' <file href="'.$item.'" />'."\n"; |
|
} |
|
if (grep(/^$count$/,@$discussions)) { |
|
my $ressymb = $symb; |
|
my $mode; |
|
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'; |
|
} |
|
$mode = 'board'; |
|
} |
|
my %extras = ( |
|
caller => 'imsexport', |
|
tempexport => $tempexport.'/resources', |
|
count => $count |
|
); |
|
my $discresult = &Apache::lonfeedback::list_discussion($mode,undef,$ressymb,\%extras); |
|
} |
|
$imsresources .= ' </resource>'."\n"; |
|
} |
|
} |
|
$pkgdepth = $depth; |
|
} |
|
} |
|
} |
|
while ($pkgdepth > 0) { |
|
print $ims_manifest " </item>\n"; |
|
$pkgdepth --; |
|
} |
|
my $resource_text = qq| |
|
</organization> |
|
</organizations> |
|
<resources> |
|
$imsresources |
|
</resources> |
|
</manifest> |
|
|; |
|
print $ims_manifest $resource_text; |
|
} |
|
|
|
sub get_dependencies { |
|
my ($exportitems,$parent,$depth,$dependencies) = @_; |
|
if ($depth > 1) { |
|
if ((!grep(/^$$parent{$depth}$/,@$exportitems)) && (!grep(/^$$parent{$depth}$/,@$dependencies))) { |
|
push(@{$dependencies},$$parent{$depth}); |
|
if ($depth > 2) { |
|
&get_dependencies($exportitems,$parent,$depth-1,$dependencies); |
|
} |
|
} |
|
} |
|
} |
|
|
|
sub process_content { |
|
my ($count,$curRes,$cdom,$cnum,$symb,$content_file,$href,$copyresult,$tempexport,$format,$currdirpath,$testbank) = @_; |
|
my $content_type; |
|
my $message; |
|
my @uploads = (); |
|
if ($curRes->is_sequence()) { |
|
$content_type = 'sequence'; |
|
} elsif ($curRes->is_page()) { |
|
$content_type = 'page'; # need to handle individual items in pages. |
|
} elsif ($symb =~ m-public/$cdom/$cnum/syllabus$-) { |
|
$content_type = 'syllabus'; |
|
my $contents = &Apache::imsexport::templatedpage($content_type); |
|
if ($contents) { |
|
$$content_file = &store_template($contents,$tempexport,$count,$content_type); |
|
} |
|
} elsif ($symb =~ m-\.sequence___\d+___ext-) { |
|
$content_type = 'external'; |
|
my $title = $curRes->title; |
|
my $contents = &Apache::imsexport::external($symb,$title); |
|
if ($contents) { |
|
$$content_file = &store_template($contents,$tempexport,$count,$content_type); |
|
} |
|
} elsif ($symb =~ m-adm/navmaps$-) { |
|
$content_type = 'navmap'; |
|
} elsif ($symb =~ m-adm/[^/]+/[^/]+/(\d+)/smppg$-) { |
|
$content_type = 'simplepage'; |
|
my $contents = &Apache::imsexport::templatedpage($content_type,$1,$count,\@uploads); |
|
if ($contents) { |
|
$$content_file = &store_template($contents,$tempexport,$count,$content_type); |
|
} |
|
} elsif ($symb =~ m-lib/templates/simpleproblem\.problem$-) { |
|
$content_type = 'simpleproblem'; |
|
my $contents = &Apache::imsexport::simpleproblem($symb); |
|
if ($contents) { |
|
$$content_file = &store_template($contents,$tempexport,$count,$content_type); |
|
} |
|
} elsif ($symb =~ m-lib/templates/examupload\.problem$-) { |
|
$content_type = 'examupload'; |
|
} elsif ($symb =~ m-adm/($match_domain)/($match_username)/(\d+)/bulletinboard$-) { |
|
$content_type = 'bulletinboard'; |
|
my $contents = &Apache::imsexport::templatedpage($content_type,$3,$count,\@uploads,$1,$2); |
|
if ($contents) { |
|
$$content_file = &store_template($contents,$tempexport,$count,$content_type); |
|
} |
|
} elsif ($symb =~ m-adm/([^/]+)/([^/]+)/aboutme$-) { |
|
$content_type = 'aboutme'; |
|
my $contents = &Apache::imsexport::templatedpage($content_type,undef,$count,\@uploads,$1,$2); |
|
if ($contents) { |
|
$$content_file = &store_template($contents,$tempexport,$count,$content_type); |
|
} |
|
} elsif ($symb =~ m-\.(sequence|page)___\d+___uploaded/$cdom/$cnum/-) { |
|
$$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'uploaded'); |
|
} elsif ($symb =~ m-\.(sequence|page)___\d+___([^/]+)/([^/]+)-) { |
|
my $canedit = 0; |
|
if ($2 eq $env{'user.domain'} && $3 eq $env{'user.name'}) { |
|
$canedit= 1; |
|
} |
|
# only include problem code where current user is author |
|
if (($format eq 'html') || ($format eq 'plaintext')) { |
|
my $title = $curRes->title; |
|
$$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,$format,$currdirpath,$title,$testbank); |
|
} elsif ($format eq 'xml') { |
|
if ($canedit) { |
|
$$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'resource'); |
|
} else { |
|
$$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'noedit'); |
|
} |
|
} |
|
} elsif ($symb =~ m-uploaded/$cdom/$cnum-) { |
|
$$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'uploaded'); |
|
} |
|
if (@uploads > 0) { |
|
foreach my $item (@uploads) { |
|
my $uploadmsg = ''; |
|
&replicate_content($cdom,$cnum,$tempexport,$item,$count,\$uploadmsg,$href,'templateupload'); |
|
if ($uploadmsg) { |
|
$$copyresult .= $uploadmsg."\n"; |
|
} |
|
} |
|
} |
|
if ($message) { |
|
$$copyresult .= $message."\n"; |
|
} |
|
} |
|
|
|
sub replicate_content { |
|
my ($cdom,$cnum,$tempexport,$symb,$count,$message,$href,$caller,$currdirpath, |
|
$title,$testbank) = @_; |
|
my ($map,$ind,$url); |
|
if ($caller eq 'templateupload') { |
|
$url = $symb; |
|
$url =~ s#//#/#g; |
|
} else { |
|
($map,$ind,$url)=&Apache::lonnet::decode_symb($symb); |
|
} |
|
my $content; |
|
my $filename; |
|
my $repstatus; |
|
my $content_name; |
|
if ($url =~ m-/([^/]+)$-) { |
|
$filename = $1; |
|
if (!-e $tempexport.'/resources') { |
|
mkdir($tempexport.'/resources',0700); |
|
} |
|
if (!-e $tempexport.'/resources/'.$count) { |
|
mkdir($tempexport.'/resources/'.$count,0700); |
|
} |
|
my $destination = $tempexport.'/resources/'.$count.'/'.$filename; |
|
my $copiedfile; |
|
if ($copiedfile = Apache::File->new('>'.$destination)) { |
|
my $content; |
|
if ($caller eq 'resource') { |
|
my $respath = $Apache::lonnet::perlvar{'lonDocRoot'}.'/res'; |
|
my $filepath = &Apache::lonnet::filelocation($respath,$url); |
|
$content = &Apache::lonnet::getfile($filepath); |
|
if ($content eq -1) { |
|
$$message = 'Could not copy file '.$filename; |
|
} else { |
|
&extract_media($url,$cdom,$cnum,\$content,$count,$tempexport,$href,$message,'resource'); |
|
$repstatus = 'ok'; |
|
} |
|
} elsif ($caller eq 'uploaded' || $caller eq 'templateupload') { |
|
my $rtncode; |
|
$repstatus = &Apache::lonnet::getuploaded('GET',$url,$cdom,$cnum,\$content,$rtncode); |
|
if ($repstatus eq 'ok') { |
|
if ($url =~ /\.html?$/i) { |
|
&extract_media($url,$cdom,$cnum,\$content,$count,$tempexport,$href,$message,'uploaded'); |
|
} |
|
} else { |
|
$$message = 'Could not render '.$url.' server message - '.$rtncode."<br />\n"; |
|
} |
|
} elsif (($caller eq 'noedit') || ($caller eq 'html') || |
|
($caller eq 'plaintext')) { |
|
# Need to render the resource without the LON-CAPA Internal header and the Post discussion footer, and then set $content equal to this. |
|
my %form = ( |
|
grade_symb => $symb, |
|
grade_courseid => $cdom.'_'.$cnum, |
|
grade_domain => $env{'user.domain'}, |
|
grade_username => $env{'user.name'}, |
|
grade_imsexport => 1, |
|
instructor_comments => 'hide', |
|
); |
|
my $feedurl=&Apache::lonnet::clutter($url); |
|
my ($userview,$response)=&Apache::lonnet::ssi_body($feedurl,%form); |
|
if (ref($response)) { |
|
if ($response->is_success) { |
|
$content = $userview; |
|
$content =~ s/\Qonchange="javascript:setSubmittedPart('\E[^\']+\Q');"\E//g; |
|
$content =~ s/^\s*[\n\r]+$//; |
|
if ($caller eq 'plaintext') { |
|
my @lines = split(/[\n\r]+/,$content); |
|
my @tosave; |
|
my $foilcounter = 0; |
|
my @alphabet = ('a'..'z'); |
|
my $mc_answer; |
|
foreach my $line (@lines) { |
|
next if ($line =~ /^\s*$/); |
|
if ($line =~ m{(|\Q<\label>\E)\Q<br />Incorrect:<label>\E}) { |
|
$foilcounter ++; |
|
} elsif ($line =~ m{(|\Q</label>\E)\Q<br />Correct:<b><label>\E}) { |
|
$foilcounter ++; |
|
$mc_answer = $alphabet[$foilcounter-1]; |
|
} elsif ($line !~ m{\Q</label>\E(|\Q</b>\E)\Q<br />\E}) { |
|
$line =~ s/^(\s+|\s+)$//g; |
|
$line =~ s{^\Q<b>\E([^<]+)\Q</b>\E$}{1}; |
|
$tosave[$foilcounter] .= $line.' '; |
|
} |
|
$content = join("\t",@tosave); |
|
if ($mc_answer) { |
|
$content .= "\t".$mc_answer."\n"; |
|
} |
|
} |
|
if (@tosave) { |
|
my $qtype; |
|
if ($mc_answer) { |
|
$qtype = 'MC'; |
|
} |
|
$content = $currdirpath."\t".$title."\t$qtype\t".join("\t",@tosave); |
|
if ($mc_answer) { |
|
$content .= "\t".$mc_answer; |
|
} |
|
$content .= "\n"; |
|
} |
|
} else { |
|
$content = '<html><body>'.$content.'</body></html>'; |
|
} |
|
if (($caller eq 'plaintext') && ($testbank)) { |
|
print $testbank $content; |
|
} |
|
} else { |
|
$content = 'Not the owner of this resource'; |
|
} |
|
} else { |
|
$content = 'Not the owner of this resource'; |
|
} |
|
$repstatus = 'ok'; |
|
} |
|
if ($repstatus eq 'ok') { |
|
print $copiedfile $content; |
|
} |
|
close($copiedfile); |
|
} else { |
|
$$message = 'Could not open destination file for '.$filename."<br />\n"; |
|
} |
|
} else { |
|
$$message = 'Could not determine name of file for '.$symb."<br />\n"; |
|
} |
|
if ($repstatus eq 'ok') { |
|
$content_name = 'resources/'.$count.'/'.$filename; |
|
} |
|
return $content_name; |
|
} |
|
|
|
sub extract_media { |
|
my ($url,$cdom,$cnum,$content,$count,$tempexport,$href,$message,$caller) = @_; |
|
my ($dirpath,$container); |
|
my %allfiles = (); |
|
my %codebase = (); |
|
if ($url =~ m-(.*/)([^/]+)$-) { |
|
$dirpath = $1; |
|
$container = $2; |
|
} else { |
|
$dirpath = $url; |
|
$container = ''; |
|
} |
|
&Apache::lonnet::extract_embedded_items(undef,\%allfiles,\%codebase,$content); |
|
foreach my $embed_file (keys(%allfiles)) { |
|
my $filename; |
|
if ($embed_file =~ m#([^/]+)$#) { |
|
$filename = $1; |
|
} else { |
|
$filename = $embed_file; |
|
} |
|
my $newname = 'res/'.$filename; |
|
my ($rtncode,$embed_content,$repstatus); |
|
my $embed_url; |
|
if ($embed_file =~ m-^/-) { |
|
$embed_url = $embed_file; # points to absolute path |
|
} else { |
|
if ($embed_file =~ m-https?://-) { |
|
next; # points to url |
|
} else { |
|
$embed_url = $dirpath.$embed_file; # points to relative path |
|
} |
|
} |
|
if ($caller eq 'resource') { |
|
my $respath = $Apache::lonnet::perlvar{'lonDocRoot'}.'/res'; |
|
my $embed_path = &Apache::lonnet::filelocation($respath,$embed_url); |
|
$embed_content = &Apache::lonnet::getfile($embed_path); |
|
unless ($embed_content eq -1) { |
|
$repstatus = 'ok'; |
|
} |
|
} elsif ($caller eq 'uploaded') { |
|
$repstatus = &Apache::lonnet::getuploaded('GET',$embed_url,$cdom,$cnum,\$embed_content,$rtncode); |
|
} |
|
if ($repstatus eq 'ok') { |
|
my $destination = $tempexport.'/resources/'.$count.'/res'; |
|
if (!-e "$destination") { |
|
mkdir($destination,0755); |
|
} |
|
$destination .= '/'.$filename; |
|
my $copiedfile; |
|
if ($copiedfile = Apache::File->new('>'.$destination)) { |
|
print $copiedfile $embed_content; |
|
push(@{$href},'resources/'.$count.'/res/'.$filename); |
|
my $attrib_regexp = ''; |
|
if (@{$allfiles{$embed_file}} > 1) { |
|
$attrib_regexp = join('|',@{$allfiles{$embed_file}}); |
|
} else { |
|
$attrib_regexp = $allfiles{$embed_file}[0]; |
|
} |
|
$$content =~ s#($attrib_regexp\s*=\s*['"]?)\Q$embed_file\E(['"]?)#$1$newname$2#gi; |
|
if ($caller eq 'resource' && $container =~ /\.(problem|library)$/) { |
|
$$content =~ s#\Q$embed_file\E#$newname#gi; |
|
} |
|
} |
|
} else { |
|
$$message .= 'replication of embedded file - '.$embed_file.' in '.$url.' failed, reason -'.$rtncode."<br />\n"; |
|
} |
|
} |
|
return; |
|
} |
|
|
|
sub store_template { |
|
my ($contents,$tempexport,$count,$content_type) = @_; |
|
if ($contents) { |
|
if ($tempexport) { |
|
if (!-e $tempexport.'/resources') { |
|
mkdir($tempexport.'/resources',0700); |
|
} |
|
if (!-e $tempexport.'/resources/'.$count) { |
|
mkdir($tempexport.'/resources/'.$count,0700); |
|
} |
|
my $destination = $tempexport.'/resources/'.$count.'/'.$content_type.'.xml'; |
|
my $storetemplate; |
|
if ($storetemplate = Apache::File->new('>'.$destination)) { |
|
print $storetemplate $contents; |
|
close($storetemplate); |
|
} |
|
if ($content_type eq 'external') { |
|
return 'resources/'.$count.'/'.$content_type.'.html'; |
|
} else { |
|
return 'resources/'.$count.'/'.$content_type.'.xml'; |
|
} |
|
} |
|
} |
|
} |
|
|
|
|
|
sub group_import { |
sub group_import { |
my ($coursenum, $coursedom, $folder, $container, $caller, @files) = @_; |
my ($coursenum, $coursedom, $folder, $container, $caller, @files) = @_; |
|
|
Line 1127 sub breadcrumbs {
|
Line 329 sub breadcrumbs {
|
my $isencrypted=0; |
my $isencrypted=0; |
my $ishidden=0; |
my $ishidden=0; |
my $is_random_order=0; |
my $is_random_order=0; |
if (!$allowed) { |
|
my $description = $env{'course.'.$env{'request.course.id'}.'.description'}; |
|
&Apache::lonhtmlcommon::add_breadcrumb( |
|
{'href' => '/adm/menu', |
|
'title'=> 'Go to main menu', |
|
'text' => $description, |
|
}); |
|
$plain .= $description.' >'; |
|
} |
|
while (@folders) { |
while (@folders) { |
my $folder=shift(@folders); |
my $folder=shift(@folders); |
my $foldername=shift(@folders); |
my $foldername=shift(@folders); |
if ($folderpath) {$folderpath.='&';} |
if ($folderpath) {$folderpath.='&';} |
$folderpath.=$folder.'&'.$foldername; |
$folderpath.=$folder.'&'.$foldername; |
my $url='/adm/coursedocs?folderpath='. |
my $url; |
&escape($folderpath); |
if ($allowed) { |
my $name=&unescape($foldername); |
$url = '/adm/coursedocs?folderpath='; |
|
} else { |
|
$url = '/adm/supplemental?folderpath='; |
|
} |
|
$url .= &escape($folderpath); |
|
my $name=&unescape($foldername); |
# randompick number, hidden, encrypted, random order, is appended with ":"s to the foldername |
# randompick number, hidden, encrypted, random order, is appended with ":"s to the foldername |
$name=~s/\:(\d*)\:(\w*)\:(\w*):(\d*)$//; |
$name=~s/\:(\d*)\:(\w*)\:(\w*):(\d*)$//; |
if ($1 ne '') { |
if ($1 ne '') { |
$randompick=$1; |
$randompick=$1; |
} else { |
} else { |
$randompick=-1; |
$randompick=-1; |
} |
} |
if ($2) { $ishidden=1; } |
if ($2) { $ishidden=1; } |
if ($3) { $isencrypted=1; } |
if ($3) { $isencrypted=1; } |
if ($4 ne '') { $is_random_order = 1; } |
if ($4 ne '') { $is_random_order = 1; } |
if ($folder eq 'supplemental') { |
if ($folder eq 'supplemental') { |
$name = &mt('Supplemental '.$crstype.' Documents'); |
$name = &mt('Supplemental '.$crstype.' Content'); |
} |
} |
&Apache::lonhtmlcommon::add_breadcrumb( |
&Apache::lonhtmlcommon::add_breadcrumb( |
{'href'=>$url.$cpinfo, |
{'href'=>$url.$cpinfo, |
'title'=>$name, |
'title'=>$name, |
'text'=>$name, |
'text'=>$name, |
Line 1167 sub breadcrumbs {
|
Line 365 sub breadcrumbs {
|
} |
} |
$plain=~s/\>\;\s*$//; |
$plain=~s/\>\;\s*$//; |
return (&Apache::lonhtmlcommon::breadcrumbs(undef,undef,0,'nohelp', |
return (&Apache::lonhtmlcommon::breadcrumbs(undef,undef,0,'nohelp', |
undef, undef, 1 ),$randompick,$ishidden,$isencrypted,$plain,$is_random_order); |
undef, undef, 1 ),$randompick,$ishidden, |
|
$isencrypted,$plain,$is_random_order); |
} |
} |
|
|
sub log_docs { |
sub log_docs { |
Line 1569 sub update_parameter {
|
Line 768 sub update_parameter {
|
|
|
sub handle_edit_cmd { |
sub handle_edit_cmd { |
my ($coursenum,$coursedom) =@_; |
my ($coursenum,$coursedom) =@_; |
|
|
my ($cmd,$idx)=split('_',$env{'form.cmd'}); |
my ($cmd,$idx)=split('_',$env{'form.cmd'}); |
|
|
my $ratstr = $LONCAPA::map::resources[$LONCAPA::map::order[$idx]]; |
my $ratstr = $LONCAPA::map::resources[$LONCAPA::map::order[$idx]]; |
Line 1577 sub handle_edit_cmd {
|
Line 775 sub handle_edit_cmd {
|
|
|
if ($cmd eq 'del') { |
if ($cmd eq 'del') { |
if (($url=~m|/+uploaded/\Q$coursedom\E/\Q$coursenum\E/|) && |
if (($url=~m|/+uploaded/\Q$coursedom\E/\Q$coursenum\E/|) && |
($url!~/\.(page|sequence|problem|exam|quiz|assess|survey|form|library|task)$/)) { |
($url!~/$LONCAPA::assess_page_seq_re/)) { |
&Apache::lonnet::removeuploadedurl($url); |
&Apache::lonnet::removeuploadedurl($url); |
} else { |
} else { |
&LONCAPA::map::makezombie($LONCAPA::map::order[$idx]); |
&LONCAPA::map::makezombie($LONCAPA::map::order[$idx]); |
Line 1613 sub handle_edit_cmd {
|
Line 811 sub handle_edit_cmd {
|
} |
} |
|
|
sub editor { |
sub editor { |
my ($r,$coursenum,$coursedom,$folder,$allowed,$upload_output,$crstype)=@_; |
my ($r,$coursenum,$coursedom,$folder,$allowed,$upload_output,$crstype, |
|
$supplementalflag,$orderhash,$iconpath)=@_; |
my $container= ($env{'form.pagepath'}) ? 'page' |
my $container= ($env{'form.pagepath'}) ? 'page' |
: 'sequence'; |
: 'sequence'; |
|
|
Line 1629 sub editor {
|
Line 828 sub editor {
|
} |
} |
|
|
my ($breadcrumbtrail,$randompick,$ishidden,$isencrypted,$plain,$is_random_order) = |
my ($breadcrumbtrail,$randompick,$ishidden,$isencrypted,$plain,$is_random_order) = |
&breadcrumbs($allowed,$crstype); |
&breadcrumbs($allowed,$crstype); |
$r->print($breadcrumbtrail); |
$r->print($breadcrumbtrail); |
|
|
|
my $jumpto = "uploaded/$coursedom/$coursenum/$folder.$container"; |
|
|
unless ($allowed) { |
unless ($allowed) { |
$randompick = -1; |
$randompick = -1; |
Line 1742 sub editor {
|
Line 943 sub editor {
|
$r->print('</div>'); |
$r->print('</div>'); |
} |
} |
|
|
my $output; |
my ($to_show,$output); |
|
|
&Apache::loncommon::start_data_table_count(); #setup a row counter |
&Apache::loncommon::start_data_table_count(); #setup a row counter |
foreach my $res (@LONCAPA::map::order) { |
foreach my $res (@LONCAPA::map::order) { |
Line 1759 sub editor {
|
Line 960 sub editor {
|
&Apache::loncommon::end_data_table_count(); |
&Apache::loncommon::end_data_table_count(); |
|
|
if ($shown) { |
if ($shown) { |
$r->print(&Apache::loncommon::start_scrollbox('900px','880px','400px','contentscroll') |
$to_show = &Apache::loncommon::start_scrollbox('900px','880px','400px','contentscroll') |
.&Apache::loncommon::start_data_table(undef,'contentlist')); |
.&Apache::loncommon::start_data_table(undef,'contentlist'); |
if ($allowed) { |
if ($allowed) { |
$r->print(&Apache::loncommon::start_data_table_header_row() |
$to_show .= &Apache::loncommon::start_data_table_header_row() |
.'<th colspan="2">'.&mt('Move').'</th>' |
.'<th colspan="2">'.&mt('Move').'</th>' |
.'<th>'.&mt('Actions').'</th>' |
.'<th>'.&mt('Actions').'</th>' |
.'<th colspan="2">'.&mt('Document').'</th>'); |
.'<th colspan="2">'.&mt('Document').'</th>'; |
if ($folder !~ /^supplemental/) { |
if ($folder !~ /^supplemental/) { |
$r->print('<th colspan="4">'.&mt('Settings').'</th>'); |
$to_show .= '<th colspan="4">'.&mt('Settings').'</th>'; |
} |
} |
$r->print(&Apache::loncommon::end_data_table_header_row()); |
$to_show .= &Apache::loncommon::end_data_table_header_row(); |
} |
} |
$r->print($output |
$to_show .= $output.' ' |
.&Apache::loncommon::end_data_table() |
.&Apache::loncommon::end_data_table() |
.&Apache::loncommon::end_scrollbox() |
.'<br style="line-height:2px;" />' |
); |
.&Apache::loncommon::end_scrollbox(); |
} else { |
} else { |
$r->print('<p class="LC_info">' |
$to_show .= &Apache::loncommon::start_scrollbox('400px','380px','200px','contentscroll') |
|
.'<div class="LC_info" id="contentlist">' |
.&mt('Currently no documents.') |
.&mt('Currently no documents.') |
.'</p>' |
.'</div>' |
); |
.&Apache::loncommon::end_scrollbox(); |
|
} |
|
my $tid = 1; |
|
if ($supplementalflag) { |
|
$tid = 2; |
} |
} |
if ($allowed) { |
if ($allowed) { |
|
$r->print(&generate_edit_table($tid,$orderhash,$to_show,$iconpath,$jumpto)); |
&print_paste_buffer($r,$container); |
&print_paste_buffer($r,$container); |
|
} else { |
|
if (&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) { |
|
#Function Box for Supplemental Content for users with mdc priv. |
|
my $funcname = &mt('Folder Editor'); |
|
$r->print( |
|
&Apache::loncommon::head_subbox( |
|
&Apache::lonhtmlcommon::start_funclist(). |
|
&Apache::lonhtmlcommon::add_item_funclist( |
|
'<a href="/adm/coursedocs?command=direct&forcesupplement=1&'. |
|
'supppath='.&HTML::Entities::encode($env{'form.folderpath'}).'">'. |
|
'<img src="/res/adm/pages/docs.png" alt="'.$funcname.'" class="LC_icon" />'. |
|
'<span class="LC_menubuttons_inline_text">'.$funcname.'</span></a>'). |
|
&Apache::lonhtmlcommon::end_funclist())); |
|
} |
|
$r->print($to_show); |
} |
} |
return; |
return; |
} |
} |
Line 1885 sub process_file_upload {
|
Line 1107 sub process_file_upload {
|
$$upload_output .= &mt('No embedded items identified').'<br />'; |
$$upload_output .= &mt('No embedded items identified').'<br />'; |
} |
} |
$$upload_output = '<div id="uploadfileresult">'.$$upload_output.'</div>'; |
$$upload_output = '<div id="uploadfileresult">'.$$upload_output.'</div>'; |
|
} elsif (&Apache::loncommon::is_archive_file($mimetype)) { |
|
$nextphase = 'decompress_uploaded'; |
|
my $position = scalar(@LONCAPA::map::order)-1; |
|
my $noextract = &return_to_editor(); |
|
my $archiveurl = &HTML::Entities::encode($url,'<>&"'); |
|
my %archiveitems = ( |
|
folderpath => $env{'form.folderpath'}, |
|
pagepath => $env{'form.pagepath'}, |
|
cmd => $nextphase, |
|
newidx => $newidx, |
|
position => $position, |
|
phase => $nextphase, |
|
comment => $comment, |
|
); |
|
$$upload_output = $showupload. |
|
&Apache::loncommon::decompress_form($mimetype, |
|
$archiveurl,'/adm/coursedocs',$noextract, |
|
\%archiveitems); |
} |
} |
} |
} |
} |
} |
Line 1961 sub entryline {
|
Line 1201 sub entryline {
|
if ($allowed) { |
if ($allowed) { |
my $incindex=$index+1; |
my $incindex=$index+1; |
my $selectbox=''; |
my $selectbox=''; |
if (($folder!~/^supplemental/) && |
if (($#LONCAPA::map::order>0) && |
($#LONCAPA::map::order>0) && |
|
((split(/\:/, |
((split(/\:/, |
$LONCAPA::map::resources[$LONCAPA::map::order[0]]))[1] |
$LONCAPA::map::resources[$LONCAPA::map::order[0]]))[1] |
ne '') && |
ne '') && |
Line 2078 END
|
Line 1317 END
|
my $pagearg; |
my $pagearg; |
my $pagefile; |
my $pagefile; |
if ($uploaded) { |
if ($uploaded) { |
if ($extension eq 'sequence') { |
if (($extension eq 'sequence') || ($extension eq 'page')) { |
$icon=$iconpath.'/navmap.folder.closed.gif'; |
$url=~/\Q$coursenum\E\/([\/\w]+)\.\Q$extension\E$/; |
$url=~/\Q$coursenum\E\/([\/\w]+)\.sequence$/; |
my $containerarg = $1; |
$url='/adm/coursedocs?'; |
if ($extension eq 'sequence') { |
$folderarg=$1; |
$icon=$iconpath.'navmap.folder.closed.gif'; |
$isfolder=1; |
$folderarg=$containerarg; |
} elsif ($extension eq 'page') { |
$isfolder=1; |
$icon=$iconpath.'/page.gif'; |
} else { |
$url=~/\Q$coursenum\E\/([\/\w]+)\.page$/; |
$icon=$iconpath.'page.gif'; |
$pagearg=$1; |
$pagearg=$containerarg; |
$url='/adm/coursedocs?'; |
$ispage=1; |
$ispage=1; |
} |
|
if ($allowed) { |
|
$url='/adm/coursedocs?'; |
|
} else { |
|
$url='/adm/supplemental?'; |
|
} |
} else { |
} else { |
&Apache::lonnet::allowuploaded('/adm/coursedoc',$url); |
&Apache::lonnet::allowuploaded('/adm/coursedoc',$url); |
} |
} |
Line 2191 END
|
Line 1435 END
|
} else { |
} else { |
$reinit = &mt('(re-initialize course to access)'); |
$reinit = &mt('(re-initialize course to access)'); |
} |
} |
$line.=' |
$line.='<td>'; |
<td> |
if (($url=~m{/adm/(coursedocs|supplemental)}) || (!$allowed && $url)) { |
'.($url?'<a href="'.$url.'">':'').'<img src="'.$icon.'" alt="" class="LC_icon" />'.($url?'</a>':'').' |
$line.='<a href="'.$url.'"><img src="'.$icon.'" alt="" class="LC_icon" /></a>'; |
</td> |
} elsif ($url) { |
<td> |
$line.=&Apache::loncommon::modal_link($url.(($url=~/\?/)?'&':'?').'inhibitmenu=yes', |
'.($url?"<a href=\"$url\">":'').$title.($url?'</a>':' <span class="LC_docs_reinit_warn">'.$reinit.'</span>').$external." |
'<img src="'.$icon.'" alt="" class="LC_icon" />',600,500); |
</td>"; |
} else { |
|
$line.='<img src="'.$icon.'" alt="" class="LC_icon" />'; |
|
} |
|
$line.='</td><td>'; |
|
if (($url=~m{/adm/(coursedocs|supplemental)}) || (!$allowed && $url)) { |
|
$line.='<a href="'.$url.'">'.$title.'</a>'; |
|
} elsif ($url) { |
|
$line.=&Apache::loncommon::modal_link($url.(($url=~/\?/)?'&':'?').'inhibitmenu=yes', |
|
$title,600,500); |
|
} else { |
|
$line.=$title.' <span class="LC_docs_reinit_warn">'.$reinit.'</span>'; |
|
} |
|
$line.=$external."</td>"; |
if (($allowed) && ($folder!~/^supplemental/)) { |
if (($allowed) && ($folder!~/^supplemental/)) { |
my %lt=&Apache::lonlocal::texthash( |
my %lt=&Apache::lonlocal::texthash( |
'hd' => 'Hidden', |
'hd' => 'Hidden', |
Line 2211 END
|
Line 1467 END
|
$form_start |
$form_start |
<label><input type="checkbox" name="hiddenresource_$orderidx" onclick="this.form.changeparms.value='hiddenresource';this.form.submit()" $hidtext /> $lt{'hd'}</label> |
<label><input type="checkbox" name="hiddenresource_$orderidx" onclick="this.form.changeparms.value='hiddenresource';this.form.submit()" $hidtext /> $lt{'hd'}</label> |
$form_end |
$form_end |
</td> |
<br /> |
<td class="LC_docs_entry_parameter"> |
|
$form_start |
$form_start |
<label><input type="checkbox" name="encrypturl_$orderidx" onclick="this.form.changeparms.value='encrypturl';this.form.submit()" $enctext /> $lt{'ec'}</label> |
<label><input type="checkbox" name="encrypturl_$orderidx" onclick="this.form.changeparms.value='encrypturl';this.form.submit()" $enctext /> $lt{'ec'}</label> |
$form_end |
$form_end |
</td> |
</td> |
<td class="LC_docs_entry_parameter">$form_start $rand_order_text $form_end</td> |
<td class="LC_docs_entry_parameter">$form_start $parameterset $form_end<br /> |
<td class="LC_docs_entry_parameter">$form_start $parameterset $form_end</td> |
$form_start $rand_order_text $form_end</td> |
ENDPARMS |
ENDPARMS |
} |
} |
$line.=&Apache::loncommon::end_data_table_row(); |
$line.=&Apache::loncommon::end_data_table_row(); |
Line 2623 ENDHEADERS
|
Line 1878 ENDHEADERS
|
$r->print(' <a href="/adm/diff?filename='. |
$r->print(' <a href="/adm/diff?filename='. |
&Apache::lonnet::clutter($root.'.'.$extension). |
&Apache::lonnet::clutter($root.'.'.$extension). |
'&versionone='.$prevvers. |
'&versionone='.$prevvers. |
'">'.&mt('Diffs').'</a>'); |
'" target="diffs">'.&mt('Diffs').'</a>'); |
} |
} |
$r->print('</span><br />'); |
$r->print('</span><br />'); |
if (++$entries_count % $entries_per_col == 0) { |
if (++$entries_count % $entries_per_col == 0) { |
Line 2742 sub create_form_ul {
|
Line 1997 sub create_form_ul {
|
sub startContentScreen { |
sub startContentScreen { |
my ($r,$mode)=@_; |
my ($r,$mode)=@_; |
$r->print('<ul class="LC_TabContentBigger" id="mainnav">'); |
$r->print('<ul class="LC_TabContentBigger" id="mainnav">'); |
$r->print('<li'.(($mode eq 'navmaps')?' class="active"':'').'><a href="/adm/navmaps"><b> '.&mt('Content Overview').' </b></a></li>'); |
if (($mode eq 'navmaps') || ($mode eq 'supplemental')) { |
|
$r->print('<li'.(($mode eq 'navmaps')?' class="active"':'').'><a href="/adm/navmaps"><b> '.&mt('Content Overview').' </b></a></li>'."\n"); |
my $active = ''; |
$r->print('<li'.(($mode eq 'coursesearch')?' class="active"':'').'><a href="/adm/searchcourse"><b> '.&mt('Content Search').' </b></a></li>'."\n"); |
# does this user have privileges to modify docs? |
$r->print('<li'.(($mode eq 'courseindex')?' class="active"':'').'><a href="/adm/indexcourse"><b> '.&mt('Content Index').' </b></a></li>'."\n"); |
my $allowed=&Apache::lonnet::allowed('mdc',$env{'request.course.id'}); |
$r->print('<li '.(($mode eq 'suppdocs')?' class="active"':'').'><a href="/adm/supplemental"><b>'.&mt('Supplemental Content').'</b></a></li>'); |
|
} else { |
my $onclick; |
|
my $href; |
|
|
|
if ($allowed) { |
|
$r->print('<li '.(($mode eq 'docs')?' class="active"':''). |
$r->print('<li '.(($mode eq 'docs')?' class="active"':''). |
' id="tabbededitor"><a href="/adm/coursedocs?forcestandard=1"><b> '.&mt('Content Editor').' </b></a></li>'); |
' id="tabbededitor"><a href="/adm/coursedocs?forcestandard=1"><b> '.&mt('Content Editor').' </b></a></li>'); |
|
$r->print('<li '.(($mode eq 'suppdocs')?' class="active"':''). |
|
'><a href="/adm/coursedocs?forcesupplement=1"><b>'.&mt('Supplemental Content Editor').'</b></a></li>'); |
} |
} |
$r->print('<li'.(($mode eq 'coursesearch')?' class="active"':'').'><a href="/adm/searchcourse"><b> '.&mt('Content Search').' </b></a></li>'); |
$r->print("\n".'</ul>'."\n"); |
$r->print('<li'.(($mode eq 'courseindex')?' class="active"':'').'><a href="/adm/indexcourse"><b> '.&mt('Content Index').' </b></a></li>'); |
$r->print('<div class="LC_DocsBox" style="clear:both;margin:0;" id="contenteditor">'. |
$r->print('<li '.(($mode eq 'supdocs')?' class="active"':''). |
'<div id="maincoursedoc" style="margin:0 0;padding:0 0;">'. |
'><a href="/adm/coursedocs?forcesupplement=1"><b>'.&mt('Supplemental Documents').'</b></a></li>'); |
'<div class="LC_ContentBox" id="mainCourseDocuments" style="display: block;">'); |
$r->print('</ul>'); |
|
$r->print('<div class="LC_Box" style="clear:both;margin:0;" id="contenteditor">' |
|
.'<div id="maincoursedoc" style="margin:0 0;padding:0 0;">'); |
|
$r->print('<div class="LC_ContentBox" id="mainCourseDocuments" style="display: block;">'); |
|
} |
} |
|
|
# |
# |
Line 2775 sub endContentScreen {
|
Line 2024 sub endContentScreen {
|
} |
} |
|
|
sub supplemental_base { |
sub supplemental_base { |
return 'supplemental&'.&escape(&mt('Supplemental '.&Apache::loncommon::course_type().' Documents')); |
return 'supplemental&'.&escape(&mt('Supplemental '.&Apache::loncommon::course_type().' Content')); |
} |
} |
|
|
sub handler { |
sub handler { |
Line 2809 sub handler {
|
Line 2058 sub handler {
|
$help{'Group Portfolio'} = &Apache::loncommon::help_open_topic('Docs_About_Group_Files'); |
$help{'Group Portfolio'} = &Apache::loncommon::help_open_topic('Docs_About_Group_Files'); |
$help{'Caching'} = &Apache::loncommon::help_open_topic('Caching'); |
$help{'Caching'} = &Apache::loncommon::help_open_topic('Caching'); |
|
|
# does this user have privileges to modify docs |
|
my $allowed=&Apache::lonnet::allowed('mdc',$env{'request.course.id'}); |
my $allowed; |
|
# URI is /adm/supplemental when viewing supplemental docs in non-edit mode. |
|
unless ($r->uri eq '/adm/supplemental') { |
|
# does this user have privileges to modify content. |
|
$allowed = &Apache::lonnet::allowed('mdc',$env{'request.course.id'}); |
|
} |
|
|
if ($allowed && $env{'form.verify'}) { |
if ($allowed && $env{'form.verify'}) { |
&init_breadcrumbs('verify','Verify Content'); |
&init_breadcrumbs('verify','Verify Content'); |
&verifycontent($r); |
&verifycontent($r); |
Line 2828 sub handler {
|
Line 2083 sub handler {
|
&dumpcourse($r); |
&dumpcourse($r); |
} elsif ($allowed && $env{'form.exportcourse'}) { |
} elsif ($allowed && $env{'form.exportcourse'}) { |
&init_breadcrumbs('exportcourse','IMS Export'); |
&init_breadcrumbs('exportcourse','IMS Export'); |
&exportcourse($r); |
&Apache::imsexport::exportcourse($r); |
} else { |
} else { |
# |
# |
# Done catching special calls |
# Done catching special calls |
Line 2837 sub handler {
|
Line 2092 sub handler {
|
# |
# |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, |
['folderpath','pagepath', |
['folderpath','pagepath', |
'pagesymb','forcesupplement','forcestandard']); |
'pagesymb','forcesupplement','forcestandard', |
|
'symb','command']); |
|
|
# standard=1: this is a "new-style" course with an uploaded map as top level |
# standard=1: this is a "new-style" course with an uploaded map as top level |
# standard=2: this is a "old-style" course, and there is nothing we can do |
# standard=2: this is a "old-style" course, and there is nothing we can do |
Line 2861 sub handler {
|
Line 2117 sub handler {
|
my $script=''; |
my $script=''; |
my $showdoc=0; |
my $showdoc=0; |
my $addentries = {}; |
my $addentries = {}; |
|
my $container; |
my $containertag; |
my $containertag; |
my $uploadtag; |
my $uploadtag; |
|
|
|
# Do we directly jump somewhere? |
|
|
|
if ($env{'form.command'} eq 'direct') { |
|
my ($mapurl,$id,$resurl); |
|
if ($env{'form.symb'} ne '') { |
|
($mapurl,$id,$resurl) = &Apache::lonnet::decode_symb($env{'form.symb'}); |
|
if ($resurl=~/\.(sequence|page)$/) { |
|
$mapurl=$resurl; |
|
} elsif ($resurl eq 'adm/navmaps') { |
|
$mapurl=$env{'course.'.$env{'request.course.id'}.'.url'}; |
|
} |
|
my $mapresobj; |
|
my $navmap = Apache::lonnavmaps::navmap->new(); |
|
if (ref($navmap)) { |
|
$mapresobj = $navmap->getResourceByUrl($mapurl); |
|
} |
|
$mapurl=~s{^.*/([^/]+)\.(\w+)$}{$1}; |
|
my $type=$2; |
|
my $path; |
|
if (ref($mapresobj)) { |
|
my $pcslist = $mapresobj->map_hierarchy(); |
|
if ($pcslist ne '') { |
|
foreach my $pc (split(/,/,$pcslist)) { |
|
next if ($pc <= 1); |
|
my $res = $navmap->getByMapPc($pc); |
|
if (ref($res)) { |
|
my $thisurl = $res->src(); |
|
$thisurl=~s{^.*/([^/]+)\.\w+$}{$1}; |
|
my $thistitle = $res->title(); |
|
$path .= '&'. |
|
&Apache::lonhtmlcommon::entity_encode($thisurl).'&'. |
|
&Apache::lonhtmlcommon::entity_encode($thistitle). |
|
':'.$res->randompick(). |
|
':'.$res->randomout(). |
|
':'.$res->encrypted(). |
|
':'.$res->randomorder(); |
|
} |
|
} |
|
} |
|
$path .= '&'.&Apache::lonhtmlcommon::entity_encode($mapurl).'&'. |
|
&Apache::lonhtmlcommon::entity_encode($mapresobj->title()). |
|
':'.$mapresobj->randompick(). |
|
':'.$mapresobj->randomout(). |
|
':'.$mapresobj->encrypted(). |
|
':'.$mapresobj->randomorder(); |
|
} else { |
|
my $maptitle = &Apache::lonnet::gettitle($mapurl); |
|
$path = '&default&...::::'. |
|
'&'.&Apache::lonhtmlcommon::entity_encode($mapurl).'&'. |
|
&Apache::lonhtmlcommon::entity_encode($maptitle).'::::'; |
|
} |
|
$path = 'default&'. |
|
&Apache::lonhtmlcommon::entity_encode('Main Course Documents'). |
|
$path; |
|
if ($type eq 'sequence') { |
|
$env{'form.folderpath'}=$path; |
|
$env{'form.pagepath'}=''; |
|
} else { |
|
$env{'form.pagepath'}=$path; |
|
$env{'form.folderpath'}=''; |
|
} |
|
} elsif ($env{'form.supppath'} ne '') { |
|
$env{'form.folderpath'}=$env{'form.supppath'}; |
|
} |
|
} elsif ($env{'form.command'} eq 'editdocs') { |
|
$env{'form.folderpath'} = 'default&'. |
|
&Apache::lonhtmlcommon::entity_encode('Main Course Content'); |
|
$env{'form.pagepath'}=''; |
|
} elsif ($env{'form.command'} eq 'editsupp') { |
|
$env{'form.folderpath'} = 'default&'. |
|
&Apache::lonhtmlcommon::entity_encode('Supplemental Content'); |
|
$env{'form.pagepath'}=''; |
|
} |
|
|
# Where do we store these for when we come back? |
# Where do we store these for when we come back? |
my $stored_folderpath='docs_folderpath'; |
my $stored_folderpath='docs_folderpath'; |
if ($supplementalflag) { |
if ($supplementalflag) { |
$stored_folderpath='docs_sup_folderpath'; |
$stored_folderpath='docs_sup_folderpath'; |
} |
} |
|
|
# No folderpath, no pagepath, see if we have something stored |
# No folderpath, no pagepath, see if we have something stored |
if ((!$env{'form.folderpath'}) && (!$env{'form.pagepath'})) { |
if ((!$env{'form.folderpath'}) && (!$env{'form.pagepath'})) { |
&Apache::loncommon::restore_course_settings($stored_folderpath, |
&Apache::loncommon::restore_course_settings($stored_folderpath, |
Line 2901 sub handler {
|
Line 2232 sub handler {
|
} else { |
} else { |
$env{'form.folderpath'}='default'; |
$env{'form.folderpath'}='default'; |
} |
} |
} |
} |
|
|
# Store this |
# Store this |
&Apache::loncommon::store_course_settings($stored_folderpath, |
&Apache::loncommon::store_course_settings($stored_folderpath, |
Line 2912 sub handler {
|
Line 2243 sub handler {
|
my (@folderpath)=split('&',$env{'form.folderpath'}); |
my (@folderpath)=split('&',$env{'form.folderpath'}); |
$env{'form.foldername'}=&unescape(pop(@folderpath)); |
$env{'form.foldername'}=&unescape(pop(@folderpath)); |
$env{'form.folder'}=pop(@folderpath); |
$env{'form.folder'}=pop(@folderpath); |
|
$container='sequence'; |
} |
} |
if ($env{'form.pagepath'}) { |
if ($env{'form.pagepath'}) { |
my (@pagepath)=split('&',$env{'form.pagepath'}); |
my (@pagepath)=split('&',$env{'form.pagepath'}); |
$env{'form.pagename'}=&unescape(pop(@pagepath)); |
$env{'form.pagename'}=&unescape(pop(@pagepath)); |
$env{'form.folder'}=pop(@pagepath); |
$env{'form.folder'}=pop(@pagepath); |
|
$container='page'; |
$containertag = '<input type="hidden" name="pagepath" value="" />'. |
$containertag = '<input type="hidden" name="pagepath" value="" />'. |
'<input type="hidden" name="pagesymb" value="" />'; |
'<input type="hidden" name="pagesymb" value="" />'; |
$uploadtag = |
$uploadtag = |
Line 2961 sub handler {
|
Line 2294 sub handler {
|
$iconpath = &Apache::loncommon::lonhttpdurl($r->dir_config('lonIconsURL') . "/"); |
$iconpath = &Apache::loncommon::lonhttpdurl($r->dir_config('lonIconsURL') . "/"); |
|
|
if ($allowed) { |
if ($allowed) { |
$script .= &editing_js($udom,$uname). |
my @tabids; |
&resize_contentdiv_js(); |
if ($supplementalflag) { |
|
@tabids = ('002','ee2','ff2'); |
|
} else { |
|
@tabids = ('aa1','bb1','cc1','ff1'); |
|
unless ($env{'form.pagepath'}) { |
|
unshift(@tabids,'001'); |
|
push(@tabids,('dd1','ee1')); |
|
} |
|
} |
|
my $tabidstr = join("','",@tabids); |
|
$script .= &editing_js($udom,$uname,$supplementalflag). |
|
&resize_contentdiv_js($tabidstr); |
$addentries = { |
$addentries = { |
onload => "javascript:resize_contentdiv('contentscroll');", |
onload => "javascript:resize_contentdiv('contentscroll','1','1');", |
onresize => "javascript:resize_contentdiv('contentscroll');", |
|
}; |
}; |
} |
} |
# -------------------------------------------------------------------- Body tag |
# -------------------------------------------------------------------- Body tag |
Line 3036 sub handler {
|
Line 2379 sub handler {
|
$docuname,$docudom,undef, |
$docuname,$docudom,undef, |
$dir_root). |
$dir_root). |
&return_to_editor()); |
&return_to_editor()); |
|
} elsif ($env{'form.phase'} eq 'decompress_uploaded') { |
|
$uploadphase = 'decompress_phase_one'; |
|
$r->print(&decompression_phase_one(). |
|
&return_to_editor()); |
|
} elsif ($env{'form.phase'} eq 'decompress_cleanup') { |
|
$uploadphase = 'decompress_phase_two'; |
|
$r->print(&decompression_phase_two(). |
|
&return_to_editor()); |
} |
} |
} |
} |
|
|
Line 3093 FIUP
|
Line 2444 FIUP
|
</label> |
</label> |
CHBO |
CHBO |
|
|
my $fileuploada = "<input type='submit' value='".$lt{'upld'}."' /> $help{'Uploading_From_Harddrive'}"; |
my $fileuploada = "<br clear='all' /><input type='submit' value='".$lt{'upld'}."' /> $help{'Uploading_From_Harddrive'}"; |
my $fileuploadform=(<<FUFORM); |
my $fileuploadform=(<<FUFORM); |
<form name="uploaddocument" action="/adm/coursedocs" method="post" enctype="multipart/form-data"> |
<form name="uploaddocument" action="/adm/coursedocs" method="post" enctype="multipart/form-data"> |
<input type="hidden" name="active" value="aa" /> |
<input type="hidden" name="active" value="aa" /> |
$fileupload |
$fileupload |
<br /> |
<br /> |
$lt{'title'}:<br /> |
$lt{'title'}:<br /> |
<input type="text" size="80" name="comment" /> |
<input type="text" size="60" name="comment" /> |
$uploadtag |
$uploadtag |
<input type="hidden" name="cmd" value="upload_default" /> |
<input type="hidden" name="cmd" value="upload_default" /> |
<br /> |
<br /> |
<span class="LC_nobreak"> |
<span class="LC_nobreak" style="float:left"> |
$checkbox |
$checkbox |
</span> |
</span> |
FUFORM |
FUFORM |
$fileuploadform .= &create_form_ul(&Apache::lonhtmlcommon::htmltag('li',$fileuploada,{class => 'LC_menubuttons_inline_text'})).'</form>'; |
$fileuploadform .= $fileuploada.'</form>'; |
|
|
my $simpleeditdefaultform=(<<SEDFFORM); |
my $simpleeditdefaultform=(<<SEDFFORM); |
<form action="/adm/coursedocs" method="post" name="simpleeditdefault"> |
<form action="/adm/coursedocs" method="post" name="simpleeditdefault"> |
Line 3121 SEDFFORM
|
Line 2472 SEDFFORM
|
); |
); |
$simpleeditdefaultform .= &create_form_ul(&create_list_elements(@simpleeditdefaultforma)); |
$simpleeditdefaultform .= &create_form_ul(&create_list_elements(@simpleeditdefaultforma)); |
$simpleeditdefaultform .=(<<SEDFFORM); |
$simpleeditdefaultform .=(<<SEDFFORM); |
<hr /> |
<hr id="bb_hrule" style="width:0px;text-align:left;margin-left:0" /> |
$lt{'copm'}<br /> |
$lt{'copm'}<br /> |
<input type="text" size="40" name="importmap" /><br /> |
<input type="text" size="40" name="importmap" /><br /> |
<span class="LC_nobreak"><input type="button" |
<span class="LC_nobreak" style="float:left"><input type="button" |
onclick="javascript:openbrowser('simpleeditdefault','importmap','sequence,page','')" |
onclick="javascript:openbrowser('simpleeditdefault','importmap','sequence,page','')" |
value="$lt{'selm'}" /> <input type="submit" name="loadmap" value="$lt{'load'}" /> |
value="$lt{'selm'}" /> <input type="submit" name="loadmap" value="$lt{'load'}" /> |
$help{'Load_Map'}</span> |
$help{'Load_Map'}</span> |
Line 3165 HIDDENFORM
|
Line 2516 HIDDENFORM
|
} |
} |
|
|
# Generate the tabs |
# Generate the tabs |
&startContentScreen($r,($supplementalflag?'supdocs':'docs')); |
my $mode; |
|
if (($supplementalflag) && (!$allowed)) { |
|
&Apache::lonnavdisplay::startContentScreen($r,'supplemental'); |
|
} else { |
|
&startContentScreen($r,($supplementalflag?'suppdocs':'docs')); |
|
} |
|
|
# |
# |
|
|
Line 3374 NGFFORM
|
Line 2729 NGFFORM
|
my @importdoc = ( |
my @importdoc = ( |
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/extres.png" alt="'.$lt{extr}.'" onclick="javascript:makenewext(\'newext\');" />'=>$extresourcesform}, |
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/extres.png" alt="'.$lt{extr}.'" onclick="javascript:makenewext(\'newext\');" />'=>$extresourcesform}, |
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/ims.png" alt="'.$lt{imsf}.'" onclick="javascript:makeims();" />'=>$imspform},); |
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/ims.png" alt="'.$lt{imsf}.'" onclick="javascript:makeims();" />'=>$imspform},); |
$fileuploadform = &create_form_ul(&create_list_elements(@importdoc)) . '<hr/>' . $fileuploadform; |
$fileuploadform = &create_form_ul(&create_list_elements(@importdoc)) . '<hr id="cc_hrule" style="width:0px;text-align:left;margin-left:0" />' . $fileuploadform; |
|
|
@gradingforma=( |
@gradingforma=( |
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/simpprob.png" alt="'.$lt{sipr}.'" onclick="javascript:makesmpproblem();" />'=>$newsmpproblemform}, |
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/simpprob.png" alt="'.$lt{sipr}.'" onclick="javascript:makesmpproblem();" />'=>$newsmpproblemform}, |
Line 3415 unless ($env{'form.pagepath'}) {
|
Line 2770 unless ($env{'form.pagepath'}) {
|
|
|
$hadchanges=0; |
$hadchanges=0; |
unless ($supplementalflag) { |
unless ($supplementalflag) { |
my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype); |
my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype, |
|
$supplementalflag,\%orderhash,$iconpath); |
if ($error) { |
if ($error) { |
$r->print('<p><span class="LC_error">'.$error.'</span></p>'); |
$r->print('<p><span class="LC_error">'.$error.'</span></p>'); |
} |
} |
Line 3424 unless ($env{'form.pagepath'}) {
|
Line 2780 unless ($env{'form.pagepath'}) {
|
} |
} |
|
|
&changewarning($r,''); |
&changewarning($r,''); |
$r->print(&generate_edit_table('1',\%orderhash)); |
|
} |
} |
|
} |
} |
|
|
|
# Supplemental documents start here |
# Supplemental documents start here |
|
|
Line 3521 my @supimportdoc = (
|
Line 2875 my @supimportdoc = (
|
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/extres.png" alt="'.$lt{extr}.'" onclick="javascript:makenewext(\'supnewext\');" />' |
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/extres.png" alt="'.$lt{extr}.'" onclick="javascript:makenewext(\'supnewext\');" />' |
=>$supnewextform}, |
=>$supnewextform}, |
); |
); |
$supupdocform = &create_form_ul(&create_list_elements(@supimportdoc)) . '<hr/>' . $supupdocform; |
$supupdocform = &create_form_ul(&create_list_elements(@supimportdoc)) . '<hr id="ee_hrule" style="width:0px;text-align:left;margin-left:0" />' . $supupdocform; |
my %suporderhash = ( |
my %suporderhash = ( |
'00' => ['Supnewfolder', $supnewfolderform], |
'00' => ['Supnewfolder', $supnewfolderform], |
'ee' => ['Import Documents',$supupdocform], |
'ee' => ['Import Documents',$supupdocform], |
'ff' => ['Special Documents',&create_form_ul(&create_list_elements(@specialdocs))] |
'ff' => ['Special Documents',&create_form_ul(&create_list_elements(@specialdocs))] |
); |
); |
if ($supplementalflag) { |
if ($supplementalflag) { |
my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype); |
my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype, |
|
$supplementalflag,\%suporderhash,$iconpath); |
if ($error) { |
if ($error) { |
$r->print('<p><span class="LC_error">'.$error.'</span></p>'); |
$r->print('<p><span class="LC_error">'.$error.'</span></p>'); |
} |
} |
$r->print(&generate_edit_table('2',\%suporderhash)); |
|
} |
} |
} elsif ($supplementalflag) { |
} elsif ($supplementalflag) { |
my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype); |
my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,'',$crstype, |
|
$supplementalflag,'',$iconpath); |
if ($error) { |
if ($error) { |
$r->print('<p><span class="LC_error">'.$error.'</span></p>'); |
$r->print('<p><span class="LC_error">'.$error.'</span></p>'); |
} |
} |
Line 3602 sub return_to_editor {
|
Line 2957 sub return_to_editor {
|
'</a></p>'; |
'</a></p>'; |
} |
} |
|
|
|
sub decompression_info { |
|
my ($destination,$dir_root) = &embedded_destination(); |
|
my $londocroot = $Apache::lonnet::perlvar{'lonDocRoot'}; |
|
my $docudom=$env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
my $docuname=$env{'course.'.$env{'request.course.id'}.'.num'}; |
|
my $container='sequence'; |
|
my $hiddenelem; |
|
if ($env{'form.pagepath'}) { |
|
$container='page'; |
|
$hiddenelem = '<input type="hidden" name="pagepath" value="'.$env{'form.pagepath'}.'" />'."\n"; |
|
} else { |
|
$hiddenelem = '<input type="hidden" name="folderpath" value="'.$env{'form.folderpath'}.'" />'."\n"; |
|
} |
|
if ($env{'form.newidx'}) { |
|
$hiddenelem .= '<input type="hidden" name="newidx" value="'.$env{'form.newidx'}.'" />'."\n"; |
|
} |
|
if ($env{'form.comment'}) { |
|
$hiddenelem .= '<input type="hidden" name="comment" value="'.$env{'form.comment'}.'" />'."\n"; |
|
} |
|
return ($destination,$dir_root,$londocroot,$docudom,$docuname,$container, |
|
$hiddenelem); |
|
} |
|
|
|
sub decompression_phase_one { |
|
my ($dir,$file,$warning,$error,$output); |
|
my ($destination,$dir_root,$londocroot,$docudom,$docuname,$container,$hiddenelem)= |
|
&decompression_info(); |
|
if ($env{'form.archiveurl'} !~ m{^/uploaded/\Q$docudom/$docuname/docs/\E(?:default|supplemental|\d+).*/([^/]+)$}) { |
|
$error = &mt('Archive file "[_1]" not in the expected location.',$env{'form.archiveurl'}); |
|
} else { |
|
my $file = $1; |
|
$output = &Apache::loncommon::process_decompression($docudom,$docuname,$file,$destination,$dir_root,$hiddenelem); |
|
if ($env{'form.archivedelete'}) { |
|
my $map = $env{'form.folder'}.'.'.$container; |
|
my ($delwarning,$delresult); |
|
my ($errtext,$fatal) = &mapread($docuname,$docudom,$map); |
|
if ($fatal) { |
|
if ($container eq 'page') { |
|
$delwarning = &mt('An error occurred retrieving the contents of the current page.'); |
|
} else { |
|
$delwarning = &mt('An error occurred retrieving the contents of the current folder.'); |
|
} |
|
$delwarning .= &mt('As a result the archive file has not been removed.'); |
|
} else { |
|
my $currcmd = $env{'form.cmd'}; |
|
$env{'form.cmd'} = 'del_'.$env{'form.position'}; |
|
if (&handle_edit_cmd($docuname,$docudom)) { |
|
($errtext,$fatal) = &storemap($docuname,$docudom,$map); |
|
if ($fatal) { |
|
if ($container eq 'page') { |
|
$delwarning = &mt('An error occurred updating the contents of the current page.'); |
|
} else { |
|
$delwarning = &mt('An error occurred updating the contents of the current folder.'); |
|
} |
|
} |
|
} |
|
$env{'form.cmd'} = $currcmd; |
|
$delresult = &mt('Archive file removed after extracting files.'); |
|
} |
|
if ($delwarning) { |
|
$output .= '<p class="LC_warning">'. |
|
$delwarning. |
|
'</p>'; |
|
} |
|
if ($delresult) { |
|
$output .= '<p class="LC_info">'. |
|
$delresult. |
|
'</p>'; |
|
} |
|
} |
|
} |
|
if ($error) { |
|
$output .= '<p class="LC_error">'.&mt('Not extracted.').'<br />'. |
|
$error.'</p>'."\n"; |
|
} |
|
if ($warning) { |
|
$output .= '<p class="LC_warning">'.$warning.'</p>'."\n"; |
|
} |
|
return $output; |
|
} |
|
|
|
sub decompression_phase_two { |
|
my ($destination,$dir_root,$londocroot,$docudom,$docuname,$container,$hiddenelem)= |
|
&decompression_info(); |
|
my $output = |
|
&Apache::loncommon::process_extracted_files('coursedocs',$docudom,$docuname, |
|
$destination,$dir_root,$hiddenelem); |
|
return $output; |
|
} |
|
|
sub generate_admin_options { |
sub generate_admin_options { |
my ($help_ref,$env_ref) = @_; |
my ($help_ref,$env_ref) = @_; |
my %lt=&Apache::lonlocal::texthash( |
my %lt=&Apache::lonlocal::texthash( |
Line 3638 sub generate_admin_options {
|
Line 3083 sub generate_admin_options {
|
|
|
|
|
sub generate_edit_table { |
sub generate_edit_table { |
my ($tid,$orderhash_ref) = @_; |
my ($tid,$orderhash_ref,$to_show,$iconpath,$jumpto) = @_; |
return unless(ref($orderhash_ref) eq 'HASH'); |
return unless(ref($orderhash_ref) eq 'HASH'); |
my %orderhash = %{$orderhash_ref}; |
my %orderhash = %{$orderhash_ref}; |
my $form; |
my $form; |
Line 3647 sub generate_edit_table {
|
Line 3092 sub generate_edit_table {
|
if($env{'form.active'} ne ''){ |
if($env{'form.active'} ne ''){ |
$activetab = $env{'form.active'}; |
$activetab = $env{'form.active'}; |
} |
} |
$form = '<div class="LC_Box" style="margin-right:0">'; |
my $backicon = $iconpath.'clickhere.gif'; |
$form .= '<ul id="navigation'.$tid.'" class="LC_TabContent">'; |
my $backtext = &mt('Back to Overview'); |
foreach my $name (sort(keys(%orderhash))){ |
$form = '<div class="LC_Box" style="margin:0;">'. |
|
'<ul id="navigation'.$tid.'" class="LC_TabContent">'. |
|
'<li class="goback">'. |
|
'<a href="javascript:toContents('."'$jumpto'".');">'. |
|
'<img src="'.$backicon.'" class="LC_icon" style="border: none; vertical-align: top;"'. |
|
' alt="'.$backtext.'" />'.$backtext.'</a></li>'; |
|
foreach my $name (reverse(sort(keys(%orderhash)))) { |
if($name ne '00'){ |
if($name ne '00'){ |
if($activetab eq '' || $activetab ne $name){ |
if($activetab eq '' || $activetab ne $name){ |
$active = ''; |
$active = ''; |
}elsif($activetab eq $name){ |
}elsif($activetab eq $name){ |
$active = 'class="active"'; |
$active = 'class="active"'; |
} |
} |
$form .= '<li '.$active |
$form .= '<li style="float:right" '.$active |
.' onmouseover="javascript:showPage(this, \''.$name.$tid.'\', \'navigation'.$tid.'\',\'content'.$tid.'\');"' |
.' onmouseover="javascript:showPage(this, \''.$name.$tid.'\', \'navigation'.$tid.'\',\'content'.$tid.'\');"' |
.' onclick="javascript:showPage(this, \''.$name.$tid.'\', \'navigation'.$tid.'\',\'content'.$tid.'\');"><a href="javascript:;"><b>'.&mt(${$orderhash{$name}}[0]).'</b></a></li>'; |
.' onclick="javascript:showPage(this, \''.$name.$tid.'\', \'navigation'.$tid.'\',\'content'.$tid.'\');"><a href="javascript:;"><b>'.&mt(${$orderhash{$name}}[0]).'</b></a></li>'; |
} else { |
} else { |
$form .= '<li '.$active.'>'.${$orderhash{$name}}[1].'</li>'; |
$form .= '<li '.$active.' style="float:right">'.${$orderhash{$name}}[1].'</li>'; |
|
|
} |
} |
} |
} |
$form .= '</ul>'; |
$form .= '</ul>'; |
$form .= '<div id="content'.$tid.'" style="padding: 0 0; margin: 0 0; clear: both;">'; |
$form .= '<div id="content'.$tid.'" style="padding: 0 0; margin: 0 0; overflow: hidden; clear:right">'; |
|
|
|
if ($to_show ne '') { |
|
$form .= '<div style="padding:0;margin:0;float:left">'.$to_show.'</div>'; |
|
} |
foreach my $field (keys(%orderhash)){ |
foreach my $field (keys(%orderhash)){ |
if($field ne '00'){ |
if($field ne '00'){ |
if($activetab eq '' || $activetab ne $field){ |
if($activetab eq '' || $activetab ne $field){ |
$active = 'style="display: none;"'; |
$active = 'style="display: none;float:left"'; |
}elsif($activetab eq $field){ |
}elsif($activetab eq $field){ |
$active = 'style="display:block;"'; |
$active = 'style="display:block;float:left"'; |
} |
} |
$form .= '<div id="'.$field.$tid.'"' |
$form .= '<div id="'.$field.$tid.'"' |
.' class="LC_ContentBox" '.$active.'>'.${$orderhash{$field}}[1] |
.' class="LC_ContentBox" '.$active.'>'.${$orderhash{$field}}[1] |
Line 3684 sub generate_edit_table {
|
Line 3139 sub generate_edit_table {
|
} |
} |
|
|
sub editing_js { |
sub editing_js { |
my ($udom,$uname) = @_; |
my ($udom,$uname,$supplementalflag) = @_; |
my $now = time(); |
my $now = time(); |
my %lt = &Apache::lonlocal::texthash( |
my %lt = &Apache::lonlocal::texthash( |
p_mnf => 'Name of New Folder', |
p_mnf => 'Name of New Folder', |
Line 3722 sub editing_js {
|
Line 3177 sub editing_js {
|
my $toplevelmain = 'default&Main%20'.$crstype.'%20Documents'; |
my $toplevelmain = 'default&Main%20'.$crstype.'%20Documents'; |
my $toplevelsupp = &supplemental_base(); |
my $toplevelsupp = &supplemental_base(); |
|
|
|
my $backtourl = '/adm/navmaps'; |
|
if ($supplementalflag) { |
|
$backtourl = '/adm/supplemental'; |
|
} |
|
|
return <<ENDNEWSCRIPT; |
return <<ENDNEWSCRIPT; |
function makenewfolder(targetform,folderseq) { |
function makenewfolder(targetform,folderseq) { |
var foldername=prompt('$lt{"p_mnf"}','$lt{"t_mnf"}'); |
var foldername=prompt('$lt{"p_mnf"}','$lt{"t_mnf"}'); |
Line 3900 function unselectInactive(nav) {
|
Line 3360 function unselectInactive(nav) {
|
currentNav = document.getElementById(nav); |
currentNav = document.getElementById(nav); |
currentLis = currentNav.getElementsByTagName('LI'); |
currentLis = currentNav.getElementsByTagName('LI'); |
for (i = 0; i < currentLis.length; i++) { |
for (i = 0; i < currentLis.length; i++) { |
if(currentLis[i].className == 'right active' || currentLis[i].className == 'right'){ |
if (currentLis[i].className == 'goback') { |
|
currentLis[i].className = 'goback'; |
|
} else { |
|
if (currentLis[i].className == 'right active' || currentLis[i].className == 'right') { |
currentLis[i].className = 'right'; |
currentLis[i].className = 'right'; |
}else{ |
} else { |
currentLis[i].className = 'i'; |
currentLis[i].className = 'i'; |
} |
} |
|
} |
} |
} |
} |
} |
|
|
Line 3950 function showPage(current, pageId, nav,
|
Line 3414 function showPage(current, pageId, nav,
|
current.className = 'active'; |
current.className = 'active'; |
currentData = document.getElementById(pageId); |
currentData = document.getElementById(pageId); |
currentData.style.display = 'block'; |
currentData.style.display = 'block'; |
resize_contentdiv('contentscroll'); |
activeTab = pageId; |
if (nav == 'mainnav') { |
if (nav == 'mainnav') { |
var storedpath = "$docs_folderpath"; |
var storedpath = "$docs_folderpath"; |
if (storedpath == '') { |
if (storedpath == '') { |
Line 3985 function showPage(current, pageId, nav,
|
Line 3449 function showPage(current, pageId, nav,
|
} |
} |
} |
} |
} |
} |
|
resize_contentdiv('contentscroll','1','0'); |
return false; |
return false; |
} |
} |
|
|
Line 3995 function injectData(current, hiddenField
|
Line 3460 function injectData(current, hiddenField
|
current.submit(); |
current.submit(); |
} |
} |
|
|
|
function toContents(jumpto) { |
|
var newurl = '$backtourl'; |
|
if (jumpto != '') { |
|
newurl = newurl+'?postdata='+jumpto; |
|
; |
|
} |
|
location.href=newurl; |
|
} |
|
|
ENDNEWSCRIPT |
ENDNEWSCRIPT |
} |
} |
|
|
sub resize_contentdiv_js { |
sub resize_contentdiv_js { |
|
my ($tabidstr) = @_; |
my $viewport_js = &Apache::loncommon::viewport_geometry_js(); |
my $viewport_js = &Apache::loncommon::viewport_geometry_js(); |
return <<ENDRESIZESCRIPT; |
return <<ENDRESIZESCRIPT; |
|
|
|
window.onresize=resizeContentEditor; |
|
|
|
var activeTab; |
|
|
$viewport_js |
$viewport_js |
|
|
function resize_contentdiv(scrollboxid) { |
function resize_contentdiv(scrollboxname,chkw,chkh) { |
|
var scrollboxid = 'div_'+scrollboxname; |
|
var scrolltableid = 'table_'+scrollboxname; |
|
var scrollbox; |
|
var scrolltable; |
|
|
if (document.getElementById("contenteditor") == null) { |
if (document.getElementById("contenteditor") == null) { |
return; |
return; |
} |
} |
|
|
|
if (document.getElementById(scrollboxid) == null) { |
|
return; |
|
} else { |
|
scrollbox = document.getElementById(scrollboxid); |
|
} |
|
|
|
if (document.getElementById(scrolltableid) == null) { |
|
return; |
|
} else { |
|
scrolltable = document.getElementById(scrolltableid); |
|
} |
|
|
init_geometry(); |
init_geometry(); |
var vph = Geometry.getViewportHeight(); |
var vph = Geometry.getViewportHeight(); |
|
var vpw = Geometry.getViewportWidth(); |
|
|
|
var alltabs = ['$tabidstr']; |
|
var listwchange; |
|
if (chkw == 1) { |
|
var contenteditorw = document.getElementById("contenteditor").offsetWidth; |
|
var contentlistw; |
|
var contentlistid = document.getElementById("contentlist"); |
|
if (contentlistid != null) { |
|
contentlistw = document.getElementById("contentlist").offsetWidth; |
|
} |
|
var contentlistwstart = contentlistw; |
|
|
|
var scrollboxw = scrollbox.offsetWidth; |
|
var scrollboxscrollw = scrollbox.scrollWidth; |
|
|
|
var offsetw = parseInt(vpw * 0.015); |
|
var paddingw = parseInt(vpw * 0.09); |
|
|
|
var minscrollboxw = 250; |
|
|
|
var maxtabw = 0; |
|
var actabw = 0; |
|
for (var i=0; i<alltabs.length; i++) { |
|
if (activeTab == alltabs[i]) { |
|
actabw = document.getElementById(alltabs[i]).offsetWidth; |
|
if (actabw > maxtabw) { |
|
maxtabw = actabw; |
|
} |
|
} else { |
|
if (document.getElementById(alltabs[i]) != null) { |
|
var thistab = document.getElementById(alltabs[i]); |
|
thistab.style.visibility = 'hidden'; |
|
thistab.style.display = 'block'; |
|
var tabw = document.getElementById(alltabs[i]).offsetWidth; |
|
thistab.style.display = 'none'; |
|
thistab.style.visibility = ''; |
|
if (tabw > maxtabw) { |
|
maxtabw = tabw; |
|
} |
|
} |
|
} |
|
} |
|
|
var primaryheight = document.getElementById("LC_nav_bar").offsetHeight; |
if (maxtabw > 0) { |
var secondaryheight = document.getElementById("LC_secondary_menu").offsetHeight; |
var newscrollboxw; |
var crumbsheight = document.getElementById("LC_breadcrumbs").offsetHeight; |
if (maxtabw+paddingw+scrollboxscrollw<contenteditorw) { |
var dccidheight = document.getElementById("dccid").offsetHeight; |
newscrollboxw = contenteditorw-paddingw-maxtabw; |
|
if (newscrollboxw < minscrollboxw) { |
var uploadresultheight = 0; |
newscrollboxw = minscrollboxw; |
if (document.getElementById("uploadfileresult") != null) { |
} |
uploadresultheight = document.getElementById("uploadfileresult").offsetHeight; |
scrollbox.style.width = newscrollboxw+"px"; |
} |
if (newscrollboxw != scrollboxw) { |
var tabbedheight = document.getElementById("tabbededitor").offsetHeight; |
var newcontentlistw = newscrollboxw-offsetw; |
var contenteditorheight = document.getElementById("contenteditor").offsetHeight; |
contentlistid.style.width = newcontentlistw+"px"; |
if (document.getElementById(scrollboxid) != null) { |
} |
var scrollbox = document.getElementById(scrollboxid); |
} else { |
|
newscrollboxw = contenteditorw-paddingw-maxtabw; |
|
if (newscrollboxw < minscrollboxw) { |
|
newscrollboxw = minscrollboxw; |
|
} |
|
scrollbox.style.width = newscrollboxw+"px"; |
|
if (newscrollboxw != scrollboxw) { |
|
var newcontentlistw = newscrollboxw-offsetw; |
|
contentlistid.style.width = newcontentlistw+"px"; |
|
} |
|
} |
|
|
|
if (newscrollboxw != scrollboxw) { |
|
var newscrolltablew = newscrollboxw+offsetw; |
|
scrolltable.style.width = newscrolltablew+"px"; |
|
} |
|
} |
|
|
|
if (contentlistid.offsetWidth != contentlistwstart) { |
|
listwchange = 1; |
|
} |
|
|
|
if (activeTab == 'cc1') { |
|
if (document.getElementById('cc_hrule') != null) { |
|
document.getElementById('cc_hrule').style.width=actabw+"px"; |
|
} |
|
} else { |
|
if (activeTab == 'bb1') { |
|
if (document.getElementById('bb_hrule') != null) { |
|
document.getElementById('bb_hrule').style.width=actabw+"px"; |
|
} |
|
} else { |
|
if (activeTab == 'ee2') { |
|
if (document.getElementById('ee_hrule') != null) { |
|
document.getElementById('ee_hrule').style.width=actabw+"px"; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
if ((chkh == 1) || (listwchange)) { |
|
var primaryheight = document.getElementById("LC_nav_bar").offsetHeight; |
|
var secondaryheight = document.getElementById("LC_secondary_menu").offsetHeight; |
|
var crumbsheight = document.getElementById("LC_breadcrumbs").offsetHeight; |
|
var dccidheight = document.getElementById("dccid").offsetHeight; |
|
|
|
var uploadresultheight = 0; |
|
if (document.getElementById("uploadfileresult") != null) { |
|
uploadresultheight = document.getElementById("uploadfileresult").offsetHeight; |
|
} |
|
var tabbedheight = document.getElementById("tabbededitor").offsetHeight; |
|
var contenteditorheight = document.getElementById("contenteditor").offsetHeight; |
var scrollboxheight = scrollbox.offsetHeight; |
var scrollboxheight = scrollbox.offsetHeight; |
var scrollboxscrollheight = scrollbox.scrollHeight; |
var scrollboxscrollheight = scrollbox.scrollHeight; |
|
var freevspace = vph-(primaryheight+secondaryheight+crumbsheight+dccidheight+uploadresultheight+tabbedheight+contenteditorheight); |
|
|
var freespace = vph-(primaryheight+secondaryheight+crumbsheight+dccidheight+uploadresultheight+tabbedheight+contenteditorheight); |
var minvscrollbox = 200; |
|
var offsetv = 20; |
var minscrollbox = 60; |
|
var offset = 20; |
|
var newscrollboxheight; |
var newscrollboxheight; |
if (freespace < 0) { |
if (freevspace < 0) { |
newscrollboxheight = scrollboxheight+freespace-offset; |
newscrollboxheight = scrollboxheight+freevspace-offsetv; |
if (newscrollboxheight < minscrollbox) { |
if (newscrollboxheight < minvscrollbox) { |
newscrollboxheight = minscrollbox; |
newscrollboxheight = minvscrollbox; |
} |
} |
scrollbox.style.height = newscrollboxheight + "px"; |
scrollbox.style.height = newscrollboxheight + "px"; |
} else { |
} else { |
if (scrollboxscrollheight > scrollboxheight) { |
if (scrollboxscrollheight > scrollboxheight) { |
if (freespace > offset) { |
if (freevspace > offsetv) { |
newscrollboxheight = scrollboxheight+freespace-offset; |
newscrollboxheight = scrollboxheight+freevspace-offsetv; |
if (newscrollboxheight < minscrollbox) { |
if (newscrollboxheight < minvscrollbox) { |
newscrollboxheight = minscrollbox; |
newscrollboxheight = minvscrollbox; |
} |
} |
scrollbox.style.height = newscrollboxheight+"px"; |
scrollbox.style.height = newscrollboxheight+"px"; |
} |
} |
} |
} |
} |
} |
scrollboxheight = scrollbox.offsetHeight; |
scrollboxheight = scrollbox.offsetHeight; |
|
var contentlistheight = document.getElementById("contentlist").offsetHeight; |
|
|
if (scrollboxscrollheight <= scrollboxheight) { |
if (scrollboxscrollheight <= scrollboxheight) { |
var contentlistheight = document.getElementById("contentlist").offsetHeight; |
if ((contentlistheight+offsetv)<scrollboxheight) { |
if ((contentlistheight+offset)<scrollboxheight) { |
newscrollheight = contentlistheight+offsetv; |
newscrollheight = contentlistheight; |
|
scrollbox.style.height = newscrollheight+"px"; |
scrollbox.style.height = newscrollheight+"px"; |
} |
} |
} |
} |
} |
} |
|
return; |
|
} |
|
|
|
function resizeContentEditor() { |
|
var timer; |
|
clearTimeout(timer) |
|
timer=setTimeout('resize_contentdiv("contentscroll","1","1")',500); |
} |
} |
|
|
ENDRESIZESCRIPT |
ENDRESIZESCRIPT |
Line 4112 Generate "dump" button
|
Line 3709 Generate "dump" button
|
|
|
Generate "export" button |
Generate "export" button |
|
|
=item exportcourse() |
|
|
|
=item create_ims_store() |
|
|
|
=item build_package() |
|
|
|
=item get_dependencies() |
|
|
|
=item process_content() |
|
|
|
=item replicate_content() |
|
|
|
=item extract_media() |
|
|
|
=item store_template() |
|
|
|
=item group_import() |
=item group_import() |
|
|
Imports the given (name, url) resources into the course |
Imports the given (name, url) resources into the course |