[LON-CAPA-cvs] cvs: loncom /interface loncoursegroups.pm

raeburn lon-capa-cvs@mail.lon-capa.org
Wed, 19 Jul 2006 23:28:21 -0000


This is a MIME encoded message

--raeburn1153351701
Content-Type: text/plain

raeburn		Wed Jul 19 19:28:21 2006 EDT

  Modified files:              
    /loncom/interface	loncoursegroups.pm 
  Log:
  Bug 4853.  Wording changes.  Also can now configure automatic group enrollment during course creation when no sections exist.  quota information (Mb) displayed to 2 decimal places.  Eliminate javascript error on add members page when modifiying a course by removing setFormElements() onload in this case.  Some replacement of gpterm with group now all groups will be termed groups, regardless of course type.  
  
  
--raeburn1153351701
Content-Type: text/plain
Content-Disposition: attachment; filename="raeburn-20060719192821.txt"

Index: loncom/interface/loncoursegroups.pm
diff -u loncom/interface/loncoursegroups.pm:1.52 loncom/interface/loncoursegroups.pm:1.53
--- loncom/interface/loncoursegroups.pm:1.52	Mon Jul 17 11:07:26 2006
+++ loncom/interface/loncoursegroups.pm	Wed Jul 19 19:28:20 2006
@@ -1,6 +1,6 @@
 # The LearningOnline Network with CAPA
 #
-# $Id: loncoursegroups.pm,v 1.52 2006/07/17 15:07:26 raeburn Exp $
+# $Id: loncoursegroups.pm,v 1.53 2006/07/19 23:28:20 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -91,17 +91,23 @@
 
     my $action = $env{'form.action'};
     my $state = $env{'form.state'};
