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

raeburn raeburn@source.lon-capa.org
Thu, 29 Oct 2009 14:57:18 -0000


This is a MIME encoded message

--raeburn1256828238
Content-Type: text/plain

raeburn		Thu Oct 29 14:57:18 2009 EDT

  Modified files:              
    /loncom/interface	lonconfigsettings.pm courseprefs.pm 
  Log:
  - Accommodate Communities:
    - Wording variants: course -> community, Course -> Community, 
                        Classlist -> Membership, Staff -> Facilitators,
                        Student -> Member, student -> member.
    - Role choices: co role instead of cc role for communities  
  
  
--raeburn1256828238
Content-Type: text/plain
Content-Disposition: attachment; filename="raeburn-20091029145718.txt"

Index: loncom/interface/lonconfigsettings.pm
diff -u loncom/interface/lonconfigsettings.pm:1.6 loncom/interface/lonconfigsettings.pm:1.7
--- loncom/interface/lonconfigsettings.pm:1.6	Sun Aug 23 17:21:22 2009
+++ loncom/interface/lonconfigsettings.pm	Thu Oct 29 14:57:18 2009
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Handler to set domain-wide configuration settings
 #
-# $Id: lonconfigsettings.pm,v 1.6 2009/08/23 17:21:22 raeburn Exp $
+# $Id: lonconfigsettings.pm,v 1.7 2009/10/29 14:57:18 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -43,7 +43,11 @@
         ($pagetitle, $brcrumtitle) = ('View/Modify Domain Settings','Domain Settings');
         $action = '/adm/domainprefs';
     } else {
-        ($pagetitle, $brcrumtitle) = ('Course Configuration','Course Configuration');
+        if (&Apache::loncommon::course_type() eq 'Community') {
+            ($pagetitle,$brcrumtitle) = ('Community Configuration','Community Configuration');
+        } else {
+            ($pagetitle,$brcrumtitle) = ('Course Configuration','Course Configuration');
+        }
         $action = '/adm/courseprefs';
     }
     my $alert = &mt('You must select at least one functionality type to display.');
@@ -169,6 +173,10 @@
        {href=>"javascript:changePage(document.$phase,'$phase')",
         text=>"Updated"});
     &print_header($r,$phase,$context);
+    my $crstype;
+    if ($context eq 'course') {
+        $crstype = &Apache::loncommon::course_type();
+    }
     if ((ref($prefs_order) eq 'ARRAY') && (ref($prefs) eq 'HASH') && 
         (ref($prefs) eq 'HASH')) {
         foreach my $item (@{$prefs_order}) {
@@ -176,12 +184,12 @@
                 if ($context eq 'domain') {
                     $r->print('<h3>'.&mt($prefs->{$item}{'text'}).'</h3>'.
                               &Apache::domainprefs::process_changes($r,$dom,
-                                          $confname,$item,$roles,$values,));
+                                          $confname,$item,$roles,$values));
                 } else {
                     $changes{$item} = {};
                     &Apache::courseprefs::process_changes($dom,$item,$values,
                                                           $prefs->{$item},$changes{$item},
-                                                          $allitems,\%disallowed);
+                                                          $allitems,\%disallowed,$crstype);
                     if (keys(%{$changes{$item}}) > 0) {
                         $numchanged ++;
                     }
@@ -192,9 +200,13 @@
     if ($context eq 'course') {
         if ($numchanged) {
             $r->print(&Apache::courseprefs::store_changes($dom,$confname,$prefs_order,\@actions,
-                                                          $prefs,$values,\%changes));
+                                                          $prefs,$values,\%changes,$crstype));
         } else {
-            $r->print(&mt('No changes made to course configuration.'));
+            if ($crstype eq 'Community') {
+                $r->print(&mt("No changes made to community configuration."));
+            } else {
+                $r->print(&mt("No changes made to course configuration."));
+            }
         }
         if (keys(%disallowed) > 0) {
             $r->print('<p>');
@@ -202,7 +214,7 @@
                 if (ref($disallowed{$item}) eq 'HASH') {
                     if (keys(%{$disallowed{$item}}) > 0) {
                         $r->print(&Apache::courseprefs::display_disallowed($item,$disallowed{$item},
-                                                                           $prefs));
+                                                                           $prefs,$crstype));
                     }
                 }
             }
@@ -220,7 +232,7 @@
 
 sub display_settings {
     my ($r,$dom,$phase,$context,$prefs_order,$prefs,$values,$confname,$jscript,
-        $allitems) = @_;
+        $allitems,$crstype) = @_;
     my %brcrumtext = &get_crumb_text();
     my @actions = &Apache::loncommon::get_env_multiple('form.actions');
     &Apache::lonhtmlcommon::add_breadcrumb
@@ -242,7 +254,7 @@
                     } else {
                         ($output{$item},$rowtotal{$item}) =
                             &Apache::courseprefs::print_config_box($r,$dom,$phase,
-                                $item,$prefs->{$item},$values,$allitems);
+                                $item,$prefs->{$item},$values,$allitems,$crstype);
                     }
                     $rowsum += $rowtotal{$item};
                 }
