--- loncom/interface/domainprefs.pm	2017/11/01 08:56:25	1.160.6.84.2.8
+++ loncom/interface/domainprefs.pm	2018/09/02 15:22:28	1.160.6.87
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Handler to set domain-wide configuration settings
 #
-# $Id: domainprefs.pm,v 1.160.6.84.2.8 2017/11/01 08:56:25 raeburn Exp $
+# $Id: domainprefs.pm,v 1.160.6.87 2018/09/02 15:22:28 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -27,7 +27,7 @@
 #
 #
 ###############################################################
-###############################################################
+##############################################################
 
 =pod
 
@@ -216,27 +216,13 @@ sub handler {
                 'contacts','defaults','scantron','coursecategories',
                 'serverstatuses','requestcourses','helpsettings',
                 'coursedefaults','usersessions','loadbalancing',
-                'requestauthor','selfenrollment','inststatus',
-                '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'],$dom);
     my @prefs_order = ('rolecolors','login','defaults','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'}};
@@ -489,14 +475,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',
@@ -673,8 +651,6 @@ sub process_changes {
         $output = &modify_usersessions($dom,$lastactref,%domconfig);
     } elsif ($action eq 'loadbalancing') {
         $output = &modify_loadbalancing($dom,%domconfig);
-    } elsif ($action eq 'ltitools') {
-        $output = &modify_ltitools($r,$dom,$action,$lastactref,%domconfig);
     }
     return $output;
 }
@@ -954,8 +930,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);
         } elsif ($action eq 'scantron') {
             $output .= &print_scantronformat($r,$dom,$confname,$settings,\$rowtotal);
@@ -1303,7 +1278,7 @@ sub print_login {
             } else {
                 $datatable .= '<input type="file" name="loginheadtag_'.$lonhost.'" />';
             }
-            $datatable .= '</td><td><input type="textbox" name="loginheadtagexempt_'.$lonhost.'" value="'.$exempt.'" /></td></tr>';
+            $datatable .= '</td><td><input type="text" name="loginheadtagexempt_'.$lonhost.'" value="'.$exempt.'" /></td></tr>';
         }
         $datatable .= '</table></td></tr>';
     }
