Diff for /loncom/lonnet/perl/lonnet.pm between versions 1.744 and 1.745

version 1.744, 2006/06/05 20:09:19 version 1.745, 2006/06/07 18:41:57
Line 4556  sub is_locked { Line 4556  sub is_locked {
     my ($tmp)=keys(%locked);      my ($tmp)=keys(%locked);
     if ($tmp=~/^error:/) { undef(%locked); }      if ($tmp=~/^error:/) { undef(%locked); }
   
       
     if (ref($locked{$file_name}) eq 'ARRAY') {      if (ref($locked{$file_name}) eq 'ARRAY') {
         $is_locked = 'true';          $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;
                  }
              }
          }
     } else {      } else {
         $is_locked = 'false';          $is_locked = 'false';
     }      }
Line 4646  sub files_not_in_path { Line 4657  sub files_not_in_path {
     return (@return_files);      return (@return_files);
 }  }
   
 #--------------------------------------------------------------Get Marked as Read Only  #----------------------------------------------Get portfolio file permissions
   
   
 sub get_marked_as_readonly {  sub get_portfile_permissions {
     my ($domain,$user,$what) = @_;      my ($domain,$user) = @_;
     my %current_permissions = &dump('file_permissions',$domain,$user);      my %current_permissions = &dump('file_permissions',$domain,$user);
     my ($tmp)=keys(%current_permissions);      my ($tmp)=keys(%current_permissions);
     if ($tmp=~/^error:/) { undef(%current_permissions); }      if ($tmp=~/^error:/) { undef(%current_permissions); }
       return \%current_permissions;
   }
   
   #---------------------------------------------Get portfolio file access controls
   
   sub get_access_controls  {
       my ($current_permissions,$group,$file) = @_;
       my @access_checks = ();
       my %access; 
       if (defined($file)) {
           @access_checks = ($file);
       } else {
           @access_checks = keys(%{$current_permissions});
       }
       foreach my $file_name (@access_checks) {
           my $value = $$current_permissions{$file_name};
           if (defined($group)) {
               if ($file_name !~ m-^\Q$group\E/-) {
                   next;
               }
           }
           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;
                       }
                   }
               }
           }
       }
       return %access;
   }
   
   #------------------------------------------------------Get Marked as Read Only
   
   sub get_marked_as_readonly {
       my ($domain,$user,$what,$group) = @_;
       my $current_permissions = &get_portfile_permissions($domain,$user);
     my @readonly_files;      my @readonly_files;
     my $cmp1=$what;      my $cmp1=$what;
     if (ref($what)) { $cmp1=join('',@{$what}) };      if (ref($what)) { $cmp1=join('',@{$what}) };
     while (my ($file_name,$value) = each(%current_permissions)) {      while (my ($file_name,$value) = each(%{$current_permissions})) {
           if (defined($group)) {
               if ($file_name !~ m-^\Q$group\E/-) {
                   next;
               }
           }
         if (ref($value) eq "ARRAY"){          if (ref($value) eq "ARRAY"){
             foreach my $stored_what (@{$value}) {              foreach my $stored_what (@{$value}) {
                 my $cmp2=$stored_what;                  my $cmp2=$stored_what;
                 if (ref($stored_what)) { $cmp2=join('',@{$stored_what}) };                  if (ref($stored_what)) {
                       if ($$stored_what[0] eq 'access' || 
                           $$stored_what[0] eq 'accesscount') {
                           next;
                       } else {
                           $cmp2=join('',@{$stored_what});
                       }
                   }
                 if ($cmp1 eq $cmp2) {                  if ($cmp1 eq $cmp2) {
                     push(@readonly_files, $file_name);                      push(@readonly_files, $file_name);
                       last;
                 } elsif (!defined($what)) {                  } elsif (!defined($what)) {
                     push(@readonly_files, $file_name);                      push(@readonly_files, $file_name);
                       last;
                 }                  }
             }              }
         }           }
     }      }
     return @readonly_files;      return @readonly_files;
 }  }
 #-----------------------------------------------------------Get Marked as Read Only Hash  #-----------------------------------------------------------Get Marked as Read Only Hash
   
 sub get_marked_as_readonly_hash {  sub get_marked_as_readonly_hash {
     my ($domain,$user,$what) = @_;      my ($current_permissions,$group,$what) = @_;
     my %current_permissions = &dump('file_permissions',$domain,$user);  
     my ($tmp)=keys(%current_permissions);  
     if ($tmp=~/^error:/) { undef(%current_permissions); }  
   
     my %readonly_files;      my %readonly_files;
     while (my ($file_name,$value) = each(%current_permissions)) {      while (my ($file_name,$value) = each(%{$current_permissions})) {
           if (defined($group)) {
               if ($file_name !~ m-^\Q$group\E/-) {
                   next;
               }
           }
         if (ref($value) eq "ARRAY"){          if (ref($value) eq "ARRAY"){
             foreach my $stored_what (@{$value}) {              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) {                  if ($stored_what eq $what) {
                     $readonly_files{$file_name} = 'locked';                      $readonly_files{$file_name} = 'locked';
                 } elsif (!defined($what)) {                  } elsif (!defined($what)) {
Line 4699  sub get_marked_as_readonly_hash { Line 4774  sub get_marked_as_readonly_hash {
 sub unmark_as_readonly {  sub unmark_as_readonly {
     # unmarks $file_name (if $file_name is defined), or all files locked by $what       # unmarks $file_name (if $file_name is defined), or all files locked by $what 
     # for portfolio submissions, $what contains [$symb,$crsid]       # for portfolio submissions, $what contains [$symb,$crsid] 
     my ($domain,$user,$what,$file_name) = @_;      my ($domain,$user,$what,$file_name,$group) = @_;
     my $symb_crs = $what;      my $symb_crs = $what;
     if (ref($what)) { $symb_crs=join('',@$what); }      if (ref($what)) { $symb_crs=join('',@$what); }
     my %current_permissions = &dump('file_permissions',$domain,$user);      my %current_permissions = &dump('file_permissions',$domain,$user,$group);
     my ($tmp)=keys(%current_permissions);      my ($tmp)=keys(%current_permissions);
     if ($tmp=~/^error:/) { undef(%current_permissions); }      if ($tmp=~/^error:/) { undef(%current_permissions); }
     my @readonly_files = &get_marked_as_readonly($domain,$user,$what);      my @readonly_files = &get_marked_as_readonly($domain,$user,$what,$group);
     foreach my $file (@readonly_files) {      foreach my $file (@readonly_files) {
  if (defined($file_name) && ($file_name ne $file)) { next; }   if (defined($file_name) && ($file_name ne $file)) { next; }
  my $current_locks = $current_permissions{$file};   my $current_locks = $current_permissions{$file};
Line 4714  sub unmark_as_readonly { Line 4789  sub unmark_as_readonly {
         if (ref($current_locks) eq "ARRAY"){          if (ref($current_locks) eq "ARRAY"){
             foreach my $locker (@{$current_locks}) {              foreach my $locker (@{$current_locks}) {
                 my $compare=$locker;                  my $compare=$locker;
                 if (ref($locker)) { $compare=join('',@{$locker}) };                  if (ref($locker) eq 'ARRAY') {
                       if ($$locker[0] eq 'access' || 
                           $$locker[0] eq 'accesscount') {
                           push(@new_locks,$locker);
                           next;
                       }   
                       $compare=join('',@{$locker});
                   }
                 if ($compare ne $symb_crs) {                  if ($compare ne $symb_crs) {
                     push(@new_locks, $locker);                      push(@new_locks, $locker);
                 }                  }

Removed from v.1.744  
changed lines
  Added in v.1.745


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>