Index: loncom/interface/courseprefs.pm
diff -u loncom/interface/courseprefs.pm:1.8 loncom/interface/courseprefs.pm:1.9
--- loncom/interface/courseprefs.pm:1.8	Tue Oct 13 04:48:03 2009
+++ loncom/interface/courseprefs.pm	Thu Oct 29 14:57:18 2009
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Handler to set configuration settings for a course
 #
-# $Id: courseprefs.pm,v 1.8 2009/10/13 04:48:03 raeburn Exp $
+# $Id: courseprefs.pm,v 1.9 2009/10/29 14:57:18 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -57,11 +57,22 @@
         $r->send_http_header;
     } else {
         if ($navmap) {
-            $env{'user.error.msg'}=
-                "/adm/courseprefs:opa:0:0:Cannot modify course settings";
+            if ($crstype eq 'Community') {
+                $env{'user.error.msg'}=
+                    "/adm/courseprefs:opa:0:0:Cannot modify community settings";
+            } else {
+                $env{'user.error.msg'}=
+                    "/adm/courseprefs:opa:0:0:Cannot modify course settings";
+            }
         } else {
-           $env{'user.error.msg'}=
-                "/adm/courseprefs::0:1:Course environment gone, reinitialize the course";
+            if ($crstype eq 'Community') {
+                $env{'user.error.msg'}=
+                    "/adm/courseprefs::0:1:Course environment gone, reinitialize the community";
+            } else {
+                $env{'user.error.msg'}=
+                    "/adm/courseprefs::0:1:Course environment gone, reinitialize the course";
+
+            }
         }
         return HTTP_NOT_ACCEPTABLE;
     }
@@ -73,10 +84,63 @@
         &Apache::lonhtmlcommon::add_breadcrumb({href=>"/adm/parmset",
                                                 text=>"Parameter Manager"});
     }
+    my ($brtext,$brtitle,$crsinfotext,$crsinfodesc,$crscateg,$crshide);
+    my %lt;
+    if ($crstype eq 'Community') {
+        %lt = (
+                conf => 'Community Configuration',
+                edit => 'Edit Community Configuration',
+                gens => 'General community settings',
+                idnu => 'Community ID or number',
+                desc => 'Community Description',
+                catg => 'Categorize community',
+                excc => 'Exclude from community catalog',
+                clon => 'Users allowed to clone community',
+                rept => 'Replacement titles for standard community roles',
+                time => 'Timezone where the community is located',
+                date => 'Locale used for community calendar',
+                coco => 'Community Content',
+                copo => 'Community Policy',
+                priv => 'Domain Coodinators in community',
+                defd => 'Default dates for member access',
+                stuv => 'Member-viewable membership list options',
+                stul => 'Member agreement needed to be listed',
+                clas => 'Membership and Facilitator Listing',
+                priv => 'Privileged users (Domain Coordinators) in facilitator listing',
+                defc => 'Default Community Spreadsheet',
+                defs => 'Default User Spreadsheet',
+                seme => 'Send message to member when clicking Done on Tasks'
+              );
+    } else {
+        %lt = (
+                conf => 'Course Configuration',
+                edit => 'Edit Course Configuration',
+                gens => 'General course settings',
+                idnu => 'Course ID or number',
+                desc => 'Course Description',
+                catg => 'Categorize course',
+                excc => 'Exclude from course catalog',
+                clon => 'Users allowed to clone course',
+                rept => 'Replacement titles for standard course roles',
+                time => 'Timezone in which the course takes place',
+                date => 'Locale used for course calendar',
+                coco => 'Course Content',
+                copo => 'Course Policy',
+                priv => 'Domain Coodinators in course',
+                defd => 'Default dates for student access',
+                stuv => 'Student-viewable classlist options',
+                stul => 'Student agreement needed to be listed',
+                clas => 'Classlists and Staff Listing',
+                priv => 'Privileged users (Domain Coordinators) in staff listing',
+                defc => 'Default Course Spreadsheet',
+                defs => 'Default Student Spreadsheet',
+                seme => 'Send message to student when clicking Done on Tasks',
+              );
+    }
     &Apache::lonhtmlcommon::add_breadcrumb({href=>'/adm/courseprefs',
-        text=>"Course Configuration"});
+        text=>$lt{'conf'}});
     my $breadcrumbs =
-        &Apache::lonhtmlcommon::breadcrumbs('Edit Course Configuration');
+        &Apache::lonhtmlcommon::breadcrumbs($lt{'edit'});
 
     my $phase = 'pickactions';
     if ( exists($env{'form.phase'}) ) {
@@ -84,7 +148,7 @@
     }
 
     if ($phase eq 'categorizecourse') {
-        &assign_course_categories($r);
+        &assign_course_categories($r,$crstype);
         return OK;
     }
 
