--- loncom/interface/lonmodifycourse.pm 2010/05/28 17:09:06 1.55 +++ loncom/interface/lonmodifycourse.pm 2010/08/24 13:51:52 1.57 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # handler for DC-only modifiable course settings # -# $Id: lonmodifycourse.pm,v 1.55 2010/05/28 17:09:06 bisitz Exp $ +# $Id: lonmodifycourse.pm,v 1.57 2010/08/24 13:51:52 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -149,7 +149,7 @@ sub print_course_search_page { 'instcodefilter','ownerfilter', 'coursefilter']; my $filter = {}; - my ($numtitles,$cctitle,$dctitle); + my ($numtitles,$cctitle,$dctitle,@codetitles); my $ccrole = 'cc'; if ($type eq 'Community') { $ccrole = 'co'; @@ -163,7 +163,8 @@ sub print_course_search_page { $r->print('<h3>'.&mt('Search for a course in the [_1] domain',$domdesc).'</h3>'); } $r->print(&Apache::lonpickcourse::build_filters($filterlist,$type, - undef,undef,$filter,$action,\$numtitles,'modifycourse')); + undef,undef,$filter,$action,\$numtitles,'modifycourse', + undef,undef,undef,\@codetitles)); if ($type eq 'Community') { $r->print(&mt('Actions available after searching for a community:').'<ul>'. '<li>'.&mt('Enter the community with the role of [_1]',$cctitle).'</li>'."\n". @@ -192,14 +193,16 @@ sub print_course_selection_page { my %filter; my $action = '/adm/modifycourse'; my $dctitle = &Apache::lonnet::plaintext('dc'); - my $numtitles; + my ($numtitles,@codetitles); $r->print(&Apache::lonpickcourse::js_changer()); $r->print(&mt('Revise your search criteria for this domain').' ('.$domdesc.').<br />'); $r->print(&Apache::lonpickcourse::build_filters($filterlist,$type, - undef,undef,\%filter,$action,\$numtitles)); + undef,undef,\%filter,$action,\$numtitles, + undef,undef,undef,undef,\@codetitles)); $filter{'domainfilter'} = $dom; my %courses = &Apache::lonpickcourse::search_courses($r,$type,0, - \%filter,$numtitles); + \%filter,$numtitles,undef, + undef,undef,\@codetitles); &Apache::lonpickcourse::display_matched_courses($r,$type,0,$action,undef,undef,undef, %courses); return; @@ -223,8 +226,9 @@ sub print_modification_menu { $categorytitle = 'View/Modify Course Settings'; $setquota_text = &mt('Total disk space allocated for storage of portfolio files in all groups in a course.'); $setparams_text = 'View/Modify course owner, institutional code, and default authentication'; - $cat_text = 'View/Modify catalog settings for course'; + $cat_text = 'View/Modify catalog settings for course'; } + my $anon_text = 'Responder threshold required to display anonymous survey submissions'; my %domconf = &Apache::lonnet::get_dom('configuration',['coursecategories'],$dom); my @additional_params = &catalog_settable($domconf{'coursecategories'},$type); @@ -253,6 +257,14 @@ sub print_modification_menu { linktitle => '' }, { + linktext => 'View/Modify responders threshold for anonymous survey submissions display', + url => &phaseurl('setanon'), + permission => 1, + #help => '', + icon => 'anonsurveythreshold.png', + linktitle => '' + }, + { linktext => $cat_text, url => &phaseurl('catsettings'), permission => (@additional_params > 0), @@ -289,7 +301,8 @@ sub print_modification_menu { $menu_html .= '<li>'.&mt('Course owner (permitted to assign Course Coordinator roles in the course).').'</li>'. '<li>'.&mt("Institutional code and default authentication (both required for auto-enrollment of students from institutional datafeeds).").'</li>'; } - $menu_html .= '<li>'.$setquota_text.'</li>'."\n"; + $menu_html .= '<li>'.$setquota_text.'</li>'. + '<li>'.$anon_text.'</li>'."\n"; foreach my $item (@additional_params) { if ($type eq 'Community') { if ($item eq 'togglecats') { @@ -406,11 +419,11 @@ sub print_setquota { my $hidden_elements = &hidden_form_elements(); my $helpitem = &Apache::loncommon::help_open_topic('Modify_Course_Quota'); $r->print(<<ENDDOCUMENT); -<form action="/adm/modifycourse" method="post" name="setquota"> +<form action="/adm/modifycourse" method="post" name="setquota" onsubmit="return verify_quota();"> <h3>$lt{'cquo'} <span class="LC_nobreak">$cdesc</span></h3> <p> $helpitem $lt{'gpqu'}: <input type="text" size="4" name="coursequota" value="$coursequota" /> Mb -<input type="button" onClick="javascript:verify_quota(this.form)" value="$lt{'modi'}" /> +<input type="submit" value="$lt{'modi'}" /> </p> $hidden_elements <a href="javascript:changePage(document.setquota,'menu')">$lt{'back'}</a> @@ -419,6 +432,45 @@ ENDDOCUMENT return; } +sub print_set_anonsurvey_threshold { + my ($r,$cdom,$cnum,$cdesc,$type) = @_; + my %lt = &Apache::lonlocal::texthash( + 'resp' => 'Responder threshold for anonymous survey submissions display:', + 'sufa' => 'Anonymous survey submissions displayed when responders exceeds', + 'modi' => 'Save', + 'back' => 'Pick another action', + ); + my %settings = &Apache::lonnet::get('environment',['internal.anonsurvey_threshold'],$cdom,$cnum); + my $threshold = $settings{'internal.anonsurvey_threshold'}; + if ($threshold eq '') { + my %domconfig = + &Apache::lonnet::get_dom('configuration',['coursedefaults'],$cdom); + if (ref($domconfig{'coursedefaults'}) eq 'HASH') { + $threshold = $domconfig{'coursedefaults'}{'anonsurvey_threshold'}; + if ($threshold eq '') { + $threshold = 10; + } + } else { + $threshold = 10; + } + } + &print_header($r,$type); + my $hidden_elements = &hidden_form_elements(); + my $helpitem = &Apache::loncommon::help_open_topic('Modify_Anonsurvey_Threshold'); + $r->print(<<ENDDOCUMENT); +<form action="/adm/modifycourse" method="post" name="setanon" onsubmit="return verify_anon_threshold();"> +<h3>$lt{'resp'} <span class="LC_nobreak">$cdesc</span></h3> +<p> +$helpitem $lt{'sufa'}: <input type="text" size="4" name="threshold" value="$threshold" /> +<input type="submit" value="$lt{'modi'}" /> +</p> +$hidden_elements +<a href="javascript:changePage(document.setanon,'menu')">$lt{'back'}</a> +</form> +ENDDOCUMENT + return; +} + sub print_catsettings { my ($r,$cdom,$cnum,$cdesc,$type) = @_; &print_header($r,$type); @@ -1064,7 +1116,7 @@ sub modify_quota { } else { if ($putreply eq 'ok') { my %updatedsettings = &Apache::lonnet::get('environment',['internal.coursequota'],$cdom,$cnum); - $r->print(&mt('The disk space allocated for group portfolio files is now: [_1] Mb.',$updatedsettings{'internal.coursequota'})); + $r->print(&mt('The disk space allocated for group portfolio files is now: [_1] Mb.','<b>'.$updatedsettings{'internal.coursequota'}.'</b>')); my $usage = &Apache::longroup::sum_quotas($cdom.'_'.$cnum); if ($usage >= $updatedsettings{'internal.coursequota'}) { my $newoverquota; @@ -1098,6 +1150,62 @@ sub modify_quota { return; } +sub modify_anonsurvey_threshold { + my ($r,$cdom,$cnum,$cdesc,$domdesc,$type) = @_; + &print_header($r,$type); + $r->print('<form action="/adm/modifycourse" method="post" name="processthreshold">'."\n". + '<h3>'.&mt('Responder threshold required for display of anonymous survey submissions:'). + ' <span class="LC_nobreak">'.$cdesc.'</span></h3><br />'); + my %oldsettings = &Apache::lonnet::get('environment',['internal.anonsurvey_threshold'],$cdom,$cnum); + my %domconfig = + &Apache::lonnet::get_dom('configuration',['coursedefaults'],$cdom); + my $defaultthreshold; + if (ref($domconfig{'coursedefaults'}) eq 'HASH') { + $defaultthreshold = $domconfig{'coursedefaults'}{'anonsurvey_threshold'}; + if ($defaultthreshold eq '') { + $defaultthreshold = 10; + } + } else { + $defaultthreshold = 10; + } + if ($env{'form.threshold'} eq '') { + $r->print(&mt('The proposed responder threshold for display of anonymous survey submissions was blank, so the threshold is unchanged.')); + } else { + my $newthreshold = $env{'form.threshold'}; + if ($newthreshold =~ /^\s*(\d+)\s*$/) { + $newthreshold = $1; + if ($oldsettings{'internal.anonsurvey_threshold'} eq $env{'form.threshold'}) { + $r->print(&mt('Responder threshold for anonymous survey submissions display remains unchanged: [_1].',$env{'form.threshold'})); + } else { + my %cenv = ( + 'internal.anonsurvey_threshold' => $env{'form.threshold'}, + ); + my $putreply = &Apache::lonnet::put('environment',\%cenv,$cdom, + $cnum); + if (($oldsettings{'internal.anonsurvey_threshold'} eq '') && + ($env{'form.threshold'} == $defaultthreshold)) { + $r->print(&mt('The responder threshold for display of anonymous survey submissions is the default for this domain: [_1].',$defaultthreshold)); + } else { + if ($putreply eq 'ok') { + my %updatedsettings = &Apache::lonnet::get('environment',['internal.anonsurvey_threshold'],$cdom,$cnum); + $r->print(&mt('The responder threshold for display of anonymous survey submissions is now: [_1].','<b>'.$updatedsettings{'internal.anonsurvey_threshold'}.'</b>')); + } else { + $r->print(&mt('An error occurred storing the responder threshold for anonymous submissions display: '). + $putreply); + } + } + } + } else { + $r->print(&mt('The proposed responder threshold for display of anonymous submissions contained invalid characters, so the threshold is unchanged.')); + } + } + $r->print('<p>'. + '<a href="javascript:changePage(document.processthreshold,'."'menu'".')">'. + &mt('Pick another action').'</a>'); + $r->print(&hidden_form_elements().'</form>'); + return; +} + sub modify_catsettings { my ($r,$cdom,$cnum,$cdesc,$domdesc,$type) = @_; &print_header($r,$type); @@ -1261,17 +1369,45 @@ function gochoose(cname,cdom,cdesc) { </script> |; } elsif ($phase eq 'setquota') { - $js .= <<'ENDSCRIPT'; + my $invalid = &mt('The quota you entered contained invalid characters.'); + my $alert = &mt('You must enter a number'); + my $regexp = '/^\s*(\d+\.?\d*|\.\d+)\s*$/'; + $js .= <<"ENDSCRIPT"; <script type="text/javascript"> -function verify_quota(formname) { - var newquota = formname.coursequota.value; - var num_reg = /^\s*(\d+\.?\d*|\.\d+)\s*$/; +function verify_quota() { + var newquota = document.setquota.coursequota.value; + var num_reg = $regexp; if (num_reg.test(newquota)) { - changePage(formname,'processquota'); + changePage(document.setquota,'processquota'); } else { - alert("The quota you entered contained invalid characters.\nYou must enter a number"); + alert("$invalid\\n$alert"); + return false; } - return; + return true; +} +</script> +ENDSCRIPT + } elsif ($phase eq 'setanon') { + my $invalid = &mt('The responder threshold you entered is invalid.'); + my $alert = &mt('You must enter a positive integer.'); + my $regexp = ' /^\s*\d+\s*$/'; + $js .= <<"ENDSCRIPT"; +<script type="text/javascript"> +function verify_anon_threshold() { + var newthreshold = document.setanon.threshold.value; + var num_reg = $regexp; + if (num_reg.test(newthreshold)) { + if (newthreshold > 0) { + changePage(document.setanon,'processthreshold'); + } else { + alert("$invalid\\n$alert"); + return false; + } + } else { + alert("$invalid\\n$alert"); + return false; + } + return true; } </script> ENDSCRIPT @@ -1368,7 +1504,8 @@ sub hidden_form_elements { my $hidden_elements = &Apache::lonhtmlcommon::echo_form_input(['gosearch','updater','coursecode', 'prevphase','numlocalcc','courseowner','login','coursequota','intarg', - 'locarg','krbarg','krbver','counter','hidefromcat','usecategory'])."\n". + 'locarg','krbarg','krbver','counter','hidefromcat','usecategory', + 'threshold'])."\n". '<input type="hidden" name="prevphase" value="'.$env{'form.phase'}.'" />'; return $hidden_elements; } @@ -1456,7 +1593,21 @@ sub handler { ({href=>"javascript:changePage(document.$phase,'$phase')", text=>"Result"}); &modify_quota($r,$cdom,$cnum,$cdesc,$domdesc,$type); - } elsif ($phase eq 'viewparms') { + } elsif ($phase eq 'setanon') { + &Apache::lonhtmlcommon::add_breadcrumb + ({href=>"javascript:changePage(document.$phase,'$phase')", + text=>"Threshold for anonymous submissions display"}); + &print_set_anonsurvey_threshold($r,$cdom,$cnum,$cdesc,$type); + + } elsif ($phase eq 'processthreshold') { + &Apache::lonhtmlcommon::add_breadcrumb + ({href=>"javascript:changePage(document.$phase,'setanon')", + text=>"Threshold for anonymous submissions display"}); + &Apache::lonhtmlcommon::add_breadcrumb + ({href=>"javascript:changePage(document.$phase,'$phase')", + text=>"Result"}); + &modify_anonsurvey_threshold($r,$cdom,$cnum,$cdesc,$domdesc,$type); + } elsif ($phase eq 'viewparms') { &Apache::lonhtmlcommon::add_breadcrumb ({href=>"javascript:changePage(document.$phase,'viewparms')", text=>"Display settings"});