Diff for /loncom/interface/domainprefs.pm between versions 1.424 and 1.426

version 1.424, 2023/06/01 18:09:59 version 1.426, 2023/06/03 19:26:31
Line 105  $datatable  - HTML containing form eleme Line 105  $datatable  - HTML containing form eleme
 In the case of course requests, radio buttons are displayed for each institutional  In the case of course requests, radio buttons are displayed for each institutional
 affiliate type (and also default, and _LC_adv) for each of the course types   affiliate type (and also default, and _LC_adv) for each of the course types 
 (official, unofficial, community, textbook, placement, and lti).    (official, unofficial, community, textbook, placement, and lti).  
 In each case the radio buttons allow the selection of one of four values:    In each case the radio buttons allow the selection of one of four values:
   
 0, approval, validate, autolimit=N (where N is blank, or a positive integer).  0, approval, validate, autolimit=N (where N is blank, or a positive integer).
 which have the following effects:  which have the following effects:
Line 236  sub handler { Line 236  sub handler {
                     $is_home = 1;                      $is_home = 1;
                 }                  }
             }              }
             $checked_is_home = 1;               $checked_is_home = 1;
             foreach my $id (keys(%{$domconfig{'ltitools'}})) {              foreach my $id (keys(%{$domconfig{'ltitools'}})) {
                 if ((ref($domconfig{'ltitools'}{$id}) eq 'HASH') &&                  if ((ref($domconfig{'ltitools'}{$id}) eq 'HASH') &&
                     (ref($encconfig{'ltitools'}{$id}) eq 'HASH')) {                      (ref($encconfig{'ltitools'}{$id}) eq 'HASH')) {
Line 604  sub handler { Line 604  sub handler {
                   print => \&print_loadbalancing,                    print => \&print_loadbalancing,
                   modify => \&modify_loadbalancing,                    modify => \&modify_loadbalancing,
                  },                   },
         'ltitools' =>           'ltitools' =>
                  {text => 'External Tools (LTI)',                   {text => 'External Tools (LTI)',
                   help => 'Domain_Configuration_LTI_Tools',                    help => 'Domain_Configuration_LTI_Tools',
                   header => [{col1 => 'Encryption of shared secrets',                    header => [{col1 => 'Encryption of shared secrets',
Line 662  sub handler { Line 662  sub handler {
                   print => \&print_trust,                    print => \&print_trust,
                   modify => \&modify_trust,                    modify => \&modify_trust,
                  },                   },
           'lti' =>          'lti' =>
                  {text => 'LTI Link Protection and LTI Consumers',                   {text => 'LTI Link Protection and LTI Consumers',
                   help => 'Domain_Configuration_LTI_Provider',                    help => 'Domain_Configuration_LTI_Provider',
                   header => [{col1 => 'Encryption of shared secrets',                    header => [{col1 => 'Encryption of shared secrets',
                               col2 => 'Settings'},                                col2 => 'Settings'},
                              {col1 => 'Rules for shared secrets',                                {col1 => 'Rules for shared secrets',
                               col2 => 'Settings'},                                col2 => 'Settings'},
                              {col1 => 'Link Protectors',                               {col1 => 'Link Protectors',
                               col2 => 'Settings'},                                col2 => 'Settings'},
Line 676  sub handler { Line 676  sub handler {
                   print => \&print_lti,                    print => \&print_lti,
                   modify => \&modify_lti,                    modify => \&modify_lti,
                  },                   },
            'ipaccess' =>          'ipaccess' =>
                        {text => 'IP-based access control',                         {text => 'IP-based access control',
                         help => 'Domain_Configuration_IP_Access',                          help => 'Domain_Configuration_IP_Access',
                         header => [{col1 => 'Setting',                          header => [{col1 => 'Setting',
Line 917  sub print_config_box { Line 917  sub print_config_box {
         &Apache::lonuserutils::custom_role_privs(\%privs,\%full,\%levels,\%levelscurrent);          &Apache::lonuserutils::custom_role_privs(\%privs,\%full,\%levels,\%levelscurrent);
         my @templateroles = &Apache::lonuserutils::custom_template_roles($context,$crstype);          my @templateroles = &Apache::lonuserutils::custom_template_roles($context,$crstype);
         $output =          $output =
             &Apache::lonuserutils::custom_roledefs_js($context,$crstype,$formname,\%full,               &Apache::lonuserutils::custom_roledefs_js($context,$crstype,$formname,\%full,
                                                       \@templateroles);                                                        \@templateroles);
     } elsif ($action eq 'ltitools') {      } elsif ($action eq 'ltitools') {
         $output .= &Apache::lonconfigsettings::ltitools_javascript($settings);          $output .= &Apache::lonconfigsettings::ltitools_javascript($settings);
Line 3553  sub lti_toggle_js { Line 3553  sub lti_toggle_js {
     my %servers = &Apache::lonnet::get_servers($dom,'library');      my %servers = &Apache::lonnet::get_servers($dom,'library');
     my $primary = &Apache::lonnet::domain($dom,'primary');      my $primary = &Apache::lonnet::domain($dom,'primary');
     my $course_servers = "'".join("','",keys(%servers))."'";      my $course_servers = "'".join("','",keys(%servers))."'";
   
     return <<"ENDSCRIPT";      return <<"ENDSCRIPT";
 <script type="text/javascript">  <script type="text/javascript">
 // <![CDATA[  // <![CDATA[
Line 3652  function toggleLTI(form,setting,item) { Line 3651  function toggleLTI(form,setting,item) {
                            break;                             break;
                        }                         }
                    }                     }
                }                  }
             }              }
             if (!setvis) {              if (!setvis) {
                 if (document.getElementById(divid)) {                  if (document.getElementById(divid)) {
Line 3729  function toggleLTI(form,setting,item) { Line 3728  function toggleLTI(form,setting,item) {
         var divid = 'lti_menufield_'+item;          var divid = 'lti_menufield_'+item;
         var setvis = '';          var setvis = '';
         for (var i=0; i<menus.length; i++) {          for (var i=0; i<menus.length; i++) {
             var radioname = menus[i];                var radioname = menus[i];
             var num = form.elements[radioname].length;              var num = form.elements[radioname].length;
             if (num) {              if (num) {
                 for (var j=0; j<num; j++) {                  for (var j=0; j<num; j++) {
Line 3837  sub saml_javascript { Line 3836  sub saml_javascript {
     return <<"ENDSCRIPT";      return <<"ENDSCRIPT";
 <script type="text/javascript">  <script type="text/javascript">
 // <![CDATA[  // <![CDATA[
 function toggleSamlOptions(form,hostid) {   function toggleSamlOptions(form,hostid) {
     var radioname = 'saml_'+hostid;      var radioname = 'saml_'+hostid;
     var tablecellon = 'samloptionson_'+hostid;      var tablecellon = 'samloptionson_'+hostid;
     var tablecelloff = 'samloptionsoff_'+hostid;      var tablecelloff = 'samloptionsoff_'+hostid;
     var num = form.elements[radioname].length;      var num = form.elements[radioname].length;
     if (num) {      if (num) {
         var setvis = '';           var setvis = '';
         for (var i=0; i<num; i++) {          for (var i=0; i<num; i++) {
             if (form.elements[radioname][i].checked) {              if (form.elements[radioname][i].checked) {
                 if (form.elements[radioname][i].value == '1') {                   if (form.elements[radioname][i].value == '1') {
                     if (document.getElementById(tablecellon)) {                      if (document.getElementById(tablecellon)) {
                         document.getElementById(tablecellon).style.display='';                          document.getElementById(tablecellon).style.display='';
                     }                      }
Line 4614  sub print_contacts { Line 4613  sub print_contacts {
                 map {$excluded{$_} = 1; } @{$lonstatus{'excluded'}};                  map {$excluded{$_} = 1; } @{$lonstatus{'excluded'}};
             }              }
         }          }
         foreach my $item ('errorthreshold','errorsysmail') {           foreach my $item ('errorthreshold','errorsysmail') {
             $css_class = $rownum%2?' class="LC_odd_row"':'';              $css_class = $rownum%2?' class="LC_odd_row"':'';
             $datatable .= '<tr'.$css_class.'>'.              $datatable .= '<tr'.$css_class.'>'.
                           '<td class="LC_left_item"><span class="LC_nobreak">'.                            '<td class="LC_left_item"><span class="LC_nobreak">'.
Line 4696  sub print_contacts { Line 4695  sub print_contacts {
                             $includeloc{'override_'.$key} = '';                              $includeloc{'override_'.$key} = '';
                             $includestr{'override_'.$key} = '';                              $includestr{'override_'.$key} = '';
                             if ($settings->{'overrides'}{$key}{'include'} ne '') {                              if ($settings->{'overrides'}{$key}{'include'} ne '') {
                                 ($includeloc{'override_'.$key},$includestr{'override_'.$key}) =                                   ($includeloc{'override_'.$key},$includestr{'override_'.$key}) =
                                     split(/:/,$settings->{'overrides'}{$key}{'include'},2);                                      split(/:/,$settings->{'overrides'}{$key}{'include'},2);
                                 $includestr{'override_'.$key} = &unescape($includestr{'override_'.$key});                                  $includestr{'override_'.$key} = &unescape($includestr{'override_'.$key});
                             }                              }
Line 4708  sub print_contacts { Line 4707  sub print_contacts {
             my $optionsprefix = 'LC_options_helpdesk_';              my $optionsprefix = 'LC_options_helpdesk_';
   
             my $onclicktypes = "toggleHelpdeskRow(this.form,'overrides','$customclass','$optionsprefix');";              my $onclicktypes = "toggleHelpdeskRow(this.form,'overrides','$customclass','$optionsprefix');";
    
             $datatable .= &insttypes_row($settings,$types,$usertypes,$dom,              $datatable .= &insttypes_row($settings,$types,$usertypes,$dom,
                                          $numinrow,$othertitle,'overrides',                                           $numinrow,$othertitle,'overrides',
                                          \$rownum,$onclicktypes,$customclass);                                           \$rownum,$onclicktypes,$customclass);
Line 4775  sub overridden_helpdesk { Line 4773  sub overridden_helpdesk {
             }              }
             my $title;              my $title;
             if (ref($short_titles) eq 'HASH') {              if (ref($short_titles) eq 'HASH') {
                 $title = $short_titles->{$item};                   $title = $short_titles->{$item};
             }              }
             $output .= '<label>'.              $output .= '<label>'.
                        '<input type="checkbox" name="override_'.$type.'"'.$check.                         '<input type="checkbox" name="override_'.$type.'"'.$check.
Line 4854  function toggleHelpdeskRow(form,checkbox Line 4852  function toggleHelpdeskRow(form,checkbox
     return;      return;
 }  }
   
   
 // ]]>  // ]]>
 </script>  </script>
   
Line 5365  sub ltitools_names { Line 5362  sub ltitools_names {
                                           'key'            => 'Key',                                            'key'            => 'Key',
                                           'lifetime'       => 'Nonce lifetime (s)',                                            'lifetime'       => 'Nonce lifetime (s)',
                                           'secret'         => 'Secret',                                            'secret'         => 'Secret',
                                           'icon'           => 'Icon',                                               'icon'           => 'Icon',
                                           'user'           => 'User',                                            'user'           => 'User',
                                           'fullname'       => 'Full Name',                                            'fullname'       => 'Full Name',
                                           'firstname'      => 'First Name',                                            'firstname'      => 'First Name',
Line 5383  sub ltitools_names { Line 5380  sub ltitools_names {
                                           'roster'         => 'Tool can retrieve roster:',                                            'roster'         => 'Tool can retrieve roster:',
                                           'crstarget'      => 'Display target',                                            'crstarget'      => 'Display target',
                                           'crslabel'       => 'Course label',                                            'crslabel'       => 'Course label',
                                           'crstitle'       => 'Course title',                                             'crstitle'       => 'Course title',
                                           'crslinktext'    => 'Link Text',                                            'crslinktext'    => 'Link Text',
                                           'crsexplanation' => 'Explanation',                                            'crsexplanation' => 'Explanation',
                                           'crsappend'      => 'Provider URL',                                            'crsappend'      => 'Provider URL',
Line 6323  sub print_lti { Line 6320  sub print_lti {
                             '<label><input type="checkbox" name="lti_visible_'.$i.'" id="lti_visible_'.$i.'" onclick="if (this.checked) { this.form.lti_secret_'.$i.'.type='."'text'".' } else { this.form.lti_secret_'.$i.'.type='."'password'".' }" />'.&mt('Visible input').'</label>';                              '<label><input type="checkbox" name="lti_visible_'.$i.'" id="lti_visible_'.$i.'" onclick="if (this.checked) { this.form.lti_secret_'.$i.'.type='."'text'".' } else { this.form.lti_secret_'.$i.'.type='."'password'".' }" />'.&mt('Visible input').'</label>';
                     }                      }
                 }                  }
                 $datatable .= '<br /><br />'.                   $datatable .= '<br /><br />'.
                     '<span class="LC_nobreak">'.$lt{'requser'}.':'.                      '<span class="LC_nobreak">'.$lt{'requser'}.':'.
                     '<label><input type="radio" name="lti_requser_'.$i.'" value="1"'.$onclickrequser.$checkedrequser{yes}.' />'.&mt('Yes').'</label>&nbsp;'."\n".                      '<label><input type="radio" name="lti_requser_'.$i.'" value="1"'.$onclickrequser.$checkedrequser{yes}.' />'.&mt('Yes').'</label>&nbsp;'."\n".
                     '<label><input type="radio" name="lti_requser_'.$i.'" value="0"'.$onclickrequser.$checkedrequser{no}.' />'.&mt('No').'</label></span>'."\n".                      '<label><input type="radio" name="lti_requser_'.$i.'" value="0"'.$onclickrequser.$checkedrequser{no}.' />'.&mt('No').'</label></span>'."\n".
Line 6449  sub lti_options { Line 6446  sub lti_options {
         if (($current->{'mapuser'} ne '') && ($current->{'mapuser'} ne 'lis_person_sourcedid')) {          if (($current->{'mapuser'} ne '') && ($current->{'mapuser'} ne 'lis_person_sourcedid')) {
             $checked{'mapuser'}{'sourcedid'} = '';              $checked{'mapuser'}{'sourcedid'} = '';
             if ($current->{'mapuser'} eq 'lis_person_contact_email_primary') {              if ($current->{'mapuser'} eq 'lis_person_contact_email_primary') {
                 $checked{'mapuser'}{'email'} = ' checked="checked"';                   $checked{'mapuser'}{'email'} = ' checked="checked"';
             } else {              } else {
                 $checked{'mapuser'}{'other'} = ' checked="checked"';                  $checked{'mapuser'}{'other'} = ' checked="checked"';
                 $userfield = $current->{'mapuser'};                  $userfield = $current->{'mapuser'};
Line 6459  sub lti_options { Line 6456  sub lti_options {
         if (($current->{'mapcrs'} ne '') && ($current->{'mapcrs'} ne 'course_offering_sourcedid')) {          if (($current->{'mapcrs'} ne '') && ($current->{'mapcrs'} ne 'course_offering_sourcedid')) {
             $checked{'mapcrs'}{'course_offering_sourcedid'} = '';              $checked{'mapcrs'}{'course_offering_sourcedid'} = '';
             if ($current->{'mapcrs'} eq 'context_id') {              if ($current->{'mapcrs'} eq 'context_id') {
                 $checked{'mapcrs'}{'context_id'} = ' checked="checked"';                   $checked{'mapcrs'}{'context_id'} = ' checked="checked"';
             } else {              } else {
                 $checked{'mapcrs'}{'other'} = ' checked="checked"';                  $checked{'mapcrs'}{'other'} = ' checked="checked"';
                 $cidfield = $current->{'mapcrs'};                  $cidfield = $current->{'mapcrs'};
Line 6487  sub lti_options { Line 6484  sub lti_options {
             $checked{'lcauth'}{$1} = ' checked="checked"';              $checked{'lcauth'}{$1} = ' checked="checked"';
             unless (($current->{'lcauth'} eq 'lti') || ($current->{'lcauth'} eq 'internal')) {              unless (($current->{'lcauth'} eq 'lti') || ($current->{'lcauth'} eq 'internal')) {
                 $lcauthparm = $current->{'lcauthparm'};                  $lcauthparm = $current->{'lcauthparm'};
                 $lcauthparmstyle = 'display:table-row';                   $lcauthparmstyle = 'display:table-row';
                 if ($current->{'lcauth'} eq 'localauth') {                  if ($current->{'lcauth'} eq 'localauth') {
                     $lcauthparmtext = &mt('Local auth argument');                      $lcauthparmtext = &mt('Local auth argument');
                 } else {                  } else {
Line 6504  sub lti_options { Line 6501  sub lti_options {
             %rolemaps = %{$current->{'maproles'}};              %rolemaps = %{$current->{'maproles'}};
         }          }
         if ($current->{'section'} ne '') {          if ($current->{'section'} ne '') {
             $checked{'crssec'}{'Y'} = '  checked="checked"';               $checked{'crssec'}{'Y'} = '  checked="checked"';
             $crssecfieldsty = 'inline-block';              $crssecfieldsty = 'inline-block';
             if ($current->{'section'} eq 'course_section_sourcedid') {              if ($current->{'section'} eq 'course_section_sourcedid') {
                 $checked{'crssecsrc'}{'sourcedid'} = ' checked="checked"';                  $checked{'crssecsrc'}{'sourcedid'} = ' checked="checked"';
Line 6550  sub lti_options { Line 6547  sub lti_options {
         $checked{'crssec'}{'N'} = ' checked="checked"';          $checked{'crssec'}{'N'} = ' checked="checked"';
         $checked{'callback'}{'N'} = ' checked="checked"';          $checked{'callback'}{'N'} = ' checked="checked"';
         $checked{'topmenu'}{'N'} = ' checked="checked"';          $checked{'topmenu'}{'N'} = ' checked="checked"';
         $checked{'inlinemenu'}{'Y'} = ' checked="checked"';           $checked{'inlinemenu'}{'Y'} = ' checked="checked"';
         $checked{'menuitem'}{'grades'} = ' checked="checked"';          $checked{'menuitem'}{'grades'} = ' checked="checked"';
         $menusty = 'inline-block';           $menusty = 'inline-block';
     }      }
     my @coursetypes = ('official','unofficial','community','textbook','placement','lti');      my @coursetypes = ('official','unofficial','community','textbook','placement','lti');
     my %coursetypetitles = &Apache::lonlocal::texthash (      my %coursetypetitles = &Apache::lonlocal::texthash (
Line 6605  sub lti_options { Line 6602  sub lti_options {
                '<fieldset class="ltioption_usr_'.$num.'" style="display:'.$optionsty.'"><legend>'.&mt('Roles which may create user accounts').'</legend>';                 '<fieldset class="ltioption_usr_'.$num.'" style="display:'.$optionsty.'"><legend>'.&mt('Roles which may create user accounts').'</legend>';
     foreach my $ltirole (@ltiroles) {      foreach my $ltirole (@ltiroles) {
         $output .= '<span class="LC_nobreak"><label><input type="checkbox" name="lti_makeuser_'.$num.'" value="'.$ltirole.'"'.          $output .= '<span class="LC_nobreak"><label><input type="checkbox" name="lti_makeuser_'.$num.'" value="'.$ltirole.'"'.
                    $checked{'makeuser'}{$ltirole}.' />'.$ltirole.'</label>&nbsp;</span> ';                          $checked{'makeuser'}{$ltirole}.' />'.$ltirole.'</label>&nbsp;</span> ';
     }      }
     $output .= '</fieldset>'.      $output .= '</fieldset>'.
                '<fieldset class="ltioption_usr_'.$num.'" style="display:'.$optionsty.'"><legend>'.&mt('New user accounts created for LTI users').'</legend>'.                 '<fieldset class="ltioption_usr_'.$num.'" style="display:'.$optionsty.'"><legend>'.&mt('New user accounts created for LTI users').'</legend>'.
Line 6737  sub lti_options { Line 6734  sub lti_options {
         if ($extra eq 'passback') {          if ($extra eq 'passback') {
             $pb1p1chk = ' checked="checked"';              $pb1p1chk = ' checked="checked"';
             $pb1p0chk = '';              $pb1p0chk = '';
             $onclickpb = ' onclick="toggleLTI(this.form,'."'passback','$num'".');"';               $onclickpb = ' onclick="toggleLTI(this.form,'."'passback','$num'".');"';
         } else {          } else {
             $onclickpb = '';               $onclickpb = '';
         }          }
         if (ref($current) eq 'HASH') {          if (ref($current) eq 'HASH') {
             if (($current->{$extra})) {              if (($current->{$extra})) {
Line 6785  sub ltimenu_titles { Line 6782  sub ltimenu_titles {
     );      );
 }  }
   
 sub check_switchserver {  
     my ($home) = @_;  
     my $switchserver;  
     if ($home ne '') {  
         my $allowed;  
         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.'&amp;role='.  
                           &HTML::Entities::encode($env{'request.role'},'\'<>"&').  
                           '&amp;destinationurl=/adm/domainprefs">'.&mt('Switch Server').'</a>';  
         }  
     }  
     return $switchserver;  
 }  
   
 sub print_coursedefaults {  sub print_coursedefaults {
     my ($position,$dom,$settings,$rowtotal) = @_;      my ($position,$dom,$settings,$rowtotal) = @_;
     my ($css_class,$datatable,%checkedon,%checkedoff,%defaultchecked,@toggles);      my ($css_class,$datatable,%checkedon,%checkedoff,%defaultchecked,@toggles);
Line 7929  sub password_rules { Line 7910  sub password_rules {
         if (ref($settings->{chars}) eq 'ARRAY') {          if (ref($settings->{chars}) eq 'ARRAY') {
             map { $chars{$_} = 1; } (@{$settings->{chars}});              map { $chars{$_} = 1; } (@{$settings->{chars}});
         }          }
         if ($prefix eq 'passwords') {           if ($prefix eq 'passwords') {
             if ($settings->{expire}) {              if ($settings->{expire}) {
                 $expire = $settings->{expire};                  $expire = $settings->{expire};
             }              }
Line 8072  sub print_wafproxy { Line 8053  sub print_wafproxy {
             my %config = &Apache::lonnet::get_dom('configuration',['wafproxy'],$domain);              my %config = &Apache::lonnet::get_dom('configuration',['wafproxy'],$domain);
             if (ref($config{'wafproxy'}) eq 'HASH') {              if (ref($config{'wafproxy'}) eq 'HASH') {
                 $aliases{$domain} = $config{'wafproxy'}{'alias'};                  $aliases{$domain} = $config{'wafproxy'}{'alias'};
                 if (exists($config{'wafproxy'}{'saml'})) {                   if (exists($config{'wafproxy'}{'saml'})) {
                     $saml{$domain} = $config{'wafproxy'}{'saml'};                      $saml{$domain} = $config{'wafproxy'}{'saml'};
                 }                  }
                 foreach my $item ('remoteip','ipheader','trusted','vpnint','vpnext') {                  foreach my $item ('remoteip','ipheader','trusted','vpnint','vpnext') {
Line 8137  sub print_wafproxy { Line 8118  sub print_wafproxy {
                               ('&nbsp;'x2).'<span class="LC_nobreak">'.                                ('&nbsp;'x2).'<span class="LC_nobreak">'.
                               &mt('Alias used for SSO Auth').':&nbsp;<label>'.                                &mt('Alias used for SSO Auth').':&nbsp;<label>'.
                               '<input type="radio" value="0"'.$samloff.' name="wafproxy_alias_saml_'.$server.'" />'.                                '<input type="radio" value="0"'.$samloff.' name="wafproxy_alias_saml_'.$server.'" />'.
                               &mt('No').'</label>&nbsp;<label>'.                                 &mt('No').'</label>&nbsp;<label>'.
                               '<input type="radio" value="1"'.$samlon.' name="wafproxy_alias_saml_'.$server.'" />'.                                '<input type="radio" value="1"'.$samlon.' name="wafproxy_alias_saml_'.$server.'" />'.
                               &mt('Yes').'</label></span>'.                                &mt('Yes').'</label></span>'.
                               '</td>';                                 '</td>';
             }              }
             $aliasrows .= '</tr>';              $aliasrows .= '</tr>';
             $aliasinfo{$dom_in_effect} .= $aliasrows;              $aliasinfo{$dom_in_effect} .= $aliasrows;
Line 9050  sub print_loadbalancing { Line 9031  sub print_loadbalancing {
                                   no => ' checked="checked"',                                    no => ' checked="checked"',
                               );                                );
         my %balcookiechecked = (          my %balcookiechecked = (
                                   no => ' checked="checked"',                                     no => ' checked="checked"',
                                );                                 );
         foreach my $sparetype (@sparestypes) {          foreach my $sparetype (@sparestypes) {
             my $targettable;              my $targettable;
Line 9637  sub print_selfcreation { Line 9618  sub print_selfcreation {
         ($datatable,$itemcount) = &radiobutton_prefs(\%radiohash,\@toggles,\%defaultchecked,          ($datatable,$itemcount) = &radiobutton_prefs(\%radiohash,\@toggles,\%defaultchecked,
                                                      \%choices,$itemcount,$onclick);                                                       \%choices,$itemcount,$onclick);
         $$rowtotal += $itemcount;          $$rowtotal += $itemcount;
           
         if (ref($usertypes) eq 'HASH') {          if (ref($usertypes) eq 'HASH') {
             if (keys(%{$usertypes}) > 0) {              if (keys(%{$usertypes}) > 0) {
                 $datatable .= &insttypes_row($createsettings,$types,$usertypes,                  $datatable .= &insttypes_row($createsettings,$types,$usertypes,
Line 9774  sub print_selfcreation { Line 9755  sub print_selfcreation {
                 my $currstyle = 'display:none';                  my $currstyle = 'display:none';
                 if (grep(/^\Q$status\E$/,@ordered)) {                  if (grep(/^\Q$status\E$/,@ordered)) {
                     $currstyle = $rowstyle;                      $currstyle = $rowstyle;
                     $hidden = 0;                       $hidden = 0;
                 }                  }
                 $datatable .= &noninst_users($processing,$emailverified,$emailoptions,$emaildomain,                  $datatable .= &noninst_users($processing,$emailverified,$emailoptions,$emaildomain,
                                              $emailrules,$emailruleorder,$settings,$status,$rowid,                                               $emailrules,$emailruleorder,$settings,$status,$rowid,
Line 9801  sub print_selfcreation { Line 9782  sub print_selfcreation {
             foreach my $status (@posstypes) {              foreach my $status (@posstypes) {
                 my $rowid = $classprefix.$status;                  my $rowid = $classprefix.$status;
                 my $datarowstyle = 'display:none';                  my $datarowstyle = 'display:none';
                 if (grep(/^\Q$status\E$/,@ordered)) {                   if (grep(/^\Q$status\E$/,@ordered)) {
                     $datarowstyle = $rowstyle;                       $datarowstyle = $rowstyle;
                 }                  }
                 $datatable .= &modifiable_userdata_row('cancreate','emailusername_'.$status,$settings,                  $datatable .= &modifiable_userdata_row('cancreate','emailusername_'.$status,$settings,
                                                        $numinrow,$$rowtotal,\%usertypeshash,$infofields,                                                         $numinrow,$$rowtotal,\%usertypeshash,$infofields,
Line 9904  function toggleEmailOptions(form,radio,p Line 9885  function toggleEmailOptions(form,radio,p
                     document.getElementById(altprefix+'_inst_'+status).style.display = 'none';                      document.getElementById(altprefix+'_inst_'+status).style.display = 'none';
                     document.getElementById(altprefix+'_noninst_'+status).style.display = 'none';                      document.getElementById(altprefix+'_noninst_'+status).style.display = 'none';
                     if (curr == 'custom') {                      if (curr == 'custom') {
                         if (prefix) {                           if (prefix) {
                             document.getElementById(prefix+'_'+status).style.display = 'inline';                              document.getElementById(prefix+'_'+status).style.display = 'inline';
                         }                          }
                     } else if (curr == 'inst') {                      } else if (curr == 'inst') {
Line 9927  ENDSCRIPT Line 9908  ENDSCRIPT
   
 sub noninst_users {  sub noninst_users {
     my ($processing,$emailverified,$emailoptions,$emaildomain,$emailrules,      my ($processing,$emailverified,$emailoptions,$emaildomain,$emailrules,
         $emailruleorder,$settings,$type,$rowid,$typetitle,$css_class,$rowstyle,$intdom) = @_;           $emailruleorder,$settings,$type,$rowid,$typetitle,$css_class,$rowstyle,$intdom) = @_;
     my $class = 'LC_left_item';      my $class = 'LC_left_item';
     if ($css_class) {      if ($css_class) {
         $css_class = ' class="'.$css_class.'"';           $css_class = ' class="'.$css_class.'"';
     }      }
     if ($rowid) {      if ($rowid) {
         $rowid = ' id="'.$rowid.'"';          $rowid = ' id="'.$rowid.'"';
Line 9945  sub noninst_users { Line 9926  sub noninst_users {
         $description = &mt('Requests for: [_1] (status self-reported)',$typetitle);          $description = &mt('Requests for: [_1] (status self-reported)',$typetitle);
     }      }
     $output = '<tr'.$css_class.$rowid.$rowstyle.'>'.      $output = '<tr'.$css_class.$rowid.$rowstyle.'>'.
               "<td>$description</td>\n".                           "<td>$description</td>\n".
               '<td class="'.$class.'" colspan="2">'.                '<td class="'.$class.'" colspan="2">'.
               '<table><tr>';                '<table><tr>';
     my %headers = &Apache::lonlocal::texthash(       my %headers = &Apache::lonlocal::texthash(
               approve  => 'Processing',                approve  => 'Processing',
               email    => 'E-mail',                email    => 'E-mail',
               username => 'Username',                username => 'Username',
Line 10073  sub noninst_users { Line 10054  sub noninst_users {
                     my $value;                      my $value;
                     if (ref($emaildomain) eq 'HASH') {                      if (ref($emaildomain) eq 'HASH') {
                         if (ref($emaildomain->{$type}) eq 'HASH') {                          if (ref($emaildomain->{$type}) eq 'HASH') {
                             $value = $emaildomain->{$type}->{$option};                               $value = $emaildomain->{$type}->{$option};
                         }                          }
                     }                      }
                     if ($value eq '') {                      if ($value eq '') {
Line 10391  sub print_defaults { Line 10372  sub print_defaults {
                     if ($defaults{$item.'_'.$field}) {                      if ($defaults{$item.'_'.$field}) {
                         $checkedon = $checkedoff;                          $checkedon = $checkedoff;
                         $checkedoff = '';                          $checkedoff = '';
                     }                       }
                     $datatable .= '<div id="'.$item.'_'.$field.'_div" style="display:'.$portalsty.'">'.                      $datatable .= '<div id="'.$item.'_'.$field.'_div" style="display:'.$portalsty.'">'.
                               '<span class="LC_nobreak">'.$titles->{$field}.'&nbsp;'.                                '<span class="LC_nobreak">'.$titles->{$field}.'&nbsp;'.
                               '<label><input type="radio" name="'.$item.'_'.$field.'" value="1"'.$checkedon.'/>'.&mt('Yes').'</label>'.                                '<label><input type="radio" name="'.$item.'_'.$field.'" value="1"'.$checkedon.'/>'.&mt('Yes').'</label>'.
Line 11220  sub defaults_javascript { Line 11201  sub defaults_javascript {
 function portalExtras(caller) {  function portalExtras(caller) {
     var x = caller.value;      var x = caller.value;
     var y = new Array('email','web');      var y = new Array('email','web');
     for (var i=0; i<y.length; i++) {       for (var i=0; i<y.length; i++) {
         if (document.getElementById('portal_def_'+y[i]+'_div')) {          if (document.getElementById('portal_def_'+y[i]+'_div')) {
             var z = document.getElementById('portal_def_'+y[i]+'_div');              var z = document.getElementById('portal_def_'+y[i]+'_div');
             if (x.length > 0) {              if (x.length > 0) {
Line 11324  sub passwords_javascript { Line 11305  sub passwords_javascript {
     }      }
     &js_escape(\%intalert);      &js_escape(\%intalert);
     my $defmin = $Apache::lonnet::passwdmin;      my $defmin = $Apache::lonnet::passwdmin;
     my $intauthjs;       my $intauthjs;
     if ($prefix eq 'passwords') { $intauthjs = <<"ENDSCRIPT";      if ($prefix eq 'passwords') { $intauthjs = <<"ENDSCRIPT";
   
 function warnIntAuth(field) {  function warnIntAuth(field) {
Line 11718  sub modifiable_userdata_row { Line 11699  sub modifiable_userdata_row {
               '<td class="LC_left_item" colspan="2"><table>';                '<td class="LC_left_item" colspan="2"><table>';
     my $rem;      my $rem;
     my %checks;      my %checks;
     my %current;  
     if (ref($settings) eq 'HASH') {      if (ref($settings) eq 'HASH') {
         my $hashref;          my $hashref;
         if ($context eq 'lti') {          if ($context eq 'lti') {
Line 11744  sub modifiable_userdata_row { Line 11724  sub modifiable_userdata_row {
                 }                  }
             }              }
         }          }
         if (ref($hashref) eq 'HASH') {           if (ref($hashref) eq 'HASH') {
             foreach my $field (@fields) {              foreach my $field (@fields) {
                 if ($hashref->{$field}) {                  if ($hashref->{$field}) {
                     if ($role eq 'emailusername') {                      if ($role eq 'emailusername') {
Line 11756  sub modifiable_userdata_row { Line 11736  sub modifiable_userdata_row {
             }              }
         }          }
     }      }
    
     my $total = scalar(@fields);      my $total = scalar(@fields);
     for (my $i=0; $i<$total; $i++) {      for (my $i=0; $i<$total; $i++) {
         $rem = $i%($numinrow);          $rem = $i%($numinrow);
Line 11920  sub insttypes_row { Line 11899  sub insttypes_row {
         } else {          } else {
             $output .= '<td class="LC_left_item">';              $output .= '<td class="LC_left_item">';
         }          }
         $output .= '&nbsp;';            $output .= '&nbsp;';
     } else {      } else {
         if ($rem == 0) {          if ($rem == 0) {
             $output .= '<tr>';              $output .= '<tr>';
Line 12196  sub modify_login { Line 12175  sub modify_login {
                     if ($lang eq $env{'form.loginhelpurl_add_lang'}) {                      if ($lang eq $env{'form.loginhelpurl_add_lang'}) {
                         $formelem = 'loginhelpurl_add_file';                          $formelem = 'loginhelpurl_add_file';
                     }                      }
                     (my $result,$newurl{$lang}) =                       (my $result,$newurl{$lang}) =
                         &Apache::lonconfigsettings::publishlogo($r,'upload',$formelem,$dom,$confname,                          &Apache::lonconfigsettings::publishlogo($r,'upload',$formelem,$dom,$confname,
                                                                 "help/$lang",'','',$newfile{$lang},                                                                  "help/$lang",'','',$newfile{$lang},
                                                                 $modified);                                                                  $modified);
Line 12273  sub modify_login { Line 12252  sub modify_login {
                 my $modified = [];                  my $modified = [];
                 foreach my $lonhost (@newhosts) {                  foreach my $lonhost (@newhosts) {
                     my $formelem = 'loginheadtag_'.$lonhost;                      my $formelem = 'loginheadtag_'.$lonhost;
                     (my $result,$newheadtagurls{$lonhost}) =                       (my $result,$newheadtagurls{$lonhost}) =
                         &Apache::lonconfigsettings::publishlogo($r,'upload',$formelem,$dom,$confname,                          &Apache::lonconfigsettings::publishlogo($r,'upload',$formelem,$dom,$confname,
                                                                 "login/headtag/$lonhost",'','',                                                                  "login/headtag/$lonhost",'','',
                                                                 $env{'form.loginheadtag_'.$lonhost.'.filename'},                                                                  $env{'form.loginheadtag_'.$lonhost.'.filename'},
Line 12350  sub modify_login { Line 12329  sub modify_login {
                 $currsaml{$lonhost}{$item} = $env{'form.saml_'.$item.'_'.$lonhost};                  $currsaml{$lonhost}{$item} = $env{'form.saml_'.$item.'_'.$lonhost};
             }              }
         } else {          } else {
             if ($saml{$lonhost}) {                if ($saml{$lonhost}) {
                 $changes{'saml'}{$lonhost} = 1;                  $changes{'saml'}{$lonhost} = 1;
                 delete($currsaml{$lonhost});                  delete($currsaml{$lonhost});
             }              }
         }          }
     }      }
     foreach my $posshost (keys(%currsaml)) {      foreach my $posshost (keys(%currsaml)) {
         unless (exists($domservers{$posshost})) {           unless (exists($domservers{$posshost})) {
             delete($currsaml{$posshost});               delete($currsaml{$posshost});
         }          }
     }      }
     %{$loginhash{'login'}{'saml'}} = %currsaml;      %{$loginhash{'login'}{'saml'}} = %currsaml;
Line 12372  sub modify_login { Line 12351  sub modify_login {
                 my $modified = [];                  my $modified = [];
                 foreach my $lonhost (@newsamlimgs) {                  foreach my $lonhost (@newsamlimgs) {
                     my $formelem = 'saml_img_'.$lonhost;                      my $formelem = 'saml_img_'.$lonhost;
                     my ($result,$imgurl) =                       my ($result,$imgurl) =
                         &Apache::lonconfigsettings::publishlogo($r,'upload',$formelem,$dom,$confname,                          &Apache::lonconfigsettings::publishlogo($r,'upload',$formelem,$dom,$confname,
                                                                 "login/saml/$lonhost",'','',                                                                  "login/saml/$lonhost",'','',
                                                                 $env{'form.saml_img_'.$lonhost.'.filename'},                                                                  $env{'form.saml_img_'.$lonhost.'.filename'},
Line 12742  sub modify_ipaccess { Line 12721  sub modify_ipaccess {
             $possrange =~ s/,+/,/g;              $possrange =~ s/,+/,/g;
             if ($possrange ne '') {              if ($possrange ne '') {
                 my (@ok,$count);                  my (@ok,$count);
                 $count = 0;                   $count = 0;
                 foreach my $poss (split(/\,/,$possrange)) {                  foreach my $poss (split(/\,/,$possrange)) {
                     $count ++;                      $count ++;
                     $poss = &validate_ip_pattern($poss);                      $poss = &validate_ip_pattern($poss);
Line 12775  sub modify_ipaccess { Line 12754  sub modify_ipaccess {
             }              }
         }          }
         $confhash{$itemid}{'commblocks'} = {};          $confhash{$itemid}{'commblocks'} = {};
            
         my %commblocks;          my %commblocks;
         map { $commblocks{$_} = 1; } &Apache::loncommon::get_env_multiple('form.ipaccess_block_'.$idx);            map { $commblocks{$_} = 1; } &Apache::loncommon::get_env_multiple('form.ipaccess_block_'.$idx);
         foreach my $type (@{$typeorder}) {          foreach my $type (@{$typeorder}) {
             if ($commblocks{$type}) {              if ($commblocks{$type}) {
                 $confhash{$itemid}{'commblocks'}{$type} = 'on';                  $confhash{$itemid}{'commblocks'}{$type} = 'on';
Line 12809  sub modify_ipaccess { Line 12788  sub modify_ipaccess {
         }          }
         $env{'form.ipaccess_cnum_'.$idx} =~ s/^\s+|\s+$//g;          $env{'form.ipaccess_cnum_'.$idx} =~ s/^\s+|\s+$//g;
         $env{'form.ipaccess_cdom_'.$idx} =~ s/^\s+|\s+$//g;          $env{'form.ipaccess_cdom_'.$idx} =~ s/^\s+|\s+$//g;
         if (($env{'form.ipaccess_cnum_'.$idx} =~ /^$match_courseid$/) &&           if (($env{'form.ipaccess_cnum_'.$idx} =~ /^$match_courseid$/) &&
             ($env{'form.ipaccess_cdom_'.$idx} =~ /^$match_domain$/)) {              ($env{'form.ipaccess_cdom_'.$idx} =~ /^$match_domain$/)) {
             if (&Apache::lonnet::homeserver($env{'form.ipaccess_cnum_'.$idx},              if (&Apache::lonnet::homeserver($env{'form.ipaccess_cnum_'.$idx},
                                             $env{'form.ipaccess_cdom_'.$idx}) eq 'no_host') {                                              $env{'form.ipaccess_cdom_'.$idx}) eq 'no_host') {
Line 12889  sub modify_ipaccess { Line 12868  sub modify_ipaccess {
                     if (keys(%{$confhash{$itemid}{'courses'}})) {                      if (keys(%{$confhash{$itemid}{'courses'}})) {
                         my @courses;                          my @courses;
                         foreach my $cid (sort(keys(%{$confhash{$itemid}{'courses'}}))) {                          foreach my $cid (sort(keys(%{$confhash{$itemid}{'courses'}}))) {
                             my %courseinfo = &Apache::lonnet::coursedescription($cid,{'one_time' => 1});                               my %courseinfo = &Apache::lonnet::coursedescription($cid,{'one_time' => 1});
                             push(@courses,$courseinfo{'description'}.' ('.$cid.')');                              push(@courses,$courseinfo{'description'}.' ('.$cid.')');
                         }                          }
                         $resulttext .= '<li>'.&mt('Courses/Communities allowed').':<ul><li>'.                          $resulttext .= '<li>'.&mt('Courses/Communities allowed').':<ul><li>'.
Line 13496  sub check_switchserver { Line 13475  sub check_switchserver {
     my @ids=&Apache::lonnet::current_machine_ids();      my @ids=&Apache::lonnet::current_machine_ids();
     foreach my $id (@ids) { if ($id eq $home) { $allowed=1; } }      foreach my $id (@ids) { if ($id eq $home) { $allowed=1; } }
     if (!$allowed) {      if (!$allowed) {
  $switchserver='<a href="/adm/switchserver?otherserver='.$home.'&amp;role=dc./'.$dom.'/&amp;destinationurl=/adm/domainprefs">'.&mt('Switch Server').'</a>';   $switchserver='<a href="/adm/switchserver?otherserver='.$home.'&amp;role='.
                         &HTML::Entities::encode($env{'request.role'},'\'<>"&').
                         '&amp;destinationurl=/adm/domainprefs">'.&mt('Switch Server').'</a>';
     }      }
     return $switchserver;      return $switchserver;
 }  }
Line 16659  sub modify_contacts { Line 16640  sub modify_contacts {
                     $contacts_hash{'contacts'}{'overrides'}{$type}{'include'} = $includeloc{$type}.':'.&escape($includestr{$type});                      $contacts_hash{'contacts'}{'overrides'}{$type}{'include'} = $includeloc{$type}.':'.&escape($includestr{$type});
                     $newsetting{'override_'.$type}{'include'} = $contacts_hash{'contacts'}{'overrides'}{$type}{'include'};                      $newsetting{'override_'.$type}{'include'} = $contacts_hash{'contacts'}{'overrides'}{$type}{'include'};
                 }                  }
             }                   }
         }          }
     }      }
     if (keys(%currsetting) > 0) {      if (keys(%currsetting) > 0) {
Line 16717  sub modify_contacts { Line 16698  sub modify_contacts {
             }              }
         }          }
         if (@statuses) {          if (@statuses) {
             if (ref($currsetting{'overrides'}) eq 'HASH') {               if (ref($currsetting{'overrides'}) eq 'HASH') {
                 foreach my $key (keys(%{$currsetting{'overrides'}})) {                  foreach my $key (keys(%{$currsetting{'overrides'}})) {
                     if (ref($currsetting{'overrides'}{$key}) eq 'HASH') {                      if (ref($currsetting{'overrides'}{$key}) eq 'HASH') {
                         if (ref($newsetting{'override_'.$key}) eq 'HASH') {                          if (ref($newsetting{'override_'.$key}) eq 'HASH') {
                             foreach my $item (@contacts,'bcc','others','include') {                              foreach my $item (@contacts,'bcc','others','include') {
                                 if ($currsetting{'overrides'}{$key}{$item} ne $newsetting{'override_'.$key}{$item}) {                                   if ($currsetting{'overrides'}{$key}{$item} ne $newsetting{'override_'.$key}{$item}) {
                                     push(@{$changes{'overrides'}},$key);                                      push(@{$changes{'overrides'}},$key);
                                     last;                                      last;
                                 }                                  }
Line 16739  sub modify_contacts { Line 16720  sub modify_contacts {
                 }                  }
             } else {              } else {
                 foreach my $key (@overrides) {                  foreach my $key (@overrides) {
                     push(@{$changes{'overrides'}},$key);                       push(@{$changes{'overrides'}},$key);
                 }                  }
             }              }
         }          }
Line 16921  sub modify_contacts { Line 16902  sub modify_contacts {
                             $resulttext .= $bcctext.': <span class="LC_cusr_emph">'.$bcc{$type}.'</span>';                              $resulttext .= $bcctext.': <span class="LC_cusr_emph">'.$bcc{$type}.'</span>';
                         } elsif (!@text) {                          } elsif (!@text) {
                             $resulttext .= &mt('No one');                              $resulttext .= &mt('No one');
                         }                             }
                         if ($includestr{$type} ne '') {                          if ($includestr{$type} ne '') {
                             if ($includeloc{$type} eq 'b') {                              if ($includeloc{$type} eq 'b') {
                                 $resulttext .= '<br />'.&mt('Text automatically added to e-mail body:').' '.$includestr{$type};                                  $resulttext .= '<br />'.&mt('Text automatically added to e-mail body:').' '.$includestr{$type};
Line 16945  sub modify_contacts { Line 16926  sub modify_contacts {
                             if (ref($newsetting{'override_'.$type}) eq 'HASH') {                              if (ref($newsetting{'override_'.$type}) eq 'HASH') {
                                 my @text;                                  my @text;
                                 foreach my $item (@contacts) {                                  foreach my $item (@contacts) {
                                     if ($newsetting{'override_'.$type}{$item}) {                                       if ($newsetting{'override_'.$type}{$item}) {
                                         push(@text,$short_titles->{$item});                                          push(@text,$short_titles->{$item});
                                     }                                      }
                                 }                                  }
                                 if ($newsetting{'override_'.$type}{'others'} ne '') {                                  if ($newsetting{'override_'.$type}{'others'} ne '') {
                                     push(@text,$newsetting{'override_'.$type}{'others'});                                      push(@text,$newsetting{'override_'.$type}{'others'});
                                 }                                  }
     
                                 if (@text) {                                  if (@text) {
                                     $resulttext .= &mt('Helpdesk e-mail sent to: [_1]',                                      $resulttext .= &mt('Helpdesk e-mail sent to: [_1]',
                                                        '<span class="LC_cusr_emph">'.join(', ',@text).'</span>');                                                         '<span class="LC_cusr_emph">'.join(', ',@text).'</span>');
Line 17793  sub modify_passwords { Line 17774  sub modify_passwords {
                                                    );                                                     );
                                 my $needed = '<ul><li>'.                                  my $needed = '<ul><li>'.
                                              join('</li><li>',map {$rulenames{$_} } @{$confighash{'passwords'}{'chars'}}).                                               join('</li><li>',map {$rulenames{$_} } @{$confighash{'passwords'}{'chars'}}).
                                              '</li></ul>';                                                '</li></ul>';
                                 $resulttext .= '<li>'.&mt('[_1] set to: [_2]',$titles{'chars'},$needed).'</li>';                                  $resulttext .= '<li>'.&mt('[_1] set to: [_2]',$titles{'chars'},$needed).'</li>';
                             } else {                              } else {
                                 $resulttext .= '<li>'.&mt('[_1] set to none',$titles{'chars'}).'</li>';                                  $resulttext .= '<li>'.&mt('[_1] set to none',$titles{'chars'}).'</li>';
Line 18276  sub modify_selfcreation { Line 18257  sub modify_selfcreation {
                             if (($chosen eq 'inst') || ($chosen eq 'noninst')) {                              if (($chosen eq 'inst') || ($chosen eq 'noninst')) {
                                 my $emaildom;                                  my $emaildom;
                                 if ($env{'form.cancreate_emaildomain_'.$chosen.'_'.$type} =~ /^\@[^\@]+$/) {                                  if ($env{'form.cancreate_emaildomain_'.$chosen.'_'.$type} =~ /^\@[^\@]+$/) {
                                     $emaildom = $env{'form.cancreate_emaildomain_'.$chosen.'_'.$type};                                       $emaildom = $env{'form.cancreate_emaildomain_'.$chosen.'_'.$type};
                                     $cancreate{'emaildomain'}{$type}{$chosen} = $emaildom;                                      $cancreate{'emaildomain'}{$type}{$chosen} = $emaildom;
                                     if (ref($curremaildom{$type}) eq 'HASH') {                                      if (ref($curremaildom{$type}) eq 'HASH') {
                                         if (exists($curremaildom{$type}{$chosen})) {                                          if (exists($curremaildom{$type}{$chosen})) {
Line 18288  sub modify_selfcreation { Line 18269  sub modify_selfcreation {
                                         }                                          }
                                     } elsif ($emaildom ne '') {                                      } elsif ($emaildom ne '') {
                                         push(@{$changes{'cancreate'}},'emaildomain');                                          push(@{$changes{'cancreate'}},'emaildomain');
                                     }                                       }
                                 }                                  }
                                 $cancreate{'emailoptions'}{$type} = $env{'form.cancreate_emailoptions_'.$type};                                  $cancreate{'emailoptions'}{$type} = $env{'form.cancreate_emailoptions_'.$type};
                             } elsif ($chosen eq 'custom') {                              } elsif ($chosen eq 'custom') {
Line 18715  sub modify_selfcreation { Line 18696  sub modify_selfcreation {
                                                                   );                                                                    );
                         if (@types) {                          if (@types) {
                             if (@statuses) {                              if (@statuses) {
                                 $chgtext .= &mt('Processing of requests to create account with e-mail verification set as follows:').                                   $chgtext .= &mt('Processing of requests to create account with e-mail verification set as follows:').
                                             '<ul>';                                              '<ul>';
                                 foreach my $status (@statuses) {                                  foreach my $status (@statuses) {
                                     if ($status eq 'default') {                                      if ($status eq 'default') {
Line 18923  sub modify_selfcreation { Line 18904  sub modify_selfcreation {
                                 $typename = $othertitle;                                  $typename = $othertitle;
                             } else {                              } else {
                                 $typename = $usertypes{$type};                                  $typename = $usertypes{$type};
                             }                               }
                             $chgtext .= &mt('(Affiliation: [_1])',$typename);                              $chgtext .= &mt('(Affiliation: [_1])',$typename);
                         }                          }
                         if (@{$email_rule{$type}} > 0) {                          if (@{$email_rule{$type}} > 0) {
Line 19268  sub modify_defaults { Line 19249  sub modify_defaults {
         }          }
         if ($item eq 'portal_def') {          if ($item eq 'portal_def') {
             unless (grep(/^\Q$item\E$/,@errors)) {              unless (grep(/^\Q$item\E$/,@errors)) {
                 if ($newvalues{$item} eq '') {                   if ($newvalues{$item} eq '') {
                     foreach my $field ('email','web') {                      foreach my $field ('email','web') {
                         if (exists($domdefaults{$item.'_'.$field})) {                          if (exists($domdefaults{$item.'_'.$field})) {
                             delete($domdefaults{$item.'_'.$field});                              delete($domdefaults{$item.'_'.$field});
Line 19453  sub modify_defaults { Line 19434  sub modify_defaults {
                             $resulttext =~ s/, $//;                              $resulttext =~ s/, $//;
                             $resulttext .= '</li>';                              $resulttext .= '</li>';
                         } else {                          } else {
                             $resulttext .= '<li>'.&mt('Institutional user status types deleted').'</li>';                               $resulttext .= '<li>'.&mt('Institutional user status types deleted').'</li>';
                         }                          }
                     }                      }
                 } elsif ($item eq 'unamemap_rule') {                  } elsif ($item eq 'unamemap_rule') {
Line 20690  sub modify_coursedefaults { Line 20671  sub modify_coursedefaults {
         }          }
         my (%newdomexttool,%newexttool,%olddomexttool,%oldexttool);          my (%newdomexttool,%newexttool,%olddomexttool,%oldexttool);
         map { $newdomexttool{$_} = 1; } &Apache::loncommon::get_env_multiple('form.domexttool');          map { $newdomexttool{$_} = 1; } &Apache::loncommon::get_env_multiple('form.domexttool');
         map { $newexttool{$_} = 1; } &Apache::loncommon::get_env_multiple('form.exttool');           map { $newexttool{$_} = 1; } &Apache::loncommon::get_env_multiple('form.exttool');
         if (ref($domconfig{'coursedefaults'}{'domexttool'}) eq 'HASH') {          if (ref($domconfig{'coursedefaults'}{'domexttool'}) eq 'HASH') {
             %olddomexttool = %{$domconfig{'coursedefaults'}{'domexttool'}};              %olddomexttool = %{$domconfig{'coursedefaults'}{'domexttool'}};
         } else {          } else {
Line 20703  sub modify_coursedefaults { Line 20684  sub modify_coursedefaults {
             }              }
         }          }
         if (ref($domconfig{'coursedefaults'}{'exttool'}) eq 'HASH') {          if (ref($domconfig{'coursedefaults'}{'exttool'}) eq 'HASH') {
             %oldexttool = %{$domconfig{'coursedefaults'}{'exttool'}};                   %oldexttool = %{$domconfig{'coursedefaults'}{'exttool'}};
         } else {          } else {
             foreach my $type (@types) {              foreach my $type (@types) {
                if ($staticdefaults{'exttool'}) {                 if ($staticdefaults{'exttool'}) {
Line 21356  sub modify_wafproxy { Line 21337  sub modify_wafproxy {
                 }                  }
             } elsif ($currvalue{$item}) {              } elsif ($currvalue{$item}) {
                 $changes{$item} = 1;                  $changes{$item} = 1;
             }               }
         }          }
     } else {      } else {
         if (keys(%curralias)) {          if (keys(%curralias)) {
Line 21364  sub modify_wafproxy { Line 21345  sub modify_wafproxy {
         }          }
         if (keys(%currsaml)) {          if (keys(%currsaml)) {
             $changes{'saml'} = 1;              $changes{'saml'} = 1;
         }           }
         if (keys(%currvalue)) {          if (keys(%currvalue)) {
             foreach my $key (keys(%currvalue)) {              foreach my $key (keys(%currvalue)) {
                 $changes{$key} = 1;                  $changes{$key} = 1;
Line 21374  sub modify_wafproxy { Line 21355  sub modify_wafproxy {
     if (keys(%changes)) {      if (keys(%changes)) {
         my %defaultshash = (          my %defaultshash = (
                               wafproxy => \%wafproxy,                                wafproxy => \%wafproxy,
                            );                              );
         my $putresult = &Apache::lonnet::put_dom('configuration',\%defaultshash,          my $putresult = &Apache::lonnet::put_dom('configuration',\%defaultshash,
                                                  $dom);                                                   $dom);
         if ($putresult eq 'ok') {          if ($putresult eq 'ok') {
Line 21390  sub modify_wafproxy { Line 21371  sub modify_wafproxy {
                         $domdefaults{'waf_'.$item} = $wafproxy{$item};                          $domdefaults{'waf_'.$item} = $wafproxy{$item};
                     } elsif (exists($domdefaults{'waf_'.$item})) {                      } elsif (exists($domdefaults{'waf_'.$item})) {
                         delete($domdefaults{'waf_'.$item});                          delete($domdefaults{'waf_'.$item});
                     }                       }
                 }                  }
             }              }
             if ($updatedomdefs) {              if ($updatedomdefs) {
Line 21457  sub modify_wafproxy { Line 21438  sub modify_wafproxy {
                             $output .= '<li>'.&mt('Aliases deleted for hostnames').'</li>';                              $output .= '<li>'.&mt('Aliases deleted for hostnames').'</li>';
                         }                          }
                     } elsif ($item eq 'saml') {                      } elsif ($item eq 'saml') {
                         my $shown;                           my $shown;
                         if (ref($wafproxy{'saml'}) eq 'HASH') {                          if (ref($wafproxy{'saml'}) eq 'HASH') {
                             if (keys(%{$wafproxy{'saml'}})) {                              if (keys(%{$wafproxy{'saml'}})) {
                                 $shown = join(', ',sort(keys(%{$wafproxy{'saml'}})));                                  $shown = join(', ',sort(keys(%{$wafproxy{'saml'}})));
Line 21787  sub modify_usersessions { Line 21768  sub modify_usersessions {
                 if (($offload eq 'offloadoth') && (@okoffloadoth)) {                  if (($offload eq 'offloadoth') && (@okoffloadoth)) {
                     $changes{'offloadoth'} = 1;                      $changes{'offloadoth'} = 1;
                 }                  }
             }               }
         }          }
     } else {      } else {
         if (@okoffload) {          if (@okoffload) {
Line 22325  sub modify_loadbalancing { Line 22306  sub modify_loadbalancing {
         }          }
         if ($env{'form.loadbalancing_cookie_'.$i}) {          if ($env{'form.loadbalancing_cookie_'.$i}) {
             $defaultshash{'loadbalancing'}{$balancer}{'cookie'} = 1;              $defaultshash{'loadbalancing'}{$balancer}{'cookie'} = 1;
             if (exists($currbalancer{$balancer})) {               if (exists($currbalancer{$balancer})) {
                 unless ($currcookies{$balancer}) {                  unless ($currcookies{$balancer}) {
                     $changes{'curr'}{$balancer}{'cookie'} = 1;                      $changes{'curr'}{$balancer}{'cookie'} = 1;
                 }                  }
Line 23011  function balancerChange(balnum,baltotal, Line 22992  function balancerChange(balnum,baltotal,
 END  END
 }  }
   
   
 sub new_spares_js {  sub new_spares_js {
     my @sparestypes = ('primary','default');      my @sparestypes = ('primary','default');
     my $types = join("','",@sparestypes);      my $types = join("','",@sparestypes);

Removed from v.1.424  
changed lines
  Added in v.1.426


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