--- loncom/interface/lonconfigsettings.pm 2010/01/08 00:52:06 1.10 +++ loncom/interface/lonconfigsettings.pm 2016/08/04 17:34:35 1.21.4.8 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler to set domain-wide configuration settings # -# $Id: lonconfigsettings.pm,v 1.10 2010/01/08 00:52:06 faziophi Exp $ +# $Id: lonconfigsettings.pm,v 1.21.4.8 2016/08/04 17:34:35 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -35,15 +35,20 @@ use Apache::lonnet; use Apache::loncommon(); use Apache::lonhtmlcommon(); use Apache::lonlocal; +use Apache::courseclassifier(); +use LONCAPA qw(:DEFAULT :match); sub print_header { - my ($r,$phase,$context,$jscript) = @_; - my ($pagetitle,$brcrumtitle,$action,$call_category_check); + my ($r,$phase,$context,$jscript,$container) = @_; + my ($pagetitle,$brcrumtitle,$action,$call_category_check,$instcode_check, + $crstype,@actions,@code_order); + if ($phase eq 'display') { + @actions = &Apache::loncommon::get_env_multiple('form.actions'); + } if ($context eq 'domain') { - ($pagetitle, $brcrumtitle) = ('View/Modify Domain Settings','Domain Settings'); + ($pagetitle, $brcrumtitle) = ('View/Modify Domain Settings','View/Modify Domain Settings'); $action = '/adm/domainprefs'; if ($phase eq 'display') { - my @actions = &Apache::loncommon::get_env_multiple('form.actions'); if (grep(/^coursecategories$/,@actions)) { $call_category_check = qq| if (formname == document.display) { @@ -55,14 +60,65 @@ sub print_header { } } } else { - if (&Apache::loncommon::course_type() eq 'Community') { + $crstype = &Apache::loncommon::course_type(); + if ($crstype eq 'Community') { ($pagetitle,$brcrumtitle) = ('Community Configuration','Community Configuration'); } else { ($pagetitle,$brcrumtitle) = ('Course Configuration','Course Configuration'); } $action = '/adm/courseprefs'; + if ($phase eq 'display') { + if (grep(/^courseinfo$/,@actions)) { + my %codedefaults; + &Apache::lonnet::auto_instcode_defaults($env{'request.role.domain'},\%codedefaults, + \@code_order); + if (@code_order) { + my $noinstcodestr = &mt('You indicated cloning based on category, but did not select any categories.'); + &js_escape(\$noinstcodestr); + $instcode_check = <<"ENDSCRIPT"; + if (formname == document.display) { + if (formname.cloners_instcode.length) { + for (var j=0; j 'checkbox',numcols => 'radio',})."\n". - &javascript_set_colnums(); + &Apache::lonhtmlcommon::set_form_elements({actions => 'checkbox'})."\n"; } elsif ($phase eq 'display') { + $js .= &Apache::lonhtmlcommon::color_picker(); $js .= &color_pick_js()."\n"; } $js .= &Apache::loncommon::viewport_size_js().' @@ -114,14 +171,28 @@ $jscript my $additem; if ($phase eq 'pickactions') { my %loaditems = ( - 'onload' => "javascript:getViewportDims(document.$phase.width,document.$phase.height);setDisplayColumns();setFormElements(document.pickactions);", - ); - $additem = {'add_entries' => \%loaditems,}; - } else { - my %loaditems = ( - 'onload' => "javascript:getViewportDims(document.$phase.width,document.$phase.height);", + 'onload' => "setFormElements(document.pickactions);", ); $additem = {'add_entries' => \%loaditems,}; + } elsif ($phase eq 'display') { + if ($context eq 'domain') { + if (grep(/^coursedefaults$/,@actions)) { + my %loaditems = ( + ' onload' => "toggleDisplay(document.display,'cloneinstcode');". + "toggleDisplay(document.display,'credits');". + "toggleDisplay(document.display,'studentsubmission');", + ); + $additem = {'add_entries' => \%loaditems,}; + } + } elsif ($context eq 'course') { + if (grep(/^courseinfo$/,@actions)) { + if (@code_order) { + $additem = { + add_entries => {'onload' => "courseSet('','load');toggleCloners(document.display.cloners_instcode);"}, + }; + } + } + } } $r->print(&Apache::loncommon::start_page($pagetitle,$js,$additem)); $r->print(&Apache::lonhtmlcommon::breadcrumbs($brcrumtitle)); @@ -138,27 +209,24 @@ $jscript } sub print_footer { - my ($r,$phase,$newphase,$button_text,$actions) = @_; + my ($r,$phase,$newphase,$button_text,$actions,$container) = @_; $button_text = &mt($button_text); - $r->print(''. - ''. - ''); + $r->print(''); if (defined($env{'form.origin'})) { $r->print(''."\n"); } if (($phase eq 'display') || ($phase eq 'process')) { if (ref($actions) eq 'ARRAY') { foreach my $item (@{$actions}) { - $r->print('')."\n"; + $r->print(''."\n"); } } - $r->print(''); } my $dest='"javascript:changePage(document.'.$phase.','."'$newphase'".')"'; if ($phase eq 'process') { - $r->print('

