[LON-CAPA-cvs] cvs: loncom(version_2_9_X) /interface lonuserutils.pm

raeburn raeburn@source.lon-capa.org
Wed, 20 Jan 2010 17:41:25 -0000


This is a MIME encoded message

--raeburn1264009285
Content-Type: text/plain

raeburn		Wed Jan 20 17:41:25 2010 EDT

  Modified files:              (Branch: version_2_9_X)
    /loncom/interface	lonuserutils.pm 
  Log:
  - Backport 1.101, 1.106, 1.114.
  
  
--raeburn1264009285
Content-Type: text/plain
Content-Disposition: attachment; filename="raeburn-20100120174125.txt"

Index: loncom/interface/lonuserutils.pm
diff -u loncom/interface/lonuserutils.pm:1.97.2.3 loncom/interface/lonuserutils.pm:1.97.2.4
--- loncom/interface/lonuserutils.pm:1.97.2.3	Sat Sep 12 17:10:44 2009
+++ loncom/interface/lonuserutils.pm	Wed Jan 20 17:41:25 2010
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Utility functions for managing LON-CAPA user accounts
 #
-# $Id: lonuserutils.pm,v 1.97.2.3 2009/09/12 17:10:44 raeburn Exp $
+# $Id: lonuserutils.pm,v 1.97.2.4 2010/01/20 17:41:25 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -235,7 +235,8 @@
     # domain context   
     #
     # Role types
-    my @roletypes = ('domain','author','course');
+    my @roletypes = ('domain','author','course','community');
+
     my %lt = &role_type_names();
     #
     # build up the menu information to be passed to
@@ -261,7 +262,7 @@
             @roles = &construction_space_roles();
         } else {
             my $custom = 1;
-            @roles = &course_roles('domain',undef,$custom);
+            @roles = &course_roles('domain',undef,$custom,$roletype);
         }
         my $order = ['Any',@roles];
         $select_menus{$roletype}->{'order'} = $order; 
@@ -278,7 +279,8 @@
     }
     my $result = &Apache::loncommon::linked_select_forms
         ('studentform',(' 'x3).&mt('Role: '),$env{'form.roletype'},
-         'roletype','showrole',\%select_menus,['domain','author','course']);
+         'roletype','showrole',\%select_menus,
+         ['domain','author','course','community']);
     return $result;
 }
 
@@ -743,7 +745,7 @@
 ###############################################################
 ###############################################################
 sub print_upload_manager_footer {
-    my ($r,$i,$keyfields,$defdom,$today,$halfyear,$context,$permission) = @_;
+    my ($r,$i,$keyfields,$defdom,$today,$halfyear,$context,$permission,$crstype) = @_;
     my $form = 'document.studentform';
     my $formname = 'studentform';
     my ($krbdef,$krbdefdom) =
@@ -761,7 +763,7 @@
     my $intform = &Apache::loncommon::authform_internal(%param);
     my $locform = &Apache::loncommon::authform_local(%param);
     my $date_table = &date_setting_table(undef,undef,$context,undef,
-                                         $formname,$permission);
+                                         $formname,$permission,$crstype);
 
     my $Str = "\n".'<div class="LC_left_float">';
     $Str .= &hidden_input('nfields',$i);
@@ -860,15 +862,26 @@
         my ($cnum,$cdom) = &get_course_identity();
         my $rowtitle = &mt('section');
         my $secbox = &section_picker($cdom,$cnum,'Any',$rowtitle,
-                                     $permission,$context,'upload');
+                                     $permission,$context,'upload',$crstype);
         $Str .= $secbox
                .&Apache::lonhtmlcommon::row_closure();
-
+        my %lt;
+        if ($crstype eq 'Community') {
+            %lt = &Apache::lonlocal::texthash (
+                    disp => 'Display members with current/future access who are not in the uploaded file',
+                    stus => 'Members selected from this list can be dropped.'
+            );
+        } else {
+            %lt = &Apache::lonlocal::texthash (
+                    disp => 'Display students with current/future access who are not in the uploaded file',
+                    stus => 'Students selected from this list can be dropped.'
+            );
+        }
         $Str .= &Apache::lonhtmlcommon::row_title(&mt('Full Update'))
