--- loncom/interface/londocs.pm 2007/07/13 23:08:07 1.291 +++ loncom/interface/londocs.pm 2007/08/31 20:27:54 1.297 @@ -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.297 2007/08/31 20:27:54 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -963,6 +963,7 @@ sub breadcrumbs { my $randompick=-1; my $isencrypted=0; my $ishidden=0; + my $is_random_order=0; while (@folders) { my $folder=shift(@folders); my $foldername=shift(@folders); @@ -970,16 +971,17 @@ sub breadcrumbs { $folderpath.=$folder.'&'.$foldername; my $url='/adm/coursedocs?folderpath='. &escape($folderpath); - my $name=&unescape($foldername); -# randompick number, hidden, encrypted is appended with ":"s to the foldername - $name=~s/\:(\d*)\:(\w*)\:(\w*)$//; - if ($1 ne '') { + my $name=&unescape($foldername); +# randompick number, hidden, encrypted, random order, is appended with ":"s to the foldername + $name=~s/\:(\d*)\:(\w*)\:(\w*):(\d*)$//; + if ($1 ne '') { $randompick=$1; } else { $randompick=-1; } if ($2) { $ishidden=1; } if ($3) { $isencrypted=1; } + if ($4 ne '') { $is_random_order = 1; } &Apache::lonhtmlcommon::add_breadcrumb( {'href'=>$url.$cpinfo, 'title'=>$name, @@ -991,7 +993,7 @@ sub breadcrumbs { } $plain=~s/\>\;\s*$//; return (&Apache::lonhtmlcommon::breadcrumbs(undef,undef,0,'nohelp', - 'LC_docs_path'),$randompick,$ishidden,$isencrypted,$plain); + 'LC_docs_path'),$randompick,$ishidden,$isencrypted,$plain,$is_random_order); } sub log_docs { @@ -1082,6 +1084,7 @@ sub docs_change_log { my %lt=('hiddenresource' => 'Resources hidden', 'encrypturl' => 'URL hidden', 'randompick' => 'Randomly pick', + 'randomorder' => 'Randomly ordered', 'set' => 'set to', 'del' => 'deleted'); $r->print(&Apache::loncommon::display_filter(). @@ -1164,7 +1167,7 @@ sub docs_change_log { $r->print(''); if ($docslog{$id}{'logentry'}{'parameter_res'}) { $r->print(&LONCAPA::map::qtescape((split(/\:/,$docslog{$id}{'logentry'}{'parameter_res'}))[0]).':
'.$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); + ($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 +2755,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 +2765,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); + if ($error) { + $r->print(''.$error.' '); + } if ($hadchanges) { &mark_hash_old() } @@ -2998,6 +2966,15 @@ value="Group Files=/adm/$coursedom/$cour $help{'Group Files'} +ENDFORM } if ($env{'form.pagepath'}) { @@ -3039,7 +3016,10 @@ ENDBLOCK $env{'form.folderpath'}='supplemental&'. &escape(&mt('Supplemental '.$type.' Documents')); } - &editor($r,$coursenum,$coursedom,$folder,$allowed); + my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed); + if ($error) { + $r->print(' '.$error.' '); + } if ($allowed) { my $folderseq= '/uploaded/'.$coursedom.'/'.$coursenum.'/supplemental_'.time. |