--- loncom/interface/domainprefs.pm	2021/03/07 00:32:21	1.160.6.102.2.11
+++ loncom/interface/domainprefs.pm	2020/05/02 18:36:17	1.160.6.105
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Handler to set domain-wide configuration settings
 #
-# $Id: domainprefs.pm,v 1.160.6.102.2.11 2021/03/07 00:32:21 raeburn Exp $
+# $Id: domainprefs.pm,v 1.160.6.105 2020/05/02 18:36:17 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -216,27 +216,13 @@ sub handler {
                 'contacts','defaults','scantron','coursecategories',
                 'serverstatuses','requestcourses','helpsettings',
                 'coursedefaults','usersessions','loadbalancing',
-                'requestauthor','selfenrollment','inststatus',
-                'passwords','ltitools'],$dom);
-    if (ref($domconfig{'ltitools'}) eq 'HASH') {
-        my %encconfig =
-            &Apache::lonnet::get_dom('encconfig',['ltitools'],$dom);
-        if (ref($encconfig{'ltitools'}) eq 'HASH') {
-            foreach my $id (keys(%{$domconfig{'ltitools'}})) {
-                if (ref($domconfig{'ltitools'}{$id}) eq 'HASH') {
-                    foreach my $item ('key','secret') {
-                        $domconfig{'ltitools'}{$id}{$item} = $encconfig{'ltitools'}{$id}{$item};
-                    }
-                }
-            }
-        }
-    }
+                'requestauthor','selfenrollment','inststatus','passwords'],$dom);
     my @prefs_order = ('rolecolors','login','defaults','passwords','quotas','autoenroll',
                        'autoupdate','autocreate','directorysrch','contacts',
                        'usercreation','selfcreation','usermodification','scantron',
                        'requestcourses','requestauthor','coursecategories',
                        'serverstatuses','helpsettings','coursedefaults',
-                       'ltitools','selfenrollment','usersessions');
+                       'selfenrollment','usersessions');
     my %existing;
     if (ref($domconfig{'loadbalancing'}) eq 'HASH') {
         %existing = %{$domconfig{'loadbalancing'}};
@@ -349,8 +335,6 @@ sub handler {
                                 col2 => 'Value',},
                                {col1 => 'Recipient(s) for notifications',
                                 col2 => 'Value',},
-                               {col1 => 'Nightly status check e-mail',
-                                col2 => 'Settings',},
                                {col1 => 'Ask helpdesk form settings',
                                 col2 => 'Value',},],
                     print => \&print_contacts,
@@ -504,14 +488,6 @@ sub handler {
                   print => \&print_loadbalancing,
                   modify => \&modify_loadbalancing,
                  },