@@ -95,7 +159,7 @@
 
     my %prefs = (
         'courseinfo' =>
-                   { text => 'General course settings',
+                   { text => $lt{'gens'},
                      help => 'Course_Environment',
                      header => [{col1 => 'Setting',
                                  col2 => 'Value'}],
@@ -103,14 +167,14 @@
                                  'hidefromcat','cloners','externalsyllabus',
                                  'url','rolenames'],
                      itemtext => {
-                                   description      => 'Course Description',
-                                   courseid         => 'Course ID or number',
-                                   categories       => 'Categorize course',
-                                   hidefromcat      => 'Exclude from course catalog',
-                                   cloners          => 'Users allowed to clone course', 
+                                   description      => $lt{'desc'},
+                                   courseid         => $lt{'idnu'},
+                                   categories       => $lt{'catg'},
+                                   hidefromcat      => $lt{'excc'},
+                                   cloners          => $lt{'clon'}, 
                                    externalsyllabus => 'URL of Syllabus',
                                    url              => 'Top Level Map',
-                                   rolenames        => 'Replacement titles for standard course roles',
+                                   rolenames        => $lt{'rept'},
                                  },
                     },
         'localization' =>
@@ -121,8 +185,8 @@
                       ordered => ['languages','timezone','datelocale'],
                       itemtext => {
                                     languages  => 'Languages used',
-                                    timezone   => 'Timezone in which the course takes place',
-                                    datelocale => 'Locale used for course calendar',
+                                    timezone   => $lt{'time'}, 
+                                    datelocale => $lt{'date'},
                                   },
                     },
         'feedback' =>
@@ -135,8 +199,8 @@
                       ordered => ['question.email','comment.email','policy.email'],
                       itemtext => {
                                      'question.email' => 'Resource Content',
-                                     'comment.email'  => 'Course Content',
-                                     'policy.email'   => 'Course Policy',
+                                     'comment.email'  => $lt{'coco'},
+                                     'policy.email'   => $lt{'copo'},
                                   },
                     },
         'discussion' =>
@@ -158,14 +222,14 @@
                                   },
                     },
         'classlists' =>
-                   { text => 'Classlists and Staff Listing',
+                   { text => $lt{'clas'},
                      help => 'Course_Environment',
                      header => [{col1 => 'Type',
-                                 col2 => 'Default dates for student access'},
+                                 col2 => $lt{'defd'}},
                                 {col1 => 'Setting',
-                                 col2 => 'Privileged users (Domain Coordinators) in staff listing'},
+                                 col2 => $lt{'priv'}},
                                 {col1 => 'Setting',
-                                 col2 => 'Student-viewable classlist options'}],
+                                 col2 => $lt{'stuv'}}],
                      ordered => ['default_enrollment_start_date',
                                  'default_enrollment_end_date',
                                  'nothideprivileged','student_classlist_view',
@@ -173,9 +237,9 @@
                      itemtext => {
                          default_enrollment_start_date => 'Start date',
                          default_enrollment_end_date   => 'End date',
-                         nothideprivileged             => 'Domain Coodinators in course',
-                         student_classlist_view        => 'Student-viewable classlist',
-                         student_opt_in                => 'Student agreement needed to be listed',
+                         nothideprivileged             => $lt{'priv'},
+                         student_classlist_view        => $lt{'stuv'},
+                         student_opt_in                => $lt{'stul'},
                          student_classlist_portfiles   => 'Include link to accessible portfolio files',
                                   },
                    },
@@ -235,8 +299,8 @@
                                 'spreadsheet_default_studentcalc',
                                 'spreadsheet_default_assesscalc','hideemptyrows'],
                     itemtext => {
-                                  spreadsheet_default_classcalc   => 'Default Course Spreadsheet',
-                                  spreadsheet_default_studentcalc => 'Default Student Spreadsheet',
+                                  spreadsheet_default_classcalc   => $lt{'defc'},
+                                  spreadsheet_default_studentcalc => $lt{'defs'},
                                   spreadsheet_default_assesscalc  => 'Default Assessment Spreadsheet',
                                   hideemptyrows                   => 'Hide Empty Rows in Spreadsheets',
                                 },
@@ -249,7 +313,7 @@
                     ordered => ['task_messages','task_grading',
                                 'suppress_embed_prompt'],
                     itemtext => {
-                        task_messages         => 'Send message to student when clicking Done on Tasks',
+                        task_messages         => $lt{'seme'},
                         task_grading          => 'Bridge Task grading by instructors and TAs in sections' ,
                         suppress_embed_prompt => 'Hide upload references prompt if uploading file to portfolio',
                                 },
