[LON-CAPA-cvs] cvs: loncom /interface domainprefs.pm

raeburn lon-capa-cvs-allow@mail.lon-capa.org
Wed, 14 May 2008 20:21:35 -0000


This is a MIME encoded message

--raeburn1210796495
Content-Type: text/plain

raeburn		Wed May 14 16:21:35 2008 EDT

  Modified files:              
    /loncom/interface	domainprefs.pm 
  Log:
  - authentication types for which self creation of a LON-CAPA account is permitted are set using checkboxes instead of radio buttons, and stored in an array instead of a single-valued scalar. 
  
  
--raeburn1210796495
Content-Type: text/plain
Content-Disposition: attachment; filename="raeburn-20080514162135.txt"

Index: loncom/interface/domainprefs.pm
diff -u loncom/interface/domainprefs.pm:1.49 loncom/interface/domainprefs.pm:1.50
--- loncom/interface/domainprefs.pm:1.49	Thu May  8 18:13:32 2008
+++ loncom/interface/domainprefs.pm	Wed May 14 16:21:34 2008
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Handler to set domain-wide configuration settings
 #
-# $Id: domainprefs.pm,v 1.49 2008/05/08 22:13:32 raeburn Exp $
+# $Id: domainprefs.pm,v 1.50 2008/05/14 20:21:34 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -1543,11 +1543,21 @@
             &Apache::lonnet::inst_userrules($dom,'username');
         my %lt = &usercreation_types();
         my %checked;
