version 1.447, 2010/12/11 14:28:12
|
version 1.482, 2012/04/16 19:31:57
|
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 $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 @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 $ims_manifest = &create_ims_store($now,\$manifestok,\$outcome,\$tempexport); |
|
if ($manifestok) { |
|
&build_package($now,$navmap,\@exportitems,\@discussions,\$outcome,$tempexport,\$copyresult,$ims_manifest); |
|
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'".')"'; |
|
} |
|
$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')); |
|
$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) = @_; |
|
$$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>' |
|
} 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) = @_; |
|
# 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; |
|
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; |
|
|
|
unless ($curRes->is_sequence()) { |
|
my $content_file; |
|
my @hrefs = (); |
|
&process_content($count,$curRes,$cdom,$cnum,$symb,\$content_file,\@hrefs,$copyresult,$tempexport); |
|
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) = @_; |
|
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 ($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) = @_; |
|
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') { |
|
# Need to render the resource without the LON-CAPA Internal header and the Post discussion footer, and then set $content equal to this. |
|
$repstatus = 'ok'; |
|
$content = 'Not the owner of this resource'; |
|
} |
|
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 1022 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 1062 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 1150 sub docs_change_log {
|
Line 454 sub docs_change_log {
|
&Apache::loncommon::restore_course_settings('docs_log', |
&Apache::loncommon::restore_course_settings('docs_log', |
\%saveable_parameters); |
\%saveable_parameters); |
if (!$env{'form.show'}) { $env{'form.show'}=10; } |
if (!$env{'form.show'}) { $env{'form.show'}=10; } |
|
# FIXME: internationalization seems wrong here |
my %lt=('hiddenresource' => 'Resources hidden', |
my %lt=('hiddenresource' => 'Resources hidden', |
'encrypturl' => 'URL hidden', |
'encrypturl' => 'URL hidden', |
'randompick' => 'Randomly pick', |
'randompick' => 'Randomly pick', |
Line 1238 sub docs_change_log {
|
Line 543 sub docs_change_log {
|
$r->print(&LONCAPA::map::qtescape((split(/\:/,$docslog{$id}{'logentry'}{'parameter_res'}))[0]).':<ul>'); |
$r->print(&LONCAPA::map::qtescape((split(/\:/,$docslog{$id}{'logentry'}{'parameter_res'}))[0]).':<ul>'); |
foreach my $parameter ('randompick','hiddenresource','encrypturl','randomorder') { |
foreach my $parameter ('randompick','hiddenresource','encrypturl','randomorder') { |
if ($docslog{$id}{'logentry'}{'parameter_action_'.$parameter}) { |
if ($docslog{$id}{'logentry'}{'parameter_action_'.$parameter}) { |
|
# FIXME: internationalization seems wrong here |
$r->print('<li>'. |
$r->print('<li>'. |
&mt($lt{$parameter}.' '.$lt{$docslog{$id}{'logentry'}{'parameter_action_'.$parameter}}.' [_1]', |
&mt($lt{$parameter}.' '.$lt{$docslog{$id}{'logentry'}{'parameter_action_'.$parameter}}.' [_1]', |
$docslog{$id}{'logentry'}{'parameter_value_'.$parameter}) |
$docslog{$id}{'logentry'}{'parameter_value_'.$parameter}) |
Line 1462 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 1470 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 1506 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 1522 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 1635 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 1652 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_data_table()); |
$to_show = &Apache::loncommon::start_scrollbox('900px','880px','400px','contentscroll') |
|
.&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/) { |
$->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() |
); |
.'<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 1703 sub process_file_upload {
|
Line 1034 sub process_file_upload {
|
$LONCAPA::map::resources[1]=''; |
$LONCAPA::map::resources[1]=''; |
} |
} |
if ($fatal) { |
if ($fatal) { |
$$upload_output = '<p><span class="LC_error">'.&mt('The uploaded file has not been stored as an error occurred reading the contents of the current folder.').'</span></p>'; |
$$upload_output = '<div class="LC_error" id="uploadfileresult">'.&mt('The uploaded file has not been stored as an error occurred reading the contents of the current folder.').'</div>'; |
return; |
return; |
} |
} |
my $destination = 'docs/'; |
my $destination = 'docs/'; |
Line 1729 sub process_file_upload {
|
Line 1060 sub process_file_upload {
|
} else { |
} else { |
my ($filename) = ($env{'form.uploaddoc.filename'} =~ m{([^/]+)$}); |
my ($filename) = ($env{'form.uploaddoc.filename'} =~ m{([^/]+)$}); |
|
|
$$upload_output = '<p><span class="LC_error">'.&mt('Unable to save file [_1].','<span class="LC_filename">'.$filename.'</span>').'</span></p>'; |
$$upload_output = '<div class="LC_error" id="uploadfileresult">'.&mt('Unable to save file [_1].','<span class="LC_filename">'.$filename.'</span>').'</div>'; |
return; |
return; |
} |
} |
my $ext='false'; |
my $ext='false'; |
Line 1748 sub process_file_upload {
|
Line 1079 sub process_file_upload {
|
($errtext,$fatal)=&storemap($coursenum,$coursedom, |
($errtext,$fatal)=&storemap($coursenum,$coursedom, |
$folder.'.'.$container); |
$folder.'.'.$container); |
if ($fatal) { |
if ($fatal) { |
$$upload_output = '<p><span class="LC_error">'.$errtext.'</span></p>'; |
$$upload_output = '<div class="LC_error" id="uploadfileresult">'.$errtext.'</div>'; |
return; |
return; |
} else { |
} else { |
if ($parseaction eq 'parse' && $mimetype eq 'text/html') { |
if ($parseaction eq 'parse' && $mimetype eq 'text/html') { |
Line 1775 sub process_file_upload {
|
Line 1106 sub process_file_upload {
|
} else { |
} else { |
$$upload_output .= &mt('No embedded items identified').'<br />'; |
$$upload_output .= &mt('No embedded items identified').'<br />'; |
} |
} |
|
$$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, |
|
); |
|
my ($destination,$dir_root) = &embedded_destination($coursenum,$coursedom); |
|
my @current = &get_dir_list($url,$coursenum,$coursedom,$newidx); |
|
$$upload_output = $showupload. |
|
&Apache::loncommon::decompress_form($mimetype, |
|
$archiveurl,'/adm/coursedocs',$noextract, |
|
\%archiveitems,\@current); |
} |
} |
} |
} |
} |
} |
return $nextphase; |
return $nextphase; |
} |
} |
|
|
|
sub get_dir_list { |
|
my ($url,$coursenum,$coursedom,$newidx) = @_; |
|
my ($destination,$dir_root) = &embedded_destination(); |
|
my ($dirlistref,$listerror) = |
|
&Apache::lonnet::dirlist("$dir_root/$destination/$newidx",$coursedom,$coursenum,1); |
|
my @dir_lines; |
|
my $dirptr=16384; |
|
if (ref($dirlistref) eq 'ARRAY') { |
|
foreach my $dir_line (sort |
|
{ |
|
my ($afile)=split('&',$a,2); |
|
my ($bfile)=split('&',$b,2); |
|
return (lc($afile) cmp lc($bfile)); |
|
} (@{$dirlistref})) { |
|
my ($filename,$dom,undef,$testdir,undef,undef,undef,undef,$size,undef,$mtime,undef,undef,undef,$obs,undef)=split(/\&/,$dir_line,16); |
|
$filename =~ s/\s+$//; |
|
next if ($filename =~ /^\.\.?$/); |
|
my $isdir = 0; |
|
if ($dirptr&$testdir) { |
|
$isdir = 1; |
|
} |
|
push(@dir_lines, [$filename,$dom,$isdir,$size,$mtime,$obs]); |
|
} |
|
} |
|
return @dir_lines; |
|
} |
|
|
sub is_supplemental_title { |
sub is_supplemental_title { |
my ($title) = @_; |
my ($title) = @_; |
return scalar($title =~ m/^(\d+)___&&&___($match_username)___&&&___($match_domain)___&&&___(.*)$/); |
return scalar($title =~ m/^(\d+)___&&&___($match_username)___&&&___($match_domain)___&&&___(.*)$/); |
Line 1831 sub entryline {
|
Line 1210 sub entryline {
|
$renametitle=~s/\"\;/\\\"/g; |
$renametitle=~s/\"\;/\\\"/g; |
$renametitle=~s/ /%20/g; |
$renametitle=~s/ /%20/g; |
my $line=&Apache::loncommon::start_data_table_row(); |
my $line=&Apache::loncommon::start_data_table_row(); |
my ($form_start,$form_end); |
my ($form_start,$form_end,$form_common); |
# Edit commands |
# Edit commands |
my ($container, $type, $esc_path, $path, $symb); |
my ($container, $type, $esc_path, $path, $symb); |
if ($env{'form.folderpath'}) { |
if ($env{'form.folderpath'}) { |
Line 1851 sub entryline {
|
Line 1230 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 1923 ENDCOPY
|
Line 1301 ENDCOPY
|
<a href='javascript:cutres("$esc_path","$index","$renametitle","$container","$symb","$folder",$skip_confirm);' class="LC_docs_cut">$lt{'ct'}</a> |
<a href='javascript:cutres("$esc_path","$index","$renametitle","$container","$symb","$folder",$skip_confirm);' class="LC_docs_cut">$lt{'ct'}</a> |
ENDCUT |
ENDCUT |
} |
} |
$form_start = (<<END); |
$form_start = ' |
<form action="/adm/coursedocs" method="post"> |
<form action="/adm/coursedocs" method="post"> |
|
'; |
|
$form_common=(<<END); |
<input type="hidden" name="${type}path" value="$path" /> |
<input type="hidden" name="${type}path" value="$path" /> |
<input type="hidden" name="${type}symb" value="$symb" /> |
<input type="hidden" name="${type}symb" value="$symb" /> |
<input type="hidden" name="setparms" value="$orderidx" /> |
<input type="hidden" name="setparms" value="$orderidx" /> |
Line 1946 END
|
Line 1326 END
|
</td> |
</td> |
<td> |
<td> |
$form_start |
$form_start |
|
$form_common |
$selectbox |
$selectbox |
$form_end |
$form_end |
</td> |
</td> |
Line 1968 END
|
Line 1349 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 2024 END
|
Line 1410 END
|
$url.=(($url=~/\?/)?'&':'?').'symb='.&escape($symb); |
$url.=(($url=~/\?/)?'&':'?').'symb='.&escape($symb); |
} |
} |
} |
} |
my ($parameterset,$rand_order_text) = (' ', ' '); |
my ($rand_pick_text,$rand_order_text); |
if ($isfolder || $extension eq 'sequence') { |
if ($isfolder || $extension eq 'sequence') { |
my $foldername=&escape($foldertitle); |
my $foldername=&escape($foldertitle); |
my $folderpath=$env{'form.folderpath'}; |
my $folderpath=$env{'form.folderpath'}; |
Line 2040 END
|
Line 1426 END
|
.':'.((&LONCAPA::map::getparameter($orderidx, |
.':'.((&LONCAPA::map::getparameter($orderidx, |
'parameter_randomorder'))[0]=~/^yes$/i); |
'parameter_randomorder'))[0]=~/^yes$/i); |
$url.='folderpath='.&escape($folderpath).$cpinfo; |
$url.='folderpath='.&escape($folderpath).$cpinfo; |
$parameterset='<label>'.&mt('Randomly Pick: '). |
my $rpicknum = (&LONCAPA::map::getparameter($orderidx, |
'<input type="text" size="4" onchange="this.form.changeparms.value='."'randompick'".';this.form.submit()" name="randompick_'.$orderidx.'" value="'. |
'parameter_randompick'))[0]; |
(&LONCAPA::map::getparameter($orderidx, |
my $rpckchk; |
'parameter_randompick'))[0]. |
if ($rpicknum) { |
'" />'. |
$rpckchk = ' checked="checked"'; |
'<a href="javascript:void(0)">'.&mt('Save').'</a></label>'; |
} |
|
my $formname = 'edit_rpick_'.$orderidx; |
|
$rand_pick_text = |
|
'<form action="/adm/coursedocs" method="post" name="'.$formname.'">'."\n". |
|
$form_common."\n". |
|
'<span class="LC_nobreak"><label><input type="checkbox" name="randpickon_'.$orderidx.'" id="rpick_'.$orderidx.'" onclick="'."updatePick(this.form,'$orderidx','check');".'"'.$rpckchk.' /> '.&mt('Randomly Pick').'</label><input type="hidden" name="randompick_'.$orderidx.'" id="rpicknum_'.$orderidx.'" value="'.$rpicknum.'" />'; |
|
if ($rpicknum ne '') { |
|
$rand_pick_text .= ': <a href="javascript:updatePick('."document.$formname,'$orderidx','link'".')">'.$rpicknum.'</a>'; |
|
} |
|
$rand_pick_text .= '</span></form>'; |
my $ro_set= |
my $ro_set= |
((&LONCAPA::map::getparameter($orderidx,'parameter_randomorder'))[0]=~/^yes$/i?' checked="checked"':''); |
((&LONCAPA::map::getparameter($orderidx,'parameter_randomorder'))[0]=~/^yes$/i?' checked="checked"':''); |
$rand_order_text =' |
$rand_order_text = |
<span class="LC_nobreak"><label><input type="checkbox" name="randomorder_'.$orderidx.'" onclick="this.form.changeparms.value=\'randomorder\';this.form.submit()" '.$ro_set.' /> '.&mt('Random Order').' </label></span>'; |
$form_start. |
|
$form_common.' |
|
<span class="LC_nobreak"><label><input type="checkbox" name="randomorder_'.$orderidx.'" onclick="'."this.form.changeparms.value='randomorder';this.form.submit()".'" '.$ro_set.' /> '.&mt('Random Order').' </label></span></form>'; |
} |
} |
if ($ispage) { |
if ($ispage) { |
my $pagename=&escape($pagetitle); |
my $pagename=&escape($pagetitle); |
Line 2081 END
|
Line 1478 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>"; |
|
$rand_pick_text = ' ' if ($rand_pick_text eq ''); |
|
$rand_order_text = ' ' if ($rand_order_text eq ''); |
if (($allowed) && ($folder!~/^supplemental/)) { |
if (($allowed) && ($folder!~/^supplemental/)) { |
my %lt=&Apache::lonlocal::texthash( |
my %lt=&Apache::lonlocal::texthash( |
'hd' => 'Hidden', |
'hd' => 'Hidden', |
Line 2099 END
|
Line 1510 END
|
$line.=(<<ENDPARMS); |
$line.=(<<ENDPARMS); |
<td class="LC_docs_entry_parameter"> |
<td class="LC_docs_entry_parameter"> |
$form_start |
$form_start |
|
$form_common |
<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 |
|
$form_common |
<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">$rand_pick_text<br /> |
<td class="LC_docs_entry_parameter">$form_start $parameterset $form_end</td> |
$rand_order_text</td> |
ENDPARMS |
ENDPARMS |
} |
} |
$line.=&Apache::loncommon::end_data_table_row(); |
$line.=&Apache::loncommon::end_data_table_row(); |
Line 2347 sub checkversions {
|
Line 1759 sub checkversions {
|
if (&Apache::lonnet::put('resourceversions',\%newsetversions, |
if (&Apache::lonnet::put('resourceversions',\%newsetversions, |
$env{'course.'.$env{'request.course.id'}.'.domain'}, |
$env{'course.'.$env{'request.course.id'}.'.domain'}, |
$env{'course.'.$env{'request.course.id'}.'.num'}) eq 'ok') { |
$env{'course.'.$env{'request.course.id'}.'.num'}) eq 'ok') { |
$r->print('<h1>'.&mt('Your Version Settings have been Saved').'</h1>'); |
$r->print(&Apache::loncommon::confirmwrapper( |
|
&Apache::lonhtmlcommon::confirm_success(&mt('Your Version Settings have been Saved')))); |
} else { |
} else { |
$r->print('<h1><span class="LC_error">'.&mt('An Error Occured while Attempting to Save your Version Settings').'</span></h1>'); |
$r->print(&Apache::loncommon::confirmwrapper( |
|
&Apache::lonhtmlcommon::confirm_success(&mt('An Error Occured while Attempting to Save your Version Settings'),1))); |
} |
} |
&mark_hash_old(); |
&mark_hash_old(); |
} |
} |
Line 2415 sub checkversions {
|
Line 1829 sub checkversions {
|
'sv' => 'Set Versions to be used in '.$crstype.' according to Selections below', |
'sv' => 'Set Versions to be used in '.$crstype.' according to Selections below', |
'sm' => 'Keep all Resources up-to-date with most recent Versions (default)', |
'sm' => 'Keep all Resources up-to-date with most recent Versions (default)', |
'sc' => 'Set all Resource Versions to current Version (Fix Versions)', |
'sc' => 'Set all Resource Versions to current Version (Fix Versions)', |
'di' => 'Differences'); |
'di' => 'Differences', |
|
'save' => 'Save', |
|
'act' => 'Actions'); |
$r->print(<<ENDHEADERS); |
$r->print(<<ENDHEADERS); |
<form action="/adm/coursedocs" method="post"> |
<form action="/adm/coursedocs" method="post"> |
<input type="hidden" name="versions" value="1" /> |
<input type="hidden" name="versions" value="1" /> |
<input type="submit" name="setmostrecent" value="$lt{'sm'}" /> |
<div class="LC_columnSection"> |
<input type="submit" name="setcurrent" value="$lt{'sc'}" /><hr /> |
<fieldset> |
|
<legend>$lt{'act'}</legend> |
|
$lt{'sm'}: <input type="submit" name="setmostrecent" value="Go" /><br /> |
|
$lt{'sc'}: <input type="submit" name="setcurrent" value="Go" /> |
|
</fieldset> |
|
</div> |
<select name="timerange"> |
<select name="timerange"> |
<option value='all' $allsel>$lt{'al'}</option> |
<option value='all' $allsel>$lt{'al'}</option> |
<option value="-1" $startsel>$lt{'st'}</option> |
<option value="-1" $startsel>$lt{'st'}</option> |
Line 2429 sub checkversions {
|
Line 1850 sub checkversions {
|
<option value="86400" $daysel>$lt{'sy'}</option> |
<option value="86400" $daysel>$lt{'sy'}</option> |
</select> |
</select> |
<input type="submit" name="display" value="$lt{'sd'}" /> |
<input type="submit" name="display" value="$lt{'sd'}" /> |
<h3>$header</h3> |
<h2>$header</h2> |
<input type="submit" name="setversions" value="$lt{'sv'}" /> |
<input type="submit" name="setversions" value="$lt{'save'}" /> |
<table border="0"> |
<table border="0"> |
ENDHEADERS |
ENDHEADERS |
|
#number of columns for version history |
|
my $num_ver_col = 1; |
|
$r->print( |
|
&Apache::loncommon::start_data_table(). |
|
&Apache::loncommon::start_data_table_header_row(). |
|
'<th>'.&mt('Resources').'</th>'. |
|
"<th>$lt{'mr'}</th>". |
|
"<th>$lt{'ve'}</th>". |
|
"<th>$lt{'vu'}</th>". |
|
'<th colspan="'.$num_ver_col.'">'.&mt('History').'</th>'. |
|
'</b>'); |
foreach my $key (sort(keys(%changes))) { |
foreach my $key (sort(keys(%changes))) { |
if ($changes{$key}>$starttime) { |
if ($changes{$key}>$starttime) { |
my ($root,$extension)=($key=~/^(.*)\.(\w+)$/); |
my ($root,$extension)=($key=~/^(.*)\.(\w+)$/); |
my $currentversion=&Apache::lonnet::getversion($key); |
my $currentversion=&Apache::lonnet::getversion($key); |
if ($currentversion<0) { |
if ($currentversion<0) { |
$currentversion=&mt('Could not be determined.'); |
$currentversion='<span class="LC_error">'.&mt('Could not be determined.').'</span>'; |
} |
} |
my $linkurl=&Apache::lonnet::clutter($key); |
my $linkurl=&Apache::lonnet::clutter($key); |
$r->print( |
$r->print( |
'<tr><td colspan="5"><br /><br /><font size="+1"><b>'. |
&Apache::loncommon::end_data_table_header_row(). |
&Apache::lonnet::gettitle($linkurl). |
&Apache::loncommon::start_data_table_row(). |
'</b></font></td></tr>'. |
'<td><b>'.&Apache::lonnet::gettitle($linkurl).'</b><br>'. |
'<tr><td> </td>'. |
'<a href="'.$linkurl.'" target="cat">'.$linkurl.'</a></td>'. |
'<td colspan="4">'. |
'<td align="right">'.$currentversion.'<span class="LC_fontsize_medium"><br>('. |
'<a href="'.$linkurl.'" target="cat">'.$linkurl. |
&Apache::lonlocal::locallocaltime(&Apache::lonnet::metadata($root.'.'.$extension,'lastrevisiondate')).')</span></td>'. |
'</a></td></tr>'. |
'<td align="right">'); |
'<tr><td></td>'. |
|
'<td title="'.$lt{'md'}.'">'. |
|
&Apache::lonlocal::locallocaltime( |
|
&Apache::lonnet::metadata($root.'.'.$extension, |
|
'lastrevisiondate') |
|
). |
|
'</td>'. |
|
'<td title="'.$lt{'mr'}.'"><span class="LC_nobreak">Most Recent: '. |
|
'<font size="+1">'.$currentversion.'</font>'. |
|
'</span></td>'. |
|
'<td title="'.$lt{'ve'}.'"><span class="LC_nobreak">In '.$crstype.': '. |
|
'<font size="+1">'); |
|
# Used in course |
# Used in course |
my $usedversion=$hash{'version_'.$linkurl}; |
my $usedversion=$hash{'version_'.$linkurl}; |
if (($usedversion) && ($usedversion ne 'mostrecent')) { |
if (($usedversion) && ($usedversion ne 'mostrecent')) { |
$r->print($usedversion); |
if($usedversion != $currentversion){ |
|
$r->print('<span class="LC_warning">'.$usedversion.'</span>'); |
|
}else{ |
|
$r->print($usedversion); |
|
} |
} else { |
} else { |
$r->print($currentversion); |
$r->print($currentversion); |
} |
} |
$r->print('</font></span></td><td title="'.$lt{'vu'}.'">'. |
$r->print('</td><td title="'.$lt{'vu'}.'">'); |
'<span class="LC_nobreak">Use: '); |
|
# Set version |
# Set version |
$r->print(&Apache::loncommon::select_form($setversions{$linkurl}, |
$r->print(&Apache::loncommon::select_form($setversions{$linkurl}, |
'set_version_'.$linkurl, |
'set_version_'.$linkurl, |
Line 2478 ENDHEADERS
|
Line 1901 ENDHEADERS
|
'' => '', |
'' => '', |
'mostrecent' => &mt('most recent'), |
'mostrecent' => &mt('most recent'), |
map {$_,$_} (1..$currentversion)})); |
map {$_,$_} (1..$currentversion)})); |
$r->print('</span></td></tr><tr><td></td>'); |
|
my $lastold=1; |
my $lastold=1; |
for (my $prevvers=1;$prevvers<$currentversion;$prevvers++) { |
for (my $prevvers=1;$prevvers<$currentversion;$prevvers++) { |
my $url=$root.'.'.$prevvers.'.'.$extension; |
my $url=$root.'.'.$prevvers.'.'.$extension; |
Line 2492 ENDHEADERS
|
Line 1914 ENDHEADERS
|
# each of the four columns |
# each of the four columns |
my $entries_per_col = 0; |
my $entries_per_col = 0; |
my $num_entries = ($currentversion-$lastold); |
my $num_entries = ($currentversion-$lastold); |
if ($num_entries % 4 == 0) { |
if ($num_entries % $num_ver_col == 0) { |
$entries_per_col = $num_entries/4; |
$entries_per_col = $num_entries/$num_ver_col; |
} else { |
} else { |
$entries_per_col = $num_entries/4 + 1; |
$entries_per_col = $num_entries/$num_ver_col + 1; |
} |
} |
my $entries_count = 0; |
my $entries_count = 0; |
$r->print('<td valign="top"><font size="-2">'); |
$r->print('<td valign="top"><span class="LC_fontsize_medium">'); |
my $cols_output = 1; |
my $cols_output = 1; |
for (my $prevvers=$lastold;$prevvers<$currentversion;$prevvers++) { |
for (my $prevvers=$lastold;$prevvers<$currentversion;$prevvers++) { |
my $url=$root.'.'.$prevvers.'.'.$extension; |
my $url=$root.'.'.$prevvers.'.'.$extension; |
Line 2513 ENDHEADERS
|
Line 1935 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) { |
$r->print('</font></td>'); |
$r->print('</span></td>'); |
if ($cols_output != 4) { |
if ($cols_output != $num_ver_col) { |
$r->print('<td valign="top"><font size="-2">'); |
$r->print('<td valign="top"><span class="LC_fontsize_medium">'); |
$cols_output++; |
$cols_output++; |
} |
} |
} |
} |
} |
} |
while($cols_output++ < 4) { |
while($cols_output++ < $num_ver_col) { |
$r->print('</font></td><td><font>') |
$r->print('</span></td><td>'); |
} |
} |
$r->print('</font></td></tr>'."\n"); |
|
} |
} |
} |
} |
$r->print('</table></form>'); |
$r->print('</td>'.&Apache::loncommon::end_data_table_row(). |
$r->print('<p class="LC_success">'.&mt('Done').'</p>'); |
&Apache::loncommon::end_data_table(). |
|
'<input type="submit" name="setversions" value="'.$lt{'save'}.'" />'); |
|
|
&untiehash(); |
&untiehash(); |
} |
} |
Line 2632 sub create_form_ul {
|
Line 2054 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"':''). |
'><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"':''). |
$r->print('<li '.(($mode eq 'supdocs')?' class="active"':''). |
'><a href="/adm/coursedocs?forcesupplement=1"><b>'.&mt('Supplemental Content Editor').'</b></a></li>'); |
'><a href="/adm/coursedocs?forcesupplement=1"><b>'.&mt('Supplemental Documents').'</b></a></li>'); |
} |
$r->print('</ul>'); |
$r->print("\n".'</ul>'."\n"); |
$r->print('<div class="LC_Box" style="clear:both;margin:0;">' |
$r->print('<div class="LC_DocsBox" style="clear:both;margin:0;" id="contenteditor">'. |
.'<div id="maincoursedoc" style="margin:0 0;padding:0 0;">'); |
'<div id="maincoursedoc" style="margin:0 0;padding:0 0;">'. |
$r->print('<div class="LC_ContentBox" id="mainCourseDocuments" style="display: block;">'); |
'<div class="LC_ContentBox" id="mainCourseDocuments" style="display: block;">'); |
} |
} |
|
|
# |
# |
Line 2663 sub endContentScreen {
|
Line 2081 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 2697 sub handler {
|
Line 2115 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 2716 sub handler {
|
Line 2140 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 2725 sub handler {
|
Line 2149 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 2748 sub handler {
|
Line 2173 sub handler {
|
|
|
my $script=''; |
my $script=''; |
my $showdoc=0; |
my $showdoc=0; |
|
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 2788 sub handler {
|
Line 2289 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 2799 sub handler {
|
Line 2300 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 2848 sub handler {
|
Line 2351 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; |
|
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 = { |
|
onload => "javascript:resize_contentdiv('contentscroll','1','1');", |
|
}; |
} |
} |
# -------------------------------------------------------------------- Body tag |
# -------------------------------------------------------------------- Body tag |
$script = '<script type="text/javascript">'."\n" |
$script = '<script type="text/javascript">'."\n" |
Line 2864 sub handler {
|
Line 2382 sub handler {
|
href=>"/adm/coursedocs",text=>"$crstype Contents"}); |
href=>"/adm/coursedocs",text=>"$crstype Contents"}); |
|
|
$r->print(&Apache::loncommon::start_page("$crstype Contents", $script, |
$r->print(&Apache::loncommon::start_page("$crstype Contents", $script, |
{'force_register' => $showdoc,}) |
{'force_register' => $showdoc, |
|
'add_entries' => $addentries, |
|
}) |
.&Apache::loncommon::help_open_menu('','',273,'RAT') |
.&Apache::loncommon::help_open_menu('','',273,'RAT') |
.&Apache::lonhtmlcommon::breadcrumbs( |
.&Apache::lonhtmlcommon::breadcrumbs( |
'Editing the Table of Contents for your '.$crstype, |
'Editing the Table of Contents for your '.$crstype, |
Line 2912 sub handler {
|
Line 2432 sub handler {
|
my $docuname=$env{'course.'.$env{'request.course.id'}.'.num'}; |
my $docuname=$env{'course.'.$env{'request.course.id'}.'.num'}; |
my $docudom=$env{'course.'.$env{'request.course.id'}.'.domain'}; |
my $docudom=$env{'course.'.$env{'request.course.id'}.'.domain'}; |
my ($destination,$dir_root) = &embedded_destination(); |
my ($destination,$dir_root) = &embedded_destination(); |
$r->print(&Apache::loncommon::modify_html_refs('coursedoc',$destination, |
my $result = |
$docuname,$docudom,undef, |
&Apache::loncommon::modify_html_refs('coursedoc',$destination, |
$dir_root). |
$docuname,$docudom,undef, |
&return_to_editor()); |
$dir_root); |
|
$r->print($result.&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 2941 sub handler {
|
Line 2470 sub handler {
|
'sipa' => 'Simple Course Page', |
'sipa' => 'Simple Course Page', |
'sipr' => 'Simple Problem', |
'sipr' => 'Simple Problem', |
'drbx' => 'Drop Box', |
'drbx' => 'Drop Box', |
'scuf' => 'Score Upload Form', |
'scuf' => 'External Scores (handgrade, upload, clicker)', |
'bull' => 'Discussion Board', |
'bull' => 'Discussion Board', |
'mypi' => 'My Personal Information Page', |
'mypi' => 'My Personal Information Page', |
'grpo' => 'Group Portfolio', |
'grpo' => 'Group Portfolio', |
Line 2973 FIUP
|
Line 2502 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 3001 SEDFFORM
|
Line 2530 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" /> |
<p> |
|
$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> |
</p> |
|
</form> |
</form> |
SEDFFORM |
SEDFFORM |
|
|
Line 3047 HIDDENFORM
|
Line 2574 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 3193 NROSTFORM
|
Line 2724 NROSTFORM
|
|
|
my $specialdocumentsform; |
my $specialdocumentsform; |
my @specialdocumentsforma; |
my @specialdocumentsforma; |
|
my $gradingform; |
|
my @gradingforma; |
|
my $communityform; |
|
my @communityforma; |
my $newfolderform; |
my $newfolderform; |
my $newfolderb; |
my $newfolderb; |
|
|
unless ($env{'form.pagepath'}) { |
my $path = &HTML::Entities::encode($env{'form.folderpath'},'<>&"'); |
my $path = &HTML::Entities::encode($env{'form.folderpath'},'<>&"'); |
|
|
|
my $newpageform=(<<NPFORM); |
my $newpageform=(<<NPFORM); |
<form action="/adm/coursedocs" method="post" name="newpage"> |
<form action="/adm/coursedocs" method="post" name="newpage"> |
Line 3244 NGFFORM
|
Line 2778 NGFFORM
|
@specialdocumentsforma=( |
@specialdocumentsforma=( |
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/page.png" alt="'.$lt{newp}.'" onclick="javascript:makenewpage(document.newpage,\''.$pageseq.'\');" />'=>$newpageform}, |
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/page.png" alt="'.$lt{newp}.'" onclick="javascript:makenewpage(document.newpage,\''.$pageseq.'\');" />'=>$newpageform}, |
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/syllabus.png" alt="'.$lt{syll}.'" onclick="document.newsyl.submit()" />'=>$newsylform}, |
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/syllabus.png" alt="'.$lt{syll}.'" onclick="document.newsyl.submit()" />'=>$newsylform}, |
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/groupportfolio.png" alt="'.$lt{grpo}.'" onclick="document.newgroupfiles.submit()" />'=>$newgroupfileform}, |
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/navigation.png" alt="'.$lt{navc}.'" onclick="document.newnav.submit()" />'=>$newnavform}, |
); |
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/simple.png" alt="'.$lt{sipa}.'" onclick="javascript:makesmppage();" />'=>$newsmppageform}, |
|
); |
|
$specialdocumentsform = &create_form_ul(&create_list_elements(@specialdocumentsforma)); |
|
|
|
|
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; |
|
|
push @specialdocumentsforma, ({'<img class="LC_noBorder LC_middle" src="/res/adm/pages/navigation.png" alt="'.$lt{navc}.'" onclick="document.newnav.submit()" />'=>$newnavform}, |
@gradingforma=( |
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/simple.png" alt="'.$lt{sipa}.'" onclick="javascript:makesmppage();" />'=>$newsmppageform}, |
{'<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}, |
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/dropbox.png" alt="'.$lt{drbx}.'" onclick="javascript:makedropbox();" />'=>$newdropboxform}, |
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/dropbox.png" alt="'.$lt{drbx}.'" onclick="javascript:makedropbox();" />'=>$newdropboxform}, |
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/scoreupfrm.png" alt="'.$lt{scuf}.'" onclick="javascript:makeexamupload();" />'=>$newexuploadform}, |
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/scoreupfrm.png" alt="'.$lt{scuf}.'" onclick="javascript:makeexamupload();" />'=>$newexuploadform}, |
|
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/bchat.png" alt="'.$lt{bull}.'" onclick="javascript:makebulboard();" />'=>$newbulform}, |
); |
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/myaboutme.png" alt="'.$lt{mypi}.'" onclick="javascript:makebulboard();" />'=>$newaboutmeform}, |
$gradingform = &create_form_ul(&create_list_elements(@gradingforma)); |
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/aboutme.png" alt="'.$lt{abou}.'" onclick="javascript:makeabout();" />'=>$newaboutsomeoneform}, |
|
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/clst.png" alt="'.$lt{rost}.'" onclick="document.newroster.submit()" />'=>$newrosterform},); |
@communityforma=( |
|
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/bchat.png" alt="'.$lt{bull}.'" onclick="javascript:makebulboard();" />'=>$newbulform}, |
|
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/myaboutme.png" alt="'.$lt{mypi}.'" onclick="javascript:makebulboard();" />'=>$newaboutmeform}, |
|
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/aboutme.png" alt="'.$lt{abou}.'" onclick="javascript:makeabout();" />'=>$newaboutsomeoneform}, |
|
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/clst.png" alt="'.$lt{rost}.'" onclick="document.newroster.submit()" />'=>$newrosterform}, |
|
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/groupportfolio.png" alt="'.$lt{grpo}.'" onclick="document.newgroupfiles.submit()" />'=>$newgroupfileform}, |
|
); |
|
$communityform = &create_form_ul(&create_list_elements(@communityforma)); |
|
|
$specialdocumentsform = &create_form_ul(&create_list_elements(@specialdocumentsforma)); |
|
} |
|
|
|
if($env{'form.pagepath'}) { |
|
|
|
@specialdocumentsforma=( |
|
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/simpprob.png" alt="'.&mt('Simple Problem').'" onclick="javascript:makesmpproblem();" />'=>$newsmpproblemform}, |
|
{'<img class="LC_noBorder LC_middle" src="/res/adm/pages/scoreupfrm.png" alt="'.&mt('Score Upload Form').'" onclick="javascript:makeexamupload();" />'=>$newexuploadform} |
|
); |
|
$specialdocumentsform= &create_form_ul(&create_list_elements(@specialdocumentsforma)); |
|
} |
|
|
|
my @tools = ( |
my @tools = ( |
# {'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/extres.png" alt="'.$lt{extr}.'" />'=>$extresourcesform}, |
# {'<img class="LC_noBorder LC_middle" align="left" src="/res/adm/pages/extres.png" alt="'.$lt{extr}.'" />'=>$extresourcesform}, |
Line 3283 my @tools = (
|
Line 2817 my @tools = (
|
my %orderhash = ( |
my %orderhash = ( |
'aa' => ['Import Documents',$fileuploadform], |
'aa' => ['Import Documents',$fileuploadform], |
'bb' => ['Published Resources',$simpleeditdefaultform], |
'bb' => ['Published Resources',$simpleeditdefaultform], |
'cc' => ['Special Documents',$specialdocumentsform], |
'cc' => ['Grading Resources',$gradingform], |
'dd' => ['Tools', &create_form_ul(&create_list_elements(@tools)).&generate_admin_options(\%help,\%env)], |
'ff' => ['Tools', &create_form_ul(&create_list_elements(@tools)).&generate_admin_options(\%help,\%env)], |
); |
); |
unless($env{'form.pagepath'}) { |
unless ($env{'form.pagepath'}) { |
$orderhash{'00'} = ['Newfolder',$newfolderform]; |
$orderhash{'00'} = ['Newfolder',$newfolderform]; |
|
$orderhash{'dd'} = ['Community Resources',$communityform]; |
|
$orderhash{'ee'} = ['Special Documents',$specialdocumentsform]; |
} |
} |
|
|
$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 3301 unless($env{'form.pagepath'}) {
|
Line 2838 unless($env{'form.pagepath'}) {
|
} |
} |
|
|
&changewarning($r,''); |
&changewarning($r,''); |
$r->print(&generate_edit_table('1',\%orderhash)); |
|
} |
} |
|
} |
} |
|
|
|
# Supplemental documents start here |
# Supplemental documents start here |
|
|
Line 3398 my @supimportdoc = (
|
Line 2933 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 3479 sub return_to_editor {
|
Line 3015 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 ($pathitem,$hiddenelem); |
|
my @hiddens = ('newidx','comment','position'); |
|
if ($env{'form.pagepath'}) { |
|
$container='page'; |
|
$pathitem = 'pagepath'; |
|
} else { |
|
$pathitem = 'folderpath'; |
|
} |
|
unshift(@hiddens,$pathitem); |
|
foreach my $item (@hiddens) { |
|
if ($env{'form.'.$item}) { |
|
$hiddenelem .= '<input type="hidden" name="'.$item.'" value="'. |
|
$env{'form.'.$item}.'" />'."\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.autoextract_camtasia'}) { |
|
$output .= &remove_archive($docudom,$docuname,$container); |
|
} |
|
} |
|
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; |
|
if ($env{'form.archivedelete'}) { |
|
$output = &remove_archive($docudom,$docuname,$container); |
|
} |
|
$output .= |
|
&Apache::loncommon::process_extracted_files('coursedocs',$docudom,$docuname, |
|
$destination,$dir_root,$hiddenelem); |
|
return $output; |
|
} |
|
|
|
sub remove_archive { |
|
my ($docudom,$docuname,$container) = @_; |
|
my $map = $env{'form.folder'}.'.'.$container; |
|
my ($output,$delwarning,$delresult,$url); |
|
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'}; |
|
my $position = $env{'form.position'}; |
|
if ($position > 0) { |
|
$env{'form.cmd'} = 'del_'.$position; |
|
my ($title,$url,@rrest) = |
|
split(/:/,$LONCAPA::map::resources[$LONCAPA::map::order[$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.'); |
|
} |
|
} else { |
|
$delresult = &mt('Archive file removed.'); |
|
} |
|
} |
|
} |
|
$env{'form.cmd'} = $currcmd; |
|
} |
|
if ($delwarning) { |
|
$output = '<p class="LC_warning">'. |
|
$delwarning. |
|
'</p>'; |
|
} |
|
if ($delresult) { |
|
$output .= '<p class="LC_info">'. |
|
$delresult. |
|
'</p>'; |
|
} |
|
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 3515 sub generate_admin_options {
|
Line 3162 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 3524 sub generate_edit_table {
|
Line 3171 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('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 3561 sub generate_edit_table {
|
Line 3218 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', |
t_mnf => 'New Folder', |
t_mnf => 'New Folder', |
p_mnp => 'Name of New Page', |
p_mnp => 'Name of New Page', |
t_mnp => 'New Page', |
t_mnp => 'New Page', |
p_mxu => 'Title for the Uploaded Score', |
p_mxu => 'Title for the External Score', |
p_msp => 'Name of Simple Course Page', |
p_msp => 'Name of Simple Course Page', |
p_msb => 'Title for the Problem', |
p_msb => 'Title for the Problem', |
p_mdb => 'Title for the Drop Box', |
p_mdb => 'Title for the Drop Box', |
Line 3584 sub editing_js {
|
Line 3241 sub editing_js {
|
p_ctr1a => 'WARNING: Cutting a resource makes associated grades and scores inaccessible!', |
p_ctr1a => 'WARNING: Cutting a resource makes associated grades and scores inaccessible!', |
p_ctr1b => 'Grades remain inaccessible if resource is pasted into another folder.', |
p_ctr1b => 'Grades remain inaccessible if resource is pasted into another folder.', |
p_ctr2a => 'Cut[_98]', |
p_ctr2a => 'Cut[_98]', |
p_ctr2b => '?[_98]' |
p_ctr2b => '?[_98]', |
|
rpck => 'Enter number to pick (e.g., 3)', |
); |
); |
|
|
my $crstype = &Apache::loncommon::course_type(); |
my $crstype = &Apache::loncommon::course_type(); |
Line 3599 sub editing_js {
|
Line 3257 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 3703 newWindow = window.open("","IMSimport","
|
Line 3366 newWindow = window.open("","IMSimport","
|
newWindow.location.href = newlocation; |
newWindow.location.href = newlocation; |
} |
} |
|
|
|
|
function finishpick() { |
function finishpick() { |
var title=this.document.forms.extimport.title.value; |
var title=this.document.forms.extimport.title.value; |
var url=this.document.forms.extimport.url.value; |
var url=this.document.forms.extimport.url.value; |
Line 3773 this.document.forms.renameform.pagesymb.
|
Line 3435 this.document.forms.renameform.pagesymb.
|
this.document.forms.renameform.submit(); |
this.document.forms.renameform.submit(); |
} |
} |
|
|
|
function updatePick(targetform,index,caller) { |
|
var pickitem = document.getElementById('rpick_'+index); |
|
var picknumitem = document.getElementById('rpicknum_'+index); |
|
if (pickitem.checked) { |
|
var picknum=prompt('$lt{"rpck"}',picknumitem.value); |
|
if (picknum == '' || picknum == null) { |
|
if (caller == 'check') { |
|
pickitem.checked=false; |
|
return; |
|
} |
|
} else { |
|
picknum.toString(); |
|
var regexdigit=/^\\d+\$/; |
|
if (regexdigit.test(picknum)) { |
|
picknumitem.value = picknum; |
|
targetform.changeparms.value='randompick'; |
|
targetform.submit(); |
|
} else { |
|
if (caller == 'check') { |
|
pickitem.checked=false; |
|
} |
|
return; |
|
} |
|
} |
|
} else { |
|
picknumitem.value = 0; |
|
targetform.changeparms.value='randompick'; |
|
targetform.submit(); |
|
} |
|
} |
|
|
function unselectInactive(nav) { |
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 3827 function showPage(current, pageId, nav,
|
Line 3524 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'; |
|
activeTab = pageId; |
if (nav == 'mainnav') { |
if (nav == 'mainnav') { |
var storedpath = "$docs_folderpath"; |
var storedpath = "$docs_folderpath"; |
if (storedpath == '') { |
if (storedpath == '') { |
Line 3861 function showPage(current, pageId, nav,
|
Line 3559 function showPage(current, pageId, nav,
|
} |
} |
} |
} |
} |
} |
|
resize_contentdiv('contentscroll','1','0'); |
return false; |
return false; |
} |
} |
|
|
Line 3871 function injectData(current, hiddenField
|
Line 3570 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 { |
|
my ($tabidstr) = @_; |
|
my $viewport_js = &Apache::loncommon::viewport_geometry_js(); |
|
return <<ENDRESIZESCRIPT; |
|
|
|
window.onresize=resizeContentEditor; |
|
|
|
var activeTab; |
|
|
|
$viewport_js |
|
|
|
function resize_contentdiv(scrollboxname,chkw,chkh) { |
|
var scrollboxid = 'div_'+scrollboxname; |
|
var scrolltableid = 'table_'+scrollboxname; |
|
var scrollbox; |
|
var scrolltable; |
|
|
|
if (document.getElementById("contenteditor") == null) { |
|
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(); |
|
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; |
|
} |
|
} |
|
} |
|
} |
|
|
|
if (maxtabw > 0) { |
|
var newscrollboxw; |
|
if (maxtabw+paddingw+scrollboxscrollw<contenteditorw) { |
|
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"; |
|
} |
|
} 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 scrollboxscrollheight = scrollbox.scrollHeight; |
|
var freevspace = vph-(primaryheight+secondaryheight+crumbsheight+dccidheight+uploadresultheight+tabbedheight+contenteditorheight); |
|
|
|
var minvscrollbox = 200; |
|
var offsetv = 20; |
|
var newscrollboxheight; |
|
if (freevspace < 0) { |
|
newscrollboxheight = scrollboxheight+freevspace-offsetv; |
|
if (newscrollboxheight < minvscrollbox) { |
|
newscrollboxheight = minvscrollbox; |
|
} |
|
scrollbox.style.height = newscrollboxheight + "px"; |
|
} else { |
|
if (scrollboxscrollheight > scrollboxheight) { |
|
if (freevspace > offsetv) { |
|
newscrollboxheight = scrollboxheight+freevspace-offsetv; |
|
if (newscrollboxheight < minvscrollbox) { |
|
newscrollboxheight = minvscrollbox; |
|
} |
|
scrollbox.style.height = newscrollboxheight+"px"; |
|
} |
|
} |
|
} |
|
scrollboxheight = scrollbox.offsetHeight; |
|
var contentlistheight = document.getElementById("contentlist").offsetHeight; |
|
|
|
if (scrollboxscrollheight <= scrollboxheight) { |
|
if ((contentlistheight+offsetv)<scrollboxheight) { |
|
newscrollheight = contentlistheight+offsetv; |
|
scrollbox.style.height = newscrollheight+"px"; |
|
} |
|
} |
|
} |
|
return; |
|
} |
|
|
|
function resizeContentEditor() { |
|
var timer; |
|
clearTimeout(timer) |
|
timer=setTimeout('resize_contentdiv("contentscroll","1","1")',500); |
|
} |
|
|
|
ENDRESIZESCRIPT |
|
return; |
|
} |
|
|
1; |
1; |
__END__ |
__END__ |
|
|
Line 3920 Generate "dump" button
|
Line 3819 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 |