Annotation of loncom/interface/lonconfigsettings.pm, revision 1.34

1.1       raeburn     1: # The LearningOnline Network with CAPA
                      2: # Handler to set domain-wide configuration settings
                      3: #
1.34    ! raeburn     4: # $Id: lonconfigsettings.pm,v 1.33 2016/10/11 22:58:55 raeburn Exp $
1.1       raeburn     5: #
                      6: # Copyright Michigan State University Board of Trustees
                      7: #
                      8: # This file is part of the LearningOnline Network with CAPA (LON-CAPA).
                      9: #
                     10: # LON-CAPA is free software; you can redistribute it and/or modify
                     11: # it under the terms of the GNU General Public License as published by
                     12: # the Free Software Foundation; either version 2 of the License, or
                     13: # (at your option) any later version.
                     14: #
                     15: # LON-CAPA is distributed in the hope that it will be useful,
                     16: # but WITHOUT ANY WARRANTY; without even the implied warranty of
                     17: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     18: # GNU General Public License for more details.
                     19: #
                     20: # You should have received a copy of the GNU General Public License
                     21: # along with LON-CAPA; if not, write to the Free Software
                     22: # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA#
                     23: # /home/httpd/html/adm/gpl.txt
                     24: #
                     25: # http://www.lon-capa.org/
                     26: #
                     27: #
                     28: ###############################################################
                     29: ##############################################################
                     30: 
                     31: package Apache::lonconfigsettings;
                     32: 
                     33: use strict;
                     34: use Apache::lonnet;
                     35: use Apache::loncommon();
                     36: use Apache::lonhtmlcommon();
                     37: use Apache::lonlocal;
1.20      www        38: use Apache::lonparmset();
1.30      raeburn    39: use Apache::courseclassifier();
                     40: use LONCAPA qw(:DEFAULT :match); 