@@ -1463,7 +1438,7 @@ sub display_color_options {
     my $datatable = '<tr'.$css_class.'>'.
         '<td>'.$choices->{'font'}.'</td>';
     if (!$is_custom->{'font'}) {
-        $datatable .=  '<td>'.&mt('Default in use:').'&nbsp;<span id="css_default_'.$role.'_font" style="color: '.$defaults->{'font'}.';">'.$defaults->{'font'}.'</span></td>';
+        $datatable .=  '<td>'.&mt('Default in use:').'&nbsp;<span class="css_default_'.$role.'_font" style="color: '.$defaults->{'font'}.';">'.$defaults->{'font'}.'</span></td>';
     } else {
         $datatable .= '<td>&nbsp;</td>';
     }
@@ -1472,12 +1447,12 @@ sub display_color_options {
     $datatable .= '<td><span class="LC_nobreak">'.
                   '<input type="text" class="colorchooser" size="10" name="'.$role.'_font"'.
                   ' value="'.$current_color.'" />&nbsp;'.
-                  '&nbsp;</td></tr>';
+                  '&nbsp;</span></td></tr>';
     unless ($role eq 'login') { 
         $datatable .= '<tr'.$css_class.'>'.
                       '<td>'.$choices->{'fontmenu'}.'</td>';
         if (!$is_custom->{'fontmenu'}) {
-            $datatable .=  '<td>'.&mt('Default in use:').'&nbsp;<span id="css_default_'.$role.'_font" style="color: '.$defaults->{'fontmenu'}.';">'.$defaults->{'fontmenu'}.'</span></td>';
+            $datatable .=  '<td>'.&mt('Default in use:').'&nbsp;<span class="css_default_'.$role.'_font" style="color: '.$defaults->{'fontmenu'}.';">'.$defaults->{'fontmenu'}.'</span></td>';
         } else {
             $datatable .= '<td>&nbsp;</td>';
         }
@@ -1487,7 +1462,7 @@ sub display_color_options {
                       '<input class="colorchooser" type="text" size="10" name="'
 		      .$role.'_fontmenu"'.
                       ' value="'.$current_color.'" />&nbsp;'.
-                      '&nbsp;</td></tr>';
+                      '&nbsp;</span></td></tr>';
     }
     my $switchserver = &check_switchserver($dom,$confname);
     foreach my $img (@{$images}) {
@@ -1604,7 +1579,7 @@ sub display_color_options {
     my $bgs_def;
     foreach my $item (@{$bgs}) {
         if (!$is_custom->{$item}) {
-            $bgs_def .= '<td><span class="LC_nobreak">'.$choices->{$item}.'</span>&nbsp;<span id="css_default_'.$role.'_'.$item.'" style="background-color: '.$defaults->{'bgs'}{$item}.';">&nbsp;&nbsp;&nbsp;</span><br />'.$defaults->{'bgs'}{$item}.'</td>';
+            $bgs_def .= '<td><span class="LC_nobreak">'.$choices->{$item}.'</span>&nbsp;<span class="css_default_'.$role.'_'.$item.'" style="background-color: '.$defaults->{'bgs'}{$item}.';">&nbsp;&nbsp;&nbsp;</span><br />'.$defaults->{'bgs'}{$item}.'</td>';
         }
     }
     if ($bgs_def) {
@@ -1632,7 +1607,7 @@ sub display_color_options {
     my $links_def;
     foreach my $item (@{$links}) {
         if (!$is_custom->{$item}) {
-            $links_def .= '<td>'.$choices->{$item}.'<br /><span id="css_default_'.$role.'_'.$item.'" style="color: '.$defaults->{'links'}{$item}.';">'.$defaults->{'links'}{$item}.'</span></td>';
+            $links_def .= '<td>'.$choices->{$item}.'<br /><span class="css_default_'.$role.'_'.$item.'" style="color: '.$defaults->{'links'}{$item}.';">'.$defaults->{'links'}{$item}.'</span></td>';
         }
     }
     if ($links_def) {
@@ -1718,17 +1693,15 @@ sub image_changes {
     my ($is_custom,$alt_text,$img_import,$showfile,$fullsize,$role,$img,$imgfile,$logincolors) = @_;
     my $output;
     if ($img eq 'login') {
-            # suppress image for Log-in header
+        $output = '</td><td>'.$logincolors; # suppress image for Log-in header
     } elsif (!$is_custom) {
         if ($img ne 'domlogo') {
-            $output .= &mt('Default image:').'<br />';
+            $output = &mt('Default image:').'<br />';
         } else {
-            $output .= &mt('Default in use:').'<br />';
+            $output = &mt('Default in use:').'<br />';
         }
     }
-    if ($img eq 'login') { # suppress image for Log-in header
-        $output .= '<td>'.$logincolors;
-    } else {
+    if ($img ne 'login') {
         if ($img_import) {
             $output .= '<input type="hidden" name="'.$role.'_import_'.$img.'" value="'.$imgfile.'" />';
         }
@@ -2339,7 +2312,7 @@ sub print_textbookcourses {
         $datatable .= '<option value="'.$k.'"'.$selstr.'>'.$vpos.'</option>';
     }
     $datatable .= '</select>&nbsp;'."\n".
-                  '<input type="checkbox" name="'.$type.'_addbook" value="1" />'.&mt('Add').'</td>'."\n".
+                  '<input type="checkbox" name="'.$type.'_addbook" value="1" />'.&mt('Add').'</span></td>'."\n".
                   '<td colspan="2">'.
                   '<span class="LC_nobreak">'.&mt('Subject:').'<input type="text" size="15" name="'.$type.'_addbook_subject" value="" /></span> '."\n".
                   ('&nbsp;'x2).
@@ -2356,13 +2329,13 @@ sub print_textbookcourses {
         } else {
             $datatable .= '<input type="file" name="'.$type.'_addbook_image" value="" />';
         }
+        $datatable .= '</span>'."\n";
     }
-    $datatable .= '</span>'."\n".
-                  '<span class="LC_nobreak">'.&mt('LON-CAPA course:').'&nbsp;'.
+    $datatable .= '<span class="LC_nobreak">'.&mt('LON-CAPA course:').'&nbsp;'.
                   &Apache::loncommon::select_dom_form($env{'request.role.domain'},$type.'_addbook_cdom').
                   '<input type="text" size="25" name="'.$type.'_addbook_cnum" value="" />'.
                   &Apache::loncommon::selectcourse_link
-                      ('display',$type.'_addbook_cnum',$type.'_addbook_cdom',undef,undef,undef,'Course');
+                      ('display',$type.'_addbook_cnum',$type.'_addbook_cdom',undef,undef,undef,'Course').
                   '</span></td>'."\n".
                   '</tr>'."\n";
     $itemcount ++;
@@ -2462,74 +2435,6 @@ $jstext{'templates'};
 ENDSCRIPT
 }
 
-sub ltitools_javascript {
-    my ($settings) = @_;
-    return unless(ref($settings) eq 'HASH');
-    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 reorderLTI(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>
-
-ENDSCRIPT
-}
-
 sub print_autoenroll {
     my ($dom,$settings,$rowtotal) = @_;
     my $autorun = &Apache::lonnet::auto_run(undef,$dom),
@@ -2609,7 +2514,7 @@ sub print_autoenroll {
                   '<td>'.&mt('Failsafe for no drops when institutional data missing').'</td>'.
                   '<td class="LC_right_item"><span class="LC_nobreak">'.
                   '<input type="text" name="autoenroll_failsafe"'.
-                  ' value="'.$failsafe.'" size="4" /></td></tr>';
+                  ' value="'.$failsafe.'" size="4" /></span></td></tr>';
     $$rowtotal += 4;
     return $datatable;
 }
@@ -2658,7 +2563,7 @@ sub print_autoupdate {
         my $locknamesettings;
         $datatable .= &insttypes_row($settings,$types,$usertypes,
                                      $dom,$numinrow,$othertitle,
-                                    'lockablenames',$rowtotal);
+                                    'lockablenames');
         $$rowtotal ++;
     } else {
         my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom);
@@ -2801,8 +2706,7 @@ sub print_directorysrch {
         if (ref($usertypes) eq 'HASH') {
             if (keys(%{$usertypes}) > 0) {
                 $datatable .= &insttypes_row($settings,$types,$usertypes,$dom,
-                                             $numinrow,$othertitle,'cansearch',
-                                             $rowtotal);
+                                             $numinrow,$othertitle,'cansearch');
                 $cansrchrow = 1;
             }
         }
@@ -3003,54 +2907,7 @@ sub print_contacts {
                           $to{$item}.'" /></td></tr>';
             $rownum ++;
         }
-    } elsif ($position eq 'bottom') {
-        $css_class = $rownum%2?' class="LC_odd_row"':'';
-        $datatable .= '<tr'.$css_class.'>'.
-                      '<td>'.&mt('Extra helpdesk form fields:').'<br />'.
-                      &mt('(e-mail, subject, and description always shown)').
-                      '</td><td class="LC_left_item">';
-        if ((ref($fields) eq 'ARRAY') && (ref($fieldtitles) eq 'HASH') &&
-            (ref($fieldoptions) eq 'HASH') && (ref($possoptions) eq 'HASH')) {
-            $datatable .= '<table><tr><th>'.&mt('Field').'</th><th>'.&mt('Status').'</th></tr>';
-            foreach my $field (@{$fields}) {
-                $datatable .= '<tr><td>'.$fieldtitles->{$field};
-                if (($field eq 'screenshot') || ($field eq 'cc')) {
-                    $datatable .= ' '.&mt('(logged-in users)');
-                }
-                $datatable .='</td><td>';
-                my $clickaction;
-                if ($field eq 'screenshot') {
-                    $clickaction = ' onclick="screenshotSize(this);"';
-                }
-                if (ref($possoptions->{$field}) eq 'ARRAY') {
-                    foreach my $option (@{$possoptions->{$field}}) {
-                        my $checked;
-                        if ($currfield{$field} eq $option) {
-                            $checked = ' checked="checked"';
-                        }
-                        $datatable .= '<span class="LC_nobreak"><label>'.
-                                      '<input type="radio" name="helpform_'.$field.'" '.
-                                      'value="'.$option.'"'.$checked.$clickaction.' />'.$fieldoptions->{$option}.
-                                      '</label></span>'.('&nbsp;'x2);
-                    }
-                }
-                if ($field eq 'screenshot') {
-                    my $display;
-                    if ($currfield{$field} eq 'no') {
-                        $display = ' style="display:none"';
-                    }
-                    $datatable .= '</td></tr><tr id="help_screenshotsize"'.$display.' />'.
-                                  '<td>'.&mt('Maximum size for upload (MB)').'</td><td>'.
-                                  '<input type="text" size="5" name="helpform_maxsize" value="'.$maxsize.'" />';
-                }
-                $datatable .= '</td></tr>';
-            }
-            $datatable .= '</table>';
-        }
-        $datatable .= '</td></tr>'."\n";
-        $rownum ++;
-    }
-    unless ($position eq 'top') {
+    } else {
         foreach my $type (@mailings) {
             $css_class = $rownum%2?' class="LC_odd_row"':'';
             $datatable .= '<tr'.$css_class.'>'.
@@ -3084,7 +2941,7 @@ sub print_contacts {
                               'value="'.$bccemails{$type}.'"  /></fieldset>'.
                               '<fieldset><legend>'.&mt('Optional added text').'</legend>'.
                               &mt('Text automatically added to e-mail:').' '.
-                              '<input type="text" name="'.$type.'_includestr" value="'.$includestr{$type}.'" /><br >'.
+                              '<input type="text" name="'.$type.'_includestr" value="'.$includestr{$type}.'" /><br />'.
                               '<span class="LC_nobreak">'.&mt('Location:').'&nbsp;'.
                               '<label><input type="radio" name="'.$type.'_includeloc" value="s"'.$locchecked{'s'}.' />'.&mt('in subject').'</label>'.
                               ('&nbsp;'x2).
@@ -3110,138 +2967,56 @@ sub print_contacts {
                                                    \%choices,$rownum);
         $datatable .= $reports;
     } elsif ($position eq 'bottom') {
-        my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom);
-        my (@posstypes,%usertypeshash);
-        if (ref($types) eq 'ARRAY') {
-            @posstypes = @{$types};
-        }
-        if (@posstypes) {
-            if (ref($usertypes) eq 'HASH') {
-                %usertypeshash = %{$usertypes};
-            }
-            my @overridden;
-            my $numinrow = 4;
-            if (ref($settings) eq 'HASH') {
-                if (ref($settings->{'overrides'}) eq 'HASH') {
-                    foreach my $key (sort(keys(%{$settings->{'overrides'}}))) {
-                        if (ref($settings->{'overrides'}{$key}) eq 'HASH') {
-                            push(@overridden,$key);
-                            foreach my $item (@contacts) {
-                                if ($settings->{'overrides'}{$key}{$item}) {
-                                    $checked{'override_'.$key}{$item} = ' checked="checked" ';
-                                }
-                            }
-                            $otheremails{'override_'.$key} = $settings->{'overrides'}{$key}{'others'};
-                            $bccemails{'override_'.$key} = $settings->{'overrides'}{$key}{'bcc'};
-                            $includeloc{'override_'.$key} = '';
-                            $includestr{'override_'.$key} = '';
-                            if ($settings->{'overrides'}{$key}{'include'} ne '') {
-                                ($includeloc{'override_'.$key},$includestr{'override_'.$key}) =
-                                    split(/:/,$settings->{'overrides'}{$key}{'include'},2);
-                                $includestr{'override_'.$key} = &unescape($includestr{'override_'.$key});
-                            }
+        $css_class = $rownum%2?' class="LC_odd_row"':'';
+        $datatable .= '<tr'.$css_class.'>'.
+                      '<td>'.&mt('Extra helpdesk form fields:').'<br />'.
+                      &mt('(e-mail, subject, and description always shown)').
+                      '</td><td class="LC_left_item">';
+        if ((ref($fields) eq 'ARRAY') && (ref($fieldtitles) eq 'HASH') &&
+            (ref($fieldoptions) eq 'HASH') && (ref($possoptions) eq 'HASH')) {
+            $datatable .= '<table><tr><th>'.&mt('Field').'</th><th>'.&mt('Status').'</th></tr>';
+            foreach my $field (@{$fields}) {
+                $datatable .= '<tr><td>'.$fieldtitles->{$field};
+                if (($field eq 'screenshot') || ($field eq 'cc')) {
+                    $datatable .= ' '.&mt('(logged-in users)');
+                }
+                $datatable .='</td><td>';
+                my $clickaction;
+                if ($field eq 'screenshot') {
+                    $clickaction = ' onclick="screenshotSize(this);"';
+                }
+                if (ref($possoptions->{$field}) eq 'ARRAY') {
+                    foreach my $option (@{$possoptions->{$field}}) {
+                        my $checked;
+                        if ($currfield{$field} eq $option) {
+                            $checked = ' checked="checked"';
                         }
+                        $datatable .= '<span class="LC_nobreak"><label>'.
+                                      '<input type="radio" name="helpform_'.$field.'" '.
+                                      'value="'.$option.'"'.$checked.$clickaction.' />'.$fieldoptions->{$option}.
+                                      '</label></span>'.('&nbsp;'x2);
                     }
                 }
-            }
-            my $customclass = 'LC_helpdesk_override';
-            my $optionsprefix = 'LC_options_helpdesk_';
-
-            my $onclicktypes = "toggleHelpdeskRow(this.form,'overrides','$customclass','$optionsprefix');";
-
-            $datatable .= &insttypes_row($settings,$types,$usertypes,$dom,
-                                         $numinrow,$othertitle,'overrides',
-                                         \$rownum,$onclicktypes,$customclass);
-            $rownum ++;
-            $usertypeshash{'default'} = $othertitle;
-            foreach my $status (@posstypes) {
-                my $css_class;
-                if ($rownum%2) {
-                    $css_class = 'LC_odd_row ';
-                }
-                $css_class .= $customclass;
-                my $rowid = $optionsprefix.$status;
-                my $hidden = 1;
-                my $currstyle = 'display:none';
-                if (grep(/^\Q$status\E$/,@overridden)) {
-                    $currstyle = 'display:table-row';
-                    $hidden = 0;
-                }
-                my $key = 'override_'.$status;
-                $datatable .= &overridden_helpdesk($checked{$key},$otheremails{$key},$bccemails{$key},
-                                                  $includeloc{$key},$includestr{$key},$status,$rowid,
-                                                  $usertypeshash{$status},$css_class,$currstyle,
-                                                  \@contacts,$short_titles);
-                unless ($hidden) {
-                    $rownum ++;
+                if ($field eq 'screenshot') {
+                    my $display;
+                    if ($currfield{$field} eq 'no') {
+                        $display = ' style="display:none"';
+                    }
+                    $datatable .= '</td></tr><tr id="help_screenshotsize"'.$display.'>'.
+                                  '<td>'.&mt('Maximum size for upload (MB)').'</td><td>'.
+                                  '<input type="text" size="5" name="helpform_maxsize" value="'.$maxsize.'" />';
                 }
+                $datatable .= '</td></tr>';
             }
+            $datatable .= '</table>';
         }
+        $datatable .= '</td></tr>'."\n";
+        $rownum ++;
     }
     $$rowtotal += $rownum;
     return $datatable;
 }
 
-sub overridden_helpdesk {
-    my ($checked,$otheremails,$bccemails,$includeloc,$includestr,$type,$rowid,
-        $typetitle,$css_class,$rowstyle,$contacts,$short_titles) = @_;
-    my $class = 'LC_left_item';
-    if ($css_class) {
-        $css_class = ' class="'.$css_class.'"';
-    }
-    if ($rowid) {
-        $rowid = ' id="'.$rowid.'"';
-    }
-    if ($rowstyle) {
-        $rowstyle = ' style="'.$rowstyle.'"';
-    }
-    my ($output,$description);
-    $description = &mt('Helpdesk requests from: [_1] in this domain (overrides default)',"<b>$typetitle</b>");
-    $output = '<tr'.$css_class.$rowid.$rowstyle.'>'.
-              "<td>$description</td>\n".
-              '<td class="'.$class.'" colspan="2">'.
-              '<fieldset><legend>'.&mt('E-mail recipient(s)').'</legend>'.
-              '<span class="LC_nobreak">';
-    if (ref($contacts) eq 'ARRAY') {
-        foreach my $item (@{$contacts}) {
-            my $check;
-            if (ref($checked) eq 'HASH') {
-               $check = $checked->{$item};
-            }
-            my $title;
-            if (ref($short_titles) eq 'HASH') {
-                $title = $short_titles->{$item};
-            }
-            $output .= '<label>'.
-                       '<input type="checkbox" name="override_'.$type.'"'.$check.
-                       ' value="'.$item.'" />'.$title.'</label>&nbsp;';
-        }
-    }
-    $output .= '</span><br />'.&mt('Others').':&nbsp;&nbsp;'.
-               '<input type="text" name="override_'.$type.'_others" '.
-               'value="'.$otheremails.'"  />';
-    my %locchecked;
-    foreach my $loc ('s','b') {
-        if ($includeloc eq $loc) {
-            $locchecked{$loc} = ' checked="checked"';
-            last;
-        }
-    }
-    $output .= '<br />'.&mt('Bcc:').('&nbsp;'x6).
-               '<input type="text" name="override_'.$type.'_bcc" '.
-               'value="'.$bccemails.'"  /></fieldset>'.
-               '<fieldset><legend>'.&mt('Optional added text').'</legend>'.
-               &mt('Text automatically added to e-mail:').' '.
-               '<input type="text" name="override_'.$type.'_includestr" value="'.$includestr.'" /><br >'.
-               '<span class="LC_nobreak">'.&mt('Location:').'&nbsp;'.
-               '<label><input type="radio" name="override_'.$type.'_includeloc" value="s"'.$locchecked{'s'}.' />'.&mt('in subject').'</label>'.
-               ('&nbsp;'x2).
-               '<label><input type="radio" name="override_'.$type.'_includeloc" value="b"'.$locchecked{'b'}.' />'.&mt('in body').'</label>'.
-               '</span></fieldset>'.
-               '</td></tr>'."\n";
-    return $output;
-}
-
 sub contacts_javascript {
     return <<"ENDSCRIPT";
 
@@ -3259,37 +3034,6 @@ function screenshotSize(field) {
     return;
 }
 
-function toggleHelpdeskRow(form,checkbox,target,prefix,docount) {
-    if (form.elements[checkbox].length != undefined) {
-        var count = 0;
-        if (docount) {
-            for (var i=0; i<form.elements[checkbox].length; i++) {
-                if (form.elements[checkbox][i].checked) {
-                    count ++;
-                }
-            }
-        }
-        for (var i=0; i<form.elements[checkbox].length; i++) {
-            var type = form.elements[checkbox][i].value;
-            if (document.getElementById(prefix+type)) {
-                if (form.elements[checkbox][i].checked) {
-                    document.getElementById(prefix+type).style.display = 'table-row';
-                    if (count % 2 == 1) {
-                        document.getElementById(prefix+type).className = target+' LC_odd_row';
-                    } else {
-                        document.getElementById(prefix+type).className = target;
-                    }
-                    count ++;
-                } else {
-                    document.getElementById(prefix+type).style.display = 'none';
-                }
-            }
-        }
-    }
-    return;
-}
-
-
 // ]]>
 </script>
 
@@ -3464,7 +3208,9 @@ sub print_helpsettings {
                                                                 \@templateroles,$newcust).
                       &Apache::lonuserutils::custom_role_table('Course',\%full,\%levels,
                                                                \%levelscurrent,$newcust).
-                      '</fieldset></td></tr>';
+                      '</fieldset>'.
+                      &helpsettings_javascript(\@roles_by_num,$maxnum,$hiddenstr,$formname).
+                      '</td></tr>';
         $count ++;
         $$rowtotal += $count;
     }
@@ -3735,373 +3481,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 = &ltitools_javascript($settings);
-    my %lt = &ltitools_names();
-    my @courseroles = ('cc','in','ta','ep','st');
-    my @ltiroles = qw(Instructor ContentDeveloper TeachingAssistant Learner);
-    my @fields = ('fullname','firstname','lastname','email','user','roles');
-    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,$imgsrc,$version);
-            if (ref($settings->{$item}) eq 'HASH') {
-                $title = $settings->{$item}->{'title'};
-                $url = $settings->{$item}->{'url'};
-                $key = $settings->{$item}->{'key'};
-                $secret = $settings->{$item}->{'secret'};
-                my $image = $settings->{$item}->{'image'};
-                if ($image ne '') {
-                    $imgsrc = '<img src="'.$image.'" alt="'.&mt('Tool Provider icon').'" />';
-                }
-            }
-            my $chgstr = ' onchange="javascript:reorderLTI(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="30" 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> '.
-                '<br /><br />'.
-                '<span class="LC_nobreak">'.$lt{'url'}.':<input type="text" size="30" 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{'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 .= '<br />'.
-                          '<div class="LC_left_float">'.$lt{'linktext'}.'<br />'.
-                          '<input type="text" name="ltitools_linktext_'.$i.'" size="25" value="'.$currdisp{'linktext'}.'" /></label></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><br />';
-            $datatable .= '<br />';
-            foreach my $extra ('passback','roster') {
-                my $checkedon = '';
-                my $checkedoff = ' checked="checked"';
-                if ($settings->{$item}->{$extra}) {
-                    $checkedon = $checkedoff;
-                    $checkedoff = '';
-                }
-                $datatable .= $lt{$extra}.'&nbsp;'.
-                              '<label><input type="radio" name="ltitools_'.$extra.'_'.$i.'" value="1"'.$checkedon.' />'.
-                              &mt('Yes').'</label>'.('&nbsp;'x2).
-                              '<label><input type="radio" name="ltitools_'.$extra.'_'.$i.'" value="0"'.$checkedoff.' />'.
-                              &mt('No').'</label>'.('&nbsp;'x4);
-            }
-            $datatable .= '<br /><br /><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);
-            if (ref($settings->{$item}) eq 'HASH') {
-                if (ref($settings->{$item}->{'fields'}) eq 'HASH') {
-                    %checkedfields = %{$settings->{$item}->{'fields'}};
-                }
-                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">';
-            foreach my $field (@fields) {
-                my $checked;
-                if ($checkedfields{$field}) {
-                    $checked = ' checked="checked"';
-                }
-                $datatable .= '<label>'.
-                              '<input type="checkbox" name="ltitools_fields_'.$i.'" value="'.$field.'"'.$checked.' />'.
-                              $lt{$field}.'</label>'.('&nbsp;' x2);
-            }
-            $datatable .= '</span></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') {
-                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:reorderLTI(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').'</td>'."\n".
-                  '<td colspan="2">'.
-                  '<fieldset><legend>'.&mt('Required settings').'</legend>'.
-                  '<span class="LC_nobreak">'.$lt{'title'}.':<input type="text" size="30" 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> '.
-                  '<br />'.
-                  '<span class="LC_nobreak">'.$lt{'url'}.':<input type="text" size="30" 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{'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 .= '<br />'.
-                  '<div class="LC_left_float">'.$lt{'linktext'}.'<br />'.
-                  '<input type="text" name="ltitools_add_linktext" size="5" /></label></div>'.
-                  '<div class="LC_left_float">'.$lt{'explanation'}.'<br />'.
-                  '<textarea name=ltitools_add_explanation" rows="5" cols="40"></textarea>'.
-                  '</div><div style=""></div><br />';
-    foreach my $extra ('passback','roster') {
-        $datatable .= $lt{$extra}.'&nbsp;'.
-                      '<label><input type="radio" name="ltitools_add_'.$extra.'" value="1" />'.
-                      &mt('Yes').'</label>'.('&nbsp;'x2).
-                      '<label><input type="radio" name="ltitools_add_'.$extra.'" value="0" checked="checked" />'.
-                      &mt('No').'</label>'.('&nbsp;'x4);
-    }
-    $datatable .= '<br /><br /><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) {
-        $datatable .= '<label>'.
-                      '<input type="checkbox" name="ltitools_add_fields" value="'.$field.'" />'.
-                      $lt{$field}.'</label>'.('&nbsp;' x2);
-    }
-    $datatable .= '</span></fieldset>'.
-                  '<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') {
-        $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></td></tr>'."\n".
-                  '</td>'."\n".
-                  '</tr>'."\n";
-    $itemcount ++;
-    return $datatable;
-}
-
-sub ltitools_names {
-    my %lt = &Apache::lonlocal::texthash(
-                                          'title'          => 'Title',
-                                          'version'        => 'Version',
-                                          'msgtype'        => 'Message Type',
-                                          'url'            => 'URL',
-                                          'key'            => 'Key',
-                                          'secret'         => 'Secret',
-                                          'icon'           => 'Icon',
-                                          'user'           => 'Username:domain',
-                                          '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',
-                                          'passback'       => 'Tool can return grades:',
-                                          'roster'         => 'Tool can retrieve roster:',
-                                          'crstarget'      => 'Display target',
-                                          'crslabel'       => 'Course label',
-                                          'crstitle'       => 'Course title',
-                                          'crslinktext'    => 'Link Text',
-                                          'crsexplanation' => 'Explanation',
-                                        );
-
-    return %lt;
-}
-
 sub print_coursedefaults {
     my ($position,$dom,$settings,$rowtotal) = @_;
     my ($css_class,$datatable,%checkedon,%checkedoff,%defaultchecked,@toggles);
@@ -4548,7 +3927,7 @@ sub print_validation_rows {
                               '</label></span> ';
             }
         } elsif ($item eq 'markup') {
-            $datatable .= '<textarea name="'.$caller.'_validation_markup" cols="50" rows="5" wrap="soft">'.
+            $datatable .= '<textarea name="'.$caller.'_validation_markup" cols="50" rows="5">'.
                            $currvalidation{$item}.
                               '</textarea>';
         }
@@ -4570,7 +3949,7 @@ sub print_validation_rows {
         my ($numdc,$dctable,$rows) = &active_dc_picker($dom,$numinrow,'radio',
                                                        'validationdc',%currhash);
         my $css_class = $itemcount%2 ? ' class="LC_odd_row"' : '';
-        $datatable .= '</td></tr><tr'.$css_class.'><td>';
+        $datatable .= '<tr'.$css_class.'><td>';
         if ($numdc > 1) {
             $datatable .= &mt('Course creation processed as: (choose Dom. Coord.)');
         } else {
@@ -5251,14 +4630,9 @@ sub loadbalancing_titles {
            '_LC_ipchange'    => &mt('Non-SSO users with IP mismatch'),
                      );
     my @alltypes = ('_LC_adv','_LC_author','_LC_internetdom','_LC_external','_LC_ipchangesso','_LC_ipchange');
-    my @available;
     if (ref($types) eq 'ARRAY') {
-        @available = @{$types};
-    }
-    unless (grep(/^default$/,@available)) {
-        push(@available,'default');
+        unshift(@alltypes,@{$types},'default');
     }
-    unshift(@alltypes,@available);
     my %titles;
     foreach my $type (@alltypes) {
         if ($type =~ /^_LC_/) {
@@ -5385,8 +4759,8 @@ sub contact_titles {
                    'adminemail'      => 'Default Server Admin E-mail address',
                    'errormail'       => 'Error reports to be e-mailed to',
                    'packagesmail'    => 'Package update alerts to be e-mailed to',
-                   'helpdeskmail'    => "Helpdesk requests from all users in this domain",
-                   'otherdomsmail'   => 'Helpdesk requests from users in other (unconfigured) domains',
+                   'helpdeskmail'    => "Helpdesk requests for this domain's users",
+                   'otherdomsmail'   => 'Helpdesk requests for other (unconfigured) domains',
                    'lonstatusmail'   => 'E-mail from nightly status check (warnings/errors)',
                    'requestsmail'    => 'E-mail from course requests requiring approval',
                    'updatesmail'     => 'E-mail from nightly check of LON-CAPA module integrity/updates',
@@ -5634,7 +5008,6 @@ sub print_selfcreation {
     my %radiohash;
     my $numinrow = 4;
     map { $radiohash{'cancreate_'.$_} = 1; } @selfcreate;
-    my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom);
     if ($position eq 'top') {
         my %choices = &Apache::lonlocal::texthash (
                                                       cancreate_login      => 'Institutional Login',
@@ -5650,11 +5023,13 @@ sub print_selfcreation {
                                                      \%choices,$itemcount,$onclick);
         $$rowtotal += $itemcount;
         
+        my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom);
+
         if (ref($usertypes) eq 'HASH') {
             if (keys(%{$usertypes}) > 0) {
                 $datatable .= &insttypes_row($createsettings,$types,$usertypes,
                                              $dom,$numinrow,$othertitle,
-                                             'statustocreate',$rowtotal);
+                                             'statustocreate',$$rowtotal);
                 $$rowtotal ++;
             }
         }
@@ -5667,7 +5042,7 @@ sub print_selfcreation {
         $datatable .= '<tr'.$css_class.'>'.
                      '<td class="LC_left_item">'.&mt('Mapping of Shibboleth environment variable names to user data fields (SSO auth)').'</td>'.
                      '<td class="LC_left_item">'."\n".
-                     '<table><tr><td>'."\n";
+                     '<table>'."\n";
         for (my $i=0; $i<@fields; $i++) {
             $rem = $i%($numperrow);
             if ($rem == 0) {
@@ -5699,22 +5074,16 @@ sub print_selfcreation {
         $$rowtotal ++;
     } elsif ($position eq 'middle') {
         my %domconf = &Apache::lonnet::get_dom('configuration',['usermodification'],$dom);
-        my @posstypes;
+        my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom);
+        $usertypes->{'default'} = $othertitle;
         if (ref($types) eq 'ARRAY') {
-            @posstypes = @{$types};
-        }
-        unless (grep(/^default$/,@posstypes)) {
-            push(@posstypes,'default');
-        }
-        my %usertypeshash;
-        if (ref($usertypes) eq 'HASH') {
-            %usertypeshash = %{$usertypes};
-        }
-        $usertypeshash{'default'} = $othertitle;
-        foreach my $status (@posstypes) {
-            $datatable .= &modifiable_userdata_row('selfcreate',$status,$domconf{'usermodification'},
-                                                   $numinrow,$$rowtotal,\%usertypeshash);
-            $$rowtotal ++;
+            push(@{$types},'default');
+            $usertypes->{'default'} = $othertitle;
+            foreach my $status (@{$types}) {
+                $datatable .= &modifiable_userdata_row('selfcreate',$status,$domconf{'usermodification'},
+                                                       $numinrow,$$rowtotal,$usertypes);
+                $$rowtotal ++;
+            }
         }
     } else {
         my %choices = &Apache::lonlocal::texthash (
@@ -5732,30 +5101,29 @@ sub print_selfcreation {
         my $onclick = "toggleDisplay(this.form,'emailoptions');";
         my $additional = '<div id="emailoptions" style="display: '.$display.'">';
         my %domdefaults = &Apache::lonnet::get_domain_defaults($dom);
-        my (@ordered,%usertypeshash);
-        if (ref($domdefaults{'inststatusguest'}) eq 'ARRAY') {
-            @ordered = @{$domdefaults{'inststatusguest'}};
-        }
-        if (@ordered) {
-            unless (grep(/^default$/,@ordered)) {
-                push(@ordered,'default');
-            }
-            if (ref($usertypes) eq 'HASH') {
-                %usertypeshash = %{$usertypes};
-            }
-            $usertypeshash{'default'} = $othertitle;
-            $additional .= '<table><tr>';
-            foreach my $status (@ordered) {
-                $additional .= '<th>'.$usertypeshash{$status}.'</th>';
-            }
-            $additional .= '</tr><tr>';
-            foreach my $status (@ordered) {
-                $additional .= '<td>'.&email_as_username($rowtotal,$processing,$status).'</td>';
+        my $usertypes = {};
+        my $order = [];
+        if ((ref($domdefaults{'inststatustypes'}) eq 'HASH') && (ref($domdefaults{'inststatusguest'}) eq 'ARRAY')) {
+            $usertypes = $domdefaults{'inststatustypes'};
+            $order = $domdefaults{'inststatusguest'};
+        }
+        if (ref($order) eq 'ARRAY') {
+            push(@{$order},'default');
+            if (@{$order} > 1) {
+                $usertypes->{'default'} = &mt('Other users');
+                $additional .= '<table><tr>';
+                foreach my $status (@{$order}) {
+                    $additional .= '<th>'.$usertypes->{$status}.'</th>';
+                }
+                $additional .= '</tr><tr>';
+                foreach my $status (@{$order}) {
+                    $additional .= '<td>'.&email_as_username($rowtotal,$processing,$status).'</td>';
+                }
+                $additional .= '</tr></table>';
+            } else {
+                $usertypes->{'default'} = &mt('All users');
+                $additional .= &email_as_username($rowtotal,$processing);
             }
-            $additional .= '</tr></table>';
-        } else {
-            $usertypeshash{'default'} = $othertitle;
-            $additional .= &email_as_username($rowtotal,$processing);
         }
         $additional .= '</div>'."\n";
 
@@ -5766,10 +5134,12 @@ sub print_selfcreation {
         $$rowtotal ++;
         my ($infofields,$infotitles) = &Apache::loncommon::emailusername_info();
         $numinrow = 1;
-        foreach my $status (@ordered) {
-            $datatable .= &modifiable_userdata_row('cancreate','emailusername_'.$status,$settings,
-                                                   $numinrow,$$rowtotal,\%usertypeshash,$infofields,$infotitles);
-            $$rowtotal ++;
+        if (ref($order) eq 'ARRAY') {
+            foreach my $status (@{$order}) {
+                $datatable .= &modifiable_userdata_row('cancreate','emailusername_'.$status,$settings,
+                                                       $numinrow,$$rowtotal,$usertypes,$infofields,$infotitles);
+                $$rowtotal ++;
+            }
         }
         my ($emailrules,$emailruleorder) =
             &Apache::lonnet::inst_userrules($dom,'email');
@@ -6155,7 +5525,7 @@ sub print_defaults {
                                    1 => 'Yes, allow login then update passwd file using default cost (if higher)',
                                    2 => 'Yes, disallow login if stored cost is less than domain default',
                                  );
-                $datatable .= '<table wisth="100%">';
+                $datatable .= '<table width="100%">';
                 foreach my $option (@options) {
                     my $checked = ' ';
                     my $onclick;
@@ -6506,7 +5876,7 @@ sub print_coursecategories {
                              '<input type="radio" name="coursecat_'.$item.'" value="'.$type.'"'.$ischecked.
                              ' />'.$lt{$type}.'</label>&nbsp;';
            }
-           $datatable .= '</td></tr>';
+           $datatable .= '</span></td></tr>';
            $itemcount ++;
         }
         $$rowtotal += $itemcount;
@@ -6717,7 +6087,7 @@ sub print_coursecategories {
                 $datatable .= &initialize_categories($itemcount);
             }
         } else {
-            $datatable .= '<td class="LC_right_item">'.$hdritem->{'header'}->[1]->{'col2'}.'</td>'
+            $datatable .= '<tr><td class="LC_right_item">'.$hdritem->{'header'}->[1]->{'col2'}.'</td></tr>'
                           .&initialize_categories($itemcount);
         }
         $$rowtotal += $itemcount;
@@ -6765,7 +6135,7 @@ sub print_serverstatuses {
                       '<span class="LC_nobreak">'.
                       '<input type="text" name="'.$type.'_machines" '.
                       'value="'.$machineaccess{$type}.'" size="10" />'.
-                      '</td></tr>'."\n";
+                      '</span></td></tr>'."\n";
     }
     $$rowtotal += $rownum;
     return $datatable;
@@ -6990,7 +6360,7 @@ sub initialize_categories {
     my $select1 = '';
     foreach my $default ('instcode','communities') {
         $css_class = $itemcount%2?' class="LC_odd_row"':'';
-        $chgstr = ' onchange="javascript:reorderCats(this.form,'."'',$default"."_pos','0'".');"';
+        $chgstr = ' onchange="javascript:reorderCats(this.form,'."'','$default"."_pos','0'".');"';
         if ($default eq 'communities') {
             $select1 = $select0;
             $select0 = '';
@@ -7015,8 +6385,9 @@ sub initialize_categories {
                   .'<option value="0">1</option>'
                   .'<option value="1">2</option>'
                   .'<option value="2" selected="selected">3</option></select>&nbsp;'
-                  .&mt('Add category').'</td><td>'.&mt('Name:')
-                  .'&nbsp;<input type="text" size="20" name="addcategory_name" value="" /></td></tr>';
+                  .&mt('Add category').'</span></td><tda<span class="LC_nobreak">>'.&mt('Name:')
+                  .'&nbsp;<input type="text" size="20" name="addcategory_name" value="" /></span>'
+                  .'</td></tr>';
     return $datatable;
 }
 
@@ -7071,7 +6442,7 @@ sub build_category_rows {
                             pop(@{$path});
                         }
                     } else {
-                        $text .= &mt('Add subcategory:').'&nbsp;</span><input type="textbox" size="20" name="addcategory_name_';
+                        $text .= &mt('Add subcategory:').'&nbsp;</span><input type="text" size="20" name="addcategory_name_';
                         if ($j == $numchildren) {
                             $text .= $name;
                         } else {
@@ -7094,7 +6465,7 @@ sub build_category_rows {
                 my $colspan;
                 if ($parent ne 'instcode') {
                     $colspan = $maxdepth - $depth - 1;
-                    $text .= '<td colspan="'.$colspan.'">'.&mt('Add subcategory:').'<input type="textbox" size="20" name="subcat_'.$name.'" value="" /></td>';
+                    $text .= '<td colspan="'.$colspan.'">'.&mt('Add subcategory:').'<input type="text" size="20" name="subcat_'.$name.'" value="" /></td>';
                 }
             }
         }
@@ -7237,13 +6608,11 @@ sub modifiable_userdata_row {
 }
 
 sub insttypes_row {
-    my ($settings,$types,$usertypes,$dom,$numinrow,$othertitle,$context,$rowtotal,$onclick,
-        $customcss,$rowstyle) = @_;
+    my ($settings,$types,$usertypes,$dom,$numinrow,$othertitle,$context,$rownum) = @_;
     my %lt = &Apache::lonlocal::texthash (
                       cansearch => 'Users allowed to search',
                       statustocreate => 'Institutional affiliation(s) able to create own account (login/SSO)',
                       lockablenames => 'User preference to lock name',
-                      overrides     => "Override domain's helpdesk settings based on requester's affiliation",
              );
     my $showdom;
     if ($context eq 'cansearch') {
@@ -7253,22 +6622,9 @@ sub insttypes_row {
     if ($context eq 'statustocreate') {
         $class = 'LC_right_item';
     }
-    my $css_class;
-    if ($$rowtotal%2) {
-        $css_class = 'LC_odd_row';
-    }
-    if ($customcss) {
-        $css_class .= ' '.$customcss;
-    }
-    $css_class =~ s/^\s+//;
-    if ($css_class) {
-        $css_class = ' class="'.$css_class.'"';
-    }
-    if ($rowstyle) {
-        $css_class .= ' style="'.$rowstyle.'"';
-    }
-    if ($onclick) {
-        $onclick = 'onclick="'.$onclick.'" ';
+    my $css_class = ' class="LC_odd_row"';
+    if ($rownum ne '') { 
+        $css_class = ($rownum%2? ' class="LC_odd_row"':'');
     }
     my $output = '<tr'.$css_class.'>'.
                  '<td>'.$lt{$context}.$showdom.
@@ -7290,10 +6646,6 @@ sub insttypes_row {
                         if (grep(/^\Q$types->[$i]\E$/,@{$settings->{$context}})) {
                             $check = ' checked="checked" ';
                         }
-                    } elsif (ref($settings->{$context}) eq 'HASH') {
-                        if (ref($settings->{$context}->{$types->[$i]}) eq 'HASH') {
-                            $check = ' checked="checked" ';
-                        }
                     } elsif ($context eq 'statustocreate') {
                         $check = ' checked="checked" ';
                     }
@@ -7308,38 +6660,29 @@ sub insttypes_row {
         $rem = @{$types}%($numinrow);
     }
     my $colsleft = $numinrow - $rem;
-    if ($context eq 'overrides') {
-        if ($colsleft > 1) {
-            $output .= '<td colspan="'.$colsleft.'" class="LC_left_item">';
-        } else {
-            $output .= '<td class="LC_left_item">';
-        }
-        $output .= '&nbsp;';
+    if ($rem == 0) {
+        $output .= '<tr>';
+    }
+    if ($colsleft > 1) {
+        $output .= '<td colspan="'.$colsleft.'" class="LC_left_item">';
     } else {
-        if (($rem == 0) && (@{$types} > 0)) {
-            $output .= '<tr>';
-        }
-        if ($colsleft > 1) {
-            $output .= '<td colspan="'.$colsleft.'" class="LC_left_item">';
-        } else {
-            $output .= '<td class="LC_left_item">';
-        }
-        my $defcheck = ' ';
-        if (ref($settings) eq 'HASH') {  
-            if (ref($settings->{$context}) eq 'ARRAY') {
-                if (grep(/^default$/,@{$settings->{$context}})) {
-                    $defcheck = ' checked="checked" ';
-                }
-            } elsif ($context eq 'statustocreate') {
+        $output .= '<td class="LC_left_item">';
+    }
+    my $defcheck = ' ';
+    if (ref($settings) eq 'HASH') {  
+        if (ref($settings->{$context}) eq 'ARRAY') {
+            if (grep(/^default$/,@{$settings->{$context}})) {
                 $defcheck = ' checked="checked" ';
             }
+        } elsif ($context eq 'statustocreate') {
+            $defcheck = ' checked="checked" ';
         }
-        $output .= '<span class="LC_nobreak"><label>'.
-                   '<input type="checkbox" name="'.$context.'" '.
-                   'value="default"'.$defcheck.'/>'.
-                   $othertitle.'</label></span>';
     }
-    $output .= '</td></tr></table></td></tr>';
+    $output .= '<span class="LC_nobreak"><label>'.
+               '<input type="checkbox" name="'.$context.'" '.
+               'value="default"'.$defcheck.'/>'.
+               $othertitle.'</label></span></td>'.
+               '</tr></table></td></tr>';
     return $output;
 }
 
@@ -8779,20 +8122,16 @@ sub modify_quotas {
                                     #FIXME need to obsolete item in RES space
                                 } elsif ($env{'form.'.$type.'_image_'.$i.'.filename'}) {
                                     my ($cdom,$cnum) = split(/_/,$key);
-                                    if (&Apache::lonnet::homeserver($cnum,$cdom) eq 'no_host') {
-                                        $errors .= '<li><span class="LC_error">'.&mt('Image not saved: could not find textbook course').'</li>';
-                                    } else { 
-                                        my ($imgurl,$error) = &process_textbook_image($r,$dom,$confname,$type.'_image_'.$i,
-                                                                                      $cdom,$cnum,$type,$configuserok,
-                                                                                      $switchserver,$author_ok);
-                                        if ($imgurl) {
-                                            $confhash{$type}{$key}{'image'} = $imgurl;
-                                            $changes{$type}{$key} = 1; 
-                                        }
-                                        if ($error) {
-                                            &Apache::lonnet::logthis($error);
-                                            $errors .= '<li><span class="LC_error">'.$error.'</span></li>';
-                                        }
+                                    my ($imgurl,$error) = &process_textbook_image($r,$dom,$confname,$type.'_image_'.$i,
+                                                                                  $cdom,$cnum,$type,$configuserok,
+                                                                                  $switchserver,$author_ok);
+                                    if ($imgurl) {
+                                        $confhash{$type}{$key}{'image'} = $imgurl;
+                                        $changes{$type}{$key} = 1; 
+                                    }
+                                    if ($error) {
+                                        &Apache::lonnet::logthis($error);
+                                        $errors .= '<li><span class="LC_error">'.$error.'</span></li>';
                                     } 
                                 } elsif ($domconfig{$action}{$type}{$key}{'image'}) {
                                     $confhash{$type}{$key}{'image'} = 
@@ -9326,7 +8665,7 @@ sub process_textbook_image {
         } elsif ($author_ok eq 'ok') {
             my ($result,$imageurl) =
                 &publishlogo($r,'upload',$caller,$dom,$confname,
-                             "$type/$cdom/$cnum/cover",$width,$height);
+                             "$type/$dom/$cnum/cover",$width,$height);
             if ($result eq 'ok') {
                 $url = $imageurl;
             } else {
@@ -9341,590 +8680,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') {
-                $env{'form.ltitools_add_'.$item} =~ s/(`)/'/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'};
-            }
-            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';
-            }
-            foreach my $item ('passback','roster') {
-                if ($env{'form.ltitools_add_'.$item}) {
-                    $confhash{$newid}{$item} = 1;
-                }
-            }
-            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;
-                    }
-                }
-            }
-            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') {
-                        $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};
-                    }
-                    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;
-                    }
-                    foreach my $extra ('passback','roster') {
-                        if ($env{'form.ltitools_'.$extra.'_'.$i}) {
-                            $confhash{$itemid}{$extra} = 1;
-                        }
-                        if ($domconfig{$action}{$itemid}{$extra} ne $confhash{$itemid}{$extra}) {
-                            $changes{$itemid} = 1;
-                        }
-                    }
-                    my @courseconfig = &Apache::loncommon::get_env_multiple('form.ltitools_courseconfig_'.$i);
-                    foreach my $item ('label','title','target','linktext','explanation') {
-                        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;
-                                }
-                            }
-                        }
-                    }
-                    $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','url') {
-                        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');
-                    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>';
-                    foreach my $item ('passback','roster') {
-                        $resulttext .= '<li>'.$lt{$item}.'&nbsp;';
-                        if ($confhash{$itemid}{$item}) {
-                            $resulttext .= &mt('Yes');
-                        } else {
-                            $resulttext .= &mt('No');
-                        }
-                        $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/,$//;
-                            $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);
@@ -10550,57 +9305,17 @@ sub modify_contacts {
                 my $value = $env{'form.helpform_'.$field};
                 $value =~ s/^\s+|\s+$//g;
                 if (grep(/^\Q$value\E$/,@{$possoptions->{$field}})) {
-                    $contacts_hash{'contacts'}{'helpform'}{$field} = $value;
+                    $contacts_hash{contacts}{'helpform'}{$field} = $value;
                     if ($field eq 'screenshot') {
                         $env{'form.helpform_maxsize'} =~ s/^\s+|\s+$//g;
                         if ($env{'form.helpform_maxsize'} =~ /^\d+\.?\d*$/) {
-                            $contacts_hash{'contacts'}{'helpform'}{'maxsize'} = $env{'form.helpform_maxsize'};
+                            $contacts_hash{contacts}{'helpform'}{'maxsize'} = $env{'form.helpform_maxsize'};
                         }
                     }
                 }
             }
         }
     }
-    my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom);
-    my (@statuses,%usertypeshash,@overrides);
-    if ((ref($types) eq 'ARRAY') && (@{$types} > 0)) {
-        @statuses = @{$types};
-        if (ref($usertypes) eq 'HASH') {
-            %usertypeshash = %{$usertypes};
-        }
-    }
-    if (@statuses) {
-        my @possoverrides = &Apache::loncommon::get_env_multiple('form.overrides');
-        foreach my $type (@possoverrides) {
-            if (($type ne '') && (grep(/^\Q$type\E$/,@statuses))) {
-                push(@overrides,$type);
-            }
-        }
-        if (@overrides) {
-            foreach my $type (@overrides) {
-                my @standard = &Apache::loncommon::get_env_multiple('form.override_'.$type);
-                foreach my $item (@contacts) {
-                    if (grep(/^\Q$item\E$/,@standard)) {
-                        $contacts_hash{'contacts'}{'overrides'}{$type}{$item} = 1;
-                        $newsetting{'override_'.$type}{$item} = 1;
-                    } else {
-                        $contacts_hash{'contacts'}{'overrides'}{$type}{$item} = 0;
-                        $newsetting{'override_'.$type}{$item} = 0;
-                    }
-                }
-                $contacts_hash{'contacts'}{'overrides'}{$type}{'others'} = $env{'form.override_'.$type.'_others'};
-                $contacts_hash{'contacts'}{'overrides'}{$type}{'bcc'} = $env{'form.override_'.$type.'_bcc'};
-                $newsetting{'override_'.$type}{'others'} = $env{'form.override_'.$type.'_others'};
-                $newsetting{'override_'.$type}{'bcc'} = $env{'form.override_'.$type.'_bcc'};
-                if (($env{'form.override_'.$type.'_includestr'} ne '') && ($env{'form.override_'.$type.'_includeloc'} =~ /^s|b$/)) {
-                    $includestr{$type} = $env{'form.override_'.$type.'_includestr'};
-                    $includeloc{$type} = $env{'form.override_'.$type.'_includeloc'};
-                    $contacts_hash{'contacts'}{'overrides'}{$type}{'include'} = $includeloc{$type}.':'.&escape($includestr{$type});
-                    $newsetting{'override_'.$type}{'include'} = $contacts_hash{'contacts'}{'overrides'}{$type}{'include'};
-                }
-            }
-        }
-    }
     if (keys(%currsetting) > 0) {
         foreach my $item (@contacts) {
             if ($to{$item} ne $currsetting{$item}) {
@@ -10655,33 +9370,6 @@ sub modify_contacts {
                 }
             }
         }
-        if (@statuses) {
-            if (ref($currsetting{'overrides'}) eq 'HASH') {
-                foreach my $key (keys(%{$currsetting{'overrides'}})) {
-                    if (ref($currsetting{'overrides'}{$key}) eq 'HASH') {
-                        if (ref($newsetting{'override_'.$key}) eq 'HASH') {
-                            foreach my $item (@contacts,'bcc','others','include') {
-                                if ($currsetting{'overrides'}{$key}{$item} ne $newsetting{'override_'.$key}{$item}) {
-                                    push(@{$changes{'overrides'}},$key);
-                                    last;
-                                }
-                            }
-                        } else {
-                            push(@{$changes{'overrides'}},$key);
-                        }
-                    }
-                }
-                foreach my $key (@overrides) {
-                    unless (exists($currsetting{'overrides'}{$key})) {
-                        push(@{$changes{'overrides'}},$key);
-                    }
-                }
-            } else {
-                foreach my $key (@overrides) {
-                    push(@{$changes{'overrides'}},$key);
-                }
-            }
-        }
     } else {
         my %default;
         $default{'supportemail'} = $Apache::lonnet::perlvar{'lonSupportEMail'};
@@ -10796,60 +9484,6 @@ sub modify_contacts {
                     $resulttext .= '</li>';
                 }
             }
-            if (ref($changes{'overrides'}) eq 'ARRAY') {
-                my @deletions;
-                foreach my $type (@{$changes{'overrides'}}) {
-                    if ($usertypeshash{$type}) {
-                        if (grep(/^\Q$type\E/,@overrides)) {
-                            $resulttext .= '<li>'.&mt("Overrides based on requester's affiliation set for [_1]",
-                                                      $usertypeshash{$type}).'<ul><li>';
-                            if (ref($newsetting{'override_'.$type}) eq 'HASH') {
-                                my @text;
-                                foreach my $item (@contacts) {
-                                    if ($newsetting{'override_'.$type}{$item}) {
-                                        push(@text,$short_titles->{$item});
-                                    }
-                                }
-                                if ($newsetting{'override_'.$type}{'others'} ne '') {
-                                    push(@text,$newsetting{'override_'.$type}{'others'});
-                                }
-
-                                if (@text) {
-                                    $resulttext .= &mt('Helpdesk e-mail sent to: [_1]',
-                                                       '<span class="LC_cusr_emph">'.join(', ',@text).'</span>');
-                                }
-                                if ($newsetting{'override_'.$type}{'bcc'} ne '') {
-                                    my $bcctext;
-                                    if (@text) {
-                                        $bcctext = '&nbsp;'.&mt('with Bcc to');
-                                    } else {
-                                        $bcctext = '(Bcc)';
-                                    }
-                                    $resulttext .= $bcctext.': <span class="LC_cusr_emph">'.$newsetting{'override_'.$type}{'bcc'}.'</span>';
-                                } elsif (!@text) {
-                                     $resulttext .= &mt('Helpdesk e-mail sent to no one');
-                                }
-                                $resulttext .= '</li>';
-                                if ($newsetting{'override_'.$type}{'include'} ne '') {
-                                    my ($loc,$str) = split(/:/,$newsetting{'override_'.$type}{'include'});
-                                    if ($loc eq 'b') {
-                                        $resulttext .= '<li>'.&mt('Text automatically added to e-mail body:').' '.&unescape($str).'</li>';
-                                    } elsif ($loc eq 's') {
-                                        $resulttext .= '<li>'.&mt('Text automatically added to e-mail subject:').' '.&unescape($str).'</li>';
-                                    }
-                                }
-                            }
-                            $resulttext .= '</li></ul></li>';
-                        } else {
-                            push(@deletions,$usertypeshash{$type});
-                        }
-                    }
-                }
-                if (@deletions) {
-                    $resulttext .= '<li>'.&mt("Overrides based on requester's affiliation discontinued for: [_1]",
-                                              join(', ',@deletions)).'</li>';
-                }
-            }
             my @offon = ('off','on');
             if ($changes{'reporterrors'}) {
                 $resulttext .= '<li>'.
@@ -10905,6 +9539,7 @@ sub modify_contacts {
                                    &mt('Max size for file uploaded to help form by logged-in user set to [_1] MB.',
                                        $contacts_hash{'contacts'}{'helpform'}{'maxsize'}).
                                    '</li>';
+
                 }
             }
             $resulttext .= '</ul>';
@@ -14934,7 +13569,7 @@ sub devalidate_remote_domconfs {
     my %servers = &Apache::lonnet::internet_dom_servers($dom);
     my %thismachine;
     map { $thismachine{$_} = 1; } &Apache::lonnet::current_machine_ids();
-    my @posscached = ('domainconfig','domdefaults','ltitools','usersessions','directorysrch');
+    my @posscached = ('domainconfig','domdefaults','usersessions','directorysrch');
     if (keys(%servers)) {
         foreach my $server (keys(%servers)) {
             next if ($thismachine{$server});