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

raeburn raeburn at source.lon-capa.org
Mon Mar 3 13:09:24 EST 2014


raeburn		Mon Mar  3 18:09:24 2014 EDT

  Modified files:              (Branch: version_2_11_X)
    /loncom/interface	domainprefs.pm 
  Log:
  - For 2.11
    - Backport 1.227, 1.228.
  
  
-------------- next part --------------
Index: loncom/interface/domainprefs.pm
diff -u loncom/interface/domainprefs.pm:1.160.6.34 loncom/interface/domainprefs.pm:1.160.6.35
--- loncom/interface/domainprefs.pm:1.160.6.34	Sat Feb 15 17:07:19 2014
+++ loncom/interface/domainprefs.pm	Mon Mar  3 18:09:24 2014
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Handler to set domain-wide configuration settings
 #
-# $Id: domainprefs.pm,v 1.160.6.34 2014/02/15 17:07:19 raeburn Exp $
+# $Id: domainprefs.pm,v 1.160.6.35 2014/03/03 18:09:24 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -273,7 +273,7 @@
                                 {col1 => 'Setting',
                                  col2 => 'Affiliation'},
                                 {col1 => 'User population',
-                                 col2 => 'Updateable user data'}],
+                                 col2 => 'Updatable user data'}],
                   },
         'autocreate' => 
                   { text => 'Auto-course creation settings',
@@ -317,9 +317,9 @@
                   { text => 'User modification',
                     help => 'Domain_Configuration_User_Modification',
                     header => [{col1 => 'Target user has role',
-                                col2 => 'User information updateable in author context'},
+                                col2 => 'User information updatable in author context'},
                                {col1 => 'Target user has role',
-                                col2 => 'User information updateable in course context'}],
+                                col2 => 'User information updatable in course context'}],
                   },
         'scantron' =>
                   { text => 'Bubblesheet format file',
@@ -3776,7 +3776,6 @@
         }
     }
     my %radiohash;
-    my $rownum = 0;
     my $numinrow = 4;
     map { $radiohash{'cancreate_'.$_} = 1; } @selfcreate;
     if ($position eq 'top') {
@@ -3789,18 +3788,18 @@
                                'cancreate_login' => 'off',
                                'cancreate_sso'   => 'off',
                              );
-        my $itemcount = 1;
-        my $onclick;
+        my ($onclick,$itemcount);
         ($datatable,$itemcount) = &radiobutton_prefs(\%radiohash,\@toggles,\%defaultchecked,
                                                      \%choices,$itemcount,$onclick);
+        $$rowtotal += $itemcount;
+
         my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom);
 
         if (ref($usertypes) eq 'HASH') {
             if (keys(%{$usertypes}) > 0) {
                 $datatable .= &insttypes_row($createsettings,$types,$usertypes,
                                              $dom,$numinrow,$othertitle,
-                                             'statustocreate',$rownum);
-                $rownum ++;
+                                             'statustocreate',$$rowtotal);
                 $$rowtotal ++;
             }
         }
@@ -3812,14 +3811,13 @@
             push(@{$types},'default');
             $usertypes->{'default'} = $othertitle;
             foreach my $status (@{$types}) {
-                $rownum ++;
                 $datatable .= &modifiable_userdata_row('selfcreate',$status,$domconf{'usermodification'},
-                                                       $numinrow,$rownum,$usertypes);
+                                                       $numinrow,$$rowtotal,$usertypes);
                 $$rowtotal ++;
             }
         }
     } else {
-        my $css_class = $rownum%2?' class="LC_odd_row"':'';
+        my $css_class = $$rowtotal%2?' class="LC_odd_row"':'';
         my %choices =
             &Apache::lonlocal::texthash(
                                           email         => 'Approved automatically',
@@ -3851,27 +3849,32 @@
                           $choices{$option}.'</label> ';
         }
         $$rowtotal ++;
-        $rownum ++;
         $datatable .= '</span></td></tr>'.
                       &print_requestmail($dom,'selfcreation',$createsettings,$rowtotal);
-        $rownum ++;
-        my ($infofields,$infotitles) = &Apache::loncommon::emailusername_info();
-        $numinrow = 2;
-        $datatable .= &modifiable_userdata_row('cancreate','emailusername',$settings,
-                                               $numinrow,$rownum,undef,$infofields,$infotitles);
         $$rowtotal ++;
-        $rownum ++;
+        my ($infofields,$infotitles) = &Apache::loncommon::emailusername_info();
+        $numinrow = 1;
+        my ($othertitle,$usertypes,$types) =  &Apache::loncommon::sorted_inst_types($dom);
+        $usertypes->{'default'} = $othertitle;
+        if (ref($types) eq 'ARRAY') {
+            push(@{$types},'default');
+            $usertypes->{'default'} = $othertitle;
+            foreach my $status (@{$types}) {
+                $datatable .= &modifiable_userdata_row('cancreate','emailusername_'.$status,$settings,
+                                                       $numinrow,$$rowtotal,$usertypes,$infofields,$infotitles);
+                $$rowtotal ++;
+            }
+        }
         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,$rownum);
