--- loncom/interface/londocs.pm 2007/07/03 00:17:42 1.283 +++ loncom/interface/londocs.pm 2008/11/21 20:31:48 1.317 @@ -1,7 +1,7 @@ # The LearningOnline Network # Documents # -# $Id: londocs.pm,v 1.283 2007/07/03 00:17:42 albertel Exp $ +# $Id: londocs.pm,v 1.317 2008/11/21 20:31:48 jms Exp $ # # Copyright Michigan State University Board of Trustees # @@ -26,6 +26,8 @@ # http://www.lon-capa.org/ # + + package Apache::londocs; use strict; @@ -53,15 +55,10 @@ my %alreadyseen=(); my $hadchanges; -# Available help topics my %help=(); -# Mapread read maps into LONCAPA::map:: global arrays -# @order and @resources, determines status -# sets @order - pointer to resources in right order -# sets @resources - array with the resources with correct idx -# + sub mapread { my ($coursenum,$coursedom,$map)=@_; @@ -81,7 +78,7 @@ sub storemap { return ($errtext,0); } -# ----------------------------------------- Return hash with valid author names + sub authorhosts { my %outhash=(); @@ -116,7 +113,7 @@ sub authorhosts { } return ($home,$other,%outhash); } -# ------------------------------------------------------ Generate "dump" button + sub dumpbutton { my ($home,$other,%outhash)=&authorhosts(); @@ -141,7 +138,8 @@ sub clean { $title=~s/[^\w\/\!\$\%\^\*\-\_\=\+\;\:\,\\\|\`\~]+/\_/gs; return $title; } -# -------------------------------------------------------- Actually dump course + + sub dumpcourse { my ($r) = @_; @@ -228,11 +226,19 @@ sub dumpcourse { my $title=$origcrsdata{'description'}; $title=~s/[\/\s]+/\_/gs; $title=&clean($title); - $r->print('
'.&mt('Internal Filename').' | '.&mt('Title').' | '.&mt('Save as ...').' | '.&mt('Internal Filename').' | ' + .''.&mt('Title').' | ' + .''.&mt('Save as ...').' | ' + .&Apache::loncommon::end_data_table_header_row()); foreach (&Apache::lonclonecourse::crsdirlist($origcrsid,'userfiles')) { - $r->print('
---|---|---|
'.$_.' | '); + $r->print(&Apache::loncommon::start_data_table_row() + .''.$_.' | '); my ($ext)=($_=~/\.(\w+)$/); my $title=$hash{'title_'.$hash{ 'ids_/uploaded/'.$origcrsdata{'domain'}.'/'.$origcrsdata{'num'}.'/'.$_}}; @@ -245,16 +251,17 @@ sub dumpcourse { $title=~s/\.(\w+)$//; $title=&clean($title); $title.='.'.$ext; - $r->print("\n" + .&Apache::loncommon::end_data_table_row()); } - $r->print(" |
'.$errtext.'
'); - } else { + # ------------------------------------------------------------ Process commands # ---------------- if they are for this folder and user allowed to make changes - if (($allowed) && ($env{'form.folder'} eq $folder)) { + if (($allowed) && ($env{'form.folder'} eq $folder)) { # set parameters and change order - &snapshotbefore(); - if ($env{'form.changeparms'}) { - my $idx=$env{'form.setparms'}; -# set parameters - if ($env{'form.changeparms'} eq 'randompick') { - if ($env{'form.randpick_'.$idx}) { - &LONCAPA::map::storeparameter($idx,'parameter_randompick',$env{'form.randpick_'.$idx},'int_pos'); - &remember_parms($idx,'randompick','set',$env{'form.randpick_'.$idx}); - } else { - &LONCAPA::map::delparameter($idx,'parameter_randompick'); - &remember_parms($idx,'randompick','del'); - } - } - if ($env{'form.changeparms'} eq 'hiddenresource') { - if ($env{'form.hidprs_'.$idx}) { - &LONCAPA::map::storeparameter($idx,'parameter_hiddenresource','yes','string_yesno'); - &remember_parms($idx,'hiddenresource','set',$env{'form.hidprs_'.$idx}); - } else { - &LONCAPA::map::delparameter($idx,'parameter_hiddenresource'); - &remember_parms($idx,'hiddenresource','del'); - } - } - if ($env{'form.changeparms'} eq 'encrypturl') { - if ($env{'form.encprs_'.$idx}) { - &LONCAPA::map::storeparameter($idx,'parameter_encrypturl','yes','string_yesno'); - &remember_parms($idx,'encrypturl','set',$env{'form.encprs_'.$idx}); - } else { - &LONCAPA::map::delparameter($idx,'parameter_encrypturl'); - &remember_parms($idx,'encrypturl','del'); - } - } -# store the changed version - ($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.'.$container); - if ($fatal) { - $r->print(''.$errtext.'
'); - return; - } - } + &snapshotbefore(); - if ($env{'form.newpos'}) { + if (&update_parameter()) { + ($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.'.$container); + return $errtext if ($fatal); + } + + if ($env{'form.newpos'} && $env{'form.currentpos'}) { # change order - my $newpos=$env{'form.newpos'}-1; - my $currentpos=$env{'form.currentpos'}-1; - my $i; - my @neworder=(); - if ($newpos>$currentpos) { -# moving stuff up - for ($i=0;$i<$currentpos;$i++) { - $neworder[$i]=$LONCAPA::map::order[$i]; - } - for ($i=$currentpos;$i<$newpos;$i++) { - $neworder[$i]=$LONCAPA::map::order[$i+1]; - } - $neworder[$newpos]=$LONCAPA::map::order[$currentpos]; - for ($i=$newpos+1;$i<=$#LONCAPA::map::order;$i++) { - $neworder[$i]=$LONCAPA::map::order[$i]; - } - } else { -# moving stuff down - for ($i=0;$i<$newpos;$i++) { - $neworder[$i]=$LONCAPA::map::order[$i]; - } - $neworder[$newpos]=$LONCAPA::map::order[$currentpos]; - for ($i=$newpos+1;$i<$currentpos+1;$i++) { - $neworder[$i]=$LONCAPA::map::order[$i-1]; - } - for ($i=$currentpos+1;$i<=$#LONCAPA::map::order;$i++) { - $neworder[$i]=$LONCAPA::map::order[$i]; - } - } - @LONCAPA::map::order=@neworder; -# store the changed version - ($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.'.$container); - if ($fatal) { - $r->print(''.$errtext.'
'); - return; - } - } + my $res = splice(@LONCAPA::map::order,$env{'form.currentpos'}-1,1); + splice(@LONCAPA::map::order,$env{'form.newpos'}-1,0,$res); + + ($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.'.$container); + return $errtext if ($fatal); + } - if ($env{'form.pastemarked'}) { -# paste resource to end of list - my $url=$env{'docs.markedcopy_url'}; - my $title=$env{'docs.markedcopy_title'}; -# Maps need to be copied first - if (($url=~/\.(page|sequence)$/) || ($url=~/^\/uploaded\//)) { - $title=&mt('Copy of').' '.$title; - my $newid=$$.time; - $url=~/^(.+)\.(\w+)$/; - my $newurl=$1.$newid.'.'.$2; - my $storefn=$newurl; - $storefn=~s{^/\w+/$match_domain/$match_username/}{}; - &Apache::lonclonecourse::writefile - ($env{'request.course.id'},$storefn, - &Apache::lonnet::getfile($url)); - $url=$newurl; - } - $title = &LONCAPA::map::qtunescape($title); - my $ext='false'; - if ($url=~/^http\:\/\//) { $ext='true'; } - $url = &LONCAPA::map::qtunescape($url); -# Now insert the URL at the bottom - my $newidx=&LONCAPA::map::getresidx($url); - $LONCAPA::map::resources[$newidx]= - $title.':'.$url.':'.$ext.':normal:res'; - $LONCAPA::map::order[1+$#LONCAPA::map::order]=$newidx; -# Store the result - ($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.'.$container); - if ($fatal) { - $r->print(''.$errtext.'
'); - return; - } + if ($env{'form.pastemarked'}) { + &do_paste_from_buffer($coursenum,$coursedom,$folder); + ($errtext,$fatal) = &storemap($coursenum,$coursedom,$folder.'.'.$container); + return $errtext if ($fatal); + } - } - $r->print($upload_output); - if ($env{'form.cmd'}) { - my ($cmd,$idx)=split(/\_/,$env{'form.cmd'}); - if ($cmd eq 'del') { - my (undef,$url)=split(':',$LONCAPA::map::resources[$LONCAPA::map::order[$idx]]); - if (($url=~m|/+uploaded/\Q$coursedom\E/\Q$coursenum\E/|) && - ($url!~/\.(page|sequence|problem|exam|quiz|assess|survey|form|library|task)$/)) { - &Apache::lonnet::removeuploadedurl($url); - } else { - &LONCAPA::map::makezombie($LONCAPA::map::order[$idx]); - } - for (my $i=$idx;$i<$#LONCAPA::map::order;$i++) { - $LONCAPA::map::order[$i] = $LONCAPA::map::order[$i+1]; - } - $#LONCAPA::map::order--; - } elsif ($cmd eq 'cut') { - my (undef,$url)=split(':',$LONCAPA::map::resources[$LONCAPA::map::order[$idx]]); - &LONCAPA::map::makezombie($LONCAPA::map::order[$idx]); - for (my $i=$idx;$i<$#LONCAPA::map::order;$i++) { - $LONCAPA::map::order[$i] = $LONCAPA::map::order[$i+1]; - } - $#LONCAPA::map::order--; - } elsif ($cmd eq 'up') { - if (($idx) && (defined($LONCAPA::map::order[$idx-1]))) { - my $i=$LONCAPA::map::order[$idx-1]; - $LONCAPA::map::order[$idx-1] = $LONCAPA::map::order[$idx]; - $LONCAPA::map::order[$idx] = $i; - } - } elsif ($cmd eq 'down') { - if (defined($LONCAPA::map::order[$idx+1])) { - my $i=$LONCAPA::map::order[$idx+1]; - $LONCAPA::map::order[$idx+1] = $LONCAPA::map::order[$idx]; - $LONCAPA::map::order[$idx] = $i; - } - } elsif ($cmd eq 'rename') { - my $ratstr = $LONCAPA::map::resources[$LONCAPA::map::order[$idx]]; - my ($rtitle,@rrest)=split(/\:/, - $LONCAPA::map::resources[$LONCAPA::map::order[$idx]]); - my $comment=$env{'form.title'}; - $comment = &LONCAPA::map::qtunescape($comment); - if ($comment=~/\S/) { - $LONCAPA::map::resources[$LONCAPA::map::order[$idx]]= - $comment.':'.join(':',@rrest); - } -# Devalidate title cache - my $renamed_url=&LONCAPA::map::qtescape($rrest[0]); - &Apache::lonnet::devalidate_title_cache($renamed_url); - } -# Store the changed version - ($errtext,$fatal)=&storemap($coursenum,$coursedom, - $folder.'.'.$container); - if ($fatal) { - $r->print(''.$errtext.'
'); - return; - } - } + $r->print($upload_output); + + if (&handle_edit_cmd()) { + ($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.'.$container); + return $errtext if ($fatal); + } # Group import/search - if ($env{'form.importdetail'}) { - my @imports; -# &Apache::lonnet::logthis("imp detail ".$env{'form.importdetail'}); - foreach (split(/\&/,$env{'form.importdetail'})) { - if (defined($_)) { - my ($name,$url)=split(/\=/,$_); - $name=&unescape($name); - $url=&unescape($url); - push @imports, $name, $url; - } - } -# Store the changed version - ($errtext,$fatal)=&group_import($coursenum, $coursedom, $folder, - $container,'londocs',@imports); - if ($fatal) { - $r->print(''.$errtext.'
'); - return; + if ($env{'form.importdetail'}) { + my @imports; + foreach (split(/\&/,$env{'form.importdetail'})) { + if (defined($_)) { + my ($name,$url,$residx)= + map {&unescape($_)} split(/\=/,$_); + push(@imports, [$name, $url, $residx]); } - } + } + ($errtext,$fatal)=&group_import($coursenum, $coursedom, $folder, + $container,'londocs',@imports); + return $errtext if ($fatal); + } # Loading a complete map - if ($env{'form.loadmap'}) { - if ($env{'form.importmap'}=~/\w/) { - foreach (&Apache::lonsequence::attemptread(&Apache::lonnet::filelocation('',$env{'form.importmap'}))) { - my ($title,$url,$ext,$type)=split(/\:/,$_); - my $idx=&LONCAPA::map::getresidx($url); - $LONCAPA::map::resources[$idx]=$_; - $LONCAPA::map::order[$#LONCAPA::map::order+1]=$idx; - } -# Store the changed version - ($errtext,$fatal)=&storemap($coursenum,$coursedom, - $folder.'.'.$container); - if ($fatal) { - $r->print(''.$errtext.'
'); - return; - } - } else { - $r->print(''.&mt('No map selected.').'
'); - - } - } - &log_differences($plain); + if ($env{'form.loadmap'}) { + if ($env{'form.importmap'}=~/\w/) { + foreach my $res (&Apache::lonsequence::attemptread(&Apache::lonnet::filelocation('',$env{'form.importmap'}))) { + my ($title,$url,$ext,$type)=split(/\:/,$res); + my $idx=&LONCAPA::map::getresidx($url); + $LONCAPA::map::resources[$idx]=$res; + $LONCAPA::map::order[$#LONCAPA::map::order+1]=$idx; + } + ($errtext,$fatal)=&storemap($coursenum,$coursedom, + $folder.'.'.$container); + return $errtext if ($fatal); + } else { + $r->print(''.&mt('No map selected.').'
'); + + } } + &log_differences($plain); + } # ---------------------------------------------------------------- End commands # ---------------------------------------------------------------- Print screen - my $idx=0; - my $shown=0; - if (($ishidden) || ($isencrypted) || ($randompick>=0)) { - $r->print(''.&mt('Parameters').':
'.&mt('Caution: this folder is set to randomly pick a subset of resources. Adding or removing resources from this folder will change the set of resources that the students see, resulting in spurious or missing credit for completed problems, not limited to ones you modify. Do not modify the contents of this folder if it is in active student use.').'
'); - } - $r->print(''.&mt('Currently no documents.').' |
'.&mt('Parameters').':
'.&mt('Caution: this folder is set to randomly pick a subset of resources. Adding or removing resources from this folder will change the set of resources that the students see, resulting in spurious or missing credit for completed problems, not limited to ones you modify. Do not modify the contents of this folder if it is in active student use.').'
'); + } + if ($is_random_order) { + $r->print(''.&mt('Caution: this folder is set to randomly order its contents. Adding or removing resources from this folder will change the order of resources shown.').'
'); + } + $r->print(''.&mt('Currently no documents.').' |
+ |
![]() |
+ |
![]() |
'); + $r->print(' | ||||||||||||||||||||||
');
# ''.&mt('Main Course Documents'). # ($allowed?' '.$help{'Main_Course_Documents'}:'').''); my $folder=$env{'form.folder'}; if ($folder eq '' || $folder eq 'supplemental') { $folder='default'; $env{'form.folderpath'}='default&'.&escape(&mt('Main '.$type.' Documents')); + $uploadtag = ''; } my $postexec=''; if ($folder eq 'default') { - $r->print(''); + $r->print(''); } else { #$postexec='self.close();'; } $hadchanges=0; - &editor($r,$coursenum,$coursedom,$folder,$allowed,$upload_output); + my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed, + $upload_output,$type); + if ($error) { + $r->print(''.$error.' '); + } if ($hadchanges) { &mark_hash_old() } @@ -2752,54 +2807,56 @@ ENDCOURSEVERIFY } my $readfile='/uploaded/'.$coursedom.'/'.$coursenum.'/'.$folder.'.'.$container; $r->print(<$lt{'uplm'} |
-$lt{'impp'} |
-$lt{'spec'} |
+
|
'. -&mt('It is recommended that you use an up-to-date virus scanner before handling this file.')."