Diff for /loncom/interface/longroup.pm between versions 1.8 and 1.18

version 1.8, 2006/07/02 17:08:42 version 1.18, 2009/01/27 15:59:30
Line 40  Input: Line 40  Input:
 1. Optional course domain  1. Optional course domain
 2. Optional course number  2. Optional course number
 3. Optional group name  3. Optional group name
   4. Optional namespace
   
 Course domain and number will be taken from user's  Course domain and number will be taken from user's
 environment if not supplied. Optional group name will   environment if not supplied. Optional group name will 
 be passed to lonnet::get_coursegroups() as a regexp to  be passed to lonnet function as a regexp to
 use in the call to the dump function.  use in the call to the dump function.  Optional namespace
   will determine whether information is retrieved about current 
   groups (default) or deleted groups (namespace = deleted_groups). 
   
 Output  Output
 Returns hash of groups in the course (subject to the  Returns hash of groups in a course (subject to the
 optional group name filter). In the hash, the keys are  optional group name filter). In the hash, the keys are
 group names, and their corresponding values  group names, and their corresponding values
 are scalars containing group information in XML. This  are scalars containing group information in XML. This
Line 55  can be sent to &get_group_settings() to Line 58  can be sent to &get_group_settings() to
   
 Side effects:  Side effects:
 None.  None.
   
 =cut  =cut
   
 ###############################################  ###############################################
   
 sub coursegroups {  sub coursegroups {
     my ($cdom,$cnum,$group) = @_;      my ($cdom,$cnum,$group,$namespace) = @_;
     if (!defined($cdom) || !defined($cnum)) {      if (!defined($cdom) || !defined($cnum)) {
         my $cid =  $env{'request.course.id'};          my $cid =  $env{'request.course.id'};
   
Line 69  sub coursegroups { Line 73  sub coursegroups {
         $cdom = $env{'course.'.$cid.'.domain'};          $cdom = $env{'course.'.$cid.'.domain'};
         $cnum = $env{'course.'.$cid.'.num'};          $cnum = $env{'course.'.$cid.'.num'};
     }      }
     my %curr_groups = &Apache::lonnet::get_coursegroups($cdom,$cnum,$group);      if (!defined($namespace)) {
     if (my $tmp = &Apache::lonnet::error(%curr_groups)) {          $namespace = 'coursegroups';
  undef(%curr_groups);      } 
         &Apache::lonnet::logthis('Error retrieving groups: '.$tmp.' in '.$cnum.':'.$cdom);      my %groups =  &Apache::lonnet::get_coursegroups($cdom,$cnum,$group,
                                                       $namespace);
       if (my $tmp = &Apache::lonnet::error(%groups)) {
    undef(%groups);
           &Apache::lonnet::logthis('Error retrieving groups: '.$tmp.' in '.$cnum.':'.$cdom.' - '.$namespace);
       }
       if (defined($groups{'group_allfolders'."\0".'locked_folder'})) {
           delete($groups{'group_allfolders'."\0".'locked_folder'}); 
     }      }
     return %curr_groups;      return %groups;
 }  }
   
 ###############################################  ###############################################
   
   =pod 
   
 =item get_group_settings  =item get_group_settings
   
 Uses TokeParser to extract group information from the  Uses TokeParser to extract group information from the
Line 186  Input: Line 199  Input:
 4. Role  4. Role
 5. End date of role  5. End date of role
 6. Start date of role  6. Start date of role
   7. Selfenroll
   8. Context
   
 Checks to see if role for which assignment is being made is in a course.  Checks to see if role for which assignment is being made is in a course.
 If so, gathers information about auto-group population settings for  If so, gathers information about auto-group population settings for
Line 201  and would trigger membership in teh same Line 216  and would trigger membership in teh same
 If role is being added, will add any group memberships specified  If role is being added, will add any group memberships specified
 for auto-group population, unless use is already a group member.  for auto-group population, unless use is already a group member.
 Uses default group privileges and default start and end group access  Uses default group privileges and default start and end group access
 times.   times.
   
   Flag for selfenroll (value of 1), and context (auto, updatenow, 
   automated, course, domain etc.) can be used to log the reason for
   the role change.     
   
 Output  Output
 None  None
Line 214  or expire group membership(s) for a user Line 233  or expire group membership(s) for a user
 =cut  =cut
   
 sub group_changes {  sub group_changes {
     my ($udom,$uname,$url,$role,$origend,$origstart) = @_;      my ($udom,$uname,$url,$role,$origend,$origstart,$selfenroll,$context) = @_;
     my $now = time;      my $now = time;
     my $chgtype;      my $chgtype;
     if ($origend > 0 && $origend <= $now) {      if ($origend > 0 && $origend <= $now) {
Line 326  sub group_changes { Line 345  sub group_changes {
                                                   $add,$uname.':'.$udom,                                                    $add,$uname.':'.$udom,
                                                   $settings{$add}{'enddate'},                                                    $settings{$add}{'enddate'},
                                                   $settings{$add}{'startdate'},                                                    $settings{$add}{'startdate'},
                                                   $group_privs) eq 'ok') {                                                    $group_privs,$selfenroll,$context) eq 'ok') {
                             my %usersettings;                              my %usersettings;
                             $usersettings{$add.':'.$uname.':'.$udom} =                              $usersettings{$add.':'.$uname.':'.$udom} =
                                                                $addgroup{$add};                                                                 $addgroup{$add};
Line 395  sub group_changes { Line 414  sub group_changes {
                                                          $cnum,$drop,                                                           $cnum,$drop,
                                                          $uname.':'.$udom,$now,                                                           $uname.':'.$udom,$now,
                                                          $dropstart{$drop},                                                           $dropstart{$drop},
                                                          $currpriv{$drop})                                                            $currpriv{$drop},
                                                            $selfenroll,$context) 
                                                                      eq 'ok') {                                                                       eq 'ok') {
                                 my %usersettings;                                  my %usersettings;
                                 $usersettings{$drop.':'.$uname.':'.$udom} =                                  $usersettings{$drop.':'.$uname.':'.$udom} =
Line 433  sub get_tool_privs { Line 453  sub get_tool_privs {
     my ($gpterm) = @_;      my ($gpterm) = @_;
     my $toolprivs = {      my $toolprivs = {
         email      => {          email      => {
             sgm => 'Send '.$gpterm.' mail',              sgm => 'Send '.$gpterm.' message',
             sgb => 'Broadcast mail',              sgb => 'Broadcast message',
         },          },
         discussion => {          discussion => {
             cgb => 'Create boards',              cgb => 'Create boards',
             pgd => 'Post',              pgd => 'Post',
             pag => 'Anon. posts',              egp => 'Edit own posts',
             rgi => 'Get identities',              dgp => 'Hide/Delete any post',
             vgb => 'View boards',              vgb => 'View boards',
         },          },
         chat       => {          chat       => {
Line 454  sub get_tool_privs { Line 474  sub get_tool_privs {
             agf => 'Control Access',              agf => 'Control Access',
         },          },
         roster     => {          roster     => {
             vgm => 'View',              vgm => 'Basic Display',
               vmd => 'Detailed Display',
         },          },
         homepage   => {          homepage   => {
             vgh => 'View page',              vgh => 'View page',
Line 474  sub group_memberlist { Line 495  sub group_memberlist {
     my %current = ();      my %current = ();
     my $hastools = 0;      my $hastools = 0;
     my $addtools = 0;      my $addtools = 0;
     my $num_previous = 0;      my %member_nums = (
     my $num_future = 0;                          'previous' => 0,
     my $num_active = 0;                          'future' => 0,
                           'active' => 0,
                         );
     my $now = time;      my $now = time;
     if (keys(%membership) > 0) {      if (keys(%membership) > 0) {
         my %allnames = ();          my %allnames = ();
Line 507  sub group_memberlist { Line 530  sub group_memberlist {
                     if (($end > 0) && ($end < $now)) {                      if (($end > 0) && ($end < $now)) {
                         $current{$user}{changestate} = 'reenable';                          $current{$user}{changestate} = 'reenable';
                         $current{$user}{'status'} = 'previous';                          $current{$user}{'status'} = 'previous';
                         $num_previous++;                          $member_nums{'previous'} ++;
                     } elsif (($start > $now)) {                      } elsif (($start > $now)) {
                         $current{$user}{changestate} = 'activate';                          $current{$user}{changestate} = 'activate';
                         $current{$user}{'status'} = 'future';                          $current{$user}{'status'} = 'future';
                         $num_future ++;                          $member_nums{'future'} ++;
                     } else {                      } else {
                         $current{$user}{changestate} = 'expire';                          $current{$user}{changestate} = 'expire';
                         $current{$user}{'status'} = 'active';                          $current{$user}{'status'} = 'active';
                         $num_active ++;                          $member_nums{'active'} ++;
                     }                      }
                     if (@userprivs > 0) {                      if ((@userprivs > 0) && (ref($fixedprivs) eq 'HASH')) {
                         foreach my $tool (sort(keys(%{$fixedprivs}))) {                          foreach my $tool (sort(keys(%{$fixedprivs}))) {
                             foreach my $priv (keys(%{$$fixedprivs{$tool}})) {                              foreach my $priv (keys(%{$$fixedprivs{$tool}})) {
                                 if (grep/^$priv$/,@userprivs) {                                  if (grep/^$priv$/,@userprivs) {
Line 528  sub group_memberlist { Line 551  sub group_memberlist {
                         }                          }
                         $hastools = 1;                          $hastools = 1;
                     }                      }
                     if (@{$available} > 0) {                      if ((ref($available) eq 'ARRAY') && (@{$available} > 0)) {
                         if (@{$current{$user}{currtools}} > 0) {                          if (@{$current{$user}{currtools}} > 0) {
                             if ("@{$available}" ne "@{$current{$user}{currtools}}") {                              if ("@{$available}" ne "@{$current{$user}{currtools}}") {
                                 foreach my $tool (@{$available}) {                                  foreach my $tool (@{$available}) {
Line 563  sub group_memberlist { Line 586  sub group_memberlist {
             }              }
         }          }
     }      }
     return (\%current,$hastools,$addtools,$num_previous,$num_future,      return (\%current,\%member_nums,$hastools,$addtools);
             $num_active);  
 }  }
   
 ###############################################  ###############################################
Line 611  sub get_bbfolder_url { Line 633  sub get_bbfolder_url {
     my %curr_groups = &coursegroups($cdom,$cnum,$group);      my %curr_groups = &coursegroups($cdom,$cnum,$group);
     my $grpbbmap;      my $grpbbmap;
     if (%curr_groups) {      if (%curr_groups) {
         my %group_info =  &get_group_settings($curr_groups{$group});  
         my $creation = $group_info{'creation'};  
         my $bbfolder = $creation + 1;  
         my $crspath = '/uploaded/'.$cdom.'/'.$cnum.'/';          my $crspath = '/uploaded/'.$cdom.'/'.$cnum.'/';
         $grpbbmap = $crspath.'default_'.$bbfolder.'.sequence';          $grpbbmap = $crspath.'group_boards_'.$group.'.sequence';
     }      }
     return $grpbbmap;      return $grpbbmap;
 }  }
Line 623  sub get_bbfolder_url { Line 642  sub get_bbfolder_url {
 ###############################################  ###############################################
   
 sub get_group_bbinfo {  sub get_group_bbinfo {
     my ($cdom,$cnum,$group) = @_;      my ($cdom,$cnum,$group,$boardurl) = @_;
       my @groupboards = ();
       my %boardshash = ();
     my $navmap = Apache::lonnavmaps::navmap->new();      my $navmap = Apache::lonnavmaps::navmap->new();
     my @groupboards;      if (defined($navmap)) {
     my %boardshash;          my $grpbbmap = &get_bbfolder_url($cdom,$cnum,$group);
     my $grpbbmap = &get_bbfolder_url($cdom,$cnum,$group);          if ($grpbbmap) {
     if ($grpbbmap) {              my $bbfolderres = $navmap->getResourceByUrl($grpbbmap);
         my $bbfolderres = $navmap->getResourceByUrl($grpbbmap);              if ($bbfolderres) {
         if ($bbfolderres) {                  my @boards = $navmap->retrieveResources($bbfolderres,undef,0,0);
             my @boards = $navmap->retrieveResources($bbfolderres,undef,0,0);                  foreach my $res (@boards) {
             foreach my $res (@boards) {                      my $url = $res->src();
                 my $url = $res->src();                      if ($url =~ m|^(/adm/\Q$cdom\E/\Q$cnum\E/\d+/bulletinboard)|) {
                 if ($url =~ m|^/adm/\Q$cdom\E/\Q$cnum\E/\d+/bulletinboard|) {                          if ($boardurl) {
                     push(@groupboards,$res->symb());                              if ($boardurl =~ /^\Q$1\E/) {
                     $boardshash{$res->symb()} = {                                  push(@groupboards,$res->symb());
                                                   title => $res->title(),                                  $boardshash{$res->symb()} = {
                                                   url   => $res->src(),                                                          title => $res->title(),
                                                 };                                                          url   => $res->src(),
                                                               };
                                   last;
                               }
                           } else {
                               push(@groupboards,$res->symb());
                               $boardshash{$res->symb()} = {
                                                         title => $res->title(),
                                                         url   => $res->src(),
                                                           };
                           }
                       }
                 }                  }
             }              }
         }          }
           undef($navmap);
       } else {
           &Apache::lonnet::logthis('Retrieval of group boards failed - could not create navmap object for group: '.$group.' in course: '.$cdom.':'.$cnum);
     }      }
     undef($navmap);  
     return (\@groupboards,\%boardshash);      return (\@groupboards,\%boardshash);
 }  }
   

Removed from v.1.8  
changed lines
  Added in v.1.18


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