--- loncom/interface/londocs.pm 2004/12/23 16:31:27 1.159 +++ loncom/interface/londocs.pm 2005/02/17 08:29:42 1.167 @@ -1,7 +1,7 @@ # The LearningOnline Network # Documents # -# $Id: londocs.pm,v 1.159 2004/12/23 16:31:27 raeburn Exp $ +# $Id: londocs.pm,v 1.167 2005/02/17 08:29:42 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -132,11 +132,17 @@ sub dumpbutton { } } +sub clean { + my ($title)=@_; + $title=~s/[^\w\/\!\$\%\^\*\-\_\=\+\;\:\,\\\|\`\~]+/\_/gs; + return $title; +} # -------------------------------------------------------- Actually dump course sub dumpcourse { my $r=shift; - $r->print('Dump DOCS'. + my $html=&Apache::lonxml::xmlbegin(); + $r->print($html.'Dump DOCS'. &Apache::loncommon::bodytag('Dump Course DOCS to Construction Space'). '
'); my ($home,$other,%outhash)=&authorhosts(); @@ -149,7 +155,7 @@ sub dumpcourse { my ($ca,$cd)=split(/\@/,$ENV{'form.authorspace'}); $r->print('

'.&mt('Copying Files').'

'); my $title=$ENV{'form.authorfolder'}; - $title=~s/[^\w\/]+/\_/g; + $title=&clean($title); my %replacehash=(); foreach (keys %ENV) { if ($_=~/^form\.namefor\_(.+)/) { @@ -160,7 +166,7 @@ sub dumpcourse { $crs=~s/\_/\//g; foreach (keys %replacehash) { my $newfilename=$title.'/'.$replacehash{$_}; - $newfilename=~s/[^\w\/\.\/]+/\_/g; + $newfilename=&clean($newfilename); my @dirs=split(/\//,$newfilename); my $path='/home/'.$ca.'/public_html'; my $makepath=$path; @@ -214,7 +220,7 @@ sub dumpcourse { } my $title=$origcrsdata{'description'}; $title=~s/\s+/\_/gs; - $title=~s/\W//gs; + $title=&clean($title); $r->print('

'.&mt('Folder in Construction Space').'


'); &tiehash(); $r->print('

'.&mt('Filenames in Construction Space').'

