--- loncom/interface/londocs.pm 2007/07/13 23:08:07 1.291 +++ loncom/interface/londocs.pm 2008/12/10 21:46:58 1.318 @@ -1,7 +1,7 @@ # The LearningOnline Network # Documents # -# $Id: londocs.pm,v 1.291 2007/07/13 23:08:07 albertel Exp $ +# $Id: londocs.pm,v 1.318 2008/12/10 21:46:58 kaisler 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'}) { - my ($errtext,$fatal) = - &do_paste_from_buffer($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 (&handle_edit_cmd()) { + ($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.'.$container); + return $errtext if ($fatal); + } +# Group import/search + 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]); } } - $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)=&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 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); - if ($fatal) { - $r->print(''.$errtext.'
'); - return; - } - } -# Group import/search - 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]); - } - } -# Store the changed version - ($errtext,$fatal)=&group_import($coursenum, $coursedom, $folder, - $container,'londocs',@imports); - if ($fatal) { - $r->print(''.$errtext.'
'); - return; - } - } -# 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); + 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.').' |
');
# ''.&mt('Main Course Documents'). @@ -2793,6 +2779,8 @@ ENDCOURSEVERIFY if ($folder eq '' || $folder eq 'supplemental') { $folder='default'; $env{'form.folderpath'}='default&'.&escape(&mt('Main '.$type.' Documents')); + $uploadtag = ''; } my $postexec=''; if ($folder eq 'default') { @@ -2801,7 +2789,11 @@ ENDCOURSEVERIFY #$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() } @@ -2835,7 +2827,7 @@ $uploadtag@@ -2915,7 +2907,7 @@ value="$lt{'newp'}" />$help{'Adding_Page |