--- loncom/interface/domainprefs.pm	2012/10/02 18:35:19	1.172
+++ loncom/interface/domainprefs.pm	2013/01/09 21:34:26	1.187
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Handler to set domain-wide configuration settings
 #
-# $Id: domainprefs.pm,v 1.172 2012/10/02 18:35:19 raeburn Exp $
+# $Id: domainprefs.pm,v 1.187 2013/01/09 21:34:26 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -45,7 +45,7 @@ described at http://www.lon-capa.org.
 =head1 OVERVIEW
 
 Each institution using LON-CAPA will typically have a single domain designated 
-for use by individuals affliated with the institution.  Accordingly, each domain
+for use by individuals affiliated with the institution.  Accordingly, each domain
 may define a default set of logos and a color scheme which can be used to "brand"
 the LON-CAPA instance. In addition, an institution will typically have a language
 and timezone which are used for the majority of courses.
@@ -386,11 +386,11 @@ sub handler {
                               col2 => 'Rules'}],
                  },
          'loadbalancing' =>
-                 {text  => 'Dedicated Load Balancer',
+                 {text  => 'Dedicated Load Balancer(s)',
                   help  => 'Domain_Configuration_Load_Balancing',
                   header => [{col1 => 'Balancers',
                               col2 => 'Default destinations',
-                              col3 => 'User affliation',
+                              col3 => 'User affiliation',
                               col4 => 'Overrides'},
                             ],
                  },
@@ -406,12 +406,14 @@ sub handler {
                                         col2 => 'Value'}],
                            };
     }
+
     my @roles = ('student','coordinator','author','admin');
     my @actions = &Apache::loncommon::get_env_multiple('form.actions');
     &Apache::lonhtmlcommon::add_breadcrumb
     ({href=>"javascript:changePage(document.$phase,'pickactions')",
       text=>"Settings to display/modify"});
     my $confname = $dom.'-domainconfig';
