Diff for /loncom/interface/loncoursegroups.pm between versions 1.53 and 1.59

version 1.53, 2006/07/19 23:28:20 version 1.59, 2006/07/29 00:31:58
Line 840  function changeSort(caller) { Line 840  function changeSort(caller) {
           ({href=>"/adm/coursegroups",            ({href=>"/adm/coursegroups",
             text=>"Groups",              text=>"Groups",
             faq=>9,bug=>'Instructor Interface',});              faq=>9,bug=>'Instructor Interface',});
           if ($env{'form.refpage'} eq 'grouplist') {
               &Apache::lonhtmlcommon::add_breadcrumb
                ({href=>"/adm/$cdom/$cnum/$env{'form.groupname'}/smppg?ref=grouplist",
                  text=>"Group: $description",});
           }
     }      }
   
     my %trail = ();      my %trail = ();
Line 960  sub retrieve_settings { Line 965  sub retrieve_settings {
  foreach my $role (sort(keys(%{$groupinfo{'autosec'}}))) {   foreach my $role (sort(keys(%{$groupinfo{'autosec'}}))) {
             if (ref($groupinfo{'autosec'}{$role}) eq 'ARRAY') {              if (ref($groupinfo{'autosec'}{$role}) eq 'ARRAY') {
         foreach my $section (@{$groupinfo{'autosec'}{$role}}) {          foreach my $section (@{$groupinfo{'autosec'}{$role}}) {
   
             push (@{$stored{'sec_'.$role}},$section);              push (@{$stored{'sec_'.$role}},$section);
         }          }
         if (@{$groupinfo{'autosec'}{$role}} > 0) {          if (@{$groupinfo{'autosec'}{$role}} > 0) {
Line 1021  sub display_control { Line 1027  sub display_control {
                                  $userdata,$granularity,$quota,$specificity,                                   $userdata,$granularity,$quota,$specificity,
                                  $idx,$states,$navbuttons,$gpterm,$ucgpterm);                                   $idx,$states,$navbuttons,$gpterm,$ucgpterm);
         } elsif ($state eq 'add_members') {          } elsif ($state eq 'add_members') {
             &add_members_form($r,$action,$state,$page,$startdate,              &add_members_form($r,$cdom,$cnum,$action,$state,$page,$startdate,
                               $enddate,$groupname,$description,$granularity,                                $enddate,$groupname,$description,$granularity,
                               $quota,$sectioncount,$tools,$functions,$stored,                                $quota,$sectioncount,$tools,$functions,$stored,
                               $states,$navbuttons,$gpterm,$ucgpterm);                                $states,$navbuttons,$gpterm,$ucgpterm);
Line 1188  sub general_settings_form { Line 1194  sub general_settings_form {
                            $gpterm,$ucgpterm,$crstype);                             $gpterm,$ucgpterm,$crstype);
     &access_date_settings($r,$action,$formname,$stored,2,$gpterm,$ucgpterm);      &access_date_settings($r,$action,$formname,$stored,2,$gpterm,$ucgpterm);
     if ($action eq 'create') {      if ($action eq 'create') {
         &membership_options($r,$action,$formname,$sectioncount,3,$gpterm,          &membership_options($r,$cdom,$cnum,$action,$formname,$sectioncount,3,
     $ucgpterm);                              $gpterm,$ucgpterm);
         $nexttext = $$navbuttons{'gtns'};          $nexttext = $$navbuttons{'gtns'};
     } else {      } else {
         my @available = ();          my @available = ();
Line 1201  sub general_settings_form { Line 1207  sub general_settings_form {
        $gpterm,$ucgpterm);         $gpterm,$ucgpterm);
         &mapping_options($r,$action,$formname,$page,$sectioncount,          &mapping_options($r,$action,$formname,$page,$sectioncount,
                          $states,$stored,$navbuttons,4,5,                           $states,$stored,$navbuttons,4,5,
  $gpterm,$ucgpterm,$crstype);   $gpterm,$ucgpterm,$crstype,$cdom,$cnum);
         $nexttext = $$navbuttons{'mose'};          $nexttext = $$navbuttons{'mose'};
     }      }
     $prevtext = $$navbuttons{'gtpp'};      $prevtext = $$navbuttons{'gtpp'};
Line 1337  sub get_quota_constraints { Line 1343  sub get_quota_constraints {
 }  }
   
 sub membership_options {  sub membership_options {
     my ($r,$action,$state,$sectioncount,$image,$gpterm,$ucgpterm) = @_;      my ($r,$cdom,$cnum,$action,$state,$sectioncount,$image,$gpterm,$ucgpterm)=@_;
     my $crstype = &Apache::loncommon::course_type();      my $crstype = &Apache::loncommon::course_type();
     my %lt = &Apache::lonlocal::texthash(      my %lt = &Apache::lonlocal::texthash(
                 'pipa' => 'Build a list of users for selection of group members',                  'pipa' => 'Build a list of users for selection of group members',
Line 1359  sub membership_options { Line 1365  sub membership_options {
                    future => &mt('Will have future access'),                     future => &mt('Will have future access'),
                    );                     );
   
     #FIXME need to plumb around for the various cr roles defined by the user      my @roles = ('st','cc','in','ta','ep','cr');
     my @roles = ('st','cc','in','ta','ep');  
   
     my @sections = keys(%{$sectioncount});      my @sections = keys(%{$sectioncount});
   
Line 1383  sub membership_options { Line 1388  sub membership_options {
       </tr><tr><td>');        </tr><tr><td>');
     $r->print(&Apache::lonhtmlcommon::status_select_row(\%status_types));      $r->print(&Apache::lonhtmlcommon::status_select_row(\%status_types));
     $r->print('</td><td>');      $r->print('</td><td>');
     $r->print(&Apache::lonhtmlcommon::role_select_row(\@roles));      $r->print(&Apache::lonhtmlcommon::role_select_row(\@roles,undef,undef,1,$cdom,$cnum));
     if (@sections > 0) {      if (@sections > 0) {
         @sections = sort {$a cmp $b} @sections;          @sections = sort {$a cmp $b} @sections;
         unshift(@sections,'none'); # Put 'no sections' next          unshift(@sections,'none'); # Put 'no sections' next
Line 1820  sub privilege_specificity { Line 1825  sub privilege_specificity {
     }      }
     &topic_bar($r,$img,$lt{'uprv'});      &topic_bar($r,$img,$lt{'uprv'});
     if ((($action eq 'create') && (@{$available} > 0)) ||       if ((($action eq 'create') && (@{$available} > 0)) || 
         (($action eq 'modify') && ($formname eq 'change_settings'))) {            (($action eq 'modify') && ($formname eq 'change_settings'))) {
         my %specific = (          my %specific = (
                       'No'  => 'checked="checked"',                        'No'  => 'checked="checked"',
                       'Yes' => '',                        'Yes' => '',
Line 1877  sub privilege_specificity { Line 1882  sub privilege_specificity {
     } else {      } else {
         if ($action eq 'create') {          if ($action eq 'create') {
             $r->print($lt{'asyo'});              $r->print($lt{'asyo'});
               $r->print('<input type="hidden" name="specificity" value="No" />');
         } elsif ($action eq 'modify' && $formname eq 'pick_members') {          } elsif ($action eq 'modify' && $formname eq 'pick_members') {
             my @defprivs;              my @defprivs;
             if (ref($$stored{'defpriv'}) eq 'ARRAY') {              if (ref($$stored{'defpriv'}) eq 'ARRAY') {
Line 2357  sub change_privs_form { Line 2363  sub change_privs_form {
 }  }
   
 sub add_members_form {  sub add_members_form {
     my ($r,$action,$formname,$page,$startdate,$enddate,$groupname,      my ($r,$cdom,$cnum,$action,$formname,$page,$startdate,$enddate,$groupname,
         $description,$granularity,$quota,$sectioncount,$tools,$functions,          $description,$granularity,$quota,$sectioncount,$tools,$functions,
         $stored,$states,$navbuttons,$gpterm,$ucgpterm)=@_;           $stored,$states,$navbuttons,$gpterm,$ucgpterm)=@_; 
     $r->print(' <br />');      $r->print(' <br />');
Line 2367  sub add_members_form { Line 2373  sub add_members_form {
     &print_current_settings($r,$action,$functions,$startdate,$enddate,      &print_current_settings($r,$action,$functions,$startdate,$enddate,
     $groupname,$description,$granularity,$quota,      $groupname,$description,$granularity,$quota,
     \@available,\@unavailable,$gpterm,$ucgpterm);      \@available,\@unavailable,$gpterm,$ucgpterm);
     &membership_options($r,$action,$formname,$sectioncount,1,$gpterm,$ucgpterm);      &membership_options($r,$cdom,$cnum,$action,$formname,$sectioncount,1,$gpterm,
                           $ucgpterm);
     my $nexttext = $$navbuttons{'gtns'};      my $nexttext = $$navbuttons{'gtns'};
     my $prevtext = $$navbuttons{'gtpp'};      my $prevtext = $$navbuttons{'gtpp'};
     &display_navbuttons($r,$formname,$$states{$action}[$page-1],$prevtext,      &display_navbuttons($r,$formname,$$states{$action}[$page-1],$prevtext,
Line 2407  sub choose_privs_form { Line 2414  sub choose_privs_form {
         my $img2 = 8;          my $img2 = 8;
         &mapping_options($r,$action,$formname,$page,$sectioncount,          &mapping_options($r,$action,$formname,$page,$sectioncount,
                          $states,$stored,$navbuttons,$img1,$img2,                           $states,$stored,$navbuttons,$img1,$img2,
                          $gpterm,$ucgpterm,$crstype);                           $gpterm,$ucgpterm,$crstype,$cdom,$cnum);
     }      }
     my $prevtext = $$navbuttons{'gtps'};      my $prevtext = $$navbuttons{'gtps'};
     &display_navbuttons($r,$formname,$$states{$action}[$page-1],$prevtext,      &display_navbuttons($r,$formname,$$states{$action}[$page-1],$prevtext,
Line 2485  sub member_privileges_form { Line 2492  sub member_privileges_form {
                       'members being added or modified, '.                         'members being added or modified, '. 
                       'there are no optional privileges to set '.                        'there are no optional privileges to set '.
                       'for specific members.',                        'for specific members.',
             'algr' => 'All group members will receive the same privileges.',              'algr' => 'All new group members will receive the same privileges.',            'ifex' => 'If previously expired members are being re-enabled, or '.
                         'if access for future members is being activated now, '.
                         'previously set privileges will be preserved.',
             'asno' => 'As no group members are being added, '.              'asno' => 'As no group members are being added, '.
                       'there are no specific user privileges to set.',                        'there are no specific user privileges to set.',
             'asng' => 'As no group tools will be made available to users, '.              'asng' => 'As no group tools will be made available to users, '.
Line 2619  END Line 2628  END
             }              }
         } else {          } else {
             if (keys(%{$usertools}) > 0) {              if (keys(%{$usertools}) > 0) {
                 $r->print($lt{'algr'}.'<br /><br />');                  $r->print($lt{'algr'}.'<br />'.$lt{'ifex'}.'<br /><br />');
                 &display_defprivs($r,$tools,$toolprivs,\@defprivs);                  &display_defprivs($r,$tools,$toolprivs,\@defprivs);
             } else {              } else {
                 $r->print($lt{'asno'}.'<br />');                  $r->print($lt{'asno'}.'<br />');
Line 2800  sub write_group_data { Line 2809  sub write_group_data {
                 $r->print(&mt('A problem occurred when creating folders for the new [_1]. [_2].<br />',$gpterm,$result));                  $r->print(&mt('A problem occurred when creating folders for the new [_1]. [_2].<br />',$gpterm,$result));
             }              }
             $r->print(&mt('[_1] [_2] was created.<br />',$ucgpterm,$groupname));              $r->print(&mt('[_1] [_2] was created.<br />',$ucgpterm,$groupname));
         } else {          } elsif ($action eq 'modify') {
               my (@oldtools,@newtools); 
               if (ref($$stored{'tool'}) eq 'ARRAY') {
                   @oldtools = @{$$stored{'tool'}};
               }
               if (ref($tools) eq 'ARRAY') {
                   @newtools = @{$tools};
               }
               if (!grep(/^discussion$/,@oldtools) && 
                    grep(/^discussion$/,@newtools)) {
                   my $crspath = '/uploaded/'.$cdom.'/'.$cnum.'/';
                   my $boardsmap = $crspath.'group_boards_'.$groupname.'.sequence';
                   my $navmap = Apache::lonnavmaps::navmap->new();
                   my $bbmapres = $navmap->getResourceByUrl($boardsmap);
                   undef($navmap);
                   if (!$bbmapres) {
                       my $grpmap = $crspath.'group_folder_'.$groupname.'.sequence';
                       my $disctitle = &mt('Discussion Boards');
                       my $outcome = &map_updater($cdom,$cnum,'group_boards_'.
                                                  $groupname.'.sequence','bbseq',
                                                  $disctitle,$grpmap);
                       my ($furl,$ferr) = 
                           &Apache::lonuserstate::readmap($cdom.'/'.$cnum);
                       $navmap = Apache::lonnavmaps::navmap->new();
                       # modify parameter
                       if ($outcome eq 'ok') {
                           my $parm_result = &parm_setter($navmap,$cdom,$boardsmap,
                                                          $groupname);
                           if ($parm_result) {
                               $r->print(&mt('Error while setting parameters '.
                                             'for Discussion Boards folder: '.
                                             '[_1]<br />.',$parm_result));
                           } else {
                               $r->print(&mt('Discussion Boards Folder created.<br />'));
                           }
                       } else {
                           $r->print($outcome);
                       }
                       undef($navmap);
                   }
               }
             $r->print(&mt('[_1] [_2] was updated.<br />',$ucgpterm,$groupname));              $r->print(&mt('[_1] [_2] was updated.<br />',$ucgpterm,$groupname));
         }          }
     } else {      } else {
Line 3029  sub process_membership { Line 3078  sub process_membership {
   
 sub mapping_options {  sub mapping_options {
     my ($r,$action,$formname,$page,$sectioncount,$states,$stored,      my ($r,$action,$formname,$page,$sectioncount,$states,$stored,
         $navbuttons,$img1,$img2,$gpterm,$ucgpterm,$crstype) = @_;          $navbuttons,$img1,$img2,$gpterm,$ucgpterm,$crstype,$cdom,$cnum) = @_;
     my %lt = &Apache::lonlocal::texthash(      my %lt = &Apache::lonlocal::texthash(
         'auto' => "Settings for automatic $gpterm enrollment",          'auto' => "Settings for automatic $gpterm enrollment",
         'gmma' => "$ucgpterm membership mapping to specific sections/roles",          'gmma' => "$ucgpterm membership mapping to specific sections/roles",
Line 3046  sub mapping_options { Line 3095  sub mapping_options {
         'mapr' => "Mapping of roles and sections affected by automatic $gpterm enrollment/disenrollment follows scheme chosen below.",          'mapr' => "Mapping of roles and sections affected by automatic $gpterm enrollment/disenrollment follows scheme chosen below.",
     );      );
     &automapping($r,$action,$stored,\%lt,$img1);      &automapping($r,$action,$stored,\%lt,$img1);
     &mapping_settings($r,$sectioncount,\%lt,$stored,$img2,$crstype);      &mapping_settings($r,$sectioncount,\%lt,$stored,$img2,$crstype,$cdom,$cnum,
                         $action);
     return;      return;
 }  }
   
Line 3079  sub automapping { Line 3129  sub automapping {
 }  }
   
 sub mapping_settings {  sub mapping_settings {
     my ($r,$sectioncount,$lt,$stored,$image,$crstype) = @_;      my ($r,$sectioncount,$lt,$stored,$image,$crstype,$cdom,$cnum,$action) = @_;
     my @sections = keys(%{$sectioncount});      my @sections = keys(%{$sectioncount});
     if (@sections > 0) {      if (@sections > 0) {
         @sections = sort {$a cmp $b} @sections;          @sections = sort {$a cmp $b} @sections;
Line 3090  sub mapping_settings { Line 3140  sub mapping_settings {
     }      }
     &topic_bar($r,$image,$$lt{'pirs'});      &topic_bar($r,$image,$$lt{'pirs'});
     my @roles = &standard_roles();      my @roles = &standard_roles();
     my %customroles = &my_custom_roles();      my %customroles = &Apache::lonhtmlcommon::course_custom_roles($cdom,$cnum);
     $r->print(&Apache::loncommon::start_data_table().      $r->print(&Apache::loncommon::start_data_table().
       &Apache::loncommon::start_data_table_header_row());        &Apache::loncommon::start_data_table_header_row());
     $r->print('      $r->print('
Line 3101  sub mapping_settings { Line 3151  sub mapping_settings {
     }      }
     $r->print(&Apache::loncommon::end_data_table_header_row()."\n");      $r->print(&Apache::loncommon::end_data_table_header_row()."\n");
     foreach my $role (@roles) {      foreach my $role (@roles) {
         my $plrole=&Apache::lonnet::plaintext($role,$crstype);          my $roletitle=&Apache::lonnet::plaintext($role,$crstype);
         my $sections_sel;          $r->print(&print_autorole_item($role,$roletitle,\@sections));
         if (@sections > 0) {  
             if ($role eq 'cc') {  
                 $sections_sel = '<td align="right">'.  
                                 &mt('all sections').'<input type="hidden" '.   
                                 'name="sec_cc" value="all" /></td>';  
             } else {   
                 $sections_sel='<td align="right">'.  
                               &sections_selection(\@sections,'sec_'.$role).  
                               '</td>';  
             }  
         }  
         $r->print(&Apache::loncommon::start_data_table_row().  
   '<td><input type="checkbox" '.  
                   'name="autorole" value="'.$role.'" /></td><td>'.$plrole.  
                   '</td>'.$sections_sel.  
   &Apache::loncommon::end_data_table_row());  
     }      }
       my @customs;
     foreach my $role (sort(keys(%customroles))) {      foreach my $role (sort(keys(%customroles))) {
         my $sections_sel;          my ($roletitle) = ($role =~ m|^cr/[^/]+/[^/]+/(.+)$|);
         if (@sections > 0) {          push (@customs,$role);
             $sections_sel =           $r->print(&print_autorole_item($role,$roletitle,\@sections));
  '<td>'.&sections_selection(\@sections,'sec_'.$role).'</td>';      }
         }      if ($action eq 'modify') {
         $r->print(&Apache::loncommon::start_data_table_row().          foreach my $role (@{$$stored{'autorole'}}) {
   '<td><input type="checkbox" '.              if ((!grep(/^\Q$role\E$/,@customs)) && 
                   'value="'.$role.'" /></td><td>'.&mt('Custom role: ').                  (!grep(/^\Q$role\E$/,@roles))) {
                   '<i>'.$role.'</i></td>'.$sections_sel.                  my $roletitle;
   &Apache::loncommon::end_data_table_row());                  if ($role =~ /^cr/) {
                       ($roletitle) = ($role =~ m|_([^_]+)$|);
                   } else {
                       $roletitle = &Apache::lonnet::plaintext($role,$crstype);
                   }
                   $r->print(&print_autorole_item($role,$roletitle,\@sections));
               }
           }
     }      }
     $r->print(&Apache::loncommon::end_data_table());      $r->print(&Apache::loncommon::end_data_table());
     return;      return;
 }  }
   
   sub print_autorole_item {
       my ($role,$roletitle,$sections) = @_;
       my $sections_sel;
       if (@{$sections} > 0) {
           if ($role eq 'cc') {
               $sections_sel = '<td align="right">'.
                               &mt('all sections').'<input type="hidden" '.
                               'name="sec_cc" value="all" /></td>';
           } else {
               $sections_sel='<td align="right">'.
                             &sections_selection($sections,'sec_'.$role).
                             '</td>';
           }
       }
       my $output = &Apache::loncommon::start_data_table_row().
                    '<td><input type="checkbox" '.
                    'name="autorole" value="'.$role.'" />'.
                    '</td><td>'.$roletitle.'</td>'.$sections_sel.
                    &Apache::loncommon::end_data_table_row();
       return $output;
   } 
   
 sub standard_roles {  sub standard_roles {
     my @roles = ('cc','in','ta','ep','st');      my @roles = ('cc','in','ta','ep','st');
     return @roles;      return @roles;
 }  }
   
 sub my_custom_roles {  
     my %returnhash=();  
     my %rolehash=&Apache::lonnet::dump('roles');  
     foreach (keys %rolehash) {  
         if ($_=~/^rolesdef\_(\w+)$/) {  
             $returnhash{$1}=$1;  
         }  
     }  
     return %returnhash;  
 }  
   
 sub modify_menu {  sub modify_menu {
     my ($r,$groupname,$page,$gpterm) = @_;      my ($r,$groupname,$page,$gpterm) = @_;
     my @menu =      my @menu =
Line 3313  sub add_group_folder { Line 3366  sub add_group_folder {
         my $grpfolder = &mt('[_1] Folder -',$ucgpterm,).$description;          my $grpfolder = &mt('[_1] Folder -',$ucgpterm,).$description;
         $grppage='/adm/'.$cdom.'/'.$cnum.'/'.$groupname.'/smppg';          $grppage='/adm/'.$cdom.'/'.$cnum.'/'.$groupname.'/smppg';
         my $grptitle = &mt('Group homepage').' - '.$description;          my $grptitle = &mt('Group homepage').' - '.$description;
         my ($seqid,$discussions,$disctitle);          my ($discussions,$disctitle);
         my $outcome = &map_updater($cdom,$cnum,'group_folder_'.$groupname.'.sequence',          my $outcome = &map_updater($cdom,$cnum,'group_folder_'.$groupname.'.sequence',
                                    'grpseq',$grpfolder,$allgrpsmap,$grppage,                                     'grpseq',$grpfolder,$allgrpsmap,$grppage,
                                    $grptitle);                                     $grptitle);
Line 3325  sub add_group_folder { Line 3378  sub add_group_folder {
         # Link to folder for bulletin boards          # Link to folder for bulletin boards
         $grpmap = $crspath.'group_folder_'.$groupname.'.sequence';          $grpmap = $crspath.'group_folder_'.$groupname.'.sequence';
         if (grep/^discussion$/,@{$tools}) {          if (grep/^discussion$/,@{$tools}) {
             $seqid = $now + 1;  
             $disctitle = &mt('Discussion Boards');              $disctitle = &mt('Discussion Boards');
             my $outcome = &map_updater($cdom,$cnum,'group_boards_'.$groupname.              my $outcome = &map_updater($cdom,$cnum,'group_boards_'.$groupname.
                                        '.sequence','bbseq',$disctitle,$grpmap);                                         '.sequence','bbseq',$disctitle,$grpmap);
Line 3342  sub add_group_folder { Line 3394  sub add_group_folder {
     # modify parameters      # modify parameters
     my $parm_result;      my $parm_result;
     if ($action eq 'create') {      if ($action eq 'create') {
         if ($allgrpsmap) {   
             $parm_result .= &parm_setter($navmap,$cdom,$allgrpsmap,$groupname);  
         }  
         if ($grpmap) {          if ($grpmap) {
             $parm_result .= &parm_setter($navmap,$cdom,$grpmap,$groupname);              $parm_result .= &parm_setter($navmap,$cdom,$grpmap,$groupname);
         }          }

Removed from v.1.53  
changed lines
  Added in v.1.59


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