--- loncom/interface/loncommon.pm 2010/11/28 00:04:05 1.987 +++ loncom/interface/loncommon.pm 2010/12/30 21:49:15 1.992 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # a pile of common routines # -# $Id: loncommon.pm,v 1.987 2010/11/28 00:04:05 raeburn Exp $ +# $Id: loncommon.pm,v 1.992 2010/12/30 21:49:15 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -3421,6 +3421,7 @@ sub get_previous_attempt { my ($ign,@parts) = split(/\./,$key); if ($#parts > 0) { my $data=$parts[-1]; + next if ($data eq 'foilorder'); pop(@parts); if ($data eq 'type') { unless ($showsurv) { @@ -3457,6 +3458,7 @@ sub get_previous_attempt { ''.&mt('Transaction [_1]',$version).''; if (@hidden) { foreach my $key (sort(keys(%lasthash))) { + next if ($key =~ /\.foilorder$/); my $hide; foreach my $id (@hidden) { if ($key =~ /^\Q$id\E/) { @@ -3485,6 +3487,7 @@ sub get_previous_attempt { } } else { foreach my $key (sort(keys(%lasthash))) { + next if ($key =~ /\.foilorder$/); my $value = &format_previous_attempt_value($key, $returnhash{$version.':'.$key}); $prevattempts.=''.$value.' '; @@ -3496,6 +3499,7 @@ sub get_previous_attempt { my @currhidden = keys(%lasthidden); $prevattempts.=&start_data_table_row().''.&mt('Current').''; foreach my $key (sort(keys(%lasthash))) { + next if ($key =~ /\.foilorder$/); if (%typeparts) { my $hidden; foreach my $id (@currhidden) { @@ -3551,6 +3555,29 @@ sub format_previous_attempt_value { $value = &Apache::lonlocal::locallocaltime($value); } elsif (ref($value) eq 'ARRAY') { $value = '('.join(', ', @{ $value }).')'; + } elsif ($key =~ /answerstring$/) { + my %answers = &Apache::lonnet::str2hash($value); + my @anskeys = sort(keys(%answers)); + if (@anskeys == 1) { + my $answer = $answers{$anskeys[0]}; + if ($answer =~ m{\Q\0\E}) { + $answer =~ s{\Q\0\E}{, }g; + } + my $tag_internal_answer_name = 'INTERNAL'; + if ($anskeys[0] eq $tag_internal_answer_name) { + $value = $answer; + } else { + $value = $anskeys[0].'='.$answer; + } + } else { + foreach my $ans (@anskeys) { + my $answer = $answers{$ans}; + if ($answer =~ m{\Q\0\E}) { + $answer =~ s{\Q\0\E}{, }g; + } + $value .= $ans.'='.$answer.'
';; + } + } } else { $value = &unescape($value); } @@ -8730,7 +8757,7 @@ sub upload_embedded { if ($context eq 'portfolio') { $output .= '

'.&mt('or').'

'; } elsif ($context eq 'testbank') { - $output .= '

'.&mt('Or [_1]continue[_2] the testbank import without modifying the references(s).','','').'

'; + $output .= '

'.&mt('Or [_1]continue[_2] the testbank import without modifying the reference(s).','','').'

'; $returnflag = 'modify_orightml'; } } @@ -8920,7 +8947,7 @@ sub check_for_upload { &mt('Unable to upload [_1]. (size = [_2] bytes)', ''.$fname.'', $filesize).'
'. - &mt('Either the file you uploaded was empty, or your web browser was unable to read its contents.').'
'; + &mt('Either the file you attempted to upload was empty, or your web browser was unable to read its contents.').'
'; ''; return ('zero_bytes',$msg); } @@ -8930,6 +8957,11 @@ sub check_for_upload { $getpropath); my $found_file = 0; my $locked_file = 0; + my @lockers; + my $navmap; + if ($env{'request.course.id'}) { + $navmap = Apache::lonnavmaps::navmap->new(); + } foreach my $line (@dir_list) { my ($file_name,$rest)=split(/\&/,$line,2); if ($file_name eq $fname){ @@ -8938,8 +8970,28 @@ sub check_for_upload { $file_name = $group.$file_name; } $found_file = 1; - if (&Apache::lonnet::is_locked($file_name,$udom,$uname) eq 'true') { - $locked_file = 1; + if (&Apache::lonnet::is_locked($file_name,$udom,$uname,\@lockers) eq 'true') { + foreach my $lock (@lockers) { + if (ref($lock) eq 'ARRAY') { + my ($symb,$crsid) = @{$lock}; + if ($crsid eq $env{'request.course.id'}) { + if (ref($navmap)) { + my $res = $navmap->getBySymb($symb); + foreach my $part (@{$res->parts()}) { + my ($slot_status,$slot_time,$slot_name)=$res->check_for_slot($part); + unless (($slot_status == $res->RESERVED) || + ($slot_status == $res->RESERVED_LOCATION)) { + $locked_file = 1; + } + } + } else { + $locked_file = 1; + } + } else { + $locked_file = 1; + } + } + } } else { my @info = split(/\&/,$rest); my $currsize = $info[6]/1000; @@ -11244,6 +11296,36 @@ sub clean_symb { return ($symb,$enc); } +sub build_release_hashes { + my ($checkparms,$checkresponsetypes,$checkcrstypes,$anonsurvey,$randomizetry) = @_; + return unless((ref($checkparms) eq 'HASH') && (ref($checkresponsetypes) eq 'HASH') && + (ref($checkcrstypes) eq 'HASH') && (ref($anonsurvey) eq 'HASH') && + (ref($randomizetry) eq 'HASH')); + foreach my $key (keys(%Apache::lonnet::needsrelease)) { + my ($item,$name,$value) = split(/:/,$key); + if ($item eq 'parameter') { + if (ref($checkparms->{$name}) eq 'ARRAY') { + unless(grep(/^\Q$name\E$/,@{$checkparms->{$name}})) { + push(@{$checkparms->{$name}},$value); + } + } else { + push(@{$checkparms->{$name}},$value); + } + } elsif ($item eq 'resourcetag') { + if ($name eq 'responsetype') { + $checkresponsetypes->{$value} = $Apache::lonnet::needsrelease{$key} + } + } elsif ($item eq 'course') { + if ($name eq 'crstype') { + $checkcrstypes->{$value} = $Apache::lonnet::needsrelease{$key}; + } + } + } + ($anonsurvey->{major},$anonsurvey->{minor}) = split(/\./,$Apache::lonnet::needsrelease{'parameter:type:anonsurvey'}); + ($randomizetry->{major},$randomizetry->{minor}) = split(/\./,$Apache::lonnet::needsrelease{'parameter:type:randomizetry'}); + return; +} + =pod =back