+
     if ($phase eq 'process') {
         &Apache::lonconfigsettings::make_changes($r,$dom,$phase,$context,\@prefs_order,\%prefs,\%domconfig,$confname,\@roles);
     } elsif ($phase eq 'display') {
@@ -427,6 +429,34 @@ sub handler {
         }
         &Apache::lonconfigsettings::display_settings($r,$dom,$phase,$context,\@prefs_order,\%prefs,\%domconfig,$confname,$js);
     } else {
+# check if domconfig user exists for the domain.
+        my $servadm = $r->dir_config('lonAdmEMail');
+        my ($configuserok,$author_ok,$switchserver) =
+            &config_check($dom,$confname,$servadm);
+        unless ($configuserok eq 'ok') {
+            &Apache::lonconfigsettings::print_header($r,$phase,$context);
+            $r->print(&mt('The domain configuration user "[_1]" has yet to be created.',
+                           $confname).
+                      '<br />'
+            );
+            if ($switchserver) {
+                $r->print(&mt('Ordinarily, that domain configuration user is created when the ./UPDATE script is run to install LON-CAPA for the first time.').
+                          '<br />'.
+                          &mt('However, that does not apply when new domains are added to a multi-domain server, and ./UPDATE has not been run recently.').
+                          '<br />'.
+                          &mt('The "[_1]" user can be created automatically when a Domain Coordinator visits the web-based "Set domain configuration" screen, in a session hosted on the primary library server.',$confname).
+                          '<br />'.
+                          &mt('To do that now, use the following link: [_1]',$switchserver)
+                );
+            } else {
+                $r->print(&mt('To create that user from the command line run the ./UPDATE script found in the top level directory of the extracted LON-CAPA tarball.').
+                          '<br />'.
+                          &mt('Once that is done, you will be able to use the web-based "Set domain configuration" to configure the domain')
+                );
+            }
+            $r->print(&Apache::loncommon::end_page());
+            return OK;
+        }
         if (keys(%domconfig) == 0) {
             my $primarylibserv = &Apache::lonnet::domain($dom,'primary');
             my @ids=&Apache::lonnet::current_machine_ids();
@@ -809,7 +839,7 @@ sub print_login {
                           '<td><select name="'.$lonhost.'_server">'.
                           '<option value=""'.$direct.'>'.$choices{'directlogin'}.
                           '</option>';
-            foreach my $hostid (keys(%servers)) {
+            foreach my $hostid (sort(keys(%servers))) {
                 next if ($servers{$hostid} eq $servers{$lonhost});
                 my $selected = '';
                 if (ref($disallowed{$lonhost}) eq 'HASH') {
@@ -1191,13 +1221,12 @@ sub display_color_options {
     } else {
         $datatable .= '<td>&nbsp;</td>';
     }
-    my $fontlink = &color_pick($phase,$role,'font',$choices->{'font'},$designs->{'font'});
+    my $current_color = $designs->{'font'} ? $designs->{'font'} : $defaults->{'font'};
+
     $datatable .= '<td><span class="LC_nobreak">'.
-                  '<input type="text" size="10" name="'.$role.'_font"'.
-                  ' value="'.$designs->{'font'}.'" />&nbsp;'.$fontlink.
-                  '&nbsp;<span id="css_'.$role.'_font" style="background-color: '.
-                  $designs->{'font'}.';">&nbsp;&nbsp;&nbsp;</span>'.
-                  '</span></td></tr>';
+                  '<input type="text" class="colorchooser" size="10" name="'.$role.'_font"'.
+                  ' value="'.$current_color.'" />&nbsp;'. 
+                  '&nbsp;</td></tr>';
     unless ($role eq 'login') { 
         $datatable .= '<tr'.$css_class.'>'.
                       '<td>'.$choices->{'fontmenu'}.'</td>';
@@ -1206,13 +1235,13 @@ sub display_color_options {
         } else {
             $datatable .= '<td>&nbsp;</td>';
         }
-        $fontlink = &color_pick($phase,$role,'fontmenu',$choices->{'fontmenu'},$designs->{'fontmenu'});
+	$current_color = $designs->{'fontmenu'} ? 
+	    $designs->{'fontmenu'} : $defaults->{'fontmenu'};
         $datatable .= '<td><span class="LC_nobreak">'.
-                      '<input type="text" size="10" name="'.$role.'_fontmenu"'.
-                      ' value="'.$designs->{'fontmenu'}.'" />&nbsp;'.$fontlink.
-                      '&nbsp;<span id="css_'.$role.'_fontmenu" style="background-color: '.
-                      $designs->{'fontmenu'}.';">&nbsp;&nbsp;&nbsp;</span>'.
-                      '</span></td></tr>';
+                      '<input class="colorchooser" type="text" size="10" name="'
+		      .$role.'_fontmenu"'.
+                      ' value="'.$current_color.'" />&nbsp;'.
+                      '&nbsp;</td></tr>';
     }
     my $switchserver = &check_switchserver($dom,$confname);
     foreach my $img (@{$images}) {
@@ -1339,13 +1368,14 @@ sub display_color_options {
     }
     $datatable .= '<td class="LC_right_item">'.
                   '<table border="0"><tr>';
+
     foreach my $item (@{$bgs}) {
-        my $link = &color_pick($phase,$role,$item,$choices->{$item},$designs->{'bgs'}{$item});
-        $datatable .= '<td align="center">'.$link;
+        $datatable .= '<td align="center">';
+	my $color = $designs->{'bgs'}{$item} ? $designs->{'bgs'}{$item} : $defaults->{'bgs'}{$item};
         if ($designs->{'bgs'}{$item}) {
-            $datatable .= '&nbsp;<span id="css_'.$role.'_'.$item.'" style="background-color: '.$designs->{'bgs'}{$item}.';">&nbsp;&nbsp;&nbsp;</span>';
+            $datatable .= '&nbsp;';
         }
-        $datatable .= '<br /><input type="text" size="8" name="'.$role.'_'.$item.'" value="'.$designs->{'bgs'}{$item}.
+        $datatable .= '<br /><input type="text" class="colorchooser" size="8" name="'.$role.'_'.$item.'" value="'.$color.
                       '" onblur = "javascript:colchg_span('."'css_".$role.'_'.$item."'".',this);" /></td>';
     }
     $datatable .= '</tr></table></td></tr>';
@@ -1367,13 +1397,13 @@ sub display_color_options {
     $datatable .= '<td class="LC_right_item">'.
                   '<table border="0"><tr>';
     foreach my $item (@{$links}) {
-        $datatable .= '<td align="center">'."\n".
-                      &color_pick($phase,$role,$item,$choices->{$item},
-                                  $designs->{'links'}{$item});
+	my $color = $designs->{'link'}{$item} ? $designs->{'link'}{$item} : $defaults->{'links'}{$item};
+        $datatable .= '<td align="center">'."\n";
+
         if ($designs->{'links'}{$item}) {
-            $datatable.='&nbsp;<span id="css_'.$role.'_'.$item.'" style="background-color: '.$designs->{'links'}{$item}.';">&nbsp;&nbsp;&nbsp;</span>';
+            $datatable.='&nbsp;';
         }
-        $datatable .= '<br /><input type="text" size="8" name="'.$role.'_'.$item.'" value="'.$designs->{'links'}{$item}.
+        $datatable .= '<br /><input type="text" size="8" class="colorchooser" name="'.$role.'_'.$item.'" value="'.$color.
                       '" /></td>';
     }
     $$rowtotal += $itemcount;
@@ -1859,8 +1889,8 @@ sub print_quotas {
                     $checked = ' checked="checked"';
                 }
                 $datatable .= '<span class="LC_nobreak"><label>'.
-                              '<input type="radio" name="crsreq_'.$item.
-                              '__LC_adv" value="'.$val.'"'.$checked.' />'.
+                              '<input type="radio" name="authorreq__LC_adv"'.
+                              ' value="'.$val.'"'.$checked.' />'.
                               $titles{$option}.'</label></span>&nbsp; ';
             }
         } else {
@@ -1963,7 +1993,7 @@ sub print_requestmail {
             $datatable .= '<span class="LC_nobreak"><label>'.
                           '<input type="checkbox" name="reqapprovalnotify" '.
                           'value="'.$domcoord[$i].'"'.$check.'/>'.
-                          $fullname.'</label></span></td>';
+                          $fullname.' ('.$uname.':'.$udom.')</label></span></td>';
         }
         $datatable .= '</tr></table>';
     } else {
@@ -2756,7 +2786,10 @@ sub spares_row {
             $css_class = $itemcount%2 ? ' class="LC_odd_row"' : '';
             $datatable .= '<tr'.$css_class.'>
                            <td rowspan="2">
-                            <span class="LC_nobreak"><b>'.$server.'</b> when busy, offloads to:</span></td>'."\n";
+                            <span class="LC_nobreak">'.
+                          &mt('[_1] when busy, offloads to:'
+                              ,'<b>'.$server.'</b>').
+                          "\n";
             my (%current,%canselect);
             my @choices = 
                 &possible_newspares($server,$spareid->{$server},$serverhomes,$altids);
@@ -3005,7 +3038,6 @@ sub print_loadbalancing {
                                '<table><tr>'.$targettable.'</tr></table><br />';
             }
         }
-        my $cssidx = $balnum%2; 
         $datatable .= '</div></td></tr>'.
                       &loadbalancing_rules($dom,$intdom,$currrules{$lonhost},
                                            $othertitle,$usertypes,$types,\%servers,
@@ -5578,7 +5610,7 @@ sub write_metadata {
         print $logfile "\nWrite metadata file for ".$targetdir.'/'.$file;
         my $mfh;
         if (open($mfh,'>'.$targetdir.'/'.$file.'.meta')) {
-            foreach (sort keys %metadatafields) {
+            foreach (sort(keys(%metadatafields))) {
                 unless ($_=~/\./) {
                     my $unikey=$_;
                     $unikey=~/^([A-Za-z]+)/;
@@ -5662,7 +5694,7 @@ sub check_switchserver {
     my @ids=&Apache::lonnet::current_machine_ids();
     foreach my $id (@ids) { if ($id eq $home) { $allowed=1; } }
     if (!$allowed) {
-	$switchserver='<a href="/adm/switchserver?otherserver='.$home.'&role=dc./'.$dom.'/">'.&mt('Switch Server').'</a>';
+	$switchserver='<a href="/adm/switchserver?otherserver='.$home.'&amp;role=dc./'.$dom.'/&amp;destinationurl=/adm/domainprefs">'.&mt('Switch Server').'</a>';
     }
     return $switchserver;
 }
@@ -6309,13 +6341,16 @@ sub modify_autocreate {
             foreach my $item (@types) {
                 if ($changes{$item}) {
                     my $newtxt = $offon[$newvals{$item}];
-                    $resulttext .= '<li>'.&mt("$title{$item} set to [_1]$newtxt [_2]",'<b>','</b>').'</li>';
+                    $resulttext .= '<li>'.
+                                   &mt("$title{$item} set to [_1]$newtxt [_2]",
+                                       '<b>','</b>').
+                                   '</li>';
                 }
             }
             if ($changes{'xmldc'}) {
                 my ($dcname,$dcdom) = split(':',$newvals{'xmldc'});
                 my $newtxt = &Apache::loncommon::plainname($dcname,$dcdom);
-                $resulttext .= '<li>'.&mt("$title{'xmldc'} set to [_1]$newtxt [_2]",'<b>','</b>').'</li>'; 
+                $resulttext .= '<li>'.&mt("$title{'xmldc'} set to [_1]",'<b>'.$newtxt.'</b>').'</li>'; 
             }
             $resulttext .= '</ul>';
         } else {
@@ -6461,7 +6496,11 @@ sub modify_directorysrch {
                         } else {
                             $chgtext =~ s/\; $//;
                         }
-                        $resulttext .= '<li>'.&mt("Users from domain '<span class=\"LC_cusr_emph\">[_1]</span>' permitted to search the institutional directory set to: [_2]",$dom,$chgtext).'</li>';
+                        $resulttext .= 
+                            '<li>'.
+                            &mt("Users from domain '[_1]' permitted to search the institutional directory set to: [_2]",
+                                '<span class="LC_cusr_emph">'.$dom.'</span>',$chgtext).
+                            '</li>';
                     }
                 }
             }
@@ -6489,7 +6528,7 @@ sub modify_directorysrch {
                     }
                 }
                 $chgtext =~ s/\; $//;
-                $resulttext .= '<li>'.&mt("$title{'searchtypes'} set to: \"[_1]\"",$chgtext).'</li>';
+                $resulttext .= '<li>'.&mt($title{'searchtypes'}.' set to: "[_1]"',$chgtext).'</li>';
             }
             $resulttext .= '</ul>';
         } else {
@@ -7075,10 +7114,12 @@ sub process_captcha {
     if (ref($current->{'recaptchakeys'}) eq 'HASH') {
         $currpub = $current->{'recaptchakeys'}{'public'};
         $currpriv = $current->{'recaptchakeys'}{'private'};
-        $newsettings->{'recaptchakeys'} = {
-                                             public  => '',
-                                             private => '',
-                                          }
+        unless ($newsettings->{'captcha'} eq 'recaptcha') {
+            $newsettings->{'recaptchakeys'} = {
+                                                 public  => '',
+                                                 private => '',
+                                              }
+        }
     }
     if (($newpub ne $currpub) || ($newpriv ne $currpriv)) {
         if ($container eq 'cancreate') {
@@ -8454,6 +8495,7 @@ sub active_dc_picker {
                           '<input type="radio" name="autocreate_xmldc"'.
                           ' value="'.$dcs[$i].'"'.$check.'/>'.
                           &Apache::loncommon::plainname($dcname,$dcdom).
+                          ' ('.$dcname.':'.$dcdom.')'.
                           '</label></span></td>';
         }
         $datatable .= '</tr></table>';