--- loncom/interface/londocs.pm 2005/02/17 08:29:42 1.167 +++ loncom/interface/londocs.pm 2005/07/26 16:41:43 1.198 @@ -1,7 +1,7 @@ # The LearningOnline Network # Documents # -# $Id: londocs.pm,v 1.167 2005/02/17 08:29:42 albertel Exp $ +# $Id: londocs.pm,v 1.198 2005/07/26 16:41:43 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -86,17 +86,17 @@ sub authorhosts { my %outhash=(); my $home=0; my $other=0; - foreach (keys %ENV) { + foreach (keys %env) { if ($_=~/^user\.role\.(au|ca)\.(.+)$/) { my $role=$1; my $realm=$2; - my ($start,$end)=split(/\./,$ENV{$_}); + my ($start,$end)=split(/\./,$env{$_}); if (($start) && ($start>time)) { next; } if (($end) && (time>$end)) { next; } my $ca; my $cd; if ($1 eq 'au') { - $ca=$ENV{'user.name'}; - $cd=$ENV{'user.domain'}; + $ca=$env{'user.name'}; + $cd=$env{'user.domain'}; } else { ($cd,$ca)=($realm=~/^\/(\w+)\/(\w+)$/); } @@ -147,22 +147,22 @@ sub dumpcourse { '
'."\n\n"); } # ================================================================ Main Handler @@ -1805,18 +2069,18 @@ sub handler { 'Docs_About_My_Personal_Info,Docs_Editing_Templated_Pages'); $help{'Caching'} = &Apache::loncommon::help_open_topic('Caching'); - if ($ENV{'form.verify'}) { + if ($env{'form.verify'}) { &verifycontent($r); - } elsif ($ENV{'form.versions'}) { + } elsif ($env{'form.versions'}) { &checkversions($r); - } elsif ($ENV{'form.dumpcourse'}) { + } elsif ($env{'form.dumpcourse'}) { &dumpcourse($r); - } elsif ($ENV{'form.exportcourse'}) { + } elsif ($env{'form.exportcourse'}) { &exportcourse($r); } else { # is this a standard course? - my $standard=($ENV{'request.course.uri'}=~/^\/uploaded\//); + my $standard=($env{'request.course.uri'}=~/^\/uploaded\//); my $forcestandard = 0; my $forcesupplement; my $script=''; @@ -1826,33 +2090,33 @@ sub handler { my $containertag; my $uploadtag; &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, - ['folderpath','pagepath','pagesymb']); - 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); + ['folderpath','pagepath','pagesymb','markedcopy_url','markedcopy_title']); + 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 = ''. - ''; + $uploadtag = ''. + ''; } if ($r->uri=~/^\/adm\/coursedocs\/showdoc\/(.*)$/) { $showdoc='/'.$1; } unless ($showdoc) { # got called from remote - if (($ENV{'form.folder'}=~/^default_/) || - ($ENV{'form.folder'} =~ m#^\d+/(pages|sequences)/#)) { + if (($env{'form.folder'}=~/^default_/) || + ($env{'form.folder'} =~ m#^\d+/(pages|sequences)/#)) { $forcestandard = 1; } - $forcesupplement=($ENV{'form.folder'}=~/^supplemental_/); + $forcesupplement=($env{'form.folder'}=~/^supplemental_/); # does this user have privileges to post, etc? - $allowed=&Apache::lonnet::allowed('mdc',$ENV{'request.course.id'}); + $allowed=&Apache::lonnet::allowed('mdc',$env{'request.course.id'}); if ($allowed) { &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['cmd']); $script=&Apache::lonratedt::editscript('simple'); @@ -1865,19 +2129,19 @@ sub handler { } # get course data - my $coursenum=$ENV{'course.'.$ENV{'request.course.id'}.'.num'}; - my $coursedom=$ENV{'course.'.$ENV{'request.course.id'}.'.domain'}; + my $coursenum=$env{'course.'.$env{'request.course.id'}.'.num'}; + my $coursedom=$env{'course.'.$env{'request.course.id'}.'.domain'}; # get personal data - my $uname=$ENV{'user.name'}; - my $udom=$ENV{'user.domain'}; + my $uname=$env{'user.name'}; + my $udom=$env{'user.domain'}; my $plainname=&Apache::lonnet::escape( &Apache::loncommon::plainname($uname,$udom)); # graphics settings - $iconpath = $r->dir_config('lonIconsURL') . "/"; + $iconpath = &Apache::loncommon::lonhttpdurl($r->dir_config('lonIconsURL') . "/"); my $now=time; @@ -2004,7 +2268,7 @@ function changename(folderpath,index,old } function removeres(folderpath,index,oldtitle,container,pagesymb) { - if (confirm('Remove "'+oldtitle+'"?')) { + if (confirm('WARNING: Removing a resource makes associated grades and scores inaccessible!\\nRemove "'+oldtitle+'"?')) { this.document.forms.renameform.cmd.value='del_'+index; if (container == 'sequence') { this.document.forms.renameform.folderpath.value=folderpath; @@ -2017,6 +2281,33 @@ function removeres(folderpath,index,oldt } } +function cutres(folderpath,index,oldtitle,container,pagesymb) { + if (confirm('WARNING: Cutting a resource makes associated grades and scores inaccessible!\\nGrades remain inaccessible if resource is pasted into another folder.\\nCut "'+oldtitle+'"?')) { + this.document.forms.renameform.cmd.value='cut_'+index; + this.document.forms.renameform.markcopy.value=index; + if (container == 'sequence') { + this.document.forms.renameform.folderpath.value=folderpath; + } + if (container == 'page') { + this.document.forms.renameform.pagepath.value=folderpath; + this.document.forms.renameform.pagesymb.value=pagesymb; + } + this.document.forms.renameform.submit(); + } +} + +function markcopy(folderpath,index,oldtitle,container,pagesymb) { + this.document.forms.renameform.markcopy.value=index; + if (container == 'sequence') { + this.document.forms.renameform.folderpath.value=folderpath; + } + if (container == 'page') { + this.document.forms.renameform.pagepath.value=folderpath; + this.document.forms.renameform.pagesymb.value=pagesymb; + } + this.document.forms.renameform.submit(); +} + ENDNEWSCRIPT @@ -2026,18 +2317,103 @@ ENDNEWSCRIPT &Apache::loncommon::bodytag('Course Documents','',$events, '','',$showdoc). &Apache::loncommon::help_open_menu('','','','',273,'RAT')); - unless ($showdoc) { + my %allfiles = (); + my %codebase = (); + my ($upload_result,$upload_output); + if ($allowed) { + if (($env{'form.uploaddoc.filename'}) && ($env{'form.cmd'}=~/^upload_(\w+)/)) { +# Process file upload - phase one - upload and parse primary file. + $upload_result = &process_file_upload(\$upload_output,$coursenum, + $coursedom,\%allfiles, + \%codebase,$1); + if ($upload_result eq 'phasetwo') { + $r->print($upload_output); + } + } elsif ($env{'form.phasetwo'}) { + my %newname = (); + my %origname = (); + my %attribs = (); + my $updateflag = 0; + my $residx = $env{'form.newidx'}; + my $primary_url = &Apache::lonnet::unescape($env{'form.primaryurl'}); +# Process file upload - phase two - gather secondary files. + for (my $i=0; $i<$env{'form.phasetwo'}; $i++) { + if ($env{'form.embedded_item_'.$i.'.filename'}) { + my $javacodebase; + $newname{$i} = &process_secondary_uploads(\$upload_output,$coursedom,$coursenum,'embedded_item_',$i,$residx); + $origname{$i} = &Apache::lonnet::unescape($env{'form.embedded_orig_'.$i}); + if (exists($env{'form.embedded_codebase_'.$i})) { + $javacodebase = &Apache::lonnet::unescape($env{'form.embedded_codebase_'.$i}); + $origname{$i} =~ s#^\Q$javacodebase\E/##; + } + my @attributes = (); + if ($env{'form.embedded_attrib_'.$i} =~ /:/) { + @attributes = split/:/,$env{'form.embedded_attrib_'.$i}; + } else { + @attributes = ($env{'form.embedded_attrib_'.$i}); + } + foreach (@attributes) { + push(@{$attribs{$i}},&Apache::lonnet::unescape($_)); + } + if ($javacodebase) { + $codebase{$i} = $javacodebase; + $codebase{$i} =~ s#/$##; + $updateflag = 1; + } + } + unless ($newname{$i} eq $origname{$i}) { + $updateflag = 1; + } + } +# Process file upload - phase three - modify primary file + if ($updateflag) { + my ($content,$rtncode); + my $updateflag = 0; + my $getstatus = &Apache::lonnet::getuploaded('GET',$primary_url,$coursedom,$coursenum,\$content,\$rtncode); + if ($getstatus eq 'ok') { + foreach my $item (keys %newname) { + if ($newname{$item} ne $origname{$item}) { + my $attrib_regexp = ''; + if (@{$attribs{$item}} > 1) { + $attrib_regexp = join('|',@{$attribs{$item}}); + } else { + $attrib_regexp = $attribs{$item}[0]; + } + if ($content =~ m#($attrib_regexp\s*=\s*['"]?)\Q$origname{$item}\E(['"]?)#) { + } + $content =~ s#($attrib_regexp\s*=\s*['"]?)\Q$origname{$item}\E(['"]?)#$1$newname{$item}$2#gi; + } + if (exists($codebase{$item})) { + $content =~ s/(codebase\s*=\s*["']?)\Q$codebase{$item}\E(["']?)/$1.$2/i; + } + } +# Save edited file. + my $saveresult; + my $docuname=$env{'course.'.$env{'request.course.id'}.'.num'}; + my $docudom=$env{'course.'.$env{'request.course.id'}.'.domain'}; + my $url = &Apache::lonnet::store_edited_file($primary_url,$content,$docudom,$docuname,\$saveresult); + } else { + &Apache::lonnet::logthis('retrieval of uploaded file - '.$primary_url.' - for editing, failed: '.$getstatus); + } + } + } + } + + unless ($showdoc || $upload_result eq 'phasetwo') { # ----------------------------------------------------------------------------- my %lt=&Apache::lonlocal::texthash( 'uplm' => 'Upload a new main course document', 'upls' => 'Upload a new supplemental course document', - 'impp' => 'Import a published document', + 'impp' => 'Import a document', + 'pubd' => 'Published documents', + 'copm' => 'All documents out of a published map into this folder', 'spec' => 'Special documents', 'upld' => 'Upload Document', 'srch' => 'Search', 'impo' => 'Import', 'selm' => 'Select Map', 'load' => 'Load Map', + 'reco' => 'Recover Deleted Resources', 'newf' => 'New Folder', 'newp' => 'New Composite Page', 'extr' => 'External Resource', @@ -2052,7 +2428,8 @@ ENDNEWSCRIPT 'imsf' => 'Import IMS package', 'file' => 'File', 'title' => 'Title', - 'comment' => 'Comment' + 'comment' => 'Comment', + 'parse' => 'If HTML file, upload embedded images/multimedia files' ); # ----------------------------------------------------------------------------- if ($allowed) { @@ -2063,15 +2440,15 @@ ENDNEWSCRIPT 'cv' => 'Check/Set Resource Versions', ); - my $folderpath=$ENV{'form.folderpath'}; + my $folderpath=$env{'form.folderpath'}; if (!$folderpath) { - if ($ENV{'form.folder'} eq '' || - $ENV{'form.folder'} eq 'supplemental') { + if ($env{'form.folder'} eq '' || + $env{'form.folder'} eq 'supplemental') { $folderpath='default&'. &Apache::lonnet::escape(&mt('Main Course Documents')); } } - unless ($ENV{'form.pagepath'}) { + unless ($env{'form.pagepath'}) { $containertag = ''; $uploadtag = ''; } @@ -2080,6 +2457,7 @@ ENDNEWSCRIPT
'. &mt('It is recommended that you use an up-to-date virus scanner before handling this file.')."