Diff for /loncom/interface/domainprefs.pm between versions 1.42 and 1.45

version 1.42, 2008/02/15 17:02:31 version 1.45, 2008/02/29 21:01:36
Line 36  use Apache::lonnet; Line 36  use Apache::lonnet;
 use Apache::loncommon();  use Apache::loncommon();
 use Apache::lonhtmlcommon();  use Apache::lonhtmlcommon();
 use Apache::lonlocal;  use Apache::lonlocal;
   use Apache::lonmsg();
 use LONCAPA();  use LONCAPA();
 use LONCAPA::Enrollment;  use LONCAPA::Enrollment;
 use File::Copy;  use File::Copy;
   use Locale::Language;
   
 sub handler {  sub handler {
     my $r=shift;      my $r=shift;
Line 68  sub handler { Line 70  sub handler {
     my %domconfig =      my %domconfig =
       &Apache::lonnet::get_dom('configuration',['login','rolecolors',        &Apache::lonnet::get_dom('configuration',['login','rolecolors',
                 'quotas','autoenroll','autoupdate','directorysrch',                  'quotas','autoenroll','autoupdate','directorysrch',
                 'usercreation','usermodification','contacts'],$dom);                  'usercreation','usermodification','contacts','defaults'],$dom);
     my @prefs_order = ('rolecolors','login','quotas','autoenroll',      my @prefs_order = ('rolecolors','login','defaults','quotas','autoenroll',
                        'autoupdate','directorysrch','contacts',                         'autoupdate','directorysrch','contacts',
                        'usercreation','usermodification');                         'usercreation','usermodification');
     my %prefs = (      my %prefs = (
Line 91  sub handler { Line 93  sub handler {
                       header => [{col1 => 'Item',                        header => [{col1 => 'Item',
                                   col2 => '',}],                                    col2 => '',}],
                     },                      },
           'defaults' => 
                       { text => 'Default authentication/language',
                         help => '',
                         header => [{col1 => 'Setting',
                                     col2 => 'Value'}],
                       },
         'quotas' =>           'quotas' => 
                     { text => 'Default quotas for user portfolios',                      { text => 'Default quotas for user portfolios',
                       help => 'Default_User_Quota',                        help => 'Default_User_Quota',
Line 108  sub handler { Line 116  sub handler {
                      help => 'Domain_Auto_Update',                       help => 'Domain_Auto_Update',
                      header => [{col1 => 'Setting',                       header => [{col1 => 'Setting',
                                  col2 => 'Value',},                                   col2 => 'Value',},
                                 {col1 => 'User Population',                                  {col1 => 'User population',
                                  col2 => 'Updataeable user data'}],                                   col2 => 'Updataeable user data'}],
                   },                    },
         'directorysrch' =>           'directorysrch' => 
Line 127  sub handler { Line 135  sub handler {
         'usercreation' =>           'usercreation' => 
                   { text => 'User creation',                    { text => 'User creation',
                     help => 'Domain_User_Creation',                      help => 'Domain_User_Creation',
                     header => [{col1 => 'Format Rule Type',                      header => [{col1 => 'Format rule type',
                                 col2 => 'Format Rules in force'},                                  col2 => 'Format rules in force'},
                                {col1 => 'User account creation',                                 {col1 => 'User account creation',
                                 col2 => 'Usernames which may be created',},                                  col2 => 'Usernames which may be created',},
                                {col1 => 'Context',                                 {col1 => 'Context',
                                 col2 => 'Assignable Authentication Types'}],                                  col2 => 'Assignable authentication types'}],
                   },                    },
         'usermodification' =>           'usermodification' => 
                   { text => 'User modification',                    { text => 'User modification',
Line 333  sub process_changes { Line 341  sub process_changes {
         $output = &modify_usermodification($dom,%domconfig);          $output = &modify_usermodification($dom,%domconfig);
     } elsif ($action eq 'contacts') {      } elsif ($action eq 'contacts') {
         $output = &modify_contacts($dom,%domconfig);          $output = &modify_contacts($dom,%domconfig);
       } elsif ($action eq 'defaults') {
           $output = &modify_defaults($dom,$r);
     }      }
     return $output;      return $output;
 }  }
Line 454  sub print_config_box { Line 464  sub print_config_box {
             $output .= &print_directorysrch($dom,$settings,\$rowtotal);              $output .= &print_directorysrch($dom,$settings,\$rowtotal);
         } elsif ($action eq 'contacts') {          } elsif ($action eq 'contacts') {
             $output .= &print_contacts($dom,$settings,\$rowtotal);              $output .= &print_contacts($dom,$settings,\$rowtotal);
           } elsif ($action eq 'defaults') {
               $output .= &print_defaults($dom,\$rowtotal);
         }          }
     }      }
     $output .= '      $output .= '
Line 569  sub print_login { Line 581  sub print_login {
     my ($dom,$confname,$phase,$settings,$rowtotal) = @_;      my ($dom,$confname,$phase,$settings,$rowtotal) = @_;
     my %choices = &login_choices();      my %choices = &login_choices();
     my %defaultchecked = (       my %defaultchecked = ( 
                     'coursecatalog' => 'on',                             'coursecatalog' => 'on',
                     'adminmail'     => 'off',                             'adminmail'     => 'off',
                   );                             'newuser'       => 'off',
     my @toggles = ('coursecatalog','adminmail');                           );
       my @toggles = ('coursecatalog','adminmail','newuser');
     my (%checkedon,%checkedoff);      my (%checkedon,%checkedoff);
     foreach my $item (@toggles) {      foreach my $item (@toggles) {
         if ($defaultchecked{$item} eq 'on') {           if ($defaultchecked{$item} eq 'on') { 
Line 699  sub login_choices { Line 712  sub login_choices {
         &Apache::lonlocal::texthash (          &Apache::lonlocal::texthash (
             coursecatalog => 'Display Course Catalog link?',              coursecatalog => 'Display Course Catalog link?',
             adminmail => "Display Administrator's E-mail Address?",              adminmail => "Display Administrator's E-mail Address?",
               newuser   => "Link to create a user account",
             img => "Header",              img => "Header",
             logo => "Main Logo",              logo => "Main Logo",
             domlogo => "Domain Logo",              domlogo => "Domain Logo",
Line 1096  ENDCOL Line 1110  ENDCOL
 sub print_quotas {  sub print_quotas {
     my ($dom,$settings,$rowtotal) = @_;      my ($dom,$settings,$rowtotal) = @_;
     my $datatable;      my $datatable;
     my ($othertitle,$usertypes,$types) = &sorted_inst_types($dom);      my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom);
     my $typecount = 0;      my $typecount = 0;
     my $css_class;      my $css_class;
     if (ref($types) eq 'ARRAY') {      if (ref($types) eq 'ARRAY') {
Line 1226  sub print_autoupdate { Line 1240  sub print_autoupdate {
                   '</tr>';                    '</tr>';
         $$rowtotal += 2;          $$rowtotal += 2;
     } else {      } else {
         my ($othertitle,$usertypes,$types) = &sorted_inst_types($dom);          my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom);
         my @fields = ('lastname','firstname','middlename','gen',          my @fields = ('lastname','firstname','middlename','gen',
                       'permanentemail','id');                        'permanentemail','id');
         my %fieldtitles = &Apache::loncommon::personal_data_fieldtitles();          my %fieldtitles = &Apache::loncommon::personal_data_fieldtitles();
Line 1286  sub print_directorysrch { Line 1300  sub print_directorysrch {
         }          }
     }      }
     my ($searchtitles,$titleorder) = &sorted_searchtitles();      my ($searchtitles,$titleorder) = &sorted_searchtitles();
     my ($othertitle,$usertypes,$types) = &sorted_inst_types($dom);      my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom);
   
     my $numinrow = 4;      my $numinrow = 4;
     my $cansrchrow = 0;      my $cansrchrow = 0;
Line 1479  sub print_usercreation { Line 1493  sub print_usercreation {
                 $rowcount ++;                  $rowcount ++;
             }              }
         }          }
           my ($emailrules,$emailruleorder) = 
               &Apache::lonnet::inst_userrules($dom,'email');
           if (ref($emailrules) eq 'HASH') {
               if (keys(%{$emailrules}) > 0) {
                   $datatable .= &user_formats_row('email',$settings,$emailrules,
                                                   $emailruleorder,$numinrow,$rowcount);
                   $$rowtotal ++;
                   $rowcount ++;
               }
           }
         if ($rowcount == 0) {          if ($rowcount == 0) {
             $datatable .= '<tr><td colspan="2">'.&mt('No format rules have been defined for usernames or IDs in this domain.').'</td></tr>';                $datatable .= '<tr><td colspan="2">'.&mt('No format rules have been defined for usernames or IDs in this domain.').'</td></tr>';  
             $$rowtotal ++;              $$rowtotal ++;
             $rowcount ++;              $rowcount ++;
         }          }
     } elsif ($position eq 'middle') {      } elsif ($position eq 'middle') {
         my @creators = ('author','course');          my @creators = ('author','course','selfcreate');
         my ($rules,$ruleorder) =          my ($rules,$ruleorder) =
             &Apache::lonnet::inst_userrules($dom,'username');              &Apache::lonnet::inst_userrules($dom,'username');
         my %lt = &usercreation_types();          my %lt = &usercreation_types();
Line 1507  sub print_usercreation { Line 1531  sub print_usercreation {
         foreach my $item (@creators) {          foreach my $item (@creators) {
             $rownum ++;              $rownum ++;
             if ($checked{$item} eq '') {              if ($checked{$item} eq '') {
                 $checked{$item} = 'any';                  if ($item eq 'selfcreate') {
                       $checked{$item} = 'none';
                   } else {
                       $checked{$item} = 'any';
                   }
             }              }
             my $css_class;              my $css_class;
             if ($rownum%2) {              if ($rownum%2) {
Line 1519  sub print_usercreation { Line 1547  sub print_usercreation {
                          '<td><span class="LC_nobreak">'.$lt{$item}.                           '<td><span class="LC_nobreak">'.$lt{$item}.
                          '</span></td><td align="right">';                           '</span></td><td align="right">';
             my @options = ('any');              my @options = ('any');
             if (ref($rules) eq 'HASH') {              if ($item eq 'selfcreate') {
                 if (keys(%{$rules}) > 0) {                  push(@options,('email','login','sso'));
                     push(@options,('official','unofficial'));              } else {
                   if (ref($rules) eq 'HASH') {
                       if (keys(%{$rules}) > 0) {
                           push(@options,('official','unofficial'));
                       }
                 }                  }
             }              }
             push(@options,'none');              push(@options,'none');
Line 1594  sub user_formats_row { Line 1626  sub user_formats_row {
     my %text = (      my %text = (
                    'username' => 'new usernames',                     'username' => 'new usernames',
                    'id'       => 'IDs',                     'id'       => 'IDs',
                      'email'    => 'self-created accounts (e-mail)',
                );                 );
     my $css_class = $rowcount%2?' class="LC_odd_row"':'';      my $css_class = $rowcount%2?' class="LC_odd_row"':'';
     $output = '<tr '.$css_class.'>'.      $output = '<tr '.$css_class.'>'.
Line 1644  sub usercreation_types { Line 1677  sub usercreation_types {
     my %lt = &Apache::lonlocal::texthash (      my %lt = &Apache::lonlocal::texthash (
                     author     => 'When adding a co-author',                      author     => 'When adding a co-author',
                     course     => 'When adding a user to a course',                      course     => 'When adding a user to a course',
                       selfcreate => 'User creates own account', 
                     any        => 'Any',                      any        => 'Any',
                     official   => 'Institutional only ',                      official   => 'Institutional only ',
                     unofficial => 'Non-institutional only',                      unofficial => 'Non-institutional only',
                       email      => 'Email address',
                       login      => 'Institutional Login',
                       sso        => 'SSO', 
                     none       => 'None',                      none       => 'None',
     );      );
     return %lt;      return %lt;
Line 1697  sub print_usermodification { Line 1734  sub print_usermodification {
     return $datatable;      return $datatable;
 }  }
   
   sub print_defaults {
       my ($dom,$rowtotal) = @_;
       my @items = ('auth_def','auth_arg_def','lang_def');
       my %domdefaults = &Apache::lonnet::get_domain_defaults($dom);
       my $titles = &defaults_titles();
       my $rownum = 0;
       my ($datatable,$css_class);
       foreach my $item (@items) {
           if ($rownum%2) {
               $css_class = '';
           } else {
               $css_class = ' class="LC_odd_row" ';
           }
           $datatable .= '<tr'.$css_class.'>'.
                     '<td><span class="LC_nobreak">'.$titles->{$item}.
                     '</span></td><td class="LC_right_item">';
           if ($item eq 'auth_def') {
               my @authtypes = ('internal','krb4','krb5','localauth');
               my %shortauth = (
                                internal => 'int',
                                krb4 => 'krb4',
                                krb5 => 'krb5',
                                localauth  => 'loc'
                              );
               my %authnames = &authtype_names();
               foreach my $auth (@authtypes) {
                   my $checked = ' ';
                   if ($domdefaults{$item} eq $auth) {
                       $checked = ' checked="checked" ';
                   }
                   $datatable .= '<label><input type="radio" name="'.$item.
                                 '" value="'.$auth.'"'.$checked.'/>'.
                                 $authnames{$shortauth{$auth}}.'</label>&nbsp;&nbsp;';
               }
           } else {
               $datatable .= '<input type="text" name="'.$item.'" value="'.
                             $domdefaults{$item}.'" />';
           }
           $datatable .= '</td></tr>';
           $rownum ++;
       }
       $$rowtotal += $rownum;
       return $datatable;
   }
   
   sub defaults_titles {
       my %titles = &Apache::lonlocal::texthash (
                      'auth_def'      => 'Default authentication type',
                      'auth_arg_def'  => 'Default authentication argument',
                      'lang_def'      => 'Default language',
                    );
       return (\%titles);
   }
   
   
 sub modifiable_userdata_row {  sub modifiable_userdata_row {
     my ($context,$role,$settings,$numinrow,$rowcount) = @_;      my ($context,$role,$settings,$numinrow,$rowcount) = @_;
     my $rolename;      my $rolename;
Line 1814  sub users_cansearch_row { Line 1906  sub users_cansearch_row {
     return $output;      return $output;
 }  }
   
 sub sorted_inst_types {  
     my ($dom) = @_;  
     my ($usertypes,$order) = &Apache::lonnet::retrieve_inst_usertypes($dom);  
     my $othertitle = &mt('All users');  
     my @types;  
     if (ref($order) eq 'ARRAY') {  
         @types = @{$order};  
     }  
     if (@types == 0) {  
         if (ref($usertypes) eq 'HASH') {  
             @types = sort(keys(%{$usertypes}));  
         }  
     }  
     if (keys(%{$usertypes}) > 0) {  
         $othertitle = &mt('Other users');  
     }  
     return ($othertitle,$usertypes,\@types);  
 }  
   
 sub sorted_searchtitles {  sub sorted_searchtitles {
     my %searchtitles = &Apache::lonlocal::texthash(      my %searchtitles = &Apache::lonlocal::texthash(
                          'uname' => 'username',                           'uname' => 'username',
Line 1908  sub modify_login { Line 1981  sub modify_login {
     my ($resulttext,$errors,$colchgtext,%changes,%colchanges);      my ($resulttext,$errors,$colchgtext,%changes,%colchanges);
     my %title = ( coursecatalog => 'Display course catalog',      my %title = ( coursecatalog => 'Display course catalog',
                   adminmail => 'Display administrator E-mail address',                    adminmail => 'Display administrator E-mail address',
                     newuser => 'Link for visitors to create a user account',
                   loginheader => 'Log-in box header');                    loginheader => 'Log-in box header');
     my @offon = ('off','on');      my @offon = ('off','on');
     my %loginhash;      my %loginhash;
     ($errors,%colchanges) = &modify_colors($r,$dom,$confname,['login'],      ($errors,%colchanges) = &modify_colors($r,$dom,$confname,['login'],
                                            \%domconfig,\%loginhash);                                             \%domconfig,\%loginhash);
     my @toggles = ('coursecatalog','adminmail');      my @toggles = ('coursecatalog','adminmail','newuser');
     foreach my $item (@toggles) {      foreach my $item (@toggles) {
         $loginhash{login}{$item} = $env{'form.'.$item};          $loginhash{login}{$item} = $env{'form.'.$item};
     }      }
Line 1925  sub modify_login { Line 1999  sub modify_login {
     my $putresult = &Apache::lonnet::put_dom('configuration',\%loginhash,      my $putresult = &Apache::lonnet::put_dom('configuration',\%loginhash,
                                              $dom);                                               $dom);
     if ($putresult eq 'ok') {      if ($putresult eq 'ok') {
         my @toggles = ('coursecatalog','adminmail');          my @toggles = ('coursecatalog','adminmail','newuser');
         my %defaultchecked = (          my %defaultchecked = (
                     'coursecatalog' => 'on',                      'coursecatalog' => 'on',
                     'adminmail'     => 'off',                      'adminmail'     => 'off',
                       'newuser'       => 'off',
         );          );
         foreach my $item (@toggles) {          foreach my $item (@toggles) {
             if ($defaultchecked{$item} eq 'on') {               if ($defaultchecked{$item} eq 'on') { 
Line 2567  END Line 2642  END
 sub modify_quotas {  sub modify_quotas {
     my ($dom,%domconfig) = @_;      my ($dom,%domconfig) = @_;
     my ($resulttext,%changes);      my ($resulttext,%changes);
     my ($othertitle,$usertypes,$types) = &sorted_inst_types($dom);      my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom);
     my %formhash;      my %formhash;
     foreach my $key (keys(%env)) {      foreach my $key (keys(%env)) {
         if ($key =~ /^form\.quota_(.+)$/) {          if ($key =~ /^form\.quota_(.+)$/) {
Line 2702  sub modify_autoupdate { Line 2777  sub modify_autoupdate {
                    run => 'Auto-update:',                     run => 'Auto-update:',
                    classlists => 'Updates to user information in classlists?'                     classlists => 'Updates to user information in classlists?'
                 );                  );
     my ($othertitle,$usertypes,$types) = &sorted_inst_types($dom);      my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom);
     my %fieldtitles = &Apache::lonlocal::texthash (      my %fieldtitles = &Apache::lonlocal::texthash (
                         id => 'Student/Employee ID',                          id => 'Student/Employee ID',
                         permanentemail => 'E-mail address',                          permanentemail => 'E-mail address',
Line 2831  sub modify_directorysrch { Line 2906  sub modify_directorysrch {
     my @cansearch = &Apache::loncommon::get_env_multiple('form.cansearch');      my @cansearch = &Apache::loncommon::get_env_multiple('form.cansearch');
     my @searchby = &Apache::loncommon::get_env_multiple('form.searchby');      my @searchby = &Apache::loncommon::get_env_multiple('form.searchby');
   
     my ($othertitle,$usertypes,$types) = &sorted_inst_types($dom);      my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom);
     if (keys(%{$usertypes}) == 0) {      if (keys(%{$usertypes}) == 0) {
         @cansearch = ('default');          @cansearch = ('default');
     } else {      } else {
Line 3097  sub modify_contacts { Line 3172  sub modify_contacts {
 sub modify_usercreation {  sub modify_usercreation {
     my ($dom,%domconfig) = @_;      my ($dom,%domconfig) = @_;
     my ($resulttext,%curr_usercreation,%changes,%authallowed,%cancreate);      my ($resulttext,%curr_usercreation,%changes,%authallowed,%cancreate);
       my $warningmsg;
     if (ref($domconfig{'usercreation'}) eq 'HASH') {      if (ref($domconfig{'usercreation'}) eq 'HASH') {
         foreach my $key (keys(%{$domconfig{'usercreation'}})) {          foreach my $key (keys(%{$domconfig{'usercreation'}})) {
             $curr_usercreation{$key} = $domconfig{'usercreation'}{$key};              $curr_usercreation{$key} = $domconfig{'usercreation'}{$key};
         }          }
     }      }
     my %title = &Apache::lonlocal::texthash (  
                    author => 'adding co-authors/assistant authors',  
                    course => 'adding users to a course',  
                 );  
     my @username_rule = &Apache::loncommon::get_env_multiple('form.username_rule');      my @username_rule = &Apache::loncommon::get_env_multiple('form.username_rule');
     my @id_rule = &Apache::loncommon::get_env_multiple('form.id_rule');      my @id_rule = &Apache::loncommon::get_env_multiple('form.id_rule');
     my @contexts = ('author','course');      my @email_rule = &Apache::loncommon::get_env_multiple('form.email_rule');
       my @contexts = ('author','course','selfcreate');
     foreach my $item(@contexts) {      foreach my $item(@contexts) {
         $cancreate{$item} = $env{'form.can_createuser_'.$item};          $cancreate{$item} = $env{'form.can_createuser_'.$item};
           if ($item eq 'selfcreate') {
               my %domdefaults = &Apache::lonnet::get_domain_defaults($dom);
               if (!((($domdefaults{'auth_def'} =~/^krb/) && ($domdefaults{'auth_arg_def'} ne '')) || ($domdefaults{'auth_def'} eq 'localauth'))) {
                   if (($cancreate{$item} eq 'any') || ($cancreate{$item} eq 'login')) {
                       $warningmsg = &mt('Although account creation has been set to be available for institutional logins, currently default authentication in this domain has not been set to support this.').' '.&mt('You need to set the default authentication type to Kerberos 4 or 5 (with a Kerberos domain specified), or to Local authentication, if the localauth module has been customized in your domain to authenticate institutional logins.');   
                   }
               }
           }
     }      }
     if (ref($curr_usercreation{'cancreate'}) eq 'HASH') {      if (ref($curr_usercreation{'cancreate'}) eq 'HASH') {
         foreach my $item (@contexts) {          foreach my $item (@contexts) {
Line 3120  sub modify_usercreation { Line 3201  sub modify_usercreation {
         }          }
     } elsif (ref($curr_usercreation{'cancreate'}) eq 'ARRAY') {      } elsif (ref($curr_usercreation{'cancreate'}) eq 'ARRAY') {
         foreach my $item (@contexts) {          foreach my $item (@contexts) {
             if (grep(/^\Q$item\E$/,@{$curr_usercreation{'cancreate'}})) {              if (!grep(/^\Q$item\E$/,@{$curr_usercreation{'cancreate'}})) {
                 if ($cancreate{$item} ne 'any') {                  if ($cancreate{$item} ne 'any') {
                     push(@{$changes{'cancreate'}},$item);                      push(@{$changes{'cancreate'}},$item);
                 }                  }
Line 3131  sub modify_usercreation { Line 3212  sub modify_usercreation {
             }              }
         }          }
     } else {      } else {
         foreach my $item ('author','course') {          foreach my $item (@contexts)  {
             push(@{$changes{'cancreate'}},$item);              push(@{$changes{'cancreate'}},$item);
         }          }
     }      }
Line 3166  sub modify_usercreation { Line 3247  sub modify_usercreation {
         push(@{$changes{'id_rule'}},@id_rule);          push(@{$changes{'id_rule'}},@id_rule);
     }      }
   
     my @contexts = ('author','course','domain');      if (ref($curr_usercreation{'email_rule'}) eq 'ARRAY') {
           foreach my $type (@{$curr_usercreation{'email_rule'}}) {
               if (!grep(/^\Q$type\E$/,@email_rule)) {
                   push(@{$changes{'email_rule'}},$type);
               }
           }
           foreach my $type (@email_rule) {
               if (!grep(/^\Q$type\E$/,@{$curr_usercreation{'email_rule'}})) {
                   push(@{$changes{'email_rule'}},$type);
               }
           }
       } else {
           push(@{$changes{'email_rule'}},@email_rule);
       }
   
       my @authen_contexts = ('author','course','domain');
     my @authtypes = ('int','krb4','krb5','loc');      my @authtypes = ('int','krb4','krb5','loc');
     my %authhash;      my %authhash;
     foreach my $item (@contexts) {      foreach my $item (@authen_contexts) {
         my @authallowed =  &Apache::loncommon::get_env_multiple('form.'.$item.'_auth');          my @authallowed =  &Apache::loncommon::get_env_multiple('form.'.$item.'_auth');
         foreach my $auth (@authtypes) {          foreach my $auth (@authtypes) {
             if (grep(/^\Q$auth\E$/,@authallowed)) {              if (grep(/^\Q$auth\E$/,@authallowed)) {
Line 3180  sub modify_usercreation { Line 3276  sub modify_usercreation {
         }          }
     }      }
     if (ref($curr_usercreation{'authtypes'}) eq 'HASH') {      if (ref($curr_usercreation{'authtypes'}) eq 'HASH') {
         foreach my $item (@contexts) {          foreach my $item (@authen_contexts) {
             if (ref($curr_usercreation{'authtypes'}{$item}) eq 'HASH') {              if (ref($curr_usercreation{'authtypes'}{$item}) eq 'HASH') {
                 foreach my $auth (@authtypes) {                  foreach my $auth (@authtypes) {
                     if ($authhash{$item}{$auth} ne $curr_usercreation{'authtypes'}{$item}{$auth}) {                      if ($authhash{$item}{$auth} ne $curr_usercreation{'authtypes'}{$item}{$auth}) {
Line 3191  sub modify_usercreation { Line 3287  sub modify_usercreation {
             }              }
         }          }
     } else {      } else {
         foreach my $item (@contexts) {          foreach my $item (@authen_contexts) {
             push(@{$changes{'authtypes'}},$item);              push(@{$changes{'authtypes'}},$item);
         }          }
     }      }
Line 3201  sub modify_usercreation { Line 3297  sub modify_usercreation {
                               cancreate     => \%cancreate,                                cancreate     => \%cancreate,
                               username_rule => \@username_rule,                                username_rule => \@username_rule,
                               id_rule       => \@id_rule,                                id_rule       => \@id_rule,
                                 email_rule    => \@email_rule,
                               authtypes     => \%authhash,                                authtypes     => \%authhash,
                             }                              }
             );              );
Line 3213  sub modify_usercreation { Line 3310  sub modify_usercreation {
             if (ref($changes{'cancreate'}) eq 'ARRAY') {              if (ref($changes{'cancreate'}) eq 'ARRAY') {
                 my %lt = &usercreation_types();                  my %lt = &usercreation_types();
                 foreach my $type (@{$changes{'cancreate'}}) {                  foreach my $type (@{$changes{'cancreate'}}) {
                     my $chgtext;                       my $chgtext =  $lt{$type}.', ';
                     if ($cancreate{$type} eq 'none') {                      if ($type eq 'selfcreate') {
                         $chgtext = $lt{$type}.' '.&mt('creation of new users is not permitted, except by a Domain Coordinator.');                          if ($cancreate{$type} eq 'none') {
                     } elsif ($cancreate{$type} eq 'any') {                              $chgtext .= &mt('creation of a new user account is not permitted.');
                         $chgtext = $lt{$type}.' '.&mt('creation of new users is permitted for both institutional and non-institutional usernames.');                           } elsif ($cancreate{$type} eq 'any') {
                     } elsif ($cancreate{$type} eq 'official') {                              $chgtext .= &mt('creation of a new account is permitted for users authenticated by institutional log-in and SSO, and also for e-mail addresses used as usernames.');
                         $chgtext = $lt{$type}.' '.&mt('creation of new users is only permitted for institutional usernames.',$lt{$type});                          } elsif ($cancreate{$type} eq 'login') {
                     } elsif ($cancreate{$type} eq 'unofficial') {                              $chgtext .= &mt('creation of a new account is only permitted for users authenticated by institutional log-in.');
                         $chgtext = $lt{$type}.' '.&mt('creation of new users is only permitted for non-institutional usernames.',$lt{$type});                          } elsif ($cancreate{$type} eq 'sso') {
                               $chgtext .= &mt('creation of a new account is only permitted for users authenticated by institutional single sign on.');
                           } elsif ($cancreate{$type} eq 'email') {
                               $chgtext .= &mt('creation of a new account is only permitted for users who provide a valid e-mail address for use as the username.');
                           }
                       } else {
                           if ($cancreate{$type} eq 'none') {
                               $chgtext .= &mt('creation of new users is not permitted, except by a Domain Coordinator.');
                           } elsif ($cancreate{$type} eq 'any') {
                               $chgtext .= &mt('creation of new users is permitted for both institutional and non-institutional usernames.');
                           } elsif ($cancreate{$type} eq 'official') {
                               $chgtext .= &mt('creation of new users is only permitted for institutional usernames.');
                           } elsif ($cancreate{$type} eq 'unofficial') {
                               $chgtext .= &mt('creation of new users is only permitted for non-institutional usernames.');
                           }
                     }                      }
                     $resulttext .= '<li>'.$chgtext.'</li>';                      $resulttext .= '<li>'.$chgtext.'</li>';
                 }                  }
Line 3258  sub modify_usercreation { Line 3369  sub modify_usercreation {
                     $resulttext .= '<li>'.&mt('There are now no ID formats restricted to verified users in the institutional directory.').'</li>';                      $resulttext .= '<li>'.&mt('There are now no ID formats restricted to verified users in the institutional directory.').'</li>';
                 }                  }
             }              }
               if (ref($changes{'email_rule'}) eq 'ARRAY') {
                   my ($emailrules,$emailruleorder) =
                       &Apache::lonnet::inst_userrules($dom,'email');
                   my $chgtext = '<ul>';
                   foreach my $type (@email_rule) {
                       if (ref($emailrules->{$type}) eq 'HASH') {
                           $chgtext .= '<li>'.$emailrules->{$type}{'name'}.'</li>';
                       }
                   }
                   $chgtext .= '</ul>';
                   if (@email_rule > 0) {
                       $resulttext .= '<li>'.&mt('Accounts may not be created by users self-enrolling with e-mail addresses of the following types: ').$chgtext.'</li>';
                   } else {
                       $resulttext .= '<li>'.&mt('There are now no restrictions on e-mail addresses which may be used as a username when self-enrolling.').'</li>';
                   }
               }
   
             my %authname = &authtype_names();              my %authname = &authtype_names();
             my %context_title = &context_names();              my %context_title = &context_names();
             if (ref($changes{'authtypes'}) eq 'ARRAY') {              if (ref($changes{'authtypes'}) eq 'ARRAY') {
Line 3270  sub modify_usercreation { Line 3398  sub modify_usercreation {
                             push(@allowed,$authname{$auth});                              push(@allowed,$authname{$auth});
                         }                          }
                     }                      }
                     $chgtext .= join(', ',@allowed).'</li>';                      if (@allowed > 0) {
                           $chgtext .= join(', ',@allowed).'</li>';
                       } else {
                           $chgtext .= &mt('none').'</li>';
                       }
                 }                  }
                 $chgtext .= '</ul>';                  $chgtext .= '</ul>';
                 $resulttext .= '<li>'.&mt('Authentication types available for assignment to new users').'<br />'.$chgtext;                  $resulttext .= '<li>'.&mt('Authentication types available for assignment to new users').'<br />'.$chgtext;
Line 3284  sub modify_usercreation { Line 3416  sub modify_usercreation {
         $resulttext = '<span class="LC_error">'.          $resulttext = '<span class="LC_error">'.
             &mt('An error occurred: [_1]',$putresult).'</span>';              &mt('An error occurred: [_1]',$putresult).'</span>';
     }      }
       if ($warningmsg ne '') {
           $resulttext .= '<br /><span class="LC_warning">'.$warningmsg.'</span><br />';
       }
     return $resulttext;      return $resulttext;
 }  }
   
Line 3386  sub modify_usermodification { Line 3521  sub modify_usermodification {
     }      }
     return $resulttext;      return $resulttext;
 }  }
   
   sub modify_defaults {
       my ($dom,$r) = @_;
       my ($resulttext,$mailmsgtxt,%newvalues,%changes,@errors);
       my %domdefaults = &Apache::lonnet::get_domain_defaults($dom);
       my @items = ('auth_def','auth_arg_def','lang_def');
       my @authtypes = ('internal','krb4','krb5','localauth');
       foreach my $item (@items) {
           $newvalues{$item} = $env{'form.'.$item};
           if ($item eq 'auth_def') {
               if ($newvalues{$item} ne '') {
                   if (!grep(/^\Q$newvalues{$item}\E$/,@authtypes)) {
                       push(@errors,$item);
                   }
               }
           } elsif ($item eq 'lang_def') {
               if ($newvalues{$item} ne '') {
                   if ($newvalues{$item} =~ /^(\w+)/) {
                       my $langcode = $1;
                       if (code2language($langcode) eq '') {
                           push(@errors,$item);
                       }
                   } else {
                       push(@errors,$item);
                   }
               }
           }
           if (grep(/^\Q$item\E$/,@errors)) {
               $newvalues{$item} = $domdefaults{$item};
           } elsif ($domdefaults{$item} ne $newvalues{$item}) {
               $changes{$item} = 1;
           }
       }
       my %defaults_hash = (
                            defaults => { auth_def => $newvalues{'auth_def'},
                                          auth_arg_def => $newvalues{'auth_arg_def'},
                                          lang_def => $newvalues{'lang_def'},
                                        }
                          );
       my $title = &defaults_titles();
       my $putresult = &Apache::lonnet::put_dom('configuration',\%defaults_hash,
                                                $dom);
       if ($putresult eq 'ok') {
           if (keys(%changes) > 0) {
               $resulttext = &mt('Changes made:').'<ul>';
               my $version = $r->dir_config('lonVersion');
               my $mailmsgtext = "Changes made to domain settings in a LON-CAPA installation - domain: $dom (running version: $version) - dns_domain.tab needs to be updated with the following changes, to support legacy 2.4, 2.5 and 2.6 versions of LON-CAPA.\n\n";
               foreach my $item (sort(keys(%changes))) {
                   my $value = $env{'form.'.$item};
                   if ($value eq '') {
                       $value = &mt('none');
                   } elsif ($item eq 'auth_def') {
                       my %authnames = &authtype_names();
                       my %shortauth = (
                                internal => 'int',
                                krb4 => 'krb4',
                                krb5 => 'krb5',
                                localauth  => 'loc',
                       );
                       $value = $authnames{$shortauth{$value}};
                   }
                   $resulttext .= '<li>'.&mt('[_1] set to "[_2]"',$title->{$item},$value).'</li>';
                   $mailmsgtext .= "$title->{$item} set to $value\n";  
               }
               $resulttext .= '</ul>';
               $mailmsgtext .= "\n";
               my $cachetime = 24*60*60;
               &Apache::lonnet::do_cache_new('domdefaults',$dom,
                                             $defaults_hash{'defaults'},$cachetime);
               my $sysmail = $r->dir_config('lonSysEMail');
               &Apache::lonmsg::sendemail($sysmail,"LON-CAPA Domain Settings Change - $dom",$mailmsgtext);
           } else {
               $resulttext = &mt('No changes made to default authentication/language settings');
           }
       } else {
           $resulttext = '<span class="LC_error">'.
               &mt('An error occurred: [_1]',$putresult).'</span>';
       }
       if (@errors > 0) {
           $resulttext .= '<br />'.&mt('The following were left unchanged because the values entered were invalid:');
           foreach my $item (@errors) {
               $resulttext .= ' "'.$title->{$item}.'",';
           }
           $resulttext =~ s/,$//;
       }
       return $resulttext;
   }
   
 1;  1;

Removed from v.1.42  
changed lines
  Added in v.1.45


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