Diff for /loncom/lonnet/perl/lonnet.pm between versions 1.680 and 1.683

version 1.680, 2005/11/17 16:58:23 version 1.683, 2005/11/22 00:01:53
Line 2693  sub set_userprivs { Line 2693  sub set_userprivs {
     my $author=0;      my $author=0;
     my $adv=0;      my $adv=0;
     my %grouproles = ();      my %grouproles = ();
     my %groups_checked = ();  
     if (keys(%{$allgroups}) > 0) {      if (keys(%{$allgroups}) > 0) {
         foreach my $role (keys %{$allroles}) {          foreach my $role (keys %{$allroles}) {
             my ($trole,$area);              my ($trole,$area,$sec,$extendedarea);
             if ($role =~ m|^(\w+)\.(/\w+/\w+)|) {              if ($role =~ m|^(\w+)\.(/\w+/\w+)(/?\w*)|) {
                 $trole = $1;                  $trole = $1;
                 $area = $2;                  $area = $2;
                 unless ($groups_checked{$area}) {                  $sec = $3;
                     $groups_checked{$area} = 1;                  $extendedarea = $area.$sec;
                     if (exists($$allgroups{$area})) {                  if (exists($$allgroups{$area})) {
                         foreach my $group (keys(%{$$allgroups{$area}})) {                      foreach my $group (keys(%{$$allgroups{$area}})) {
                             my $spec = $trole.'.'.$area;                          my $spec = $trole.'.'.$extendedarea;
                             $grouproles{$spec.'.'.$area.'/'.$group} =                           $grouproles{$spec.'.'.$area.'/'.$group} = 
                                                     $$allgroups{$area}{$group};                                                  $$allgroups{$area}{$group};
                         }  
                     }                      }
                 }                  }
             }              }
Line 3705  sub auto_instcode_format { Line 3703  sub auto_instcode_format {
 # ------------------------------------------------------- Course Group routines  # ------------------------------------------------------- Course Group routines
   
 sub get_coursegroups {  sub get_coursegroups {
     my ($cdom,$cnum,$curr_groups,$group) = @_;      my ($cdom,$cnum,$group) = @_;
     my $numgroups = 0;      return(&dump('coursegroups',$cdom,$cnum,$group));
     %{$curr_groups} = &dump('coursegroups',$cdom,$cnum,$group);  
     my ($tmp)=keys(%{$curr_groups});  
     if ($tmp eq 'error: 2 tie(GDBM) Failed while attempting dump') {  
         my %emptyhash = ();  
         if (&put('coursegroups',\%emptyhash,$cdom,$cnum) eq 'ok') {  
             %{$curr_groups} = &dump('coursegroups',$cdom,$cnum,$group);  
             $tmp=keys(%{$curr_groups});  
         }  
     }  
     if ($tmp=~/^error:/) {  
         &logthis('Error retrieving groups: '.$tmp.' in '.$cnum.':'.$cdom);  
     } else {  
         my @groups = keys(%{$curr_groups});  
         $numgroups = @groups;  
     }  
     return $numgroups;  
 }  }
   
 sub modify_coursegroup {  sub modify_coursegroup {
Line 3745  sub modify_coursegroup_membership { Line 3727  sub modify_coursegroup_membership {
     return $result;      return $result;
 }  }
   
   sub get_active_groups {
       my ($udom,$uname,$cdom,$cnum) = @_;
       my $now = time;
       my %groups = ();
       foreach my $key (keys(%env)) {
           if ($key =~ m-user\.role\.gr\./([^/]+)/([^/]+)/(\w+)$-) {
               my ($start,$end) = split(/\./,$env{$key});
               if (($end!=0) && ($end<$now)) { next; }
               if (($start!=0) && ($start>$now)) { next; }
               if ($1 eq $cdom && $2 eq $cnum) {
                   $groups{$3} = $env{$key} ;
               }
           }
       }
       return %groups;
   }
   
   sub get_group_membership {
       my ($cdom,$cnum,$group) = @_;
       return(&dump('groupmembership',$cdom,$cnum,$group));
   }
   
   sub get_users_groups {
       my ($udom,$uname,$courseid) = @_;
       my $cachetime=1800;
       $courseid=~s/\_/\//g;
       $courseid=~s/^(\w)/\/$1/;
   
       my $hashid="$udom:$uname:$courseid";
       my ($result,$cached)=&is_cached_new('getgroups',$hashid);
       if (defined($cached)) { return $result; }
   
       my %roleshash = &dump('roles',$udom,$uname,$courseid);
       my ($tmp) = keys(%roleshash);
       if ($tmp=~/^error:/) {
           &logthis('Error retrieving roles: '.$tmp.' for '.$uname.':'.$udom);
           return '';
       } else {
           my $grouplist;
           foreach my $key (keys %roleshash) {
               if ($key =~ /^\Q$courseid\E\/(\w+)\_gr$/) {
                   unless ($roleshash{$key} =~ /_1_1$/) {   # deleted membership
                       $grouplist .= $1.':';
                   }
               }
           }
           $grouplist =~ s/:$//;
           return &do_cache_new('getgroups',$hashid,$grouplist,$cachetime);
       }
   }
   
   sub devalidate_getgroups_cache {
       my ($udom,$uname,$cdom,$cnum)=@_;
       my $courseid = $cdom.'_'.$cnum;
       $courseid=~s/\_/\//g;
       $courseid=~s/^(\w)/\/$1/;
       my $hashid="$udom:$uname:$courseid";
       &devalidate_cache_new('getgroups',$hashid);
   }
   
 # ------------------------------------------------------------------ Plain Text  # ------------------------------------------------------------------ Plain Text
   
 sub plaintext {  sub plaintext {

Removed from v.1.680  
changed lines
  Added in v.1.683


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