+        my @selfcreate; 
         if (ref($settings) eq 'HASH') {
             if (ref($settings->{'cancreate'}) eq 'HASH') {
                 foreach my $item (@creators) {
                     $checked{$item} = $settings->{'cancreate'}{$item};
                 }
+                if (ref($settings->{'cancreate'}{'selfcreate'}) eq 'ARRAY') {
+                    @selfcreate = @{$settings->{'cancreate'}{'selfcreate'}};
+                } elsif ($settings->{'cancreate'}{'selfcreate'} ne '') {
+                    if ($settings->{'cancreate'}{'selfcreate'} eq 'any') {
+                        @selfcreate = ('email','login','sso');
+                    } elsif ($settings->{'cancreate'}{'selfcreate'} ne 'none') {
+                        @selfcreate = ($settings->{'cancreate'}{'selfcreate'});
+                    }
+                }
             } elsif (ref($settings->{'cancreate'}) eq 'ARRAY') {
                 foreach my $item (@creators) {
                     if (grep(/^\Q$item\E$/,@{$settings->{'cancreate'}})) {
@@ -1559,10 +1569,8 @@
         my $rownum = 0;
         foreach my $item (@creators) {
             $rownum ++;
-            if ($checked{$item} eq '') {
-                if ($item eq 'selfcreate') {
-                    $checked{$item} = 'none';
-                } else {
+            if ($item ne 'selfcreate') {  
+                if ($checked{$item} eq '') {
                     $checked{$item} = 'any';
                 }
             }
@@ -1575,24 +1583,33 @@
             $datatable .= '<tr'.$css_class.'>'.
                          '<td><span class="LC_nobreak">'.$lt{$item}.
                          '</span></td><td align="right">';
-            my @options = ('any');
+            my @options;
             if ($item eq 'selfcreate') {
                 push(@options,('email','login','sso'));
             } else {
+                @options = ('any');
                 if (ref($rules) eq 'HASH') {
                     if (keys(%{$rules}) > 0) {
                         push(@options,('official','unofficial'));
                     }
                 }
+                push(@options,'none');
             }
-            push(@options,'none');
             foreach my $option (@options) {
+                my $type = 'radio';
                 my $check = ' ';
-                if ($checked{$item} eq $option) {
-                    $check = ' checked="checked" ';
+                if ($item eq 'selfcreate') {
+                    $type = 'checkbox';
+                    if (grep(/^\Q$option\E$/,@selfcreate)) {
+                        $check = ' checked="checked" ';
+                    }
+                } else {
+                    if ($checked{$item} eq $option) {
+                        $check = ' checked="checked" ';
+                    }
                 } 
                 $datatable .= '<span class="LC_nobreak"><label>'.
-                              '<input type="radio" name="can_createuser_'.
+                              '<input type="'.$type.'" name="can_createuser_'.
                               $item.'" value="'.$option.'"'.$check.'/>&nbsp;'.
                               $lt{$option}.'</label>&nbsp;&nbsp;</span>';
             }
@@ -3640,21 +3657,81 @@
     my @email_rule = &Apache::loncommon::get_env_multiple('form.email_rule');
     my @contexts = ('author','course','selfcreate');
     foreach my $item(@contexts) {
-        $cancreate{$item} = $env{'form.can_createuser_'.$item};
         if ($item eq 'selfcreate') {
+            @{$cancreate{$item}} = &Apache::loncommon::get_env_multiple('form.can_createuser_'.$item);
             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($cancreate{$item}) eq 'ARRAY') { 
+                    if (grep(/^login$/,@{$cancreate{$item}})) {
+                        $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.');   
+                    }
                 }
             }
+        } else {
+            $cancreate{$item} = $env{'form.can_createuser_'.$item};
         }
     }
     if (ref($curr_usercreation{'cancreate'}) eq 'HASH') {
         foreach my $item (@contexts) {
-            if ($curr_usercreation{'cancreate'}{$item} ne $cancreate{$item}) {
-                push(@{$changes{'cancreate'}},$item);
-            } 
+            if ($item eq 'selfcreate') {
+                if (ref($curr_usercreation{'cancreate'}{$item}) eq 'ARRAY') { 
+                    foreach my $curr (@{$curr_usercreation{'cancreate'}{$item}}) {
+                        if (!grep(/^$curr$/,@{$cancreate{$item}})) {
+                            if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
+                                push(@{$changes{'cancreate'}},$item);
+                            }
+                        }
+                    }
+                } else {
+                    if ($curr_usercreation{'cancreate'}{$item} eq '') {
+                        if (@{$cancreate{$item}} > 0) {
+                            if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
+                                push(@{$changes{'cancreate'}},$item);
+                            }
+                        }
+                    } else {
+                        if ($curr_usercreation{'cancreate'}{$item} eq 'any') {
+                            if (@{$cancreate{$item}} < 3) {
+                                if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
+                                    push(@{$changes{'cancreate'}},$item);
+                                }
+                            }
+                        } elsif ($curr_usercreation{'cancreate'}{$item} eq 'none') {
+                            if (@{$cancreate{$item}} > 0) {
+                                if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
+                                    push(@{$changes{'cancreate'}},$item);
+                                }
+                            }
+                        } elsif (!grep(/^$curr_usercreation{'cancreate'}{$item}$/,@{$cancreate{$item}})) {
+                            if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
+                                push(@{$changes{'cancreate'}},$item);
+                            }
+                        }
+                    }
+                }
+                if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
+                    foreach my $type (@{$cancreate{$item}}) {
+                        if (ref($curr_usercreation{'cancreate'}{$item}) eq 'ARRAY') {
+                            if (!grep(/^$type$/,@{$curr_usercreation{'cancreate'}{$item}})) {
+                                if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
+                                    push(@{$changes{'cancreate'}},$item);
+                                }
+                            }
+                        } elsif (($curr_usercreation{'cancreate'}{$item} ne 'any') &&
+                                 ($curr_usercreation{'cancreate'}{$item} ne 'none')) {
+                            if ($curr_usercreation{'cancreate'}{$item} ne $type) {
+                                if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
+                                    push(@{$changes{'cancreate'}},$item);
+                                }
+                            }
+                        }
+                    }
+                }
+            } else {
+                if ($curr_usercreation{'cancreate'}{$item} ne $cancreate{$item}) {
+                    push(@{$changes{'cancreate'}},$item);
+                }
+            }
         }
     } elsif (ref($curr_usercreation{'cancreate'}) eq 'ARRAY') {
         foreach my $item (@contexts) {
@@ -3761,6 +3838,12 @@
 
     my $putresult = &Apache::lonnet::put_dom('configuration',\%usercreation_hash,
                                              $dom);
+
+    my %selfcreatetypes = (
+                             sso   => 'users authenticated by institutional single sign on',
+                             login => 'users authenticated by institutional log-in',
+                             email => 'users who provide a valid e-mail address for use as the username',
+                          );
     if ($putresult eq 'ok') {
         if (keys(%changes) > 0) {
             $resulttext = &mt('Changes made:').'<ul>';
@@ -3769,16 +3852,14 @@
                 foreach my $type (@{$changes{'cancreate'}}) {
                     my $chgtext =  $lt{$type}.', ';
                     if ($type eq 'selfcreate') {
-                        if ($cancreate{$type} eq 'none') {
+                        if (@{$cancreate{$type}} == 0) {
                             $chgtext .= &mt('creation of a new user account is not permitted.');
-                        } elsif ($cancreate{$type} eq 'any') {
-                            $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.');
-                        } elsif ($cancreate{$type} eq 'login') {
-                            $chgtext .= &mt('creation of a new account is only permitted for users authenticated by institutional log-in.');
-                        } 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 {
+                            $chgtext .= &mt('creation of a new account is permitted for:<ul>');
+                            foreach my $case (@{$cancreate{$type}}) {
+                                $chgtext .= '<li>'.$selfcreatetypes{$case}.'</li>';
+                            }
+                            $chgtext .= '</ul>';
                         }
                     } else {
                         if ($cancreate{$type} eq 'none') {

--raeburn1210796495--