-               .'<label><input type="checkbox" name="fullup" value="yes" />'.
-                ' '.&mt('Display students with current/future access who are not in the uploaded file.')
+               .'<label><input type="checkbox" name="fullup" value="yes" />'
+               .' '.$lt{'disp'}
                .'</label><br />'
-               .&mt('Students selected from this list can be dropped.')
+               .$lt{'stus'}
                .&Apache::lonhtmlcommon::row_closure();
     }
     if ($context eq 'course' || $context eq 'domain') {
@@ -916,7 +929,7 @@
 ###############################################################
 ###############################################################
 sub print_upload_manager_form {
-    my ($r,$context,$permission) = @_;
+    my ($r,$context,$permission,$crstype) = @_;
     my $firstLine;
     my $datatoken;
     if (!$env{'form.datatoken'}) {
@@ -999,7 +1012,7 @@
     }
     $r->print('</div>');
     &print_upload_manager_footer($r,$i,$keyfields,$defdom,$today,$halfyear,
-                                 $context,$permission);
+                                 $context,$permission,$crstype);
 }
 
 sub setup_date_selectors {
@@ -1073,7 +1086,7 @@
 }
 
 sub date_setting_table {
-    my ($starttime,$endtime,$mode,$bulkaction,$formname,$permission) = @_;
+    my ($starttime,$endtime,$mode,$bulkaction,$formname,$permission,$crstype) = @_;
     my $nolink;
     if ($bulkaction) {
         $nolink = 1;
@@ -1090,9 +1103,13 @@
             ($env{'form.action'} eq 'upload')) {
             if ($env{'request.course.sec'} eq '') {
                 $dateDefault = '<span class="LC_nobreak">'.
-                    '<label><input type="checkbox" name="makedatesdefault" value="1" /> '.
-                    &mt('make these dates the default access dates for future student enrollment').
-                    '</label></span>';
+                    '<label><input type="checkbox" name="makedatesdefault" value="1" /> ';
+                if ($crstype eq 'Community') {
+                    $dateDefault .= &mt("make these dates the default access dates for future community enrollment");
+                } else {
+                    $dateDefault .= &mt("make these dates the default access dates for future course enrollment");
+                }
+                $dateDefault .= '</label></span>';
             }
         }
     }
