Diff for /loncom/interface/loncreateuser.pm between versions 1.216 and 1.217

version 1.216, 2007/12/21 15:22:01 version 1.217, 2007/12/21 15:33:32
Line 805  ENDNOPORTPRIV Line 805  ENDNOPORTPRIV
             }              }
         }          }
         $r->print('</div><div class="LC_clear_float_footer"></div>');          $r->print('</div><div class="LC_clear_float_footer"></div>');
         my %rolesdump=&Apache::lonnet::dump('roles',$ccdomain,$ccuname);          if ($env{'form.action'} ne 'singlestudent') {
         # Build up table of user roles to allow revocation of a role.              &display_existing_roles($r,$ccuname,$ccdomain,\%inccourses);
         my ($tmp) = keys(%rolesdump);          }
         unless ($tmp =~ /^(con_lost|error)/i) {  
            my $now=time;  
    my %lt=&Apache::lonlocal::texthash(  
     'rer'  => "Existing Roles",  
                     'rev'  => "Revoke",                      
                     'del'  => "Delete",  
     'ren'  => "Re-Enable",  
                     'rol'  => "Role",  
                     'ext'  => "Extent",  
                     'sta'  => "Start",  
                     'end'  => "End"  
        );  
            my (%roletext,%sortrole,%roleclass,%rolepriv);  
    foreach my $area (sort { my $a1=join('_',(split('_',$a))[1,0]);  
     my $b1=join('_',(split('_',$b))[1,0]);  
     return $a1 cmp $b1;  
  } keys(%rolesdump)) {  
                next if ($area =~ /^rolesdef/);  
        my $envkey=$area;  
                my $role = $rolesdump{$area};  
                my $thisrole=$area;  
                $area =~ s/\_\w\w$//;  
                my ($role_code,$role_end_time,$role_start_time) =   
                    split(/_/,$role);  
 # Is this a custom role? Get role owner and title.  
        my ($croleudom,$croleuname,$croletitle)=  
            ($role_code=~m{^cr/($match_domain)/($match_username)/(\w+)$});  
                my $allowed=0;  
                my $delallowed=0;  
        my $sortkey=$role_code;  
        my $class='Unknown';  
                if ($area =~ m{^/($match_domain)/($match_courseid)} ) {  
    $class='Course';  
                    my ($coursedom,$coursedir) = ($1,$2);  
    $sortkey.="\0$coursedom";  
                    # $1.'_'.$2 is the course id (eg. 103_12345abcef103l3).  
                    my %coursedata=  
                        &Apache::lonnet::coursedescription($1.'_'.$2);  
    my $carea;  
    if (defined($coursedata{'description'})) {  
        $carea=$coursedata{'description'}.  
                            '<br />'.&mt('Domain').': '.$coursedom.('&nbsp;'x8).  
      &Apache::loncommon::syllabuswrapper('Syllabus',$coursedir,$coursedom);  
        $sortkey.="\0".$coursedata{'description'};  
                        $class=$coursedata{'type'};  
    } else {  
        $carea=&mt('Unavailable course').': '.$area;  
        $sortkey.="\0".&mt('Unavailable course').': '.$area;  
    }  
    $sortkey.="\0$coursedir";  
                    $inccourses{$1.'_'.$2}=1;  
                    if ((&Apache::lonnet::allowed('c'.$role_code,$1.'/'.$2)) ||  
                        (&Apache::lonnet::allowed('c'.$role_code,$ccdomain))) {  
                        $allowed=1;  
                    }  
                    if ((&Apache::lonnet::allowed('dro',$1)) ||  
                        (&Apache::lonnet::allowed('dro',$ccdomain))) {  
                        $delallowed=1;  
                    }  
 # - custom role. Needs more info, too  
    if ($croletitle) {  
        if (&Apache::lonnet::allowed('ccr',$1.'/'.$2)) {  
    $allowed=1;  
    $thisrole.='.'.$role_code;  
        }  
    }  
                    # Compute the background color based on $area  
                    if ($area=~m{^/($match_domain)/($match_courseid)/(\w+)}) {  
                        $carea.='<br />Section: '.$3;  
        $sortkey.="\0$3";  
                    }  
                    $area=$carea;  
                } else {  
    $sortkey.="\0".$area;  
                    # Determine if current user is able to revoke privileges  
                    if ($area=~m{^/($match_domain)/}) {  
                        if ((&Apache::lonnet::allowed('c'.$role_code,$1)) ||  
                        (&Apache::lonnet::allowed('c'.$role_code,$ccdomain))) {  
                            $allowed=1;  
                        }  
                        if (((&Apache::lonnet::allowed('dro',$1))  ||  
                             (&Apache::lonnet::allowed('dro',$ccdomain))) &&  
                            ($role_code ne 'dc')) {  
                            $delallowed=1;  
                        }  
                    } else {  
                        if (&Apache::lonnet::allowed('c'.$role_code,'/')) {  
                            $allowed=1;  
                        }  
                    }  
    if ($role_code eq 'ca' || $role_code eq 'au') {  
        $class='Construction Space';  
    } elsif ($role_code eq 'su') {  
        $class='System';  
    } else {  
        $class='Domain';  
    }  
                }  
                if (($role_code eq 'ca') || ($role_code eq 'aa')) {  
                    $area=~m{/($match_domain)/($match_username)};  
    if (&Apache::lonuserutils::authorpriv($2,$1)) {  
        $allowed=1;  
                    } else {  
                        $allowed=0;  
                    }  
                }  
                my $row = '';  
                $row.= '<td>';  
                my $active=1;  
                $active=0 if (($role_end_time) && ($now>$role_end_time));  
                if (($active) && ($allowed)) {  
                    $row.= '<input type="checkbox" name="rev:'.$thisrole.'" />';  
                } else {  
                    if ($active) {  
                       $row.='&nbsp;';  
    } else {  
                       $row.=&mt('expired or revoked');  
    }  
                }  
        $row.='</td><td>';  
                if ($allowed && !$active) {  
                    $row.= '<input type="checkbox" name="ren:'.$thisrole.'" />';  
                } else {  
                    $row.='&nbsp;';  
                }  
        $row.='</td><td>';  
                if ($delallowed) {  
                    $row.= '<input type="checkbox" name="del:'.$thisrole.'" />';  
                } else {  
                    $row.='&nbsp;';  
                }  
        my $plaintext='';  
        if (!$croletitle) {  
                    $plaintext=&Apache::lonnet::plaintext($role_code,$class)  
        } else {  
            $plaintext=  
  "Customrole '$croletitle'<br />defined by $croleuname\@$croleudom";  
        }  
                $row.= '</td><td>'.$plaintext.  
                       '</td><td>'.$area.  
                       '</td><td>'.($role_start_time?localtime($role_start_time)  
                                                    : '&nbsp;' ).  
                       '</td><td>'.($role_end_time  ?localtime($role_end_time)  
                                                    : '&nbsp;' )  
                       ."</td>";  
        $sortrole{$sortkey}=$envkey;  
        $roletext{$envkey}=$row;  
        $roleclass{$envkey}=$class;  
                $rolepriv{$envkey}=$allowed;  
                #$r->print($row);  
            } # end of foreach        (table building loop)  
            my $rolesdisplay = 0;  
            my %output = ();  
    foreach my $type ('Construction Space','Course','Group','Domain','System','Unknown') {  
        $output{$type} = '';  
        foreach my $which (sort {uc($a) cmp uc($b)} (keys(%sortrole))) {  
    if ( ($roleclass{$sortrole{$which}} =~ /^\Q$type\E/ ) && ($rolepriv{$sortrole{$which}}) ) {   
        $output{$type}.=  
                              &Apache::loncommon::start_data_table_row().  
                              $roletext{$sortrole{$which}}.  
                              &Apache::loncommon::end_data_table_row();  
    }  
        }  
        unless($output{$type} eq '') {  
    $output{$type} = '<tr class="LC_info_row">'.  
      "<td align='center' colspan='7'>".&mt($type)."</td></tr>".  
                               $output{$type};  
                    $rolesdisplay = 1;  
        }  
    }  
            if ($rolesdisplay == 1) {  
                $r->print('  
 <h3>'.$lt{'rer'}.'</h3>'.  
 &Apache::loncommon::start_data_table("LC_createuser").  
 &Apache::loncommon::start_data_table_header_row().  
 '<th>'.$lt{'rev'}.'</th><th>'.$lt{'ren'}.'</th><th>'.$lt{'del'}.  
 '</th><th>'.$lt{'rol'}.'</th><th>'.$lt{'ext'}.  
 '</th><th>'.$lt{'sta'}.'</th><th>'.$lt{'end'}.'</th>'.  
 &Apache::loncommon::end_data_table_header_row());  
                foreach my $type ('Construction Space','Course','Group','Domain','System','Unknown') {  
                    if ($output{$type}) {  
                        $r->print($output{$type}."\n");  
                    }  
                }  
        $r->print(&Apache::loncommon::end_data_table());  
            }  
         }  # End of unless  
     } ## End of new user/old user logic      } ## End of new user/old user logic
     my $addrolesdisplay = 0;      my $addrolesdisplay = 0;
     $r->print('<h3>'.&mt('Add Roles').'</h3>');      $r->print('<h3>'.&mt('Add Roles').'</h3>');