@@ -271,7 +335,7 @@
         my $jscript = &get_jscript($cdom,$phase);
         my @allitems = &get_allitems(%prefs);
         &Apache::lonconfigsettings::display_settings($r,$cdom,$phase,$context,
-            \@prefs_order,\%prefs,\%values,undef,$jscript,\@allitems);
+            \@prefs_order,\%prefs,\%values,undef,$jscript,\@allitems,$crstype);
     } else {
         &Apache::lonconfigsettings::display_choices($r,$phase,$context,
                                                     \@prefs_order,\%prefs);
@@ -296,7 +360,7 @@
 }
 
 sub print_config_box {
-    my ($r,$cdom,$phase,$action,$item,$settings,$allitems) = @_;
+    my ($r,$cdom,$phase,$action,$item,$settings,$allitems,$crstype) = @_;
     my $ordered = $item->{'ordered'};
     my $itemtext = $item->{'itemtext'};
     my $rowtotal = 0;
@@ -320,7 +384,7 @@
         if ($action eq 'feedback') {
             $output .= &print_feedback('top',$cdom,$settings,$ordered,$itemtext,\$rowtotal);
         } elsif ($action eq 'classlists') {
-            $output .= &print_classlists('top',$cdom,$settings,$itemtext,\$rowtotal);
+            $output .= &print_classlists('top',$cdom,$settings,$itemtext,\$rowtotal,$crstype);
         }
         $output .= '
            </table>
@@ -335,7 +399,7 @@
               <td class="LC_right_item">'.&mt($item->{'header'}->[1]->{'col2'}).'</td>
              </tr>';
         if ($action eq 'classlists') {
-            $output .= &print_classlists('middle',$cdom,$settings,$itemtext,\$rowtotal).
+            $output .= &print_classlists('middle',$cdom,$settings,$itemtext,\$rowtotal,$crstype).
                        '
             </table>
            </td>
@@ -360,7 +424,7 @@
     }
     $rowtotal ++;
     if ($action eq 'courseinfo') {
-        $output .= &print_courseinfo($cdom,$settings,$ordered,$itemtext,\$rowtotal);
+        $output .= &print_courseinfo($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype);
     } elsif ($action eq 'localization') {
         $output .= &print_localization($cdom,$settings,$ordered,$itemtext,\$rowtotal);
     } elsif ($action eq 'feedback') {
@@ -368,19 +432,19 @@
     } elsif ($action eq 'discussion') {
         $output .= &print_discussion($cdom,$settings,$ordered,$itemtext,\$rowtotal);
     } elsif ($action eq 'classlists') {
-        $output .= &print_classlists('bottom',$cdom,$settings,$itemtext,\$rowtotal);
+        $output .= &print_classlists('bottom',$cdom,$settings,$itemtext,\$rowtotal,$crstype);
     } elsif ($action eq 'appearance') {
-        $output .= &print_appearance($cdom,$settings,$ordered,$itemtext,\$rowtotal);
+        $output .= &print_appearance($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype);
     } elsif ($action eq 'grading') {
-        $output .= &print_grading($cdom,$settings,$ordered,$itemtext,\$rowtotal);
+        $output .= &print_grading($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype);
     } elsif ($action eq 'printouts') {
-        $output .= &print_printouts($cdom,$settings,$ordered,$itemtext,\$rowtotal);
+        $output .= &print_printouts($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype);
     } elsif ($action eq 'spreadsheet') {
-        $output .= &print_spreadsheet($cdom,$settings,$ordered,$itemtext,\$rowtotal);
+        $output .= &print_spreadsheet($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype);
     } elsif ($action eq 'bridgetasks') {
-        $output .= &print_bridgetasks($cdom,$settings,$ordered,$itemtext,\$rowtotal);
+        $output .= &print_bridgetasks($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype);
     } elsif ($action eq 'other') {
-        $output .= &print_other($cdom,$settings,$allitems,\$rowtotal);
+        $output .= &print_other($cdom,$settings,$allitems,\$rowtotal,$crstype);
     }
     $output .= '
    </table>
@@ -391,7 +455,7 @@
 }
 
 sub process_changes {
-    my ($cdom,$action,$values,$item,$changes,$allitems,$disallowed) = @_;
+    my ($cdom,$action,$values,$item,$changes,$allitems,$disallowed,$crstype) = @_;
     my %newvalues;
     if (ref($item) eq 'HASH') {
         if (ref($changes) eq 'HASH') {
@@ -530,18 +594,23 @@
                         } elsif ($entry =~ /^default_enrollment_(start|end)_date$/) {
                             $newvalues{$entry}=&Apache::lonhtmlcommon::get_date_from_form($entry);
                         } elsif ($entry eq 'rolenames') {
-                            my $crstype = &Apache::loncommon::course_type();
                             my %adv_roles =
                                 &Apache::lonnet::get_course_adv_roles($env{'request.course.id'},1);
-                            my @stds = ('cc','in','ta','ep','ad','st');
+                            my @stds;
+                            if ($crstype eq 'Community') {
+                                @stds = ('co');
+                            } else {
+                                @stds = ('cc');
+                            }
+                            push(@stds,('in','ta','ep','ad','st'));
                             my (@replacements,@regulars);
                             foreach my $role (@stds) {
                                 if ($values->{$role.'.plaintext'} ne '') {
-                                    push(@replacements,$role);  
+                                    push(@replacements,$role);
                                 } else {
                                     push(@regulars,$role);
                                 }
-                            } 
+                            }
                             foreach my $stdrole (@stds) {
                                 my $ext_entry = $entry.'_'.$stdrole;
                                 my $stdname = &Apache::lonnet::plaintext($stdrole,$crstype,
@@ -789,14 +858,18 @@
 }
 
 sub store_changes {
-    my ($cdom,$cnum,$prefs_order,$actions,$prefs,$values,$changes) = @_;
+    my ($cdom,$cnum,$prefs_order,$actions,$prefs,$values,$changes,$crstype) = @_;
     my ($chome,$output);
     my (%storehash,@delkeys,@need_env_update);
     if ((ref($values) eq 'HASH') && (ref($changes) eq 'HASH')) {
         %storehash = %{$values};
     } else {
-        $output = &mt('No changes made to course settings.');
-        return;
+        if ($crstype eq 'Community') {
+            $output = &mt('No changes made to community settings.');
+        } else {
+            $output = &mt('No changes made to course settings.');
+        }
+        return $output;
     }
     my %yesno = (
                  hidefromcat           => '1',
@@ -832,9 +905,15 @@
                             foreach my $key (@settings) {
                                 if ($key eq 'rolenames') {
                                     my $displayname = $prefs->{$item}->{'itemtext'}{$key};
-                                    my $crstype = &Apache::loncommon::course_type();
                                     my $msg;
-                                    foreach my $role ('cc','in','ta','ep','ad','st') {
+                                    my @roles;
+                                    if ($crstype eq 'Community') {
+                                        @roles = ('co');
+                                    } else {
+                                        @roles = ('cc');
+                                    }
+                                    push(@roles,('in','ta','ep','ad','st'));
+                                    foreach my $role (@roles) {
                                         next if (!exists($changes->{$item}{$key.'_'.$role}));
                                         my $stdname = &Apache::lonnet::plaintext($role,$crstype,undef,1);
                                         my $newname = $changes->{$item}{$key.'_'.$role};
@@ -939,7 +1018,11 @@
                     }
                     $output .= '</ul>';
                 } else {
-                    $output = &mt('No changes made to course settings.');
+                    if ($crstype eq 'Community') {
+                        $output = &mt('No changes made to community settings.');
+                    } else {
+                        $output = &mt('No changes made to course settings.');
+                    }
                 }
             }
         }
@@ -947,8 +1030,13 @@
     if (&Apache::lonnet::put('environment',\%storehash,$cdom,$cnum) eq 'ok') {
         if (@delkeys) {
             if (&Apache::lonnet::del('environment',\@delkeys,$cdom,$cnum) ne 'ok') {
-                $output .= '<br /><span class="LC_error">'.
-                           &mt('An error occurred when removing course settings which are no longer in use.').'</span>';
+                $output .= '<br /><span class="LC_error">';
+                if ($crstype eq 'Community') {
+                    $output .= &mt('An error occurred when removing community settings which are no longer in use.');
+                } else {
+                    $output .= &mt('An error occurred when removing course settings which are no longer in use.');
+                }
+                $output .= '</span>';
             }
         }
         if (@need_env_update) {
@@ -958,8 +1046,13 @@
         &Apache::lonnet::coursedescription($env{'request.course.id'},
                                            {'freshen_cache' => 1});
     } else {
-        $output = '<span class="LC_error">'.
-                  &mt('An error occurred when saving changes to course settings, which remain unchanged.').'</span>';
+        $output = '<span class="LC_error">';
+        if ($crstype eq 'Community') {
+            $output .= &mt('An error occurred when saving changes to community settings, which remain unchanged.');
+        } else {          
+            $output .= &mt('An error occurred when saving changes to course settings, which remain unchanged.');
+        }
+        $output .= '</span>';
     }
     return $output;
 }
@@ -990,7 +1083,7 @@
 }
 
 sub display_disallowed {
-    my ($item,$disallowed,$prefs) = @_;
+    my ($item,$disallowed,$prefs,$crstype) = @_;
     my $output;
     if ((ref($disallowed) eq 'HASH') && (ref($prefs) eq 'HASH')) {
         if (keys(%{$disallowed})) {
@@ -1006,7 +1099,7 @@
                         my $msg = '<b>'.$disallowed->{$error}.'</b>, '.&mt('reason').' - '.
                                   $lt{$error}; 
                         if ($error eq 'newuser') {
-                            $msg .= '<br />'.&mt('Please [_1]add the user(s)[_2] before returning to the [_3]Course Configuration[_2] to add as potential cloners.','<a href="/adm/createuser">','</a>','<a href="/adm/courseprefs">');
+                            $msg .= '<br />'.&mt("Please [_1]add the user(s)[_2] before returning to the [_3]$crstype Configuration[_2] to add as potential cloners.",'<a href="/adm/createuser">','</a>','<a href="/adm/courseprefs">');
                         }
                         push(@fails,$msg);
                     }
@@ -1037,11 +1130,19 @@
             } elsif (($item eq 'feedback') || ($item eq 'discussion') || ($item eq 'localization')) {
                 $output .= '<span class="LC_warning">';
                 if ($item eq 'feedback') {
-                    $output .= &mt('Unable to include as a recipient of course feedback for:');
+                    if ($crstype eq 'Community') {
+                        $output .= &mt('Unable to include as a recipient of community feedback for:');
+                    } else {
+                        $output .= &mt('Unable to include as a recipient of course feedback for:');
+                    }
                 } elsif ($item eq 'discussion') {
                     $output .= &mt('Unable to include in user-based access control for:');
                 } elsif ($item eq 'localization') {
-                    $output .= &mt('Unable to include in course localization:');
+                    if ($crstype eq 'Community') {
+                        $output .= &mt('Unable to include in community localization:');
+                    } else {
+                        $output .= &mt('Unable to include in course localization:');
+                    }
                 }
                 $output .= '</span><ul>';
                 foreach my $key (sort(keys(%{$disallowed}))) {
@@ -1181,12 +1282,11 @@
 
 
 sub print_courseinfo {
-    my ($cdom,$settings,$ordered,$itemtext,$rowtotal) = @_;
+    my ($cdom,$settings,$ordered,$itemtext,$rowtotal,$crstype) = @_;
     unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) {
         return;
     }
     my ($cathash,$categoriesform);
-    my $crstype = &Apache::loncommon::course_type();
     my %domconf = 
         &Apache::lonnet::get_dom('configuration',['coursecategories'],$cdom);
     if (ref($domconf{'coursecategories'}) eq 'HASH') {
@@ -1203,6 +1303,12 @@
 
     my ($can_toggle_cat,$can_categorize) = &can_modify_catsettings($cdom);
 
+    my $replace;
+    if ($crstype eq 'Community') {
+        $replace = &mt('To replace the standard title for a course role, enter a title, otherwise leave blank');
+    } else {
+        $replace = &mt('To replace the standard title for a course role, enter a title, otherwise leave blank');
+    }
     my %items = (
         'url' => {
                    text => '<b>'.&mt($itemtext->{'url'}).'</b>'.('&nbsp;'x2).
@@ -1227,13 +1333,13 @@
                           },
         'cloners'      => { 
                    text => '<b>'.&mt($itemtext->{'cloners'}).'</b><br />'.
-                           &mt('Course Coordinators included automatically'),
+                           &mt('Coordinators included automatically'),
                    input => 'textbox',
                    size  => '40',
                          },
         'rolenames'  => { 
                    text  => '<b>'.&mt($itemtext->{'rolenames'}).'</b><br />'.
-                            '('.&mt('To replace the standard title for a course role, enter a title, otherwise leave blank').')',
+                            '('.$replace.')',
                    input => 'textbox',
                    size  => '20',
                         },
@@ -1345,7 +1451,14 @@
                           &Apache::loncommon::end_data_table();
         } elsif ($item eq 'rolenames') {
             $datatable .= &Apache::loncommon::start_data_table();
-            foreach my $role ('cc','in','ta','ep','ad','st') {
+            my @roles;
+            if ($crstype eq 'Community') {
+                @roles = ('co');
+            } else {
+                @roles = ('cc');
+            }
+            push (@roles,('in','ta','ep','ad','st'));
+            foreach my $role (@roles) {
                 $datatable .= &Apache::loncommon::start_data_table_row().
                               '<td align="left"><span class="LC_nobreak">'.
                               &Apache::lonnet::plaintext($role,$crstype,undef,1).
@@ -1409,7 +1522,7 @@
 }
 
 sub assign_course_categories {
-    my ($r) = @_;
+    my ($r,$crstype) = @_;
     my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
     my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
     my $hascats = 0;
@@ -1423,7 +1536,12 @@
     }
     my $catwin_js;
     if ($hascats) {
-        my $alert = &mt("Use 'Save' in the main window to save course categories");
+        my $alert;
+        if ($crstype eq 'Community') {
+            $alert = &mt("Use 'Save' in the main window to save community categories");
+        } else {
+            $alert = &mt("Use 'Save' in the main window to save course categories");
+        }
         $catwin_js = <<ENDSCRIPT;
 <script type="text/javascript">
 
@@ -1461,21 +1579,31 @@
     } else {
         my $onload;
     }
+    my ($crscat,$catcrs,$assign);
+    if ($crstype eq 'Community') {
+        $crscat = 'Community Categories';
+        $catcrs = &mt('Categorize Community');
+        $assign = &mt('Assign one or more categories to this community.')
+    } else {
+        $crscat = 'Course Categories';
+        $catcrs = &mt('Categorize Course');
+        $assign = &mt('Assign one or more categories to this course.')
+    }
     my $start_page =
-        &Apache::loncommon::start_page('Course Categories',$catwin_js,
+        &Apache::loncommon::start_page($crscat,$catwin_js,
                                        {'only_body'      => 1,});
     my $end_page = &Apache::loncommon::end_page();
-    my $categoriesform = '<h3>'.&mt('Categorize Course').'</h3>';
+    my $categoriesform = '<h3>'.$catcrs.'</h3>';
     if ($hascats) {
         my %currsettings =
             &Apache::lonnet::get('environment',['hidefromcat','categories'],$cdom,$cnum);
-        $categoriesform .= &mt('Assign one or more categories to this course.').'<br /><br />'.
-                               '<form name="chgcats" action="/adm/courseprefs" method="post">'."\n".
-                               &Apache::loncommon::assign_categories_table($cathash,
+        $categoriesform .= $assign.'<br /><br />'.
+                           '<form name="chgcats" action="/adm/courseprefs" method="post">'."\n".
+                           &Apache::loncommon::assign_categories_table($cathash,
                                                        $currsettings{'categories'})."\n".
-                               '<br /><input type="button" name="changes" value="'.
-                               &mt('Copy to main window').'" '.
-                               'onclick="javascript:updateCategories()" /></form><br />';
+                           '<br /><input type="button" name="changes" value="'.
+                           &mt('Copy to main window').'" '.
+                           'onclick="javascript:updateCategories()" /></form><br />';
     } else {
         $categoriesform .= &mt('No categories defined for this domain');
     }
@@ -1835,8 +1963,13 @@
 }
 
 sub role_checkboxes {
-    my ($cdom,$cnum,$item,$settings,$showsections) = @_;
-    my @roles = ('st','ad','ta','ep','in','cc');
+    my ($cdom,$cnum,$item,$settings,$showsections,$crstype) = @_;
+    my @roles = ('st','ad','ta','ep','in');
+    if ($crstype eq 'Community') {
+        push(@roles,'co');
+    } else {
+        push(@roles,'cc');
+    }
     my $output;
     my (@current,@curr_roles,%currsec,@sections);
     if ($showsections) {
@@ -1873,7 +2006,7 @@
         if (grep(/^\Q$role\E$/,@current)) {
             $checked = ' checked="checked" ';
         }
-        my $plrole=&Apache::lonnet::plaintext($role);
+        my $plrole=&Apache::lonnet::plaintext($role,$crstype);
         if ($showsections) {
             $output .= &Apache::loncommon::start_data_table_row();
         } else {
@@ -1944,7 +2077,7 @@
 }
 
 sub print_classlists {
-    my ($position,$cdom,$settings,$itemtext,$rowtotal) = @_;
+    my ($position,$cdom,$settings,$itemtext,$rowtotal,$crstype) = @_;
     my @ordered;
     if ($position eq 'top') {
         @ordered = ('default_enrollment_start_date',
@@ -1955,6 +2088,22 @@
         @ordered = ('student_classlist_view',
                     'student_opt_in','student_classlist_portfiles');
     }
+    my %lt;
+
+    if ($crstype eq 'Community') {
+        %lt = &Apache::lonlocal::texthash (
+                 disabled => 'No viewable membership list',
+                 section  => "Membership of viewer's section",
+                 all      => 'List of all members',
+              );
+    } else {
+        %lt = &Apache::lonlocal::texthash (
+                 disabled => 'No viewable classlist',
+                 section  => "Classlist of viewer's section",
+                 all      => 'Classlist of all students',
+              );
+    }
+
     my %items = (
         'default_enrollment_start_date' => {
                    text => '<b>'.&mt($itemtext->{'default_enrollment_start_date'}).'</b>',
@@ -1973,11 +2122,7 @@
         'student_classlist_view'   => {
                    text => '<b>'.&mt($itemtext->{'student_classlist_view'}).'</b>',
                    input => 'selectbox',
-                   options => {
-                                disabled => &mt('No viewable classlist'),
-                                section  => &mt("Classlist of viewer's section"),
-                                all      => &mt('Classlist of all students'),
-                              },
+                   options => \%lt,
                    order => ['disabled','all','section'],
                  },
         'student_opt_in' => {
@@ -1994,14 +2139,20 @@
             ($settings->{'student_classlist_view'} eq 'section')) { 
         $settings->{'student_classlist_view'} = 'disabled';
     }
-    return &make_item_rows($cdom,\%items,\@ordered,$settings,$rowtotal);
+    return &make_item_rows($cdom,\%items,\@ordered,$settings,$rowtotal,$crstype);
 }
 
 sub print_appearance {
-    my ($cdom,$settings,$ordered,$itemtext,$rowtotal) = @_;
+    my ($cdom,$settings,$ordered,$itemtext,$rowtotal,$crstype) = @_;
     unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) {
         return;
     }
+    my $mathdef;
+    if ($crstype eq 'Community') {
+        $mathdef = &mt("None specified - use member's choice");
+    } else {
+        $mathdef = &mt("None specified - use student's choice");
+    }
     my %items = (
         'default_xml_style' => {
                    text => '<b>'.&mt($itemtext->{'default_xml_style'}).'</b> '.
@@ -2029,7 +2180,7 @@
                                 tth      => &mt('TeX to HTML'),
                               },
                    order  => ['jsMath','mimetex','tth'],
-                   nullval => &mt("None specified - use student's choice"),
+                   nullval => $mathdef,
                  },
         'tthoptions' => {
                    text => '<b>'.&mt($itemtext->{'tthoptions'}).'</b>',
@@ -2037,11 +2188,11 @@
                    size => 40,
                  },
     );
-    return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal);
+    return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype);
 }
 
 sub print_grading {
-    my ($cdom,$settings,$ordered,$itemtext,$rowtotal) = @_;
+    my ($cdom,$settings,$ordered,$itemtext,$rowtotal,$crstype) = @_;
     unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) {
         return;
     }
@@ -2089,11 +2240,11 @@
                    input => 'radio',
                  },
     );
-    return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal);
+    return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype);
 }
 
 sub print_printouts {
-    my ($cdom,$settings,$ordered,$itemtext,$rowtotal) = @_;
+    my ($cdom,$settings,$ordered,$itemtext,$rowtotal,$crstype) = @_;
     unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) {
         return;
     }
@@ -2132,11 +2283,11 @@
             input => 'radio',
                                  },
     );
-    return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal);
+    return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype);
 }
 
 sub print_spreadsheet {
-    my ($cdom,$settings,$ordered,$itemtext,$rowtotal) = @_;
+    my ($cdom,$settings,$ordered,$itemtext,$rowtotal,$crstype) = @_;
     unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) {
         return;
     }
@@ -2168,21 +2319,29 @@
             input => 'radio',
                          },
                 );
