--- loncom/interface/londocs.pm 2004/05/06 17:55:03 1.123 +++ loncom/interface/londocs.pm 2004/08/29 07:54:40 1.137.2.1 @@ -1,7 +1,7 @@ # The LearningOnline Network # Documents # -# $Id: londocs.pm,v 1.123 2004/05/06 17:55:03 www Exp $ +# $Id: londocs.pm,v 1.137.2.1 2004/08/29 07:54:40 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -121,7 +121,8 @@ sub dumpbutton { if ($home) { return ''. ''; + &mt('Dump Course DOCS to Construction Space').'" />'. + &Apache::loncommon::help_open_topic('Docs_Dump_Course_Docs'); } else { return''. &mt('Dump Course DOCS to Construction Space: available on other servers'); @@ -156,7 +157,7 @@ sub dumpcourse { $crs=~s/\_/\//g; foreach (keys %replacehash) { my $newfilename=$title.'/'.$replacehash{$_}; - $newfilename=~s/[^\w\/\.]+/\_/g; + $newfilename=~s/[^\w\/\.\/]+/\_/g; my @dirs=split(/\//,$newfilename); my $path='/home/'.$ca.'/public_html'; my $makepath=$path; @@ -200,7 +201,8 @@ sub dumpcourse { $r->print( ''); } else { - $r->print(''); + $r->print(''); } } } @@ -223,7 +225,7 @@ sub dumpcourse { $title=$_; } $title=~s/\.(\w+)$//; - $title=~s/\W+/\_/gs; + $title=~s/[^\w\/]+/\_/gs; $title.='.'.$ext; $r->print("\n\n"); } @@ -279,7 +281,8 @@ sub breadcrumbs { } - return &Apache::lonhtmlcommon::breadcrumbs(undef,undef,undef,undef,undef,0); + return &Apache::lonhtmlcommon::breadcrumbs(undef,undef,undef,undef,undef, + 0,'nohelp'); } sub editor { @@ -321,33 +324,57 @@ sub editor { &Apache::lonratedt::delparameter($idx,'parameter_encrypturl'); } - ($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.sequence'); - if ($fatal) { - $r->print('

'.$errtext.'