-                $rownum ++;
+                                                $emailruleorder,$numinrow,$$rowtotal);
                 $$rowtotal ++;
             }
         }
-        $datatable .= &captcha_choice('cancreate',$createsettings,$rownum);
+        $datatable .= &captcha_choice('cancreate',$createsettings,$$rowtotal);
     }
     return $datatable;
 }
@@ -4837,11 +4840,20 @@
 }
 
 sub modifiable_userdata_row {
-    my ($context,$role,$settings,$numinrow,$rowcount,$usertypes,$fieldsref,$titlesref) = @_;
-    my $rolename;
+    my ($context,$item,$settings,$numinrow,$rowcount,$usertypes,$fieldsref,$titlesref) = @_;
+    my ($role,$rolename,$statustype);
+    $role = $item;
     if ($context eq 'cancreate') {
-        if ($role eq 'emailusername') {
-            $rolename = &mt('Data user provides');
+        if ($item =~ /^emailusername_(.+)$/) {
+            $statustype = $1;
+            $role = 'emailusername';
+            if (ref($usertypes) eq 'HASH') {
+                if ($usertypes->{$statustype}) {
+                    $rolename = &mt('Data provided by [_1]',$usertypes->{$statustype});
+                } else {
+                    $rolename = &mt('Data provided by user');
+                }
+            }
         }
     } elsif ($context eq 'selfcreate') {
         if (ref($usertypes) eq 'HASH') {
@@ -4878,14 +4890,33 @@
     if (ref($settings) eq 'HASH') {
         if (ref($settings->{$context}) eq 'HASH') {
             if (ref($settings->{$context}->{$role}) eq 'HASH') {
-                foreach my $field (@fields) {
-                    if ($settings->{$context}->{$role}->{$field}) {
-                        $checks{$field} = ' checked="checked" ';
+                my $hashref = $settings->{$context}->{$role};
+                if ($role eq 'emailusername') {
+                    if ($statustype) {
+                        if (ref($settings->{$context}->{$role}->{$statustype}) eq 'HASH') {
+                            $hashref = $settings->{$context}->{$role}->{$statustype};
+                            if (ref($hashref) eq 'HASH') {
+                                foreach my $field (@fields) {
+                                    if ($hashref->{$field}) {
+                                        $checks{$field} = $hashref->{$field};
+                                    }
+                                }
+                            }
+                        }
+                    }
+                } else {
+                    if (ref($hashref) eq 'HASH') {
+                        foreach my $field (@fields) {
+                            if ($hashref->{$field}) {
+                                $checks{$field} = ' checked="checked" ';
+                            }
+                        }
                     }
                 }
             }
         }
     }
+
     for (my $i=0; $i<@fields; $i++) {
         my $rem = $i%($numinrow);
         if ($rem == 0) {
@@ -4895,20 +4926,40 @@
             $output .= '<tr>';
         }
         my $check = ' ';
-        if (exists($checks{$fields[$i]})) {
-            $check = $checks{$fields[$i]}
-        } else {
-            if ($role eq 'st') {
-                if (ref($settings) ne 'HASH') {
-                    $check = ' checked="checked" '; 
+        unless ($role eq 'emailusername') {
+            if (exists($checks{$fields[$i]})) {
+                $check = $checks{$fields[$i]}
+            } else {
+                if ($role eq 'st') {
+                    if (ref($settings) ne 'HASH') {
+                        $check = ' checked="checked" ';
+                    }
                 }
             }
         }
         $output .= '<td class="LC_left_item">'.
-                   '<span class="LC_nobreak"><label>'.
-                   '<input type="checkbox" name="canmodify_'.$role.'" '.
-                   'value="'.$fields[$i].'"'.$check.'/>'.$fieldtitles{$fields[$i]}.
-                   '</label></span></td>';
+                   '<span class="LC_nobreak">';
+        if ($role eq 'emailusername') {
+            unless ($checks{$fields[$i]} =~ /^(required|optional)$/) {
+                $checks{$fields[$i]} = 'omit';
+            }
+            foreach my $option ('required','optional','omit') {
+                my $checked='';
+                if ($checks{$fields[$i]} eq $option) {
+                    $checked='checked="checked" ';
+                }
+                $output .= '<label>'.
+                           '<input type="radio" name="canmodify_'.$item.'_'.$fields[$i].'" value="'.$option.'" '.$checked.'/>'.
+                           &mt($option).'</label>'.(' ' x2);
+            }
+            $output .= '<i>'.$fieldtitles{$fields[$i]}.'</i>';
+        } else {
+            $output .= '<label>'.
+                       '<input type="checkbox" name="canmodify_'.$role.'" '.
+                       'value="'.$fields[$i].'"'.$check.'/>'.$fieldtitles{$fields[$i]}.
+                       '</label>';
+        }
+        $output .= '</span></td>';
         $rem = @fields%($numinrow);
     }
     my $colsleft = $numinrow - $rem;
@@ -7641,6 +7692,11 @@
     my ($dom,%domconfig) = @_;
     my ($resulttext,$warningmsg,%curr_usercreation,%curr_usermodify,%changes,%cancreate);
     my (%save_usercreate,%save_usermodify);
+    my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom);
+    if (ref($types) eq 'ARRAY') {
+        $usertypes->{'default'} = $othertitle;
+        push(@{$types},'default');
+    }
 #
 # Retrieve current domain configuration for self-creation of usernames from $domconfig{'usercreation'}.
 #
@@ -7692,7 +7748,7 @@
 # Populate $cancreate{'selfcreate'} array reference with types of user, for which self-creation of user accounts
 # is permitted.
 #
-    foreach my $item ('login','sso','email') { 
+    foreach my $item ('login','sso','email') {
         if ($item eq 'email') {
             if ($env{'form.cancreate_email'} eq 'email') {
                 push(@{$cancreate{'selfcreate'}},'email');
@@ -7708,20 +7764,22 @@
     my (@email_rule,%userinfo,%savecaptcha);
     my ($infofields,$infotitles) = &Apache::loncommon::emailusername_info();
 #
-# Populate $cancreate{'emailusername'} hash ref with information types (if new user will provide data
-# value set to one), if self-creation with e-mail address permitted.
+# Populate $cancreate{'emailusername'}{$type} hash ref with information fields (if new user will provide data
+# value set to one), if self-creation with e-mail address permitted, where $type is user type: faculty, staff, student etc.
 #
     if (($env{'form.cancreate_email'} eq 'email') || ($env{'form.cancreate_email'} eq 'emailapproval')) {
         push(@contexts,'emailusername'); 
-        map { $userinfo{$_} = 1; } &Apache::loncommon::get_env_multiple('form.canmodify_emailusername');
-        if (ref($infofields) eq 'ARRAY') {
-            foreach my $field (@{$infofields}) {
-                if ($userinfo{$field}) {
-                    $cancreate{'emailusername'}{$field} = 1;
+        if (ref($types) eq 'ARRAY') {
+            foreach my $type (@{$types}) {
+                if (ref($infofields) eq 'ARRAY') {
+                    foreach my $field (@{$infofields}) {
+                        if ($env{'form.canmodify_emailusername_'.$type.'_'.$field} =~ /^(required|optional)$/) {
+                            $cancreate{'emailusername'}{$type}{$field} = $1;
+                        }
+                    }
                 }
             }
         }
-
 #
 # Populate $cancreate{'notify'} hash ref with names of Domain Coordinators who are to be notified of
 # queued requests for self-creation of account using e-mail address as username
@@ -7780,7 +7838,6 @@
                           &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.');
         }
     }
-    my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom);
     my @fields = ('lastname','firstname','middlename','generation',
                   'permanentemail','id');
     my %fieldtitles = &Apache::loncommon::personal_data_fieldtitles();
@@ -7793,14 +7850,12 @@
 #
     if (($env{'form.cancreate_login'}) || ($env{'form.cancreate_sso'})) {
         if (ref($types) eq 'ARRAY') {
-            if (@{$types} > 0) {
+            if (@{$types} > 1) {
                 @{$cancreate{'statustocreate'}} = &Apache::loncommon::get_env_multiple('form.statustocreate');
                 push(@contexts,'statustocreate');
             } else {
                 undef($cancreate{'statustocreate'});
             } 
-            push(@{$types},'default');
-            $usertypes->{'default'} = $othertitle;
             foreach my $type (@{$types}) {
                 my @modifiable =  &Apache::loncommon::get_env_multiple('form.canmodify_'.$type);
                 foreach my $field (@fields) {
@@ -7853,16 +7908,42 @@
         } elsif (ref($curr_usercreation{'cancreate'}{$item}) eq 'HASH') {
             if (ref($cancreate{$item}) eq 'HASH') {
                 foreach my $curr (keys(%{$curr_usercreation{'cancreate'}{$item}})) {
-                    if (!$cancreate{$item}{$curr}) {
-                        if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
-                            push(@{$changes{'cancreate'}},$item);
+                    if (ref($curr_usercreation{'cancreate'}{$item}{$curr}) eq 'HASH') {
+                        foreach my $field (keys(%{$curr_usercreation{'cancreate'}{$item}{$curr}})) {
+                            unless ($curr_usercreation{'cancreate'}{$item}{$curr}{$field} eq $cancreate{$item}{$curr}{$field}) {
+                                if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
+                                    push(@{$changes{'cancreate'}},$item);
+                                }
+                            }
+                        }
+                    } else {
+                        if (!$cancreate{$item}{$curr}) {
+                            if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
+                                push(@{$changes{'cancreate'}},$item);
+                            }
                         }
                     }
                 }
                 foreach my $field (keys(%{$cancreate{$item}})) {
-                    if (!$curr_usercreation{'cancreate'}{$item}{$field}) {
-                        if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
-                            push(@{$changes{'cancreate'}},$item);
+                    if (ref($cancreate{$item}{$field}) eq 'HASH') {
+                        foreach my $inner (keys(%{$cancreate{$item}{$field}})) {
+                            if (ref($curr_usercreation{'cancreate'}{$item}{$field}) eq 'HASH') {
+                                unless ($curr_usercreation{'cancreate'}{$item}{$field}{$inner} eq $cancreate{$item}{$field}{$inner}) {
+                                    if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
+                                        push(@{$changes{'cancreate'}},$item);
+                                    }
+                                }
+                            } else {
+                                if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
+                                    push(@{$changes{'cancreate'}},$item);
+                                }
+                            }
+                        }
+                    } else {
+                        if (!$curr_usercreation{'cancreate'}{$item}{$field}) {
+                            if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
+                                push(@{$changes{'cancreate'}},$item);
+                            }
                         }
                     }
                 }
@@ -7882,8 +7963,19 @@
                 }
             }
         } elsif ($item eq 'emailusername') {
-            if (keys(%userinfo) > 0) {
-                push(@{$changes{'cancreate'}},$item);
+            if (ref($cancreate{$item}) eq 'HASH') {
+                foreach my $type (keys(%{$cancreate{$item}})) {
+                    if (ref($cancreate{$item}{$type}) eq 'HASH') {
+                        foreach my $field (keys(%{$cancreate{$item}{$type}})) {
+                            if ($cancreate{$item}{$type}{$field}) {
+                                if (!grep(/^$item$/,@{$changes{'cancreate'}})) {
+                                    push(@{$changes{'cancreate'}},$item);
+                                }
+                                last;
+                            }
+                        }
+                    }
+                }
             }
         }
     }
@@ -8013,17 +8105,23 @@
                         $chgtext .= '</ul>';
                     } elsif ($type eq 'emailusername') {
                         if (ref($cancreate{'emailusername'}) eq 'HASH') {
-                            if (keys(%{$cancreate{'emailusername'}}) > 0) {
-                                $chgtext .= &mt('When self-creating account with e-mail as username, user will provide the following information:').
-                                            '<ul>';
-                                foreach my $field (@{$infofields}) {
-                                    if ($cancreate{'emailusername'}{$field}) {
-                                        $chgtext .= '<li>'.$infotitles->{$field}.'</li>';
+                            if (ref($types) eq 'ARRAY') {
+                                foreach my $type (@{$types}) {
+                                    if (ref($cancreate{'emailusername'}{$type}) eq 'HASH') {
+                                        if (keys(%{$cancreate{'emailusername'}{$type}}) > 0) {
+                                            $chgtext .= &mt('When self-creating account with e-mail as username, the following information will be provided by [_1]:',$usertypes->{$type}).
+                                                    '<ul>';
+                                            foreach my $field (@{$infofields}) {
+                                                if ($cancreate{'emailusername'}{$type}{$field}) {
+                                                    $chgtext .= '<li>'.$infotitles->{$field}.'</li>';
+                                                }
+                                            }
+                                        }
+                                        $chgtext .= '</ul>';
+                                    } else {
+                                        $chgtext .= &mt('When self creating account with e-mail as username, no information besides e-mail address will be provided by [_1].',$usertypes->{$type}).'<br />';
                                     }
                                 }
-                                $chgtext .= '</ul>';
-                            } else {
-                                $chgtext .= &mt('When self creating account with e-mail as username, user will not provide any information besides e-mail address');
                             }
                         }
                     } elsif ($type eq 'notify') {


More information about the LON-CAPA-cvs mailing list