Diff for /loncom/interface/lonuserutils.pm between versions 1.133 and 1.136.6.1

version 1.133, 2010/11/15 18:06:15 version 1.136.6.1, 2012/02/08 16:27:28
Line 2321  END Line 2321  END
                        'type'       => "enroll type/action",                         'type'       => "enroll type/action",
                        'email'      => "e-mail address",                         'email'      => "e-mail address",
                        'photo'      => "photo",                         'photo'      => "photo",
                          'lastlogin'  => "last login"
                        'extent'     => "extent",                         'extent'     => "extent",
                        'pr'         => "Proceed",                         'pr'         => "Proceed",
                        'ca'         => "check all",                         'ca'         => "check all",
Line 2369  END Line 2370  END
             push(@cols,'groups');              push(@cols,'groups');
         }          }
         push(@cols,'email');          push(@cols,'email');
           if ($context eq 'course') {
               push(@cols,'lastlogin');
           }
     }      }
   
     my $rolefilter = $env{'form.showrole'};      my $rolefilter = $env{'form.showrole'};
Line 2593  END Line 2597  END
                                                 Future  => 'Future',                                                  Future  => 'Future',
                                                 Expired => 'Expired',                                                  Expired => 'Expired',
                                                );                                                 );
       # If this is for a single course get last course "log-in".
       my %crslogins;
       if ($context eq 'course') {
           %crslogins=&Apache::lonnet::dump('nohist_crslastlogin',$cdom,$cnum);
       }
     # Get groups, role, permanent e-mail so we can sort on them if      # Get groups, role, permanent e-mail so we can sort on them if
     # necessary.      # necessary.
     foreach my $user (keys(%{$userlist})) {      foreach my $user (keys(%{$userlist})) {
Line 2729  END Line 2738  END
         $in{'clicker'} = $clickers;           $in{'clicker'} = $clickers; 
  my $role = $in{'role'};   my $role = $in{'role'};
         $in{'role'}=&Apache::lonnet::plaintext($sdata->[$index{'role'}],$crstype);          $in{'role'}=&Apache::lonnet::plaintext($sdata->[$index{'role'}],$crstype);
         if (! defined($in{'start'}) || $in{'start'} == 0) {          unless ($mode eq 'excel') {
             $in{'start'} = &mt('none');              if (! defined($in{'start'}) || $in{'start'} == 0) {
         } else {                  $in{'start'} = &mt('none');
             $in{'start'} = &Apache::lonlocal::locallocaltime($in{'start'});              } else {
                   $in{'start'} = &Apache::lonlocal::locallocaltime($in{'start'});
               }
               if (! defined($in{'end'}) || $in{'end'} == 0) {
                   $in{'end'} = &mt('none');
               } else {
                   $in{'end'} = &Apache::lonlocal::locallocaltime($in{'end'});
               }
         }          }
         if (! defined($in{'end'}) || $in{'end'} == 0) {          if ($context eq 'course') {
             $in{'end'} = &mt('none');              my $lastlogin = $crslogins{$in{'username'}.':'.$in{'domain'}.':'.$in{'section'}.':'.$role};
         } else {              if ($lastlogin ne '') {
             $in{'end'} = &Apache::lonlocal::locallocaltime($in{'end'});                  $in{'lastlogin'} = &Apache::lonlocal::locallocaltime($lastlogin);
               }
         }          }
         if ($mode eq 'view' || $mode eq 'html' || $mode eq 'autoenroll' || $mode eq 'pickauthor') {          if ($mode eq 'view' || $mode eq 'html' || $mode eq 'autoenroll' || $mode eq 'pickauthor') {
             $r->print(&Apache::loncommon::start_data_table_row());              $r->print(&Apache::loncommon::start_data_table_row());
Line 2839  END Line 2856  END
         } elsif ($mode eq 'csv') {          } elsif ($mode eq 'csv') {
             next if (! defined($CSVfile));              next if (! defined($CSVfile));
             # no need to bother with $linkto              # no need to bother with $linkto
             if (! defined($in{'start'}) || $in{'start'} == 0) {  
                 $in{'start'} = &mt('none');  
             } else {  
                 $in{'start'} = &Apache::lonlocal::locallocaltime($in{'start'});  
             }  
             if (! defined($in{'end'}) || $in{'end'} == 0) {  
                 $in{'end'} = &mt('none');  
             } else {  
                 $in{'end'} = &Apache::lonlocal::locallocaltime($in{'end'});  
             }  
             my @line = ();              my @line = ();
             foreach my $item (@cols) {              foreach my $item (@cols) {
                 push @line,&Apache::loncommon::csv_translate($in{$item});                  push @line,&Apache::loncommon::csv_translate($in{$item});
Line 2858  END Line 2865  END
             my $col = 0;              my $col = 0;
             foreach my $item (@cols) {              foreach my $item (@cols) {
                 if ($item eq 'start' || $item eq 'end') {                  if ($item eq 'start' || $item eq 'end') {
                     if (defined($item) && $item != 0) {                      if ((defined($in{$item})) && ($in{$item} != 0)) {
                         $excel_sheet->write($row,$col++,                          $excel_sheet->write($row,$col++,
                             &Apache::lonstathelpers::calc_serial($in{item}),                              &Apache::lonstathelpers::calc_serial($in{$item}),
                                     $format->{'date'});                                      $format->{'date'});
                     } else {                      } else {
                         $excel_sheet->write($row,$col++,'none');                          $excel_sheet->write($row,$col++,'none');
Line 4000  sub upfile_drop_add { Line 4007  sub upfile_drop_add {
                             official   => 'Institutional',                              official   => 'Institutional',
                             unofficial => 'Non-institutional',                              unofficial => 'Non-institutional',
                         );                          );
         map { $cancreate{$_} = &can_create_user($domain,$context,$_); } keys(%longtypes);          my $newuserdom = $env{'request.role.domain'};
           map { $cancreate{$_} = &can_create_user($newuserdom,$context,$_); } keys(%longtypes);
         # Get new users list          # Get new users list
         foreach my $line (@userdata) {          foreach my $line (@userdata) {
             my @secs;              my @secs;
Line 4155  sub upfile_drop_add { Line 4163  sub upfile_drop_add {
                     my (%rulematch,%inst_results,%idinst_results);                      my (%rulematch,%inst_results,%idinst_results);
                     my $uhome=&Apache::lonnet::homeserver($username,$userdomain);                      my $uhome=&Apache::lonnet::homeserver($username,$userdomain);
                     if ($uhome eq 'no_host') {                      if ($uhome eq 'no_host') {
                         if ($userdomain ne $domain) {                          if ($userdomain ne $newuserdom) {
                             $r->print('<br />'.                              if ($context eq 'course') {
                                 &mt('[_1]: The domain specified ([_2]) is different to that of the course.',                                  $r->print('<br />'.
                                     '<b>'.$username.'</b>',$userdomain).'<br />'.                                            &mt('[_1]: The domain specified ([_2]) is different to that of the course.',
                                 &mt('The user does not already exist, and you may not create a new user in a different domain.'));                                            '<b>'.$username.'</b>',$userdomain).'<br />');
                               } elsif ($context eq 'author') {
                                   $r->print(&mt('[_1]: The domain specified ([_2]) is different to that of the author.',
                                           '<b>'.$username.'</b>',$userdomain).'<br />'); 
                               } else {
                                   $r->print(&mt('[_1]: The domain specified ([_2]) is different to that of your current role.',
                                           '<b>'.$username.'</b>',$userdomain).'<br />');
                               }
                               $r->print(&mt('The user does not already exist, and you may not create a new user in a different domain.'));
                             next;                              next;
                         }                          }
                         $checkid = 1;                          $checkid = 1;
                         $newuser = 1;                          $newuser = 1;
                         my $user = $username.':'.$domain;                          my $user = $username.':'.$newuserdom;
                         my $checkhash;                          my $checkhash;
                         my $checks = { 'username' => 1 };                          my $checks = { 'username' => 1 };
                         $checkhash->{$username.':'.$domain} = { 'newuser' => 1, };                          $checkhash->{$username.':'.$newuserdom} = { 'newuser' => 1, };
                         &Apache::loncommon::user_rule_check($checkhash,$checks,                          &Apache::loncommon::user_rule_check($checkhash,$checks,
                             \%alerts,\%rulematch,\%inst_results,\%curr_rules,                              \%alerts,\%rulematch,\%inst_results,\%curr_rules,
                             \%got_rules);                              \%got_rules);
                         if (ref($alerts{'username'}) eq 'HASH') {                          if (ref($alerts{'username'}) eq 'HASH') {
                             if (ref($alerts{'username'}{$domain}) eq 'HASH') {                              if (ref($alerts{'username'}{$newuserdom}) eq 'HASH') {
                                 if ($alerts{'username'}{$domain}{$username}) {                                  if ($alerts{'username'}{$newuserdom}{$username}) {
                                     $r->print('<br />'.                                      $r->print('<br />'.
                                               &mt('[_1]: matches the username format at your institution, but is not known to your directory service.','<b>'.$username.'</b>').'<br />'.                                                &mt('[_1]: matches the username format at your institution, but is not known to your directory service.','<b>'.$username.'</b>').'<br />'.
                                               &mt('Consequently, the user was not created.'));                                                &mt('Consequently, the user was not created.'));
Line 5271  sub can_modify_userinfo { Line 5287  sub can_modify_userinfo {
 }  }
   
 sub check_usertype {  sub check_usertype {
     my ($dom,$uname,$rules) = @_;      my ($dom,$uname,$rules,$curr_rules,$got_rules) = @_;
     my $usertype;      my $usertype;
     if (ref($rules) eq 'HASH') {      if ((ref($got_rules) eq 'HASH') && (ref($curr_rules) eq 'HASH')) {
         my @user_rules = keys(%{$rules});          if (!$got_rules->{$dom}) {
         if (@user_rules > 0) {              my %domconfig = &Apache::lonnet::get_dom('configuration',
             my %rule_check = &Apache::lonnet::inst_rulecheck($dom,$uname,undef,'username',\@user_rules);                                                ['usercreation'],$dom);
             if (keys(%rule_check) > 0) {              if (ref($domconfig{'usercreation'}) eq 'HASH') {
                 $usertype = 'unofficial';                  foreach my $item ('username','id') {
                 foreach my $item (keys(%rule_check)) {                      if (ref($domconfig{'usercreation'}{$item.'_rule'}) eq 'ARRAY') {
                     if ($rule_check{$item}) {                          $curr_rules->{$dom}{$item} =
                         $usertype = 'official';                                  $domconfig{'usercreation'}{$item.'_rule'};
                         last;                      }
                   }
               }
               $got_rules->{$dom} = 1;
           }
           if (ref($rules) eq 'HASH') {
               my @user_rules;
               if (ref($curr_rules->{$dom}{'username'}) eq 'ARRAY') {
                   foreach my $rule (keys(%{$rules})) {
                       if (grep(/^\Q$rule\E/,@{$curr_rules->{$dom}{'username'}})) {
                           push(@user_rules,$rule);
                       }
                   } 
               }
               if (@user_rules > 0) {
                   my %rule_check = &Apache::lonnet::inst_rulecheck($dom,$uname,undef,'username',\@user_rules);
                   if (keys(%rule_check) > 0) {
                       $usertype = 'unofficial';
                       foreach my $item (keys(%rule_check)) {
                           if ($rule_check{$item}) {
                               $usertype = 'official';
                               last;
                           }
                     }                      }
                 }                  }
             }              }

Removed from v.1.133  
changed lines
  Added in v.1.136.6.1


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