'); - return; - } if ($ENV{'form.newpos'}) { # change order my $newpos=$ENV{'form.newpos'}-1; - $r->print('Sorting '.$idx.' -> '.$newpos); - ($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.sequence'); - if ($fatal) { - $r->print('

'.$errtext.'

'); - return; + my $currentpos=$ENV{'form.currentpos'}-1; + my $i; + my @neworder=(); + if ($newpos>$currentpos) { +# moving stuff up + for ($i=0;$i<$currentpos;$i++) { + $neworder[$i]=$Apache::lonratedt::order[$i]; + } + for ($i=$currentpos;$i<$newpos;$i++) { + $neworder[$i]=$Apache::lonratedt::order[$i+1]; + } + $neworder[$newpos]=$Apache::lonratedt::order[$currentpos]; + for ($i=$newpos+1;$i<=$#Apache::lonratedt::order;$i++) { + $neworder[$i]=$Apache::lonratedt::order[$i]; + } + } else { +# moving stuff down + for ($i=0;$i<$newpos;$i++) { + $neworder[$i]=$Apache::lonratedt::order[$i]; + } + $neworder[$newpos]=$Apache::lonratedt::order[$currentpos]; + for ($i=$newpos+1;$i<$currentpos+1;$i++) { + $neworder[$i]=$Apache::lonratedt::order[$i-1]; + } + for ($i=$currentpos+1;$i<=$#Apache::lonratedt::order;$i++) { + $neworder[$i]=$Apache::lonratedt::order[$i]; + } } - + @Apache::lonratedt::order=@neworder; } - +# store the changed version + ($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.sequence'); + if ($fatal) { + $r->print('

'.$errtext.'

'); + return; + } + } + # upload a file, if present if (($ENV{'form.uploaddoc.filename'}) && ($ENV{'form.cmd'}=~/^upload_(\w+)/)) { 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); + my $url=&Apache::lonnet::userfileupload('uploaddoc',1,'docs'); my $ext='false'; if ($url=~/^http\:\/\//) { $ext='true'; } $url=~s/\:/\:/g; @@ -375,6 +402,10 @@ sub editor { if ($ENV{'form.cmd'}) { my ($cmd,$idx)=split(/\_/,$ENV{'form.cmd'}); if ($cmd eq 'del') { + my (undef,$url)=split(':',$Apache::lonratedt::resources[$Apache::lonratedt::order[$idx]]); + if ($url=~m|/+uploaded/\Q$coursedom\E/\Q$coursenum\E/|) { + &Apache::lonnet::removeuploadedurl($url); + } for (my $i=$idx;$i<$#Apache::lonratedt::order;$i++) { $Apache::lonratedt::order[$i]= $Apache::lonratedt::order[$i+1]; @@ -465,6 +496,9 @@ sub editor { $r->print(&entryline($idx,$name,$url,$folder,$allowed,$_,$coursenum)); $idx++; } + unless ($idx) { + $r->print(''.&mt('Currently no documents.').''); + } $r->print(''); } } @@ -499,6 +533,7 @@ sub entryline { my $selectbox=''; if ($folder!~/^supplemental/) { $selectbox= + ''. ' $lt{'hd'} - - $lt{'ec'} + $parameterset @@ -603,12 +651,20 @@ ENDPARMS # ---------------------------------------------------------------- tie the hash sub tiehash { + my ($mode)=@_; $hashtied=0; if ($ENV{'request.course.fn'}) { - if (tie(%hash,'GDBM_File',$ENV{'request.course.fn'}.".db", - &GDBM_READER(),0640)) { + if ($mode eq 'write') { + if (tie(%hash,'GDBM_File',$ENV{'request.course.fn'}.".db", + &GDBM_WRCREAT(),0640)) { + $hashtied=2; + } + } else { + if (tie(%hash,'GDBM_File',$ENV{'request.course.fn'}.".db", + &GDBM_READER(),0640)) { $hashtied=1; - } + } + } } } @@ -774,8 +830,9 @@ sub checkversions { } else { $r->print('

'.&mt('An Error Occured while Attempting to Store your Version Settings').'

'); } - &changewarning($r,''); + &mark_hash_old(); } + &changewarning($r,''); if ($ENV{'form.timerange'} eq 'all') { # show all documents $header=&mt('All Documents in Course'); @@ -895,7 +952,9 @@ ENDHEADERS # Set version $r->print(&Apache::loncommon::select_form($setversions{$linkurl}, 'set_version_'.$linkurl, - ('' => '', + ('select_form_order' => + ['',1..$currentversion,'mostrecent'], + '' => '', 'mostrecent' => 'most recent', map {$_,$_} (1..$currentversion)))); $r->print(''); @@ -956,8 +1015,32 @@ ENDHEADERS &untiehash(); } +sub mark_hash_old { + my $retie_hash=0; + if ($hashtied) { + $retie_hash=1; + &untiehash(); + } + &tiehash('write'); + $hash{'old'}=1; + &untiehash(); + if ($retie_hash) { &tiehash(); } +} + +sub is_hash_old { + my $untie_hash=0; + if (!$hashtied) { + $untie_hash=1; + &tiehash(); + } + my $return=$hash{'old'}; + if ($untie_hash) { &untiehash(); } + return $return; +} + sub changewarning { my ($r,$postexec)=@_; + if (!&is_hash_old()) { return; } $r->print( ''. '
'. @@ -983,7 +1066,8 @@ sub handler { 'Adding_External_Resource','Navigate_Content', 'Adding_Folders','Docs_Overview', 'Load_Map', 'Supplemental', 'Score_Upload_Form', - 'Importing_LON-CAPA_Resource','Uploading_From_Harddrive') { + 'Importing_LON-CAPA_Resource','Uploading_From_Harddrive', + 'Check_Resource_Versions','Verify_Content') { $help{$_}=&Apache::loncommon::help_open_topic('Docs_'.$_); } # Composite help files @@ -1023,7 +1107,7 @@ sub handler { $ENV{'form.folder'}=pop(@folderpath); } if ($r->uri=~/^\/adm\/coursedocs\/showdoc\/(.*)$/) { - $showdoc=$1; + $showdoc='/'.$1; } unless ($showdoc) { # got called from remote $forcestandard=($ENV{'form.folder'}=~/^default_/); @@ -1178,8 +1262,7 @@ ENDNEWSCRIPT $r->print(''. &Apache::loncommon::bodytag('Course Documents','',$events, '','',$showdoc). - &Apache::loncommon::help_open_faq(273). - &Apache::loncommon::help_open_bug('RAT')); + &Apache::loncommon::help_open_menu('','','','',273,'RAT')); unless ($showdoc) { # ----------------------------------------------------------------------------- my %lt=&Apache::lonlocal::texthash( @@ -1236,9 +1319,9 @@ ENDNEWSCRIPT
- +$help{'Verify_Content'} - + $help{'Check_Resource_Versions'} $dumpbut
@@ -1266,8 +1349,9 @@ ENDCOURSEVERIFY $hadchanges=0; &editor($r,$coursenum,$coursedom,$folder,$allowed); if ($hadchanges) { - &changewarning($r,$postexec); + &mark_hash_old() } + &changewarning($r,$postexec); my $folderseq='/uploaded/'.$coursedom.'/'.$coursenum.'/default_'.time. '.sequence'; $r->print(< - + $help{'Uploading_From_Harddrive'}