Diff for /loncom/interface/loncommon.pm between versions 1.611 and 1.612

version 1.611, 2007/11/09 23:05:47 version 1.612, 2007/11/10 03:51:46
Line 6430  END_BLOCK Line 6430  END_BLOCK
     return $output;      return $output;
 }  }
   
 sub username_rule_check {  sub user_rule_check {
     my ($srch,$caller) = @_;      my ($usershash,$checks,$alerts,$rulematch,$inst_results,$curr_rules) = @_;
     my ($response,@curr_rules,%inst_results,$rulematch);      my $response;
     my ($rules,$ruleorder) = &Apache::lonnet::inst_userrules($srch->{'srchdomain'});      if (ref($usershash) eq 'HASH') {
     if (ref($srch) eq 'HASH') {          my %got_rules;
         (my $inst_response,%inst_results) =           foreach my $user (keys(%{$usershash})) {
             &Apache::lonnet::get_instuser($srch->{'srchdomain'},              my ($uname,$udom) = split(/:/,$user);
                                           $srch->{'srchterm'});              next if ($udom eq '' || $uname eq '');
         my %domconfig = &Apache::lonnet::get_dom('configuration',              my ($userstatus,$id);
                               ['usercreation'],$srch->{'srchdomain'});              if (ref($usershash->{$user}) eq 'HASH') {
         if (ref($domconfig{'usercreation'}) eq 'HASH') {                  $userstatus = $usershash->{$user}->{'status'};
             if (ref($domconfig{'usercreation'}{'username_rule'}) eq 'ARRAY') {                  $id = $usershash->{$user}->{'id'};
                 @curr_rules = @{$domconfig{'usercreation'}{'username_rule'}};  
             }              }
         }              my $inst_response;
         if (@curr_rules > 0) {              if (ref($checks) eq 'HASH') {
             my $domdesc = &Apache::lonnet::domain($srch->{'srchdomain'},'description');                  if (defined($checks->{'username'})) {
             my $instuser_reqd;                      ($inst_response,%{$inst_results}) = 
             my %rule_check = &Apache::lonnet::inst_rulecheck($srch->{'srchdomain'},$srch->{'srchterm'},\@curr_rules);                          &Apache::lonnet::get_instuser($udom,$uname);
             foreach my $rule (@curr_rules) {                  } elsif (defined($checks->{'id'})) {
                 if ($rule_check{$rule}) {                      ($inst_response,%{$inst_results}) =
                     $rulematch = $rule;                          &Apache::lonnet::get_instuser($udom,undef,$id);
                     if ($inst_response eq 'ok') {                  }
                         if (keys(%inst_results) == 0) {              }
                             if ($caller eq 'new') {              if (!$got_rules{$udom}) {
                                 $response = &mt('The username you chose matches the format of usernames defined for <span class="LC_cusr_emph">[_1]</span>, but the user does not exist in the institutional directory.',$domdesc).'<br />'.&mt("You must choose a username with a different format -- one that will not conflict with 'official' institutional usernames.");                  my %domconfig = &Apache::lonnet::get_dom('configuration',
                             }                                                    ['usercreation'],$udom);
                   if (ref($domconfig{'usercreation'}) eq 'HASH') {
                       foreach my $item (keys(%{$checks})) {
                           if (ref($domconfig{'usercreation'}{$item.'_rule'}) eq 'ARRAY') {
                               $$curr_rules{$udom}{$item} = 
                                   $domconfig{'usercreation'}{$item.'_rule'};
                         }                          }
                     }                      }
                     last;  
                 }                  }
                   $got_rules{$udom} = 1;
             }              }
             if ($response) {              foreach my $item (keys(%{$checks})) {
                 if ((ref($rules) eq 'HASH') && (ref($ruleorder) eq 'ARRAY')) {                  if (ref($$curr_rules{$udom}) eq 'HASH') {
                     if (@{$ruleorder} > 0) {                      if (ref($$curr_rules{$udom}{$item}) eq 'ARRAY') {
                         $response .= '<br />'.&mt('Usernames with the following format(s) may <span class="LC_cusr_emph">only</span> be used for verified users at [_1]:',$domdesc).' <ul>';                          if (@{$$curr_rules{$udom}{$item}} > 0) {
                         foreach my $rule (@{$ruleorder}) {                              my %rule_check;
                             if (grep(/^\Q$rule\E$/,@curr_rules)) {                              my %rule_check = &Apache::lonnet::inst_rulecheck($udom,$uname,$id,$item,$$curr_rules{$udom}{$item});
                                 if (ref($rules->{$rule}) eq 'HASH') {                              foreach my $rule (@{$$curr_rules{$udom}{$item}}) {
                                     $response .= '<li>'.$rules->{$rule}{'name'}.': '.                                  if ($rule_check{$rule}) {
                                                  $rules->{$rule}{'desc'}.'</li>';                                      $$rulematch{$user}{$item} = $rule;
                                       if ($inst_response eq 'ok') {
                                           if (keys(%{$inst_results}) == 0) {
                                               if ($userstatus eq 'new') {
                                                   $$alerts{$user}{$item} = 1;
                                               }
                                           }
                                       }  
                                 }                                  }
                             }                              }
                               last;
                           }
                       }
                   }
               }
           }
       }
       return;
   }
   
   sub user_rule_formats {
       my ($domain,$domdesc,$curr_rules,$check) = @_;
       my %text = ( 
                    'username' => 'Usernames',
                    'id'       => 'IDs',
                  );
       my $output;
       my ($rules,$ruleorder) = &Apache::lonnet::inst_userrules($domain,$check);
       if ((ref($rules) eq 'HASH') && (ref($ruleorder) eq 'ARRAY')) {
           if (@{$ruleorder} > 0) {
               $output = '<br />'.&mt("$text{$check} with the following format(s) may <span class=\"LC_cusr_emph\">only</span> be used for verified users at [_1]:",$domdesc).' <ul>';
               foreach my $rule (@{$ruleorder}) {
                   if (ref($curr_rules) eq 'ARRAY') {
                       if (grep(/^\Q$rule\E$/,@{$curr_rules})) {
                           if (ref($rules->{$rule}) eq 'HASH') {
                               $output .= '<li>'.$rules->{$rule}{'name'}.': '.
                                           $rules->{$rule}{'desc'}.'</li>';
                         }                          }
                     }                      }
                     $response .= '</ul>';  
                 }                  }
             }              }
               $output .= '</ul>';
         }          }
     }      }
     return ($response,$rulematch,$rules,%inst_results);      return $output;
   }
   
   sub instrule_disallow_msg {
       my ($checkitem,$domdesc,$count) = @_;
       my $response;
       my %text = (
                     item   => 'username',
                     items  => 'usernames',
                     match  => 'matches',
                     do     => 'does',
                     action => 'a username',
                     one    => 'one',
                  );
       if ($count > 1) {
           $text{'item'} = 'usernames';
           $text{'match'} ='match';
           $text{'do'} = 'do';
           $text{'action'} = 'usernames',
           $text{'one'} = 'ones';
       }
       if ($checkitem eq 'id') {
           $text{'items'} = 'IDs';
           $text{'item'} = 'ID';
           $text{'action'} = 'an ID';
       }
       $response = &mt("The $text{'item'} you chose $text{'match'} the format of $text{'items'} defined for <span class=\"LC_cusr_emph\">[_1]</span>, but the $text{'item'} $text{'do'} not exist in the institutional directory.",$domdesc).'<br />';
       if ($checkitem eq 'username') {
           $response .= &mt("You must choose $text{'action'} with a different format --  $text{'one'} that will not conflict with 'official' institutional $text{'items'}.");
       } elsif ($checkitem eq 'id') {
          $response .= &mt("You must either choose $text{'action'} with a different format --  $text{'one'} that will not conflict with 'official' institutional $text{'items'}, or leave this field blank.");
       }
       return $response;
 }  }
   
 =pod  =pod

Removed from v.1.611  
changed lines
  Added in v.1.612


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