--- loncom/lonnet/perl/lonnet.pm 2004/11/06 01:11:38 1.562 +++ loncom/lonnet/perl/lonnet.pm 2004/11/08 18:04:17 1.563 @@ -1,7 +1,7 @@ # The LearningOnline Network # TCP networking package # -# $Id: lonnet.pm,v 1.562 2004/11/06 01:11:38 albertel Exp $ +# $Id: lonnet.pm,v 1.563 2004/11/08 18:04:17 banghart Exp $ # # Copyright Michigan State University Board of Trustees # @@ -3798,12 +3798,18 @@ sub mark_as_readonly { sub get_marked_as_readonly { my ($domain,$user,$what) = @_; my %current_permissions = &Apache::lonnet::dump('file_permissions',$domain,$user); - my @readonly_files = []; - while ((my $file_name, my $value) = each %current_permissions) { + my @readonly_files; + while (my ($file_name,$value) = each(%current_permissions)) { + &logthis("found $file_name"); if (ref($value) eq "ARRAY"){ + &logthis("found array"); foreach my $stored_what (@{$value}) { if ($stored_what eq $what) { push(@readonly_files, $file_name); + &logthis("defined pushed $file_name"); + } elsif (!defined($what)) { + push(@readonly_files, $file_name); + &logthis("undef pushed $file_name"); } } } @@ -3820,7 +3826,23 @@ sub unmark_as_readonly { my %current_permissions = &Apache::lonnet::dump('file_permissions',$domain,$user); my @readonly_files = &Apache::lonnet::get_marked_as_readonly($domain,$user,$what); foreach my $file(@readonly_files){ - + my $current_locks = $current_permissions{$file}; + my @new_locks; + my @del_keys; + if (ref($current_locks) eq "ARRAY"){ + foreach my $locker (@{$current_locks}) { + unless ($locker eq $what) { + push(@new_locks, $what); + } + } + if (@new_locks > 0) { + $current_permissions{$file} = \@new_locks; + } else { + push(@del_keys, $file); + &Apache::lonnet::del('file_permissions',\@del_keys, $domain, $user); + delete $current_permissions{$file}; + } + } } &Apache::lonnet::put('file_permissions',\%current_permissions,$domain,$user); return;