Diff for /loncom/interface/domainprefs.pm between versions 1.447 and 1.447.2.6

version 1.447, 2024/12/31 19:28:29 version 1.447.2.6, 2025/03/15 01:07:42
Line 222  sub handler { Line 222  sub handler {
                 'coursedefaults','usersessions','loadbalancing',                  'coursedefaults','usersessions','loadbalancing',
                 'requestauthor','selfenrollment','inststatus',                  'requestauthor','selfenrollment','inststatus',
                 'ltitools','toolsec','ssl','trust','lti','ltisec',                  'ltitools','toolsec','ssl','trust','lti','ltisec',
                 'privacy','passwords','proctoring','wafproxy',                  'privacy','passwords','wafproxy',
                 'ipaccess','authordefaults'],$dom);                  'ipaccess','authordefaults'],$dom);
     my %encconfig =      my %encconfig =
         &Apache::lonnet::get_dom('encconfig',['ltitools','lti','proctoring','linkprot'],$dom,undef,1);          &Apache::lonnet::get_dom('encconfig',['ltitools','lti','linkprot'],$dom,undef,1);
     my ($checked_is_home,$is_home);      my ($checked_is_home,$is_home);
     if (ref($domconfig{'ltitools'}) eq 'HASH') {      if (ref($domconfig{'ltitools'}) eq 'HASH') {
         if (ref($encconfig{'ltitools'}) eq 'HASH') {          if (ref($encconfig{'ltitools'}) eq 'HASH') {
Line 288  sub handler { Line 288  sub handler {
             }              }
         }          }
     }      }
     if (ref($domconfig{'proctoring'}) eq 'HASH') {  
         if (ref($encconfig{'proctoring'}) eq 'HASH') {  
             foreach my $provider (keys(%{$domconfig{'proctoring'}})) {  
                 if ((ref($domconfig{'proctoring'}{$provider}) eq 'HASH') &&  
                     (ref($encconfig{'proctoring'}{$provider}) eq 'HASH')) {  
                     foreach my $item ('key','secret') {  
                         $domconfig{'proctoring'}{$provider}{$item} = $encconfig{'proctoring'}{$provider}{$item};  
                     }  
                 }  
             }  
         }  
     }  
     my @prefs_order = ('rolecolors','login','ipaccess','defaults','wafproxy','passwords',      my @prefs_order = ('rolecolors','login','ipaccess','defaults','wafproxy','passwords',
                        'quotas','autoenroll','autoupdate','autocreate','directorysrch',                         'quotas','autoenroll','autoupdate','autocreate','directorysrch',
                        'contacts','privacy','usercreation','selfcreation',                         'contacts','privacy','usercreation','selfcreation',
                        'usermodification','scantron','requestcourses','requestauthor',                         'usermodification','scantron','requestcourses','requestauthor',
                        'coursecategories','serverstatuses','helpsettings','coursedefaults',                         'coursecategories','serverstatuses','helpsettings','coursedefaults',
                        'authordefaults','ltitools','proctoring','selfenrollment',                         'authordefaults','ltitools','selfenrollment',
                        'usersessions','ssl','trust','lti');                         'usersessions','ssl','trust','lti');
     my %existing;      my %existing;
     if (ref($domconfig{'loadbalancing'}) eq 'HASH') {      if (ref($domconfig{'loadbalancing'}) eq 'HASH') {
Line 575  sub handler { Line 563  sub handler {
                   header => [{col1 => 'Role assigned in different domain',                    header => [{col1 => 'Role assigned in different domain',
                               col2 => 'Approval options'},                                col2 => 'Approval options'},
                              {col1 => 'Role assigned in different domain to user of type',                               {col1 => 'Role assigned in different domain to user of type',
                               col2 => 'User information available in that domain'},                                col2 => 'User information available in that domain'}],
                              {col1 => "Role assigned in user's domain",  
                               col2 => 'Information viewable by privileged user'},  
                              {col1 => "Role assigned in user's domain",  
                               col2 => 'Information viewable by unprivileged user'}],  
                   print => \&print_privacy,                    print => \&print_privacy,
                   modify => \&modify_privacy,                    modify => \&modify_privacy,
                  },                   },
Line 618  sub handler { Line 602  sub handler {
                   print => \&print_ltitools,                    print => \&print_ltitools,
                   modify => \&modify_ltitools,                    modify => \&modify_ltitools,
                  },                   },
         'proctoring' =>  
                  {text => 'Remote Proctoring Integration',  
                   help => 'Domain_Configuration_Proctoring',  
                   header => [{col1 => 'Name',  
                               col2 => 'Configuration'}],  
                   print => \&print_proctoring,  
                   modify => \&modify_proctoring,  
                  },  
         'ssl' =>          'ssl' =>
                  {text  => 'LON-CAPA Network (SSL)',                   {text  => 'LON-CAPA Network (SSL)',
                   help  => 'Domain_Configuration_Network_SSL',                    help  => 'Domain_Configuration_Network_SSL',
Line 887  sub process_changes { Line 863  sub process_changes {
         $output = &modify_loadbalancing($dom,%domconfig);          $output = &modify_loadbalancing($dom,%domconfig);
     } elsif ($action eq 'ltitools') {      } elsif ($action eq 'ltitools') {
         $output = &modify_ltitools($r,$dom,$action,$lastactref,%domconfig);          $output = &modify_ltitools($r,$dom,$action,$lastactref,%domconfig);
     } elsif ($action eq 'proctoring') {  
         $output = &modify_proctoring($r,$dom,$action,$lastactref,%domconfig);  
     } elsif ($action eq 'ssl') {      } elsif ($action eq 'ssl') {
         $output = &modify_ssl($dom,$lastactref,%domconfig);          $output = &modify_ssl($dom,$lastactref,%domconfig);
     } elsif ($action eq 'trust') {      } elsif ($action eq 'trust') {
Line 940  sub print_config_box { Line 914  sub print_config_box {
     } elsif ($action eq 'lti') {      } elsif ($action eq 'lti') {
         $output .= &passwords_javascript('ltisecrets')."\n".          $output .= &passwords_javascript('ltisecrets')."\n".
                    &lti_javascript($dom,$settings);                     &lti_javascript($dom,$settings);
     } elsif ($action eq 'proctoring') {  
         $output .= &proctoring_javascript($settings);  
     } elsif ($action eq 'wafproxy') {      } elsif ($action eq 'wafproxy') {
         $output .= &wafproxy_javascript($dom);          $output .= &wafproxy_javascript($dom);
     } elsif ($action eq 'autoupdate') {      } elsif ($action eq 'autoupdate') {
Line 1032  sub print_config_box { Line 1004  sub print_config_box {
             ($action eq 'selfcreation') || ($action eq 'selfenrollment') ||              ($action eq 'selfcreation') || ($action eq 'selfenrollment') ||
             ($action eq 'usersessions') || ($action eq 'coursecategories') ||               ($action eq 'usersessions') || ($action eq 'coursecategories') || 
             ($action eq 'trust') || ($action eq 'contacts') || ($action eq 'defaults') ||              ($action eq 'trust') || ($action eq 'contacts') || ($action eq 'defaults') ||
             ($action eq 'privacy') || ($action eq 'passwords') || ($action eq 'lti') ||              ($action eq 'passwords') || ($action eq 'lti') || ($action eq 'ltitools') ||
             ($action eq 'ltitools') || ($action eq 'usermodification')) {              ($action eq 'usermodification')) {
             if ($action eq 'coursecategories') {              if ($action eq 'coursecategories') {
                 $output .= &print_coursecategories('middle',$dom,$item,$settings,\$rowtotal);                  $output .= &print_coursecategories('middle',$dom,$item,$settings,\$rowtotal);
                 $colspan = ' colspan="2"';                  $colspan = ' colspan="2"';
Line 1103  sub print_config_box { Line 1075  sub print_config_box {
              </tr>'."\n";               </tr>'."\n";
                 if ($action eq 'coursecategories') {                  if ($action eq 'coursecategories') {
                     $output .= &print_coursecategories('bottom',$dom,$item,$settings,\$rowtotal);                      $output .= &print_coursecategories('bottom',$dom,$item,$settings,\$rowtotal);
                 } elsif (($action eq 'contacts') || ($action eq 'privacy') ||                   } elsif (($action eq 'contacts') || ($action eq 'passwords') || 
                          ($action eq 'passwords') || ($action eq 'lti')) {                           ($action eq 'lti')) {
                     if ($action eq 'passwords') {                      if ($action eq 'passwords') {
                         $output .= $item->{'print'}->('lower',$dom,$confname,$settings,\$rowtotal);                          $output .= $item->{'print'}->('lower',$dom,$confname,$settings,\$rowtotal);
                     } else {                      } else {
Line 1139  sub print_config_box { Line 1111  sub print_config_box {
             $rowtotal ++;              $rowtotal ++;
         } elsif (($action eq 'coursedefaults') || ($action eq 'authordefaults') ||          } elsif (($action eq 'coursedefaults') || ($action eq 'authordefaults') ||
                  ($action eq 'directorysrch') || ($action eq 'helpsettings') ||                   ($action eq 'directorysrch') || ($action eq 'helpsettings') ||
                  ($action eq 'wafproxy')) {                   ($action eq 'wafproxy') || ($action eq 'privacy')) {
             $output .= $item->{'print'}->('bottom',$dom,$settings,\$rowtotal);              $output .= $item->{'print'}->('bottom',$dom,$settings,\$rowtotal);
         } elsif ($action eq 'scantron') {          } elsif ($action eq 'scantron') {
             $output .= $item->{'print'}->($r,'bottom',$dom,$confname,$settings,\$rowtotal);              $output .= $item->{'print'}->($r,'bottom',$dom,$confname,$settings,\$rowtotal);
Line 1342  sub print_config_box { Line 1314  sub print_config_box {
             $output .= &print_quotas($dom,$settings,\$rowtotal,$action);              $output .= &print_quotas($dom,$settings,\$rowtotal,$action);
         } elsif (($action eq 'autoenroll') || ($action eq 'autocreate') ||           } elsif (($action eq 'autoenroll') || ($action eq 'autocreate') || 
                  ($action eq 'serverstatuses') || ($action eq 'loadbalancing') ||                    ($action eq 'serverstatuses') || ($action eq 'loadbalancing') || 
                  ($action eq 'proctoring') || ($action eq 'ipaccess')) {                   ($action eq 'ipaccess')) {
             $output .= $item->{'print'}->($dom,$settings,\$rowtotal);              $output .= $item->{'print'}->($dom,$settings,\$rowtotal);
         }          }
     }      }
Line 5399  sub print_ltitools { Line 5371  sub print_ltitools {
     return $datatable;      return $datatable;
 }  }
   
 sub ltitools_names {  
     my %lt = &Apache::lonlocal::texthash(  
                                           'title'          => 'Title',  
                                           'version'        => 'Version',  
                                           'msgtype'        => 'Message Type',  
                                           'sigmethod'      => 'Signature Method',  
                                           'url'            => 'URL',  
                                           'key'            => 'Key',  
                                           'lifetime'       => 'Nonce lifetime (s)',  
                                           'secret'         => 'Secret',  
                                           'icon'           => 'Icon',  
                                           'user'           => 'User',  
                                           'fullname'       => 'Full Name',  
                                           'firstname'      => 'First Name',  
                                           'lastname'       => 'Last Name',  
                                           'email'          => 'E-mail',  
                                           'roles'          => 'Role',  
                                           'window'         => 'Window',  
                                           'tab'            => 'Tab',  
                                           'iframe'         => 'iFrame',  
                                           'height'         => 'Height',  
                                           'width'          => 'Width',  
                                           'linktext'       => 'Default Link Text',  
                                           'explanation'    => 'Default Explanation',  
                                           'passback'       => 'Tool can return grades:',  
                                           'roster'         => 'Tool can retrieve roster:',  
                                           'crstarget'      => 'Display target',  
                                           'crslabel'       => 'Course label',  
                                           'crstitle'       => 'Course title',  
                                           'crslinktext'    => 'Link Text',  
                                           'crsexplanation' => 'Explanation',  
                                           'crsappend'      => 'Provider URL',  
                                         );  
     return %lt;  
 }  
   
 sub secrets_form {  sub secrets_form {
     my ($dom,$context,$encrypt,$privkeys,$rowtotal) = @_;      my ($dom,$context,$encrypt,$privkeys,$rowtotal) = @_;
     my @ids=&Apache::lonnet::current_machine_ids();      my @ids=&Apache::lonnet::current_machine_ids();
Line 7813  sub print_privacy { Line 7749  sub print_privacy {
         ($othertitle,$usertypes,$types) =          ($othertitle,$usertypes,$types) =
             &Apache::loncommon::sorted_inst_types($dom);              &Apache::loncommon::sorted_inst_types($dom);
     }      }
     if (($position eq 'top') || ($position eq 'middle')) {      if (($position eq 'top') || ($position eq 'bottom')) {
         my (%by_ip,%by_location,@intdoms,@instdoms);          my (%by_ip,%by_location,@intdoms,@instdoms);
         &build_location_hashes(\@intdoms,\%by_ip,\%by_location,\@instdoms);          &build_location_hashes(\@intdoms,\%by_ip,\%by_location,\@instdoms);
         if ($position eq 'top') {          if ($position eq 'top') {
Line 7900  sub print_privacy { Line 7836  sub print_privacy {
                 $datatable .= &mt('Nothing to set here, as there are no other domains');                  $datatable .= &mt('Nothing to set here, as there are no other domains');
             }              }
             $datatable .='</td></tr>';              $datatable .='</td></tr>';
         } elsif ($position eq 'middle') {          } elsif ($position eq 'bottom') {
             if ((@instdoms > 1) || (keys(%by_location) > 0)) {              if ((@instdoms > 1) || (keys(%by_location) > 0)) {
                 if ((ref($types) eq 'ARRAY') && (ref($usertypes) eq 'HASH')) {                  if ((ref($types) eq 'ARRAY') && (ref($usertypes) eq 'HASH')) {
                     foreach my $item (@{$types}) {                      foreach my $item (@{$types}) {
Line 7937  sub print_privacy { Line 7873  sub print_privacy {
                 }                  }
             }              }
         }          }
     } else {  
         my $prefix;  
         if ($position eq 'lower') {  
             $prefix = 'priv';  
         } else {  
             $prefix = 'unpriv';  
         }  
         foreach my $item (@items) {  
             $datatable .= &modifiable_userdata_row('privacy',$prefix.'_'.$item,$settings,  
                                                    $numinrow,$itemcount,'','','','','',  
                                                    '',$names{$item});  
             $itemcount ++;  
         }  
     }      }
     if (ref($rowtotal)) {      if (ref($rowtotal)) {
         $$rowtotal += $itemcount;          $$rowtotal += $itemcount;
Line 7978  sub print_passwords { Line 7901  sub print_passwords {
         min            => 'Minimum password length',          min            => 'Minimum password length',
         max            => 'Maximum password length',          max            => 'Maximum password length',
         chars          => 'Required characters',          chars          => 'Required characters',
         expire         => 'Password expiration (days)',  
         numsaved       => 'Number of previous passwords to save and disallow reuse',          numsaved       => 'Number of previous passwords to save and disallow reuse',
     );      );
     if ($position eq 'top') {      if ($position eq 'top') {
Line 8305  sub print_passwords { Line 8227  sub print_passwords {
   
 sub password_rules {  sub password_rules {
     my ($prefix,$itemcountref,$settings) = @_;      my ($prefix,$itemcountref,$settings) = @_;
     my ($min,$max,%chars,$expire,$numsaved,$numinrow);      my ($min,$max,%chars,$numsaved,$numinrow);
     my %titles;      my %titles;
     if ($prefix eq 'passwords') {      if ($prefix eq 'passwords') {
         %titles = &Apache::lonlocal::texthash (          %titles = &Apache::lonlocal::texthash (
Line 8337  sub password_rules { Line 8259  sub password_rules {
             map { $chars{$_} = 1; } (@{$settings->{chars}});              map { $chars{$_} = 1; } (@{$settings->{chars}});
         }          }
         if ($prefix eq 'passwords') {          if ($prefix eq 'passwords') {
             if ($settings->{expire}) {  
                 $expire = $settings->{expire};  
             }  
             if ($settings->{numsaved}) {              if ($settings->{numsaved}) {
                 $numsaved = $settings->{numsaved};                  $numsaved = $settings->{numsaved};
             }              }
Line 8401  sub password_rules { Line 8320  sub password_rules {
     $datatable .='</table></td></tr>';      $datatable .='</table></td></tr>';
     $itemcount ++;      $itemcount ++;
     if ($prefix eq 'passwords') {      if ($prefix eq 'passwords') {
         $titles{'expire'} = &mt('Password expiration (days)');  
         $titles{'numsaved'} = &mt('Number of previous passwords to save and disallow reuse');          $titles{'numsaved'} = &mt('Number of previous passwords to save and disallow reuse');
         $css_class = $itemcount%2?' class="LC_odd_row"':'';          $css_class = $itemcount%2?' class="LC_odd_row"':'';
         $datatable .= '<tr'.$css_class.'><td>'.$titles{'expire'}.'</td>'.  
                       '<td class="LC_left_item"><span class="LC_nobreak">'.  
                       '<input type="text" name="'.$prefix.'_expire" value="'.$expire.'" size="4" '.  
                       'onblur="javascript:warnInt'.$prefix.'(this);" />'.  
                       '<span class="LC_fontsize_small"> '.&mt('(Leave blank for no expiration)').'</span>'.  
                       '</span></td></tr>';  
         $itemcount ++;  
         $css_class = $itemcount%2?' class="LC_odd_row"':'';  
         $datatable .= '<tr'.$css_class.'><td>'.$titles{'numsaved'}.'</td>'.          $datatable .= '<tr'.$css_class.'><td>'.$titles{'numsaved'}.'</td>'.
                       '<td class="LC_left_item"><span class="LC_nobreak">'.                        '<td class="LC_left_item"><span class="LC_nobreak">'.
                       '<input type="text" name="'.$prefix.'_numsaved" value="'.$numsaved.'" size="3" '.                        '<input type="text" name="'.$prefix.'_numsaved" value="'.$numsaved.'" size="3" '.
Line 11793  function warnInt$prefix(field) { Line 11703  function warnInt$prefix(field) {
             field.value = '';              field.value = '';
         }          }
         if (field.value != '') {          if (field.value != '') {
             if (field.name == '${prefix}_expire') {              if (!regexdigit.test(field.value)) {
                 var regexpposnum=/^\\d+(|\\.\\d*)\$/;                   if (field.name == '${prefix}_max') {
                 if (!regexpposnum.test(field.value)) {                      alert('$intalert{passmax}');
                     alert('$intalert{passexp}');  
                     field.value = '';  
                 } else {                  } else {
                     var expval = parseFloat(field.value);                      if (field.name == '${prefix}_numsaved') {
                     if (expval == 0) {                          alert('$intalert{passnum}');
                         alert('$intalert{passexp}');  
                         field.value = '';  
                     }  
                 }  
             } else {  
                 if (!regexdigit.test(field.value)) {  
                     if (field.name == '${prefix}_max') {  
                         alert('$intalert{passmax}');  
                     } else {  
                         if (field.name == '${prefix}_numsaved') {  
                             alert('$intalert{passnum}');  
                         }  
                     }                      }
                     field.value = '';  
                 }                  }
                   field.value = '';
             }              }
         }          }
     }      }
Line 12140  sub modifiable_userdata_row { Line 12036  sub modifiable_userdata_row {
         my $hashref;          my $hashref;
         if ($context eq 'lti') {          if ($context eq 'lti') {
             if (ref($settings) eq 'HASH') {              if (ref($settings) eq 'HASH') {
                 $hashref = $settings->{'instdata'};                  my %instdata;
                   if (ref($settings->{'instdata'}) eq 'ARRAY') {
                       map { $instdata{$_} = 1; } @{$settings->{'instdata'}};
                   }
                   $hashref = \%instdata;
             }              }
         } elsif ($context eq 'privacy') {          } elsif ($context eq 'privacy') {
             my ($key,$inner) = split(/_/,$role);              my ($key,$inner) = split(/_/,$role);
Line 12151  sub modifiable_userdata_row { Line 12051  sub modifiable_userdata_row {
             }              }
         } elsif (ref($settings->{$context}) eq 'HASH') {          } elsif (ref($settings->{$context}) eq 'HASH') {
             if (ref($settings->{$context}->{$role}) eq 'HASH') {              if (ref($settings->{$context}->{$role}) eq 'HASH') {
                 $hashref = $settings->{'lti_instdata'};                  $hashref = $settings->{$context}->{$role};
             }              }
             if ($role eq 'emailusername') {              if ($role eq 'emailusername') {
                 if ($statustype) {                  if ($statustype) {
Line 16087  sub modify_lti { Line 15987  sub modify_lti {
             }              }
             my @possinstdata =  &Apache::loncommon::get_env_multiple('form.lti_instdata_'.$idx);              my @possinstdata =  &Apache::loncommon::get_env_multiple('form.lti_instdata_'.$idx);
             if (@possinstdata) {              if (@possinstdata) {
                 foreach my $field (@possinstdata) {                  foreach my $field (sort(@possinstdata)) {
                     if (exists($fieldtitles{$field})) {                      if (exists($fieldtitles{$field})) {
                         push(@{$confhash{$itemid}{'instdata'}});                          push(@{$confhash{$itemid}{'instdata'}},$field);
                     }                      }
                 }                  }
             }              }
Line 16251  sub modify_lti { Line 16151  sub modify_lti {
                         }                          }
                     }                      }
                     unless ($changes{$itemid}) {                      unless ($changes{$itemid}) {
                         foreach my $field ('makeuser','lcmenu') {                          foreach my $field ('makeuser','lcmenu','instdata') {
                             if (ref($currlti{$field}) eq 'ARRAY') {                              if (ref($currlti{$field}) eq 'ARRAY') {
                                 if (ref($confhash{$itemid}{$field}) eq 'ARRAY') {                                  if (ref($confhash{$itemid}{$field}) eq 'ARRAY') {
                                     my @diffs = &Apache::loncommon::compare_arrays($currlti{$field},                                      my @diffs = &Apache::loncommon::compare_arrays($currlti{$field},
Line 16465  sub modify_lti { Line 16365  sub modify_lti {
                                 $resulttext .= '<li>'.&mt('Institutional data will be used when creating a new user for: [_1]',                                  $resulttext .= '<li>'.&mt('Institutional data will be used when creating a new user for: [_1]',
                                                           join(', ',map { $fieldtitles{$_}; } @{$confhash{$itemid}{'instdata'}})).'</li>';                                                            join(', ',map { $fieldtitles{$_}; } @{$confhash{$itemid}{'instdata'}})).'</li>';
                             } else {                              } else {
                                 $resulttext .= '<li>'.&mt('No institutional data used when creating a new user.').'</li>';                                  $resulttext .= '<li>'.&mt('No institutional data used when creating a new user').'</li>';
                             }                              }
                           } else {
                               $resulttext .= '<li>'.&mt('No institutional data used when creating a new user').'</li>';
                         }                          }
                         foreach my $item ('topmenu','inlinemenu') {                          foreach my $item ('topmenu','inlinemenu') {
                             $resulttext .= '<li>'.$lt{$item}.':&nbsp;';                              $resulttext .= '<li>'.$lt{$item}.':&nbsp;';
Line 17928  sub modify_privacy { Line 17830  sub modify_privacy {
                                        extdom  => {},                                         extdom  => {},
                                      },                                       },
                        'othdom'   => {},                         'othdom'   => {},
                        'priv'     => {},  
                        'unpriv'   => {},  
                       );                        );
     foreach my $item (@items) {      foreach my $item (@items) {
         if (@instdoms > 1) {          if (@instdoms > 1) {
Line 17960  sub modify_privacy { Line 17860  sub modify_privacy {
                 $changes{'approval'} = 1;                  $changes{'approval'} = 1;
             }              }
         }          }
         foreach my $status ('priv','unpriv') {  
             my @possibles = sort(&Apache::loncommon::get_env_multiple('form.privacy_'.$status.'_'.$item));  
             my @newvalues;  
             foreach my $field (@possibles) {  
                 if (grep(/^\Q$field\E$/,@fields)) {  
                     $privacyhash{$status}{$item}{$field} = 1;  
                     push(@newvalues,$field);  
                 }  
             }  
             @newvalues = sort(@newvalues);  
             if (ref($current{$status}) eq 'HASH') {  
                 if (ref($current{$status}{$item}) eq 'HASH') {  
                     my @currvalues = sort(keys(%{$current{$status}{$item}}));  
                     my @diffs = &Apache::loncommon::compare_arrays(\@currvalues,\@newvalues);  
                     if (@diffs > 0) {  
                         $changes{$status} = 1;  
                     }  
                 }  
             } else {  
                 my @stdfields;  
                 foreach my $field (@fields) {  
                     if ($field eq 'id') {  
                         next if ($status eq 'unpriv');  
                         next if (($status eq 'priv') && ($item eq 'community'));  
                     }  
                     push(@stdfields,$field);  
                 }  
                 my @diffs = &Apache::loncommon::compare_arrays(\@stdfields,\@newvalues);  
                 if (@diffs > 0) {  
                     $changes{$status} = 1;  
                 }  
             }  
         }  
     }      }
     if ((@instdoms > 1) || (keys(%by_location) > 0)) {      if ((@instdoms > 1) || (keys(%by_location) > 0)) {
         my @statuses;          my @statuses;
Line 18016  sub modify_privacy { Line 17883  sub modify_privacy {
                     if (@diffs > 0) {                      if (@diffs > 0) {
                         $changes{'othdom'} = 1;                          $changes{'othdom'} = 1;
                     }                      }
                   } elsif (@newvalues > 0) {
                       $changes{'othdom'} = 1;
                 }                  }
             } else {              } else {
                 my @stdfields = ('lastname','firstname','middlename','generation','permanentemail');                  my @stdfields = ('lastname','firstname','middlename','generation','permanentemail');
Line 18045  sub modify_privacy { Line 17914  sub modify_privacy {
     if ($putresult eq 'ok') {      if ($putresult eq 'ok') {
         if (keys(%changes) > 0) {          if (keys(%changes) > 0) {
             $resulttext = &mt('Changes made: ').'<ul>';              $resulttext = &mt('Changes made: ').'<ul>';
             foreach my $key ('approval','notify','othdom','priv','unpriv') {              foreach my $key ('approval','notify','othdom') {
                 if ($changes{$key}) {                  if ($changes{$key}) {
                     $resulttext .= '<li>'.$titles{$key}.':<ul>';                      $resulttext .= '<li>'.$titles{$key}.':<ul>';
                     if ($key eq 'approval') {                      if ($key eq 'approval') {
Line 18096  sub modify_privacy { Line 17965  sub modify_privacy {
                                 $resulttext .= '</li>';                                  $resulttext .= '</li>';
                             }                              }
                         }                          }
                     } else {  
                         foreach my $item (@items) {  
                             if (ref($privacyhash{$key}{$item}) eq 'HASH') {  
                                 $resulttext .= '<li>'.$names{$item}.': ';  
                                 if (keys(%{$privacyhash{$key}{$item}})) {  
                                     $resulttext .= join(', ', map { $fieldnames{$_}; } (sort(keys(%{$privacyhash{$key}{$item}}))));  
                                 } else {  
                                     $resulttext .= &mt('none');  
                                 }  
                                 $resulttext .= '</li>';  
                             }  
                         }  
                     }                      }
                     $resulttext .= '</ul></li>';                      $resulttext .= '</ul></li>';
                 }                  }
Line 18170  sub modify_passwords { Line 18027  sub modify_passwords {
         min            => 'Minimum password length',          min            => 'Minimum password length',
         max            => 'Maximum password length',          max            => 'Maximum password length',
         chars          => 'Required characters',          chars          => 'Required characters',
         expire         => 'Password expiration (days)',  
         numsaved       => 'Number of previous passwords to save',          numsaved       => 'Number of previous passwords to save',
         reset          => 'Resetting Forgotten Password',          reset          => 'Resetting Forgotten Password',
         intauth        => 'Encryption of Stored Passwords (Internal Auth)',          intauth        => 'Encryption of Stored Passwords (Internal Auth)',
Line 18554  sub modify_passwords { Line 18410  sub modify_passwords {
                             $resulttext .= '<li>'.&mt('[_1] set to "[_2]"',$titles{$key.'_'.$item},$value).'</li>';                              $resulttext .= '<li>'.&mt('[_1] set to "[_2]"',$titles{$key.'_'.$item},$value).'</li>';
                         }                          }
                     } elsif ($key eq 'rules') {                      } elsif ($key eq 'rules') {
                         foreach my $rule ('min','max','expire','numsaved') {                          foreach my $rule ('min','max','numsaved') {
                             if ($confighash{'passwords'}{$rule} eq '') {                              if ($confighash{'passwords'}{$rule} eq '') {
                                 if ($rule eq 'min') {                                  if ($rule eq 'min') {
                                     $resulttext .= '<li>'.&mt('[_1] not set.',$titles{$rule});                                      $resulttext .= '<li>'.&mt('[_1] not set.',$titles{$rule});
Line 18649  sub password_rule_changes { Line 18505  sub password_rule_changes {
                    (ref($changes) eq 'HASH'));                     (ref($changes) eq 'HASH'));
     my (@rules,%staticdefaults);      my (@rules,%staticdefaults);
     if ($prefix eq 'passwords') {      if ($prefix eq 'passwords') {
         @rules = ('min','max','expire','numsaved');          @rules = ('min','max','numsaved');
     } elsif (($prefix eq 'ltisecrets') || ($prefix eq 'toolsecrets')) {      } elsif (($prefix eq 'ltisecrets') || ($prefix eq 'toolsecrets')) {
         @rules = ('min','max');          @rules = ('min','max');
     }      }
Line 18657  sub password_rule_changes { Line 18513  sub password_rule_changes {
     foreach my $rule (@rules) {      foreach my $rule (@rules) {
         $env{'form.'.$prefix.'_'.$rule} =~ s/^\s+|\s+$//g;          $env{'form.'.$prefix.'_'.$rule} =~ s/^\s+|\s+$//g;
         my $ruleok;          my $ruleok;
         if ($rule eq 'expire') {          if ($rule eq 'min') {
             if (($env{'form.'.$prefix.'_'.$rule} =~ /^\d+(|\.\d*)$/) &&  
                 ($env{'form.'.$prefix.'_'.$rule} ne '0')) {  
                 $ruleok = 1;  
             }  
         } elsif ($rule eq 'min') {  
             if ($env{'form.'.$prefix.'_'.$rule} =~ /^\d+$/) {              if ($env{'form.'.$prefix.'_'.$rule} =~ /^\d+$/) {
                 if ($env{'form.'.$prefix.'_'.$rule} >= $staticdefaults{$rule}) {                  if ($env{'form.'.$prefix.'_'.$rule} >= $staticdefaults{$rule}) {
                     $ruleok = 1;                      $ruleok = 1;

Removed from v.1.447  
changed lines
  Added in v.1.447.2.6


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