'.$button_text.'

'); + $r->print( + &Apache::lonhtmlcommon::actionbox( + [''.$button_text.''])); } else { my $onclick; if ($phase eq 'display') { @@ -170,13 +238,14 @@ sub print_footer { $button_text.'" onclick='.$onclick.' />

'); } if ($phase eq 'process') { - $r->print(''.&Apache::loncommon::end_page()); + $r->print(''); + $r->print(&Apache::loncommon::end_page()); } return; } sub make_changes { - my ($r,$dom,$phase,$context,$prefs_order,$prefs,$values,$confname,$roles,$allitems) = @_; + my ($r,$dom,$phase,$context,$prefs_order,$prefs,$values,$confname,$roles,$allitems,$container) = @_; my %brcrumtext = &get_crumb_text(); my @actions = &Apache::loncommon::get_env_multiple('form.actions'); my ($numchanged,%changes,%disallowed); @@ -185,8 +254,8 @@ sub make_changes { text=>$brcrumtext{$context}}, {href=>"javascript:changePage(document.$phase,'$phase')", text=>"Updated"}); - &print_header($r,$phase,$context); - my $crstype; + &print_header($r,$phase,$context,undef,$container); + my ($crstype,%lastact); if ($context eq 'course') { $crstype = &Apache::loncommon::course_type(); } @@ -197,7 +266,7 @@ sub make_changes { if ($context eq 'domain') { $r->print('

'.&mt($prefs->{$item}{'text'}).'

'. &Apache::domainprefs::process_changes($r,$dom, - $confname,$item,$roles,$values)); + $confname,$item,$roles,$values,\%lastact)); } else { $changes{$item} = {}; &Apache::courseprefs::process_changes($dom,$item,$values, @@ -212,13 +281,14 @@ sub make_changes { } if ($context eq 'course') { if ($numchanged) { - $r->print(&Apache::courseprefs::store_changes($dom,$confname,$prefs_order,\@actions, - $prefs,$values,\%changes,$crstype)); + my $message = &Apache::courseprefs::store_changes($dom,$confname,$prefs_order,\@actions, + $prefs,$values,\%changes,$crstype); + $r->print(&Apache::loncommon::confirmwrapper($message)); } else { if ($crstype eq 'Community') { - $r->print(&mt("No changes made to community configuration.")); + $r->print(&Apache::loncommon::confirmwrapper(&mt("No changes made to community configuration."))); } else { - $r->print(&mt("No changes made to course configuration.")); + $r->print(&Apache::loncommon::confirmwrapper(&mt("No changes made to course configuration."))); } } if (keys(%disallowed) > 0) { @@ -239,31 +309,71 @@ sub make_changes { if ($context eq 'course') { $footer_text = 'Back to display/edit settings'; } - &print_footer($r,$phase,'display',$footer_text,\@actions); + &print_footer($r,$phase,'display',$footer_text,\@actions,$container); $r->print('

'); + return \%lastact; } sub display_settings { my ($r,$dom,$phase,$context,$prefs_order,$prefs,$values,$confname,$jscript, - $allitems,$crstype) = @_; + $allitems,$crstype,$container) = @_; my %brcrumtext = &get_crumb_text(); my @actions = &Apache::loncommon::get_env_multiple('form.actions'); &Apache::lonhtmlcommon::add_breadcrumb ({href=>"javascript:changePage(document.$phase,'display')", text=>"Display/Edit Settings"}); - &print_header($r,$phase,$context,$jscript); + my $instcode; + if (ref($values) eq 'HASH') { + $instcode = $values->{'internal.coursecode'}; + } + &print_header($r,$phase,$context,$jscript,$container,$instcode); + my $divwidth = 900; if ((ref($prefs_order) eq 'ARRAY') && (ref($prefs) eq 'HASH') && (ref($values) eq 'HASH')) { if (@actions > 0) { my $rowsum = 0; my (%output,%rowtotal,@items); - my $halfway = @actions/2; foreach my $item (@{$prefs_order}) { if (grep(/^\Q$item\E$/,@actions)) { push(@items,$item); if ($context eq 'domain') { + my $settings; + if (ref($values) eq 'HASH') { + $settings = $values->{$item}; + } + if ($item eq 'usersessions') { + $r->print(''."\n"); + } elsif ($item eq 'selfcreation') { + if (ref($values) eq 'HASH') { + $settings = $values->{'usercreation'}; + } + } elsif ($item eq 'defaults') { + if (ref($values->{'inststatus'}) eq 'HASH') { + if (ref($values->{'defaults'}) eq 'HASH') { + $settings = {%{$values->{'inststatus'}},%{$values->{'defaults'}}}; + } else { + $settings = $values->{'inststatus'}; + } + } else { + my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom); + my $inststatus = { + inststatustypes => $usertypes, + inststatusorder => $types, + inststatusguest => [], + }; + if (ref($values->{defaults}) eq 'HASH') { + $settings = {%{$inststatus},%{$values->{'defaults'}}}; + } else { + $settings = $inststatus; + } + } + } ($output{$item},$rowtotal{$item}) = &Apache::domainprefs::print_config_box($r,$dom,$confname, - $phase,$item,$prefs->{$item},$values->{$item}); + $phase,$item,$prefs->{$item},$settings); } else { ($output{$item},$rowtotal{$item}) = &Apache::courseprefs::print_config_box($r,$dom,$phase, @@ -272,126 +382,54 @@ sub display_settings { $rowsum += $rowtotal{$item}; } } - my $colend; - my $halfway = $rowsum/2; - my $aggregate = 0; - my $sumleft = 0; - my $sumright = 0; - my $crossover; + $r->print('
'); for (my $i=0; $i<@items; $i++) { - $aggregate += $rowtotal{$items[$i]}; - if ($aggregate > $halfway) { - $crossover = $i; - last; - } - } - for (my $i=0; $i<$crossover; $i++) { - $sumleft += $rowtotal{$items[$i]}; - } - for (my $i=$crossover+1; $i<@items; $i++) { - $sumright += $rowtotal{$items[$i]}; - } - if ((@items > 1) && ($env{'form.numcols'} == 2)) { - my $sumdiff = $sumright - $sumleft; - if ($sumdiff > 0) { - $colend = $crossover + 1; - } else { - $colend = $crossover; - } - } else { - $colend = @items; - } - if ($context ne 'course') { - $r->print('

