--- loncom/interface/lonviewclasslist.pm 2010/03/25 17:38:43 1.13 +++ loncom/interface/lonviewclasslist.pm 2012/12/31 14:29:08 1.14 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to display the classlist # -# $Id: lonviewclasslist.pm,v 1.13 2010/03/25 17:38:43 raeburn Exp $ +# $Id: lonviewclasslist.pm,v 1.14 2012/12/31 14:29:08 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -34,6 +34,7 @@ use strict; use Apache::loncoursedata(); use Apache::loncommon(); use Apache::lonhtmlcommon(); +use Apache::courseprefs(); use Apache::Constants qw(:common :http REDIRECT); use Apache::lonlocal; use Apache::lonnet; @@ -61,7 +62,7 @@ sub handler { return OK; } &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, - ['register']); + ['register','forceedit','action','symb','todocs']); if (! ($env{'request.course.fn'})) { $env{'user.error.msg'}= "/adm/viewclasslist:not in course role"; @@ -87,13 +88,95 @@ ENDHEADER # Get classlist view settings my %viewsettings = &retrieve_view_settings(); - # Print classlist - if (keys(%viewsettings) > 0) { - $r->print(&html_classlist($r,\%viewsettings)); + if (($env{'form.forceedit'}) || ($env{'form.action'} eq 'setconfig')) { + if (&Apache::lonnet::allowed('opa',$env{'request.course.id'})) { + my $crstype = &Apache::loncommon::course_type(); + my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; + my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; + my $rosterprefs = &roster_prefs($crstype); + my $allitems = {}; + if ($env{'form.action'} eq 'setconfig') { + my %values=&Apache::lonnet::dump('environment',$cdom,$cnum); + if (keys(%values) > 0) { + my ($numchanged,%changes,%disallowed); + my $prefs = { + classlists => $rosterprefs, + }; + $changes{'classlists'} = {}; + &Apache::courseprefs::process_changes($cdom,'classlists',\%values, + $rosterprefs, + $changes{'classlists'}, + $allitems,\%disallowed,$crstype); + my $message; + if (keys(%{$changes{'classlists'}}) > 0) { + my $actions = ['classlists']; + $message = + &Apache::courseprefs::store_changes($cdom,$cnum,$actions, + $actions,$prefs,\%values, + \%changes,$crstype); + } else { + if ($crstype eq 'Community') { + $message = &mt('No changes made to community settings.'); + } else { + $message = &mt('No changes made to course settings.'); + } + } + $r->print(&Apache::loncommon::confirmwrapper($message)); + } else { + $r->print('
'. + &mt('Unable to retrieve current settings.').'
'. + &mt('No changes saved.'). + '
'); + } + } else { + my $current = {}; + my @settings = ('student_classlist_view','student_classlist_opt_in', + 'student_classlist_portfiles'); + foreach my $setting (@settings) { + $current->{$setting} = $env{"course.$env{'request.course.id'}.$setting"}; + } + my ($output,$rowtotal) = + &Apache::courseprefs::print_config_box($r,$cdom,'display', + 'viewableroster', + $rosterprefs,$current, + $allitems,$crstype); + if ($output) { + $r->print('
'."\n". + ''."\n". + ''."\n". + ''."\n"); + if ($env{'form.symb'}) { + $r->print(''."\n"); + } + if ($env{'form.symb'}) { + $r->print(''."\n"); + } + $r->print('
'. + $output. + '

'. + ''. + '
'); + } else { + $r->print('
'. + &mt('No student-viewable course roster settings available.'). + '
'); + } + } + } else { + $r->print('
'. + &mt('You do not have rights to modify student-viewable course roster settings.'). + '
'); + } } else { - $r->print('
'. - &mt("Display of a student-viewable course roster is not currently enabled."). - '
'); + + # Print classlist + if (keys(%viewsettings) > 0) { + $r->print(&html_classlist($r,\%viewsettings)); + } else { + $r->print('
'. + &mt("Display of a student-viewable course roster is not currently enabled."). + '
'); + } } # # Finish up @@ -123,6 +206,37 @@ sub retrieve_view_settings { return %viewsettings; } +sub roster_prefs { + my ($crstype) = @_; + my %lt; + if ($crstype eq 'Community') { + %lt = &Apache::lonlocal::texthash ( + stuv => 'Member-viewable membership list options', + stul => 'Member agreement needed to be listed', + ); + } else { + %lt = &Apache::lonlocal::texthash( + stuv => 'Student-viewable classlist options', + stul => 'Student agreement needed to be listed', + ); + } + $lt{'incl'} = &mt('Include link to accessible portfolio files'); + + return + { text => 'Student-viewable roster settings', + header => [ {col1 => 'Setting', + col2 => $lt{'stuv'}}], + ordered => ['student_classlist_view', + 'student_classlist_opt_in', + 'student_classlist_portfiles'], + itemtext => { + student_classlist_view => $lt{'stuv'}, + student_classlist_opt_in => $lt{'stul'}, + student_classlist_portfiles => $lt{'incl'}, + }, + }; +} + sub html_classlist { my ($r,$viewsettings) = @_; my ($Str,$title,$secdisplay,$cid,$cdom,$cnum,$listtype,%publicroster);