'); @@ -223,12 +229,13 @@ sub dumpcourse { my ($ext)=($_=~/\.(\w+)$/); my $title=$hash{'title_'.$hash{ 'ids_/uploaded/'.$origcrsdata{'domain'}.'/'.$origcrsdata{'num'}.'/'.$_}}; + $title=~s/:/:/g; $r->print(''); unless ($title) { $title=$_; } $title=~s/\.(\w+)$//; - $title=~s/[^\w\/]+/\_/gs; + $title=&clean($title); $title.='.'.$ext; $r->print("\n\n"); } @@ -242,6 +249,7 @@ sub dumpcourse { # ------------------------------------------------------ Generate "export" button sub exportbutton { + return ''; return ' + + - ENDPARMS } $line.=""; @@ -1461,8 +1461,8 @@ sub verifycontent { my $r=shift; my $loaderror=&Apache::lonnet::overloaderror($r); if ($loaderror) { return $loaderror; } - - $r->print('Verify Content'. + my $html=&Apache::lonxml::xmlbegin(); + $r->print($html.'Verify Content'. &Apache::loncommon::bodytag('Verify Course Documents')); $hashtied=0; undef %alreadyseen; @@ -1490,7 +1490,8 @@ sub verifycontent { sub checkversions { my $r=shift; - $r->print('Check Versions'. + my $html=&Apache::lonxml::xmlbegin(); + $r->print($html.'Check Versions'. &Apache::loncommon::bodytag('Check Course Document Versions')); my $header=''; my $startsel=''; @@ -1881,8 +1882,9 @@ sub handler { my $now=time; # print screen + my $html=&Apache::lonxml::xmlbegin(); $r->print(< +$html The LearningOnline Network with CAPA
'.&mt('Internal Filename').''.&mt('Title').''.&mt('Save as ...').'
'.($title?$title:' ').'
'. ''. @@ -318,8 +326,8 @@ sub exportcourse { $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'. + my $html=&Apache::lonxml::xmlbegin(); + $r->print($html.'Export Course'. &Apache::loncommon::bodytag('Export course to IMS content package')); $r->print($outcome); $r->print(''); @@ -460,7 +468,8 @@ function containerCheck(item) { |; - $r->print('Export Course'.$scripttag.''. + my $html=&Apache::lonxml::xmlbegin(); + $r->print($html.'Export Course'.$scripttag.''. &Apache::loncommon::bodytag('Export course to IMS content package' )); @@ -658,7 +667,6 @@ sub process_content { my $content_type; my $message; # find where user is author or co-author - my %roleshash = &Apache::lonnet::get_my_roles(); my @uploads = (); if ($curRes->is_sequence()) { $content_type = 'sequence'; @@ -705,29 +713,20 @@ sub process_content { if ($contents) { $$content_file = &store_template($contents,$tempexport,$count,$content_type); } - } elsif ($symb =~ m-uploaded/$cdom/$cnum-) { - $$content_file = &replicate_content($cdom,$cnum,$tempexport,$symb,$count,\$message,$href,'uploaded'); } 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 $coauth = $3.':'.$2.':ca'; + } elsif ($symb =~ m-\.(sequence|page)___\d+___([^/]+)/([^/]+)-) { my $canedit = 0; if ($2 eq $ENV{'user.domain'} && $3 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) { $$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) { @@ -769,14 +768,14 @@ sub replicate_content { if ($copiedfile = Apache::File->new('>'.$destination)) { my $content; if ($caller eq 'resource') { - $content = &Apache::lonnet::getfile($url); + $content = &Apache::lonnet::getfile('/home/httpd/html/res/'.$url); if ($content eq -1) { $$message = 'Could not copy file '.$filename; } else { &extract_media($content,$count,$tempexport,$href,'resource'); $repstatus = 'ok'; } - } elsif ($caller eq 'noedit' || $caller eq 'uploaded' || $caller eq 'templateupload') { + } elsif ($caller eq 'uploaded' || $caller eq 'templateupload') { my $rtncode; $repstatus = &Apache::lonnet::getuploaded('GET',$url,$cdom,$cnum,\$content,$rtncode); if ($repstatus eq 'ok') { @@ -786,6 +785,10 @@ sub replicate_content { } else { $$message = 'Could not render '.$url.' server message - '.$rtncode; } + } 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; @@ -1005,7 +1008,8 @@ sub editor { if ( ($folder=~/^$1/) || ($1 eq 'default') ) { # this is for a course, not a user, so set coursedoc flag # probably the only place in the system where this should be "1" - my $url=&Apache::lonnet::userfileupload('uploaddoc',1,'docs'); + my $newidx=$#Apache::lonratedt::resources+1; + my $url=&Apache::lonnet::userfileupload('uploaddoc',1,'docs/'.$newidx); my $ext='false'; if ($url=~/^http\:\/\//) { $ext='true'; } $url=~s/\:/\:/g; @@ -1017,7 +1021,6 @@ sub editor { $comment=time.'___&&&___'.$ENV{'user.name'}.'___&&&___'. $ENV{'user.domain'}.'___&&&___'.$comment; } - my $newidx=$#Apache::lonratedt::resources+1; $Apache::lonratedt::resources[$newidx]= $comment.':'.$url.':'.$ext.':normal:res'; $Apache::lonratedt::order[$#Apache::lonratedt::order+1]= @@ -1302,10 +1305,11 @@ END $folderpath.=$folderarg.'&'.$foldername; $url.='folderpath='.&Apache::lonnet::escape($folderpath); $parameterset=''; + '" />'. +''.&mt('Store').''; } if ($ispage) { @@ -1332,21 +1336,17 @@ END if (($allowed) && ($folder!~/^supplemental/)) { my %lt=&Apache::lonlocal::texthash( 'hd' => 'Hidden', - 'ec' => 'URL hidden', - 'sp' => 'Store Parameters'); + 'ec' => 'URL hidden'); my $enctext= ((&Apache::lonratedt::getparameter($orderidx,'parameter_encrypturl'))[0]=~/^yes$/i?' checked="1"':''); my $hidtext= ((&Apache::lonratedt::getparameter($orderidx,'parameter_hiddenresource'))[0]=~/^yes$/i?' checked="1"':''); $line.=(< -
- $parameterset - -