--- loncom/lonnet/perl/lonnet.pm 2006/06/07 18:41:57 1.745 +++ loncom/lonnet/perl/lonnet.pm 2006/06/07 21:15:10 1.746 @@ -1,7 +1,7 @@ # The LearningOnline Network # TCP networking package # -# $Id: lonnet.pm,v 1.745 2006/06/07 18:41:57 raeburn Exp $ +# $Id: lonnet.pm,v 1.746 2006/06/07 21:15:10 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -4555,18 +4555,13 @@ sub is_locked { $env{'user.domain'},$env{'user.name'}); my ($tmp)=keys(%locked); if ($tmp=~/^error:/) { undef(%locked); } - if (ref($locked{$file_name}) eq 'ARRAY') { $is_locked = 'false'; foreach my $entry (@{$locked{$file_name}}) { if (ref($entry) eq 'ARRAY') { - if ($$entry[0] eq 'access' || $$entry[0] eq 'accesscount') { - next; - } else { - $is_locked = 'true'; - last; - } + $is_locked = 'true'; + last; } } } else { @@ -4660,6 +4655,7 @@ sub files_not_in_path { #----------------------------------------------Get portfolio file permissions sub get_portfile_permissions { + # returns a reference to a hash containing contents of file_permissions.db my ($domain,$user) = @_; my %current_permissions = &dump('file_permissions',$domain,$user); my ($tmp)=keys(%current_permissions); @@ -4670,6 +4666,20 @@ sub get_portfile_permissions { #---------------------------------------------Get portfolio file access controls sub get_access_controls { + # returns a hash containing access control information retrieved from + # file_permissions.db. The hash contains key=value pairs where key is + # the control type, end date and start date, in the form type_end_start + # and value is a string containing access control settings (in XML), + # + # Internally access_controls are stored in file_permissions.db in an + # array of arrays and a hash, where arrays are locks set when a portfolio + # file has been uploaded to an essayresponse problem in a course, and + # the hash contains other data. Two keys are currently defined in the hash: + # access and accesscount. The value for accesscount is a scalar - equal to + # the next number to use as the first part of an access control key + # when defining a new control. The value for access is an anonymous hash + # where keys are access controls and values are settings. + # my ($current_permissions,$group,$file) = @_; my @access_checks = (); my %access; @@ -4687,15 +4697,8 @@ sub get_access_controls { } if (ref($value) eq "ARRAY") { foreach my $stored_what (@{$value}) { - if (ref($stored_what) eq 'ARRAY') { - if ($$stored_what[0] eq 'access') { - if (!defined($access{$file_name})) { - %{$access{$file_name}} = (); - } - $access{$file_name}{$$stored_what[1]}=$$stored_what[2]; - } else { - next; - } + if (ref($stored_what) eq 'HASH') { + $access{$file_name} = $$stored_what{'access'}; } } } @@ -4720,13 +4723,10 @@ sub get_marked_as_readonly { if (ref($value) eq "ARRAY"){ foreach my $stored_what (@{$value}) { my $cmp2=$stored_what; - if (ref($stored_what)) { - if ($$stored_what[0] eq 'access' || - $$stored_what[0] eq 'accesscount') { - next; - } else { - $cmp2=join('',@{$stored_what}); - } + if (ref($stored_what eq 'HASH')) { + next; + } elsif (ref($stored_what eq 'ARRAY')) { + $cmp2=join('',@{$stored_what}); } if ($cmp1 eq $cmp2) { push(@readonly_files, $file_name); @@ -4754,16 +4754,12 @@ sub get_marked_as_readonly_hash { if (ref($value) eq "ARRAY"){ foreach my $stored_what (@{$value}) { if (ref($stored_what) eq 'ARRAY') { - if ($$stored_what[0] eq 'access' || - $$stored_what[0] eq 'accesscount') { - next; + if ($stored_what eq $what) { + $readonly_files{$file_name} = 'locked'; + } elsif (!defined($what)) { + $readonly_files{$file_name} = 'locked'; } } - if ($stored_what eq $what) { - $readonly_files{$file_name} = 'locked'; - } elsif (!defined($what)) { - $readonly_files{$file_name} = 'locked'; - } } } } @@ -4789,16 +4785,13 @@ sub unmark_as_readonly { if (ref($current_locks) eq "ARRAY"){ foreach my $locker (@{$current_locks}) { my $compare=$locker; - if (ref($locker) eq 'ARRAY') { - if ($$locker[0] eq 'access' || - $$locker[0] eq 'accesscount') { - push(@new_locks,$locker); - next; - } + if (!ref($locker) eq 'ARRAY') { + push(@new_locks,$locker); + } else { $compare=join('',@{$locker}); - } - if ($compare ne $symb_crs) { - push(@new_locks, $locker); + if ($compare ne $symb_crs) { + push(@new_locks, $locker); + } } } if (scalar(@new_locks) > 0) {