Diff for /loncom/interface/lonuserutils.pm between versions 1.212 and 1.213

version 1.212, 2022/11/23 02:55:37 version 1.213, 2022/12/01 01:28:26
Line 215  sub get_instdoms { Line 215  sub get_instdoms {
 sub restricted_dom {  sub restricted_dom {
     my ($context,$key,$udom,$uname,$role,$start,$end,$cdom,$cnum,$csec,$credits,      my ($context,$key,$udom,$uname,$role,$start,$end,$cdom,$cnum,$csec,$credits,
         $process_by,$instdoms,$got_role_approvals,$got_instdoms,$reject,$pending,          $process_by,$instdoms,$got_role_approvals,$got_instdoms,$reject,$pending,
         $notifydc) = @_;          $notifydc,$status,$unauthorized,$currqueued) = @_;
     return if ($udom eq $cdom);      return if ($udom eq $cdom);
     return unless ((ref($process_by) eq 'HASH') && (ref($instdoms) eq 'HASH') &&      return unless ((ref($process_by) eq 'HASH') && (ref($instdoms) eq 'HASH') &&
                    (ref($got_role_approvals) eq 'HASH') && (ref($got_instdoms) eq 'HASH') &&                     (ref($got_role_approvals) eq 'HASH') && (ref($got_instdoms) eq 'HASH') &&
                    (ref($reject) eq 'HASH') && (ref($pending) eq 'HASH') &&                     (ref($reject) eq 'HASH') && (ref($pending) eq 'HASH') &&
                    (ref($notifydc) eq 'HASH'));                     (ref($notifydc) eq 'HASH') && (ref($status) eq 'HASH') &&
                      (ref($unauthorized) eq 'HASH') && (ref($currqueued) eq 'HASH'));
     my (%approval,@notify,$gotdata,$skip);      my (%approval,@notify,$gotdata,$skip);
     if (ref($got_role_approvals->{$context}) eq 'HASH') {      if (ref($got_role_approvals->{$context}) eq 'HASH') {
         if ($got_role_approvals->{$context}{$udom}) {          if ($got_role_approvals->{$context}{$udom}) {
Line 255  sub restricted_dom { Line 256  sub restricted_dom {
             if (grep(/^\Q$cdom\E$/,@inst)) {              if (grep(/^\Q$cdom\E$/,@inst)) {
                 if (exists($approval{'instdom'})) {                  if (exists($approval{'instdom'})) {
                     my $rule = $approval{'instdom'};                      my $rule = $approval{'instdom'};
                     if ($rule eq 'none') {                      if (($rule eq 'none') || ($rule eq 'user') || ($rule eq 'domain')) {
                         $reject->{$key} = {                          my ($id,$currstatus,$curradj) = &get_othdomreq_status($key,$uname,$udom,$role,$cdom,$cnum,$csec);
                                             cdom  => $cdom,                          if (($currstatus ne '') && ($curradj eq $rule)) {
                                             cnum  => $cnum,                              $status->{$key}->{$uname.':'.$udom} = $currstatus;
                                             csec  => $csec,                          }
                                             udom  => $udom,                          if ($rule eq 'none') {
                                             uname => $uname,                               $reject->{$key}->{$uname.':'.$udom} = {
                                             role  => $role,                                                                       cdom  => $cdom,
                                           };                                                                       cnum  => $cnum,
                         $skip = 1;                                                                       csec  => $csec,
                     } elsif (($rule eq 'user') || ($rule eq 'domain')) {                                                                       udom  => $udom,
                         $pending->{$key} = {                                                                       uname => $uname,
                                              cdom  => $cdom,                                                                       role  => $role,
                                              cnum  => $cnum,                                                                     };
                                              csec  => $csec,                              $skip = 1;
                                              udom  => $udom,                          } elsif (($rule eq 'user') || ($rule eq 'domain')) {
                                              uname => $uname,                              if ($curradj eq $rule) {
                                              role  => $role,                                  unless ($currstatus eq 'approved') {
                                              start => $start,                                      if ($currstatus eq 'rejected') {
                                              end   => $end,                                          $unauthorized->{$key}->{$uname.':'.$udom} = {
                                              adj   => $rule,                                                                                        cdom  => $cdom,
                                            };                                                                                        cnum  => $cnum,
                         if (($role eq 'st') && ($credits ne '')) {                                                                                        csec  => $csec,
                             $pending->{$key}->{'credits'} = $credits;                                                                                        udom  => $udom,
                                                                                         uname => $uname,
                                                                                         role  => $role,
                                                                                       };
                                       } elsif ($currstatus eq 'pending') {
                                           $currqueued->{$key}->{$uname.':'.$udom} = {
                                                                                       cdom  => $cdom,
                                                                                       cnum  => $cnum,
                                                                                       csec  => $csec,
                                                                                       udom  => $udom,
                                                                                       uname => $uname,
                                                                                       role  => $role,
                                                                                       adj   => $rule,
                                                                          };
                                       }
                                       $skip = 1;
                                   }
                               } else {
                                   $pending->{$key}->{$uname.':'.$udom} = {
                                                                            cdom  => $cdom,
                                                                            cnum  => $cnum,
                                                                            csec  => $csec,
                                                                            udom  => $udom,
                                                                            uname => $uname,
                                                                            role  => $role,
                                                                            start => $start,
                                                                            end   => $end,
                                                                            adj   => $rule,
                                                                          };
                                   if (($role eq 'st') && ($credits ne '')) {
                                       $pending->{$key}->{$uname.':'.$udom}->{'credits'} = $credits;
                                   }
                                   $skip = 1;
                               }
                         }                          }
                         $skip = 1;  
                     }                      }
                 }                  }
             } elsif (exists($approval{'extdom'})) {              } elsif (exists($approval{'extdom'})) {
                 my $rule = $approval{'extdom'};                  my $rule = $approval{'extdom'};
                 if ($rule eq 'none') {                  if (($rule eq 'none') || ($rule eq 'user') || ($rule eq 'domain')) {
                     $reject->{$key} = {                      my ($id,$currstatus,$curradj) = &get_othdomreq_status($key,$uname,$udom,$role,$cdom,$cnum,$csec);
                                         cdom  => $cdom,                      if (($currstatus ne '') && ($curradj eq $rule)) {
                                         cnum  => $cnum,                          $status->{$key}->{$uname.':'.$udom} = $currstatus;
                                         csec  => $csec,                      }
                                         udom  => $udom,                      if ($rule eq 'none') {
                                         uname => $uname,                          $reject->{$key}->{$uname.':'.$udom} = {
                                         role  => $role,                                                                  cdom  => $cdom,
                                       };                                                                  cnum  => $cnum,
                     $skip = 1;                                                                  csec  => $csec,
                 } elsif (($rule eq 'user') || ($rule eq 'domain')) {                                                                  udom  => $udom,
                     $pending->{$key} = {                                                                  uname => $uname,
                                          cdom  => $cdom,                                                                  role  => $role,
                                          cnum  => $cnum,                                                                };
                                          csec  => $csec,                          $skip = 1;
                                          udom  => $udom,                      } elsif (($rule eq 'user') || ($rule eq 'domain')) {
                                          uname => $uname,                          if ($curradj eq $rule) {
                                          role  => $role,                              unless ($currstatus eq 'approved') {
                                          start => $start,                                  if ($currstatus eq 'rejected') {
                                          end   => $end,                                      $unauthorized->{$key}->{$uname.':'.$udom} = {
                                          adj   => $rule,                                                                                    cdom  => $cdom,
                                        };                                                                                    cnum  => $cnum,
                     if (($role eq 'st') && ($credits ne '')) {                                                                                    csec  => $csec,
                         $pending->{$key}->{'credits'} = $credits;                                                                                    udom  => $udom,
                                                                                     uname => $uname,
                                                                                     role  => $role,
                                                                                   };
                                   } elsif ($currstatus eq 'pending') {
                                       $currqueued->{$key}->{$uname.':'.$udom} = {
                                                                                   cdom  => $cdom,
                                                                                   cnum  => $cnum,
                                                                                   csec  => $csec,
                                                                                   udom  => $udom,
                                                                                   uname => $uname,
                                                                                   role  => $role,
                                                                                   adj   => $rule,
                                                                          };
                                   }
                                   $skip = 1;
                               }
                           } else {
                               $pending->{$key}->{$uname.':'.$udom} = {
                                                                        cdom  => $cdom,
                                                                        cnum  => $cnum,
                                                                        csec  => $csec,
                                                                        udom  => $udom,
                                                                        uname => $uname,
                                                                        role  => $role,
                                                                        start => $start,
                                                                        end   => $end,
                                                                        adj   => $rule,
                                                                      };
                               if (($role eq 'st') && ($credits ne '')) {
                                   $pending->{$key}->{$uname.':'.$udom}->{'credits'} = $credits;
                               }
                               $skip = 1;
                           }
                     }                      }
                     $skip = 1;  
                 }                  }
             }              }
         }          }
Line 318  sub restricted_dom { Line 383  sub restricted_dom {
     return $skip;      return $skip;
 }  }
   
   sub get_othdomreq_status {
       my ($key,$uname,$udom,$role,$cdom,$cnum,$csec) = @_;
       my $id = $uname.':'.$udom.':'.$role; 
       my ($dbnum,$currstatus,$curradj);
       if (($role eq 'ca') || ($role eq 'aa')) {
           $dbnum = $cnum;
       } elsif ($key eq $cdom.'_'.$role) {
           $dbnum = &Apache::lonnet::get_domainconfiguser($cdom);
       } else {
           $id .= ':'.$csec;
           $dbnum = $cnum;
       }
       my $statusid = 'status&'.$id;
       my %curr = &Apache::lonnet::get('nohist_othdomqueued',[$id,$statusid],$cdom,$dbnum);
       if (ref($curr{$id}) eq 'HASH') {
           $curradj = $curr{$id}{'adj'};
       }
       $currstatus = $curr{$statusid};
       return ($id,$currstatus,$curradj);
   }
   
 sub print_roles_rejected {  sub print_roles_rejected {
     my ($context,$reject) = @_;      my ($context,$reject,$unauthorized) = @_;
     return unless (ref($reject) eq 'HASH');      return unless ((ref($reject) eq 'HASH') || (ref($unauthorized) eq 'HASH'));
     my $output;      my $output;
     if (keys(%{$reject}) > 0) {      if (keys(%{$reject}) > 0) {
         $output = '<p class="LC_warning">'.          $output = '<p class="LC_warning">'.
                   &mt("The following roles could not be assigned because the user is from another domain, and that domain's policies disallow it").'<ul>';                    &mt("The following roles could not be assigned because the user is from another domain, and that domain's policies disallow it").'<ul>';
         foreach my $key (sort(keys(%{$reject}))) {          foreach my $key (sort(keys(%{$reject}))) {
             if (ref($reject->{$key}) eq 'HASH') {              if (ref($reject->{$key}) eq 'HASH') {
                 my ($crstype,$role,$cdom,$cnum,$title);                  foreach my $user (sort(keys(%{$reject->{$key}}))) {
                 $role = $reject->{$key}{'role'};                      if (ref($reject->{$key}->{$user}) eq 'HASH') {
                 $cdom = $reject->{$key}{'cdom'};                          my ($crstype,$role,$cdom,$cnum,$csec,$title,$plainrole);
                 $cnum = $reject->{$key}{'cnum'};                          $role = $reject->{$key}->{$user}{'role'};
                 if ($context eq 'domain') {                          $cdom = $reject->{$key}->{$user}{'cdom'};
                     if (&Apache::lonnet::is_course($cdom,$cnum)) {                          $cnum = $reject->{$key}->{$user}{'cnum'};
                         my %coursedata = &Apache::lonnet::coursedescription($cdom.'_'.$cnum);                          $csec = $reject->{$key}->{$user}{'csec'};
                         $crstype = $coursedata{'type'};                          if (($context eq 'domain') && ($cnum ne '')) {
                         $title = $coursedata{'description'};                              if (($role eq 'ca') || ($role eq 'aa')) {
                     } elsif (($role eq 'ca') || ($role eq 'aa')) {                                  $title = &Apache::loncommon::plainname($cnum,$cdom);
                         $title = &Apache::loncommon::plainname($cnum,$cdom);                              } else {
                     }                                  if (&Apache::lonnet::is_course($cdom,$cnum)) {
                 } elsif ($context eq 'course') {                                      my %coursedata = &Apache::lonnet::coursedescription($cdom.'_'.$cnum);
                     $crstype = &Apache::loncommon::course_type();                                      $crstype = $coursedata{'type'};
                 }                                      $title = $coursedata{'description'};
                 my $plainrole = &Apache::lonnet::plaintext($reject->{$key}{'role'},$crstype);                                  }
                 $output .= '<li>'.&mt('User: [_1]',$reject->{$key}{'uname'}).' | '.                              }
                                   &mt('Domain: [_1]',$reject->{$key}{'udom'}).' | '.                          } elsif ($context eq 'course') {
                                   &mt('Role: [_1]',$plainrole);                              $crstype = &Apache::loncommon::course_type();
                 if ($crstype) {                          }
                     $output .= ' | '.&mt('Section: [_1]',$reject->{$key}{'csec'});                          my $plainrole = &Apache::lonnet::plaintext($role,$crstype);
                 } elsif (($context eq 'domain') && (($role eq 'ca') || ($role eq 'aa'))) {                          $output .= '<li>'.&mt('User: [_1]',$reject->{$key}->{$user}{'uname'}).' | '.
                     $output .= ' | '.&mt('Authoring Space belonging to: [_1]',$title);                                            &mt('Domain: [_1]',$reject->{$key}->{$user}{'udom'}).' | '.
                 }                                            &mt('Role: [_1]',$plainrole);
                 if (($context eq 'domain') && ($crstype)) {                          if ($crstype) {
                     $output .= ' | '.&mt("$crstype: [_1]",$title);                              if ($csec ne'') {
                                   $output .= ' | '.&mt('Section: [_1]',$csec);
                               }
                           } elsif (($context eq 'domain') && (($role eq 'ca') || ($role eq 'aa'))) {
                               $output .= ' | '.&mt('Authoring Space belonging to: [_1]',$title);
                                                   
                           }
                           if (($context eq 'domain') && ($crstype)) {
                               $output .= ' | '.&mt("$crstype: [_1]",$title);
                           }
                           $output .= '</li>';
                       }
                 }                  }
                 $output .= '</li>';  
             }              }
         }          }
         $output .= '</ul></p>';          $output .= '</ul></p>';
     }      }
       if (keys(%{$unauthorized}) > 0) {
           $output = '<p class="LC_warning">'.
                     &mt("The following roles could not be assigned because the user is from another domain, and that domain's policies require approval by the user themselves or by a domain coordinator in that domain, and approval has been withheld.").'<ul>';
           foreach my $key (sort(keys(%{$unauthorized}))) {
               if (ref($unauthorized->{$key}) eq 'HASH') {
                   foreach my $user (sort(keys(%{$unauthorized->{$key}}))) {
                       if (ref($unauthorized->{$key}->{$user}) eq 'HASH') {
                           my ($crstype,$role,$cdom,$cnum,$csec,$title,$plainrole);
                           $role = $unauthorized->{$key}->{$user}{'role'};
                           $cdom = $unauthorized->{$key}->{$user}{'cdom'};
                           $cnum = $unauthorized->{$key}->{$user}{'cnum'};
                           $csec = $unauthorized->{$key}->{$user}{'csec'};
                           if (($context eq 'domain') && ($cnum ne '')) {
                               if (($role eq 'ca') || ($role eq 'aa')) {
                                   $title = &mt('Authoring Space belonging to: [_1]',
                                                &Apache::loncommon::plainname($cnum,$cdom));
                               } else {
                                   if (&Apache::lonnet::is_course($cdom,$cnum)) {
                                       my %coursedata = &Apache::lonnet::coursedescription($cdom.'_'.$cnum);
                                       $crstype = $coursedata{'type'};
                                       $title = &mt("$crstype: [_1]",$coursedata{'description'});
                                   }
                               }
                           } elsif ($context eq 'course') {
                               $crstype = &Apache::loncommon::course_type();
                           }
                           $plainrole = &Apache::lonnet::plaintext($role,$crstype);
                           $output .= '<li>'.&mt('User: [_1]',$unauthorized->{$key}->{$user}{'uname'}).' | '.
                                             &mt('Domain: [_1]',$unauthorized->{$key}->{$user}{'udom'}).' | '.
                                             &mt('Role: [_1]',$plainrole);
                           if ($crstype) {
                               if ($csec ne'') {
                                   $output .= ' | '.&mt('Section: [_1]',$csec);
                               }
                           }
                           if ($title ne '') {
                               $output .= ' | '.$title;
                           }
                           $output .= '</li>';
                       }
                   }
               }
           }
           $output .= '</ul></p>'; 
       }
     return $output;      return $output;
 }  }
   
 sub print_roles_queued {  sub print_roles_queued {
     my ($context,$pending,$notifydc) = @_;      my ($context,$pending,$notifydc,$currqueued) = @_;
     return unless ((ref($pending) eq 'HASH') && (ref($notifydc) eq 'HASH'));      return unless ((ref($pending) eq 'HASH') && (ref($notifydc) eq 'HASH') &&
                      (ref($currqueued) eq 'HASH'));
     my $output;      my $output;
     if (keys(%{$pending}) > 0) {      if (keys(%{$pending}) > 0) {
         my $now = time;          my $now = time;
Line 374  sub print_roles_queued { Line 516  sub print_roles_queued {
         my $requester = $env{'user.name'}.':'.$env{'user.domain'};          my $requester = $env{'user.name'}.':'.$env{'user.domain'};
         foreach my $key (sort(keys(%{$pending}))) {          foreach my $key (sort(keys(%{$pending}))) {
             if (ref($pending->{$key}) eq 'HASH') {              if (ref($pending->{$key}) eq 'HASH') {
                 my $role = $pending->{$key}{'role'};                  foreach my $user (sort(keys(%{$pending->{$key}}))) {
                 my $uname = $pending->{$key}{'uname'};                      if (ref($pending->{$key}->{$user}) eq 'HASH') {
                 my $udom = $pending->{$key}{'udom'};                          my $role = $pending->{$key}->{$user}{'role'};
                 my $csec = $pending->{$key}{'csec'};                          my $uname = $pending->{$key}->{$user}{'uname'};
                 my $cdom = $pending->{$key}{'cdom'};                          my $udom = $pending->{$key}->{$user}{'udom'};
                 my $cnum = $pending->{$key}{'cnum'};                          my $csec = $pending->{$key}->{$user}{'csec'};
                 my $adj = $pending->{$key}{'adj'};                          my $cdom = $pending->{$key}->{$user}{'cdom'};
                 my $start = $pending->{$key}{'start'};                          my $cnum = $pending->{$key}->{$user}{'cnum'};
                 my $end = $pending->{$key}{'end'};                          my $adj = $pending->{$key}->{$user}{'adj'};
                 my $credits = $pending->{$key}{'credits'};                          my $start = $pending->{$key}->{$user}{'start'};
                 my $now = time;                          my $end = $pending->{$key}->{$user}{'end'};
                 my ($crstype,$title);                          my $credits = $pending->{$key}->{$user}{'credits'};
                 if ($context eq 'course') {                          my $now = time;
                     $crstype = &Apache::loncommon::course_type();                          my ($crstype,$title,$plainrole,$extent,$id,$status);
                 } elsif ($context eq 'domain') {                          if ($context eq 'course') {
                     if (&Apache::lonnet::is_course($cdom,$cnum)) {                              $crstype = &Apache::loncommon::course_type();
                         my %coursedata = &Apache::lonnet::coursedescription($cdom.'_'.$cnum);                              $title = $env{'course.'.$env{'request.course.id'}.'.description'};
                         $crstype = $coursedata{'type'};                          } elsif ($context eq 'domain') {
                         $title = $coursedata{'description'};                              if (&Apache::lonnet::is_course($cdom,$cnum)) {
                     } elsif (($role eq 'ca') || ($role eq 'aa')) {                                  my %coursedata = &Apache::lonnet::coursedescription($cdom.'_'.$cnum);
                         $title = &Apache::loncommon::plainname($cnum,$cdom);                                  $crstype = $coursedata{'type'};
                     }                                  $title = $coursedata{'description'};
                 }                              } elsif (($role eq 'ca') || ($role eq 'aa')) {
                 my $plainrole = &Apache::lonnet::plaintext($role,$crstype);                                  $title = &Apache::loncommon::plainname($cnum,$cdom);
                 my $extent = "/$cdom/$cnum";                              }
                 $output .= '<li>'.&mt('User: [_1]',$uname).' | '.                          }
                                   &mt('Domain: [_1]',$udom).' | '.                          $plainrole = &Apache::lonnet::plaintext($role,$crstype);
                                   &mt('Role: [_1]',$plainrole).' | ';                          $extent = "/$cdom/$cnum";
                 if ($crstype) {                          $id = $uname.':'.$udom.':'.$role;
                     if ($csec ne '') {                          if (($context eq 'course') || ($crstype)) {
                         $output .= &mt('Section: [_1]',$csec).' | ';                              $id .= ':'.$csec;
                         $extent .= "/$csec";                          }
                     }                          $output .= '<li>'.&mt('User: [_1]',$uname).' | '.
                 }                                            &mt('Domain: [_1]',$udom).' | '.
                 if ($adj eq 'user') {                                            &mt('Role: [_1]',$plainrole);
                     $output .= '<br />'.&mt('Message sent to user for approval');                          if ($crstype) {
                     $touser{$uname.':'.$udom}{$extent.':'.$role} = {                              if ($csec ne'') {
                                                                      timestamp => $now,                                  $output .= ' | '.&mt('Section: [_1]',$csec);
                                                                      requester => $requester,                              }
                                                                      start     => $start,                          } elsif (($context eq 'domain') && (($role eq 'ca') || ($role eq 'aa'))) {
                                                                      end       => $end,                              $output .= ' | '.&mt('Authoring Space belonging to: [_1]',$title);
                                                                      credits   => $credits,                          }
                                                                      context   => $context,                          if (($context eq 'domain') && ($crstype)) {
                                                                    };                              $output .= ' | '.&mt("$crstype: [_1]",$title);
                 } elsif ($adj eq 'domain') {                          }
                     $output .= '<br />'.&mt("Message sent to user's domain coordinator for approval");                          if (($crstype) && ($csec ne '')) {
                     $todom{$udom}{$uname.':'.$extent.':'.$role} = {                              $extent .= "/$csec";
                                                                     timestamp => $now,                          }
                                                                     requester => $requester,                          if ($adj eq 'user') {
                                                                     start     => $start,                              $output .= '<br />'.&mt('Message sent to user for approval');
                                                                     end       => $end,                              $touser{$uname.':'.$udom}{'pending:'.$extent.':'.$role} = {
                                                                     credits   => $credits,                                                                                          timestamp => $now,
                                                                     context   => $context,                                                                                          requester => $requester,
                                                                   };                                                                                          start     => $start,
                 }                                                                                          end       => $end,
                 $output .= '</li>';                                                                                          credits   => $credits,
                 my $id = $uname.':'.$udom.':'.$role;                                                                                          context   => $context,
                 if (($context eq 'course') || ($crstype)) {                                                                                        };
                     $id .= ':'.$csec;                          } elsif ($adj eq 'domain') {
                     $crsqueue{$cdom.'_'.$cnum}{$id} = {                              $output .= '<br />'.&mt("Message sent to user's domain coordinator for approval");
                                                         timestamp => $now,                              $todom{$udom}{'pending:'.$uname.':'.$extent.':'.$role} = {
                                                         requester => $requester,                                                                                         timestamp => $now,
                                                         adj       => $adj,                                                                                         requester => $requester,
                                                       };                                                                                         start     => $start,
                 } elsif (($context eq 'author') ||                                                                                         end       => $end,
                          (($context eq 'domain') && (($role eq 'ca') || ($role eq 'aa')))) {                                                                                         credits   => $credits,
                     $caqueue{$cnum.':'.$cdom}{$id} = {                                                                                         context   => $context,
                                                         timestamp => $now,                                                                                       };
                                                         requester => $requester,                          }
                                                         adj       => $adj,                          $output .= '</li>';
                                                       };                          if (($context eq 'course') || ($crstype)) {
                 } elsif ($context eq 'domain') {                              $crsqueue{$cdom.'_'.$cnum}{$id} = {
                     $domqueue{$id} = {                                                                  timestamp => $now,
                                         timestamp => $now,                                                                  requester => $requester,
                                         requester => $requester,                                                                  adj       => $adj,
                                         adj       => $adj,                                                                };
                                      };                              $crsqueue{$cdom.'_'.$cnum}{'status&'.$id} = 'pending';
                           } elsif (($context eq 'author') ||
                                    (($context eq 'domain') && (($role eq 'ca') || ($role eq 'aa')))) {
                               $caqueue{$cnum.':'.$cdom}{$id} = {
                                                                  timestamp => $now,
                                                                  requester => $requester,
                                                                  adj       => $adj,
                                                                };
                               $caqueue{$cnum.':'.$cdom}{'status&'.$id} = 'pending';
                           } elsif ($context eq 'domain') {
                               $domqueue{$id} = {
                                                  timestamp => $now,
                                                  requester => $requester,
                                                  adj       => $adj,
                                                };
                               $domqueue{'status&'.$id} = 'pending';
                           }
                       }
                 }                  }
             }              }
         }          }
Line 458  sub print_roles_queued { Line 617  sub print_roles_queued {
         if (keys(%touser)) {          if (keys(%touser)) {
             foreach my $key (keys(%touser)) {              foreach my $key (keys(%touser)) {
                 my ($uname,$udom) = split(/:/,$touser{$key});                  my ($uname,$udom) = split(/:/,$touser{$key});
                 if (&Apache::lonnet::put('queuedrolereqs',$touser{$key},$udom,$uname) eq 'ok') {                  if (&Apache::lonnet::put('nohist_queuedrolereqs',$touser{$key},$udom,$uname) eq 'ok') {
                     my $owndomdesc = &Apache::lonnet::domain($udom);                      my $owndomdesc = &Apache::lonnet::domain($udom);
                     &Apache::loncoursequeueadmin::send_selfserve_notification($uname.':'.$udom,                      &Apache::loncoursequeueadmin::send_selfserve_notification($uname.':'.$udom,
                         '','',$owndomdesc,$now,'othdomroleuser',$requester);                          '','',$owndomdesc,$now,'othdomroleuser',$requester);
Line 469  sub print_roles_queued { Line 628  sub print_roles_queued {
             foreach my $dom (keys(%todom)) {              foreach my $dom (keys(%todom)) {
                 if (ref($todom{$dom}) eq 'HASH') {                  if (ref($todom{$dom}) eq 'HASH') {
                     my $confname = &Apache::lonnet::get_domainconfiguser($dom);                      my $confname = &Apache::lonnet::get_domainconfiguser($dom);
                     if (&Apache::lonnet::put('queuedrolereqs',$todom{$dom},$dom,$confname) eq 'ok') {                      if (&Apache::lonnet::put('nohist_queuedrolereqs',$todom{$dom},$dom,$confname) eq 'ok') {
                         if (ref($notifydc->{$dom}) eq 'ARRAY') {                          if (ref($notifydc->{$dom}) eq 'ARRAY') {
                             if (@{$notifydc->{$dom}} > 0) {                              if (@{$notifydc->{$dom}} > 0) {
                                 my $notifylist = join(',',@{$notifydc->{$dom}});                                  my $notifylist = join(',',@{$notifydc->{$dom}});
Line 485  sub print_roles_queued { Line 644  sub print_roles_queued {
             foreach my $key (keys(%crsqueue)) {              foreach my $key (keys(%crsqueue)) {
                 my ($cdom,$cnum) = split(/_/,$key);                  my ($cdom,$cnum) = split(/_/,$key);
                 if (ref($crsqueue{$key}) eq 'HASH') {                  if (ref($crsqueue{$key}) eq 'HASH') {
                     &Apache::lonnet::put('othdomqueued',$crsqueue{$key},$cdom,$cnum);                      &Apache::lonnet::put('nohist_othdomqueued',$crsqueue{$key},$cdom,$cnum);
                 }                  }
             }              }
         }          }
Line 493  sub print_roles_queued { Line 652  sub print_roles_queued {
             foreach my $key (keys(%caqueue)) {              foreach my $key (keys(%caqueue)) {
                 my ($auname,$audom) = split(/:/,$key);                  my ($auname,$audom) = split(/:/,$key);
                 if (ref($caqueue{$key}) eq 'HASH') {                  if (ref($caqueue{$key}) eq 'HASH') {
                     &Apache::lonnet::put('othdomqueued',$caqueue{$key},$audom,$auname);                      &Apache::lonnet::put('nohist_othdomqueued',$caqueue{$key},$audom,$auname);
                 }                  }
             }              }
         }          }
         if (keys(%domqueue)) {          if (keys(%domqueue)) {
             my $confname = &Apache::lonnet::get_domainconfiguser($env{'request.role.domain'});              my $confname = &Apache::lonnet::get_domainconfiguser($env{'request.role.domain'});
             &Apache::lonnet::put('othdomqueued',\%domqueue,$env{'request.role.domain'},$confname);              &Apache::lonnet::put('nohist_othdomqueued',\%domqueue,$env{'request.role.domain'},$confname);
         }          }
     }      }
       if (keys(%{$currqueued}) > 0) {
           $output = '<p class="LC_warning">'.
                     &mt("The following role assignments were already queued because the user is from another domain, and that domain's policies require approval by the user themselves or by a domain coordinator in that domain").'<ul>';
           my $requester = $env{'user.name'}.':'.$env{'user.domain'};
           foreach my $key (sort(keys(%{$currqueued}))) {
               if (ref($currqueued->{$key}) eq 'HASH') {
                   foreach my $user (sort(keys(%{$currqueued->{$key}}))) {
                       if (ref($currqueued->{$key}->{$user}) eq 'HASH') {
                           my $role = $currqueued->{$key}->{$user}{'role'};
                           my $csec = $currqueued->{$key}->{$user}{'csec'};
                           my $cdom = $currqueued->{$key}->{$user}{'cdom'};
                           my $cnum = $currqueued->{$key}->{$user}{'cnum'};
                           my ($crstype,$title,$plainrole);
                           if ($context eq 'course') {
                               $crstype = &Apache::loncommon::course_type();
                           } elsif (($context eq 'domain') && ($cnum ne '')) {
                               if (($role eq 'ca') || ($role eq 'aa')) {
                                   $title = &mt('Authoring Space belonging to: [_1]',
                                                &Apache::loncommon::plainname($cnum,$cdom));
                               } elsif (&Apache::lonnet::is_course($cdom,$cnum)) {
                                   my %coursedata = &Apache::lonnet::coursedescription($cdom.'_'.$cnum);
                                   $crstype = $coursedata{'type'};
                                   $title = &mt("$crstype: [_1]",$coursedata{'description'});
                               }
                           }
                           $plainrole = &Apache::lonnet::plaintext($role,$crstype);
                           $output .= '<li>'.&mt('User: [_1]',$currqueued->{$key}->{$user}{'uname'}).' | '.
                                             &mt('Domain: [_1]',$currqueued->{$key}->{$user}{'udom'}).' | '.
                                             &mt('Role: [_1]',$plainrole);
                           if ($title ne '') {
                               $output .= ' | '.$title;
                           }
                           if ($crstype) {
                               if ($csec ne '') {
                                   $output .= ' | '.&mt('Section: [_1]',$csec);
                               }
                           }
                           $output .= '</li>';
                       }
                   }
               }
           }
           $output .= '</ul></p>';
       }
     return $output;      return $output;
 }  }
   
Line 4720  sub upfile_drop_add { Line 4923  sub upfile_drop_add {
         }          }
         $r->rflush;          $r->rflush;
         my (%got_role_approvals,%got_instdoms,%process_by,%instdoms,          my (%got_role_approvals,%got_instdoms,%process_by,%instdoms,
             %pending,%reject,%notifydc);              %pending,%reject,%notifydc,%status,%unauthorized,%currqueued);
   
         my %counts = (          my %counts = (
                        user => 0,                         user => 0,
Line 5262  sub upfile_drop_add { Line 5465  sub upfile_drop_add {
                             next if (&restricted_dom($context,$item,$userdomain,$username,$role,$startdate,                              next if (&restricted_dom($context,$item,$userdomain,$username,$role,$startdate,
                                                      $enddate,$crsdom,$crsnum,$sec,$credits,\%process_by,                                                       $enddate,$crsdom,$crsnum,$sec,$credits,\%process_by,
                                                      \%instdoms,\%got_role_approvals,\%got_instdoms,\%reject,                                                       \%instdoms,\%got_role_approvals,\%got_instdoms,\%reject,
                                                      \%pending,\%notifydc));                                                       \%pending,\%notifydc,\%status,\%unauthorized,\%currqueued));
                         }                          }
                         &modifystudent($userdomain,$username,$cid,$sec,                          &modifystudent($userdomain,$username,$cid,$sec,
                                        $desiredhost,$context);                                         $desiredhost,$context);
Line 5300  sub upfile_drop_add { Line 5503  sub upfile_drop_add {
                                                 next if (&restricted_dom($context,$item,$userdomain,$username,$possrole,                                                  next if (&restricted_dom($context,$item,$userdomain,$username,$possrole,
                                                                          $startdate,$enddate,$crsdom,$crsnum,$sec,                                                                           $startdate,$enddate,$crsdom,$crsnum,$sec,
                                                                          $credits,\%process_by,\%instdoms,\%got_role_approvals,                                                                           $credits,\%process_by,\%instdoms,\%got_role_approvals,
                                                                          \%got_instdoms,\%reject,\%pending,\%notifydc));                                                                           \%got_instdoms,\%reject,\%pending,\%notifydc,
                                                                            \%status,\%unauthorized,\%currqueued));
                                             }                                              }
                                             ($userres{$sec},$authres{$sec},$roleres{$sec},$idres{$sec}) =                                              ($userres{$sec},$authres{$sec},$roleres{$sec},$idres{$sec}) =
                                             &modifyuserrole($context,$setting,                                              &modifyuserrole($context,$setting,
Line 5328  sub upfile_drop_add { Line 5532  sub upfile_drop_add {
                                 $item .= '_'.$possrole;                                  $item .= '_'.$possrole;
                                 next if (&restricted_dom($context,$item,$userdomain,$username,$possrole,$startdate,$enddate,                                  next if (&restricted_dom($context,$item,$userdomain,$username,$possrole,$startdate,$enddate,
                                                          $crsdom,$crsnum,$singlesec,$credits,\%process_by,\%instdoms,                                                           $crsdom,$crsnum,$singlesec,$credits,\%process_by,\%instdoms,
                                                          \%got_role_approvals,\%got_instdoms,\%reject,\%pending,\%notifydc));                                                           \%got_role_approvals,\%got_instdoms,\%reject,\%pending,\%notifydc,
                                                            \%status,\%unauthorized,\%currqueued));
                             }                              }
                             ($userresult,$authresult,$roleresult,$idresult) =                               ($userresult,$authresult,$roleresult,$idresult) = 
                                 &modifyuserrole($context,$setting,                                  &modifyuserrole($context,$setting,
Line 5379  sub upfile_drop_add { Line 5584  sub upfile_drop_add {
         }          }
         $r->print(&print_namespacing_alerts($domain,\%alerts,\%curr_rules));          $r->print(&print_namespacing_alerts($domain,\%alerts,\%curr_rules));
         $r->print(&passwdrule_alerts($domain,\%showpasswdrules));          $r->print(&passwdrule_alerts($domain,\%showpasswdrules));
         if (keys(%reject)) {          if ((keys(%reject)) || (keys(%unauthorized))) {
             $r->print(&print_roles_rejected($context,\%reject));              $r->print(&print_roles_rejected($context,\%reject,\%unauthorized));
         }          }
         if (keys(%pending)) {          if ((keys(%pending)) || (keys(%currqueued))) {
             $r->print(&print_roles_queued($context,\%pending,\%notifydc));              $r->print(&print_roles_queued($context,\%pending,\%notifydc,\%currqueued));
         }          }
         #####################################          #####################################
         # Display list of students to drop  #          # Display list of students to drop  #
Line 5579  sub update_user_list { Line 5784  sub update_user_list {
         $crstype = &Apache::loncommon::course_type();          $crstype = &Apache::loncommon::course_type();
     }      }
     my (@changelist,%got_role_approvals,%got_instdoms,%process_by,%instdoms,      my (@changelist,%got_role_approvals,%got_instdoms,%process_by,%instdoms,
         %pending,%reject,%notifydc);          %pending,%reject,%notifydc,%status,%unauthorized,%currqueued);
     if ($choice eq 'drop') {      if ($choice eq 'drop') {
         @changelist = &Apache::loncommon::get_env_multiple('form.droplist');          @changelist = &Apache::loncommon::get_env_multiple('form.droplist');
     } else {      } else {
Line 5697  sub update_user_list { Line 5902  sub update_user_list {
             if ($choice eq 'reenable') {              if ($choice eq 'reenable') {
                 next if (&restricted_dom($context,$id,$udom,$uname,$role,$now,$end,$cdom,$cnum,                  next if (&restricted_dom($context,$id,$udom,$uname,$role,$now,$end,$cdom,$cnum,
                                          $sec,$credits,\%process_by,\%instdoms,\%got_role_approvals,                                           $sec,$credits,\%process_by,\%instdoms,\%got_role_approvals,
                                          \%got_instdoms,\%reject,\%pending,\%notifydc));                                           \%got_instdoms,\%reject,\%pending,\%notifydc,
                                            \%status,\%unauthorized,\%currqueued));
                 if ($role eq 'st') {                  if ($role eq 'st') {
                     $result = &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$sec,$end,$start,$type,$locktype,$cid,'',$context,$credits,$instsec);                      $result = &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$sec,$end,$start,$type,$locktype,$cid,'',$context,$credits,$instsec);
                 } else {                  } else {
Line 5708  sub update_user_list { Line 5914  sub update_user_list {
             } elsif ($choice eq 'activate') {              } elsif ($choice eq 'activate') {
                 next if (&restricted_dom($context,$id,$udom,$uname,$role,$now,$end,$cdom,$cnum,                  next if (&restricted_dom($context,$id,$udom,$uname,$role,$now,$end,$cdom,$cnum,
                                          $sec,$credits,\%process_by,\%instdoms,\%got_role_approvals,                                           $sec,$credits,\%process_by,\%instdoms,\%got_role_approvals,
                                          \%got_instdoms,\%reject,\%pending,\%notifydc));                                           \%got_instdoms,\%reject,\%pending,\%notifydc,
                                            \%status,\%unauthorized,\%currqueued));
                 if ($role eq 'st') {                  if ($role eq 'st') {
                     $result = &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$sec,$end,$start,$type,$locktype,$cid,'',$context,$credits,$instsec);                      $result = &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$sec,$end,$start,$type,$locktype,$cid,'',$context,$credits,$instsec);
                 } else {                  } else {
Line 5718  sub update_user_list { Line 5925  sub update_user_list {
             } elsif ($choice eq 'chgdates') {              } elsif ($choice eq 'chgdates') {
                 next if (&restricted_dom($context,$id,$udom,$uname,$role,$start,$end,$cdom,$cnum,                  next if (&restricted_dom($context,$id,$udom,$uname,$role,$start,$end,$cdom,$cnum,
                                          $sec,$credits,\%process_by,\%instdoms,\%got_role_approvals,                                           $sec,$credits,\%process_by,\%instdoms,\%got_role_approvals,
                                          \%got_instdoms,\%reject,\%pending,\%notifydc));                                           \%got_instdoms,\%reject,\%pending,\%notifydc,
                                            \%status,\%unauthorized,\%currqueued));
                 if ($role eq 'st') {                  if ($role eq 'st') {
                     $result = &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$sec,$end,$start,$type,$locktype,$cid,'',$context,$credits,$instsec);                      $result = &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$sec,$end,$start,$type,$locktype,$cid,'',$context,$credits,$instsec);
                 } else {                  } else {
Line 5928  sub update_user_list { Line 6136  sub update_user_list {
             $r->print(&make_dates_default($startdate,$enddate,$context,$crstype));              $r->print(&make_dates_default($startdate,$enddate,$context,$crstype));
         }          }
     }      }
     if (keys(%reject)) {      if ((keys(%reject)) || (keys(%unauthorized))) {
         $r->print(&print_roles_rejected($context,\%reject));          $r->print(&print_roles_rejected($context,\%reject,\%unauthorized));
     }      }
     if (keys(%pending)) {      if ((keys(%pending)) || (keys(%currqueued))) {
         $r->print(&print_roles_queued($context,\%pending,\%notifydc));          $r->print(&print_roles_queued($context,\%pending,\%notifydc,\%currqueued));
     }      }
     my $linktext = &mt('Display User Lists');      my $linktext = &mt('Display User Lists');
     if ($choice eq 'drop') {      if ($choice eq 'drop') {

Removed from v.1.212  
changed lines
  Added in v.1.213


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