--- loncom/interface/londocs.pm 2004/09/09 18:56:01 1.141 +++ loncom/interface/londocs.pm 2004/09/27 15:20:23 1.147 @@ -1,7 +1,7 @@ # The LearningOnline Network # Documents # -# $Id: londocs.pm,v 1.141 2004/09/09 18:56:01 albertel Exp $ +# $Id: londocs.pm,v 1.147 2004/09/27 15:20:23 matthew Exp $ # # Copyright Michigan State University Board of Trustees # @@ -40,6 +40,7 @@ use Apache::lonnavmaps; use HTML::Entities; use GDBM_File; use Apache::lonlocal; +use Cwd; my $iconpath; @@ -254,6 +255,7 @@ sub exportcourse { my $navmap = Apache::lonnavmaps::navmap->new(); my $it=$navmap->getIterator(undef,undef,undef,1,undef,undef); my $curRes; + my $outcome; &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, ['finishexport']); @@ -277,29 +279,49 @@ sub exportcourse { $discussions[0] = $ENV{'form.discussion'}; } } - my $curRes; - my $count; - my %symbs; - my $display; - while ($curRes = $it->next()) { - if (ref($curRes)) { - $count ++; - $symbs{$count} = $curRes->symb(); - if (grep/^$count$/,@exportitems) { - $display.= 'Export content item '.$curRes->title()."
\n"; + if (@exportitems == 0 && @discussions == 0) { + $outcome = '
As you did not select any content items or discussions for export, an IMS package has not been created. Please go back to select either content items or discussions for export'; + } else { + my $now = time; + my $count = 0; + 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'; +# zip can cause an sh launch which can pass along all of %ENV +# which can be too large for /bin/sh to handle + my %oldENV=%ENV; + undef(%ENV); + my $cwd = &Cwd::getcwd(); + my $imszip = '/home/httpd/'.$imszipfile; + chdir $tempexport; + open(OUTPUT, "zip -r $imszip * 2> /dev/null |"); + close(OUTPUT); + chdir $cwd; + %ENV=%oldENV; + undef(%oldENV); + $outcome .= 'Download the zip file from IMS course archive
'; + if ($copyresult) { + $outcome .= 'The following errors occurred during export - '.$copyresult; } - if (grep/^$count$/,@discussions) { - $display.= 'Export discussion posts '.$curRes->title()."
\n"; - } + } else { + $outcome = '
Unfortunately you will not be able to retrieve an IMS archive of this posts at this time, because there was a problem creating a manifest file.
'; } } $r->print('Export Course'. - &Apache::loncommon::bodytag('Export course to IMS or SCORM content package' -)); - - my $exportfile; - $r->print($display); + &Apache::loncommon::bodytag('Export course to IMS or SCORM content package')); + $r->print($outcome); $r->print(''); } else { my $display; @@ -433,6 +455,255 @@ function containerCheck(item) { } } +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); + } +# open manifest file + my $manifest = '/imsmanifest.xml'; + my $manifestfilename = $$tempexport.$manifest; + if ($ims_manifest = Apache::File->new('>'.$manifestfilename)) { + $$manifestok=1; + print $ims_manifest +''."\n". +''."\n". +' '."\n". +' '."\n". +' '.$ENV{'request.'.$ENV{'request.course.id'}.'.description'}.'' + } else { + $$outcome .= 'An error occurred opening the IMS manifest file.
' +; + } + 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{'request.'.$ENV{'request.course.id'}.'.num'}; + my $cdom = $ENV{'request.'.$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; + if ($curRes == $it->BEGIN_MAP()) { + $prevdepth = $depth; + $depth++; + } + if ($curRes == $it->END_MAP()) { + $prevdepth = $depth; + $depth--; + } + + if (ref($curRes)) { + 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.'"'; + } + if (($depth <= $prevdepth) && ($count > 1)) { + print $ims_manifest ' '."\n"; + } + $prevdepth = $depth; + + my $itementry = + ''. + ''.$curRes->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". + ' '."\n". + ' '."\n"; + foreach (@hrefs) { + $imsresources .= + ' '."\n"; + } + $imsresources .= ' '."\n"; + } + } + $pkgdepth = $depth; + } + } + while ($pkgdepth > -1) { + print $ims_manifest " \n"; + $pkgdepth --; + } + my $resource_text = qq| +
+
+ + $imsresources + +
+ |; + print $ims_manifest $resource_text; +} + +sub get_dependencies { + my ($exportitems,$parent,$depth,$dependencies) = @_; + if ($depth > 1) { + unless (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; +# find where user is author or co-author + my %roleshash = &Appache::lonnet::get_my_roles(); + if ($curRes->is_page()) { + $content_type = 'page'; + } elsif ($symb =~ m-public/$cdom/$cnum/syllabus$-) { + $content_type = 'syllabus'; + } elsif ($symb =~ m-\.sequence____\d+____ext-) { + $content_type = 'external'; + } elsif ($symb =~ m-adm/navmaps$-) { + $content_type = 'navmap'; + } elsif ($symb =~ m-adm/$cdom/$cnum/\d+/smppg$-) { + $content_type = 'simplepage'; + } elsif ($symb =~ m-$-) { + $content_type = 'simpleproblem'; + } elsif ($symb =~ m-adm/$cdom/$cnum/\d+/bulletinboard$-) { + $content_type = 'bulletinboard'; + } elsif ($symb =~ m-adm/$cdom/$cnum/\d+/aboutme$-) { + $content_type = 'aboutme'; + } elsif ($symb =~ m-uploaded/$cdom/$cnum-) { + &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,'uploaded'); + } elsif ($symb =~ m-\.sequence____\d+____([^/])/([^/])-) { + my $coauth = $2.':'.$1.':ca'; + my $canedit = 0; + if ($1 eq $ENV{'user.domain'} && $2 eq $ENV{'user.name'}) { + $canedit= 1; + } elsif (defined($roleshash{$coauth})) { + if ($roleshash{$coauth} =~ /(\d+):(\d+)/) { + if (($1 < time || $1 == 0) && ($2 == 0 || $2 >= time)) { + $canedit = 1; + } + } elsif ($roleshash{$coauth} eq ':') { + $canedit = 1; + } + } + if ($canedit) { + &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,'resource'); + } else { + &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,'noedit'); + } + } + $$copyresult .= $message."\n"; +} + +sub replicate_content { + my ($cdom,$cnum,$tempexport,$symb,$count,$message,$caller) = @_; + my ($map,$ind,$url)=&Apache::lonnet::decode_symb($symb); + my $feedurl = &Apache::lonnet::clutter($url); + + my $content; + my $filename; + my $repstatus; + if ($url =~ m-[^/]/(.+)$-) { + $filename = $1; + if (!-e $tempexport.'/resources') { + mkdir($tempexport.'/resources',0700); + } + if (!-e $tempexport.'/resources') { + mkdir($tempexport.'/resources/'.$count,0700); + } + my $destination = $$tempexport.'/resources/'.$count.'/'.$filename; + my $copiedfile; + if ($copiedfile = Apache::File->new('>'.$destination)) { + my $content; + if ($caller eq 'uploaded' || $caller eq 'resource') { + $content = &Apache::lonnet::getfile($url); + if ($content eq -1) { + $$message = 'Could not copy file '.$filename; + } else { + $repstatus = 'ok'; + } + } elsif ($caller eq 'noedit') { + my $rtncode; + $repstatus = &getuploaded('GET',$url,$cdom,$cnum,$content,$rtncode); + unless ($repstatus eq 'ok') { + $$message = 'Could not render '.$url.' server message - '.$rtncode; + } + } + if ($repstatus eq 'ok') { + print $copiedfile $content; + } + close($copiedfile); + } else { + $$message = 'Could not open destination file for '.$filename."\n"; + } + } else { + $$message = 'Could not determine name of file for '; + } + return $repstatus; +} # Imports the given (name, url) resources into the course # coursenum, coursedom, and folder must precede the list @@ -440,9 +711,31 @@ sub group_import { my $coursenum = shift; my $coursedom = shift; my $folder = shift; + my $container = shift; + my $caller = shift; while (@_) { my $name = shift; my $url = shift; + if (($url =~ m#^/uploaded/$coursedom/$coursenum/(default_\d+\.)(page|sequence)$#) && ($caller eq 'londocs')) { + my $errtext = ''; + my $fatal = 0; + my $newmapstr = ''."\n". + ''."\n". + ''."\n". + ''."\n". + ''; + $ENV{'form.output'}=$newmapstr; + my $home=&Apache::lonnet::homeserver($coursenum,$coursedom); + my $result=&Apache::lonnet::finishuserfileupload($coursenum,$coursedom,$home, + 'output',$1.$2); + if ($result != m|^/uploaded/|) { + $errtext.='Map not saved: A network error occured when trying to save the new map. '; + $fatal = 2; + } + if ($fatal) { + return ($errtext,$fatal); + } + } if ($url) { my $idx = $#Apache::lonratedt::resources + 1; $Apache::lonratedt::order[$#Apache::lonratedt::order+1]=$idx; @@ -454,13 +747,18 @@ sub group_import { join ':', ($name, $url, $ext, 'normal', 'res'); } } - return &storemap($coursenum, $coursedom, $folder.'.sequence'); + return &storemap($coursenum, $coursedom, $folder.'.'.$container); } sub breadcrumbs { my ($where)=@_; &Apache::lonhtmlcommon::clear_breadcrumbs(); - my (@folders)=split('&',$ENV{'form.folderpath'}); + my (@folders); + if ($ENV{'form.pagepath'}) { + @folders = split('&',$ENV{'form.pagepath'}); + } else { + @folders=split('&',$ENV{'form.folderpath'}); + } my $folderpath; while (@folders) { my $folder=shift(@folders); @@ -488,8 +786,12 @@ sub editor { $r->print(&breadcrumbs($folder)); my $errtext=''; my $fatal=0; + my $container='sequence'; + if ($ENV{'form.pagepath'}) { + $container='page'; + } ($errtext,$fatal)= - &mapread($coursenum,$coursedom,$folder.'.sequence'); + &mapread($coursenum,$coursedom,$folder.'.'.$container); if ($#Apache::lonratedt::order<1) { $Apache::lonratedt::order[0]=1; $Apache::lonratedt::resources[1]=''; @@ -557,7 +859,7 @@ sub editor { } # store the changed version - ($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.sequence'); + ($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.'.$container); if ($fatal) { $r->print('

'.$errtext.'

'); return; @@ -589,7 +891,7 @@ sub editor { $Apache::lonratedt::order[$#Apache::lonratedt::order+1]= $newidx; - ($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.sequence'); + ($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.'.$container); if ($fatal) { $r->print('

'.$errtext.'

'); return; @@ -623,6 +925,7 @@ sub editor { $Apache::lonratedt::order[$idx]=$i; } } elsif ($cmd eq 'rename') { + my $ratstr = $Apache::lonratedt::resources[$Apache::lonratedt::order[$idx]]; my ($rtitle,@rrest)=split(/\:/, $Apache::lonratedt::resources[ $Apache::lonratedt::order[$idx]]); @@ -631,14 +934,15 @@ sub editor { $comment=~s/\/\>\;/g; $comment=~s/\:/\:/g; - $Apache::lonratedt::resources[ + if ($comment=~/\S/) { + $Apache::lonratedt::resources[ $Apache::lonratedt::order[$idx]]= - $comment.':'.join(':',@rrest); - + $comment.':'.join(':',@rrest); + } } # Store the changed version ($errtext,$fatal)=&storemap($coursenum,$coursedom, - $folder.'.sequence'); + $folder.'.'.$container); if ($fatal) { $r->print('

'.$errtext.'

'); return; @@ -657,7 +961,7 @@ sub editor { } # Store the changed version ($errtext,$fatal)=group_import($coursenum, $coursedom, $folder, - @imports); + $container,'londocs',@imports); if ($fatal) { $r->print('

'.$errtext.'

'); return; @@ -675,7 +979,7 @@ sub editor { # Store the changed version ($errtext,$fatal)=&storemap($coursenum,$coursedom, - $folder.'.sequence'); + $folder.'.'.$container); if ($fatal) { $r->print('

'.$errtext.'

'); return; @@ -709,6 +1013,7 @@ sub entryline { &Apache::lonnet::unescape($title)),'"<>&\''); my $renametitle=$title; my $foldertitle=$title; + my $pagetitle=$title; my $orderidx=$Apache::lonratedt::order[$index]; if ($title=~ /^(\d+)___&&&___(\w+)___&&&___(\w+)___&&&___(.*)$/ ) { $foldertitle=&Apache::lontexconvert::msgtexconverted($4); @@ -720,11 +1025,18 @@ sub entryline { $renametitle=~s/\"\;/\\\"/g; my $line=''; # Edit commands + my $container; my $folderpath; if ($ENV{'form.folderpath'}) { + $container = 'sequence'; $folderpath=&Apache::lonnet::escape($ENV{'form.folderpath'}); # $htmlfoldername=&HTML::Entities::encode($ENV{'form.foldername'},'<>&"'); } + my $pagepath; + if ($ENV{'form.pagepath'}) { + $container = 'page'; + $pagepath=&Apache::lonnet::escape($ENV{'form.pagepath'}); + } if ($allowed) { my $incindex=$index+1; my $selectbox=''; @@ -746,7 +1058,28 @@ sub entryline { 'dw' => 'Move Down', 'rm' => 'Remove', 'rn' => 'Rename'); - $line.=(< + + + + + +
+ +$lt{
+ +$lt{
+$selectbox + + +$lt{'rm'} + +$lt{'rn'} +END + } else { + $line.=(< @@ -760,18 +1093,22 @@ sub entryline { $selectbox - + $lt{'rm'} - + $lt{'rn'} END + } } # Figure out what kind of a resource this is my ($extension)=($url=~/\.(\w+)$/); my $uploaded=($url=~/^\/*uploaded\//); my $icon=&Apache::loncommon::icon($url); my $isfolder=0; + my $ispage=0; my $folderarg; + my $pagearg; + my $pagefile; if ($uploaded) { if ($extension eq 'sequence') { $icon=$iconpath.'/folder_closed.gif'; @@ -779,12 +1116,18 @@ END $url='/adm/coursedocs?'; $folderarg=$1; $isfolder=1; + } elsif ($extension eq 'page') { + $icon=$iconpath.'/page.gif'; + $url=~/$coursenum\/([\/\w]+)\.page$/; + $pagearg=$1; + $url='/adm/coursedocs?'; + $ispage=1; } else { &Apache::lonnet::allowuploaded('/adm/coursedoc',$url); } } $url=~s/^http\&colon\;\/\//\/adm\/wrapper\/ext\//; - if ((!$isfolder) && ($residx) && ($folder!~/supplemental/)) { + if ((!$isfolder) && ($residx) && ($folder!~/supplemental/) && (!$ispage)) { my $symb=&Apache::lonnet::symbclean( &Apache::lonnet::declutter('uploaded/'. $ENV{'course.'.$ENV{'request.course.id'}.'.domain'}.'/'. @@ -804,8 +1147,12 @@ END } elsif ($url!~/\.(sequence|page)$/) { $url='/adm/coursedocs/showdoc'.$url; } + } elsif ($url=~m|^/ext/|) { + $url='/adm/wrapper'.$url; } - $url.=(($url=~/\?/)?'&':'?').'symb='.&Apache::lonnet::escape($symb); + unless ($container eq 'page') { + $url.=(($url=~/\?/)?'&':'?').'symb='.&Apache::lonnet::escape($symb); + } } my $parameterset=' '; if ($isfolder) { @@ -814,9 +1161,20 @@ END if ($folderpath) { $folderpath.='&' }; $folderpath.=$folderarg.'&'.$foldername; $url.='folderpath='.&Apache::lonnet::escape($folderpath); - $parameterset=&mt('Randomly Pick: '). + $parameterset=''; + + } + if ($ispage) { + my $pagename=&Apache::lonnet::escape($pagetitle); + my $pagepath; + my $folderpath=$ENV{'form.folderpath'}; + if ($folderpath) { $pagepath = $folderpath.'&' }; + $pagepath.=$pagearg.'&'.$pagename; + $url.='pagepath='.&Apache::lonnet::escape($pagepath); } $line.=''. @@ -832,9 +1190,9 @@ END ((&Apache::lonratedt::getparameter($orderidx,'parameter_hiddenresource'))[0]=~/^yes$/i?' checked="1"':''); $line.=(< - $lt{'hd'} + +--> $parameterset @@ -850,24 +1208,33 @@ ENDPARMS sub tiehash { my ($mode)=@_; $hashtied=0; + &Apache::lonnet::logthis(" tiehash1 -- $hashtied "); if ($ENV{'request.course.fn'}) { + &Apache::lonnet::logthis(" tiehash2 -- $hashtied "); if ($mode eq 'write') { + &Apache::lonnet::logthis(" tiehash3 -- $hashtied "); if (tie(%hash,'GDBM_File',$ENV{'request.course.fn'}.".db", &GDBM_WRCREAT(),0640)) { $hashtied=2; + &Apache::lonnet::logthis(" tiehash4 -- $hashtied "); } } else { + &Apache::lonnet::logthis(" tiehash5 -- $hashtied "); if (tie(%hash,'GDBM_File',$ENV{'request.course.fn'}.".db", &GDBM_READER(),0640)) { $hashtied=1; + &Apache::lonnet::logthis(" tiehash6 -- $hashtied "); } } } + &Apache::lonnet::logthis(" tiehash7 -- $hashtied "); } sub untiehash { + &Apache::lonnet::logthis(" untiehash1 -- $hashtied "); if ($hashtied) { untie %hash; } $hashtied=0; + &Apache::lonnet::logthis(" untiehash2 -- $hashtied "); } # --------------------------------------------------------------- check on this @@ -1223,14 +1590,21 @@ ENDHEADERS sub mark_hash_old { my $retie_hash=0; + &Apache::lonnet::logthis(" markold1 -- $hashtied $retie_hash "); if ($hashtied) { $retie_hash=1; + &Apache::lonnet::logthis(" markold2 -- $hashtied $retie_hash "); &untiehash(); + &Apache::lonnet::logthis(" markold3 -- $hashtied $retie_hash "); } &tiehash('write'); + &Apache::lonnet::logthis(" markold4 -- $hashtied $retie_hash "); $hash{'old'}=1; + &Apache::lonnet::logthis(" markold5 -- $hashtied $retie_hash "); &untiehash(); + &Apache::lonnet::logthis(" markold6 -- $hashtied $retie_hash "); if ($retie_hash) { &tiehash(); } + &Apache::lonnet::logthis(" markold7 -- $hashtied $retie_hash "); } sub is_hash_old { @@ -1271,7 +1645,7 @@ sub handler { foreach ('Adding_Course_Doc','Main_Course_Documents', 'Adding_External_Resource','Navigate_Content', 'Adding_Folders','Docs_Overview', 'Load_Map', - 'Supplemental', 'Score_Upload_Form', + 'Supplemental','Score_Upload_Form','Adding_Pages', 'Importing_LON-CAPA_Resource','Uploading_From_Harddrive', 'Check_Resource_Versions','Verify_Content') { $help{$_}=&Apache::loncommon::help_open_topic('Docs_'.$_); @@ -1288,7 +1662,7 @@ sub handler { $help{'My Personal Info'} = &Apache::loncommon::help_open_topic( 'Docs_About_My_Personal_Info,Docs_Editing_Templated_Pages'); $help{'Caching'} = &Apache::loncommon::help_open_topic('Caching'); - + if ($ENV{'form.verify'}) { &verifycontent($r); } elsif ($ENV{'form.versions'}) { @@ -1307,13 +1681,22 @@ sub handler { my $allowed; my $events=''; my $showdoc=0; + my $containertag; + my $uploadtag; &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, - ['folderpath']); + ['folderpath','pagepath']); if ($ENV{'form.folderpath'}) { my (@folderpath)=split('&',$ENV{'form.folderpath'}); $ENV{'form.foldername'}=&Apache::lonnet::unescape(pop(@folderpath)); $ENV{'form.folder'}=pop(@folderpath); - } + } + if ($ENV{'form.pagepath'}) { + my (@pagepath)=split('&',$ENV{'form.pagepath'}); + $ENV{'form.pagename'}=&Apache::lonnet::unescape(pop(@pagepath)); + $ENV{'form.folder'}=pop(@pagepath); + $containertag = ''; + $uploadtag = ''; + } if ($r->uri=~/^\/adm\/coursedocs\/showdoc\/(.*)$/) { $showdoc='/'.$1; } @@ -1371,6 +1754,14 @@ function makenewfolder(targetform,folder } } +function makenewpage(targetform,folderseq) { + var pagename=prompt('Name of New Page','New Page'); + if (pagename) { + targetform.importdetail.value=pagename+"="+folderseq; + targetform.submit(); + } +} + function makenewext(targetname) { this.document.forms.extimport.useform.value=targetname; window.open('/adm/rat/extpickframe.html'); @@ -1444,20 +1835,30 @@ function finishpick() { '";this.document.forms.'+form+'.submit();'); } -function changename(folderpath,index,oldtitle) { +function changename(folderpath,index,oldtitle,container) { var title=prompt('New Title',oldtitle); if (title) { this.document.forms.renameform.title.value=title; this.document.forms.renameform.cmd.value='rename_'+index; - this.document.forms.renameform.folderpath.value=folderpath; + if (container == 'sequence') { + this.document.forms.renameform.folderpath.value=folderpath; + } + if (container == 'page') { + this.document.forms.renameform.pagepath.value=folderpath; + } this.document.forms.renameform.submit(); } } -function removeres(folderpath,index,oldtitle) { +function removeres(folderpath,index,oldtitle,container) { if (confirm('Remove "'+oldtitle+'"?')) { this.document.forms.renameform.cmd.value='del_'+index; - this.document.forms.renameform.folderpath.value=folderpath; + if (container == 'sequence') { + this.document.forms.renameform.folderpath.value=folderpath; + } + if (container == 'page') { + this.document.forms.renameform.pagepath.value=folderpath; + } this.document.forms.renameform.submit(); } } @@ -1484,6 +1885,7 @@ ENDNEWSCRIPT 'selm' => 'Select Map', 'load' => 'Load Map', 'newf' => 'New Folder', + 'newp' => 'New Composite Page', 'extr' => 'External Resource', 'syll' => 'Syllabus', 'navc' => 'Navigate Contents', @@ -1515,15 +1917,20 @@ ENDNEWSCRIPT &Apache::lonnet::escape(&mt('Main Course Documents')); } } + unless ($ENV{'form.pagepath'}) { + $containertag = ''; + $uploadtag = ''; + } + $r->print(< - +$containertag
- +$uploadtag
@@ -1564,6 +1971,9 @@ ENDCOURSEVERIFY &changewarning($r,$postexec); my $folderseq='/uploaded/'.$coursedom.'/'.$coursenum.'/default_'.time. '.sequence'; + my $pageseq = '/uploaded/'.$coursedom.'/'.$coursenum.'/default_'.time. + '.page'; + $r->print(< @@ -1577,7 +1987,7 @@ $lt{'file'}:

$lt{'title'}:
- +$uploadtag @@ -1587,7 +1997,7 @@ $lt{'title'}:
+ -
$lt{'uplm'} - +$uploadtag @@ -1602,7 +2012,11 @@ value="$lt{'selm'}"> + +ENDFORM + unless ($ENV{'form.pagepath'}) { + $r->print(< @@ -1612,16 +2026,25 @@ onClick="javascript:makenewfolder(this.f value="$lt{'newf'}" />$help{'Adding_Folders'} -
+ +$help{'Adding_Pages'} + +
+
+$uploadtag + + $help{'Adding_External_Resource'}
- +$uploadtag @@ -1630,7 +2053,7 @@ value="Syllabus=/public/$coursedom/$cour
- +$uploadtag @@ -1639,7 +2062,7 @@ $help{'Navigate_Content'}
- +$uploadtag $
- +$uploadtag
- +$uploadtag
- +$uploadtag
- +$uploadtag @@ -1682,21 +2105,46 @@ $help{'My Personal Info'}
- +$uploadtag +ENDFORM + } + if ($ENV{'form.pagepath'}) { + $r->print(< +$uploadtag + + +$help{'Simple Problem'} + + +
+$uploadtag + + + +$help{'Score_Upload_Form'} + +
+ENDBLOCK + } else { + $r->print(<
-
ENDFORM + } + $r->print(''."\n". +''); $r->print(''); } # ----------------------------------------------------- Supplemental documents