1.1       raeburn    41: 
                     42: sub print_header {
1.34    ! raeburn    43:     my ($r,$phase,$context,$jscript,$container,$instcode,$dom) = @_;
1.30      raeburn    44:     my ($pagetitle,$brcrumtitle,$action,$call_category_check,$instcode_check,
                     45:         $crstype,@actions,@code_order);
                     46:     if ($phase eq 'display') {
                     47:         @actions = &Apache::loncommon::get_env_multiple('form.actions');
                     48:     }
1.1       raeburn    49:     if ($context eq 'domain') {
1.12      raeburn    50:         ($pagetitle, $brcrumtitle) = ('View/Modify Domain Settings','View/Modify Domain Settings');
1.1       raeburn    51:         $action = '/adm/domainprefs';
1.8       raeburn    52:         if ($phase eq 'display') {
                     53:             if (grep(/^coursecategories$/,@actions)) {
                     54:                 $call_category_check = qq|
                     55:     if (formname == document.display) {
                     56:         if (!categoryCheck(formname)) {
                     57:             return;
                     58:         }
                     59:     }
                     60: |;
                     61:             }
                     62:         }
1.1       raeburn    63:     } else {
1.24      raeburn    64:         $crstype = &Apache::loncommon::course_type();
                     65:         if ($crstype eq 'Community') {
1.7       raeburn    66:             ($pagetitle,$brcrumtitle) = ('Community Configuration','Community Configuration');
                     67:         } else {
                     68:             ($pagetitle,$brcrumtitle) = ('Course Configuration','Course Configuration');
                     69:         }
1.1       raeburn    70:         $action = '/adm/courseprefs';
1.30      raeburn    71:         if ($phase eq 'display') {
                     72:             if (grep(/^courseinfo$/,@actions)) {
                     73:                 my %codedefaults;
                     74:                 &Apache::lonnet::auto_instcode_defaults($env{'request.role.domain'},\%codedefaults,
                     75:                                                         \@code_order);
                     76:                 if (@code_order) {
                     77:                    my $noinstcodestr = &mt('You indicated cloning based on category, but did not select any categories.');
1.31      damieng    78:                    &js_escape(\$noinstcodestr);
1.30      raeburn    79:                    $instcode_check = <<"ENDSCRIPT";
                     80:     if (formname == document.display) {
                     81:         if (formname.cloners_instcode.length) {
                     82:             for (var j=0; j<formname.cloners_instcode.length; j++) {
                     83:                 if (formname.cloners_instcode[j].checked) {
                     84:                     if (formname.cloners_instcode[j].value == 1) {
                     85:                         var codes;
                     86:                         if (document.getElementsByClassName) {
                     87:                             codes = document.getElementsByClassName('LC_cloners_instcodes');
                     88:                         } else {
                     89:                             codes = getElementsByClassName(document.body,'LC_cloners_instcodes');
                     90:                         }
                     91:                         if (codes.length) {
                     92:                             var gotcode = 0;
                     93:                             for (var i=0; i<codes.length; i++) {
                     94:                                 if (codes[i].selectedIndex != 0) {
                     95:                                      gotcode = 1; 
                     96:                                      break;
                     97:                                 }
                     98:                             }
                     99:                             if (!gotcode) {
                    100:                                 for (var k=0; k<formname.cloners_instcode.length; k++) {
                    101:                                     if (formname.cloners_instcode[k].value == 0) {
                    102:                                         formname.cloners_instcode[k].checked = true;
                    103:                                     }
                    104:                                 }
                    105:                                 toggleCloners(document.display.cloners_instcode);
                    106:                                 alert('$noinstcodestr');
                    107:                                 return false;
                    108:                             }
                    109:                         }
                    110:                     }
                    111:                 }
                    112:             }
                    113:         }
                    114:     }
                    115: 
                    116: ENDSCRIPT
                    117:                 }
                    118:             }
                    119:         }
1.1       raeburn   120:     }
                    121:     my $alert = &mt('You must select at least one functionality type to display.');
1.31      damieng   122:     &js_escape(\$alert);
1.1       raeburn   123:     my $js = '
                    124: <script type="text/javascript">
1.6       raeburn   125: // <![CDATA[
                    126: 
1.1       raeburn   127: function changePage(formname,newphase) {
                    128:     formname.phase.value = newphase;
                    129:     numchecked = 0;
                    130:     if (formname == document.pickactions) {
                    131:         if (formname.actions.length > 0) {
                    132:             for (var i = 0; i<formname.actions.length; i++) {
                    133:                 if (formname.actions[i].checked) {
                    134:                     numchecked ++;
                    135:                 }
                    136:             }
                    137:         } else {
                    138:             if (formname.actions.checked) {
                    139:                 numchecked ++;
                    140:             }
                    141:         }
                    142:         if (numchecked > 0) {
                    143:             formname.submit();
                    144:         } else {
                    145:             alert("'.$alert.'");
                    146:             return;
                    147:         }
                    148:     }
1.30      raeburn   149:     '.$instcode_check.$call_category_check.'
1.1       raeburn   150:     formname.submit();
                    151: }'."\n";
                    152:     if ($phase eq 'pickactions') {
1.22      foxr      153: 	$js .= &Apache::lonhtmlcommon::color_picker();
1.1       raeburn   154:         $js .=
1.12      raeburn   155:             &Apache::lonhtmlcommon::set_form_elements({actions => 'checkbox'})."\n";
1.1       raeburn   156:     } elsif ($phase eq 'display') {
1.22      foxr      157: 	$js .= &Apache::lonhtmlcommon::color_picker();
1.1       raeburn   158:         $js .= &color_pick_js()."\n";
                    159:     }
                    160:     $js .= &Apache::loncommon::viewport_size_js().'
1.6       raeburn   161: 
                    162: // ]]>
1.1       raeburn   163: </script>
                    164: ';
1.2       raeburn   165:     if ($jscript) {
                    166:         $js .= "
                    167: 
                    168: $jscript
                    169: 
                    170: ";
                    171:     }
1.1       raeburn   172:     my $additem;
                    173:     if ($phase eq 'pickactions') {
                    174:         my %loaditems = (
1.12      raeburn   175:                     'onload' => "setFormElements(document.pickactions);",
1.1       raeburn   176:                         );
                    177:         $additem = {'add_entries' => \%loaditems,};
1.30      raeburn   178:     } elsif ($phase eq 'display') {
                    179:         if ($context eq 'domain') {
1.34    ! raeburn   180:             my $onload;
1.30      raeburn   181:             if (grep(/^coursedefaults$/,@actions)) {
1.34    ! raeburn   182:                 $onload = "toggleDisplay(document.display,'cloneinstcode');".
        !           183:                           "toggleDisplay(document.display,'credits');".
        !           184:                           "toggleDisplay(document.display,'studentsubmission');";
        !           185:             }
        !           186:             if (grep(/^selfcreation$/,@actions)) {
        !           187:                 my $prefix = 'cancreate_emailverified';
        !           188:                 my %domdefaults = &Apache::lonnet::get_domain_defaults($dom);
        !           189:                 if (ref($domdefaults{'inststatusguest'}) eq 'ARRAY') {
        !           190:                     my $order = $domdefaults{'inststatusguest'};
        !           191:                     if (ref($order) eq 'ARRAY') {
        !           192:                         foreach my $type (@{$order}) {
        !           193:                             if (($type ne '') && ($type ne 'default')) {
        !           194:                                 my $name = $prefix.'_'.$type;
        !           195:                                 $onload .= "toggleDisplay(document.display,'$name');";
        !           196:                             }
        !           197:                         }
        !           198:                     }
        !           199:                 }
        !           200:                 $onload .= "toggleDisplay(document.display,'$prefix');".
        !           201:                            "toggleDisplay(document.display,'emailoptions');".
        !           202:             }
        !           203:             if ($onload) {
1.30      raeburn   204:                 my %loaditems = (
1.34    ! raeburn   205:                                   'onload' => $onload;
1.30      raeburn   206:                                 );
                    207:                 $additem = {'add_entries' => \%loaditems,};
                    208:             }
                    209:         } elsif ($context eq 'course') {
                    210:             if (grep(/^courseinfo$/,@actions)) {
                    211:                 if (@code_order) { 
                    212:                     $additem = {
                    213:                                    add_entries => {'onload' => "courseSet('','load');toggleCloners(document.display.cloners_instcode);"},
                    214:                                };
                    215:                 }
                    216:             }
                    217:         }
1.1       raeburn   218:     }
                    219:     $r->print(&Apache::loncommon::start_page($pagetitle,$js,$additem));
                    220:     $r->print(&Apache::lonhtmlcommon::breadcrumbs($brcrumtitle));
                    221:     $r->print('
                    222: <form name="parmform" action="">
                    223: <input type="hidden" name="pres_marker" />
                    224: <input type="hidden" name="pres_type" />
                    225: <input type="hidden" name="pres_value" />
                    226: </form>
                    227: ');
1.20      www       228:     if ($container) {
1.24      raeburn   229:        &Apache::lonparmset::startSettingsScreen($r,$container,$crstype);
1.20      www       230:     }
1.1       raeburn   231:     $r->print('<form method="post" name="'.$phase.'" action="'.$action.'"'.
                    232:               ' enctype="multipart/form-data">');
                    233:     return;
                    234: }
                    235: 
                    236: sub print_footer {
1.33      raeburn   237:     my ($r,$phase,$newphase,$button_text,$actions,$container,$parm_permission) = @_;
1.1       raeburn   238:     $button_text = &mt($button_text);
1.12      raeburn   239:     $r->print('<input type="hidden" name="phase" value="" />');
1.5       raeburn   240:     if (defined($env{'form.origin'})) {
                    241:         $r->print('<input type="hidden" name="origin" value="'.$env{'form.origin'}.'" />'."\n");
                    242:     }
1.1       raeburn   243:     if (($phase eq 'display') || ($phase eq 'process')) {
                    244:         if (ref($actions) eq 'ARRAY') {
                    245:             foreach my $item (@{$actions}) {
1.16      raeburn   246:                 $r->print('<input type="hidden" name="actions" value="'.$item.'" />'."\n");
1.1       raeburn   247:             }
                    248:         }
                    249:     }
                    250:     my $dest='"javascript:changePage(document.'.$phase.','."'$newphase'".')"';
                    251:     if ($phase eq 'process') {
1.23      bisitz    252:         $r->print(
                    253:             &Apache::lonhtmlcommon::actionbox(
                    254:                 ['<a href='.$dest.'>'.$button_text.'</a>']));
1.1       raeburn   255:     } else {
                    256:         my $onclick;
                    257:         if ($phase eq 'display') {
                    258:             $onclick = '"javascript:changePage(document.'.$phase.','."'$newphase'".')"';
                    259:         } else {
                    260:             $onclick = '"javascript:changePage(document.'.$phase.','."'$newphase'".')"';
                    261:         }
1.33      raeburn   262:         my $showbutton = 1;
                    263:         if (ref($parm_permission) eq 'HASH') {
                    264:             unless (($parm_permission->{'process'}) || ($newphase eq 'display')) {
                    265:                 $showbutton = 0;
                    266:             }
                    267:         }
                    268:         if ($showbutton) {
                    269:             $r->print('<p><input type="button" name="store" value="'.
                    270:                       $button_text.'" onclick='.$onclick.' /></p>');
                    271:         } 
1.1       raeburn   272:     }
                    273:     if ($phase eq 'process') {
1.20      www       274:         $r->print('</form>');
                    275:         if ($container) {
                    276:            &Apache::lonparmset::endSettingsScreen($r);
                    277:         }
                    278:         $r->print(&Apache::loncommon::end_page());
1.1       raeburn   279:     }
                    280:     return;
                    281: }
                    282: 
                    283: sub make_changes {
1.33      raeburn   284:     my ($r,$dom,$phase,$context,$prefs_order,$prefs,$values,$confname,$roles,
                    285:         $allitems,$container,$parm_permission) = @_;
1.1       raeburn   286:     my %brcrumtext = &get_crumb_text();
                    287:     my @actions = &Apache::loncommon::get_env_multiple('form.actions');
1.4       raeburn   288:     my ($numchanged,%changes,%disallowed);
1.1       raeburn   289:     &Apache::lonhtmlcommon::add_breadcrumb
                    290:       ({href=>"javascript:changePage(document.$phase,'display')",
                    291:         text=>$brcrumtext{$context}},
                    292:        {href=>"javascript:changePage(document.$phase,'$phase')",
                    293:         text=>"Updated"});
1.20      www       294:     &print_header($r,$phase,$context,undef,$container);
1.27      raeburn   295:     my ($crstype,%lastact);
1.7       raeburn   296:     if ($context eq 'course') {
                    297:         $crstype = &Apache::loncommon::course_type();
                    298:     }
1.1       raeburn   299:     if ((ref($prefs_order) eq 'ARRAY') && (ref($prefs) eq 'HASH') && 
                    300:         (ref($prefs) eq 'HASH')) {
                    301:         foreach my $item (@{$prefs_order}) {
                    302:             if (grep(/^\Q$item\E$/,@actions)) {
                    303:                 if ($context eq 'domain') {
1.4       raeburn   304:                     $r->print('<h3>'.&mt($prefs->{$item}{'text'}).'</h3>'.
                    305:                               &Apache::domainprefs::process_changes($r,$dom,
1.27      raeburn   306:                                           $confname,$item,$roles,$values,\%lastact));
1.1       raeburn   307:                 } else {
1.4       raeburn   308:                     $changes{$item} = {};
                    309:                     &Apache::courseprefs::process_changes($dom,$item,$values,
                    310:                                                           $prefs->{$item},$changes{$item},
1.7       raeburn   311:                                                           $allitems,\%disallowed,$crstype);
1.4       raeburn   312:                     if (keys(%{$changes{$item}}) > 0) {
                    313:                         $numchanged ++;
                    314:                     }
1.1       raeburn   315:                 }
                    316:             }
                    317:         }
                    318:     }
1.4       raeburn   319:     if ($context eq 'course') {
                    320:         if ($numchanged) {
1.11      wenzelju  321:             my $message = &Apache::courseprefs::store_changes($dom,$confname,$prefs_order,\@actions,
                    322:                                                           $prefs,$values,\%changes,$crstype);
                    323:             $r->print(&Apache::loncommon::confirmwrapper($message));
1.4       raeburn   324:         } else {
1.7       raeburn   325:             if ($crstype eq 'Community') {
1.11      wenzelju  326:                 $r->print(&Apache::loncommon::confirmwrapper(&mt("No changes made to community configuration.")));
1.7       raeburn   327:             } else {
1.11      wenzelju  328:                 $r->print(&Apache::loncommon::confirmwrapper(&mt("No changes made to course configuration.")));
1.7       raeburn   329:             }
1.4       raeburn   330:         }
                    331:         if (keys(%disallowed) > 0) {
                    332:             $r->print('<p>');
                    333:             foreach my $item ('cloners','rolenames','feedback','discussion','localization') {
                    334:                 if (ref($disallowed{$item}) eq 'HASH') {
                    335:                     if (keys(%{$disallowed{$item}}) > 0) {
                    336:                         $r->print(&Apache::courseprefs::display_disallowed($item,$disallowed{$item},
1.7       raeburn   337:                                                                            $prefs,$crstype));
1.4       raeburn   338:                     }
                    339:                 }
                    340:             }
                    341:             $r->print('</p>');
                    342:         }
                    343:     }
1.1       raeburn   344:     $r->print('<p>');
1.4       raeburn   345:     my $footer_text = 'Back to configuration display';
                    346:     if ($context eq 'course') {
                    347:         $footer_text = 'Back to display/edit settings'; 
                    348:     }
1.33      raeburn   349:     &print_footer($r,$phase,'display',$footer_text,\@actions,$container,$parm_permission);
1.1       raeburn   350:     $r->print('</p>');
1.27      raeburn   351:     return \%lastact;
1.1       raeburn   352: }
                    353: 
                    354: sub display_settings {
1.3       raeburn   355:     my ($r,$dom,$phase,$context,$prefs_order,$prefs,$values,$confname,$jscript,
1.33      raeburn   356:         $allitems,$crstype,$container,$parm_permission) = @_;
1.1       raeburn   357:     my %brcrumtext = &get_crumb_text();
                    358:     my @actions = &Apache::loncommon::get_env_multiple('form.actions');
                    359:     &Apache::lonhtmlcommon::add_breadcrumb
                    360:         ({href=>"javascript:changePage(document.$phase,'display')",
1.4       raeburn   361:           text=>"Display/Edit Settings"});
1.30      raeburn   362:     my $instcode;
                    363:     if (ref($values) eq 'HASH') {
                    364:         $instcode = $values->{'internal.coursecode'};
                    365:     }
1.34    ! raeburn   366:     &print_header($r,$phase,$context,$jscript,$container,$instcode,$dom);
1.12      raeburn   367:     my $divwidth = 900;
1.1       raeburn   368:     if ((ref($prefs_order) eq 'ARRAY') && (ref($prefs) eq 'HASH') && (ref($values) eq 'HASH')) { 
                    369:         if (@actions > 0) {
                    370:             my $rowsum = 0;
1.32      raeburn   371:             my (%output,%rowtotal,@items,$got_check_uncheck);
1.1       raeburn   372:             foreach my $item (@{$prefs_order}) {
                    373:                 if (grep(/^\Q$item\E$/,@actions)) {
                    374:                     push(@items,$item);
                    375:                     if ($context eq 'domain') {
1.29      raeburn   376:                         my $settings;
                    377:                         if (ref($values) eq 'HASH') { 
                    378:                             $settings = $values->{$item};
                    379:                         }
1.32      raeburn   380:                         if (($item eq 'usersessions') || ($item eq 'ssl')) {
                    381:                             unless ($got_check_uncheck) {
                    382:                                 $r->print('<script type="text/javascript">'."\n".
                    383:                                           '// <![CDATA['."\n".
                    384:                                           &Apache::loncommon::check_uncheck_jscript()."\n".
                    385:                                           '// ]]>'."\n".
                    386:                                           '</script>'."\n");
                    387:                                 $got_check_uncheck = 1;
                    388:                             }
1.28      raeburn   389:                         } elsif ($item eq 'selfcreation') {
1.29      raeburn   390:                             if (ref($values) eq 'HASH') {
                    391:                                 $settings = $values->{'usercreation'};
                    392:                             }
                    393:                         } elsif ($item eq 'defaults') {
                    394:                             if (ref($values->{'inststatus'}) eq 'HASH') {
                    395:                                 if (ref($values->{'defaults'}) eq 'HASH') {
                    396:                                     $settings = {%{$values->{'inststatus'}},%{$values->{'defaults'}}};
                    397:                                 } else {
                    398:                                     $settings = $values->{'inststatus'};
                    399:                                 }
                    400:                             } else {
                    401:                                 my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom);
                    402:                                 my $inststatus = {
                    403:                                                    inststatustypes => $usertypes,
                    404:                                                    inststatusorder => $types,
                    405:                                                    inststatusguest => [], 
                    406:                                                  };
                    407:                                 if (ref($values->{defaults}) eq 'HASH') {
                    408:                                     $settings = {%{$inststatus},%{$values->{'defaults'}}};
                    409:                                 } else {
                    410:                                     $settings = $inststatus;
                    411:                                 }
                    412:                             }
1.15      raeburn   413:                         }
1.1       raeburn   414:                         ($output{$item},$rowtotal{$item}) =
                    415:                             &Apache::domainprefs::print_config_box($r,$dom,$confname,
1.28      raeburn   416:                                 $phase,$item,$prefs->{$item},$settings);
1.1       raeburn   417:                     } else {
                    418:                         ($output{$item},$rowtotal{$item}) =
                    419:                             &Apache::courseprefs::print_config_box($r,$dom,$phase,
1.33      raeburn   420:                                 $item,$prefs->{$item},$values,$allitems,$crstype,$parm_permission);
1.1       raeburn   421:                     }
                    422:                     $rowsum += $rowtotal{$item};
                    423:                 }
                    424:             }
1.12      raeburn   425:             $r->print('<div id="prefs" style="max-width:'.$divwidth.'px;margin: 10px auto 10px auto;">');
1.1       raeburn   426:             for (my $i=0; $i<@items; $i++) {
                    427:                 $r->print($output{$items[$i]});
                    428:             }
1.12      raeburn   429:             $r->print('</div>');
1.33      raeburn   430:             $r->print(&print_footer($r,$phase,'process','Save Changes',\@actions,$container,$parm_permission));
1.1       raeburn   431:         } else {
                    432:             $r->print('<input type="hidden" name="phase" value="" />'.
1.12      raeburn   433:                       '<span class="LC_error">'.&mt('No settings chosen').
                    434:                       '</span>');
1.1       raeburn   435:         }
                    436:         $r->print('</form>');
                    437:     }
1.25      raeburn   438:     if ($container) {
                    439:         &Apache::lonparmset::endSettingsScreen($r);
                    440:     }
1.1       raeburn   441:     $r->print(&Apache::loncommon::end_page());
                    442:     return;
                    443: }
                    444: 
                    445: sub display_choices {
1.33      raeburn   446:     my ($r,$phase,$context,$prefs_order,$prefs,$container,$parm_permission) = @_;
1.1       raeburn   447:     if ($phase eq '') {
                    448:         $phase = 'pickactions';
                    449:     }
                    450:     my %helphash;
1.20      www       451:     &print_header($r,$phase,$context,undef,$container);
1.1       raeburn   452:     $r->print('<script type="text/javascript">'."\n".
1.6       raeburn   453:               '// <![CDATA['."\n".
1.1       raeburn   454:               &Apache::loncommon::check_uncheck_jscript()."\n".
1.6       raeburn   455:               '// ]]>'."\n".
1.12      raeburn   456:               '</script>'."\n");
1.33      raeburn   457:     my $heading = &mt('Settings to display/modify');
                    458:     if (ref($parm_permission) eq 'HASH') {
                    459:         unless ($parm_permission->{'process'}) {
                    460:             $heading = &mt('Settings to display');
                    461:         }
                    462:     }
                    463:     $r->print('<h3>'.$heading.'</h3>'.
1.13      raeburn   464:               '<div><input type="button" value="'.&mt('check all').'" '.
1.1       raeburn   465:               'onclick="javascript:checkAll(document.pickactions.actions)"'.
                    466:               ' />'.('&nbsp;'x2).
                    467:               '<input type="button" value="'.&mt('uncheck all').'" '.
1.12      raeburn   468:               'onclick="javascript:uncheckAll(document.pickactions.actions)" />'.
                    469:               "\n".
1.13      raeburn   470:               '</div><div class="LC_left_float">');
1.12      raeburn   471:     my ($numitems,$maxincol,$firstthird,$secondthird,$seconddiv,$thirddiv,$count);
1.1       raeburn   472:     if (ref($prefs_order) eq 'ARRAY') {
                    473:         $numitems = @{$prefs_order};
                    474:     }
1.12      raeburn   475:     my $numcols = 3;
                    476:     $maxincol = int($numitems/$numcols);
                    477:     if ($numitems%$numcols) {
                    478:         $maxincol ++;
1.1       raeburn   479:     }
1.14      raeburn   480:     $firstthird = $maxincol;
                    481:     $secondthird = $firstthird + $maxincol;
1.1       raeburn   482:     $count = 0;
                    483:     if ((ref($prefs_order) eq 'ARRAY') && (ref($prefs) eq 'HASH')) {
                    484:         foreach my $item (@{$prefs_order}) {
                    485:             $r->print('<h4>'.
                    486:                       &Apache::loncommon::help_open_topic($prefs->{$item}->{'help'}).
                    487:                       '<label><input type="checkbox" name="actions" value="'.$item.
                    488:                       '" />&nbsp;'.&mt($prefs->{$item}->{'text'}).'</label></h4>');
                    489:             $count ++;
1.12      raeburn   490:             if ((!$seconddiv) && ($count >= $firstthird)) {
1.1       raeburn   491:                 $r->print('</div>'."\n".'<div class="LC_left_float">'."\n");
                    492:                 $seconddiv = 1;
                    493:             }
1.12      raeburn   494:             if ((!$thirddiv) && ($count >= $secondthird)) {
                    495:                 $r->print('</div>'."\n".'<div class="LC_left_float">'."\n");
                    496:                 $thirddiv = 1;
1.13      raeburn   497:             }
1.1       raeburn   498:         }
1.12      raeburn   499:         $r->print('</div><br clear="all" />');
1.1       raeburn   500:     }
1.33      raeburn   501:     $r->print(&print_footer($r,$phase,'display','Display',undef,$container,$parm_permission));
1.1       raeburn   502:     $r->print('</form>');
1.25      raeburn   503:     if ($container) {
                    504:         &Apache::lonparmset::endSettingsScreen($r);
                    505:     }
1.1       raeburn   506:     $r->print(&Apache::loncommon::end_page());
                    507:     return;
                    508: }
                    509: 
                    510: sub color_pick_js {
                    511:     my $pjump_def = &Apache::lonhtmlcommon::pjump_javascript_definition();
                    512:     my $output = <<"ENDCOL";
                    513: 
                    514:     $pjump_def
                    515: 
                    516:     function psub() {
1.21      www       517:         modalWindow.close();
1.1       raeburn   518:         if (document.parmform.pres_marker.value!='') {
                    519:             if (document.parmform.pres_type.value!='') {
                    520:                 eval('document.display.'+
                    521:                      document.parmform.pres_marker.value+
                    522:                      '.value=document.parmform.pres_value.value;');
                    523:             }
                    524:         } else {
                    525:             document.parmform.pres_value.value='';
                    526:             document.parmform.pres_marker.value='';
                    527:         }
                    528:     }
                    529: 
                    530:     function get_id (span_id) {
                    531:         if (document.getElementById) {
                    532:             return document.getElementById(span_id);
                    533:         }
                    534:         if (document.all) {
                    535:             return document.all[span_id];
                    536:         }
                    537:         return false;
                    538:     }
                    539: 
                    540:     function colchg_span (span_id_str,new_color_item) {
                    541:         var span_ref = get_id(span_id_str);
                    542:         if (span_ref.style) { span_ref = span_ref.style; }
                    543:         span_ref.background = new_color_item.value;
                    544:         span_ref.backgroundColor = new_color_item.value;
                    545:         span_ref.bgColor = new_color_item.value;
                    546:     }
                    547: 
                    548: ENDCOL
                    549:     return $output;
                    550: }
                    551: 
                    552: sub get_crumb_text {
                    553:     my %brcrumbtext = (
                    554:                        domain => 'Domain Settings',
1.4       raeburn   555:                        course => 'Display/Edit Settings',
1.1       raeburn   556:                      );
                    557:     return %brcrumbtext;
                    558: }
                    559: 
                    560: 1;

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
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.