--- loncom/interface/domainprefs.pm	2014/08/06 17:21:34	1.160.6.53
+++ loncom/interface/domainprefs.pm	2014/05/30 00:11:06	1.245
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Handler to set domain-wide configuration settings
 #
-# $Id: domainprefs.pm,v 1.160.6.53 2014/08/06 17:21:34 raeburn Exp $
+# $Id: domainprefs.pm,v 1.245 2014/05/30 00:11:06 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -213,15 +213,15 @@ sub handler {
                 'quotas','autoenroll','autoupdate','autocreate',
                 'directorysrch','usercreation','usermodification',
                 'contacts','defaults','scantron','coursecategories',
-                'serverstatuses','requestcourses','coursedefaults',
-                'usersessions','loadbalancing','requestauthor',
-                'selfenrollment','inststatus'],$dom);
+                'serverstatuses','requestcourses','helpsettings',
+                'coursedefaults','usersessions','loadbalancing',
+                'requestauthor','selfenrollment','inststatus'],$dom);
     my @prefs_order = ('rolecolors','login','defaults','quotas','autoenroll',
                        'autoupdate','autocreate','directorysrch','contacts',
                        'usercreation','selfcreation','usermodification','scantron',
                        'requestcourses','requestauthor','coursecategories',
-                       'serverstatuses','coursedefaults','selfenrollment',
-                       'usersessions');
+                       'serverstatuses','helpsettings',
+                       'coursedefaults','selfenrollment','usersessions');
     my %existing;
     if (ref($domconfig{'loadbalancing'}) eq 'HASH') {
         %existing = %{$domconfig{'loadbalancing'}};
@@ -409,10 +409,20 @@ sub handler {
                   print => \&print_serverstatuses,
                   modify => \&modify_serverstatuses,
                  },
+        'helpsettings' =>
+                 {text   => 'Help page settings',
+                  help   => 'Domain_Configuration_Help_Settings',
+                  header => [{col1 => 'Help Settings (logged-in users)',
+                              col2 => 'Value'}],
+                  print  => \&print_helpsettings,
+                  modify => \&modify_helpsettings,
+                 },
         'coursedefaults' => 
                  {text => 'Course/Community defaults',
                   help => 'Domain_Configuration_Course_Defaults',
-                  header => [{col1 => 'Defaults which can be overridden for each course by a DC',
+                  header => [{col1 => 'Defaults which can be overridden in each course by a CC',
+                              col2 => 'Value',},
+                             {col1 => 'Defaults which can be overridden for each course by a DC',
                               col2 => 'Value',},],
                   print => \&print_coursedefaults,
                   modify => \&modify_coursedefaults,
@@ -429,6 +439,14 @@ sub handler {
                   print => \&print_selfenrollment,
                   modify => \&modify_selfenrollment,
                  },
+        'privacy' => 
+                 {text   => 'User Privacy',
+                  help   => 'Domain_Configuration_User_Privacy',
+                  header => [{col1 => 'Setting',
+                              col2 => 'Value',}],
+                  print => \&print_privacy,
+                  modify => \&modify_privacy,
+                 },
         'usersessions' =>
                  {text  => 'User session hosting/offloading',
                   help  => 'Domain_Configuration_User_Sessions',
@@ -613,6 +631,8 @@ sub process_changes {
         $output = &modify_quotas($r,$dom,$action,$lastactref,%domconfig);
     } elsif ($action eq 'requestauthor') {
         $output = &modify_quotas($r,$dom,$action,$lastactref,%domconfig);
+    } elsif ($action eq 'helpsettings') {
+        $output = &modify_helpsettings($r,$dom,$confname,%domconfig);
     } elsif ($action eq 'coursedefaults') {
         $output = &modify_coursedefaults($dom,$lastactref,%domconfig);
     } elsif ($action eq 'selfenrollment') {
@@ -666,7 +686,7 @@ sub print_config_box {
              </tr>';
         $rowtotal ++;
         if (($action eq 'autoupdate') || ($action eq 'usercreation') || ($action eq 'selfcreation') ||
-            ($action eq 'usermodification') || ($action eq 'defaults') ||
+            ($action eq 'usermodification') || ($action eq 'defaults') || ($action eq 'coursedefaults') ||
             ($action eq 'selfenrollment') || ($action eq 'usersessions')) {
             $output .= $item->{'print'}->('top',$dom,$settings,\$rowtotal);
         } elsif ($action eq 'coursecategories') {
@@ -721,7 +741,8 @@ sub print_config_box {
                 $output .= $item->{'print'}->('bottom',$dom,$settings,\$rowtotal);
             }
             $rowtotal ++;
-        } elsif (($action eq 'usermodification') || ($action eq 'defaults')) {
+        } elsif (($action eq 'usermodification') || ($action eq 'coursedefaults') ||
+                  ($action eq 'defaults')) {
             $output .= $item->{'print'}->('bottom',$dom,$settings,\$rowtotal);
         } elsif ($action eq 'login') {
             if ($numheaders == 3) {
@@ -741,9 +762,8 @@ sub print_config_box {
                 $output .= &print_login('help',$dom,$confname,$phase,$settings,\$rowtotal);
             }
         } elsif ($action eq 'requestcourses') {
-            $output .= &print_requestmail($dom,$action,$settings,\$rowtotal);
-            $rowtotal ++;
-            $output .= &print_studentcode($settings,\$rowtotal).'
+            $output .= &print_requestmail($dom,$action,$settings,\$rowtotal).
+                       &print_studentcode($settings,\$rowtotal).'
            </table>
           </td>
          </tr>
@@ -778,7 +798,6 @@ sub print_config_box {
             &print_validation_rows('requestcourses',$dom,$settings,\$rowtotal);
         } elsif ($action eq 'requestauthor') {
             $output .= &print_requestmail($dom,$action,$settings,\$rowtotal);
-            $rowtotal ++;
         } elsif ($action eq 'rolecolors') {
             $output .= &print_rolecolors($phase,'coordinator',$dom,$confname,$settings,\$rowtotal).'
            </table>
@@ -864,8 +883,6 @@ sub print_config_box {
             $output .= &print_scantronformat($r,$dom,$confname,$settings,\$rowtotal);
         } elsif ($action eq 'helpsettings') {
             $output .= &print_helpsettings($dom,$confname,$settings,\$rowtotal);
-        } elsif ($action eq 'coursedefaults') {
-            $output .= $item->{'print'}->('bottom',$dom,$settings,\$rowtotal);
         }
     }
     $output .= '
@@ -2057,6 +2074,7 @@ sub print_requestmail {
         $datatable .= &mt('There are no active Domain Coordinators');
     }
     $datatable .='</td></tr>';
+    $$rowtotal += $rows;
     return $datatable;
 }
 
@@ -2065,11 +2083,9 @@ sub print_studentcode {
     my $rownum = 0; 
     my ($output,%current);
     my @crstypes = ('official','unofficial','community','textbook');
-    if (ref($settings) eq 'HASH') {
-        if (ref($settings->{'uniquecode'}) eq 'HASH') {
-            foreach my $type (@crstypes) {
-                $current{$type} = $settings->{'uniquecode'}{$type};
-            }
+    if (ref($settings->{'uniquecode'}) eq 'HASH') {
+        foreach my $type (@crstypes) {
+            $current{$type} = $settings->{'uniquecode'}{$type};
         }
     }
     $output .= '<tr>'.
@@ -2503,15 +2519,13 @@ sub print_autocreate {
                   $createoff{'req'}.' value="0" />'.&mt('No').'</label></span>';
     my ($numdc,$dctable,$rows) = &active_dc_picker($dom,$numinrow,'radio',
                                                    'autocreate_xmldc',%currhash);
-    $datatable .= '</td></tr><tr class="LC_odd_row"><td>';
     if ($numdc > 1) {
-        $datatable .= &mt('Course creation processed as: (choose Dom. Coord.)').
-                      '</td><td class="LC_left_item">';
+        $datatable .= '</td></tr><tr class="LC_odd_row"><td>'.
+                      &mt('Course creation processed as: (choose Dom. Coord.)').
+                      '</td><td class="LC_left_item">'.$dctable.'</td></tr>';
     } else {
-        $datatable .= &mt('Course creation processed as:').
-                      '</td><td class="LC_right_item">';
+        $datatable .= $dctable.'</td></tr>';
     }
-    $datatable .= $dctable.'</td></tr>';
     $$rowtotal += $rows;
     return $datatable;
 }
@@ -3103,24 +3117,21 @@ sub print_validation_rows {
     }
     if ($caller eq 'requestcourses') {
         my %currhash;
-        if (ref($settings) eq 'HASH') {
-            if (ref($settings->{'validation'}) eq 'HASH') {
-                if ($settings->{'validation'}{'dc'} ne '') {
-                    $currhash{$settings->{'validation'}{'dc'}} = 1;
-                }
+        if (ref($settings->{'validation'}) eq 'HASH') {
+            if ($settings->{'validation'}{'dc'} ne '') {
+                $currhash{$settings->{'validation'}{'dc'}} = 1;
             }
         }
         my $numinrow = 2;
         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>';
         if ($numdc > 1) {
-            $datatable .= &mt('Course creation processed as: (choose Dom. Coord.)');
+            $datatable .= '</td></tr><tr class="LC_odd_row"><td>'.
+                          &mt('Course creation processed as: (choose Dom. Coord.)').
+                          '</td><td class="LC_left_item">'.$dctable.'</td></tr>';
         } else {
-            $datatable .=  &mt('Course creation processed as: ');
+            $datatable .= $dctable.'</td></tr>';
         }
-        $datatable .= '</td><td class="LC_left_item">'.$dctable.'</td></tr>';
         $itemcount ++;
     }
     if (ref($rowtotal)) {
@@ -4146,10 +4157,8 @@ sub print_selfcreation {
                 $datatable .= '<tr>';
             }
             my $currval;
-            if (ref($createsettings) eq 'HASH') {
-                if (ref($createsettings->{'shibenv'}) eq 'HASH') {
-                    $currval = $createsettings->{'shibenv'}{$fields[$i]};
-                }
+            if (ref($createsettings->{'shibenv'}) eq 'HASH') {
+                $currval = $createsettings->{'shibenv'}{$fields[$i]};
             }
             $datatable .= '<td class="LC_left_item">'.
                           '<span class="LC_nobreak">'.
@@ -5153,14 +5162,14 @@ sub serverstatus_pages {
 
 sub defaults_javascript {
     my ($settings) = @_;
-    return unless (ref($settings) eq 'HASH');
+    my ($output,$jstext); 
     if ((ref($settings->{'inststatusorder'}) eq 'ARRAY') && (ref($settings->{'inststatustypes'}) eq 'HASH')) {
         my $maxnum = scalar(@{$settings->{'inststatusorder'}});
         if ($maxnum eq '') {
             $maxnum = 0;
         }
         $maxnum ++;
-        my $jstext = '    var inststatuses = Array('."'".join("','",@{$settings->{'inststatusorder'}})."'".');';  
+        $jstext = '    var inststatuses = Array('."'".join("','",@{$settings->{'inststatusorder'}})."'".');';  
         return <<"ENDSCRIPT";
 <script type="text/javascript">
 // <![CDATA[
@@ -6053,7 +6062,7 @@ sub modify_login {
                         if (!$privkey) {
                             $chgtxt .= '<li>'.&mt('Private key deleted').'</li>';
                         } else {
-                            $chgtxt .= '<li>'.&mt('Private key set to [_1]',$privkey).'</li>';
+                            $chgtxt .= '<li>'.&mt('Private key set to [_1]',$pubkey).'</li>';
                         }
                         $chgtxt .= '</ul>';
                         $resulttext .= '<li>'.$chgtxt.'</li>';
@@ -6965,7 +6974,7 @@ sub modify_quotas {
                                     my $newpos = $env{'form.'.$itemid};
                                     $newpos =~ s/\D+//g;
                                     foreach my $item ('subject','title','publisher','author') {
-                                        next if ((($item eq 'author') || ($item eq 'publisher')) &&
+                                        next if ((($item eq 'author') || ($item eq 'publisher')) && 
                                                  ($type eq 'templates'));
                                         $confhash{$type}{$key}{$item} = $env{'form.'.$type.'_'.$item.'_'.$i};
                                         if ($domconfig{$action}{$type}{$key}{$item} ne $confhash{$type}{$key}{$item}) {
@@ -9057,8 +9066,8 @@ sub process_captcha {
     if ($newsettings->{'captcha'} eq 'recaptcha') {
         $newpub = $env{'form.'.$container.'_recaptchapub'};
         $newpriv = $env{'form.'.$container.'_recaptchapriv'};
-        $newpub =~ s/[^\w\-]//g;
-        $newpriv =~ s/[^\w\-]//g;
+        $newpub =~ s/\W//g;
+        $newpriv =~ s/\W//g;
         $newsettings->{'recaptchakeys'} = {
                                              public  => $newpub,
                                              private => $newpriv,
@@ -9758,17 +9767,9 @@ sub modify_coursecategories {
             }
             $resulttext .= '</ul>';
             if ($changes{'unauth'} || $changes{'auth'}) {
-                my %domdefaults = &Apache::lonnet::get_domain_defaults($dom);
-                if ($changes{'auth'}) {
-                    $domdefaults{'catauth'} = $domconfig{'coursecategories'}{'auth'};
-                }
-                if ($changes{'unauth'}) {
-                    $domdefaults{'catunauth'} = $domconfig{'coursecategories'}{'unauth'};
-                }
-                my $cachetime = 24*60*60;
-                &Apache::lonnet::do_cache_new('domdefaults',$dom,\%domdefaults,$cachetime);
+                &Apache::loncommon::devalidate_domconfig_cache($dom);
                 if (ref($lastactref) eq 'HASH') {
-                    $lastactref->{'domdefaults'} = 1;
+                    $lastactref->{'domainconfig'} = 1;
                 }
             }
         } else {
@@ -10976,7 +10977,7 @@ sub active_dc_picker {
         my ($dcname,$dcdom) = split(':',$domcoord[0]);
         my $user = &Apache::loncommon::plainname($dcname,$dcdom);
         if ($inputtype eq 'radio') {
-            $table = '<input type="hidden" name="'.$name.'" value="'.$domcoord[0].'" />'.$user;
+            $table .= '<input type="hidden" name="'.$name.'" value="'.$domcoord[0].'" />'.$user;
             if ($user ne $dcname.':'.$dcdom) {
                 $table .=  ' ('.$dcname.':'.$dcdom.')';
             }
@@ -10985,9 +10986,9 @@ sub active_dc_picker {
             if (exists($currhash{$domcoord[0]})) {
                 $check = ' checked="checked"';
             }
-            $table = '<span class="LC_nobreak"><label>'.
-                     '<input type="checkbox" name="'.$name.'" '.
-                     'value="'.$domcoord[0].'"'.$check.' />'.$user;
+            $table .= '<span class="LC_nobreak"><label>'.
+                      '<input type="checkbox" name="'.$name.'" '.
+                      'value="'.$domcoord[0].'"'.$check.' />'.$user;
             if ($user ne $dcname.':'.$dcdom) {
                 $table .=  ' ('.$dcname.':'.$dcdom.')';
             }