'); - } - else { - $r->print('
'); - } - for (my $i=0; $i<$colend; $i++) { $r->print($output{$items[$i]}); } - if ($context ne 'course') { - $r->print('
'); - } - if ($colend < @items) { - for (my $i=$colend; $i<@items; $i++) { - $r->print($output{$items[$i]}); - } - } - if ($context ne 'course') { - $r->print('

'); - } - else { - $r->print('
'); - } - $r->print(&print_footer($r,$phase,'process','Save Changes',\@actions)); + $r->print(''); + $r->print(&print_footer($r,$phase,'process','Save Changes',\@actions,$container)); } else { $r->print(''. - ''."\n". - ''.&mt('No settings chosen'). - ''); + ''.&mt('No settings chosen'). + ''); } $r->print(''); } - if ($context eq 'course') { - $r->print(' - -'); - } $r->print(&Apache::loncommon::end_page()); return; } sub display_choices { - my ($r,$phase,$context,$prefs_order,$prefs) = @_; + my ($r,$phase,$context,$prefs_order,$prefs,$container) = @_; if ($phase eq '') { $phase = 'pickactions'; } my %helphash; - &print_header($r,$phase,$context); - $r->print('

'.&mt('Settings to display/modify').'

'); + &print_header($r,$phase,$context,undef,$container); $r->print(''."\n".'

'."\n"); + $r->print('

'.&mt('Settings to display/modify').'

'. + '
'.(' 'x2). '

'); - my ($numitems,$midpoint,$seconddiv,$count); + 'onclick="javascript:uncheckAll(document.pickactions.actions)" />'. + "\n". + '
'); + my ($numitems,$maxincol,$firstthird,$secondthird,$seconddiv,$thirddiv,$count); if (ref($prefs_order) eq 'ARRAY') { $numitems = @{$prefs_order}; } - $midpoint = int($numitems/2); - if ($numitems%2) { - $midpoint ++; + my $numcols = 3; + $maxincol = int($numitems/$numcols); + if ($numitems%$numcols) { + $maxincol ++; } + $firstthird = $maxincol; + $secondthird = $firstthird + $maxincol; $count = 0; if ((ref($prefs_order) eq 'ARRAY') && (ref($prefs) eq 'HASH')) { foreach my $item (@{$prefs_order}) { @@ -400,49 +438,31 @@ sub display_choices { ''); $count ++; - if ((!$seconddiv) && ($count >= $midpoint)) { + if ((!$seconddiv) && ($count >= $firstthird)) { $r->print('
'."\n".'
'."\n"); $seconddiv = 1; } + if ((!$thirddiv) && ($count >= $secondthird)) { + $r->print('
'."\n".'
'."\n"); + $thirddiv = 1; + } } - $r->print('

'. - &mt('Display options').'

'."\n". - '

'.&mt('Display using: ')."\n". - '  

'); + $r->print('

'); } - $r->print(&print_footer($r,$phase,'display','Go')); + $r->print(&print_footer($r,$phase,'display','Display',undef,$container)); $r->print(''); $r->print(&Apache::loncommon::end_page()); return; } -sub javascript_set_colnums { - return < 1100) { - document.pickactions.numcols[1].checked = true; - } else { - document.pickactions.numcols[0].checked = true; - } -} -END -} - sub color_pick_js { my $pjump_def = &Apache::lonhtmlcommon::pjump_javascript_definition(); my $output = <<"ENDCOL"; - function pclose() { - parmwin=window.open("/adm/rat/empty.html","LONCAPAparms","height=350,width=350,scrollbars=no,menubar=no"); - parmwin.close(); - } $pjump_def function psub() { - pclose(); + modalWindow.close(); if (document.parmform.pres_marker.value!='') { if (document.parmform.pres_type.value!='') { eval('document.display.'+ 500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.