-    if ((!defined($action)) || ($action eq 'view')) {
+    if ((!defined($action)) || ($action eq 'view') || ($action eq 'modify')) {
         if (!defined($state)) {
             $state = 'view';
         }
     }
     if ($action eq 'create' || $action eq 'modify' || $action eq 'view') { 
         if ($view_permission || $manage_permission) {
-            &group_administration($r,$action,$state,$cdom,$cnum,
-                                  \%functions,\%idx,$view_permission,
-                                  $manage_permission,$gpterm,$ucgpterm,
-				  $crstype);
+            if ($state eq 'view') {
+                &print_main_menu($r,$cdom,$cnum,\%functions,\%idx,
+                                 $view_permission,$manage_permission,
+                                 $action,$state,$gpterm,$ucgpterm,$crstype);
+            } else {
+                &group_administration($r,$action,$state,$cdom,$cnum,
+                                      \%functions,\%idx,$view_permission,
+                                      $manage_permission,$gpterm,$ucgpterm,
+		   		      $crstype);
+            }
         } else {
             $r->print(&mt('You do not have [_1] administration '.
                           'privileges in this [_2]',$gpterm,lc($crstype)));
@@ -117,17 +123,21 @@
 sub print_main_menu {
     my ($r,$cdom,$cnum,$functions,$idx,$view_permission,$manage_permission,
 	$action,$state,$gpterm,$ucgpterm,$crstype) = @_;
-    my $pagename = "$crstype $ucgpterm".'s';
     my $jscript = qq|
 function changeSort(caller) {
     document.$state.sortby.value = caller;
     document.$state.submit();
 }\n|;
-    $r->print(&header($pagename,$jscript,$action,$state));
+    $r->print(&header('Groups',$jscript,$action,$state));
+    if ($env{'form.refpage'} eq 'enrl') {
+        &Apache::lonhtmlcommon::add_breadcrumb
+            ({href=>"/adm/dropadd",
+              text=>"Enrollment Manager"});
+    }
     &Apache::lonhtmlcommon::add_breadcrumb
         ({href=>"/adm/coursegroups",
-          text=>"$pagename"});
-    $r->print(&Apache::lonhtmlcommon::breadcrumbs($pagename));
+          text=>"Groups"});
+    $r->print(&Apache::lonhtmlcommon::breadcrumbs('Groups'));
     &display_groups($r,$cdom,$cnum,$functions,$idx,$view_permission,
 		    $manage_permission,$action,$state,$gpterm,$ucgpterm,
 		    $crstype);
@@ -142,7 +152,7 @@
     my %grp_info = ();
     my %actionlinks = (
       modify => '<a href="/adm/coursegroups?action=modify&refpage='.
-                         $env{'form.refpage'}.'&groupname=',
+                         $env{'form.refpage'}.'&state=pick_task&groupname=',
       view => '<a href="/adm/'.$cdom.'/'.$cnum.'/',
       delete => '<a href="/adm/coursegroups?action=delete&refpage='.
                          $env{'form.refpage'}.'&groupname=',
@@ -152,23 +162,23 @@
                           view   => 'View',
                           delete => 'Delete',
                           act    => 'Action',
-                          gname  => "$ucgpterm Name",
-                          desc   => 'Description',
+                          gname  => 'Group Name',
+                          desc   => 'Group Title',
                           crea   => 'Creator',
                           crtd   => 'Created',
                           last   => 'Last Modified',
-                          func   => 'Functionality',
+                          func   => 'Collaborative Tools',
                           quot   => 'Quota (Mb)',
                           memb   => 'Members',
                           file   => 'Files',
                           dibd   => 'Discussion Boards',
                           dius   => 'Disk Use (%)',
-                          nogr   => 'No '.$gpterm.'s exist.',
-                          crng   => 'Create a new '.$gpterm,
+                          nogr   => 'No groups exist.',
+                          crng   => 'Create a new group',
                           alth   => 'Although your current role has privileges'.
-                                    ' to view any existing '.$gpterm.'s in this'.
+                                    ' to view any existing groups in this'.
                                     lc($crstype).', you do not have privileges'.
-                                    'to create new '.$gpterm.'s.',
+                                    'to create new groups.',
                      );
     if ($view_permission) {
         if (!defined($action)) {
@@ -177,7 +187,9 @@
         my %curr_groups = &Apache::longroup::coursegroups($cdom,$cnum);
         if (%curr_groups) {
             if ($manage_permission) {
-                $r->print('<br /><a href="/adm/coursegroups?action=create&refpage='.$env{'form.refpage'}.'">'.$lt{'crng'}.'</a>');
+                if (!exists($env{'form.refpage'})) { 
+                    $r->print('<br /><a href="/adm/coursegroups?action=create">'.$lt{'crng'}.'</a>');
+                }
             }
             $r->print('<br /><br />');
 	    $r->print(&Apache::loncommon::start_data_table().
@@ -274,6 +286,9 @@
                         $link .= $group;
                     } else {
                         $link .= $group.'/smppg?ref=grouplist';
+                        if (exists($env{'form.refpage'})) {
+                            $link .= '&amp;refpage='.$env{'form.refpage'};
+                        }
                     }
                     $link .= '">'.$lt{$action}.'</a>';
                     if ($action eq 'view') { 
@@ -312,7 +327,9 @@
         } else {
             $r->print($lt{'nogr'});
             if ($manage_permission) {
-                $r->print('<br /><br /><a href="/adm/coursegroups?action=create&refpage='.$env{'form.refpage'}.'">'.$lt{'crng'}.'</a>');
+                if (!exists($env{'form.refpage'})) {
+                    $r->print('<br /><br /><a href="/adm/coursegroups?action=create">'.$lt{'crng'}.'</a>');
+                }
             } else {
                 $r->print('<br /><br />'.$lt{'alth'});
 
@@ -349,6 +366,7 @@
     my @types = ();
     my @roles = ();
     my @sections = ();
+    my @buildsections = ();
     my %users = ();
     my %userdata = ();
     my @members = ();
@@ -400,8 +418,6 @@
         if ($state eq '') {
             if (defined($env{'form.groupname'})) {
                 $state = 'pick_task';
-            } else {
-                $state = 'pick_group';
             }
         } else {
             %stored = &retrieve_settings($cdom,$cnum,$groupname);
@@ -495,11 +511,9 @@
        (($action eq 'modify') && (($state eq 'change_settings') ||
                                   ($state eq 'add_members')))) {
         %sectioncount = &Apache::loncommon::get_sections($cdom,$cnum);
-        if (%sectioncount) {
-            $elements{'create'}{'pick_name'}{'sectionpick'} = 'selectbox';
-            $elements{'modify'}{'change_mapping'}{'sectionpick'} = 'selectbox';
-            $elements{'modify'}{'add_members'}{'sectionpick'} = 'selectbox';
-        }
+        $elements{'create'}{'pick_name'}{'sectionpick'} = 'selectbox';
+        $elements{'modify'}{'change_mapping'}{'sectionpick'} = 'selectbox';
+        $elements{'modify'}{'add_members'}{'sectionpick'} = 'selectbox';
     }
 
     if (($action eq 'create') || 
@@ -513,13 +527,15 @@
         if (defined($env{'form.sectionpick'})) {
             @sections=&Apache::loncommon::get_env_multiple('form.sectionpick');
             if (grep/^all$/,@sections) {
-                @sections = sort {$a cmp $b} keys(%sectioncount);
+                @buildsections = sort {$a cmp $b} keys(%sectioncount);
+            } else {
+                @buildsections = @sections;
             }
         }
     }
 
     if (($state eq 'pick_members') || ($state eq 'pick_privs') || ($state eq 'change_privs')) {
-        &build_members_list($cdom,$cnum,\@types,\@roles,\@sections,\%users,
+        &build_members_list($cdom,$cnum,\@types,\@roles,\@buildsections,\%users,
                             \%userdata);
     }
     if ($state eq 'pick_members') {
@@ -724,13 +740,13 @@
         my $space_trim = '/^\s*|\s*\$/g,""';
         my $float_check = '/^([0-9]*\.?[0-9]*)$/';
         $validate_script = '
-    var newquota = document.'.$state.'.quota.value;
+    var newquota = new String(document.'.$state.'.quota.value);
     newquota.replace('.$space_trim.');
     if (newquota == "" ) {
         document.'.$state.'.quota.value = 0;
-        newquota = 0;       
+        newquota = "0";
     }
-    var maxposs = '.$maxposs.';
+    var maxposs = '.sprintf("%.2f",$maxposs).';
     if (newquota > maxposs) {
         alert("The file repository quota you entered for this group ("+newquota+" Mb) exceeds the maximum possible ("+maxposs+" Mb). Please enter a smaller number.");
         return;
@@ -781,7 +797,7 @@
     my %states = ();
     my %branchstates = ();
     @{$states{'create'}} = ('pick_name','pick_members','pick_privs','result');
-    @{$states{'modify'}} = ('pick_group','pick_task');
+    @{$states{'modify'}} = ('pick_task');
     @{$branchstates{'noprivs'}} = ('result');
     @{$branchstates{'settings'}} = ('change_settings','chgresult');
     @{$branchstates{'members'}} = ('change_members','change_privs','memresult');
@@ -805,8 +821,7 @@
     }
 
     my $loaditems =  &onload_action($action,$state);
-    my $crumbtitle = "$crstype $ucgpterm".'s'; 
-    $r->print(&header("$crumbtitle Manager",
+    $r->print(&header("Groups Manager",
 		      $jscript,$action,$state,$page,$loaditems));
 
     if ($env{'form.refpage'} eq 'enrl') {
@@ -814,11 +829,17 @@
         ({href=>"/adm/dropadd",
           text=>"Enrollment Manager",
           faq=>9,bug=>'Instructor Interface',});
-    } else {
+        if ($action eq 'modify') {
+            &Apache::lonhtmlcommon::add_breadcrumb
+            ({href=>"/adm/coursegroups?refpage=enrl&action=modify",
+              text=>"Groups",
+              faq=>9,bug=>'Instructor Interface',});
+        }
+    } else { 
         &Apache::lonhtmlcommon::add_breadcrumb
-       ({href=>"/adm/coursegroups",
-          text=>"$crumbtitle",
-          faq=>9,bug=>'Instructor Interface',});
+          ({href=>"/adm/coursegroups",
+            text=>"Groups",
+            faq=>9,bug=>'Instructor Interface',});
     }
 
     my %trail = ();
@@ -829,7 +850,6 @@
                             result => 'Creation Complete',
                           );
     %{$trail{'modify'}} = &Apache::lonlocal::texthash(
-                            pick_group => $ucgpterm.'s',
                             pick_task => 'Choose Task',
                             change_settings => "$ucgpterm Settings",
                             change_members => 'Modify/Delete Members',
@@ -857,7 +877,7 @@
                 &Apache::lonhtmlcommon::add_breadcrumb(
                    {text=>"$trail{$action}{$state}"});
                 $r->print(&Apache::lonhtmlcommon::breadcrumbs
-			  ("$crumbtitle Manager"));
+			  ("Groups Manager"));
                 &display_control($r,$cdom,$cnum,$action,$state,$page,
                        \%sectioncount,$groupname,$description,$functions,
                        \@tools,$toolprivs,$fixedprivs,$startdate,$enddate,
@@ -882,9 +902,8 @@
     } elsif (($action eq 'view') && ($view_permission)) {
                         &Apache::lonhtmlcommon::add_breadcrumb(
                    {text=>"View $gpterm".'s'});
-        my $crumbtitle = "$crstype $ucgpterm".'s Manager';
         $r->print(&Apache::lonhtmlcommon::breadcrumbs
-		  (&mt($crumbtitle)));
+		  ('Groups Manager'));
         &display_groups($r,$cdom,$cnum,$functions,$idx,$view_permission,
 			$manage_permission,$action,$state,$gpterm,$ucgpterm,
 			$crstype);
@@ -988,11 +1007,7 @@
         }
     } elsif ($action eq 'modify') {
         my $groupname = $env{'form.groupname'};
-        if ($state eq 'pick_group') {
-            &display_groups($r,$cdom,$cnum,$functions,$idx,$view_permission,
-			    $manage_permission,$action,$state,$gpterm,
-			    $ucgpterm,$crstype);
-        } elsif ($state eq 'pick_task') {
+        if ($state eq 'pick_task') {
             &modify_menu($r,$groupname,$page,$gpterm);
         } elsif ($state eq 'change_settings') {
             &general_settings_form($r,$cdom,$cnum,$action,$state,$page,
@@ -1077,8 +1092,7 @@
     }
     if (($action eq 'modify') &&
                 ($state eq 'change_settings' || $state eq 'change_members' ||
-                 $state eq 'change_privs' || $state eq 'add_members' ||
-                 $state eq 'pick_members')) {
+                 $state eq 'change_privs' || $state eq 'add_members')) {
 	$loaditems{'onload'} = 
 	    'javascript:setFormElements(document.'.$state.')';
     }
@@ -1200,15 +1214,14 @@
     my ($r,$functions,$action,$formname,$stored,$image,$gpterm,
         $ucgpterm,$crstype) = @_;
     my %lt = &Apache::lonlocal::texthash(
-        'gdat' => "$ucgpterm open and close dates",
-        'sten' => "Set a start date/time and end date/time for the $gpterm",
-        'gfun' => "$ucgpterm functionality",
-        'gnde' => "$ucgpterm name, description and available functionality",
-        'desc' => 'Description',
-        'func' => 'Functionality',
-        'gnam' => "$ucgpterm Name",
-        'doyo' => "Do you want to assign different functionality ".
-                  "to different $gpterm members?",
+        'gdat' => "Group access start and end dates",
+        'gnde' => "Group name, title and available collaborative tools",
+        'desc' => 'Group Title',
+        'func' => 'Collaborative Tools',
+        'gnam' => 'Group Name',
+        'lett' => 'Letters, numbers and underscore only',
+        'doyo' => 'Different subsets of the chosen collaborative tools '.
+                  'for different group members?',
     );
     my ($crsquota,$freespace,$maxposs) = &get_quota_constraints($action,$stored);
     &topic_bar($r,$image,$lt{'gnde'});
@@ -1219,7 +1232,8 @@
        <td colspan="5">
 ');
     if ($action eq 'create') {
-        $r->print('<input type="text" name="groupname" size="25" />');
+        $r->print('<input type="text" name="groupname" size="25" />&nbsp;('.
+                  $lt{'lett'}.')');
     } else {
         $r->print('<input type="hidden" name="groupname" value="'.
                          $env{'form.groupname'}.'" />'.$env{'form.groupname'});
@@ -1289,14 +1303,14 @@
         $r->print('<br />'.
                   &mt('A total of [_1] Mb can be divided amongst all [_2]s in the '.
                   '[_3], and [_4] Mb are currently unallocated.',$crsquota,
-                  $gpterm,lc($crstype),$freespace));
+                  $gpterm,lc($crstype),sprintf("%.2f",$freespace)));
     } else {
         $r->print('&nbsp;&nbsp;('.&mt('The quota is currently [_1] Mb',
                                       $$stored{'quota'}).').');
 
         $r->print('<br />'.&mt('The quota can be increased to [_1] Mb, '.
                   'by adding all unallocated space for [_2]s in the [_3].',
-                  $maxposs,$gpterm,lc($crstype)));
+                  sprintf("%.2f",$maxposs),$gpterm,lc($crstype)));
     }
     $r->print('
        </td>
@@ -1326,15 +1340,15 @@
     my ($r,$action,$state,$sectioncount,$image,$gpterm,$ucgpterm) = @_;
     my $crstype = &Apache::loncommon::course_type();
     my %lt = &Apache::lonlocal::texthash(
-                'pipa' => 'Pick parameters to generate membership list',
-                'gmem' => "$ucgpterm membership options",
+                'pipa' => 'Build a list of users for selection of group members',
+                'gmem' => "Group membership selection list criteria:",
                 'picr' => 'Pick the criteria to use to build a list of '.
                           lc($crstype).' users from which you will select ',
-                'meof' => "members of the new $gpterm.",
-                'admg' => "additional members of the $gpterm.",
+                'meof' => "members of the new group.",
+                'admg' => "additional members of the group.",
                 'ifno' => "If you do not wish to add members when you first ".
-                          "create the $gpterm, do not make any selections.",
-                'asub' => "A subsequent step will also allow you to specify automatic adding/dropping of $gpterm members triggered by specified role and section changes.",
+                          "create the group, there is no need to pick any criteria.",
+                'asub' => "A subsequent step will also allow you to specify automatic adding/dropping of group members triggered by specified user role and section <i>changes</i> in the course.",
                 'acty' => 'Access types',
                 'coro' => $crstype.' roles',
                 'cose' => $crstype.' sections',
@@ -1364,12 +1378,9 @@
      <table class="LC_status_selector">
       <tr>
        <th>'.$lt{'acty'}.'</th>
-       <th>'.$lt{'coro'}.'</th>');
-    if (@sections >0) {
-        $r->print('
-       <th>'.$lt{'cose'}.'</th>');
-    }
-    $r->print('</tr><tr><td>');
+       <th>'.$lt{'coro'}.'</th>
+       <th>'.$lt{'cose'}.'</th>
+      </tr><tr><td>');
     $r->print(&Apache::lonhtmlcommon::status_select_row(\%status_types));
     $r->print('</td><td>');
     $r->print(&Apache::lonhtmlcommon::role_select_row(\@roles));
@@ -1377,10 +1388,11 @@
         @sections = sort {$a cmp $b} @sections;
         unshift(@sections,'none'); # Put 'no sections' next
         unshift(@sections,'all'); # Put 'all' at the front of the list
-        $r->print('</td><td>'.
-        &sections_selection(\@sections,'sectionpick').'</td>');
+    } else {
+        @sections = ('all','none');
     }
-    $r->print('
+    $r->print('</td><td>'.
+              &sections_selection(\@sections,'sectionpick').'</td>
       </tr>
      </table>');
     return;
@@ -1395,7 +1407,7 @@
     }
     foreach my $sec (@{$sections}) {
         if ($sec eq 'all') {
-            $section_sel .= '  <option value="'.$sec.'" selected="selected">'.&mt('all sections').'</option>'."\n";
+            $section_sel .= '  <option value="'.$sec.'">'.&mt('all sections').'</option>'."\n";
         } elsif ($sec eq 'none') {
             $section_sel .= '  <option value="'.$sec.'">'.&mt('no section').'</option>'."\n"; 
         } else {
@@ -1527,15 +1539,15 @@
 	$granularity,$quota,$available,$unavailable,$gpterm,$ucgpterm) = @_;
 
     my %lt = &Apache::lonlocal::texthash(
-        grna => "$ucgpterm Name",
-        desc => 'Description',
-        grfn => "$ucgpterm Functions",
+        grna => 'Group Name',
+        desc => 'Group Title',
+        grfn => "Collaborative Tools",
         gran => 'Granularity',
         quot => 'File quota',
         dfac => 'Default access dates',
-        ygrs => "Your $gpterm selections",
-        tfwa => "The following settings will apply to the $gpterm:",
-        difn => 'Different functionality<br />for different members:',
+        ygrs => "Your group selections - ",
+        tfwa => "The following settings will apply to the group:",
+        difn => 'Different collaborative tools<br />for different members:',
         stda => 'Start date',
         enda => 'End date:',
     );
@@ -1570,8 +1582,8 @@
   <td>
 ');
     if (@{$available} > 0) {
-        $r->print('<b>Available:</b>
-                    <table class="LC_group_priv"><tr>');
+        $r->print(&mt('<b>Available for assignment to members:</b>').
+                    '<table class="LC_group_priv"><tr>');
         my $rowcell = int(@{$available}/2) + @{$available}%2;
         for (my $i=0; $i<@{$available}; $i++) {
             if (@{$available} > 3) {
@@ -1588,8 +1600,8 @@
         $r->print('</tr></table><br />');
     }
     if (@{$unavailable} > 0) {
-        $r->print('<b>Unavailable:</b>
-                    <table class="LC_group_priv"><tr>');
+        $r->print(&mt('<b>Unavailable for assignment:</b>').
+                    '<table class="LC_group_priv"><tr>');
         my $rowcell = int(@{$unavailable}/2) + @{$unavailable}%2;
         for (my $j=0; $j<@{$unavailable}; $j++) {
             if (@{$unavailable} > 3) {
@@ -1622,14 +1634,15 @@
     my ($r,$action,$formname,$available,$idx,$stored,$img,$users,$userdata,
 	$granularity,$origmembers,$gpterm,$ucgpterm) = @_;
     my %lt = &Apache::lonlocal::texthash(
-          'gpme' => "$ucgpterm membership",
+          'gpme' => "Group membership",
           'addm' => 'Add members',
-          'setf' => 'Set functionality',
-          'func' => 'Functionality',
-          'nome' => 'No members to add at this time.',
+          'setf' => 'Assign collaborative tools', 
+          'func' => 'Tools',
+          'nome' => 'No members to add at this time, as there are no users '.
+                     'matching the specified type(s), role(s) and section(s).',
           'nnew' => "There are no users to add as new members, as all users".
-                    " matching the specified type(s), role(s), and/or ".
-                    "section(s) are already affiliated with this $gpterm.",
+                    " matching the specified type(s), role(s), and ".
+                    "section(s) are already affiliated with this group.",
           'yoma' =>  'You may need to use the '."'".'modify existing, past or '.
                      'future members'."'".' page if you need to re-enable '.
                      'or activate access for previous or future members.',
@@ -1765,34 +1778,35 @@
     my ($r,$action,$img,$tools,$stored,$toolprivs,$fixedprivs,$available,
 	$formname,$gpterm,$ucgpterm) = @_;
     my %lt = &Apache::lonlocal::texthash (
-      'uprv' => 'User privileges',
-      'frty' => 'For each type of functionality you have chosen to include, '.
-                'there is a set of standard privileges which apply to all '.
-                'of those for whom the functionality is enabled.',
-      'thar' => 'There are also additional privileges which can be set for '.
-                'some, or all, members. Please choose one of the following:',
-      'fort' => 'For the types of functionality you have chosen to include '.
-                'there are no additional privileges which can be set for some '.
-                'or all members.',
-      'eaty' => 'Each of the types of functionality includes standard '.
-                'privileges which apply to members with access to that '.
-                'functionality, and may also include additional privileges '.
+      'uprv' => 'User privileges for collaborative tools',
+      'frty' => 'For each collaborative tool you have chosen to include, '.
+                'there is a set of core privileges which all group members '.
+                'assigned use of the tool will receive.',
+      'thar' => 'For some tools there are also additional optional '.
+                 'privileges which can be set.',
+      'plch' => 'Choose one of the following:',
+      'fort' => 'For the collaborative tools you have chosen to include '.
+                'only core privileges are available, '.
+                'so there are no optional privileges to assign.',
+      'eaty' => 'Each collaborative tool includes core '.
+                'privileges assigned to all members with access to the '.
+                'tool. Some tools may also feature additional privileges '.
                 'which can be set for specific members.',
-      'cutg' => "Currently the $gpterm is configured ",
-      'sdif' => "so different $gpterm members can receive different privileges.",
-      'sall' => "so all $gpterm members will receive the same privileges.",
-      'algm' => "All $gpterm members will receive the same privileges.",
-      'smgp' => "Some $gpterm members will receive different privileges from ".
-                "others.",
-      'thwi' => "These will be the privileges all $gpterm members receive, ". 
-                "if you selected the first option above.",
+      'cutg' => 'Currently the group is configured ',
+      'sdif' => 'so different members can receive different optional privileges for a particular tool.',
+      'sall' => 'so all members will receive the same optional privileges for a particular tool.',
+      'algm' => 'All group members will receive the same privileges for any tool assigned to them, including the default set of optional privileges.',
+      'smgp' => 'Different group members may receive different privileges from '.
+                'others for the tools they have been assigned.',
+      'thwi' => 'These will be the privileges all group members receive for a particular assigned tool, '. 
+                'if you selected the first option above.',
       'thes' => "These will be the privileges given to members assigned ".   
-                "in the future, including via automatic $gpterm assignment ".
-                "for specific sections/roles ",
-      'asyo' => "As you have chosen not to include any functionality in the ".
-                "$gpterm, no default user privileges settings need to be set.",
-      'plin' => 'Please indicate which <b>optional</b> privileges members '.
-                'will receive by default.',
+                "in the future via automatic group assignment ".
+                "for users who receive specific sections/roles in the course ",
+      'asyo' => "As you have chosen not to include any collaborative tools ".
+                "in the group, no default optional privileges need to be set.",
+      'plin' => 'Indicate which <b>optional</b> privileges members '.
+                'will receive by default for a specific tool.',
       'oppr' => 'Optional privileges',
       'defp' => 'The default privileges new members will receive are:', 
     );
@@ -1814,7 +1828,7 @@
         if ($action eq 'create') {
             $r->print($lt{'frty'}.'<br />');
             if ($totaloptionalprivs) {
-                $r->print($lt{'thar'});
+                $r->print($lt{'thar'}.'<br /><br />'.$lt{'plch'});
             } else {
                 $r->print($lt{'fort'});
             }
@@ -1830,16 +1844,16 @@
         }
         if ($totaloptionalprivs) {
             $r->print('
-<br /><br />
+<br />
 <label><nobr><input type="radio" name="specificity" value="No" '.$specific{'No'}.' />&nbsp;'.$lt{'algm'}.'</nobr></label><br />
-<label><nobr><input type="radio" name="specificity" value="Yes" '.$specific{'Yes'}.' />&nbsp;'.$lt{'smgp'}.'</nobr></label>');
+<label><nobr><input type="radio" name="specificity" value="Yes" '.$specific{'Yes'}.' />&nbsp;'.$lt{'smgp'}.'</nobr></label><br /><br />');
         } else {
             $r->print('<input type="hidden" name="specificity" value="No" />');
         }
         if ($totaloptionalprivs) {
             $r->print($lt{'plin'});
             if ($action eq 'create') {
-                $r->print(' '.$lt{'thwi'});
+                $r->print('<br />'.$lt{'thwi'});
             }
             $r->print('<br />'.$lt{'thes'});
             if ($action eq 'create') {
@@ -1887,7 +1901,7 @@
                                 'addp' => 'Additional privileges',
                                 'fixp' => 'Fixed privileges',
                                 'oppr' => 'Optional privileges',
-                                'func' => 'Function',
+                                'func' => 'Collaborative Tool',
     );
     $r->print(&Apache::lonhtmlcommon::start_pick_box('LC_group_priv_box').
 	      &Apache::lonhtmlcommon::row_title($lt{'func'},undef,
@@ -1907,7 +1921,7 @@
 		if ($fixed ne '') {
 		    $fixed .= '</td><td class="LC_groups_fixed">';
 		}
-                $fixed .= '<input type="hidden" name="defpriv" value="'.$priv.'" />'.$$toolprivs{$tool}{$priv}.'&nbsp;';
+                $fixed .= '<input type="hidden" name="defpriv" value="'.$priv.'" /><nobr>'.$$toolprivs{$tool}{$priv}.'&nbsp;';
                 if ($action eq 'modify') {
                     if (grep(/^$tool$/,@{$available})) {
                         $fixed .= '<small>'.&mt('(on)').'<small>&nbsp;';
@@ -1915,21 +1929,21 @@
                         $fixed .= '<small>'.&mt('(off)').'<small>&nbsp;';
                     }
                 }
+                $fixed .= '</nobr>';
             } else {
                 $privcount++;
                 if ($privcount == 3) {
                     $dynamic .= '</tr>
                                  <tr>'."\n";
                 }
-                $dynamic .= '<td><label><input type="checkbox" name="defpriv" value="'.$priv.'" />'.$$toolprivs{$tool}{$priv}.'</label></td>'."\n";
+                $dynamic .= '<td><nobr><label><input type="checkbox" name="defpriv" value="'.$priv.'" />'.$$toolprivs{$tool}{$priv}.'</label></nobr></td>'."\n";
             }
         }
         if ($privcount == 0) {
             $dynamic .= '<td>None</td>'."\n";
         }
         if ($privcount < 3) {
-            $dynamic .= '</td>
-                         <td>&nbsp;</td>'."\n";
+            $dynamic .= '<td>&nbsp;</td>'."\n";
         } elsif ($privcount%2) {
             $dynamic = '<td>&nbsp;</td>'."\n";
         }
@@ -1956,7 +1970,7 @@
     my $rowColor2 = "#eeeeee";
     my %lt = &Apache::lonlocal::texthash(
                                 'priv' => 'Privileges',
-                                'func' => 'Function',
+                                'func' => 'Collaborative Tool',
     );
     $r->print(&Apache::lonhtmlcommon::start_pick_box());
     $r->print('<tr>');
@@ -2049,10 +2063,15 @@
 			    $groupname,$description,$granularity,$quota,
 			    \@available,\@unavailable,$gpterm,$ucgpterm);
     &topic_bar($r,2,$lt{'mogm'});
-    &current_membership($r,$cdom,$cnum,$formname,$groupname,\@available,
-			\@unavailable,$fixedprivs,$granularity,$specificity);
-    &display_navbuttons($r,$formname,$$states{$action}[$page-1],$prevtext,
-                        $$states{$action}[$page+1],$nexttext);
+    my $numcurrent = &current_membership($r,$cdom,$cnum,$formname,$groupname,
+                                         \@available,\@unavailable,$fixedprivs,
+			                 $granularity,$specificity);
+    if ($numcurrent > 0) {
+        &display_navbuttons($r,$formname,$$states{$action}[$page-1],$prevtext,
+                            $$states{$action}[$page+1],$nexttext);
+    } else {
+        &display_navbuttons($r,$formname,$$states{$action}[$page-1],$prevtext);
+    }
     return;
 }
 
@@ -2072,13 +2091,14 @@
                                           'reen' => 'Re-enable',
                                           'acti' => 'Activate',
                                           'dele' => 'Delete',
-                                          'curf' => 'Current Functionality',
+                                          'curf' => 'Current Tool Set',
                                           'chpr' => 'Change Privileges' 
                                         );
     my ($current,$num_items,$hastools,$addtools) =
         &Apache::longroup::group_memberlist($cdom,$cnum,$groupname,$fixedprivs,
                                             $available);
-    if (keys(%{$current}) > 0) {
+    my $numcurrent = scalar(keys(%{$current}));
+    if ($numcurrent > 0) {
         $r->print('
    <table>
     <tr>');
@@ -2135,7 +2155,7 @@
             $colspan++;  
         }
         if ($addtools) {
-            $r->print('<th>'.&mt('Additional Functionality').'</th>');
+            $r->print('<th>'.&mt('Additional Tools').'</th>');
             $colspan++;
         }
         $r->print(&Apache::loncommon::end_data_table_header_row());
@@ -2248,8 +2268,10 @@
             }
         }
         $r->print(&Apache::loncommon::end_data_table());
+    } else {
+        $r->print(&mt('There are no active, future or previous group members to modify.'));
     }
-    return;
+    return $numcurrent;
 }
 
 sub check_uncheck_buttons {
@@ -2318,7 +2340,7 @@
         $r->print($lt{'nome'}.'<br />');
     }
     
-    &topic_bar($r,4,&mt('[_1] member privileges',$ucgpterm));
+    &topic_bar($r,4,&mt('Setting optional privileges for specific group members'));
 
     my $numchgs = &member_privileges_form($r,$action,$formname,$tools,
                                           $toolprivs,$fixedprivs,$userdata,
@@ -2374,20 +2396,18 @@
         $nexttext = $$navbuttons{'adme'};
     }
 
-    &topic_bar($r,6,&mt('[_1] member privileges',$ucgpterm));
+    &topic_bar($r,6,&mt('Setting optional privileges for specific group members'));
 
     &member_privileges_form($r,$action,$formname,$tools,$toolprivs,
                             $fixedprivs,$userdata,$usertools,$idx,undef,
                             $states,$stored,$gpterm);
 
     if ($action eq 'create') {
-        if (keys(%{$sectioncount}) > 0) {
-            my $img1 = 7;
-            my $img2 = 8;
-            &mapping_options($r,$action,$formname,$page,$sectioncount,
-                             $states,$stored,$navbuttons,$img1,$img2,
-                             $gpterm,$ucgpterm,$crstype);
-        }
+        my $img1 = 7;
+        my $img2 = 8;
+        &mapping_options($r,$action,$formname,$page,$sectioncount,
+                         $states,$stored,$navbuttons,$img1,$img2,
+                         $gpterm,$ucgpterm,$crstype);
     }
     my $prevtext = $$navbuttons{'gtps'};
     &display_navbuttons($r,$formname,$$states{$action}[$page-1],$prevtext,
@@ -2458,21 +2478,22 @@
         $usertools,$idx,$memchg,$states,$stored,$gpterm) = @_;
     my %lt = &Apache::lonlocal::texthash(
             'addp' => 'Additional privileges',
-            'fixp' => 'Fixed privileges',
+            'fixp' => 'Core privileges',
             'oppr' => 'Optional privileges',
-            'func' => 'Function',
-            'forf' => 'For the functionality you have chosen to include '.
-                      'there are no optional privileges to set besides '.
-                      'the standard privileges.',
-            'algr' => "All $gpterm members will receive the same privileges.",
-            'asno' => "As no $gpterm members are being added, ".
-                      "there are no specific user privileges to set.",
-            'asng' => "As no $gpterm tools will be made available to users, ".
-                      "there are no specific user privileges to set.",
-            'nogm' => "No $gpterm member privileges to display or set, ".
-                      "as you have not indicated that you will be activating,".
-                      " re-enabling, changing privileges, or adding/removing ".
-                      "functionality for any current members ",
+            'func' => 'Tool',
+            'forf' => 'For the collaborative tools included for group '.
+                      'members being added or modified, '. 
+                      'there are no optional privileges to set '.
+                      'for specific members.',
+            'algr' => 'All group members will receive the same privileges.',
+            'asno' => 'As no group members are being added, '.
+                      'there are no specific user privileges to set.',
+            'asng' => 'As no group tools will be made available to users, '.
+                      'there are no specific user privileges to set.',
+            'nogm' => 'No group member privileges to display or set, '.
+                      'as you have not indicated that you will be activating,'.
+                      ' re-enabling, changing privileges, or adding/removing '.
+                      'tools for any current members.',
             'full' => 'Fullname',
             'user' => 'Username',
             'doma' => 'Domain',
@@ -2710,7 +2731,7 @@
     }
     if ($quota > $maxposs) {
         $quota = $maxposs;
-        $r->print(&mt('The value you entered for the quota for the file repository in this [_1] exceeded the maximum possible value, so it has been set to [_2] Mb (the maximum possible value).<br />',$gpterm,$maxposs));
+        $r->print(&mt('The value you entered for the quota for the file repository in this [_1] exceeded the maximum possible value, so it has been set to [_2] Mb (the maximum possible value).<br />',$gpterm,sprintf("%.2f",$maxposs)));
     }
     my %groupinfo = (
                      description => $esc_description,
@@ -2999,7 +3020,7 @@
     }
     if ($roster_result eq 'ok') {
         $r->print('<br />'.&mt('[_1] membership list updated.',$ucgpterm));
-	$r->print('<p>'.&mt("For full access to all of [_1]'s privileges, users will need to log out and log back in.",$groupname).'</p>');
+	$r->print('<p>'.&mt("Any currently logged in course users affected by the changes you made to group membership or privileges for the [_1] group will need to log out and log back in for their LON-CAPA sessions to reflect these changes.",$groupname).'</p>');
     } else {
         $r->print('<br />'.&mt('An error occurred while updating the [_1] membership list -',$gpterm).$roster_result.'<br />');
     }
@@ -3014,7 +3035,7 @@
         'gmma' => "$ucgpterm membership mapping to specific sections/roles",
         'endi' => "Enable/disable automatic $gpterm enrollment for ".
                           "users in specified roles and sections",
-        'adds'  => "If automatic $gpterm enrollment is enabled, when a user is assigned a ".lc($crstype)."-wide or section-specific role, he/she will automatically be added as a member of the $gpterm, with start and end access dates defined by the default dates set for the $gpterm, unless he/she is already a $gpterm member, with access dates that permit either current or future $gpterm access.",
+        'adds'  => "If automatic $gpterm enrollment is enabled, when a user is newly assigned a ".lc($crstype)."-wide or section-specific role, he/she will automatically be added as a member of the $gpterm, with start and end access dates defined by the default dates set for the $gpterm, unless he/she is already a $gpterm member, with access dates that permit either current or future $gpterm access.",
         'drops'  => "If automatic $gpterm disenrollment is enabled, when a user's role is expired, access to the $gpterm will be terminated unless the user continues to have other ".lc($crstype)."-wide or section-specific active or future roles which receive automatic membership in the $gpterm.",
         'pirs' => "Pick roles and sections for automatic $gpterm enrollment",
         'curr' => 'Currently set to',
@@ -3064,6 +3085,8 @@
         @sections = sort {$a cmp $b} @sections;
         unshift(@sections,'none'); # Put 'no sections' next
         unshift(@sections,'all'); # Put 'all' at the front of the list
+    } else {
+        @sections = ('all','none');
     }
     &topic_bar($r,$image,$$lt{'pirs'});
     my @roles = &standard_roles();
@@ -3105,8 +3128,8 @@
         }
         $r->print(&Apache::loncommon::start_data_table_row().
 		  '<td><input type="checkbox" '.
-                  'value="'.$role.'" /></td><td>'.$role.'</td>'.
-                  $sections_sel.
+                  'value="'.$role.'" /></td><td>'.&mt('Custom role: ').
+                  '<i>'.$role.'</i></td>'.$sections_sel.
 		  &Apache::loncommon::end_data_table_row());
     }
     $r->print(&Apache::loncommon::end_data_table());
@@ -3181,7 +3204,20 @@
                 <td>'.$$userdata{$user}[$$idx{fullname}].'</td>
                 <td>'.$uname.'</td>
                 <td>'.$udom.'</td>
-                <td valign="top"><table><tr><td><b>Function</b></td></tr><tr><td><b>Fixed</b></td></tr><tr><td><b>Optional</b></td></tr></table></td>');
+                <td valign="top">
+                  <table>
+                   <tr>
+                    <td><b>'.
+                    &mt('Collaborative Tool').'</b></td>
+                   </tr>
+                   <tr>
+                    <td><b>'.&mt('Fixed').'</b></td>
+                   </tr>
+                   <tr>
+                    <td><b>'.&mt('Optional').'</b></td>
+                   </tr>
+                  </table>
+                 </td>');
         foreach my $tool (@{$showtools}) {
             if (exists($$usertools{$user}{$tool})) {
                 $r->print('<td valign="top"><table><tr><th colspan="2">'.$tool.'</th></tr>');

--raeburn1153351701--