-        'ltitools' =>
-                 {text => 'External Tools (LTI)',
-                  help => 'Domain_Configuration_LTI_Tools',
-                  header => [{col1 => 'Setting',
-                              col2 => 'Value',}],
-                  print => \&print_ltitools,
-                  modify => \&modify_ltitools,
-                 },
     );
     if (keys(%servers) > 1) {
         $prefs{'login'}  = { text   => 'Log-in page options',
@@ -696,8 +672,6 @@ sub process_changes {
         $output = &modify_loadbalancing($dom,%domconfig);
     } elsif ($action eq 'passwords') {
         $output = &modify_passwords($r,$dom,$confname,$lastactref,%domconfig);
-    } elsif ($action eq 'ltitools') {
-        $output = &modify_ltitools($r,$dom,$action,$lastactref,%domconfig);
     }
     return $output;
 }
@@ -728,8 +702,6 @@ sub print_config_box {
         $output =
             &Apache::lonuserutils::custom_roledefs_js($context,$crstype,$formname,\%full,
                                                       \@templateroles);
-    } elsif ($action eq 'ltitools') {
-        $output .= &ltitools_javascript($settings);
     }
     $output .=
          '<table class="LC_nested_outer">
@@ -746,7 +718,7 @@ sub print_config_box {
     if ($numheaders > 1) {
         my $colspan = '';
         my $rightcolspan = '';
-        my $leftnobr = '';
+        my $leftnobr = '';  
         if (($action eq 'rolecolors') || ($action eq 'defaults') ||
             ($action eq 'directorysrch') ||
             (($action eq 'login') && ($numheaders < 4))) {
@@ -827,13 +799,8 @@ sub print_config_box {
              </tr>'."\n";
             if ($action eq 'coursecategories') {
                 $output .= &print_coursecategories('bottom',$dom,$item,$settings,\$rowtotal);
-            } elsif (($action eq 'contacts') || ($action eq 'passwords')) {
-                if ($action eq 'passwords') {
-                    $output .= $item->{'print'}->('lower',$dom,$confname,$settings,\$rowtotal);
-                } else {
-                    $output .= $item->{'print'}->('lower',$dom,$settings,\$rowtotal);
-                }
-                $output .= '
+            } elsif ($action eq 'passwords') {
+                $output .= $item->{'print'}->('lower',$dom,$confname,$settings,\$rowtotal).'
              </tr>
             </table>
            </td>
@@ -843,13 +810,8 @@ sub print_config_box {
             <table class="LC_nested">
              <tr class="LC_info_row">
               <td class="LC_left_item"'.$colspan.'>'.&mt($item->{'header'}->[3]->{'col1'}).'</td>
-              <td class="LC_right_item"'.$colspan.'>'.&mt($item->{'header'}->[3]->{'col2'}).'</td></tr>'."\n";
-                if ($action eq 'passwords') {
-                    $output .= $item->{'print'}->('bottom',$dom,$confname,$settings,\$rowtotal);
-                } else {
-                    $output .= $item->{'print'}->('bottom',$dom,$settings,\$rowtotal);
-                }
-                $output .= '
+              <td class="LC_right_item"'.$colspan.'>'.&mt($item->{'header'}->[3]->{'col2'}).'</td></tr>'."\n".
+              $item->{'print'}->('bottom',$dom,$confname,$settings,\$rowtotal).'
             </table>
           </td>
          </tr>
@@ -1020,8 +982,7 @@ sub print_config_box {
         if ($action eq 'quotas') {
             $output .= &print_quotas($dom,$settings,\$rowtotal,$action);
         } elsif (($action eq 'autoenroll') || ($action eq 'autocreate') || 
-                 ($action eq 'serverstatuses') || ($action eq 'loadbalancing') ||
-                 ($action eq 'ltitools')) {
+                 ($action eq 'serverstatuses') || ($action eq 'loadbalancing')) {
             $output .= $item->{'print'}->($dom,$settings,\$rowtotal);
         }
     }
@@ -2537,108 +2498,6 @@ $jstext{'templates'};
 ENDSCRIPT
 }
 
-sub ltitools_javascript {
-    my ($settings) = @_;
-    my $togglejs = &ltitools_toggle_js();
-    unless (ref($settings) eq 'HASH') {
-        return $togglejs;
-    }
-    my (%ordered,$total,%jstext);
-    $total = 0;
-    foreach my $item (keys(%{$settings})) {
-        if (ref($settings->{$item}) eq 'HASH') {
-            my $num = $settings->{$item}{'order'};
-            $ordered{$num} = $item;
-        }
-    }
-    $total = scalar(keys(%{$settings}));
-    my @jsarray = ();
-    foreach my $item (sort {$a <=> $b } (keys(%ordered))) {
-        push(@jsarray,$ordered{$item});
-    }
-    my $jstext = '    var ltitools = Array('."'".join("','",@jsarray)."'".');'."\n";
-    return <<"ENDSCRIPT";
-<script type="text/javascript">
-// <![CDATA[
-function reorderLTITools(form,item) {
-    var changedVal;
-$jstext
-    var newpos = 'ltitools_add_pos';
-    var maxh = 1 + $total;
-    var current = new Array;
-    var newitemVal = form.elements[newpos].options[form.elements[newpos].selectedIndex].value;
-    if (item == newpos) {
-        changedVal = newitemVal;
-    } else {
-        changedVal = form.elements[item].options[form.elements[item].selectedIndex].value;
-        current[newitemVal] = newpos;
-    }
-    for (var i=0; i<ltitools.length; i++) {
-        var elementName = 'ltitools_'+ltitools[i];
-        if (elementName != item) {
-            if (form.elements[elementName]) {
-                var currVal = form.elements[elementName].options[form.elements[elementName].selectedIndex].value;
-                current[currVal] = elementName;
-            }
-        }
-    }
-    var oldVal;
-    for (var j=0; j<maxh; j++) {
-        if (current[j] == undefined) {
-            oldVal = j;
-        }
-    }
-    if (oldVal < changedVal) {
-        for (var k=oldVal+1; k<=changedVal ; k++) {
-           var elementName = current[k];
-           form.elements[elementName].selectedIndex = form.elements[elementName].selectedIndex - 1;
-        }
-    } else {
-        for (var k=changedVal; k<oldVal; k++) {
-            var elementName = current[k];
-            form.elements[elementName].selectedIndex = form.elements[elementName].selectedIndex + 1;
-        }
-    }
-    return;
-}
-
-// ]]>
-</script>
-
-$togglejs
-
-ENDSCRIPT
-}
-
-sub ltitools_toggle_js {
-    return <<"ENDSCRIPT";
-<script type="text/javascript">
-// <![CDATA[
-
-function toggleLTITools(form,setting,item) {
-    var radioname = '';
-    var divid = '';
-    if (setting == 'user') {
-        divid = 'ltitools_'+setting+'_div_'+item;
-        var checkid = 'ltitools_'+setting+'_field_'+item;
-        if (document.getElementById(divid)) {
-            if (document.getElementById(checkid)) {
-                if (document.getElementById(checkid).checked) {
-                    document.getElementById(divid).style.display = 'inline-block';
-                } else {
-                    document.getElementById(divid).style.display = 'none';
-                }
-            }
-        }
-    }
-    return;
-}
-// ]]>
-</script>
-
-ENDSCRIPT
-}
-
 sub print_autoenroll {
     my ($dom,$settings,$rowtotal) = @_;
     my $autorun = &Apache::lonnet::auto_run(undef,$dom),
@@ -3000,7 +2859,7 @@ sub print_contacts {
     my $datatable;
     my @contacts = ('adminemail','supportemail');
     my (%checked,%to,%otheremails,%bccemails,%includestr,%includeloc,%currfield,
-        $maxsize,$fields,$fieldtitles,$fieldoptions,$possoptions,@mailings,%lonstatus);
+        $maxsize,$fields,$fieldtitles,$fieldoptions,$possoptions,@mailings);
     if ($position eq 'top') {
         if (ref($settings) eq 'HASH') {
             foreach my $item (@contacts) {
@@ -3015,12 +2874,6 @@ sub print_contacts {
         foreach my $type (@mailings) {
             $otheremails{$type} = '';
         }
-    } elsif ($position eq 'lower') {
-        if (ref($settings) eq 'HASH') {
-            if (ref($settings->{'lonstatus'}) eq 'HASH') {
-                %lonstatus = %{$settings->{'lonstatus'}};
-            }
-        }
     } else {
         @mailings = ('helpdeskmail','otherdomsmail');
         foreach my $type (@mailings) {
@@ -3033,7 +2886,7 @@ sub print_contacts {
         ($fields,$fieldtitles,$fieldoptions,$possoptions) = &helpform_fields();
     }
     if (ref($settings) eq 'HASH') {
-        unless (($position eq 'top') || ($position eq 'lower')) {
+        unless ($position eq 'top') {
             foreach my $type (@mailings) {
                 if (exists($settings->{$type})) {
                     if (ref($settings->{$type}) eq 'HASH') {
@@ -3166,7 +3019,7 @@ sub print_contacts {
         $datatable .= '</td></tr>'."\n";
         $rownum ++;
     }
-    unless (($position eq 'top') || ($position eq 'lower')) {
+    unless ($position eq 'top') {
         foreach my $type (@mailings) {
             $css_class = $rownum%2?' class="LC_odd_row"':'';
             $datatable .= '<tr'.$css_class.'>'.
@@ -3213,104 +3066,18 @@ sub print_contacts {
     }
     if ($position eq 'middle') {
         my %choices;
-        my $corelink = &core_link_msu();
-        $choices{'reporterrors'} = &mt('E-mail error reports to [_1]',$corelink);
+        $choices{'reporterrors'} = &mt('E-mail error reports to [_1]',
+                                       &Apache::loncommon::modal_link('http://loncapa.org/core.html',
+                                       &mt('LON-CAPA core group - MSU'),600,500));
         $choices{'reportupdates'} = &mt('E-mail record of completed LON-CAPA updates to [_1]',
-                                        $corelink);
-        $choices{'reportstatus'} = &mt('E-mail status if errors above threshold to [_1]',$corelink);
-        my @toggles = ('reporterrors','reportupdates','reportstatus');
+                                        &Apache::loncommon::modal_link('http://loncapa.org/core.html',
+                                        &mt('LON-CAPA core group - MSU'),600,500));
+        my @toggles = ('reporterrors','reportupdates');
         my %defaultchecked = ('reporterrors'  => 'on',
-                              'reportupdates' => 'on',
-                              'reportstatus'  => 'on');
+                              'reportupdates' => 'on');
         (my $reports,$rownum) = &radiobutton_prefs($settings,\@toggles,\%defaultchecked,
                                                    \%choices,$rownum);
         $datatable .= $reports;
-    } elsif ($position eq 'lower') {
-        my (%current,%excluded,%weights);
-        my ($defaults,$names) = &Apache::loncommon::lon_status_items();
-        if ($lonstatus{'threshold'} =~ /^\d+$/) {
-            $current{'errorthreshold'} = $lonstatus{'threshold'};
-        } else {
-            $current{'errorthreshold'} = $defaults->{'threshold'};
-        }
-        if ($lonstatus{'sysmail'} =~ /^\d+$/) {
-            $current{'errorsysmail'} = $lonstatus{'sysmail'};
-        } else {
-            $current{'errorsysmail'} = $defaults->{'sysmail'};
-        }
-        if (ref($lonstatus{'weights'}) eq 'HASH') {
-            foreach my $type ('E','W','N','U') {
-                if ($lonstatus{'weights'}{$type} =~ /^\d+$/) {
-                    $weights{$type} = $lonstatus{'weights'}{$type};
-                } else {
-                    $weights{$type} = $defaults->{$type};
-                }
-            }
-        } else {
-            foreach my $type ('E','W','N','U') {
-                $weights{$type} = $defaults->{$type};
-            }
-        }
-        if (ref($lonstatus{'excluded'}) eq 'ARRAY') {
-            if (@{$lonstatus{'excluded'}} > 0) {
-                map {$excluded{$_} = 1; } @{$lonstatus{'excluded'}};
-            }
-        }
-        foreach my $item ('errorthreshold','errorsysmail') {
-            $css_class = $rownum%2?' class="LC_odd_row"':'';
-            $datatable .= '<tr'.$css_class.'>'.
-                          '<td class="LC_left_item"><span class="LC_nobreak">'.
-                          $titles->{$item}.
-                          '</span></td><td class="LC_left_item">'.
-                          '<input type="text" name="'.$item.'" value="'.
-                          $current{$item}.'" size="5" /></td></tr>';
-            $rownum ++;
-        }
-        $css_class = $rownum%2?' class="LC_odd_row"':'';
-        $datatable .= '<tr'.$css_class.'>'.
-                      '<td class="LC_left_item">'.
-                      '<span class="LC_nobreak">'.$titles->{'errorweights'}.
-                      '</span></td><td class="LC_left_item"><table><tr>';
-        foreach my $type ('E','W','N','U') {
-            $datatable .= '<td>'.$names->{$type}.'<br />'.
-                          '<input type="text" name="errorweights_'.$type.'" value="'.
-                          $weights{$type}.'" size="5" /></td>';
-        }
-        $datatable .= '</tr></table></tr>';
-        $rownum ++;
-        $css_class = $rownum%2?' class="LC_odd_row"':'';
-        $datatable .= '<tr'.$css_class.'><td class="LC_left_item">'.
-                      $titles->{'errorexcluded'}.'</td>'.
-                      '<td class="LC_left_item"><table>';
-        my $numinrow = 4;
-        my @ids = sort(values(%Apache::lonnet::serverhomeIDs));
-        for (my $i=0; $i<@ids; $i++) {
-            my $rem = $i%($numinrow);
-            if ($rem == 0) {
-                if ($i > 0) {
-                    $datatable .= '</tr>';
-                }
-                $datatable .= '<tr>';
-            }
-            my $check;
-            if ($excluded{$ids[$i]}) {
-                $check = ' checked="checked" ';
-            }
-            $datatable .= '<td class="LC_left_item">'.
-                          '<span class="LC_nobreak"><label>'.
-                          '<input type="checkbox" name="errorexcluded" '.
-                          'value="'.$ids[$i].'"'.$check.' />'.
-                          $ids[$i].'</label></span></td>';
-        }
-        my $colsleft = $numinrow - @ids%($numinrow);
-        if ($colsleft > 1 ) {
-            $datatable .= '<td colspan="'.$colsleft.'" class="LC_left_item">'.
-                          '&nbsp;</td>';
-        } elsif ($colsleft == 1) {
-            $datatable .= '<td class="LC_left_item">&nbsp;</td>';
-        }
-        $datatable .= '</tr></table></td></tr>';
-        $rownum ++;
     } elsif ($position eq 'bottom') {
         my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom);
         my (@posstypes,%usertypeshash);
@@ -3384,11 +3151,6 @@ sub print_contacts {
     return $datatable;
 }
 
-sub core_link_msu {
-    return &Apache::loncommon::modal_link('http://loncapa.org/core.html',
-                                          &mt('LON-CAPA core group - MSU'),600,500);
-}
-
 sub overridden_helpdesk {
     my ($checked,$otheremails,$bccemails,$includeloc,$includestr,$type,$rowid,
         $typetitle,$css_class,$rowstyle,$contacts,$short_titles) = @_;
@@ -3943,412 +3705,6 @@ sub radiobutton_prefs {
     return ($datatable,$itemcount);
 }
 
-sub print_ltitools {
-    my ($dom,$settings,$rowtotal) = @_;
-    my $rownum = 0;
-    my $css_class;
-    my $itemcount = 1;
-    my $maxnum = 0;
-    my %ordered;
-    if (ref($settings) eq 'HASH') {
-        foreach my $item (keys(%{$settings})) {
-            if (ref($settings->{$item}) eq 'HASH') {
-                my $num = $settings->{$item}{'order'};
-                $ordered{$num} = $item;
-            }
-        }
-    }
-    my $confname = $dom.'-domainconfig';
-    my $switchserver = &check_switchserver($dom,$confname);
-    my $maxnum = scalar(keys(%ordered));
-    my $datatable;
-    my %lt = &ltitools_names();
-    my @courseroles = ('cc','in','ta','ep','st');
-    my @ltiroles = qw(Instructor ContentDeveloper TeachingAssistant Learner);
-    my @fields = ('fullname','firstname','lastname','email','roles','user');
-    if (keys(%ordered)) {
-        my @items = sort { $a <=> $b } keys(%ordered);
-        for (my $i=0; $i<@items; $i++) {
-            $css_class = $itemcount%2?' class="LC_odd_row"':'';
-            my $item = $ordered{$items[$i]};
-            my ($title,$key,$secret,$url,$lifetime,$imgsrc,%sigsel);
-            if (ref($settings->{$item}) eq 'HASH') {
-                $title = $settings->{$item}->{'title'};
-                $url = $settings->{$item}->{'url'};
-                $key = $settings->{$item}->{'key'};
-                $secret = $settings->{$item}->{'secret'};
-                $lifetime = $settings->{$item}->{'lifetime'};
-                my $image = $settings->{$item}->{'image'};
-                if ($image ne '') {
-                    $imgsrc = '<img src="'.$image.'" alt="'.&mt('Tool Provider icon').'" />';
-                }
-                if ($settings->{$item}->{'sigmethod'} eq 'HMAC-256') {
-                    $sigsel{'HMAC-256'} = ' selected="selected"';
-                } else {
-                    $sigsel{'HMAC-SHA1'} = ' selected="selected"';
-                }
-            }
-            my $chgstr = ' onchange="javascript:reorderLTITools(this.form,'."'ltitools_".$item."'".');"';
-            $datatable .= '<tr '.$css_class.'><td><span class="LC_nobreak">'
-                         .'<select name="ltitools_'.$item.'"'.$chgstr.'>';
-            for (my $k=0; $k<=$maxnum; $k++) {
-                my $vpos = $k+1;
-                my $selstr;
-                if ($k == $i) {
-                    $selstr = ' selected="selected" ';
-                }
-                $datatable .= '<option value="'.$k.'"'.$selstr.'>'.$vpos.'</option>';
-            }
-            $datatable .= '</select>'.('&nbsp;'x2).
-                '<label><input type="checkbox" name="ltitools_del" value="'.$item.'" />'.
-                &mt('Delete?').'</label></span></td>'.
-                '<td colspan="2">'.
-                '<fieldset><legend>'.&mt('Required settings').'</legend>'.
-                '<span class="LC_nobreak">'.$lt{'title'}.':<input type="text" size="20" name="ltitools_title_'.$i.'" value="'.$title.'" /></span> '.
-                ('&nbsp;'x2).
-                '<span class="LC_nobreak">'.$lt{'version'}.':<select name="ltitools_version_'.$i.'">'.
-                '<option value="LTI-1p0" selected="selected">1.1</option></select></span> '.
-                ('&nbsp;'x2).
-                '<span class="LC_nobreak">'.$lt{'msgtype'}.':<select name="ltitools_msgtype_'.$i.'">'.
-                '<option value="basic-lti-launch-request" selected="selected">Launch</option></select></span> '.
-                ('&nbsp;'x2).
-                '<span class="LC_nobreak">'.$lt{'sigmethod'}.':<select name="ltitools_sigmethod_'.$i.'">'.
-                '<option value="HMAC-SHA1"'.$sigsel{'HMAC-SHA1'}.'>HMAC-SHA1</option>'.
-                '<option value="HMAC-SHA256"'.$sigsel{'HMAC-SHA256'}.'>HMAC-SHA256</option></select></span>'.
-                '<br /><br />'.
-                '<span class="LC_nobreak">'.$lt{'url'}.':<input type="text" size="40" name="ltitools_url_'.$i.'"'.
-                ' value="'.$url.'" /></span>'.
-                ('&nbsp;'x2).
-                '<span class="LC_nobreak">'.$lt{'key'}.':'.
-                '<input type="text" size="25" name="ltitools_key_'.$i.'" value="'.$key.'" /></span> '.
-                ('&nbsp;'x2).
-                '<span class="LC_nobreak">'.$lt{'lifetime'}.':'.
-                '<input type="text" size="5" name="ltitools_lifetime_'.$i.'" value="'.$lifetime.'" /></span> '.
-                ('&nbsp;'x2).
-                '<span class="LC_nobreak">'.$lt{'secret'}.':'.
-                '<input type="password" size="20" name="ltitools_secret_'.$i.'" value="'.$secret.'" />'.
-                '<label><input type="checkbox" name="visible" onclick="if (this.checked) { this.form.ltitools_secret_'.$i.'.type='."'text'".' } else { this.form.ltitools_secret_'.$i.'.type='."'password'".' }" />'.&mt('Visible input').'</label>'.
-                '<input type="hidden" name="ltitools_id_'.$i.'" value="'.$item.'" /></span>'.
-                '</fieldset>'.
-                '<fieldset><legend>'.&mt('Optional settings').'</legend>'.
-                '<span class="LC_nobreak">'.&mt('Display target:');
-            my %currdisp;
-            if (ref($settings->{$item}->{'display'}) eq 'HASH') {
-                if ($settings->{$item}->{'display'}->{'target'} eq 'window') {
-                    $currdisp{'window'} = ' checked="checked"';
-                } elsif ($settings->{$item}->{'display'}->{'target'} eq 'tab') {
-                    $currdisp{'tab'} = ' checked="checked"';
-                } else {
-                    $currdisp{'iframe'} = ' checked="checked"';
-                }
-                if ($settings->{$item}->{'display'}->{'width'} =~ /^(\d+)$/) {
-                    $currdisp{'width'} = $1;
-                }
-                if ($settings->{$item}->{'display'}->{'height'} =~ /^(\d+)$/) {
-                     $currdisp{'height'} = $1;
-                }
-                $currdisp{'linktext'} = $settings->{$item}->{'display'}->{'linktext'};
-                $currdisp{'explanation'} = $settings->{$item}->{'display'}->{'explanation'};
-            } else {
-                $currdisp{'iframe'} = ' checked="checked"';
-            }
-            foreach my $disp ('iframe','tab','window') {
-                $datatable .= '<label><input type="radio" name="ltitools_target_'.$i.'" value="'.$disp.'"'.$currdisp{$disp}.' />'.
-                              $lt{$disp}.'</label>'.('&nbsp;'x2);
-            }
-            $datatable .= ('&nbsp;'x4);
-            foreach my $dimen ('width','height') {
-                $datatable .= '<label>'.$lt{$dimen}.'&nbsp;'.
-                              '<input type="text" name="ltitools_'.$dimen.'_'.$i.'" size="5" value="'.$currdisp{$dimen}.'" /></label>'.
-                              ('&nbsp;'x2);
-            }
-            $datatable .= '</span><br />'.
-                          '<div class="LC_left_float">'.$lt{'linktext'}.'<br />'.
-                          '<input type="text" name="ltitools_linktext_'.$i.'" size="25" value="'.$currdisp{'linktext'}.'" /></div>'.
-                          '<div class="LC_left_float">'.$lt{'explanation'}.'<br />'.
-                          '<textarea name="ltitools_explanation_'.$i.'" rows="5" cols="40">'.$currdisp{'explanation'}.
-                          '</textarea></div><div style=""></div>'.
-                          '<div style="padding:0;clear:both;margin:0;border:0"></div>';
-            $datatable .= '<span class="LC_nobreak">'.$lt{'icon'}.':&nbsp;';
-            if ($imgsrc) {
-                $datatable .= $imgsrc.
-                              '<label><input type="checkbox" name="ltitools_image_del"'.
-                              ' value="'.$item.'" />'.&mt('Delete?').'</label></span> '.
-                              '<span class="LC_nobreak">&nbsp;'.&mt('Replace:').'&nbsp;';
-            } else {
-                $datatable .= '('.&mt('if larger than 21x21 pixels, image will be scaled').')&nbsp;';
-            }
-            if ($switchserver) {
-                $datatable .= &mt('Upload to library server: [_1]',$switchserver);
-            } else {
-                $datatable .= '<input type="file" name="ltitools_image_'.$i.'" value="" />';
-            }
-            $datatable .= '</span></fieldset>';
-            my (%checkedfields,%rolemaps,$userincdom);
-            if (ref($settings->{$item}) eq 'HASH') {
-                if (ref($settings->{$item}->{'fields'}) eq 'HASH') {
-                    %checkedfields = %{$settings->{$item}->{'fields'}};
-                }
-                $userincdom = $settings->{$item}->{'incdom'};
-                if (ref($settings->{$item}->{'roles'}) eq 'HASH') {
-                    %rolemaps = %{$settings->{$item}->{'roles'}};
-                    $checkedfields{'roles'} = 1;
-                }
-            }
-            $datatable .= '<fieldset><legend>'.&mt('User data sent on launch').'</legend>'.
-                          '<span class="LC_nobreak">';
-            my $userfieldstyle = 'display:none;';
-            my $seluserdom = '';
-            my $unseluserdom = ' selected="selected"';
-            foreach my $field (@fields) {
-                my ($checked,$onclick,$id,$spacer);
-                if ($checkedfields{$field}) {
-                    $checked = ' checked="checked"';
-                }
-                if ($field eq 'user') {
-                    $id = ' id="ltitools_user_field_'.$i.'"';
-                    $onclick = ' onclick="toggleLTITools(this.form,'."'$field','$i'".')"';
-                    if ($checked) {
-                        $userfieldstyle = 'display:inline-block';
-                        if ($userincdom) {
-                            $seluserdom = $unseluserdom;
-                            $unseluserdom = '';
-                        }
-                    }
-                } else {
-                    $spacer = ('&nbsp;' x2);
-                }
-                $datatable .= '<label>'.
-                              '<input type="checkbox" name="ltitools_fields_'.$i.'" value="'.$field.'"'.$id.$checked.$onclick.' />'.
-                              $lt{$field}.'</label>'.$spacer;
-            }
-            $datatable .= '</span>';
-            $datatable .= '<div style="'.$userfieldstyle.'" id="ltitools_user_div_'.$i.'">'.
-                          '<span class="LC_nobreak"> : '.
-                          '<select name="ltitools_userincdom_'.$i.'">'.
-                          '<option value="">'.&mt('Select').'</option>'.
-                          '<option value="0"'.$unseluserdom.'>'.&mt('username').'</option>'.
-                          '<option value="1"'.$seluserdom.'>'.&mt('username:domain').'</option>'.
-                          '</select></span></div>';
-            $datatable .= '</fieldset>'.
-                          '<fieldset><legend>'.&mt('Role mapping').'</legend><table><tr>';
-            foreach my $role (@courseroles) {
-                my ($selected,$selectnone);
-                if (!$rolemaps{$role}) {
-                    $selectnone = ' selected="selected"';
-                }
-                $datatable .= '<td align="center">'.
-                              &Apache::lonnet::plaintext($role,'Course').'<br />'.
-                              '<select name="ltitools_roles_'.$role.'_'.$i.'">'.
-                              '<option value=""'.$selectnone.'>'.&mt('Select').'</option>';
-                foreach my $ltirole (@ltiroles) {
-                    unless ($selectnone) {
-                        if ($rolemaps{$role} eq $ltirole) {
-                            $selected = ' selected="selected"';
-                        } else {
-                            $selected = '';
-                        }
-                    }
-                    $datatable .= '<option value="'.$ltirole.'"'.$selected.'>'.$ltirole.'</option>';
-                }
-                $datatable .= '</select></td>';
-            }
-            $datatable .= '</tr></table></fieldset>';
-            my %courseconfig;
-            if (ref($settings->{$item}) eq 'HASH') {
-                if (ref($settings->{$item}->{'crsconf'}) eq 'HASH') {
-                    %courseconfig = %{$settings->{$item}->{'crsconf'}};
-                }
-            }
-            $datatable .= '<fieldset><legend>'.&mt('Configurable in course').'</legend><span class="LC_nobreak">';
-            foreach my $item ('label','title','target','linktext','explanation','append') {
-                my $checked;
-                if ($courseconfig{$item}) {
-                    $checked = ' checked="checked"';
-                }
-                $datatable .= '<label>'.
-                       '<input type="checkbox" name="ltitools_courseconfig_'.$i.'" value="'.$item.'"'.$checked.' />'.
-                       $lt{'crs'.$item}.'</label>'.('&nbsp;' x2)."\n";
-            }
-            $datatable .= '</span></fieldset>'.
-                          '<fieldset><legend>'.&mt('Custom items sent on launch').'</legend>'.
-                          '<table><tr><th>'.&mt('Action').'</th><th>'.&mt('Name').'</th><th>'.&mt('Value').'</th></tr>';
-            if (ref($settings->{$item}->{'custom'}) eq 'HASH') {
-                my %custom = %{$settings->{$item}->{'custom'}};
-                if (keys(%custom) > 0) {
-                    foreach my $key (sort(keys(%custom))) {
-                        $datatable .= '<tr><td><span class="LC_nobreak">'.
-                                      '<label><input type="checkbox" name="ltitools_customdel_'.$i.'" value="'.
-                                      $key.'" />'.&mt('Delete').'</label></span></td><td>'.$key.'</td>'.
-                                      '<td><input type="text" name="ltitools_customval_'.$key.'_'.$i.'"'.
-                                      ' value="'.$custom{$key}.'" /></td></tr>';
-                    }
-                }
-            }
-            $datatable .= '<tr><td><span class="LC_nobreak">'.
-                          '<label><input type="checkbox" name="ltitools_customadd" value="'.$i.'" />'.
-                          &mt('Add').'</label></span></td><td><input type="text" name="ltitools_custom_name_'.$i.'" />'.
-                          '</td><td><input type="text" name="ltitools_custom_value_'.$i.'" /></td></tr>';
-            $datatable .= '</table></fieldset></td></tr>'."\n";
-            $itemcount ++;
-        }
-    }
-    $css_class = $itemcount%2?' class="LC_odd_row"':'';
-    my $chgstr = ' onchange="javascript:reorderLTITools(this.form,'."'ltitools_add_pos'".');"';
-    $datatable .= '<tr '.$css_class.'><td><span class="LC_nobreak">'."\n".
-                  '<input type="hidden" name="ltitools_maxnum" value="'.$maxnum.'" />'."\n".
-                  '<select name="ltitools_add_pos"'.$chgstr.'>';
-    for (my $k=0; $k<$maxnum+1; $k++) {
-        my $vpos = $k+1;
-        my $selstr;
-        if ($k == $maxnum) {
-            $selstr = ' selected="selected" ';
-        }
-        $datatable .= '<option value="'.$k.'"'.$selstr.'>'.$vpos.'</option>';
-    }
-    $datatable .= '</select>&nbsp;'."\n".
-                  '<input type="checkbox" name="ltitools_add" value="1" />'.&mt('Add').'</span></td>'."\n".
-                  '<td colspan="2">'.
-                  '<fieldset><legend>'.&mt('Required settings').'</legend>'.
-                  '<span class="LC_nobreak">'.$lt{'title'}.':<input type="text" size="20" name="ltitools_add_title" value="" /></span> '."\n".
-                  ('&nbsp;'x2).
-                  '<span class="LC_nobreak">'.$lt{'version'}.':<select name="ltitools_add_version">'.
-                  '<option value="LTI-1p0" selected="selected">1.1</option></select></span> '."\n".
-                  ('&nbsp;'x2).
-                  '<span class="LC_nobreak">'.$lt{'msgtype'}.':<select name="ltitools_add_msgtype">'.
-                  '<option value="basic-lti-launch-request" selected="selected">Launch</option></select></span> '.
-                  '<span class="LC_nobreak">'.$lt{'sigmethod'}.':<select name="ltitools_add_sigmethod">'.
-                  '<option value="HMAC-SHA1" selected="selected">HMAC-SHA1</option>'.
-                  '<option value="HMAC-SHA256">HMAC-SHA256</option></select></span>'.
-                  '<br />'.
-                  '<span class="LC_nobreak">'.$lt{'url'}.':<input type="text" size="40" name="ltitools_add_url" value="" /></span> '."\n".
-                  ('&nbsp;'x2).
-                  '<span class="LC_nobreak">'.$lt{'key'}.':<input type="text" size="25" name="ltitools_add_key" value="" /></span> '."\n".
-                  ('&nbsp;'x2).
-                  '<span class="LC_nobreak">'.$lt{'lifetime'}.':<input type="text" size="5" name="ltitools_add_lifetime" value="300" /></span> '."\n".
-                  ('&nbsp;'x2).
-                  '<span class="LC_nobreak">'.$lt{'secret'}.':<input type="password" size="20" name="ltitools_add_secret" value="" />'.
-                  '<label><input type="checkbox" name="visible" onclick="if (this.checked) { this.form.ltitools_add_secret.type='."'text'".' } else { this.form.ltitools_add_secret.type='."'password'".' }" />'.&mt('Visible input').'</label></span> '."\n".
-                  '</fieldset>'.
-                  '<fieldset><legend>'.&mt('Optional settings').'</legend>'.
-                  '<span class="LC_nobreak">'.&mt('Display target:');
-    my %defaultdisp;
-    $defaultdisp{'iframe'} = ' checked="checked"';
-    foreach my $disp ('iframe','tab','window') {
-        $datatable .= '<label><input type="radio" name="ltitools_add_target" value="'.$disp.'"'.$defaultdisp{$disp}.' />'.
-                      $lt{$disp}.'</label>'.('&nbsp;'x2);
-    }
-    $datatable .= ('&nbsp;'x4);
-    foreach my $dimen ('width','height') {
-        $datatable .= '<label>'.$lt{$dimen}.'&nbsp;'.
-                      '<input type="text" name="ltitools_add_'.$dimen.'" size="5" /></label>'.
-                      ('&nbsp;'x2);
-    }
-    $datatable .= '</span><br />'.
-                  '<div class="LC_left_float">'.$lt{'linktext'}.'<br />'.
-                  '<input type="text" name="ltitools_add_linktext" size="5" /></div>'.
-                  '<div class="LC_left_float">'.$lt{'explanation'}.'<br />'.
-                  '<textarea name="ltitools_add_explanation" rows="5" cols="40"></textarea>'.
-                  '</div><div style=""></div>'.
-                  '<div style="padding:0;clear:both;margin:0;border:0"></div>';
-    $datatable .= '<span class="LC_nobreak">'.$lt{'icon'}.':&nbsp;'.
-                  '('.&mt('if larger than 21x21 pixels, image will be scaled').')&nbsp;';
-    if ($switchserver) {
-        $datatable .= &mt('Upload to library server: [_1]',$switchserver);
-    } else {
-        $datatable .= '<input type="file" name="ltitools_add_image" value="" />';
-    }
-    $datatable .= '</span></fieldset>'.
-                  '<fieldset><legend>'.&mt('User data sent on launch').'</legend>'.
-                  '<span class="LC_nobreak">';
-    foreach my $field (@fields) {
-        my ($id,$onclick,$spacer);
-        if ($field eq 'user') {
-            $id = ' id="ltitools_user_field_add"';
-            $onclick = ' onclick="toggleLTITools(this.form,'."'$field','add'".')"';
-        } else {
-            $spacer = ('&nbsp;' x2);
-        }
-        $datatable .= '<label>'.
-                      '<input type="checkbox" name="ltitools_add_fields" value="'.$field.'"'.$id.$onclick.' />'.
-                      $lt{$field}.'</label>'.$spacer;
-    }
-    $datatable .= '</span>'.
-                  '<div style="display:none;" id="ltitools_user_div_add">'.
-                  '<span class="LC_nobreak"> : '.
-                  '<select name="ltitools_userincdom_add">'.
-                  '<option value="" selected="selected">'.&mt('Select').'</option>'.
-                  '<option value="0">'.&mt('username').'</option>'.
-                  '<option value="1">'.&mt('username:domain').'</option>'.
-                  '</select></span></div></fieldset>';
-    $datatable .= '<fieldset><legend>'.&mt('Role mapping').'</legend><table><tr>';
-    foreach my $role (@courseroles) {
-        my ($checked,$checkednone);
-        $datatable .= '<td align="center">'.
-                      &Apache::lonnet::plaintext($role,'Course').'<br />'.
-                      '<select name="ltitools_add_roles_'.$role.'">'.
-                      '<option value="" selected="selected">'.&mt('Select').'</option>';
-        foreach my $ltirole (@ltiroles) {
-            $datatable .= '<option value="'.$ltirole.'">'.$ltirole.'</option>';
-        }
-        $datatable .= '</select></td>';
-    }
-    $datatable .= '</tr></table></fieldset>'.
-                  '<fieldset><legend>'.&mt('Configurable in course').'</legend><span class="LC_nobreak">';
-    foreach my $item ('label','title','target','linktext','explanation','append') {
-        $datatable .= '<label>'.
-                      '<input type="checkbox" name="ltitools_courseconfig" value="'.$item.'" checked="checked" />'.
-                      $lt{'crs'.$item}.'</label>'.('&nbsp;' x2)."\n";
-    }
-    $datatable .= '</span></fieldset>'.
-                  '<fieldset><legend>'.&mt('Custom items sent on launch').'</legend>'.
-                  '<table><tr><th>'.&mt('Action').'</th><th>'.&mt('Name').'</th><th>'.&mt('Value').'</th></tr>'.
-                  '<tr><td><span class="LC_nobreak">'.
-                  '<label><input type="checkbox" name="ltitools_add_custom" value="1" />'.
-                  &mt('Add').'</label></span></td><td><input type="text" name="ltitools_add_custom_name" />'.
-                  '</td><td><input type="text" name="ltitools_add_custom_value" /></td></tr>'.
-                  '</table></fieldset>'."\n".
-                  '</td>'."\n".
-                  '</tr>'."\n";
-    $itemcount ++;
-    return $datatable;
-}
-
-sub ltitools_names {
-    my %lt = &Apache::lonlocal::texthash(
-                                          'title'          => 'Title',
-                                          'version'        => 'Version',
-                                          'msgtype'        => 'Message Type',
-                                          'sigmethod'      => 'Signature Method',
-                                          'url'            => 'URL',
-                                          'key'            => 'Key',
-                                          'lifetime'       => 'Nonce lifetime (s)',
-                                          'secret'         => 'Secret',
-                                          'icon'           => 'Icon',
-                                          'user'           => 'User',
-                                          'fullname'       => 'Full Name',
-                                          'firstname'      => 'First Name',
-                                          'lastname'       => 'Last Name',
-                                          'email'          => 'E-mail',
-                                          'roles'          => 'Role',
-                                          'window'         => 'Window',
-                                          'tab'            => 'Tab',
-                                          'iframe'         => 'iFrame',
-                                          'height'         => 'Height',
-                                          'width'          => 'Width',
-                                          'linktext'       => 'Default Link Text',
-                                          'explanation'    => 'Default Explanation',
-                                          'crstarget'      => 'Display target',
-                                          'crslabel'       => 'Course label',
-                                          'crstitle'       => 'Course title',
-                                          'crslinktext'    => 'Link Text',
-                                          'crsexplanation' => 'Explanation',
-                                          'crsappend'      => 'Provider URL',
-                                        );
-
-    return %lt;
-}
-
 sub print_coursedefaults {
     my ($position,$dom,$settings,$rowtotal) = @_;
     my ($css_class,$datatable,%checkedon,%checkedoff,%defaultchecked,@toggles);
@@ -4415,7 +3771,7 @@ sub print_coursedefaults {
         my $currcanclone = 'none';
         my $onclick;
         my @cloneoptions = ('none','domain');
-        my %clonetitles = &Apache::lonlocal::texthash (
+        my %clonetitles = (
                              none     => 'No additional course requesters',
                              domain   => "Any course requester in course's domain",
                              instcode => 'Course requests for official courses ...',
@@ -6125,10 +5481,6 @@ sub contact_titles {
                    'updatesmail'     => 'E-mail from nightly check of LON-CAPA module integrity/updates',
                    'idconflictsmail' => 'E-mail from bi-nightly check for multiple users sharing same student/employee ID',
                    'hostipmail'      => 'E-mail from nightly check of hostname/IP network changes',
-                   'errorthreshold'  => 'Error count threshold for status e-mail to admin(s)',
-                   'errorsysmail'    => 'Error count threshold for e-mail to developer group',
-                   'errorweights'    => 'Weights used to compute error count',
-                   'errorexcluded'   => 'Servers with unsent updates excluded from count',
                  );
     my %short_titles = &Apache::lonlocal::texthash (
                            adminemail   => 'Admin E-mail address',
@@ -7171,7 +6523,7 @@ sub print_defaults {
                     $datatable .= '</select>&nbsp;'.&mt('Internal ID:').'&nbsp;<b>'.$item.'</b>&nbsp;'.
                                   '<input type="checkbox" name="inststatus_delete" value="'.$item.'" />'.
                                   &mt('delete').'</span></td>'.
-                                  '<td class="LC_left_item"><span class="LC_nobreak">'.&mt('Name displayed').':'.
+                                  '<td class="LC_left_item"><span class="LC_nobreak">'.&mt('Name displayed:').
                                   '<input type="text" size="20" name="inststatus_title_'.$item.'" value="'.$title.'" />'.
                                   '</span></td></tr>';
                 }
@@ -7191,7 +6543,7 @@ sub print_defaults {
                               '<input type="text" size="10" name="addinststatus" value="" />'.
                               '&nbsp;'.&mt('(new)').
                               '</span></td><td class="LC_left_item"><span class="LC_nobreak">'.
-                              &mt('Name displayed').':'.
+                              &mt('Name displayed:').
                               '<input type="text" size="20" name="addinststatus_title" value="" /></span></td>'.
                               '</tr>'."\n";
                 $rownum ++;
@@ -8161,7 +7513,7 @@ ENDSCRIPT
 sub initialize_categories {
     my ($itemcount) = @_;
     my ($datatable,$css_class,$chgstr);
-    my %default_names = &Apache::lonlocal::texthash (
+    my %default_names = (
                       instcode    => 'Official courses (with institutional codes)',
                       communities => 'Communities',
                         );
@@ -10549,612 +9901,6 @@ sub process_textbook_image {
     return ($url,$error);
 }
 
-sub modify_ltitools {
-    my ($r,$dom,$action,$lastactref,%domconfig) = @_;
-    my %domdefaults = &Apache::lonnet::get_domain_defaults($dom,1);
-    my ($newid,@allpos,%changes,%confhash,%encconfig,$errors,$resulttext);
-    my $confname = $dom.'-domainconfig';
-    my $servadm = $r->dir_config('lonAdmEMail');
-    my ($configuserok,$author_ok,$switchserver) = &config_check($dom,$confname,$servadm);
-    my (%posslti,%possfield);
-    my @courseroles = ('cc','in','ta','ep','st');
-    my @ltiroles = qw(Instructor ContentDeveloper TeachingAssistant Learner);
-    map { $posslti{$_} = 1; } @ltiroles;
-    my @allfields = ('fullname','firstname','lastname','email','user','roles');
-    map { $possfield{$_} = 1; } @allfields;
-    my %lt = &ltitools_names();
-    if ($env{'form.ltitools_add'}) {
-        my $title = $env{'form.ltitools_add_title'};
-        $title =~ s/(`)/'/g;
-        ($newid,my $error) = &get_ltitools_id($dom,$title);
-        if ($newid) {
-            my $position = $env{'form.ltitools_add_pos'};
-            $position =~ s/\D+//g;
-            if ($position ne '') {
-                $allpos[$position] = $newid;
-            }
-            $changes{$newid} = 1;
-            foreach my $item ('title','url','key','secret','lifetime') {
-                $env{'form.ltitools_add_'.$item} =~ s/(`)/'/g;
-                if ($item eq 'lifetime') {
-                    $env{'form.ltitools_add_'.$item} =~ s/[^\d.]//g;
-                }
-                if ($env{'form.ltitools_add_'.$item}) {
-                    if (($item eq 'key') || ($item eq 'secret')) {
-                        $encconfig{$newid}{$item} = $env{'form.ltitools_add_'.$item};
-                    } else {
-                        $confhash{$newid}{$item} = $env{'form.ltitools_add_'.$item};
-                    }
-                }
-            }
-            if ($env{'form.ltitools_add_version'} eq 'LTI-1p0') {
-                $confhash{$newid}{'version'} = $env{'form.ltitools_add_version'};
-            }
-            if ($env{'form.ltitools_add_msgtype'} eq 'basic-lti-launch-request') {
-                $confhash{$newid}{'msgtype'} = $env{'form.ltitools_add_msgtype'};
-            }
-            if ($env{'form.ltitools_add_sigmethod'} eq 'HMAC-SHA256') {
-                $confhash{$newid}{'sigmethod'} = $env{'form.ltitools_add_sigmethod'};
-            } else {
-                $confhash{$newid}{'sigmethod'} = 'HMAC-SHA1';
-            }
-            foreach my $item ('width','height','linktext','explanation') {
-                $env{'form.ltitools_add_'.$item} =~ s/^\s+//;
-                $env{'form.ltitools_add_'.$item} =~ s/\s+$//;
-                if (($item eq 'width') || ($item eq 'height')) {
-                    if ($env{'form.ltitools_add_'.$item} =~ /^\d+$/) {
-                        $confhash{$newid}{'display'}{$item} = $env{'form.ltitools_add_'.$item};
-                    }
-                } else {
-                    if ($env{'form.ltitools_add_'.$item} ne '') {
-                        $confhash{$newid}{'display'}{$item} = $env{'form.ltitools_add_'.$item};
-                    }
-                }
-            }
-            if ($env{'form.ltitools_add_target'} eq 'window') {
-                $confhash{$newid}{'display'}{'target'} = $env{'form.ltitools_add_target'};
-            } elsif ($env{'form.ltitools_add_target'} eq 'tab') {
-                $confhash{$newid}{'display'}{'target'} = $env{'form.ltitools_add_target'};
-            } else {
-                $confhash{$newid}{'display'}{'target'} = 'iframe';
-            }
-            if ($env{'form.ltitools_add_image.filename'} ne '') {
-                my ($imageurl,$error) =
-                    &process_ltitools_image($r,$dom,$confname,'ltitools_add_image',$newid,
-                                            $configuserok,$switchserver,$author_ok);
-                if ($imageurl) {
-                    $confhash{$newid}{'image'} = $imageurl;
-                }
-                if ($error) {
-                    &Apache::lonnet::logthis($error);
-                    $errors .= '<li><span class="LC_error">'.$error.'</span></li>';
-                }
-            }
-            my @fields = &Apache::loncommon::get_env_multiple('form.ltitools_add_fields');
-            foreach my $field (@fields) {
-                if ($possfield{$field}) {
-                    if ($field eq 'roles') {
-                        foreach my $role (@courseroles) {
-                            my $choice = $env{'form.ltitools_add_roles_'.$role};
-                            if (($choice ne '') && ($posslti{$choice})) {
-                                $confhash{$newid}{'roles'}{$role} = $choice;
-                                if ($role eq 'cc') {
-                                    $confhash{$newid}{'roles'}{'co'} = $choice;
-                                }
-                            }
-                        }
-                    } else {
-                        $confhash{$newid}{'fields'}{$field} = 1;
-                    }
-                }
-            }
-            if (ref($confhash{$newid}{'fields'}) eq 'HASH') {
-                if ($confhash{$newid}{'fields'}{'user'}) {
-                    if ($env{'form.ltitools_userincdom_add'}) {
-                        $confhash{$newid}{'incdom'} = 1;
-                    }
-                }
-            }
-            my @courseconfig = &Apache::loncommon::get_env_multiple('form.ltitools_courseconfig');
-            foreach my $item (@courseconfig) {
-                $confhash{$newid}{'crsconf'}{$item} = 1;
-            }
-            if ($env{'form.ltitools_add_custom'}) {
-                my $name = $env{'form.ltitools_add_custom_name'};
-                my $value = $env{'form.ltitools_add_custom_value'};
-                $value =~ s/(`)/'/g;
-                $name =~ s/(`)/'/g;
-                $confhash{$newid}{'custom'}{$name} = $value;
-            }
-        } else {
-            my $error = &mt('Failed to acquire unique ID for new external tool');
-            $errors .= '<li><span class="LC_error">'.$error.'</span></li>';
-        }
-    }
-    if (ref($domconfig{$action}) eq 'HASH') {
-        my %deletions;
-        my @todelete = &Apache::loncommon::get_env_multiple('form.ltitools_del');
-        if (@todelete) {
-            map { $deletions{$_} = 1; } @todelete;
-        }
-        my %customadds;
-        my @newcustom = &Apache::loncommon::get_env_multiple('form.ltitools_customadd');
-        if (@newcustom) {
-            map { $customadds{$_} = 1; } @newcustom;
-        }
-        my %imgdeletions;
-        my @todeleteimages = &Apache::loncommon::get_env_multiple('form.ltitools_image_del');
-        if (@todeleteimages) {
-            map { $imgdeletions{$_} = 1; } @todeleteimages;
-        }
-        my $maxnum = $env{'form.ltitools_maxnum'};
-        for (my $i=0; $i<=$maxnum; $i++) {
-            my $itemid = $env{'form.ltitools_id_'.$i};
-            $itemid =~ s/\D+//g;
-            if (ref($domconfig{$action}{$itemid}) eq 'HASH') {
-                if ($deletions{$itemid}) {
-                    if ($domconfig{$action}{$itemid}{'image'}) {
-                        #FIXME need to obsolete item in RES space
-                    }
-                    $changes{$itemid} = $domconfig{$action}{$itemid}{'title'};
-                    next;
-                } else {
-                    my $newpos = $env{'form.ltitools_'.$itemid};
-                    $newpos =~ s/\D+//g;
-                    foreach my $item ('title','url','lifetime') {
-                        $confhash{$itemid}{$item} = $env{'form.ltitools_'.$item.'_'.$i};
-                        if ($domconfig{$action}{$itemid}{$item} ne $confhash{$itemid}{$item}) {
-                            $changes{$itemid} = 1;
-                        }
-                    }
-                    foreach my $item ('key','secret') {
-                        $encconfig{$itemid}{$item} = $env{'form.ltitools_'.$item.'_'.$i};
-                        if ($domconfig{$action}{$itemid}{$item} ne $encconfig{$itemid}{$item}) {
-                            $changes{$itemid} = 1;
-                        }
-                    }
-                    if ($env{'form.ltitools_version_'.$i} eq 'LTI-1p0') {
-                        $confhash{$itemid}{'version'} = $env{'form.ltitools_version_'.$i};
-                    }
-                    if ($env{'form.ltitools_msgtype_'.$i} eq 'basic-lti-launch-request') {
-                        $confhash{$itemid}{'msgtype'} = $env{'form.ltitools_msgtype_'.$i};
-                    }
-                    if ($env{'form.ltitools_sigmethod_'.$i} eq 'HMAC-SHA256') {
-                        $confhash{$itemid}{'sigmethod'} = $env{'form.ltitools_sigmethod_'.$i};
-                    } else {
-                        $confhash{$itemid}{'sigmethod'} = 'HMAC-SHA1';
-                    }
-                    if ($domconfig{$action}{$itemid}{'sigmethod'} eq '') {
-                        if ($confhash{$itemid}{'sigmethod'} ne 'HMAC-SHA1') {
-                            $changes{$itemid} = 1;
-                        }
-                    } elsif ($domconfig{$action}{$itemid}{'sigmethod'} ne $confhash{$itemid}{'sigmethod'}) {
-                        $changes{$itemid} = 1;
-                    }
-                    foreach my $size ('width','height') {
-                        $env{'form.ltitools_'.$size.'_'.$i} =~ s/^\s+//;
-                        $env{'form.ltitools_'.$size.'_'.$i} =~ s/\s+$//;
-                        if ($env{'form.ltitools_'.$size.'_'.$i} =~ /^\d+$/) {
-                            $confhash{$itemid}{'display'}{$size} = $env{'form.ltitools_'.$size.'_'.$i};
-                            if (ref($domconfig{$action}{$itemid}{'display'}) eq 'HASH') {
-                                if ($domconfig{$action}{$itemid}{'display'}{$size} ne $confhash{$itemid}{'display'}{$size}) {
-                                    $changes{$itemid} = 1;
-                                }
-                            } else {
-                                $changes{$itemid} = 1;
-                            }
-                        } elsif (ref($domconfig{$action}{$itemid}{'display'}) eq 'HASH') {
-                            if ($domconfig{$action}{$itemid}{'display'}{$size} ne '') {
-                                $changes{$itemid} = 1;
-                            }
-                        }
-                    }
-                    foreach my $item ('linktext','explanation') {
-                        $env{'form.ltitools_'.$item.'_'.$i} =~ s/^\s+//;
-                        $env{'form.ltitools_'.$item.'_'.$i} =~ s/\s+$//;
-                        if ($env{'form.ltitools_'.$item.'_'.$i} ne '') {
-                            $confhash{$itemid}{'display'}{$item} = $env{'form.ltitools_'.$item.'_'.$i};
-                            if (ref($domconfig{$action}{$itemid}{'display'}) eq 'HASH') {
-                                if ($domconfig{$action}{$itemid}{'display'}{$item} ne $confhash{$itemid}{'display'}{$item}) {
-                                    $changes{$itemid} = 1;
-                                }
-                            } else {
-                                $changes{$itemid} = 1;
-                            }
-                        } elsif (ref($domconfig{$action}{$itemid}{'display'}) eq 'HASH') {
-                            if ($domconfig{$action}{$itemid}{'display'}{$item} ne '') {
-                                $changes{$itemid} = 1;
-                            }
-                        }
-                    }
-                    if ($env{'form.ltitools_target_'.$i} eq 'window') {
-                        $confhash{$itemid}{'display'}{'target'} = $env{'form.ltitools_target_'.$i};
-                    } elsif ($env{'form.ltitools_target_'.$i} eq 'tab') {
-                        $confhash{$itemid}{'display'}{'target'} = $env{'form.ltitools_target_'.$i};
-                    } else {
-                        $confhash{$itemid}{'display'}{'target'} = 'iframe';
-                    }
-                    if (ref($domconfig{$action}{$itemid}{'display'}) eq 'HASH') {
-                        if ($domconfig{$action}{$itemid}{'display'}{'target'} ne $confhash{$itemid}{'display'}{'target'}) {
-                            $changes{$itemid} = 1;
-                        }
-                    } else {
-                        $changes{$itemid} = 1;
-                    }
-                    my @courseconfig = &Apache::loncommon::get_env_multiple('form.ltitools_courseconfig_'.$i);
-                    foreach my $item ('label','title','target','linktext','explanation','append') {
-                        if (grep(/^\Q$item\E$/,@courseconfig)) {
-                            $confhash{$itemid}{'crsconf'}{$item} = 1;
-                            if (ref($domconfig{$action}{$itemid}{'crsconf'}) eq 'HASH') {
-                                if ($domconfig{$action}{$itemid}{'crsconf'}{$item} ne $confhash{$itemid}{'crsconf'}{$item}) {
-                                    $changes{$itemid} = 1;
-                                }
-                            } else {
-                                $changes{$itemid} = 1;
-                            }
-                        }
-                    }
-                    my @fields = &Apache::loncommon::get_env_multiple('form.ltitools_fields_'.$i);
-                    foreach my $field (@fields) {
-                        if ($possfield{$field}) {
-                            if ($field eq 'roles') {
-                                foreach my $role (@courseroles) {
-                                    my $choice = $env{'form.ltitools_roles_'.$role.'_'.$i};
-                                    if (($choice ne '') && ($posslti{$choice})) {
-                                        $confhash{$itemid}{'roles'}{$role} = $choice;
-                                        if ($role eq 'cc') {
-                                            $confhash{$itemid}{'roles'}{'co'} = $choice;
-                                        }
-                                    }
-                                    if (ref($domconfig{$action}{$itemid}{'roles'}) eq 'HASH') {
-                                        if ($domconfig{$action}{$itemid}{'roles'}{$role} ne $confhash{$itemid}{'roles'}{$role}) {
-                                            $changes{$itemid} = 1;
-                                        }
-                                    } elsif ($confhash{$itemid}{'roles'}{$role}) {
-                                        $changes{$itemid} = 1;
-                                    }
-                                }
-                            } else {
-                                $confhash{$itemid}{'fields'}{$field} = 1;
-                                if (ref($domconfig{$action}{$itemid}{'fields'}) eq 'HASH') {
-                                    if ($domconfig{$action}{$itemid}{'fields'}{$field} ne $confhash{$itemid}{'fields'}{$field}) {
-                                        $changes{$itemid} = 1;
-                                    }
-                                } else {
-                                    $changes{$itemid} = 1;
-                                }
-                            }
-                        }
-                    }
-                    if (ref($confhash{$itemid}{'fields'}) eq 'HASH') {
-                        if ($confhash{$itemid}{'fields'}{'user'}) {
-                            if ($env{'form.ltitools_userincdom_'.$i}) {
-                                $confhash{$itemid}{'incdom'} = 1;
-                            }
-                            if ($domconfig{$action}{$itemid}{'incdom'} ne $confhash{$itemid}{'incdom'}) {
-                                $changes{$itemid} = 1;
-                            }
-                        }
-                    }
-                    $allpos[$newpos] = $itemid;
-                }
-                if ($imgdeletions{$itemid}) {
-                    $changes{$itemid} = 1;
-                    #FIXME need to obsolete item in RES space
-                } elsif ($env{'form.ltitools_image_'.$i.'.filename'}) {
-                    my ($imgurl,$error) = &process_ltitools_image($r,$dom,$confname,'ltitools_image_'.$i,
-                                                                 $itemid,$configuserok,$switchserver,
-                                                                 $author_ok);
-                    if ($imgurl) {
-                        $confhash{$itemid}{'image'} = $imgurl;
-                        $changes{$itemid} = 1;
-                    }
-                    if ($error) {
-                        &Apache::lonnet::logthis($error);
-                        $errors .= '<li><span class="LC_error">'.$error.'</span></li>';
-                    }
-                } elsif ($domconfig{$action}{$itemid}{'image'}) {
-                    $confhash{$itemid}{'image'} =
-                       $domconfig{$action}{$itemid}{'image'};
-                }
-                if ($customadds{$i}) {
-                    my $name = $env{'form.ltitools_custom_name_'.$i};
-                    $name =~ s/(`)/'/g;
-                    $name =~ s/^\s+//;
-                    $name =~ s/\s+$//;
-                    my $value = $env{'form.ltitools_custom_value_'.$i};
-                    $value =~ s/(`)/'/g;
-                    $value =~ s/^\s+//;
-                    $value =~ s/\s+$//;
-                    if ($name ne '') {
-                        $confhash{$itemid}{'custom'}{$name} = $value;
-                        $changes{$itemid} = 1;
-                    }
-                }
-                my %customdels;
-                my @customdeletions = &Apache::loncommon::get_env_multiple('form.ltitools_customdel_'.$i);
-                if (@customdeletions) {
-                    $changes{$itemid} = 1;
-                }
-                map { $customdels{$_} = 1; } @customdeletions;
-                if (ref($domconfig{$action}{$itemid}{'custom'}) eq 'HASH') {
-                    foreach my $key (keys(%{$domconfig{$action}{$itemid}{'custom'}})) {
-                        unless ($customdels{$key}) {
-                            if ($env{'form.ltitools_customval_'.$key.'_'.$i} ne '') {
-                                $confhash{$itemid}{'custom'}{$key} = $env{'form.ltitools_customval_'.$key.'_'.$i};
-                            }
-                            if ($domconfig{$action}{$itemid}{'custom'}{$key} ne $env{'form.ltitools_customval_'.$key.'_'.$i}) {
-                                $changes{$itemid} = 1;
-                            }
-                        }
-                    }
-                }
-                unless ($changes{$itemid}) {
-                    foreach my $key (keys(%{$domconfig{$action}{$itemid}})) {
-                        if (ref($domconfig{$action}{$itemid}{$key}) eq 'HASH') {
-                            if (ref($confhash{$itemid}{$key}) eq 'HASH') {
-                                foreach my $innerkey (keys(%{$domconfig{$action}{$itemid}{$key}})) {
-                                    unless (exists($confhash{$itemid}{$key}{$innerkey})) {
-                                        $changes{$itemid} = 1;
-                                        last;
-                                    }
-                                }
-                            } elsif (keys(%{$domconfig{$action}{$itemid}{$key}}) > 0) {
-                                $changes{$itemid} = 1;
-                            }
-                        }
-                        last if ($changes{$itemid});
-                    }
-                }
-            }
-        }
-    }
-    if (@allpos > 0) {
-        my $idx = 0;
-        foreach my $itemid (@allpos) {
-            if ($itemid ne '') {
-                $confhash{$itemid}{'order'} = $idx;
-                if (ref($domconfig{$action}) eq 'HASH') {
-                    if (ref($domconfig{$action}{$itemid}) eq 'HASH') {
-                        if ($domconfig{$action}{$itemid}{'order'} ne $idx) {
-                            $changes{$itemid} = 1;
-                        }
-                    }
-                }
-                $idx ++;
-            }
-        }
-    }
-    my %ltitoolshash = (
-                          $action => { %confhash }
-                       );
-    my $putresult = &Apache::lonnet::put_dom('configuration',\%ltitoolshash,
-                                             $dom);
-    if ($putresult eq 'ok') {
-        my %ltienchash = (
-                             $action => { %encconfig }
-                         );
-        &Apache::lonnet::put_dom('encconfig',\%ltienchash,$dom);
-        if (keys(%changes) > 0) {
-            my $cachetime = 24*60*60;
-            my %ltiall = %confhash;
-            foreach my $id (keys(%ltiall)) {
-                if (ref($encconfig{$id}) eq 'HASH') {
-                    foreach my $item ('key','secret') {
-                        $ltiall{$id}{$item} = $encconfig{$id}{$item};
-                    }
-                }
-            }
-            &Apache::lonnet::do_cache_new('ltitools',$dom,\%ltiall,$cachetime);
-            if (ref($lastactref) eq 'HASH') {
-                $lastactref->{'ltitools'} = 1;
-            }
-            $resulttext = &mt('Changes made:').'<ul>';
-            my %bynum;
-            foreach my $itemid (sort(keys(%changes))) {
-                my $position = $confhash{$itemid}{'order'};
-                $bynum{$position} = $itemid;
-            }
-            foreach my $pos (sort { $a <=> $b } keys(%bynum)) {
-                my $itemid = $bynum{$pos};
-                if (ref($confhash{$itemid}) ne 'HASH') {
-                    $resulttext .= '<li>'.&mt('Deleted: [_1]',$changes{$itemid}).'</li>';
-                } else {
-                    $resulttext .= '<li><b>'.$confhash{$itemid}{'title'}.'</b>';
-                    if ($confhash{$itemid}{'image'}) {
-                        $resulttext .= '&nbsp;'.
-                                       '<img src="'.$confhash{$itemid}{'image'}.'"'.
-                                       ' alt="'.&mt('Tool Provider icon').'" />';
-                    }
-                    $resulttext .= '</li><ul>';
-                    my $position = $pos + 1;
-                    $resulttext .= '<li>'.&mt('Order: [_1]',$position).'</li>';
-                    foreach my $item ('version','msgtype','sigmethod','url','lifetime') {
-                        if ($confhash{$itemid}{$item} ne '') {
-                            $resulttext .= '<li>'.$lt{$item}.':&nbsp;'.$confhash{$itemid}{$item}.'</li>';
-                        }
-                    }
-                    if ($encconfig{$itemid}{'key'} ne '') {
-                        $resulttext .= '<li>'.$lt{'key'}.':&nbsp;'.$encconfig{$itemid}{'key'}.'</li>';
-                    }
-                    if ($encconfig{$itemid}{'secret'} ne '') {
-                        $resulttext .= '<li>'.$lt{'secret'}.':&nbsp;';
-                        my $num = length($encconfig{$itemid}{'secret'});
-                        $resulttext .= ('*'x$num).'</li>';
-                    }
-                    $resulttext .= '<li>'.&mt('Configurable in course:');
-                    my @possconfig = ('label','title','target','linktext','explanation','append');
-                    my $numconfig = 0;
-                    if (ref($confhash{$itemid}{'crsconf'}) eq 'HASH') {
-                        foreach my $item (@possconfig) {
-                            if ($confhash{$itemid}{'crsconf'}{$item}) {
-                                $numconfig ++;
-                                $resulttext .= ' "'.$lt{'crs'.$item}.'"';
-                            }
-                        }
-                    }
-                    if (!$numconfig) {
-                        $resulttext .= &mt('None');
-                    }
-                    $resulttext .= '</li>';
-                    if (ref($confhash{$itemid}{'display'}) eq 'HASH') {
-                        my $displaylist;
-                        if ($confhash{$itemid}{'display'}{'target'}) {
-                            $displaylist = &mt('Display target').':&nbsp;'.
-                                           $confhash{$itemid}{'display'}{'target'}.',';
-                        }
-                        foreach my $size ('width','height') {
-                            if ($confhash{$itemid}{'display'}{$size}) {
-                                $displaylist .= ('&nbsp;'x2).$lt{$size}.':&nbsp;'.
-                                                $confhash{$itemid}{'display'}{$size}.',';
-                            }
-                        }
-                        if ($displaylist) {
-                            $displaylist =~ s/,$//;
-                            $resulttext .= '<li>'.$displaylist.'</li>';
-                        }
-                        foreach my $item ('linktext','explanation') {
-                            if ($confhash{$itemid}{'display'}{$item}) {
-                                $resulttext .= '<li>'.$lt{$item}.':&nbsp;'.$confhash{$itemid}{'display'}{$item}.'</li>';
-                            }
-                        }
-                    }
-                    if (ref($confhash{$itemid}{'fields'}) eq 'HASH') {
-                        my $fieldlist;
-                        foreach my $field (@allfields) {
-                            if ($confhash{$itemid}{'fields'}{$field}) {
-                                $fieldlist .= ('&nbsp;'x2).$lt{$field}.',';
-                            }
-                        }
-                        if ($fieldlist) {
-                            $fieldlist =~ s/,$//;
-                            if ($confhash{$itemid}{'fields'}{'user'}) {
-                                if ($confhash{$itemid}{'incdom'}) {
-                                    $fieldlist .= ' ('.&mt('username:domain').')';
-                                } else {
-                                    $fieldlist .= ' ('.&mt('username').')';
-                                }
-                            }
-                            $resulttext .= '<li>'.&mt('Data sent').':'.$fieldlist.'</li>';
-                        }
-                    }
-                    if (ref($confhash{$itemid}{'roles'}) eq 'HASH') {
-                        my $rolemaps;
-                        foreach my $role (@courseroles) {
-                            if ($confhash{$itemid}{'roles'}{$role}) {
-                                $rolemaps .= ('&nbsp;'x2).&Apache::lonnet::plaintext($role,'Course').'='.
-                                             $confhash{$itemid}{'roles'}{$role}.',';
-                            }
-                        }
-                        if ($rolemaps) {
-                            $rolemaps =~ s/,$//;
-                            $resulttext .= '<li>'.&mt('Role mapping:').$rolemaps.'</li>';
-                        }
-                    }
-                    if (ref($confhash{$itemid}{'custom'}) eq 'HASH') {
-                        my $customlist;
-                        if (keys(%{$confhash{$itemid}{'custom'}})) {
-                            foreach my $key (sort(keys(%{$confhash{$itemid}{'custom'}}))) {
-                                $customlist .= $key.':'.$confhash{$itemid}{'custom'}{$key}.('&nbsp;'x2);
-                            }
-                        }
-                        if ($customlist) {
-                            $resulttext .= '<li>'.&mt('Custom items').': '.$customlist.'</li>';
-                        }
-                    }
-                    $resulttext .= '</ul></li>';
-                }
-            }
-            $resulttext .= '</ul>';
-        } else {
-            $resulttext = &mt('No changes made.');
-        }
-    } else {
-        $errors .= '<li><span class="LC_error">'.&mt('Failed to save changes').'</span></li>';
-    }
-    if ($errors) {
-        $resulttext .= &mt('The following errors occurred: ').'<ul>'.
-                       $errors.'</ul>';
-    }
-    return $resulttext;
-}
-
-sub process_ltitools_image {
-    my ($r,$dom,$confname,$caller,$itemid,$configuserok,$switchserver,$author_ok) = @_;
-    my $filename = $env{'form.'.$caller.'.filename'};
-    my ($error,$url);
-    my ($width,$height) = (21,21);
-    if ($configuserok eq 'ok') {
-        if ($switchserver) {
-            $error = &mt('Upload of Tool Provider (LTI) icon is not permitted to this server: [_1]',
-                         $switchserver);
-        } elsif ($author_ok eq 'ok') {
-            my ($result,$imageurl,$madethumb) =
-                &publishlogo($r,'upload',$caller,$dom,$confname,
-                             "ltitools/$itemid/icon",$width,$height);
-            if ($result eq 'ok') {
-                if ($madethumb) {
-                    my ($path,$imagefile) = ($imageurl =~ m{^(.+)/([^/]+)$});
-                    my $imagethumb = "$path/tn-".$imagefile;
-                    $url = $imagethumb;
-                } else {
-                    $url = $imageurl;
-                }
-            } else {
-                $error = &mt("Upload of [_1] failed because an error occurred publishing the file in RES space. Error was: [_2].",$filename,$result);
-            }
-        } else {
-            $error = &mt("Upload of [_1] failed because an author role could not be assigned to a Domain Configuration user ([_2]) in domain: [_3].  Error was: [_4].",$filename,$confname,$dom,$author_ok);
-        }
-    } else {
-        $error = &mt("Upload of [_1] failed because a Domain Configuration user ([_2]) could not be created in domain: [_3].  Error was: [_4].",$filename,$confname,$dom,$configuserok);
-    }
-    return ($url,$error);
-}
-
-sub get_ltitools_id {
-    my ($cdom,$title) = @_;
-    # get lock on ltitools db
-    my $lockhash = {
-                      lock => $env{'user.name'}.
-                              ':'.$env{'user.domain'},
-                   };
-    my $tries = 0;
-    my $gotlock = &Apache::lonnet::newput_dom('ltitools',$lockhash,$cdom);
-    my ($id,$error);
-
-    while (($gotlock ne 'ok') && ($tries<10)) {
-        $tries ++;
-        sleep (0.1);
-        $gotlock = &Apache::lonnet::newput_dom('ltitools',$lockhash,$cdom);
-    }
-    if ($gotlock eq 'ok') {
-        my %currids = &Apache::lonnet::dump_dom('ltitools',$cdom);
-        if ($currids{'lock'}) {
-            delete($currids{'lock'});
-            if (keys(%currids)) {
-                my @curr = sort { $a <=> $b } keys(%currids);
-                if ($curr[-1] =~ /^\d+$/) {
-                    $id = 1 + $curr[-1];
-                }
-            } else {
-                $id = 1;
-            }
-            if ($id) {
-                unless (&Apache::lonnet::newput_dom('ltitools',{ $id => $title },$cdom) eq 'ok') {
-                    $error = 'nostore';
-                }
-            } else {
-                $error = 'nonumber';
-            }
-        }
-        my $dellockoutcome = &Apache::lonnet::del_dom('ltitools',['lock'],$cdom);
-    } else {
-        $error = 'nolock';
-    }
-    return ($id,$error);
-}
-
 sub modify_autoenroll {
     my ($dom,$lastactref,%domconfig) = @_;
     my ($resulttext,%changes);
@@ -11741,8 +10487,7 @@ sub modify_contacts {
     my @contacts = ('supportemail','adminemail');
     my @mailings = ('errormail','packagesmail','helpdeskmail','otherdomsmail',
                     'lonstatusmail','requestsmail','updatesmail','idconflictsmail','hostipmail');
-    my @toggles = ('reporterrors','reportupdates','reportstatus');
-    my @lonstatus = ('threshold','sysmail','weights','excluded');
+    my @toggles = ('reporterrors','reportupdates');
     my ($fields,$fieldtitles,$fieldoptions,$possoptions) = &helpform_fields();
     foreach my $type (@mailings) {
         @{$newsetting{$type}} = 
@@ -11775,41 +10520,6 @@ sub modify_contacts {
             $contacts_hash{'contacts'}{$item} = $env{'form.'.$item};
         }
     }
-    my ($lonstatus_defs,$lonstatus_names) = &Apache::loncommon::lon_status_items();
-    foreach my $item (@lonstatus) {
-        if ($item eq 'excluded') {
-            my (%serverhomes,@excluded);
-            map { $serverhomes{$_} = 1; } values(%Apache::lonnet::serverhomeIDs);
-            my @possexcluded = &Apache::loncommon::get_env_multiple('form.errorexcluded');
-            if (@possexcluded) {
-                foreach my $id (sort(@possexcluded)) {
-                    if ($serverhomes{$id}) {
-                        push(@excluded,$id);
-                    }
-                }
-            }
-            if (@excluded) {
-                $contacts_hash{'contacts'}{'lonstatus'}{$item} = \@excluded;
-            }
-        } elsif ($item eq 'weights') {
-            foreach my $type ('E','W','N','U') {
-                $env{'form.error'.$item.'_'.$type} =~ s/^\s+|\s+$//g;
-                if ($env{'form.error'.$item.'_'.$type} =~ /^\d+$/) {
-                    unless ($env{'form.error'.$item.'_'.$type} == $lonstatus_defs->{$type}) {
-                        $contacts_hash{'contacts'}{'lonstatus'}{$item}{$type} =
-                            $env{'form.error'.$item.'_'.$type};
-                    }
-                }
-            }
-        } elsif (($item eq 'threshold') || ($item eq 'sysmail')) {
-            $env{'form.error'.$item} =~ s/^\s+|\s+$//g;
-            if ($env{'form.error'.$item} =~ /^\d+$/) {
-                unless ($env{'form.error'.$item} == $lonstatus_defs->{$item}) {
-                    $contacts_hash{'contacts'}{'lonstatus'}{$item} = $env{'form.error'.$item};
-                }
-            }
-        }
-    }
     if ((ref($fields) eq 'ARRAY') && (ref($possoptions) eq 'HASH')) {
         foreach my $field (@{$fields}) {
             if (ref($possoptions->{$field}) eq 'ARRAY') {
@@ -11948,76 +10658,6 @@ sub modify_contacts {
                 }
             }
         }
-        if (ref($currsetting{'lonstatus'}) eq 'HASH') {
-            foreach my $key ('excluded','weights','threshold','sysmail') {
-                if ($key eq 'excluded') {
-                    if ((ref($contacts_hash{contacts}{lonstatus}) eq 'HASH') &&
-                        (ref($contacts_hash{contacts}{lonstatus}{excluded}) eq 'ARRAY')) {
-                        if ((ref($currsetting{'lonstatus'}{$key}) eq 'ARRAY') &&
-                            (@{$currsetting{'lonstatus'}{$key}})) {
-                            my @diffs =
-                                &Apache::loncommon::compare_arrays($contacts_hash{contacts}{lonstatus}{excluded},
-                                                                   $currsetting{'lonstatus'}{$key});
-                            if (@diffs) {
-                                push(@{$changes{'lonstatus'}},$key);
-                            }
-                        } elsif (@{$contacts_hash{contacts}{lonstatus}{excluded}}) {
-                            push(@{$changes{'lonstatus'}},$key);
-                        }
-                    } elsif ((ref($currsetting{'lonstatus'}{$key}) eq 'ARRAY') &&
-                             (@{$currsetting{'lonstatus'}{$key}})) {
-                        push(@{$changes{'lonstatus'}},$key);
-                    }
-                } elsif ($key eq 'weights') {
-                    if ((ref($contacts_hash{contacts}{lonstatus}) eq 'HASH') &&
-                        (ref($contacts_hash{contacts}{lonstatus}{$key}) eq 'HASH')) {
-                        if (ref($currsetting{'lonstatus'}{$key}) eq 'HASH') {
-                            foreach my $type ('E','W','N','U') {
-                                unless ($contacts_hash{contacts}{lonstatus}{$key}{$type} eq
-                                        $currsetting{'lonstatus'}{$key}{$type}) {
-                                    push(@{$changes{'lonstatus'}},$key);
-                                    last;
-                                }
-                            }
-                        } else {
-                            foreach my $type ('E','W','N','U') {
-                                if ($contacts_hash{contacts}{lonstatus}{$key}{$type} ne '') {
-                                    push(@{$changes{'lonstatus'}},$key);
-                                    last;
-                                }
-                            }
-                        }
-                    } elsif (ref($currsetting{'lonstatus'}{$key}) eq 'HASH') {
-                        foreach my $type ('E','W','N','U') {
-                            if ($currsetting{'lonstatus'}{$key}{$type} ne '') {
-                                push(@{$changes{'lonstatus'}},$key);
-                                last;
-                            }
-                        }
-                    }
-                } elsif (($key eq 'threshold') || ($key eq 'sysmail')) {
-                    if (ref($contacts_hash{contacts}{lonstatus}) eq 'HASH') {
-                        if ($currsetting{'lonstatus'}{$key} =~ /^\d+$/) {
-                            if ($currsetting{'lonstatus'}{$key} != $contacts_hash{contacts}{lonstatus}{$key}) {
-                                push(@{$changes{'lonstatus'}},$key);
-                            }
-                        } elsif ($contacts_hash{contacts}{lonstatus}{$key} =~ /^\d+$/) {
-                            push(@{$changes{'lonstatus'}},$key);
-                        }
-                    } elsif ($currsetting{'lonstatus'}{$key} =~ /^\d+$/) {
-                        push(@{$changes{'lonstatus'}},$key);
-                    }
-                }
-            }
-        } else {
-            if (ref($contacts_hash{contacts}{lonstatus}) eq 'HASH') {
-                foreach my $key ('excluded','weights','threshold','sysmail') {
-                    if (exists($contacts_hash{contacts}{lonstatus}{$key})) {
-                        push(@{$changes{'lonstatus'}},$key);
-                    }
-                }
-            }
-        }
     } else {
         my %default;
         $default{'supportemail'} = $Apache::lonnet::perlvar{'lonSupportEMail'};
@@ -12063,13 +10703,6 @@ sub modify_contacts {
                 }
             }
         }
-        if (ref($contacts_hash{contacts}{lonstatus}) eq 'HASH') {
-            foreach my $key ('excluded','weights','threshold','sysmail') {
-                if (exists($contacts_hash{contacts}{lonstatus}{$key})) {
-                    push(@{$changes{'lonstatus'}},$key);
-                }
-            }
-        }
     }
     foreach my $item (@toggles) {
         if (($env{'form.'.$item} == 1) && ($currsetting{$item} == 0)) {
@@ -12195,79 +10828,22 @@ sub modify_contacts {
                 }
             }
             my @offon = ('off','on');
-            my $corelink = &core_link_msu();
             if ($changes{'reporterrors'}) {
                 $resulttext .= '<li>'.
                                &mt('E-mail error reports to [_1] set to "'.
                                    $offon[$env{'form.reporterrors'}].'".',
-                                   $corelink).
+                                   &Apache::loncommon::modal_link('http://loncapa.org/core.html',
+                                       &mt('LON-CAPA core group - MSU'),600,500)).
                                '</li>';
             }
             if ($changes{'reportupdates'}) {
                 $resulttext .= '<li>'.
                                 &mt('E-mail record of completed LON-CAPA updates to [_1] set to "'.
                                     $offon[$env{'form.reportupdates'}].'".',
-                                    $corelink).
+                                    &Apache::loncommon::modal_link('http://loncapa.org/core.html',
+                                        &mt('LON-CAPA core group - MSU'),600,500)).
                                 '</li>';
             }
-            if ($changes{'reportstatus'}) {
-                $resulttext .= '<li>'.
-                                &mt('E-mail status if errors above threshold to [_1] set to "'.
-                                    $offon[$env{'form.reportstatus'}].'".',
-                                    $corelink).
-                                '</li>';
-            }
-            if (ref($changes{'lonstatus'}) eq 'ARRAY') {
-                $resulttext .= '<li>'.
-                               &mt('Nightly status check e-mail settings').':<ul>';
-                my (%defval,%use_def,%shown);
-                $defval{'threshold'} = $lonstatus_defs->{'threshold'};
-                $defval{'sysmail'} = $lonstatus_defs->{'sysmail'};
-                $defval{'weights'} =
-                    join(', ',map { $lonstatus_names->{$_}.'='.$lonstatus_defs->{$_}; } ('E','W','N','U'));
-                $defval{'excluded'} = &mt('None');
-                if (ref($contacts_hash{'contacts'}{'lonstatus'}) eq 'HASH') {
-                    foreach my $item ('threshold','sysmail','weights','excluded') {
-                        if (exists($contacts_hash{'contacts'}{'lonstatus'}{$item})) {
-                            if (($item eq 'threshold') || ($item eq 'sysmail')) {
-                                $shown{$item} = $contacts_hash{'contacts'}{'lonstatus'}{$item};
-                            } elsif ($item eq 'weights') {
-                                if (ref($contacts_hash{'contacts'}{'lonstatus'}{$item}) eq 'HASH') {
-                                    foreach my $type ('E','W','N','U') {
-                                        $shown{$item} .= $lonstatus_names->{$type}.'=';
-                                        if (exists($contacts_hash{'contacts'}{'lonstatus'}{$item}{$type})) {
-                                            $shown{$item} .= $contacts_hash{'contacts'}{'lonstatus'}{$item}{$type};
-                                        } else {
-                                            $shown{$item} .= $lonstatus_defs->{$type};
-                                        }
-                                        $shown{$item} .= ', ';
-                                    }
-                                    $shown{$item} =~ s/, $//;
-                                } else {
-                                    $shown{$item} = $defval{$item};
-                                }
-                            } elsif ($item eq 'excluded') {
-                                if (ref($contacts_hash{'contacts'}{'lonstatus'}{$item}) eq 'ARRAY') {
-                                    $shown{$item} = join(', ',@{$contacts_hash{'contacts'}{'lonstatus'}{$item}});
-                                } else {
-                                    $shown{$item} = $defval{$item};
-                                }
-                            }
-                        } else {
-                            $shown{$item} = $defval{$item};
-                        }
-                    }
-                } else {
-                    foreach my $item ('threshold','weights','excluded','sysmail') {
-                        $shown{$item} = $defval{$item};
-                    }
-                }
-                foreach my $item ('threshold','weights','excluded','sysmail') {
-                    $resulttext .= '<li>'.&mt($titles->{'error'.$item}.' -- [_1]',
-                                          $shown{$item}).'</li>';
-                }
-                $resulttext .= '</ul></li>';
-            }
             if ((ref($changes{'helpform'}) eq 'ARRAY') && (ref($fields) eq 'ARRAY')) {
                 my (@optional,@required,@unused,$maxsizechg);
                 foreach my $field (@{$changes{'helpform'}}) {
@@ -12730,7 +11306,7 @@ sub modify_passwords {
                                 $resulttext .= '<li>'.&mt('E-mail address(es) in LON-CAPA used for verification will include: [_1]',join(', ',map { $titles{$_}; } @{$staticdefaults{'resetemail'}})).'</li>';
                             }
                         } else {
-                            $resulttext .= '<li>'.&mt('E-mail address(es) in LON-CAPA used for verification will include: [_1]',join(', ',map { $titles{$_}; } @{$staticdefaults{'resetemail'}})).'</li>';
+                            $resulttext .= '<li>'.&mt('E-mail address(es) in LON-CAPA usedfor verification will include: [_1]',join(', ',map { $titles{$_}; } @{$staticdefaults{'resetemail'}})).'</li>';
                         }
                         if ($confighash{'passwords'}{'resetremove'}) {
                             $resulttext .= '<li>'.&mt('Preamble to "Forgot Password" web form not shown').'</li>';
@@ -16508,24 +15084,24 @@ sub modify_loadbalancing {
                             $resulttext .= '<li>'.&mt('Load Balancer: [_1] -- cookie use enabled',
                                                       $balancer).'</li>';
                         }
-                    }
-                }
-                if (keys(%toupdate)) {
-                    my %thismachine;
-                    my $updatedhere;
-                    my $cachetime = 60*60*24;
-                    map { $thismachine{$_} = 1; } &Apache::lonnet::current_machine_ids();
-                    foreach my $lonhost (keys(%toupdate)) {
-                        if ($thismachine{$lonhost}) {
-                            unless ($updatedhere) {
-                                &Apache::lonnet::do_cache_new('loadbalancing',$dom,
-                                                              $defaultshash{'loadbalancing'},
-                                                              $cachetime);
-                                $updatedhere = 1;
+                        if (keys(%toupdate)) {
+                            my %thismachine;
+                            my $updatedhere;
+                            my $cachetime = 60*60*24;
+                            map { $thismachine{$_} = 1; } &Apache::lonnet::current_machine_ids();
+                            foreach my $lonhost (keys(%toupdate)) {
+                                if ($thismachine{$lonhost}) {
+                                    unless ($updatedhere) {
+                                        &Apache::lonnet::do_cache_new('loadbalancing',$dom,
+                                                                      $defaultshash{'loadbalancing'},
+                                                                      $cachetime);
+                                        $updatedhere = 1;
+                                    }
+                                } else {
+                                    my $cachekey = &escape('loadbalancing').':'.&escape($dom);
+                                    &Apache::lonnet::remote_devalidate_cache($lonhost,[$cachekey]);
+                                }
                             }
-                        } else {
-                            my $cachekey = &escape('loadbalancing').':'.&escape($dom);
-                            &Apache::lonnet::remote_devalidate_cache($lonhost,[$cachekey]);
                         }
                     }
                 }
@@ -17285,7 +15861,7 @@ sub devalidate_remote_domconfs {
     my %thismachine;
     map { $thismachine{$_} = 1; } &Apache::lonnet::current_machine_ids();
     my @posscached = ('domainconfig','domdefaults','usersessions',
-                      'ltitools','directorysrch','passwdconf','cats');
+                      'directorysrch','passwdconf','cats');
     if (keys(%servers)) {
         foreach my $server (keys(%servers)) {
             next if ($thismachine{$server});