-    return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal);
-} 
+    return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype);
+}
 
 sub print_bridgetasks {
-    my ($cdom,$settings,$ordered,$itemtext,$rowtotal) = @_;
+    my ($cdom,$settings,$ordered,$itemtext,$rowtotal,$crstype) = @_;
     unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) {
         return;
     }
+    my ($stumsg,$msgnote);
+    if ($crstype eq 'Community') {
+        $stumsg = &mt('Send message to member');
+        $msgnote = &mt('Message to member and add to user notes');
+    } else {
+        $stumsg = &mt('Send message to student');
+        $msgnote = &mt('Message to student and add to user notes');
+    }
     my %items = (
          task_messages => {
               text => '<b>'.&mt($itemtext->{'task_messages'}).'</b>',
               input => 'selectbox',
               options => {
-                           only_student => &mt('Send message to student'),
-                           student_and_user_notes_screen => &mt('Message to student and add to user notes'),
+                           only_student => $stumsg,
+                           student_and_user_notes_screen => $msgnote,
                          },
               order   => ['only_student','student_and_user_notes_screen'],
               nullval => &mt('No message or record in user notes'),
@@ -2202,11 +2361,11 @@
              input => 'radio',
                                   },
                 );
-    return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal);
+    return &make_item_rows($cdom,\%items,$ordered,$settings,$rowtotal,$crstype);
 }
 
 sub print_other {
-    my ($cdom,$settings,$allitems,$rowtotal) = @_;
+    my ($cdom,$settings,$allitems,$rowtotal,$crstype) = @_;
     unless ((ref($settings) eq 'HASH') && (ref($allitems) eq 'ARRAY')) {
         return;
     }
@@ -2227,7 +2386,7 @@
                             input => 'textbox',
                             size  => '30',
                            };
