--- loncom/interface/courseprefs.pm 2010/01/03 01:09:41 1.8.2.3 +++ loncom/interface/courseprefs.pm 2010/01/03 01:59:25 1.8.2.4 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to set configuration settings for a course # -# $Id: courseprefs.pm,v 1.8.2.3 2010/01/03 01:09:41 raeburn Exp $ +# $Id: courseprefs.pm,v 1.8.2.4 2010/01/03 01:59:25 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -57,11 +57,22 @@ sub handler { $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 @@ sub handler { &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 Coordinators 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 Coordinators 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 @@ sub handler { } if ($phase eq 'categorizecourse') { - &assign_course_categories($r); + &assign_course_categories($r,$crstype); return OK; } @@ -95,7 +159,7 @@ sub handler { my %prefs = ( 'courseinfo' => - { text => 'General course settings', + { text => $lt{'gens'}, help => 'Course_Environment', header => [{col1 => 'Setting', col2 => 'Value'}], @@ -103,14 +167,14 @@ sub handler { '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 @@ sub handler { 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 @@ sub handler { 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 @@ sub handler { }, }, '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 @@ sub handler { 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 @@ sub handler { '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 @@ sub handler { 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 @@ sub handler { my $jscript = &get_jscript($cdom,$phase,$crstype); 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 get_allitems { } 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 @@ sub print_config_box { 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 .= ' @@ -335,7 +399,7 @@ sub print_config_box { '.&mt($item->{'header'}->[1]->{'col2'}).' '; if ($action eq 'classlists') { - $output .= &print_classlists('middle',$cdom,$settings,$itemtext,\$rowtotal). + $output .= &print_classlists('middle',$cdom,$settings,$itemtext,\$rowtotal,$crstype). ' @@ -360,7 +424,7 @@ sub print_config_box { } $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 @@ sub print_config_box { } 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 .= ' @@ -391,7 +455,7 @@ sub print_config_box { } 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 @@ sub process_changes { } 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 check_clone { } 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 @@ sub store_changes { 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 @@ sub store_changes { } $output .= ''; } 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 @@ sub store_changes { if (&Apache::lonnet::put('environment',\%storehash,$cdom,$cnum) eq 'ok') { if (@delkeys) { if (&Apache::lonnet::del('environment',\@delkeys,$cdom,$cnum) ne 'ok') { - $output .= '
'. - &mt('An error occurred when removing course settings which are no longer in use.').''; + $output .= '
'; + 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 .= ''; } } if (@need_env_update) { @@ -958,8 +1046,13 @@ sub store_changes { &Apache::lonnet::coursedescription($env{'request.course.id'}, {'freshen_cache' => 1}); } else { - $output = ''. - &mt('An error occurred when saving changes to course settings, which remain unchanged.').''; + $output = ''; + 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 .= ''; } return $output; } @@ -990,7 +1083,7 @@ sub update_env { } 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 @@ sub display_disallowed { my $msg = ''.$disallowed->{$error}.', '.&mt('reason').' - '. $lt{$error}; if ($error eq 'newuser') { - $msg .= '
'.&mt('Please [_1]add the user(s)[_2] before returning to the [_3]Course Configuration[_2] to add as potential cloners.','','',''); + $msg .= '
'.&mt("Please [_1]add the user(s)[_2] before returning to the [_3]$crstype Configuration[_2] to add as potential cloners.",'
','',''); } push(@fails,$msg); } @@ -1037,11 +1130,19 @@ sub display_disallowed { } elsif (($item eq 'feedback') || ($item eq 'discussion') || ($item eq 'localization')) { $output .= ''; 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 .= '