--- loncom/interface/courseprefs.pm 2010/09/17 02:16:18 1.8.2.13 +++ loncom/interface/courseprefs.pm 2009/12/06 22:17:07 1.8.4.1 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to set configuration settings for a course # -# $Id: courseprefs.pm,v 1.8.2.13 2010/09/17 02:16:18 raeburn Exp $ +# $Id: courseprefs.pm,v 1.8.4.1 2009/12/06 22:17:07 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -28,185 +28,6 @@ ############################################################### ############################################################## -=pod - -=head1 NAME - -courseprefs- Handler to set/modify course configuration - -=head1 SYNOPSIS - -courseprefs provides an interface for setting general course configuration - -=head1 DESCRIPTION - -This module is used for configuration of a course - -=head1 INTERNAL SUBROUTINES - -=over - -=item get_allitems() - -=item print_config_box() - -=item process_changes() - -=item get_sec_str() - -=item check_clone() - -=item store_changes() - -=item update_env() - -=item display_disallowed() - -=item get_course() - -=item get_jscript() - -=item cloners_javascript() - -=item print_courseinfo() - -=item new_cloners_dom_row() - -=item can_modify_catsettings() - -=item assign_course_categories() - -=item print_localization() - -=item get_lang_choices() - -=item print_feedback() - -=item user_table() - -=item select_recipient() - -=item select_sections() - -=item print_discussion() - -=item role_checkboxes() - -=item print_classlists() - -=item print_appearance() - -=item print_grading() - -=item print_printouts() - -=item print_spreadsheet() - -=item print_bridgetasks() - -=item print_other() - -=item get_other_items() - -=item item_table_row_start() - -=item item_table_row_end() - -=item yes_no_radio() - -=item select_from_options() - -=item make_item_rows() - -Creates table used to display and set course configuration items. - -Inputs: $cdom,$items,$ordered,$settings,$rowtotal,$crstype -where $cdom is course's domain, $items is HASH ref for current config -item, $ordered is ARRAY ref of items to include in row in -display order, $settings is HASH ref of current values forrow, -$rowtotal is SCALAR ref used to accumulate row count, $crstype is -course type. - -Returns: $datatable -HTML mark-up of data table which accumulates individual rows. - -=item nothidepriv_row() - -Creates row containing form elements used to display and set -whether Domain coordinators who are currently included in -advanced course user .db file for a course are to be hidden (e.g., -in syllabus, or from course user lists). - -Inputs: $cdom,$item,$settings,$crstype -where $cdom is course domain, item is nothideprivileged, $settings is -HASH ref of the current values for nothideprivileged, $crstype is -course type (Course or Community). - -Returns: $datatable -HTML mark-up for Privileged users (Domain Coordinators) in staff listing. - -=item print_hdrfmt_row() - -Creates row containing form elements used to display and set -substitution items and text to be used in the header included -on printouts. - -Inputs: $item,$settings -where $item is print_header_format, and $settings is a HASH ref -of the current values stored for print_header_format. - -Returns: $output -HTML mark-up containing Javascript functions: reOrder() and getIndexByName() -used to dynamically update position selectboxes, and HTML table elements -for the "Print header format" row. - -=item position_selector() - -Creates a select box which can be used to reorder substitutions -and text included in a printout header. - -Inputs: $pos,$num,$maxnum -where $pos is current position, $num is the unique identifier, -and $maxnum is the total number of items (both substitutions -and text in the printout header. - -Returns: $output -HTML mark-up for the selectbox and a hidden form element containing -the current position. - -=item substitution_selector() - -Creates a combination of select box for choosing an item -(student name, course ID or assignment note) to substitute, -and a corresponding size limit in the header used for printouts. - -Inputs: $num,$subst,$limit,$crstype -where $num is the unique identifier, $subst is the current -substitution (n,c or a, for name, course or note respectively, -$limit is the current size limit (integer), and $crstype is -course type - course or community. - -Returns: $output -HTML mark-up for selectbox and textbox (separate table cells). - -=item change_clone() - -Modifies the list of courses a user can clone (stored -in the user's environment.db file), called when a -change is made to the list of users allowed to clone -a course. - -Inputs: $action,$cloner -where $action is add or drop, and $cloner is identity of -user for whom cloning ability is to be changed in course. - -Returns: nothing - -=back - -=cut - - package Apache::courseprefs; use strict; @@ -236,22 +57,11 @@ sub handler { $r->send_http_header; } else { if ($navmap) { - 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"; - } + $env{'user.error.msg'}= + "/adm/courseprefs:opa:0:0:Cannot modify course settings"; } else { - 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"; - - } + $env{'user.error.msg'}= + "/adm/courseprefs::0:1:Course environment gone, reinitialize the course"; } return HTTP_NOT_ACCEPTABLE; } @@ -263,67 +73,10 @@ 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', - ownr => 'Community Owner', - cown => 'Community Co-owners', - 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', - ownr => 'Course Owner', - cown => 'Course Co-owners', - 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=>$lt{'conf'}}); + text=>"Course Configuration"}); my $breadcrumbs = - &Apache::lonhtmlcommon::breadcrumbs($lt{'edit'}); + &Apache::lonhtmlcommon::breadcrumbs('Edit Course Configuration'); my $phase = 'pickactions'; if ( exists($env{'form.phase'}) ) { @@ -331,7 +84,7 @@ sub handler { } if ($phase eq 'categorizecourse') { - &assign_course_categories($r,$crstype); + &assign_course_categories($r); return OK; } @@ -342,24 +95,22 @@ sub handler { my %prefs = ( 'courseinfo' => - { text => $lt{'gens'}, + { text => 'General course settings', help => 'Course_Environment', header => [{col1 => 'Setting', col2 => 'Value'}], - ordered => ['owner','co-owners','description','courseid', - 'categories','hidefromcat','externalsyllabus', - 'cloners','url','rolenames'], + ordered => ['description','courseid','categories', + 'hidefromcat','cloners','externalsyllabus', + 'url','rolenames'], itemtext => { - 'owner' => $lt{'ownr'}, - 'co-owners' => $lt{'cown'}, - 'description' => $lt{'desc'}, - 'courseid' => $lt{'idnu'}, - 'categories' => $lt{'catg'}, - 'hidefromcat' => $lt{'excc'}, - 'cloners' => $lt{'clon'}, - 'externalsyllabus' => 'URL of Syllabus', - 'url' => 'Top Level Map', - 'rolenames' => $lt{'rept'}, + description => 'Course Description', + courseid => 'Course ID or number', + categories => 'Categorize course', + hidefromcat => 'Exclude from course catalog', + cloners => 'Users allowed to clone course', + externalsyllabus => 'URL of Syllabus', + url => 'Top Level Map', + rolenames => 'Replacement titles for standard course roles', }, }, 'localization' => @@ -370,8 +121,8 @@ sub handler { ordered => ['languages','timezone','datelocale'], itemtext => { languages => 'Languages used', - timezone => $lt{'time'}, - datelocale => $lt{'date'}, + timezone => 'Timezone in which the course takes place', + datelocale => 'Locale used for course calendar', }, }, 'feedback' => @@ -384,8 +135,8 @@ sub handler { ordered => ['question.email','comment.email','policy.email'], itemtext => { 'question.email' => 'Resource Content', - 'comment.email' => $lt{'coco'}, - 'policy.email' => $lt{'copo'}, + 'comment.email' => 'Course Content', + 'policy.email' => 'Course Policy', }, }, 'discussion' => @@ -407,24 +158,24 @@ sub handler { }, }, 'classlists' => - { text => $lt{'clas'}, + { text => 'Classlists and Staff Listing', help => 'Course_Environment', header => [{col1 => 'Type', - col2 => $lt{'defd'}}, + col2 => 'Default dates for student access'}, {col1 => 'Setting', - col2 => $lt{'priv'}}, + col2 => 'Privileged users (Domain Coordinators) in staff listing'}, {col1 => 'Setting', - col2 => $lt{'stuv'}}], + col2 => 'Student-viewable classlist options'}], ordered => ['default_enrollment_start_date', 'default_enrollment_end_date', 'nothideprivileged','student_classlist_view', - 'student_classlist_opt_in','student_classlist_portfiles'], + 'student_opt_in','student_classlist_portfiles'], itemtext => { default_enrollment_start_date => 'Start date', default_enrollment_end_date => 'End date', - nothideprivileged => $lt{'priv'}, - student_classlist_view => $lt{'stuv'}, - student_classlist_opt_in => $lt{'stul'}, + nothideprivileged => 'Domain Coodinators in course', + student_classlist_view => 'Student-viewable classlist', + student_opt_in => 'Student agreement needed to be listed', student_classlist_portfiles => 'Include link to accessible portfolio files', }, }, @@ -484,8 +235,8 @@ sub handler { 'spreadsheet_default_studentcalc', 'spreadsheet_default_assesscalc','hideemptyrows'], itemtext => { - spreadsheet_default_classcalc => $lt{'defc'}, - spreadsheet_default_studentcalc => $lt{'defs'}, + spreadsheet_default_classcalc => 'Default Course Spreadsheet', + spreadsheet_default_studentcalc => 'Default Student Spreadsheet', spreadsheet_default_assesscalc => 'Default Assessment Spreadsheet', hideemptyrows => 'Hide Empty Rows in Spreadsheets', }, @@ -498,7 +249,7 @@ sub handler { ordered => ['task_messages','task_grading', 'suppress_embed_prompt'], itemtext => { - task_messages => $lt{'seme'}, + task_messages => 'Send message to student when clicking Done on Tasks', task_grading => 'Bridge Task grading by instructors and TAs in sections' , suppress_embed_prompt => 'Hide upload references prompt if uploading file to portfolio', }, @@ -517,10 +268,10 @@ sub handler { \@prefs_order,\%prefs,\%values, $cnum,undef,\@allitems); } elsif ($phase eq 'display') { - my $jscript = &get_jscript($cdom,$phase,$crstype); + 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,$crstype); + \@prefs_order,\%prefs,\%values,undef,$jscript,\@allitems); } else { &Apache::lonconfigsettings::display_choices($r,$phase,$context, \@prefs_order,\%prefs); @@ -545,7 +296,7 @@ sub get_allitems { } sub print_config_box { - my ($r,$cdom,$phase,$action,$item,$settings,$allitems,$crstype) = @_; + my ($r,$cdom,$phase,$action,$item,$settings,$allitems) = @_; my $ordered = $item->{'ordered'}; my $itemtext = $item->{'itemtext'}; my $rowtotal = 0; @@ -569,7 +320,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,$crstype); + $output .= &print_classlists('top',$cdom,$settings,$itemtext,\$rowtotal); } $output .= ' @@ -584,7 +335,7 @@ sub print_config_box { '.&mt($item->{'header'}->[1]->{'col2'}).' '; if ($action eq 'classlists') { - $output .= &print_classlists('middle',$cdom,$settings,$itemtext,\$rowtotal,$crstype). + $output .= &print_classlists('middle',$cdom,$settings,$itemtext,\$rowtotal). ' @@ -609,7 +360,7 @@ sub print_config_box { } $rowtotal ++; if ($action eq 'courseinfo') { - $output .= &print_courseinfo($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype); + $output .= &print_courseinfo($cdom,$settings,$ordered,$itemtext,\$rowtotal); } elsif ($action eq 'localization') { $output .= &print_localization($cdom,$settings,$ordered,$itemtext,\$rowtotal); } elsif ($action eq 'feedback') { @@ -617,19 +368,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,$crstype); + $output .= &print_classlists('bottom',$cdom,$settings,$itemtext,\$rowtotal); } elsif ($action eq 'appearance') { - $output .= &print_appearance($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype); + $output .= &print_appearance($cdom,$settings,$ordered,$itemtext,\$rowtotal); } elsif ($action eq 'grading') { - $output .= &print_grading($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype); + $output .= &print_grading($cdom,$settings,$ordered,$itemtext,\$rowtotal); } elsif ($action eq 'printouts') { - $output .= &print_printouts($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype); + $output .= &print_printouts($cdom,$settings,$ordered,$itemtext,\$rowtotal); } elsif ($action eq 'spreadsheet') { - $output .= &print_spreadsheet($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype); + $output .= &print_spreadsheet($cdom,$settings,$ordered,$itemtext,\$rowtotal); } elsif ($action eq 'bridgetasks') { - $output .= &print_bridgetasks($cdom,$settings,$ordered,$itemtext,\$rowtotal,$crstype); + $output .= &print_bridgetasks($cdom,$settings,$ordered,$itemtext,\$rowtotal); } elsif ($action eq 'other') { - $output .= &print_other($cdom,$settings,$allitems,\$rowtotal,$crstype); + $output .= &print_other($cdom,$settings,$allitems,\$rowtotal); } $output .= ' @@ -640,7 +391,7 @@ sub print_config_box { } sub process_changes { - my ($cdom,$action,$values,$item,$changes,$allitems,$disallowed,$crstype) = @_; + my ($cdom,$action,$values,$item,$changes,$allitems,$disallowed) = @_; my %newvalues; if (ref($item) eq 'HASH') { if (ref($changes) eq 'HASH') { @@ -752,14 +503,10 @@ sub process_changes { my @cloners = split(',',$env{'form.'.$entry}); my @okcloners; foreach my $cloner (@cloners) { - $cloner =~ s/^\s+//; - $cloner =~ s/\s+$//; - unless ($cloner eq '') { - my ($uname,$udom) = split(':',$cloner); - if (&check_clone($udom,$disallowed,$uname) eq 'ok') { - if (!grep(/^\Q$cloner\E$/,@okcloners)) { - push(@okcloners,$cloner); - } + my ($uname,$udom) = split(':',$cloner); + if (&check_clone($udom,$disallowed,$uname) eq 'ok') { + if (!grep(/^\Q$cloner\E$/,@okcloners)) { + push(@okcloners,$cloner); } } } @@ -780,100 +527,21 @@ sub process_changes { } } } - } elsif ($entry eq 'co-owners') { - my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; - my $coowners = $values->{'internal.co-owners'}; - my @currcoown; - if ($coowners) { - @currcoown = split(',',$coowners); - } - if (&Apache::lonnet::is_course_owner($cdom,$cnum)) { - my $autocoowner; - if (($crstype eq 'Course') && - ($values->{'internal.coursecode'})) { - my %domconf = - &Apache::lonnet::get_dom('configuration',['autoenroll'],$cdom); - if (ref($domconf{'autoenroll'}) eq 'HASH') { - $autocoowner = $domconf{'autoenroll'}{'co-owners'}; - } - } - unless ($autocoowner) { - my @keepcoowners = &Apache::loncommon::get_env_multiple('form.coowners'); - my @pendingcoowners = &Apache::loncommon::get_env_multiple('form.pendingcoowners'); - my @invitecoowners = &Apache::loncommon::get_env_multiple('form.invitecoowners'); - if (@invitecoowners) { - push(@pendingcoowners,@invitecoowners); - } - $newvalues{'pendingco-owners'} = join(',',sort(@pendingcoowners)); - $newvalues{'co-owners'} = join(',',sort(@keepcoowners)); - if ($newvalues{'co-owners'} ne $values->{'internal.co-owners'}) { - $changes->{$entry}{'co-owners'} = $newvalues{'co-owners'}; - push(@{$changes->{$entry}{'changed'}},'co-owners'); - } - if ($newvalues{'pendingco-owners'} ne $values->{'internal.pendingco-owners'}) { - $changes->{$entry}{'pendingco-owners'} = $newvalues{'pendingco-owners'}; - push(@{$changes->{$entry}{'changed'}},'pendingco-owners'); - } - } - } else { - my (@newpending,@newcoown); - my $uname = $env{'user.name'}; - my $udom = $env{'user.domain'}; - my $pendingcoowners = $values->{'internal.pendingco-owners'}; - my @pendingcoown = split(',',$pendingcoowners); - if ($env{'form.pending_coowoner'}) { - foreach my $item (@pendingcoown) { - unless ($item eq $uname.':'.$udom) { - push(@newpending,$item); - } - } - @newcoown = @currcoown; - if ($env{'form.pending_coowoner'} eq 'accept') { - unless (grep(/^\Q$uname\E:\Q$udom\E$/,@currcoown)) { - push(@newcoown,$uname.':'.$udom); - } - } - } elsif ($env{'form.remove_coowoner'}) { - foreach my $item (@currcoown) { - unless ($item eq $uname.':'.$udom) { - push(@newcoown,$item); - } - } - if ($pendingcoowners ne '') { - @newpending = @pendingcoown; - } - } - $newvalues{'pendingco-owners'} = join(',',sort(@newpending)); - $newvalues{'co-owners'} = join(',',sort(@newcoown)); - if ($newvalues{'co-owners'} ne $values->{'internal.co-owners'}) { - $changes->{$entry}{'co-owners'} = $newvalues{'co-owners'}; - push(@{$changes->{$entry}{'changed'}},'co-owners'); - } - if ($newvalues{'pendingco-owners'} ne $values->{'internal.pendingco-owners'}) { - $changes->{$entry}{'pendingco-owners'} = $newvalues{'pendingco-owners'}; - push(@{$changes->{$entry}{'changed'}},'pendingco-owners'); - } - } } 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; - if ($crstype eq 'Community') { - @stds = ('co'); - } else { - @stds = ('cc'); - } - push(@stds,('in','ta','ep','ad','st')); + my @stds = ('cc','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, @@ -1022,8 +690,8 @@ sub process_changes { $hdr .= $env{'form.printfmthdr_limit_'.$i}; } $hdr .= $env{'form.printfmthdr_sub_'.$i}; - } elsif ($env{'form.printfmthdr_text_'.$i} ne '') { - $hdr = $env{'form.printfmthdr_text_'.$i}; + } elsif ($env{'form.printfmthdr_sub_'.$i} ne '') { + $hdr = $env{'form.printfmthdr_sub_'.$i}; } $newhdr[$env{'form.printfmthdr_pos_'.$i}] = $hdr; } @@ -1070,10 +738,8 @@ sub process_changes { } else { $newvalues{$entry} = $env{'form.'.$entry}; } - unless ($entry eq 'co-owners') { - if ($newvalues{$entry} ne $values->{$entry}) { - $changes->{$entry} = $newvalues{$entry}; - } + if ($newvalues{$entry} ne $values->{$entry}) { + $changes->{$entry} = $newvalues{$entry}; } } } @@ -1123,18 +789,14 @@ sub check_clone { } sub store_changes { - my ($cdom,$cnum,$prefs_order,$actions,$prefs,$values,$changes,$crstype) = @_; + my ($cdom,$cnum,$prefs_order,$actions,$prefs,$values,$changes) = @_; my ($chome,$output); - my (%storehash,@delkeys,@need_env_update,@oldcloner); + my (%storehash,@delkeys,@need_env_update); if ((ref($values) eq 'HASH') && (ref($changes) eq 'HASH')) { %storehash = %{$values}; } else { - if ($crstype eq 'Community') { - $output = &mt('No changes made to community settings.'); - } else { - $output = &mt('No changes made to course settings.'); - } - return $output; + $output = &mt('No changes made to course settings.'); + return; } my %yesno = ( hidefromcat => '1', @@ -1170,15 +832,9 @@ 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; - my @roles; - if ($crstype eq 'Community') { - @roles = ('co'); - } else { - @roles = ('cc'); - } - push(@roles,('in','ta','ep','ad','st')); - foreach my $role (@roles) { + foreach my $role ('cc','in','ta','ep','ad','st') { next if (!exists($changes->{$item}{$key.'_'.$role})); my $stdname = &Apache::lonnet::plaintext($role,$crstype,undef,1); my $newname = $changes->{$item}{$key.'_'.$role}; @@ -1196,10 +852,7 @@ sub store_changes { next if (!exists($changes->{$item}{$key})); my ($displayname,$text); $text = $prefs->{$item}->{'itemtext'}{$key}; - my $displayval; - unless ($key eq 'co-owners') { - $displayval = $changes->{$item}{$key}; - } + my $displayval = $changes->{$item}{$key}; if ($item eq 'feedback') { if ($key =~ /^(question|policy|comment)(\.email)\.text$/) { $text = $prefs->{$item}->{'itemtext'}{$1.$2}; @@ -1251,64 +904,23 @@ sub store_changes { $displayname = &mt($text); } if (defined($yesno{$key})) { - $displayval = &mt('No'); + $displayval = 'no'; if ($changes->{$item}{$key} eq 'yes') { - $displayval = &mt('Yes'); + $displayval = 'yes'; } } elsif (($key =~ /^default_enrollment_(start|end)_date$/) && ($displayval)) { $displayval = &Apache::lonlocal::locallocaltime($displayval); } elsif ($key eq 'categories') { $displayval = $env{'form.categories_display'}; - } - if ($key eq 'co-owners') { - if (ref($changes->{$item}{$key}) eq 'HASH') { - if (ref($changes->{$item}{$key}{'changed'}) eq 'ARRAY') { - foreach my $type ('co-owners','pendingco-owners') { - next unless (grep(/^\Q$type\E$/,@{$changes->{$item}{$key}{'changed'}})); - if ($type eq 'pendingco-owners') { - if (&Apache::lonnet::is_course_owner($cdom,$cnum)) { - $displayname = &mt('Invited as co-owners, pending acceptance'); - } - } - if ($changes->{$item}{$key}{$type} eq '') { - push(@delkeys,'internal.'.$type); - if (&Apache::lonnet::is_course_owner($cdom,$cnum)) { - $output .= '
  • '.&Apache::lonhtmlcommon::confirm_success(&mt('Deleted setting for [_1]', - ''.$displayname.'')).'
  • '; - } - } elsif (&Apache::lonnet::is_course_owner($cdom,$cnum)) { - $displayval = join(', ',map { &Apache::loncommon::plainname(split(':',$_)); } split(',',$changes->{$item}{$key}{$type})); - $output .= '
  • '.&Apache::lonhtmlcommon::confirm_success(&mt('[_1] set to [_2]', - ''.$displayname.'', - "'$displayval'")).'
  • '; - } - } - } - unless (&Apache::lonnet::is_course_owner($cdom,$cnum)) { - if ($env{'form.pending_coowoner'} eq 'accept') { - $displayval = &mt('on'); - } elsif ($env{'form.pending_coowoner'} eq 'decline') { - $displayval = ''; - $output .= '
  • '.&Apache::lonhtmlcommon::confirm_success(&mt('Invitation to be co-owner declined')).'
  • '; - } elsif ($env{'form.remove_coowoner'}) { - $displayval = &mt('off'); - } - if ($displayval) { - $displayname = &mt('Your co-ownership status'); - $output .= '
  • '.&Apache::lonhtmlcommon::confirm_success(&mt('[_1] set to [_2]', - ''.$displayname.'', - "'$displayval'")).'
  • '; - } - } - } - } elsif ($changes->{$item}{$key} eq '') { + } + if ($changes->{$item}{$key} eq '') { push(@delkeys,$key); - $output .= '
  • '.&Apache::lonhtmlcommon::confirm_success(&mt('Deleted setting for [_1]', - ''.$displayname.'')).'
  • '; + $output .= '
  • '.&mt('Deleted setting for [_1]', + ''.$displayname.'').'
  • '; } else { - $output .= '
  • '.&Apache::lonhtmlcommon::confirm_success(&mt('[_1] set to [_2]', + $output .= '
  • '.&mt('[_1] set to [_2]', ''.$displayname.'', - "'$displayval'")); + "'$displayval'"); if ($key eq 'url') { my $bkuptime=time; $output .= (' 'x2).&mt('(Previous URL backed up)').': '. @@ -1316,32 +928,10 @@ sub store_changes { } $output .= '
  • '; } - if ($key eq 'co-owners') { - if (ref($changes->{$item}{$key}) eq 'HASH') { - if (ref($changes->{$item}{$key}{'changed'}) eq 'ARRAY') { - foreach my $type ('co-owners','pendingco-owners') { - next unless (grep(/^\Q$type\E$/,@{$changes->{$item}{$key}{'changed'}})); - $storehash{'internal.'.$type} = $changes->{$item}{$key}{$type}; - } - } - } - } else { - $storehash{$key} = $changes->{$item}{$key}; - } - } - if ($key eq 'cloners') { - # Get existing cloners - my %clonenames = - &Apache::lonnet::dump('environment',$cdom,$cnum,'cloners'); - if ($clonenames{'cloners'} =~ /,/) { - @oldcloner = split(/\s*\,\s*/,$clonenames{'cloners'}); - } else { - $oldcloner[0] = $clonenames{'cloners'}; - } + $storehash{$key} = $changes->{$item}{$key}; } if (($key eq 'description') || ($key eq 'cloners') || - ($key eq 'hidefromcat') || ($key eq 'categories') || - ($key eq 'co-owners')) { + ($key eq 'hidefromcat') || ($key eq 'categories')) { push(@need_env_update,$key); } } @@ -1349,37 +939,16 @@ sub store_changes { } $output .= ''; } else { - if ($crstype eq 'Community') { - $output = &mt('No changes made to community settings.'); - } else { - $output = &mt('No changes made to course settings.'); - } + $output = &mt('No changes made to course settings.'); } } } } if (&Apache::lonnet::put('environment',\%storehash,$cdom,$cnum) eq 'ok') { - if (ref($changes) eq 'HASH') { - if (ref($changes->{'courseinfo'}) eq 'HASH') { - if (exists($changes->{'courseinfo'}{'cloners'})) { - &change_clone($cdom,$cnum,$changes->{'courseinfo'}{'cloners'}, - \@oldcloner); - } - } - } if (@delkeys) { if (&Apache::lonnet::del('environment',\@delkeys,$cdom,$cnum) ne 'ok') { - $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 .= ''; - } - } else { - foreach my $key (@delkeys) { - &Apache::lonnet::delenv('course.'.$cdom.'_'.$cnum.'.'.$key); + $output .= '
    '. + &mt('An error occurred when removing course settings which are no longer in use.').''; } } if (@need_env_update) { @@ -1389,13 +958,8 @@ sub store_changes { &Apache::lonnet::coursedescription($env{'request.course.id'}, {'freshen_cache' => 1}); } else { - $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 .= ''; + $output = ''. + &mt('An error occurred when saving changes to course settings, which remain unchanged.').''; } return $output; } @@ -1415,16 +979,6 @@ sub update_env { &Apache::lonnet::appenv({'course.'.$env{'request.course.id'}.'.'.$key => $storehash->{$key}}); $crsinfo{$env{'request.course.id'}}{$key} = $storehash->{$key}; $count ++; - } elsif ($key eq 'co-owners') { - if ($storehash->{'internal.co-owners'} ne '') { - &Apache::lonnet::appenv({'course.'.$env{'request.course.id'}.'.internal.co-owners' => $storehash->{'internal.co-owners'}}); - } - if ($storehash->{'internal.pendingco-owners'} ne '') { - &Apache::lonnet::appenv({'course.'.$env{'request.course.id'}.'.internal.pendingco-owners' => $storehash->{'internal.pendingco-owners'}}); - } - my @coowners = split(',',$storehash->{'internal.'.$key}); - $crsinfo{$env{'request.course.id'}}{'co-owners'} = \@coowners; - $count ++; } } if ($count) { @@ -1436,7 +990,7 @@ sub update_env { } sub display_disallowed { - my ($item,$disallowed,$prefs,$crstype) = @_; + my ($item,$disallowed,$prefs) = @_; my $output; if ((ref($disallowed) eq 'HASH') && (ref($prefs) eq 'HASH')) { if (keys(%{$disallowed})) { @@ -1452,7 +1006,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]$crstype Configuration[_2] to add as potential cloners.",'','',''); + $msg .= '
    '.&mt('Please [_1]add the user(s)[_2] before returning to the [_3]Course Configuration[_2] to add as potential cloners.','
    ','',''); } push(@fails,$msg); } @@ -1483,19 +1037,11 @@ sub display_disallowed { } elsif (($item eq 'feedback') || ($item eq 'discussion') || ($item eq 'localization')) { $output .= ''; if ($item eq 'feedback') { - 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:'); - } + $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') { - if ($crstype eq 'Community') { - $output .= &mt('Unable to include in community localization:'); - } else { - $output .= &mt('Unable to include in course localization:'); - } + $output .= &mt('Unable to include in course localization:'); } $output .= '