@@ -1121,7 +1138,7 @@
 }
 
 sub make_dates_default {
-    my ($startdate,$enddate,$context) = @_;
+    my ($startdate,$enddate,$context,$crstype = @_;
     my $result = '';
     if ($context eq 'course') {
         my ($cnum,$cdom) = &get_course_identity();
@@ -1129,22 +1146,30 @@
                 {'default_enrollment_start_date'=>$startdate,
                  'default_enrollment_end_date'  =>$enddate},$cdom,$cnum);
         if ($put_result eq 'ok') {
-            $result .= &mt('Set default start and end access dates for course.').
-                       '<br />'."\n";
+            if ($crstype eq 'Community') {
+                $result .= &mt('Set default start and end access dates for community.');
+            } else {
+                $result .= &mt('Set default start and end access dates for course.');
+            }
+            $result .= '<br />'."\n";
             #
             # Refresh the course environment
             &Apache::lonnet::coursedescription($env{'request.course.id'},
                                                {'freshen_cache' => 1});
         } else {
-            $result .= &mt('Unable to set default access dates for course.').":".$put_result.
-                       '<br />';
+            if ($crstype eq 'Community') {
+                $result .= &mt('Unable to set default access dates for community');
+            } else {
+                $result .= &mt('Unable to set default access dates for course');
+            }
+            $result .= ':'.$put_result.'<br />';
         }
     }
     return $result;
 }
 
 sub default_role_selector {
-    my ($context,$checkpriv) = @_;
+    my ($context,$checkpriv,$crstype) = @_;
     my %customroles;
     my ($options,$coursepick,$cb_jscript);
     if ($context ne 'author') {
@@ -1160,7 +1185,7 @@
     $options = '<select name="defaultrole">'."\n".
                ' <option value="">'.&mt('Please select').'</option>'."\n"; 
     if ($context eq 'course') {
-        $options .= &default_course_roles($context,$checkpriv,%customroles);
+        $options .= &default_course_roles($context,$checkpriv,$crstype,%customroles);
     } elsif ($context eq 'author') {
         my @roles = &construction_space_roles($checkpriv);
         foreach my $role (@roles) {
@@ -1185,7 +1210,7 @@
                       &Apache::loncommon::start_data_table_row()."\n".
                       '<td><input type="text" name="coursedesc" value="" onfocus="this.blur();opencrsbrowser('."'studentform','dccourse','dcdomain','coursedesc',''".')" /></td>'."\n".
                       '<td><select name="courserole">'."\n".
-                      &default_course_roles($context,$checkpriv,%customroles)."\n".
+                      &default_course_roles($context,$checkpriv,'Course',%customroles)."\n".
                       '</select></td><td>'.
                       '<table class="LC_createuser">'.
                       '<tr class="LC_section_row"><td valign"top">'.
@@ -1210,13 +1235,13 @@
 }
 
 sub default_course_roles {
-    my ($context,$checkpriv,%customroles) = @_;
+    my ($context,$checkpriv,$crstype,%customroles) = @_;
     my $output;
     my $custom = 1;
-    my @roles = &course_roles($context,$checkpriv,$custom);
+    my @roles = &course_roles($context,$checkpriv,$custom,lc($crstype));
     foreach my $role (@roles) {
         if ($role ne 'cr') {
-            my $plrole=&Apache::lonnet::plaintext($role);
+            my $plrole=&Apache::lonnet::plaintext($role,$crstype);
             $output .= '  <option value="'.$role.'">'.$plrole.'</option>';
         }
     }
@@ -1265,8 +1290,8 @@
 }
 
 sub course_roles {
-    my ($context,$checkpriv,$custom) = @_;
-    my @allroles = &roles_by_context('course',$custom);
+    my ($context,$checkpriv,$custom,$roletype) = @_;
+    my @allroles = &roles_by_context('course',$custom,$roletype);
     my @roles;
     if ($context eq 'domain') {
         @roles = @allroles;
@@ -1277,7 +1302,7 @@
                     if (&Apache::lonnet::allowed('c'.$role,$env{'request.course.id'})) {
                         push(@roles,$role);
                     } else {
-                        if ($role ne 'cc' && $env{'request.course.sec'} ne '') {
+                        if ((($role ne 'cc') && ($role ne 'co')) && ($env{'request.course.sec'} ne '')) {
                             if (&Apache::lonnet::allowed('c'.$role,
                                              $env{'request.course.id'}.'/'.
                                              $env{'request.course.sec'})) {
@@ -1295,19 +1320,19 @@
 }
 
 sub curr_role_permissions {
-    my ($context,$setting,$checkpriv) = @_; 
+    my ($context,$setting,$checkpriv,$type) = @_; 
     my $custom = 1;
     my @roles;
     if ($context eq 'author') {
         @roles = &construction_space_roles($checkpriv);
     } elsif ($context eq 'domain') {
         if ($setting eq 'course') {
-            @roles = &course_roles($context,$checkpriv,$custom); 
+            @roles = &course_roles($context,$checkpriv,$custom,$type); 
         } else {
             @roles = &domain_roles($checkpriv);
         }
     } elsif ($context eq 'course') {
-        @roles = &course_roles($context,$checkpriv,$custom);
+        @roles = &course_roles($context,$checkpriv,$custom,$type);
     }
     return @roles;
 }
@@ -1407,26 +1432,46 @@
                   '<input type="hidden" name="phase" value="" /></form>');
         return;
     }
-    if (!(($context eq 'domain') && ($env{'form.roletype'} eq 'course'))) {
+    if (!(($context eq 'domain') && 
+        (($env{'form.roletype'} eq 'course') || ($env{'form.roletype'} eq 'community')))) {
         $r->print('&nbsp;'.&list_submit_button(&mt('Update Display')).
                   "\n</p>\n");
     }
     my ($indexhash,$keylist) = &make_keylist_array();
-    my (%userlist,%userinfo);
-    if ($context eq 'domain' && $env{'form.roletype'} eq 'course') {
+    my (%userlist,%userinfo,$clearcoursepick);
+    if (($context eq 'domain') && 
+        ($env{'form.roletype'} eq 'course') ||
+        ($env{'form.roletype'} eq 'community')) {
+        my ($crstype,$numcodes,$title,$warning);
+        if ($env{'form.roletype'} eq 'course') {
+            $crstype = 'Course';
+            $numcodes = $totcodes;
+            $title = &mt('Select Courses');
+            $warning = &mt('Warning: data retrieval for multiple courses can take considerable time, as this operation is not currently optimized.');
+        } elsif ($env{'form.roletype'} eq 'community') {
+            $crstype = 'Community';
+            $numcodes = 0;
+            $title = &mt('Select Communities');
+            $warning = &mt('Warning: data retrieval for multiple communities can take considerable time, as this operation is not currently optimized.');
+        }
         my $courseform =
-            &Apache::lonhtmlcommon::course_selection($formname,$totcodes,
-                                         $codetitles,$idlist,$idlist_titles);
+            &Apache::lonhtmlcommon::course_selection($formname,$numcodes,
+                            $codetitles,$idlist,$idlist_titles,$crstype);
         $r->print('<p>'.&Apache::lonhtmlcommon::start_pick_box()."\n".
                   &Apache::lonhtmlcommon::start_pick_box()."\n".
-                  &Apache::lonhtmlcommon::row_title(&mt('Select Course(s)'),
-                                                    'LC_oddrow_value')."\n".
+                  &Apache::lonhtmlcommon::row_title($title,'LC_oddrow_value')."\n".
                   $courseform."\n".
                   &Apache::lonhtmlcommon::row_closure(1).
                   &Apache::lonhtmlcommon::end_pick_box().'</p>'.
-                  '<p>'.&list_submit_button(&mt('Update Display')).
-                  "\n".'</p><span class="LC_warning">'.&mt('Warning: data retrieval for multiple courses can take considerable time, as this operation is not currently optimized.').'</span>'."\n");
-        if ($env{'form.coursepick'}) {
+                  '<p><input type="hidden" name="origroletype" value="'.$env{'form.roletype'}.'" />'.
+                  &list_submit_button(&mt('Update Display')).
+                  "\n".'</p><span class="LC_warning">'.$warning.'</span>'."\n");
+        $clearcoursepick = 0;
+        if (($env{'form.origroletype'} ne '') &&
+            ($env{'form.origroletype'} ne $env{'form.roletype'})) {
+            $clearcoursepick = 1;
+        }
+        if (($env{'form.coursepick'}) && (!$clearcoursepick)) {
             $r->print('<hr />'.&mt('Searching').' ...<br />&nbsp;<br />');
         }
     } else {
@@ -1500,7 +1545,7 @@
                     }
                 }
             } elsif ($env{'form.roletype'} eq 'course') {
-                if ($env{'form.coursepick'}) {
+                if (($env{'form.coursepick'}) && (!$clearcoursepick)) {
                     my %courses = &process_coursepick();
                     my %allusers;
                     my $hidepriv = 1;
@@ -1511,7 +1556,8 @@
                         my (@roles,@sections,%access,%users,%userdata,
                             %statushash);
                         if ($env{'form.showrole'} eq 'Any') {
-                            @roles = &course_roles($context,undef,$custom);
+                            @roles = &course_roles($context,undef,$custom,
+                                                   $env{'form.roletype'});
                         } else {
                             @roles = ($env{'form.showrole'});
                         }
@@ -1557,6 +1603,8 @@
                 $r->print(&mt('There are no authors or co-authors to display.')."\n");
             } elsif ($env{'form.roletype'} eq 'course') {
                 $r->print(&mt('There are no course users to display')."\n"); 
+            } elsif ($env{'form.roletype'} eq 'community') {
+                $r->print(&mt('There are no community users to display')."\n");
             }
         } elsif ($context eq 'course') {
             $r->print(&mt('There are no course users to display.')."\n");
@@ -1599,7 +1647,16 @@
         $role_select = '<select name="showrole">'."\n".
                        '<option value="Any" '.$roleselected.'>'.
                        &mt('Any role').'</option>';
-        my @poss_roles = &curr_role_permissions($context);
+        my ($roletype,$crstype);
+        if ($context eq 'course') {
+            $crstype = &Apache::loncommon::course_type();
+            if ($crstype eq 'Community') {
+                $roletype = 'community';
+            } else {
+                $roletype = 'course';
+            } 
+        }
+        my @poss_roles = &curr_role_permissions($context,'','',$roletype);
         foreach my $role (@poss_roles) {
             $roleselected = '';
             if ($role eq $env{'form.showrole'}) {
@@ -1609,7 +1666,7 @@
             if ($role eq 'cr') {
                 $plrole = &mt('Custom role');
             } else {
-                $plrole=&Apache::lonnet::plaintext($role);
+                $plrole=&Apache::lonnet::plaintext($role,$crstype);
             }
             $role_select .= '<option value="'.$role.'"'.$roleselected.'>'.$plrole.'</option>';
         }
@@ -2039,9 +2096,10 @@
         $sortby = 'username';
     }
     my $setting = $env{'form.roletype'};
-    my ($cid,$cdom,$cnum,$classgroups,$displayphotos,$displayclickers);
+    my ($cid,$cdom,$cnum,$classgroups,$displayphotos,$displayclickers,$crstype);
     if ($context eq 'course') {
         $cid = $env{'request.course.id'};
+        $crstype = &Apache::loncommon::course_type();
         ($cnum,$cdom) = &get_course_identity($cid);
         ($classgroups) = &Apache::loncoursedata::get_group_memberships(
                                      $userlist,$keylist,$cdom,$cnum);
@@ -2239,9 +2297,9 @@
                 if ($env{'form.showrole'} eq 'Any') {
                     my $custom = 1;
                     if ($context eq 'domain') {
-                        @allroles = &roles_by_context($setting,$custom);
+                        @allroles = &roles_by_context($setting,$custom,$crstype);
                     } else {
-                        @allroles = &roles_by_context($context,$custom);
+                        @allroles = &roles_by_context($context,$custom,$crstype);
                     }
                 } else {
                     @allroles = ($env{'form.showrole'});
@@ -2554,7 +2612,7 @@
         if ($clickers!~/\w/) { $clickers='-'; }
         $in{'clicker'} = $clickers; 
 	my $role = $in{'role'};
-        $in{'role'}=&Apache::lonnet::plaintext($sdata->[$index{'role'}]); 
+        $in{'role'}=&Apache::lonnet::plaintext($sdata->[$index{'role'}],$crstype); 
         if (! defined($in{'start'}) || $in{'start'} == 0) {
             $in{'start'} = &mt('none');
         } else {
@@ -2852,6 +2910,8 @@
                          'domain' => 'Domain Roles',
                          'author' => 'Co-Author Roles',
                          'course' => 'Course Roles',
+                         'community' => 'Community Roles',
+
              );
     return %lt;
 }
@@ -2988,7 +3048,7 @@
 }
 
 sub date_section_selector {
-    my ($context,$permission) = @_;
+    my ($context,$permission,$crstype) = @_;
     my $callingform = $env{'form.callingform'};
     my $formname = 'dateselect';  
     my $groupslist = &get_groupslist();
@@ -3087,7 +3147,7 @@
         }
         $date_items = &date_setting_table($starttime,undef,$context,
                                           $env{'form.bulkaction'},$formname,
-                                          $permission);
+                                          $permission,$crstype);
     }
     $output .= '<h3>'.$headertext.'</h3>'.
                '<form name="'.$formname.'" method="post">'."\n".
@@ -3119,7 +3179,7 @@
             $info = '<input type="hidden" name="retainsec" value="0" />'; 
         }
         my $rowtitle = &mt('New section to assign');
-        my $secbox = &section_picker($cdom,$cnum,$env{'form.showrole'},$rowtitle,$permission,$context);
+        my $secbox = &section_picker($cdom,$cnum,$env{'form.showrole'},$rowtitle,$permission,$context,'',$crstype);
         $output .= $info.$secbox;
     }
     $output .= '<p>'.
@@ -3129,13 +3189,13 @@
 }
 
 sub section_picker {
-    my ($cdom,$cnum,$role,$rowtitle,$permission,$context,$mode) = @_;
+    my ($cdom,$cnum,$role,$rowtitle,$permission,$context,$mode,$crstype) = @_;
     my %sections_count = &Apache::loncommon::get_sections($cdom,$cnum);
     my $sections_select .= &course_sections(\%sections_count,$role);
     my $secbox = '<p>'.&Apache::lonhtmlcommon::start_pick_box()."\n";
     if ($mode eq 'upload') {
         my ($options,$cb_script,$coursepick) =
-            &default_role_selector($context,1);
+            &default_role_selector($context,1,$crstype);
         $secbox .= &Apache::lonhtmlcommon::row_title(&mt('role'),'LC_oddrow_value').
                    $options. &Apache::lonhtmlcommon::row_closure(1)."\n";
     }
@@ -3323,7 +3383,7 @@
 #################################################
 #################################################
 sub show_drop_list {
-    my ($r,$classlist,$nosort,$permission) = @_;
+    my ($r,$classlist,$nosort,$permission,$crstype) = @_;
     my $cid = $env{'request.course.id'};
     my ($cnum,$cdom) = &get_course_identity($cid);
     if (! exists($env{'form.sortby'})) {
@@ -3369,7 +3429,11 @@
         }
     }
     if (!$studentcount) {
-        $r->print(&mt('There are no students to drop.'));
+        if ($crstype eq 'Community') {
+            $r->print(&mt('There are no members to drop.'));
+        } else {
+            $r->print(&mt('There are no students to drop.'));
+        }
         return;
     }
     my ($classgroups) = &Apache::loncoursedata::get_group_memberships(
@@ -3377,11 +3441,16 @@
     my %lt=&Apache::lonlocal::texthash('usrn'   => "username",
                                        'dom'    => "domain",
                                        'sn'     => "student name",
+                                       'mn'     => "member name",
                                        'sec'    => "section",
                                        'start'  => "start date",
                                        'end'    => "end date",
                                        'groups' => "active groups",
                                       );
+    my $nametitle = $lt{'sn'};
+    if ($crstype eq 'Community') {
+        $nametitle = $lt{'mn'};
+    }
     if ($nosort) {
         $r->print(&Apache::loncommon::start_data_table().
                   &Apache::loncommon::start_data_table_header_row());
@@ -3390,7 +3459,7 @@
     <th>$lt{'usrn'}</th>
     <th>$lt{'dom'}</th>
     <th>ID</th>
-    <th>$lt{'sn'}</th>
+    <th>$nametitle</th>
     <th>$lt{'sec'}</th>
     <th>$lt{'start'}</th>
     <th>$lt{'end'}</th>
@@ -3409,7 +3478,7 @@
     </th><th>
        <a href="/adm/createuser?action=$action&sortby=id">ID</a>
     </th><th>
-       <a href="/adm/createuser?action=$action&sortby=fullname">$lt{'sn'}</a>
+       <a href="/adm/createuser?action=$action&sortby=fullname">$nametitle</a>
     </th><th>
        <a href="/adm/createuser?action=$action&sortby=section">$lt{'sec'}</a>
     </th><th>
@@ -3479,9 +3548,14 @@
     $r->print(&Apache::loncommon::end_data_table().'<br />');
     %lt=&Apache::lonlocal::texthash(
                        'dp'   => "Drop Students",
+                       'dm'   => "Drop Members",
                        'ca'   => "check all",
                        'ua'   => "uncheck all",
                                        );
+    my $btn = $lt{'dp'};
+    if ($crstype eq 'Community') {
+        $btn = $lt{'dm'}; 
+    }
     $r->print(<<"END");
 </p>
 <p>
@@ -3489,7 +3563,7 @@
 <input type="button" value="$lt{'ua'}" onclick="javascript:uncheckAll(document.studentform.droplist)" />
 </p>
 <p>
-<input type="submit" value="$lt{'dp'}" />
+<input type="submit" value="$btn" />
 </p>
 END
     return;
@@ -3503,7 +3577,8 @@
     my $str;
     $str  = '<input type="hidden" name="phase" value="two" />';
     $str .= '<input type="hidden" name="action" value="upload" />';
-    $str .= '<input type="hidden"   name="state"  value="got_file" />';
+    $str .= '<input type="hidden" name="state"  value="got_file" />';
+
 
     $str .= '<h2>'.&mt('Upload a file containing information about users').'</h2>'."\n";
 
@@ -3583,9 +3658,22 @@
                                                 'domain_choice' => 'scalar',
                                                 'inststatus_choice' => 'scalar'});
     #
+    my ($cid,$crstype,$setting);
+    if ($context eq 'domain') {
+        $setting = $env{'form.roleaction'};
+    }
+    if ($env{'request.course.id'} ne '') {
+        $cid = $env{'request.course.id'};
+        $crstype = &Apache::loncommon::course_type();
+    } elsif ($setting eq 'course') {
+        if (&Apache::lonnet::is_course($env{'form.dcdomain'},$env{'form.dccourse'})) {
+            $cid = $env{'form.dcdomain'}.'_'.$env{'form.dccourse'};
+            $crstype = &Apache::loncommon::course_type($cid);
+        }
+    }
     my ($startdate,$enddate) = &get_dates_from_form();
     if ($env{'form.makedatesdefault'}) {
-        $r->print(&make_dates_default($startdate,$enddate,$context));
+        $r->print(&make_dates_default($startdate,$enddate,$context,$crstype);
     }
     # Determine domain and desired host (home server)
     my $defdom=$env{'request.role.domain'};
@@ -3637,28 +3725,20 @@
             $amode = ''; # This causes the loop below to be skipped
         }
     }
-    my ($cid,$defaultsec,$defaultrole,$setting);
+    my ($defaultsec,$defaultrole);
     if ($context eq 'domain') {
-        $setting = $env{'form.roleaction'};
         if ($setting eq 'domain') {
             $defaultrole = $env{'form.defaultrole'};
         } elsif ($setting eq 'course') {
             $defaultrole = $env{'form.courserole'};
             $defaultsec = $env{'form.sections'};
-        }  
+        }
     } elsif ($context eq 'author') {
         $defaultrole = $env{'form.defaultrole'};
     } elsif ($context eq 'course') {
         $defaultrole = $env{'form.defaultrole'};
         $defaultsec = $env{'form.sections'};
     }
-    if ($env{'request.course.id'} ne '') {
-        $cid = $env{'request.course.id'};
-    } elsif ($setting eq 'course') {
-        if (&Apache::lonnet::is_course($env{'form.dcdomain'},$env{'form.dccourse'})) {
-            $cid = $env{'form.dcdomain'}.'_'.$env{'form.dccourse'};
-        }
-    }
     # Check to see if user information can be changed
     my @userinfo = ('firstname','middlename','lastname','generation',
                     'permanentemail','id');
@@ -3671,10 +3751,10 @@
     }
     my (%userlist,%modifiable_fields,@poss_roles);
     my $secidx = &Apache::loncoursedata::CL_SECTION();
-    my @courseroles = &roles_by_context('course',1);
+    my @courseroles = &roles_by_context('course',1,'',$crstype);
     if (!&Apache::lonnet::allowed('mau',$domain)) {
         if ($context eq 'course' || $context eq 'author') {
-            @poss_roles =  &curr_role_permissions($context);
+            @poss_roles =  &curr_role_permissions($context,'','',$crstype);
             my @statuses = ('active','future');
             my ($indexhash,$keylist) = &make_keylist_array();
             my %info;
@@ -3761,7 +3841,8 @@
         }
         my (%curr_rules,%got_rules,%alerts);
         my %customroles = &my_custom_roles();
-        my @permitted_roles = &roles_on_upload($context,$setting,%customroles); 
+        my @permitted_roles = 
+            &roles_on_upload($context,$setting,$crstype,%customroles); 
         # Get new users list
         foreach my $line (@userdata) {
             my @secs;
@@ -4204,14 +4285,24 @@
 
 # ========================================================= Menu Phase Two Drop
 sub print_drop_menu {
-    my ($r,$context,$permission) = @_;
-    $r->print('<h3>'.&mt("Drop Students").'</h3>'."\n".
+    my ($r,$context,$permission,$crstype) = @_;
+    my $heading;
+    if ($crstype eq 'Community') {
+        $heading = &mt("Drop Members");
+    } else {
+        $heading = &mt("Drop Students");
+    }
+    $r->print('<h3>'.$heading.'</h3>'."\n".
               '<form name="studentform" method="post">'."\n");
     my $classlist = &Apache::loncoursedata::get_classlist();
     if (! defined($classlist)) {
-        $r->print(&mt('There are no students currently enrolled.')."\n");
+        if ($crstype eq 'Community') {
+            $r->print(&mt('There are no members currently enrolled.')."\n");
+        } else {
+            $r->print(&mt('There are no students currently enrolled.')."\n");
+        }
     } else {
-        &show_drop_list($r,$classlist,'nosort',$permission);
+        &show_drop_list($r,$classlist,'nosort',$permission,$crstype);
     }
     $r->print('</form>'. &Apache::loncommon::end_page());
     return;
@@ -4223,6 +4314,10 @@
     my ($r,$context,$setting,$choice) = @_;
     my $now = time;
     my $count=0;
+    my $crstype;
+    if ($context eq 'course') {
+        $crstype = &Apache::loncommon::course_type();
+    }
     my @changelist;
     if ($choice eq 'drop') {
         @changelist = &Apache::loncommon::get_env_multiple('form.droplist');
@@ -4293,7 +4388,7 @@
                 }
             }
         }
-        my $plrole = &Apache::lonnet::plaintext($role);
+        my $plrole = &Apache::lonnet::plaintext($role,$crstype);
         my $start = $env{'form.'.$item.'_start'};
         my $end = $env{'form.'.$item.'_end'};
         if ($choice eq 'drop') {
@@ -4458,7 +4553,7 @@
     }
     if ($env{'form.makedatesdefault'}) {
         if ($choice eq 'chgdates' || $choice eq 'reenable' || $choice eq 'activate') {
-            $r->print(&make_dates_default($startdate,$enddate,$context));
+            $r->print(&make_dates_default($startdate,$enddate,$context,$crstype));
         }
     }
     my $linktext = &mt('Display User Lists');
@@ -4842,14 +4937,19 @@
 }
 
 sub roles_by_context {
-    my ($context,$custom) = @_;
+    my ($context,$custom,$crstype) = @_;
     my @allroles;
     if ($context eq 'course') {
         @allroles = ('st');
         if ($env{'request.role'} =~ m{^dc\./}) {
             push(@allroles,'ad');
         }
-        push(@allroles,('ta','ep','in','cc'));
+        push(@allroles,('ta','ep','in'));
+        if ($crstype eq 'Community') {
+            push(@allroles,'co');
+        } else {
+            push(@allroles,'cc');
+        }
         if ($custom) {
             push(@allroles,'cr');
         }
@@ -4862,11 +4962,11 @@
 }
 
 sub get_permission {
-    my ($context,$roles) = @_;
+    my ($context,$crstype) = @_;
     my %permission;
     if ($context eq 'course') {
         my $custom = 1;
-        my @allroles = &roles_by_context($context,$custom);
+        my @allroles = &roles_by_context($context,$custom,$crstype);
         foreach my $role (@allroles) {
             if (&Apache::lonnet::allowed('c'.$role,$env{'request.course.id'})) {
                 $permission{'cusr'} = 1;
@@ -4935,9 +5035,9 @@
 }
 
 sub roles_on_upload {
-    my ($context,$setting,%customroles) = @_;
+    my ($context,$setting,$crstype,%customroles) = @_;
     my (@possible_roles,@permitted_roles);
-    @possible_roles = &curr_role_permissions($context,$setting,1);
+    @possible_roles = &curr_role_permissions($context,$setting,1,$crstype);
     foreach my $role (@possible_roles) {
         if ($role eq 'cr') {
             push(@permitted_roles,keys(%customroles));

--raeburn1264009285--