File:  [LON-CAPA] / loncom / interface / domainprefs.pm
Revision 1.1: download - view: text, annotated - select for diffs
Thu Mar 1 17:01:01 2007 UTC (17 years, 4 months ago) by raeburn
Branches: MAIN
CVS tags: HEAD
Interface for Domain Coordinators to configure Domain settings
- login page
- default quotas for portfolio space based on user's institutional status
- auto-enrollment settings
- auto-update settings
Work in progress.

    1: # The LearningOnline Network with CAPA
    2: # Handler to set domain-wide configuration settings
    3: #
    4: # Copyright Michigan State University Board of Trustees
    5: #
    6: # This file is part of the LearningOnline Network with CAPA (LON-CAPA).
    7: #
    8: # LON-CAPA is free software; you can redistribute it and/or modify
    9: # it under the terms of the GNU General Public License as published by
   10: # the Free Software Foundation; either version 2 of the License, or
   11: # (at your option) any later version.
   12: #
   13: # LON-CAPA is distributed in the hope that it will be useful,
   14: # but WITHOUT ANY WARRANTY; without even the implied warranty of
   15: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   16: # GNU General Public License for more details.
   17: #
   18: # You should have received a copy of the GNU General Public License
   19: # along with LON-CAPA; if not, write to the Free Software
   20: # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA#
   21: # /home/httpd/html/adm/gpl.txt
   22: #
   23: # http://www.lon-capa.org/
   24: #
   25: #
   26: ###############################################################
   27: ##############################################################
   28: 
   29: package Apache::domainprefs;
   30: 
   31: use strict;
   32: use Apache::Constants qw(:common :http);
   33: use Apache::lonnet;
   34: use Apache::loncommon();
   35: use Apache::lonhtmlcommon();
   36: use Apache::lonlocal;
   37: use LONCAPA();
   38: 
   39: sub handler {
   40:     my $r=shift;
   41:     if ($r->header_only) {
   42:         &Apache::loncommon::content_type($r,'text/html');
   43:         $r->send_http_header;
   44:         return OK;
   45:     }
   46: 
   47:     my $dom = $env{'request.role.domain'};
   48:     my $domdesc = $Apache::lonnet::domaindescription{$dom};
   49:     if (&Apache::lonnet::allowed('mau',$dom)) {
   50:         &Apache::loncommon::content_type($r,'text/html');
   51:         $r->send_http_header;
   52:     } else {
   53:         $env{'user.error.msg'}=
   54:         "/adm/domainprefs:mau:0:0:Cannot modify domain settings";
   55:         return HTTP_NOT_ACCEPTABLE;
   56:     }
   57:     &Apache::lonhtmlcommon::clear_breadcrumbs();
   58:     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
   59:                                             ['phase']);
   60:     my $phase = $env{'form.phase'};
   61:     if ($phase eq '' || $phase eq 'start') {
   62:         &Apache::lonhtmlcommon::add_breadcrumb
   63:         ({href=>"javascript:changePage(document.$phase,'start')",
   64:           text=>"Choose an action"});
   65:         &print_main_menu($r,$dom,$domdesc);
   66:     } else {
   67:         &Apache::lonhtmlcommon::add_breadcrumb
   68:         ({href=>"javascript:changePage(document.$phase,'start')",
   69:           text=>"Choose an action"});
   70:         if ($phase eq 'login') {
   71:             &Apache::lonhtmlcommon::add_breadcrumb
   72:               ({href=>"javascript:changePage(document.$phase,'$phase')",
   73:                 text=>"Configure Log-in page"});
   74:             &print_login($r,$phase,$dom)
   75:         } elsif ($phase eq 'configlogin') {
   76:             &Apache::lonhtmlcommon::add_breadcrumb
   77:               ({href=>"javascript:changePage(document.$phase,'login')",
   78:                 text=>"Configure Log-in page"});
   79:             &Apache::lonhtmlcommon::add_breadcrumb
   80:                 ({href=>"javascript:changePage(document.$phase,'$phase')",
   81:                   text=>"Result"});
   82:             &modify_login($r,$phase,$dom,$domdesc);
   83:         } elsif ($phase eq 'quotas') {
   84:             &Apache::lonhtmlcommon::add_breadcrumb
   85:               ({href=>"javascript:changePage(document.$phase,'$phase')",
   86:                 text=>"Default user quotas"});
   87:             &print_quotas($r,$phase,$dom);
   88:         } elsif ($phase eq 'configquotas') {
   89:             &Apache::lonhtmlcommon::add_breadcrumb
   90:               ({href=>"javascript:changePage(document.$phase,'quotas')",
   91:                 text=>"Default user quotas"});
   92:             &Apache::lonhtmlcommon::add_breadcrumb
   93:               ({href=>"javascript:changePage(document.$phase,'$phase')",
   94:                 text=>"Result"});
   95:             &modify_quotas($r,$phase,$dom,$domdesc);
   96:         } elsif ($phase eq 'autoenroll') {
   97:             &Apache::lonhtmlcommon::add_breadcrumb
   98:               ({href=>"javascript:changePage(document.$phase,'$phase')",
   99:                 text=>"Configure Auto-enrollment"});
  100:             &print_autoenroll($r,$phase,$dom);
  101:         } elsif ($phase eq 'configenroll') {
  102:             &Apache::lonhtmlcommon::add_breadcrumb
  103:               ({href=>"javascript:changePage(document.$phase,'autoenroll')",
  104:                 text=>"Configure Auto-enrollment"});
  105:             &Apache::lonhtmlcommon::add_breadcrumb
  106:               ({href=>"javascript:changePage(document.$phase,'$phase')",
  107:                 text=>"Result"});
  108:             &modify_autoenroll($r,$phase,$dom,$domdesc);
  109:         } elsif ($phase eq 'autoupdate') {
  110:             &Apache::lonhtmlcommon::add_breadcrumb
  111:               ({href=>"javascript:changePage(document.$phase,'$phase')",
  112:                 text=>"Configure Auto-update"});
  113:             &print_autoupdate($r,$phase,$dom);
  114:         } elsif ($phase eq 'configupdate') {
  115:             &Apache::lonhtmlcommon::add_breadcrumb
  116:               ({href=>"javascript:changePage(document.$phase,'quotas')",
  117:                 text=>"Change settings"});
  118:             &Apache::lonhtmlcommon::add_breadcrumb
  119:               ({href=>"javascript:changePage(document.$phase,'$phase')",
  120:                 text=>"Result"});
  121:             &modify_autoupdate($r,$phase,$dom,$domdesc);
  122:         }
  123:     }
  124:     &print_footer($r);
  125: }
  126: 
  127: sub print_main_menu {
  128:     my ($r,$dom,$domdesc) = @_;
  129:     my @menu =
  130:         (
  131:           { text => 'Log-in page options',
  132:             help => 'Domain_Log-in_Page',
  133:             phase => 'login',
  134:             },
  135:           { text => 'Default quotas for user portfolios',
  136:             help => 'Default_User_Quota',
  137:             phase => 'quotas',
  138:             },
  139:           { text => 'Auto-enrollment settings',
  140:             help => 'Domain_Auto_Enrollment',
  141:             phase => 'autoenroll',
  142:             },
  143:           { text => 'Auto-update settings',
  144:             help => 'Domain_Auto_Update',
  145:             phase => 'autoupdate',
  146:           },
  147:         );
  148:     my $menu_html = '';
  149:     foreach my $menu_item (@menu) {
  150:         $menu_html.='<p>';
  151:         $menu_html.='<font size="+1">';
  152:         if (exists($menu_item->{'url'})) {
  153:             $menu_html.=qq{<a href="$menu_item->{'url'}">};
  154:         } else {
  155:             $menu_html.=
  156:                 qq{<a href="/adm/domainprefs?phase=$menu_item->{'phase'}">};
  157:         }
  158:         $menu_html.= &mt($menu_item->{'text'}).'</a></font>';
  159:         if (exists($menu_item->{'help'})) {
  160:             $menu_html.=
  161:                 &Apache::loncommon::help_open_topic($menu_item->{'help'});
  162:         }
  163:         $menu_html.='</p>'.$/;
  164:     }
  165:     &print_header($r);
  166:     $r->print($menu_html);
  167:     return;
  168: }
  169: 
  170: sub print_header {
  171:     my ($r,$javascript_validations) = @_;
  172:     my $phase = "start";
  173:     if ( exists($env{'form.phase'}) ) {
  174:         $phase = $env{'form.phase'};
  175:     }
  176:     my $js = qq|
  177: <script type="text/javascript">
  178: function changePage(formname,newphase) {
  179:     formname.phase.value = newphase;
  180:     if (newphase == 'processparms') {
  181:         return;
  182:     }
  183:     formname.submit();
  184: }
  185: </script>
  186: |;
  187:     $r->print(&Apache::loncommon::start_page('View/Modify Domain Settings',                                             $js));
  188:     my $bread_text = "Domain Settings";
  189:     $r->print(&Apache::lonhtmlcommon::breadcrumbs($bread_text));
  190:     return;
  191: }
  192: 
  193: sub print_footer {
  194:     my ($r) = @_;
  195:     $r->print('<br />'.&Apache::loncommon::end_page());
  196:     return;
  197: }
  198: 
  199: sub print_login { 
  200:     my ($r,$phase,$dom) = @_;
  201:     my %domconfig = &Apache::lonnet::get_dom('configuration',
  202:                                              ['login'],$dom);
  203:     my $catalogon = ' checked="checked" ';
  204:     my $catalogoff;
  205:     my $adminmailon = ' ';
  206:     my $adminmailoff = ' checked="checked" ';
  207:     if (ref($domconfig{'login'}) eq 'HASH') {
  208:         if ($domconfig{'login'}{'coursecatalog'} eq '0') {
  209:             $catalogoff = $catalogon;
  210:             $catalogon = ' ';
  211:         }
  212:         if ($domconfig{'login'}{'adminmail'} eq '1') {
  213:             $adminmailon = $adminmailoff;
  214:             $adminmailoff = ' ';
  215:         }
  216:     }
  217:     &print_header($r);
  218:     my $datatable=&Apache::loncommon::start_data_table().
  219:                   &Apache::loncommon::start_data_table_header_row().
  220:                   '<th>'.&mt('Item').'</th><th>'.&mt('Selection').'</th>'.
  221:                   &Apache::loncommon::end_data_table_header_row().
  222:                   &Apache::loncommon::start_data_table_row().
  223:                   '<td>'.&mt('Display Course Catalog link?').'</td>'.
  224:                   '<td><nobr><input type="radio" name="coursecatalog"'.
  225:                   $catalogon.' value="1" />'.&mt('Yes').'&nbsp;'.
  226:                   '<input type="radio" name="coursecatalog"'.
  227:                   $catalogoff.'value="0" />'.&mt('No').'</nobr></td>'.
  228:                   &Apache::loncommon::end_data_table_row().
  229:                   &Apache::loncommon::start_data_table_row().
  230:                   '<td>'.&mt("Display Administrator's E-mail Address?").'</td>'.
  231:                   '<td><nobr><input type="radio" name="adminmail"'.                          $adminmailon.' value="1" />'.&mt('Yes').'&nbsp;'.
  232:                   '<input type="radio" name="adminmail"'.
  233:                   $adminmailoff.'value="0" />'.&mt('No').'</nobr></td>'.
  234:                   &Apache::loncommon::end_data_table_row().
  235:                   &Apache::loncommon::start_data_table();
  236:     &print_form($r,$datatable,$phase,'configlogin','Change'); 
  237: }
  238: 
  239: sub modify_login {
  240:     my ($r,$phase,$dom,$domdesc) = @_;
  241:     my ($resulttext,%changes);
  242:     my %domconfig = &Apache::lonnet::get_dom('configuration',
  243:                                              ['login'],$dom);
  244:     my %title = ( coursecatalog => 'Display course catalog',
  245:                   adminmail => 'Display administrator E-mail address');
  246:     my @offon = ('off','on'); 
  247:     my %loginhash =  (
  248:                        login => { coursecatalog => $env{'form.coursecatalog'},
  249:                                   adminmail => $env{'form.adminmail'},
  250:                                 }
  251:                      );
  252:     my $putresult = &Apache::lonnet::put_dom('configuration',\%loginhash,
  253:                                              $dom);
  254:     if ($putresult eq 'ok') {
  255:         if (($domconfig{'login'}{'coursecatalog'} eq '0') && 
  256:             ($env{'form.coursecatalog'} eq '1')) {
  257:             $changes{'coursecatalog'} = 1;
  258:         } elsif (($domconfig{'login'}{'coursecatalog'} eq '' || 
  259:                  $domconfig{'login'}{'coursecatalog'} eq '1') && 
  260:                  ($env{'form.coursecatalog'} eq '0')) {
  261:             $changes{'coursecatalog'} = 1;
  262:         }
  263:         if (($domconfig{'login'}{'adminmail'} eq '1') && 
  264:                 ($env{'form.adminmail'} eq '0')) {
  265:             $changes{'adminmail'} = 1;
  266:         } elsif (($domconfig{'login'}{'adminmail'} eq '' ||
  267:                  $domconfig{'login'}{'adminmail'} eq '0') &&
  268:                  ($env{'form.adminmail'} eq '1')) {
  269:             $changes{'adminmail'} = 1;
  270:         }
  271:         if (keys(%changes) > 0) {
  272:             $resulttext = &mt('Changes made:').'<ul>';
  273:             foreach my $item (sort(keys(%changes))) {
  274:                 $resulttext .= '<li>'.&mt("$title{$item} set to $offon[$env{'form.'.$item}]").'</li>';
  275:             }
  276:             $resulttext .= '</ul>';
  277:         } else {
  278:             $resulttext = &mt('No changes made to log-in page settings');
  279:         }
  280:     } else {
  281:         $resulttext = &mt('An error occurred: [_1]',$putresult);
  282:     }
  283:     &print_header($r);
  284:     &print_form($r,$resulttext,$phase,'start','Back to actions menu');
  285: }
  286: 
  287: sub print_quotas {
  288:     my ($r,$phase,$dom) = @_;
  289:     my %currquota;
  290:     my %domconfig = &Apache::lonnet::get_dom('configuration',
  291:                                              ['quotas'],$dom);
  292:     if (ref($domconfig{'quotas'}) eq 'HASH') {
  293:         foreach my $key (keys(%{$domconfig{'quotas'}})) {
  294:             $currquota{$key} = $domconfig{'quotas'}{$key};
  295:         }
  296:     }
  297:     my $datatable=&Apache::loncommon::start_data_table().
  298:                   &Apache::loncommon::start_data_table_header_row().
  299:                   '<th>'.&mt('User type').'</th><th>'.&mt('Default quota').'</th>'.
  300:                   &Apache::loncommon::end_data_table_header_row();
  301:     my ($usertypes,$order) = &Apache::lonnet::retrieve_inst_usertypes($dom);
  302:     my $othertitle = "All users";
  303:     my @types;
  304:     if (ref($order) eq 'ARRAY') {
  305:         @types = @{$order};
  306:     }
  307:     if (@types == 0) {
  308:         if (ref($usertypes) eq 'HASH') {
  309:             @types = sort(keys(%{$usertypes}));
  310:         }
  311:     }
  312:     if (@types > 0) {
  313:         foreach my $type (@types) {
  314:             if (defined($usertypes->{$type})) {
  315:                 $datatable .= &Apache::loncommon::start_data_table_row().
  316:                               '<td>'.$usertypes->{$type}.'</td><td><nobr>'.
  317:                               '<input type="text" name="quota_'.$type.
  318:                               '" value="'.$currquota{$type}.
  319:                               '" size="5" /> Mb</nobr></td>'; 
  320:             }
  321:         }
  322:         $othertitle = "Other users";
  323:     }
  324:     my $defaultquota = '20';
  325:     if (defined($currquota{'default'})) {
  326:         $defaultquota = $currquota{'default'};
  327:     }
  328:     $datatable .= &Apache::loncommon::start_data_table_row().
  329:                   '<td>'.&mt($othertitle).'</td><td><nobr>'.
  330:                   '<input type="text" name="default" value="'.
  331:                   $defaultquota.'" size="5" /> Mb</nobr></td>'.
  332:                   &Apache::loncommon::end_data_table_row().
  333:                   &Apache::loncommon::end_data_table();
  334:     &print_header($r);
  335:     &print_form($r,$datatable,$phase,'configquotas','Change');
  336: }
  337: 
  338: sub modify_quotas {
  339:     my ($r,$phase,$dom,$domdesc) = @_;
  340:     my ($resulttext,%changes);
  341:     my %domconfig = &Apache::lonnet::get_dom('configuration',
  342:                                              ['quotas'],$dom);
  343:     my ($usertypes,$order) = &Apache::lonnet::retrieve_inst_usertypes($dom);
  344:     my %formhash;
  345:     foreach my $key (keys(%env)) {
  346:         if ($key =~ /^form\.quota_(.+)$/) {
  347:             $formhash{$1} = $env{$key};
  348:         }
  349:     }
  350:     if (ref($domconfig{'quotas'}) eq 'HASH') {
  351:         foreach my $key (keys(%{$domconfig{'quotas'}})) {
  352:             if (exists($formhash{$key})) {
  353:                 if ($formhash{$key} ne $domconfig{'quotas'}{$key}) {
  354:                     $changes{$key} = 1;
  355:                 }
  356:             } else {
  357:                 $formhash{$key} = $domconfig{'quotas'}{$key};
  358:             }
  359:         }
  360:     }
  361:     foreach my $key (keys(%formhash)) {
  362:         if ($formhash{$key} ne '') {
  363:             if (!exists($domconfig{$key})) {
  364:                 $changes{$key} = 1;
  365:             }
  366:         }
  367:     }
  368:     my %quotahash = (
  369:                       quotas => {%formhash}, 
  370:                     );
  371:     my $putresult = &Apache::lonnet::put_dom('configuration',\%quotahash,
  372:                                              $dom);
  373:     if ($putresult eq 'ok') {
  374:         if (keys(%changes) > 0) {
  375:             $resulttext = &mt('Changes made:').'<ul>';
  376:             foreach my $item (sort(keys(%changes))) {
  377:                 $resulttext .= '<li>'.&mt('[_1] set to [_2] Mb',$usertypes->{$item},$formhash{$item}).'</li>';
  378:             }
  379:             $resulttext .= '</ul>';
  380:         } else {
  381:             $resulttext = &mt('No changes made to default quotas');
  382:         }
  383:     } else {
  384:         $resulttext = &mt('An error occurred: [_1]',$putresult);
  385:     }
  386:     &print_header($r);
  387:     &print_form($r,$resulttext,$phase,'start','Back to actions menu');
  388: }
  389: 
  390: sub print_autoenroll {
  391:     my ($r,$phase,$dom) = @_;
  392:     my %currautoenroll;
  393:     my %domconfig = &Apache::lonnet::get_dom('configuration',
  394:                                              ['autoenroll'],$dom);
  395:     if (ref($domconfig{'autoenroll'}) eq 'HASH') {
  396:         foreach my $key (keys(%{$domconfig{'autoenroll'}})) {
  397:             $currautoenroll{$key} = $domconfig{'autoenroll'}{$key};
  398:         }
  399:     }
  400:     my $autorun = &Apache::lonnet::auto_run(undef,$dom),
  401:     my ($runon,$runoff);
  402:     if (exists($currautoenroll{'run'})) {
  403:         if ($currautoenroll{'run'} eq '0') {
  404:             $runoff = ' checked="checked" ';
  405:             $runon = ' ';
  406:         } else {
  407:             $runon = ' checked="checked" ';
  408:             $runoff = ' ';
  409:         }
  410:     } else {
  411:         if ($autorun) {
  412:             $runon = ' checked="checked" ';
  413:             $runoff = ' ';
  414:         } else {
  415:             $runoff = ' checked="checked" ';
  416:             $runon = ' ';
  417:         }
  418:     }
  419:     my $defdom = $dom;
  420:     if (exists($currautoenroll{'sender_domain'})) {
  421:         $defdom = $currautoenroll{'sender_domain'};
  422:     }
  423:     my $domform = &Apache::loncommon::select_dom_form($defdom,'sender_domain',1);
  424:     my $datatable=&Apache::loncommon::start_data_table().
  425:                   &Apache::loncommon::start_data_table_header_row().
  426:                   '<th>'.&mt('Configuration setting').'</th><th>'.&mt('Value(s)').'</th>'.
  427:                   &Apache::loncommon::end_data_table_header_row().
  428:                   &Apache::loncommon::start_data_table_row().
  429:                   '<td>'.&mt('Auto-enrollment active?').'</td>'.                  '<td><nobr><input type="radio" name="autoenroll_run"'.
  430:                   $runon.' value="1" />'.&mt('Yes').'&nbsp;'.
  431:                   '<input type="radio" name="autoenroll_run"'.
  432:                   $runoff.'value="0" />'.&mt('No').'</nobr></td>'.
  433:                   &Apache::loncommon::end_data_table_row().
  434:                   &Apache::loncommon::start_data_table_row().
  435:                   '<td>'.&mt('Notification messages - sender').'</td><td><nobr>'.
  436:                   &mt('username').':&nbsp;<input type="text" name="sender_uname" value="'.
  437:                   $currautoenroll{'sender_uname'}.'" size="10" />&nbsp;&nbsp;'.&mt('domain').':&nbsp;'.$domform.'</nobr></td>'.
  438:                   &Apache::loncommon::end_data_table_row().
  439:                   &Apache::loncommon::end_data_table();
  440:     &print_header($r);
  441:     &print_form($r,$datatable,$phase,'configenroll','Change');
  442: }
  443: 
  444: sub modify_autoenroll { 
  445:     my ($r,$phase,$dom,$domdesc) = @_;
  446:     my ($resulttext,%changes);
  447:     my %currautoenroll;
  448:     my %domconfig = &Apache::lonnet::get_dom('configuration',
  449:                                              ['autoenroll'],$dom);
  450:     if (ref($domconfig{'autoenroll'}) eq 'HASH') {
  451:         foreach my $key (keys(%{$domconfig{'autoenroll'}})) {
  452:             $currautoenroll{$key} = $domconfig{'autoenroll'}{$key};
  453:         }
  454:     }
  455:     my $autorun = &Apache::lonnet::auto_run(undef,$dom),
  456:     my %title = ( run => 'Auto-enrollment active',
  457:                   sender => 'Sender for notification messages');
  458:     my @offon = ('off','on');
  459:     my %autoenrollhash =  (
  460:                        autoenroll => { run => $env{'form.autoenroll_run'},
  461:                                        sender_uname => $env{'form.sender_uname'},
  462:                                        sender_domain => $env{'form.sender_domain'},
  463: 
  464:                                 }
  465:                      );
  466:     my $putresult = &Apache::lonnet::put_dom('configuration',\%autoenrollhash,
  467:                                              $dom);
  468:     if ($putresult eq 'ok') {
  469:         if (exists($currautoenroll{'run'})) {
  470:              if ($currautoenroll{'run'} ne $env{'form.autoenroll_run'}) {
  471:                  $changes{'run'} = 1;
  472:              }
  473:         } elsif ($autorun) {
  474:             if ($env{'form.autoenroll_run'} ne '1') {
  475:                 $changes{'run'} = 1;
  476:             }
  477:         }
  478:         if (exists($currautoenroll{sender_uname})) {
  479:             if ($currautoenroll{'sender_uname'} ne $env{'form.sender_uname'}) {
  480:                 $changes{'sender'} = 1;
  481:             }
  482:         } else {
  483:             $changes{'sender'} = 1;
  484:         }
  485:         if (exists($currautoenroll{sender_domain})) {
  486:             if ($currautoenroll{'sender_domain'} ne $env{'form.sender_domain'}) {
  487:                 $changes{'sender'} = 1;
  488:             }
  489:         } else {
  490:             $changes{'sender'} = 1;
  491:         }
  492:         if (keys(%changes) > 0) {
  493:             $resulttext = &mt('Changes made:').'<ul>';
  494:             if ($changes{'run'}) { 
  495:                 $resulttext .= '<li>'.&mt("$title{'run'} set to $offon[$env{'form.autoenroll_run'}]").'</li>';
  496:             }
  497:             if ($changes{'sender'}) {
  498:                 $resulttext .= '<li>'.&mt("$title{'sender'} set to [_1]",$env{'form.sender_uname'}.':'.$env{'form.sender_domain'}).'</li>';
  499:             }
  500:             $resulttext .= '</ul>';
  501:         } else {
  502:             $resulttext = &mt('No changes made to auto-enrollment settings');
  503:         }
  504:     } else {
  505:         $resulttext = &mt('An error occurred: [_1]',$putresult);
  506:     }
  507:     &print_header($r);
  508:     &print_form($r,$resulttext,$phase,'start','Back to actions menu');
  509: }
  510: 
  511: sub print_autoupdate {
  512:     my ($r,$phase,$dom) = @_;
  513:     my (%currautoupdate,$datatable);
  514:     my %domconfig = &Apache::lonnet::get_dom('configuration',
  515:                                              ['autoupdate'],$dom);
  516:     if (ref($domconfig{'autoupdate'}) eq 'HASH') {
  517:         foreach my $key (keys(%{$domconfig{'autoupdate'}})) {
  518:             $currautoupdate{$key} = $domconfig{'autoupdate'}{$key};
  519:         }
  520:     }
  521:     my $updateon = ' ';
  522:     my $updateoff = ' checked="checked" ';
  523:     if ($currautoupdate{'run'} eq '1') {
  524:         $updateon = $updateoff;
  525:         $updateoff = ' ';
  526:     }
  527:     my $classlistson = ' ';
  528:     my $classlistsoff = ' checked="checked" ';
  529:     if ($currautoupdate{'classlists'} eq '1') {
  530:         $classlistson = $classlistsoff;
  531:         $classlistsoff = ' ';
  532:     }
  533:     my %title = (
  534:                    run => 'Auto-update enabled?',
  535:                    classlists => 'Update information in classlists?',
  536:                 );
  537:     $datatable = &Apache::loncommon::start_data_table().
  538:                   &Apache::loncommon::start_data_table_header_row().
  539:                   '<th>'.&mt('Setting').'</th><th>'.&mt('Value').'</th>'.
  540:                   &Apache::loncommon::end_data_table_header_row().
  541:                   &Apache::loncommon::start_data_table_row().
  542:                   '<td>'.&mt($title{'run'}).'</td>'.
  543:                   '<td><nobr><input type="radio" name="autoupdate_run"'.
  544:                   $updateon.' value="1" />'.&mt('Yes').'&nbsp;'.
  545:                   '<input type="radio" name="autoupdate_run"'.
  546:                   $updateoff.'value="0" />'.&mt('No').'</nobr></td>'.
  547:                   &Apache::loncommon::end_data_table_row().
  548:                   &Apache::loncommon::start_data_table_row().
  549:                   '<td>'.&mt($title{'classlists'}).'</td>'.
  550:                   '<td><nobr><input type="radio" name="classlists"'.
  551:                   $classlistson.' value="1" />'.&mt('Yes').'&nbsp;'.
  552:                   '<input type="radio" name="classlists"'.
  553:                   $classlistsoff.'value="0" />'.&mt('No').'</nobr></td>'.
  554:                   &Apache::loncommon::end_data_table_row().
  555:                   &Apache::loncommon::end_data_table().'<br /><br />';
  556:     my ($usertypes,$order) = &Apache::lonnet::retrieve_inst_usertypes($dom);
  557:     my @types;
  558:     if (ref($order) eq 'ARRAY') {
  559:         @types = @{$order};
  560:     }
  561:     if (@types == 0) {
  562:         if (ref($usertypes) eq 'HASH') {
  563:             @types = sort(keys(%{$usertypes}));
  564:         }
  565:     }
  566:     my $othertitle = &mt('All users');
  567:     if (keys(%{$usertypes}) > 0) {
  568:         $othertitle = &mt('Other users');
  569:     }
  570:     my @fields = ('lastname','firstname','middlename','gen','email','id');
  571:     my $numinrow = 4;
  572:     my %fieldtitles = &Apache::lonlocal::texthash ( 
  573:                         id => 'Student/Employee ID',
  574:                         email => 'E-mail address',
  575:                         lastname => 'Last Name',
  576:                         firstname => 'First Name',
  577:                         middlename => 'Middle Name',
  578:                         gen => 'Generation',
  579:                       );
  580:     $datatable .= &Apache::loncommon::start_data_table().
  581:                   &Apache::loncommon::start_data_table_header_row().
  582:                   '<th>'.&mt('User Population').'</th><th>'.&mt('Updateable user data').'</th>'.
  583:                   &Apache::loncommon::end_data_table_header_row();
  584:     if (@types > 0) {
  585:         foreach my $type (@types) {
  586:             if (defined($usertypes->{$type})) {
  587:                 $datatable .= &Apache::loncommon::start_data_table_row().
  588:                               '<td>'.$usertypes->{$type}.'</td><td><table>';
  589:                 for (my $i=0; $i<@fields; $i++) {
  590:                     my $rem = $i%($numinrow);
  591:                     if ($rem == 0) {
  592:                         if ($i > 0) {
  593:                             $datatable .= '</tr>';
  594:                         }
  595:                         $datatable .= '<tr>';
  596:                     }
  597:                     my $check = ' ';
  598:                     if (ref($currautoupdate{'fields'}) eq 'HASH') {
  599:                         if (ref($currautoupdate{'fields'}{$type}) eq 'ARRAY') {  
  600:                             if (grep(/^\Q$fields[$i]\E$/,@{$currautoupdate{'fields'}{$type}})) {
  601:                                 $check = ' checked="checked" ';
  602:                             }
  603:                         }
  604:                     }
  605:                     if ($i == @fields-1) {
  606:                         my $colsleft = $numinrow - $rem;
  607:                         if ($colsleft > 1) {
  608:                             $datatable .= '<td colspan="'.$colsleft.'">';
  609:                         } else {
  610:                             $datatable .= '<td>'; 
  611:                         }
  612:                     } else {
  613:                         $datatable .= '<td>';
  614:                     }
  615:                     $datatable .= '<nobr><input type="checkbox" name="updateable_'.
  616:                                   $type.'_'.$fields[$i].'" '.
  617:                                   '" value="1"'.$check.'/>'.
  618:                                   $fieldtitles{$fields[$i]}.'</nobr></td>';
  619:                 }
  620:                 $datatable .= '</tr></table></td>'.&Apache::loncommon::end_data_table_row();
  621:             }
  622:         }
  623:     }
  624:     $datatable .= &Apache::loncommon::start_data_table_row().
  625:                   '<td>'.&mt($othertitle).'</td><td><table>';
  626:     for (my $i=0; $i<@fields; $i++) {
  627:         my $rem = $i%($numinrow);
  628:         if ($rem == 0) {
  629:             if ($i > 0) {
  630:                 $datatable .= '</tr>';
  631:             }
  632:             $datatable .= '<tr>';
  633:         }
  634:         my $check = ' ';
  635:         if (ref($currautoupdate{'fields'}) eq 'HASH') {
  636:             if (ref($currautoupdate{'fields'}{'default'}) eq 'ARRAY') {
  637:                 if (grep(/^\Q$fields[$i]\E$/,@{$currautoupdate{'fields'}{'default'}})) {
  638:                     $check = ' checked="checked" ';
  639:                 }
  640:             }
  641:         }
  642:         if ($i == @fields-1) {
  643:             my $colsleft = $numinrow - $rem;
  644:             if ($colsleft > 1) {
  645:                 $datatable .= '<td colspan="'.$colsleft.'">';
  646:             } else {
  647:                 $datatable .= '<td>';
  648:             }
  649:         } else {
  650:             $datatable .= '<td>';
  651:         }
  652:         $datatable .=  '<nobr><input type="checkbox" name="updateable_default_'.
  653:                        $fields[$i].'" value="1"'.$check.'/>'.
  654:                        $fieldtitles{$fields[$i]}.'</nobr></td>';
  655:     }
  656:     $datatable .= '</tr></table></td>'.
  657:                   &Apache::loncommon::end_data_table_row().
  658:                   &Apache::loncommon::end_data_table();
  659:     &print_header($r);
  660:     &print_form($r,$datatable,$phase,'configupdate','Change');
  661: }
  662: 
  663: sub modify_autoupdate {
  664:     my ($r,$phase,$dom,$domdesc) = @_;
  665:     my ($resulttext,%currautoupdate,%fields,%changes);
  666:     my %domconfig = &Apache::lonnet::get_dom('configuration',
  667:                                              ['autoupdate'],$dom);
  668:     if (ref($domconfig{'autoupdate'}) eq 'HASH') {
  669:         foreach my $key (keys(%{$domconfig{'autoupdate'}})) {
  670:             $currautoupdate{$key} = $domconfig{'autoupdate'}{$key};
  671:         }
  672:     }
  673:     my @offon = ('off','on');
  674:     my %title = &Apache::lonlocal::texthash (
  675:                    run => 'Auto-update:',
  676:                    classlists => 'Updates to user information in classlists?'
  677:                 );
  678:     my ($usertypes,$order) = &Apache::lonnet::retrieve_inst_usertypes($dom);
  679:     my %fieldtitles = &Apache::lonlocal::texthash (
  680:                         id => 'Student/Employee ID',
  681:                         email => 'E-mail address',
  682:                         lastname => 'Last Name',
  683:                         firstname => 'First Name',
  684:                         middlename => 'Middle Name',
  685:                         gen => 'Generation',
  686:                       );
  687:     my $othertitle = &mt('All users');
  688:     if (keys(%{$usertypes}) >  0) {
  689:         $othertitle = "Other users";
  690:     }
  691:     foreach my $key (keys(%env)) {
  692:         if ($key =~ /^form\.updateable_(.+)_([^_]+)$/) {
  693:             push(@{$fields{$1}},$2);
  694:         }
  695:     }
  696:     my %updatehash = (
  697:                       autoupdate => { run => $env{'form.autoupdate_run'},
  698:                                       classlists => $env{'form.classlists'},
  699:                                       fields => {%fields},
  700:                                     }
  701:                      );
  702:     foreach my $key (keys(%currautoupdate)) {
  703:         if (($key eq 'run') || ($key eq 'classlists')) {
  704:             if (exists($updatehash{autoupdate}{$key})) {
  705:                 if ($currautoupdate{$key} ne $updatehash{autoupdate}{$key}) {
  706:                     $changes{$key} = 1;
  707:                 }
  708:             }
  709:         } elsif ($key eq 'fields') {
  710:             if (ref($currautoupdate{$key}) eq 'HASH') {
  711:                 foreach my $item (keys(%{$currautoupdate{$key}})) {
  712:                     if (ref($currautoupdate{$key}{$item}) eq 'ARRAY') {
  713:                         my $change = 0;
  714:                         foreach my $type (@{$currautoupdate{$key}{$item}}) {
  715:                             if (!exists($fields{$item})) {
  716:                                 $change = 1;
  717:                             } elsif (ref($fields{$item}) eq 'ARRAY') {
  718:                                 if (!grep/^\Q$type\E$/,@{$fields{$item}}) {
  719:                                     $change = 1;
  720:                                 }
  721:                             }
  722:                         }
  723:                         if ($change) {
  724:                             push(@{$changes{$key}},$item);
  725:                         }
  726:                     }
  727:                 }
  728:             }
  729:         }
  730:     }
  731:     foreach my $key (keys(%fields)) {
  732:         if (ref($currautoupdate{'fields'}) eq 'HASH') {
  733:             if (!exists($currautoupdate{'fields'}{$key})) {
  734:                 push(@{$changes{'fields'}},$key);
  735:             }
  736:         } else {
  737:             push(@{$changes{'fields'}},$key);
  738:         }
  739:     }
  740:     my $putresult = &Apache::lonnet::put_dom('configuration',\%updatehash,
  741:                                              $dom);
  742:     if ($putresult eq 'ok') {
  743:         if (keys(%changes) > 0) {
  744:             $resulttext = &mt('Changes made:').'<ul>';
  745:             foreach my $key (sort(keys(%changes))) {
  746:                 if (ref($changes{$key}) eq 'ARRAY') {
  747:                     foreach my $item (@{$changes{$key}}) {
  748:                         my @newvalues;
  749:                         foreach my $type (@{$fields{$item}}) {
  750:                             push(@newvalues,$fieldtitles{$type});
  751:                         }
  752:                         my $newvaluestr = join(', ',@newvalues);
  753:                         if ($item eq 'default') {
  754:                             $resulttext .= '<li>'.&mt("Updates for $othertitle set to: [_1]",$newvaluestr).'</li>';
  755:                         } else {
  756:                             $resulttext .= '<li>'.&mt("Updates for [_1] set to: [_2]",$usertypes->{$item},$newvaluestr).'</li>';
  757:                         }
  758:                     }
  759:                 } else {
  760:                     my $newvalue;
  761:                     if ($key eq 'run') {
  762:                         $newvalue = $offon[$env{'form.autoupdate_run'}];
  763:                     } else {
  764:                         $newvalue = $offon[$env{'form.'.$key}];
  765:                     } 
  766:                     $resulttext .= '<li>'.&mt("[_1] set to $newvalue",$title{$key}).'</li>';
  767:                 }
  768:             }
  769:             $resulttext .= '</ul>';
  770:         } else {
  771:             $resulttext = &mt('No changes made to default quotas');
  772:         }
  773:     } else {
  774:         $resulttext = &mt('An error occurred: [_1]',$putresult);
  775:     }
  776:     &print_header($r);
  777:     &print_form($r,$resulttext,$phase,'start','Back to actions menu');
  778: }
  779: 
  780: sub print_form {
  781:     my ($r,$datatable,$phase,$newphase,$button_text) = @_;
  782:     my $button_text = &mt($button_text);
  783:     $r->print(<<ENDDOCUMENT);
  784: <form action="/adm/domainprefs" method="post" name="$phase">
  785: <br />
  786: $datatable
  787: <br />
  788: <input type="hidden" name="phase" value="" />
  789: <input type="button" name="store" value="$button_text" onclick="javascript:changePage(document.$phase,'$newphase')" />
  790: </form>
  791: ENDDOCUMENT
  792:     return;
  793: }
  794: 
  795: 1;

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>