--- loncom/interface/courseprefs.pm 2010/11/19 14:58:35 1.8.2.15 +++ loncom/interface/courseprefs.pm 2009/10/29 14:57:18 1.9 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to set configuration settings for a course # -# $Id: courseprefs.pm,v 1.8.2.15 2010/11/19 14:58:35 raeburn Exp $ +# $Id: courseprefs.pm,v 1.9 2009/10/29 14:57:18 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; @@ -272,8 +93,6 @@ sub handler { 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', @@ -282,7 +101,7 @@ sub handler { date => 'Locale used for community calendar', coco => 'Community Content', copo => 'Community Policy', - priv => 'Domain Coordinators in community', + priv => 'Domain Coodinators in community', defd => 'Default dates for member access', stuv => 'Member-viewable membership list options', stul => 'Member agreement needed to be listed', @@ -299,8 +118,6 @@ sub handler { 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', @@ -309,7 +126,7 @@ sub handler { date => 'Locale used for course calendar', coco => 'Course Content', copo => 'Course Policy', - priv => 'Domain Coordinators in course', + priv => 'Domain Coodinators in course', defd => 'Default dates for student access', stuv => 'Student-viewable classlist options', stul => 'Student agreement needed to be listed', @@ -346,20 +163,18 @@ sub handler { 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 => $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'}, }, }, 'localization' => @@ -393,15 +208,15 @@ sub handler { help => 'Course_Environment', header => [{col1 => 'Setting', col2 => 'Value',}], - ordered => ['pch.roles.denied','pch.users.denied', - 'plc.roles.denied','plc.users.denied', + ordered => ['plc.roles.denied','plc.users.denied', + 'pch.roles.denied','pch.users.denied', 'allow_limited_html_in_feedback', 'allow_discussion_post_editing'], itemtext => { - 'pch.roles.denied' => 'No Resource Discussion', - 'pch.users.denied' => 'No Resource Discussion', - 'plc.roles.denied' => 'No Chat room use', - 'plc.users.denied' => 'No Chat room use', + 'plc.roles.denied' => 'No Resource Discussion', + 'plc.users.denied' => 'No Resource Discussion', + 'pch.roles.denied' => 'No Chat room use', + 'pch.users.denied' => 'No Chat room use', allow_limited_html_in_feedback => 'Allow limited HTML in discussion posts', allow_discussion_post_editing => 'Users can edit/delete own discussion posts', }, @@ -418,13 +233,13 @@ sub handler { 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'}, + student_opt_in => $lt{'stul'}, student_classlist_portfiles => 'Include link to accessible portfolio files', }, }, @@ -517,7 +332,7 @@ 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); @@ -709,8 +524,8 @@ sub process_changes { if (exists($env{'form.cloners_activate'})) { my $actnum = $env{'form.cloners_activate'}; if ($actnum ne '') { - if ($env{'form.cloners_dom_'.$actnum} ne '') { - my $clonedom = $env{'form.cloners_dom_'.$actnum}; + if ($env{'form.clonersdom_'.$actnum} ne '') { + my $clonedom = $env{'form.clonersdom_'.$actnum}; if (&check_clone($clonedom,$disallowed) eq 'ok') { $newvalues{$entry} = '*:'.$clonedom; push(@clonedoms,$newvalues{$entry}); @@ -752,14 +567,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,80 +591,6 @@ 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') { @@ -1022,8 +759,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 +807,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}; } } } @@ -1125,7 +860,7 @@ sub check_clone { sub store_changes { my ($cdom,$cnum,$prefs_order,$actions,$prefs,$values,$changes,$crstype) = @_; 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 { @@ -1196,10 +931,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,97 +983,34 @@ 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)').': '. - $storehash{'top level map backup '.$bkuptime} = $values->{$key}; + $storehash{'top level map backup '.$bkuptime} => $values->{$key}; } $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); } } @@ -1359,14 +1028,6 @@ sub store_changes { } } 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 .= '
    '; @@ -1377,10 +1038,6 @@ sub store_changes { } $output .= ''; } - } else { - foreach my $key (@delkeys) { - &Apache::lonnet::delenv('course.'.$cdom.'_'.$cnum.'.'.$key); - } } if (@need_env_update) { $chome = &Apache::lonnet::homeserver($cnum,$cdom); @@ -1415,16 +1072,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) { @@ -1527,8 +1174,8 @@ sub get_course { } sub get_jscript { - my ($cdom,$phase,$crstype) = @_; - my ($can_toggle_cat,$can_categorize) = &can_modify_catsettings($cdom,$crstype); + my ($cdom,$phase) = @_; + my ($can_toggle_cat,$can_categorize) = &can_modify_catsettings($cdom); my ($jscript,$categorize_js); my $stubrowse_js = &Apache::loncommon::studentbrowser_javascript(); my $browse_js = &Apache::loncommon::browser_and_searcher_javascript('parmset'); @@ -1639,25 +1286,22 @@ sub print_courseinfo { unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) { return; } - my ($cathash,$categoriesform,$autocoowner); + my ($cathash,$categoriesform); my %domconf = - &Apache::lonnet::get_dom('configuration',['coursecategories','autoenroll'],$cdom); + &Apache::lonnet::get_dom('configuration',['coursecategories'],$cdom); if (ref($domconf{'coursecategories'}) eq 'HASH') { $cathash = $domconf{'coursecategories'}{'cats'}; if (ref($cathash) eq 'HASH') { $categoriesform = &Apache::loncommon::assign_categories_table($cathash, - $settings->{'categories'},$crstype)."\n"; + $settings->{'categories'})."\n"; } } - if (ref($domconf{'autoenroll'}) eq 'HASH') { - $autocoowner = $domconf{'autoenroll'}{'co-owners'}; - } if (!defined($categoriesform)) { - $categoriesform = &mt('No categories defined in this domain.'); + $categoriesform = &mt('No categories defined for this domain'); } - my ($can_toggle_cat,$can_categorize) = &can_modify_catsettings($cdom,$crstype); + my ($can_toggle_cat,$can_categorize) = &can_modify_catsettings($cdom); my $replace; if ($crstype eq 'Community') { @@ -1681,12 +1325,6 @@ sub print_courseinfo { input => 'textbox', size => '25', }, - 'owner' => { - text => ''.&mt($itemtext->{'owner'}).'', - }, - 'co-owners' => { - text => ''.&mt($itemtext->{'co-owners'}).'', - }, 'courseid' => { text => ''.&mt($itemtext->{'courseid'}).'
    '.'('. &mt('internal, optional').')', @@ -1695,7 +1333,7 @@ sub print_courseinfo { }, 'cloners' => { text => ''.&mt($itemtext->{'cloners'}).'
    '. - &mt('Owner and Coordinators included automatically'), + &mt('Coordinators included automatically'), input => 'textbox', size => '40', }, @@ -1767,18 +1405,11 @@ sub print_courseinfo { if (@entries > 0) { foreach my $entry (@entries) { my ($uname,$udom) = split(/:/,$entry); - if ($udom =~ /^$match_domain$/) { - unless (&Apache::lonnet::domain($udom)) { - next; - } - } else { - next; - } if ($uname eq '*') { $datatable .= &Apache::loncommon::start_data_table_row(). ''. - &mt('Any user in domain:').' '.$udom. + &mt('Domain:').' '.$udom. '
    '. ''. &Apache::loncommon::end_data_table_row(); $num ++; - } elsif (&Apache::lonnet::homeserver($uname,$udom) ne 'no_host') { - unless (grep(/^\Q$entry\E$/,@cloners)) { - push(@cloners,$entry); - } + } else { + push(@cloners,$entry); } } } @@ -1845,38 +1474,6 @@ sub print_courseinfo { $datatable .= ''. &Apache::lonhtmlcommon::textbox($item.'_display',$settings->{$item}, $items{$item}{size},$launcher); - } elsif ($item eq 'owner') { - my $owner = $env{'course.'.$env{'request.course.id'}.'.internal.courseowner'}; - if ($owner =~ /:/) { - my ($ownername,$ownerdom) = split(':',$owner); - $owner = &Apache::loncommon::plainname($ownername,$ownerdom); - } elsif ($owner ne '') { - $owner = &Apache::loncommon::plainname($owner,$cdom); - } else { - $owner = &mt('None specified'); - } - my $domdesc = &Apache::lonnet::domain($cdom,'description'); - $datatable .= $owner; - } elsif ($item eq 'co-owners') { - my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; - my $coowners = $env{'course.'.$env{'request.course.id'}.'.internal.co-owners'}; - my @currcoown; - if ($coowners) { - @currcoown = split(',',$coowners); - } - if (&Apache::lonnet::is_course_owner($cdom,$cnum)) { - if (($crstype eq 'Course') && ($env{'course.'.$env{'request.course.id'}.'.internal.coursecode'}) && ($autocoowner)) { - $datatable .= &show_autocoowners(@currcoown); - } else { - $datatable .= &coowner_invitations($cnum,$cdom,@currcoown); - } - } else { - if (($crstype eq 'Course') && ($env{'course.'.$env{'request.course.id'}.'.internal.coursecode'}) && ($autocoowner)) { - $datatable .= &show_autocoowners(@currcoown); - } else { - $datatable .= &manage_coownership($cnum,$cdom,@currcoown); - } - } } else { $datatable .= &Apache::lonhtmlcommon::textbox($item,$settings->{$item},$items{$item}{size}); } @@ -1910,24 +1507,15 @@ sub new_cloners_dom_row { } sub can_modify_catsettings { - my ($dom,$crstype) = @_; + my ($dom) = @_; my %domconf = &Apache::lonnet::get_dom('configuration',['coursecategories'],$dom); my ($can_toggle_cat,$can_categorize); if (ref($domconf{'coursecategories'}) eq 'HASH') { - if ($crstype eq 'Community') { - if ($domconf{'coursecategories'}{'togglecatscomm'} eq 'comm') { - $can_toggle_cat = 1; - } - if ($domconf{'coursecategories'}{'categorizecomm'} eq 'comm') { - $can_categorize = 1; - } - } else { - if ($domconf{'coursecategories'}{'togglecats'} eq 'crs') { - $can_toggle_cat = 1; - } - if ($domconf{'coursecategories'}{'categorize'} eq 'crs') { - $can_categorize = 1; - } + if ($domconf{'coursecategories'}{'togglecats'} eq 'crs') { + $can_toggle_cat = 1; + } + if ($domconf{'coursecategories'}{'categorize'} eq 'crs') { + $can_categorize = 1; } } return ($can_toggle_cat,$can_categorize); @@ -1943,13 +1531,7 @@ sub assign_course_categories { if (ref($domconf{'coursecategories'}) eq 'HASH') { $cathash = $domconf{'coursecategories'}{'cats'}; if (ref($cathash) eq 'HASH') { - foreach my $cat (keys(%{$cathash})) { - next if ($cat eq 'instcode::0'); - unless ($crstype eq 'Community') { - next if ($cat eq 'communities::0'); - } - $hascats ++; - } + $hascats = 1; } } my $catwin_js; @@ -2015,147 +1597,20 @@ ENDSCRIPT if ($hascats) { my %currsettings = &Apache::lonnet::get('environment',['hidefromcat','categories'],$cdom,$cnum); - my $cattable = &Apache::loncommon::assign_categories_table($cathash, - $currsettings{'categories'},$crstype); - if ($cattable eq '') { - $categoriesform .= &mt('No suitable categories defined for this course type in this domain.'); - } else { - $categoriesform .= $assign.'

    '. - '
    '."\n". - $cattable."\n". - '

    '; - } + $categoriesform .= $assign.'

    '. + '
    '."\n". + &Apache::loncommon::assign_categories_table($cathash, + $currsettings{'categories'})."\n". + '

    '; } else { - $categoriesform .= &mt('No categories defined in this domain.'); + $categoriesform .= &mt('No categories defined for this domain'); } $r->print($start_page.$categoriesform.$end_page); return; } -sub show_autocoowners { - my (@currcoown) = @_; - my $output = ''.&mt('Co-ownership is set automatically when a Course Coordinator role is assigned to official course personnel (from institutional data).').''; - if (@currcoown > 0) { - $output .= '
    '.&mt('Current co-owners are:').' '. - join(', ',map { &Apache::loncommon::plainname(split(':',$_)); } (@currcoown)); - } else { - $output .= '
    '.&mt('Currently no co-owners.'); - } - return $output; -} - -sub coowner_invitations { - my ($cnum,$cdom,@currcoown) = @_; - my ($output,@pendingcoown,@othercoords); - my $pendingcoowners = - $env{'course.'.$env{'request.course.id'}.'.internal.pendingco-owners'}; - if ($pendingcoowners) { - @pendingcoown = split(',',$pendingcoowners); - } - my $ccrole = 'cc'; - my %ccroles = &Apache::lonnet::get_my_roles($cnum,$cdom,undef,undef,[$ccrole]); - foreach my $key (sort(keys(%ccroles))) { - my ($ccname,$ccdom,$role) = split(':',$key); - next if ($key eq $env{'user.name'}.':'.$env{'user.domain'}.':'.$ccrole); - unless (grep(/^\Q$ccname\E:\Q$ccdom\E$/,@currcoown,@pendingcoown)) { - push(@othercoords,$ccname.':'.$ccdom); - } - } - my $coowner_rows = @currcoown + @pendingcoown + @othercoords; - if ($coowner_rows) { - $output .= &Apache::loncommon::start_data_table(); - if (@currcoown) { - $output .= &Apache::loncommon::start_data_table_row(). - ''.&mt('Current co-owners').''; - foreach my $person (@currcoown) { - my ($co_uname,$co_dom) = split(':',$person); - $output .= ''.(' 'x2).' '; - } - $output .= ''. - &Apache::loncommon::end_data_table_row(); - } - if ($pendingcoowners) { - $output .= &Apache::loncommon::start_data_table_row(). - ''.&mt('Invited as co-owners [_1](agreement pending)','
    ').'
    '; - foreach my $person (@pendingcoown) { - my ($co_uname,$co_dom) = split(':',$person); - $output .= ''.(' 'x2).' '; - } - $output .= ''. - &Apache::loncommon::end_data_table_row(); - } - if (@othercoords) { - $output .= &Apache::loncommon::start_data_table_row(). - ''.&mt('Invite other Coordinators [_1]to become co-owners','
    ').'
    '; - foreach my $person (@othercoords) { - my ($co_uname,$co_dom) = split(':',$person); - $output .= ''.(' 'x2).' '; - } - $output .= ''. - &Apache::loncommon::end_data_table_row(); - } - $output .= &Apache::loncommon::end_data_table(); - } else { - $output = &mt('There are no coordinators to select as co-owners'); - } - return $output; -} - -sub manage_coownership { - my ($cnum,$cdom,@currcoown) = @_; - my (@pendingcoown); - my $pendingcoowners = - $env{'course.'.$env{'request.course.id'}.'.internal.pendingco-owners'}; - if ($pendingcoowners) { - @pendingcoown = split(',',$pendingcoowners); - } - my ($is_coowner,$is_pending,$output); - my $uname = $env{'user.name'}; - my $udom = $env{'user.domain'}; - if (grep(/^\Q$uname\E:\Q$udom\E$/,@currcoown)) { - $is_coowner = 1; - } - if (grep(/^\Q$uname\E:\Q$udom\E$/,@pendingcoown)) { - $is_pending = 1; - } - if (@currcoown && ($is_coowner || $is_pending)) { - $output = &Apache::loncommon::start_data_table(); - } - if (@currcoown) { - if ($is_coowner || $is_pending) { - $output .= &Apache::loncommon::start_data_table(). - &Apache::loncommon::start_data_table_row().''; - } - $output .= &mt('Current co-owners are:').' '. - join(', ', map { &Apache::loncommon::plainname(split(':',$_)); } (@currcoown)); - if ($is_coowner || $is_pending) { - $output .= ''.&Apache::loncommon::end_data_table_row(); - } - } - if ($is_coowner || $is_pending) { - if (@currcoown) { - $output .= &Apache::loncommon::start_data_table_row().''; - } - $output .= ''; - if ($is_coowner) { - $output .= &mt('You are currently a co-owner:').' '; - } else { - $output .= &mt('The course owner has invited you to become a co-owner:').' '.(' 'x2). - ''; - } - $output .= ''; - if (@currcoown) { - $output .= ''.&Apache::loncommon::end_data_table_row(); - } - } - if (@currcoown && ($is_coowner || $is_pending)) { - $output .= &Apache::loncommon::end_data_table(); - } - return $output; -} - sub print_localization { my ($cdom,$settings,$ordered,$itemtext,$rowtotal) = @_; unless ((ref($settings) eq 'HASH') && (ref($ordered) eq 'ARRAY') && (ref($itemtext) eq 'HASH')) { @@ -2281,11 +1736,11 @@ sub print_feedback { my %sections = &Apache::loncommon::get_sections($cdom,$cnum); my @sections = sort( { $a <=> $b } keys(%sections)); my %lt = &Apache::lonlocal::texthash ( - currone => 'Current recipient:', - currmult => 'Current recipients:', - add => 'Additional recipient:', - del => 'Delete?', - sec => 'Sections:', + currone => 'Current recipient:', + curmult => 'Current recipients:', + add => 'Additional recipient:', + del => 'Delete?', + sec => 'Sections:', ); foreach my $item (@{$ordered}) { @@ -2313,7 +1768,7 @@ sub user_table { } else { my $num = 0; my @curr = split(/,/,$currvalue); - $output .= ''; + $output .= &Apache::loncommon::start_data_table(); my ($currusers); foreach my $val (@curr) { next if ($val eq ''); @@ -2344,23 +1799,24 @@ sub user_table { $num ++; } if ($num) { - $output .= ''. + $output .= &Apache::loncommon::start_data_table_row(). ''. - ''; + &Apache::loncommon::end_data_table_row(); } - $output .= ''. + $output .= &Apache::loncommon::start_data_table_row(). '
    '; - if ($num == 1) { + if ($num > 1) { $output .= $lt->{'currone'}; } else { $output .= $lt->{'currmult'}; } $output .= '
    '. ''.$currusers.'
    '. $lt->{'add'}.'
    '. &select_recipient($item,$num,$cdom,$sections). ''. - '
    '; + ''.&Apache::loncommon::end_data_table_row(). + &Apache::loncommon::end_data_table(); } return $output; } @@ -2371,8 +1827,9 @@ sub select_recipient { my $selectlink = &Apache::loncommon::selectstudent_link('display',$item.'_uname_'.$num, $item.'_udom_'.$num,1); + my $css_class = ($num % 2)?'LC_even_row':'LC_odd_row'; my $output = - '
    '.&mt('Username').'
    '. + ''. ''; if (ref($sections) eq 'ARRAY') { @@ -2426,8 +1883,8 @@ sub print_discussion { } my %items = ( 'plc.roles.denied' => { - text => ''.&mt($itemtext->{'plc.roles.denied'}).''. - &Apache::loncommon::help_open_topic("Course_Disable_Discussion").'
    '. + text => ''.&mt($itemtext->{'plc.roles.denied'}).''. + &Apache::loncommon::help_open_topic("Course_Disable_Discussion"). &mt('(role-based)'), input => 'checkbox', }, @@ -2439,8 +1896,8 @@ sub print_discussion { }, 'pch.roles.denied' => { - text => ''.&mt($itemtext->{'pch.roles.denied'}).''. - &Apache::loncommon::help_open_topic("Course_Disable_Discussion").'
    '. + text => ''.&mt($itemtext->{'pch.roles.denied'}).''. + &Apache::loncommon::help_open_topic("Course_Disable_Discussion").'
    '. &mt('(role-based)'), input => 'checkbox', }, @@ -2466,11 +1923,11 @@ sub print_discussion { my %sections = &Apache::loncommon::get_sections($cdom,$cnum); my @sections = sort( { $a <=> $b } keys(%sections)); my %lt = &Apache::lonlocal::texthash ( - currone => 'Disallowed:', - currmult => 'Disallowed:', - add => 'Disallow more:', - del => 'Delete?', - sec => 'Sections:', + currone => 'Disallowed:', + curmult => 'Disallowed:', + add => 'Disallow more:', + del => 'Delete?', + sec => 'Sections:', ); foreach my $item (@{$ordered}) { @@ -2561,7 +2018,7 @@ sub role_checkboxes { $output .= ''; } } - $output .= ''; if ($showsections) { @@ -2593,7 +2050,7 @@ sub role_checkboxes { $output .= ''; } } - $output .= ''; if ($showsections) { @@ -2629,8 +2086,7 @@ sub print_classlists { @ordered = ('nothideprivileged'); } else { @ordered = ('student_classlist_view', - 'student_classlist_opt_in', - 'student_classlist_portfiles'); + 'student_opt_in','student_classlist_portfiles'); } my %lt; @@ -2669,8 +2125,8 @@ sub print_classlists { options => \%lt, order => ['disabled','all','section'], }, - 'student_classlist_opt_in' => { - text => ''.&mt($itemtext->{'student_classlist_opt_in'}).'', + 'student_opt_in' => { + text => ''.&mt($itemtext->{'student_opt_in'}).'', input => 'radio', }, @@ -2747,11 +2203,10 @@ sub print_grading { input => 'selectbox', options => { standard => &mt('Standard: shows points'), - external => &mt('External: shows number of completed parts and totals'), - externalnototals => &mt('External: shows only number of completed parts'), + external => &mt('External: shows number of completed parts'), spreadsheet => &mt('Spreadsheet: (with link to detailed scores)'), }, - order => ['standard','external','externalnototals','spreadsheet'], + order => ['standard','external','spreadsheet'], }, 'rndseed' => { text => ''.&mt($itemtext->{'rndseed'}).''. @@ -3161,9 +2616,9 @@ sub print_hdrfmt_row { $currstr .= ''.&mt('Current print header:').' '. $settings->{$item}.'
    '; my @current = split(/(%\d*[nca])/,$settings->{$item}); - foreach my $val (@current) { - unless ($val eq '') { - push(@curr,$val); + foreach my $item (@current) { + unless ($item eq '') { + push(@curr,$item); } } $currnum = @curr; @@ -3223,11 +2678,11 @@ function getIndexByName(item) { ENDJS - $output .= $currstr.'
    '.&mt('Username').'
    '. '
    '.&mt('Domain').'
    '.$domform.'
    '; + $output .= $currstr.&Apache::loncommon::start_data_table(); if (@curr > 0) { for (my $i=0; $i<@curr; $i++) { my $pos = $i+1; - $output .= ''. + $output .= &Apache::loncommon::start_data_table_row(). ''; } - $output .= ''; + $output .= &Apache::loncommon::end_data_table_row(); } } my $pos = $currnum+1; - $output .= ''. + $output .= &Apache::loncommon::start_data_table_row(). ''. - ''; + &Apache::loncommon::end_data_table_row(); $pos ++; $currnum ++; - $output .= ''. + $output .= &Apache::loncommon::start_data_table_row(). ''. @@ -3262,8 +2717,8 @@ ENDJS '" value="" size ="25" />'. ''. - ''. - '
    '. &position_selector($pos,$i,$maxnum).&mt('Delete:'). '
    '. &position_selector($pos,$currnum,$maxnum). ''.&mt('New').''. &substitution_selector($currnum).'
    '. &position_selector($pos,$currnum,$maxnum). ''.&mt('New').'
    '; + &Apache::loncommon::end_data_table_row(). + &Apache::loncommon::end_data_table(); return $output; } @@ -3298,7 +2753,7 @@ sub substitution_selector { a => 'assignment note', ); my $output .= &mt('Substitution').'
    '. - ''; if ($subst eq '') { $output .= ''; } @@ -3316,66 +2771,4 @@ sub substitution_selector { return $output; } -sub change_clone { - my ($cdom,$cnum,$clonelist,$oldcloner) = @_; - my $clone_crs = $cnum.':'.$cdom; - if ($cnum && $cdom) { - my $clone_crs = $cnum.':'.$cdom; - my @allowclone; - if ($clonelist =~ /,/) { - @allowclone = split(',',$clonelist); - } else { - $allowclone[0] = $clonelist; - } - foreach my $currclone (@allowclone) { - if (!grep(/^$currclone$/,@$oldcloner)) { - if ($currclone ne '*') { - my ($uname,$udom) = split(/:/,$currclone); - if ($uname && $udom && $uname ne '*') { - if (&Apache::lonnet::homeserver($uname,$udom) ne 'no_host') { - my %currclonecrs = &Apache::lonnet::dump('environment',$udom,$uname,'cloneable'); - if ($currclonecrs{'cloneable'} !~ /\Q$clone_crs\E/) { - if ($currclonecrs{'cloneable'} eq '') { - $currclonecrs{'cloneable'} = $clone_crs; - } else { - $currclonecrs{'cloneable'} .= ','.$clone_crs; - } - &Apache::lonnet::put('environment',\%currclonecrs,$udom,$uname); - } - } - } - } - } - } - foreach my $oldclone (@$oldcloner) { - if (!grep(/^\Q$oldclone\E$/,@allowclone)) { - if ($oldclone ne '*') { - my ($uname,$udom) = split(/:/,$oldclone); - if ($uname && $udom && $uname ne '*' ) { - if (&Apache::lonnet::homeserver($uname,$udom) ne 'no_host') { - my %currclonecrs = &Apache::lonnet::dump('environment',$udom,$uname,'cloneable'); - my %newclonecrs = (); - if ($currclonecrs{'cloneable'} =~ /\Q$clone_crs\E/) { - if ($currclonecrs{'cloneable'} =~ /,/) { - my @currclonecrs = split/,/,$currclonecrs{'cloneable'}; - foreach my $crs (@currclonecrs) { - if ($crs ne $clone_crs) { - $newclonecrs{'cloneable'} .= $crs.','; - } - } - $newclonecrs{'cloneable'} =~ s/,$//; - } else { - $newclonecrs{'cloneable'} = ''; - } - &Apache::lonnet::put('environment',\%newclonecrs,$udom,$uname); - } - } - } - } - } - } - } - return; -} - 1;