-    my $output = &make_item_rows($cdom,\%items,\@ordered,$settings,$rowtotal);
+    my $output = &make_item_rows($cdom,\%items,\@ordered,$settings,$rowtotal,$crstype);
 }
 
 sub get_other_items {
@@ -2244,7 +2403,7 @@
             unless (($parameter =~ m/^internal\./)||($parameter =~ m/^metadata\./) ||
                     ($parameter =~ m/^selfenroll_/) || ($parameter =~ /_selfenroll$/)
                     || ($parameter eq 'type') ||
-                    ($parameter =~ m/^(cc|in|ta|ep|ad|st)\.plaintext$/)) {
+                    ($parameter =~ m/^(cc|co|in|ta|ep|ad|st)\.plaintext$/)) {
                 push(@ordered,$parameter);
             }
         }
@@ -2332,7 +2491,7 @@
 }
 
 sub make_item_rows {
-    my ($cdom,$items,$ordered,$settings,$rowtotal) = @_;
+    my ($cdom,$items,$ordered,$settings,$rowtotal,$crstype) = @_;
     my $datatable;
     if ((ref($items) eq 'HASH') && (ref($ordered) eq 'ARRAY')) {
         my $count = 0;
@@ -2340,7 +2499,7 @@
             $count ++;
             $datatable .= &item_table_row_start($items->{$item}{text},$count);
             if ($item eq 'nothideprivileged') {
-                $datatable .= &nothidepriv_row($cdom,$item,$settings);
+                $datatable .= &nothidepriv_row($cdom,$item,$settings,$crstype);
             } elsif ($item eq 'print_header_format') {
                 $datatable .= &print_hdrfmt_row($item,$settings);
             } elsif ($items->{$item}{input} eq 'dates') {
@@ -2370,7 +2529,7 @@
 }
 
 sub nothidepriv_row {
-    my ($cdom,$item,$settings) = @_;
+    my ($cdom,$item,$settings,$crstype) = @_;
     my ($cnum) = &get_course();
     my %nothide;
     my $datatable;
@@ -2438,7 +2597,11 @@
         }
         $datatable .= '</table>';
     } else {
-        $datatable .= &mt('No Domain Coordinators have course roles');
+        if ($crstype eq 'Community') {
+            $datatable .= &mt('No Domain Coordinators have community roles');
+        } else {
+            $datatable .= &mt('No Domain Coordinators have course roles');
+        }
     }
     return $datatable;
 }
@@ -2575,10 +2738,18 @@
 }
 
 sub substitution_selector {
-    my ($num,$subst,$limit) = @_;
+    my ($num,$subst,$limit,$crstype) = @_;
+    my ($stunametxt,$crsidtxt);
+    if ($crstype eq 'Community') {
+        $stunametxt = 'member name';
+        $crsidtxt = 'community ID',
+    } else {
+        $stunametxt = 'student name';
+        $crsidtxt = 'course ID',
+    }
     my %lt = &Apache::lonlocal::texthash(
-                    n => 'student name',
-                    c => 'course ID',
+                    n => $stunametxt,
+                    c => $crsidtxt,
                     a => 'assignment note',
              );
     my $output .= &mt('Substitution').'<br />'.

--raeburn1256828238--