Line 1193  sub validation_javascript { Line 1006  sub validation_javascript {
     return $js;      return $js;
 }  }
   
   sub display_existing_roles {
       my ($r,$ccuname,$ccdomain,$inccourses) = @_;
       my %rolesdump=&Apache::lonnet::dump('roles',$ccdomain,$ccuname);
       # Build up table of user roles to allow revocation and re-enabling of roles.
       my ($tmp) = keys(%rolesdump);
       if ($tmp !~ /^(con_lost|error)/i) {
           my $now=time;
           my %lt=&Apache::lonlocal::texthash(
                       'rer'  => "Existing Roles",
                       'rev'  => "Revoke",
                       'del'  => "Delete",
                       'ren'  => "Re-Enable",
                       'rol'  => "Role",
                       'ext'  => "Extent",
                       'sta'  => "Start",
                       'end'  => "End",
                                          );
           my (%roletext,%sortrole,%roleclass,%rolepriv);
           foreach my $area (sort { my $a1=join('_',(split('_',$a))[1,0]);
                                       my $b1=join('_',(split('_',$b))[1,0]);
                                       return $a1 cmp $b1;
                                   } keys(%rolesdump)) {
               next if ($area =~ /^rolesdef/);
               my $envkey=$area;
               my $role = $rolesdump{$area};
               my $thisrole=$area;
               $area =~ s/\_\w\w$//;
               my ($role_code,$role_end_time,$role_start_time) =
                   split(/_/,$role);
   # Is this a custom role? Get role owner and title.
               my ($croleudom,$croleuname,$croletitle)=
                   ($role_code=~m{^cr/($match_domain)/($match_username)/(\w+)$});
               my $allowed=0;
               my $delallowed=0;
               my $sortkey=$role_code;
               my $class='Unknown';
               if ($area =~ m{^/($match_domain)/($match_courseid)} ) {
                   $class='Course';
                   my ($coursedom,$coursedir) = ($1,$2);
                   $sortkey.="\0$coursedom";
                   # $1.'_'.$2 is the course id (eg. 103_12345abcef103l3).
                   my %coursedata=
                       &Apache::lonnet::coursedescription($1.'_'.$2);
                   my $carea;
                   if (defined($coursedata{'description'})) {
                       $carea=$coursedata{'description'}.
                           '<br />'.&mt('Domain').': '.$coursedom.('&nbsp;'x8).
        &Apache::loncommon::syllabuswrapper('Syllabus',$coursedir,$coursedom);
                       $sortkey.="\0".$coursedata{'description'};
                       $class=$coursedata{'type'};
                   } else {
                       $carea=&mt('Unavailable course').': '.$area;
                       $sortkey.="\0".&mt('Unavailable course').': '.$area;
                   }
                   $sortkey.="\0$coursedir";
                   $inccourses->{$1.'_'.$2}=1;
                   if ((&Apache::lonnet::allowed('c'.$role_code,$1.'/'.$2)) ||
                       (&Apache::lonnet::allowed('c'.$role_code,$ccdomain))) {
                       $allowed=1;
                   }
                   if ((&Apache::lonnet::allowed('dro',$1)) ||
                       (&Apache::lonnet::allowed('dro',$ccdomain))) {
                       $delallowed=1;
                   }
   # - custom role. Needs more info, too
                   if ($croletitle) {
                       if (&Apache::lonnet::allowed('ccr',$1.'/'.$2)) {
                           $allowed=1;
                           $thisrole.='.'.$role_code;
                       }
                   }
                   # Compute the background color based on $area
                   if ($area=~m{^/($match_domain)/($match_courseid)/(\w+)}) {
                       $carea.='<br />Section: '.$3;
                       $sortkey.="\0$3";
                       if (!$allowed) {
                           if ($env{'request.course.sec'} eq $3) {
                               if (&Apache::lonnet::allowed('c'.$role_code,$1.'/'.$2.'/'.$3)) {
                                   $allowed = 1;
                               }
                           }
                       }
                   }
                   $area=$carea;
               } else {
                   $sortkey.="\0".$area;
                   # Determine if current user is able to revoke privileges
                   if ($area=~m{^/($match_domain)/}) {
                       if ((&Apache::lonnet::allowed('c'.$role_code,$1)) ||
                          (&Apache::lonnet::allowed('c'.$role_code,$ccdomain))) {
                           $allowed=1;
                       }
                       if (((&Apache::lonnet::allowed('dro',$1))  ||
                            (&Apache::lonnet::allowed('dro',$ccdomain))) &&
                           ($role_code ne 'dc')) {
                           $delallowed=1;
                       }
                   } else {
                       if (&Apache::lonnet::allowed('c'.$role_code,'/')) {
                           $allowed=1;
                       }
                   }
                   if ($role_code eq 'ca' || $role_code eq 'au') {
                       $class='Construction Space';
                   } elsif ($role_code eq 'su') {
                       $class='System';
                   } else {
                       $class='Domain';
                   }
               }
               if (($role_code eq 'ca') || ($role_code eq 'aa')) {
                   $area=~m{/($match_domain)/($match_username)};
                   if (&Apache::lonuserutils::authorpriv($2,$1)) {
                       $allowed=1;
                   } else {
                       $allowed=0;
                   }
               }
               my $row = '';
               $row.= '<td>';
               my $active=1;
               $active=0 if (($role_end_time) && ($now>$role_end_time));
               if (($active) && ($allowed)) {
                   $row.= '<input type="checkbox" name="rev:'.$thisrole.'" />';
               } else {
                   if ($active) {
                      $row.='&nbsp;';
                   } else {
                      $row.=&mt('expired or revoked');
                   }
               }
               $row.='</td><td>';
               if ($allowed && !$active) {
                   $row.= '<input type="checkbox" name="ren:'.$thisrole.'" />';
               } else {
                   $row.='&nbsp;';
               }
               $row.='</td><td>';
               if ($delallowed) {
                   $row.= '<input type="checkbox" name="del:'.$thisrole.'" />';
               } else {
                   $row.='&nbsp;';
               }
               my $plaintext='';
               if (!$croletitle) {
                   $plaintext=&Apache::lonnet::plaintext($role_code,$class)
               } else {
                   $plaintext=
           "Customrole '$croletitle'<br />defined by $croleuname\@$croleudom";
               }
               $row.= '</td><td>'.$plaintext.
                      '</td><td>'.$area.
                      '</td><td>'.($role_start_time?localtime($role_start_time)
                                                   : '&nbsp;' ).
                      '</td><td>'.($role_end_time  ?localtime($role_end_time)
                                                   : '&nbsp;' )
                      ."</td>";
               $sortrole{$sortkey}=$envkey;
               $roletext{$envkey}=$row;
               $roleclass{$envkey}=$class;
               $rolepriv{$envkey}=$allowed;
               #$r->print($row);
           } # end of foreach        (table building loop)
           my $rolesdisplay = 0;
           my %output = ();
           foreach my $type ('Construction Space','Course','Group','Domain','System','Unknown') {
               $output{$type} = '';
               foreach my $which (sort {uc($a) cmp uc($b)} (keys(%sortrole))) {
                   if ( ($roleclass{$sortrole{$which}} =~ /^\Q$type\E/ ) && ($rolepriv{$sortrole{$which}}) ) {
                       $output{$type}.=
                             &Apache::loncommon::start_data_table_row().
                             $roletext{$sortrole{$which}}.
                             &Apache::loncommon::end_data_table_row();
                   }
               }
               unless($output{$type} eq '') {
                   $output{$type} = '<tr class="LC_info_row">'.
                             "<td align='center' colspan='7'>".&mt($type)."</td></tr>".
                              $output{$type};
                   $rolesdisplay = 1;
               }
           }
           if ($rolesdisplay == 1) {
               $r->print('
   <h3>'.$lt{'rer'}.'</h3>'.
   &Apache::loncommon::start_data_table("LC_createuser").
   &Apache::loncommon::start_data_table_header_row().
   '<th>'.$lt{'rev'}.'</th><th>'.$lt{'ren'}.'</th><th>'.$lt{'del'}.
   '</th><th>'.$lt{'rol'}.'</th><th>'.$lt{'ext'}.
   '</th><th>'.$lt{'sta'}.'</th><th>'.$lt{'end'}.'</th>'.
   &Apache::loncommon::end_data_table_header_row());
              foreach my $type ('Construction Space','Course','Group','Domain','System','Unknown') {
                   if ($output{$type}) {
                       $r->print($output{$type}."\n");
                   }
               }
               $r->print(&Apache::loncommon::end_data_table());
           }
       }  # End of check for keys in rolesdump
       return;
   }
   
 sub user_authentication {  sub user_authentication {
     my ($ccuname,$ccdomain,$krbdefdom,$abv_auth) = @_;      my ($ccuname,$ccdomain,$krbdefdom,$abv_auth) = @_;
     my $currentauth=&Apache::lonnet::queryauthenticate($ccuname,$ccdomain);      my $currentauth=&Apache::lonnet::queryauthenticate($ccuname,$ccdomain);

Removed from v.1.216  
changed lines
  Added in v.1.217


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