Diff for /loncom/auth/lonroles.pm between versions 1.76 and 1.99

version 1.76, 2003/11/08 21:51:44 version 1.99, 2004/09/02 13:15:54
Line 25 Line 25
 #  #
 # http://www.lon-capa.org/  # http://www.lon-capa.org/
 #  #
 # (Directory Indexer  
 # (Login Screen  
 # YEAR=1999  
 # 5/21/99,5/22,5/25,5/26,5/31,6/2,6/10,7/12,7/14 Gerd Kortemeyer)  
 # 11/23 Gerd Kortemeyer)  
 # YEAR=2000  
 # 1/14,03/06,06/01,07/22,07/24,07/25,  
 # 09/04,09/06,09/28,09/29,09/30,10/2,10/5,10/26,10/28,  
 # 12/08,12/28,  
 # YEAR=2001  
 # 01/15/01 Gerd Kortemeyer  
 # 03/02,05/03,05/25,05/30,06/01,07/06,08/06 Gerd Kortemeyer  
 # 12/29 Gerd Kortemeyer  
 #  
 ###  ###
   
 package Apache::lonroles;  package Apache::lonroles;
Line 54  use Apache::lonannounce; Line 40  use Apache::lonannounce;
 use Apache::lonlocal;  use Apache::lonlocal;
   
 sub redirect_user {  sub redirect_user {
     my ($r,$title,$url,$msg) = @_;      my ($r,$title,$url,$msg,$launch_nav) = @_;
     $msg = $title if (! defined($msg));      $msg = $title if (! defined($msg));
     &Apache::loncommon::content_type($r,'text/html');      &Apache::loncommon::content_type($r,'text/html');
     &Apache::loncommon::no_cache($r);      &Apache::loncommon::no_cache($r);
     $r->send_http_header;      $r->send_http_header;
     my $swinfo=&Apache::lonmenu::rawconfig();      my $swinfo=&Apache::lonmenu::rawconfig();
       my $navwindow;
       if ($launch_nav eq 'on') {
    $navwindow.=&Apache::lonnavmaps::launch_win('now');
       } else {
    $navwindow.=&Apache::lonnavmaps::close();
       }
     my $bodytag=&Apache::loncommon::bodytag('Switching Role');      my $bodytag=&Apache::loncommon::bodytag('Switching Role');
     $r->print (<<ENDREDIR);  # Note to style police: 
   # This must only replace the spaces, nothing else, or it bombs elsewhere.
       $url=~s/ /\%20/g;
       $r->print(<<ENDREDIR);
 <head><title>$title</title>  <head><title>$title</title>
 <meta HTTP-EQUIV="Refresh" CONTENT="1; url=$url">  <meta HTTP-EQUIV="Refresh" CONTENT="1; url=$url">
 </head>  </head>
 <html>  <html>
 $bodytag  $bodytag
 <script>  <script type="text/javascript">
 $swinfo  $swinfo
 </script>  </script>
   $navwindow
 <h1>$msg</h1>  <h1>$msg</h1>
   <a href="$url">Continue</a>
 </body>  </body>
 </html>  </html>
 ENDREDIR  ENDREDIR
Line 87  sub handler { Line 84  sub handler {
   
   
 # ================================================================== Roles Init  # ================================================================== Roles Init
   
     if ($ENV{'form.selectrole'}) {      if ($ENV{'form.selectrole'}) {
  if ($ENV{'request.course.id'}) {   if ($ENV{'request.course.id'}) {
     my %temp=('logout_'.$ENV{'request.course.id'} => time);      my %temp=('logout_'.$ENV{'request.course.id'} => time);
Line 123  sub handler { Line 119  sub handler {
 # check for keyed access  # check for keyed access
     if (($role eq 'st') &&       if (($role eq 'st') && 
                        ($ENV{'course.'.$cdom.'_'.$cnum.'.keyaccess'} eq 'yes')) {                         ($ENV{'course.'.$cdom.'_'.$cnum.'.keyaccess'} eq 'yes')) {
          unless (&Apache::lonnet::validate_access_key(  # who is key authority?
    my $authdom=$cdom;
    my $authnum=$cnum;
    if ($ENV{'course.'.$cdom.'_'.$cnum.'.keyauth'}) {
       ($authnum,$authdom)=
    split(/\W/,$ENV{'course.'.$cdom.'_'.$cnum.'.keyauth'});
    }
   # check with key authority
    unless (&Apache::lonnet::validate_access_key(
      $ENV{'environment.key.'.$cdom.'_'.$cnum},       $ENV{'environment.key.'.$cdom.'_'.$cnum},
      $cdom,$cnum)) {       $authdom,$authnum)) {
 # there is no valid key  # there is no valid key
      if ($ENV{'form.newkey'}) {       if ($ENV{'form.newkey'}) {
 # student attempts to register a new key  # student attempts to register a new key
    &Apache::loncommon::content_type($r,'text/html');
    &Apache::loncommon::no_cache($r);
    $r->send_http_header;
    my $swinfo=&Apache::lonmenu::rawconfig();
    my $bodytag=&Apache::loncommon::bodytag
       ('Verifying Access Key to Unlock this Course');
    my $buttontext=&mt('Enter Course');
    my $message=&mt('Successfully registered key');
    my $assignresult=
        &Apache::lonnet::assign_access_key(
        $ENV{'form.newkey'},
        $authdom,$authnum,
        $cdom,$cnum,
                                                        $ENV{'user.domain'},
        $ENV{'user.name'},
         'Assigned from '.$ENV{'REMOTE_ADDR'}.' at '.localtime().' for '.
                                                        $trolecode);
    unless ($assignresult eq 'ok') {
        $assignresult=~s/^error\:\s*//;
        $message=&mt($assignresult).
        '<br /><a href="/adm/logout">'.
        &mt('Logout').'</a>';
        $buttontext=&mt('Re-Enter Key');
    }
    $r->print(<<ENDENTEREDKEY);
   <head><title>Verifying Course Access Key</title>
   </head>
   <html>
   $bodytag
   <script>
   $swinfo
   </script>
   <form method="post">
   <input type="hidden" name="selectrole" value="1" />
   <input type="hidden" name="$trolecode" value="1" />
   <font size="+2">$message</font><br />
   <input type="submit" value="$buttontext" />
   </form>
   </body></html>
   ENDENTEREDKEY
                                    return OK;
      } else {       } else {
 # print form to enter a new key  # print form to enter a new key
  &Apache::loncommon::content_type($r,'text/html');   &Apache::loncommon::content_type($r,'text/html');
Line 146  $bodytag Line 191  $bodytag
 $swinfo  $swinfo
 </script>  </script>
 <form method="post">  <form method="post">
 <input type="hidden" name="selectrole" value="$ENV{'form.selectrole'}" />  <input type="hidden" name="selectrole" value="1" />
   <input type="hidden" name="$trolecode" value="1" />
 <input type="text" size="20" name="newkey" value="$ENV{'form.newkey'}" />  <input type="text" size="20" name="newkey" value="$ENV{'form.newkey'}" />
 <input type="submit" value="Enter key" />  <input type="submit" value="Enter key" />
 </form>  </form>
Line 156  ENDENTERKEY Line 202  ENDENTERKEY
      }       }
  }   }
      }       }
       &Apache::lonnet::log($ENV{'user.domain'},
    $ENV{'user.name'},
    $ENV{'user.home'},
    "Role ".$trolecode);
                     my $tadv=0;                      my $tadv=0;
                     if (($trolecode!~/^st/) &&                       if (($trolecode!~/^st/) && 
                         ($trolecode!~/^ta/) &&                           ($trolecode!~/^ta/) && 
Line 202  ENDENTERKEY Line 252  ENDENTERKEY
     }      }
                             #                              #
                             # Send the user to the course they selected                              # Send the user to the course they selected
                             &redirect_user($r,'Entering Course',                              &redirect_user($r,&mt('Entering Course'),
                                            $furl,$msg);                                             $furl,$msg,
      $ENV{'environment.remotenavmap'});
                             return OK;                              return OK;
  }   }
     }      }
Line 218  ENDENTERKEY Line 269  ENDENTERKEY
                             $redirect_url .= $1;                              $redirect_url .= $1;
                         }                          }
                         $redirect_url .= '/';                          $redirect_url .= '/';
                         &redirect_user($r,'Entering Construction Space',                          &redirect_user($r,&mt('Entering Construction Space'),
                                        $redirect_url);                                         $redirect_url);
                         return OK;                          return OK;
                     }                      }
Line 237  ENDENTERKEY Line 288  ENDENTERKEY
   
     my $swinfo=&Apache::lonmenu::rawconfig();      my $swinfo=&Apache::lonmenu::rawconfig();
     my $bodytag=&Apache::loncommon::bodytag('User Roles');      my $bodytag=&Apache::loncommon::bodytag('User Roles');
     my $helptag=&Apache::loncommon::help_open_topic      my $helptag='<table><tr><td>'.&Apache::loncommon::help_open_menu('','General Intro','General_Intro','User Roles',1,undef,undef,undef,undef,,&mt("Click here for help")).'</td></td></tr></table>';
      ("General_Intro","Click here for help");  
     $r->print(<<ENDHEADER);      $r->print(<<ENDHEADER);
 <html>  <html>
 <head>  <head>
Line 304  ENDHEADER Line 354  ENDHEADER
       "<br />\n");        "<br />\n");
     $r->print(&mt(      $r->print(&mt(
       "Author and Co-Author roles may not be available on servers other than your home server."));        "Author and Co-Author roles may not be available on servers other than your home server."));
         } else {  
     $r->print("<h2>".&mt('Select a Course to Enter')."</h2>\n");  
         }          }
         if (($ENV{'REDIRECT_QUERY_STRING'}) && ($fn)) {          if (($ENV{'REDIRECT_QUERY_STRING'}) && ($fn)) {
        $fn.='?'.$ENV{'REDIRECT_QUERY_STRING'};         $fn.='?'.$ENV{'REDIRECT_QUERY_STRING'};
         }          }
         $r->print('<form method=post action="'.(($fn)?$fn:$r->uri).'">');          $r->print('<form method="post" name="rolechoice" action="'.(($fn)?$fn:$r->uri).'">');
         $r->print('<input type=hidden name=orgurl value="'.$fn.'">');          $r->print('<input type=hidden name=orgurl value="'.$fn.'">');
         $r->print('<input type=hidden name=selectrole value=1>');          $r->print('<input type=hidden name=selectrole value=1>');
     }      }
Line 320  ENDHEADER Line 368  ENDHEADER
  if ($ENV{'form.showall'}) { $r->print(' checked'); }   if ($ENV{'form.showall'}) { $r->print(' checked'); }
  $r->print('><input type=submit value="'.&mt('Display').'">');   $r->print('><input type=submit value="'.&mt('Display').'">');
     }      }
 # ----------------------------------------------------------------------- Table  
     $r->print('<br /><table><tr>');  
     unless ($nochoose) { $r->print('<th>&nbsp;</th>'); }  
     $r->print('<th>'.&mt('User Role').'</th><th colspan=2>'.&mt('Extent').  
          '</th><th>'.&mt('Start').'</th><th>'.&mt('End').'</th><th>'.  
       &mt('Remark').'</th></tr>'."\n");  
   
     my (%roletext,%sortrole,%roleclass);      my (%roletext,%sortrole,%roleclass);
       my $countactive=0;
       my $inrole=0;
       my $possiblerole='';
     foreach $envkey (sort keys %ENV) {      foreach $envkey (sort keys %ENV) {
         my $button = 1;          my $button = 1;
         my $switchserver='';          my $switchserver='';
Line 368  ENDHEADER Line 413  ENDHEADER
                 if ($tstatus eq 'is') {                  if ($tstatus eq 'is') {
                     $tbg='#77FF77';                      $tbg='#77FF77';
                     $tfont='#003300';                      $tfont='#003300';
       $possiblerole=$trolecode;
       $countactive++;
                 } elsif ($tstatus eq 'future') {                  } elsif ($tstatus eq 'future') {
                     $tbg='#FFFF77';                      $tbg='#FFFF77';
                     $button=0;                      $button=0;
Line 384  ENDHEADER Line 431  ENDHEADER
                 } elsif ($tstatus eq 'selected') {                  } elsif ($tstatus eq 'selected') {
                     $tbg='#11CC55';                      $tbg='#11CC55';
                     $tfont='#002200';                      $tfont='#002200';
       $inrole=1;
       $countactive++;
                     $tremark.=&mt('Currently selected. ');                      $tremark.=&mt('Currently selected. ');
                 }                  }
                 my $trole;                  my $trole;
Line 402  ENDHEADER Line 451  ENDHEADER
                 # First, Co-Authorship roles                  # First, Co-Authorship roles
                 if ($role eq 'ca') {                  if ($role eq 'ca') {
                     my $home = &Apache::lonnet::homeserver($trest,$tdom);                      my $home = &Apache::lonnet::homeserver($trest,$tdom);
                     if ($home ne $r->dir_config('lonHostID')) {      my $allowed=0;
       my @ids=&Apache::lonnet::current_machine_ids();
       foreach my $id (@ids) { if ($id eq $home) { $allowed=1; } }
                       if (!$allowed) {
  $button=0;   $button=0;
                         $switchserver=&Apache::lonnet::escape('http://'.                          $switchserver=&Apache::lonnet::escape('http://'.
                          $Apache::lonnet::hostname{$home}.                           $Apache::lonnet::hostname{$home}.
                          '/adm/login?domain='.$ENV{'user.domain'}.                           '/adm/login?domain='.$ENV{'user.domain'}.
   '&username='.$ENV{'user.name'}.    '&username='.$ENV{'user.name'}.
                           '&firsturl=/priv/'.$trest);                            '&firsturl=/priv/'.$trest.'/');
                     }                      }
                     #next if ($home eq 'no_host');                      #next if ($home eq 'no_host');
                     $home = $Apache::lonnet::hostname{$home};                      $home = $Apache::lonnet::hostname{$home};
                     $ttype=&mt('Construction Space');                      $ttype='Construction Space';
                     $twhere=&mt('User').': '.$trest.'<br />'.&mt('Domain').                      $twhere=&mt('User').': '.$trest.'<br />'.&mt('Domain').
  ': '.$tdom.'<br />'.   ': '.$tdom.'<br />'.
                         ' '.&mt('Server').':&nbsp;'.$home;                          ' '.&mt('Server').':&nbsp;'.$home;
                     $ENV{'course.'.$tdom.'_'.$trest.'.description'}='ca';                      $ENV{'course.'.$tdom.'_'.$trest.'.description'}='ca';
       $tremark.=&Apache::lonhtmlcommon::authorbombs('/res/'.$tdom.'/'.$trest.'/');
     $sortkey=$role."$trest:$tdom";      $sortkey=$role."$trest:$tdom";
                 } elsif ($role eq 'au') {                  } elsif ($role eq 'au') {
                     # Authors                      # Authors
                     my $home = &Apache::lonnet::homeserver                      my $home = &Apache::lonnet::homeserver
                         ($ENV{'user.name'},$ENV{'user.domain'});                          ($ENV{'user.name'},$ENV{'user.domain'});
                     if ($home ne $r->dir_config('lonHostID')) {      my $allowed=0;
       my @ids=&Apache::lonnet::current_machine_ids();
       foreach my $id (@ids) { if ($id eq $home) { $allowed=1; } }
                       if (!$allowed) {
  $button=0;   $button=0;
                         $switchserver=&Apache::lonnet::escape('http://'.                          $switchserver=&Apache::lonnet::escape('http://'.
                          $Apache::lonnet::hostname{$home}.                           $Apache::lonnet::hostname{$home}.
                           '/adm/login?domain='.$ENV{'user.domain'}.                            '/adm/login?domain='.$ENV{'user.domain'}.
    '&username='.$ENV{'user.name'}.     '&username='.$ENV{'user.name'}.
                            '&firsturl=/priv/'.$ENV{'user.name'});                             '&firsturl=/priv/'.$ENV{'user.name'}.'/');
                     }                      }
                     #next if ($home eq 'no_host');                      #next if ($home eq 'no_host');
                     $home = $Apache::lonnet::hostname{$home};                      $home = $Apache::lonnet::hostname{$home};
                     $ttype=&mt('Construction Space');                      $ttype='Construction Space';
                     $twhere=&mt('Domain').': '.$tdom.'<br />'.&mt('Server').                      $twhere=&mt('Domain').': '.$tdom.'<br />'.&mt('Server').
  ':&nbsp;'.$home;   ':&nbsp;'.$home;
                     $ENV{'course.'.$tdom.'_'.$trest.'.description'}='ca';                      $ENV{'course.'.$tdom.'_'.$trest.'.description'}='ca';
       $tremark.=&Apache::lonhtmlcommon::authorbombs('/res/'.$tdom.'/'.$ENV{'user.name'}.'/');
     $sortkey=$role;      $sortkey=$role;
                 } elsif ($trest) {                  } elsif ($trest) {
                     $ttype=&mt('Course');                      $ttype='Course';
                     if ($tsection) {                      if ($tsection) {
                         $ttype.='<br>'.&mt('Section/Group').': '.$tsection;                          $ttype.='<br>'.&mt('Section/Group').': '.$tsection;
     }      }
                     my $tcourseid=$tdom.'_'.$trest;                      my $tcourseid=$tdom.'_'.$trest;
                     if ($ENV{'course.'.$tcourseid.'.description'}) {                      if ($ENV{'course.'.$tcourseid.'.description'}) {
                         $twhere=$ENV{'course.'.$tcourseid.'.description'};                          $twhere=$ENV{'course.'.$tcourseid.'.description'};
  $sortkey=$twhere."\0".$envkey;   $sortkey=$role."\0".$tdom."\0".$twhere."\0".$envkey;
                         unless ($twhere eq &mt('Currently not available')) {                          unless ($twhere eq &mt('Currently not available')) {
     $twhere.=' <font size="-2">'.      $twhere.=' <font size="-2">'.
         &Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$trest,$tdom,$tfont).          &Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$trest,$tdom,$tfont).
Line 455  ENDHEADER Line 512  ENDHEADER
                         my %newhash=Apache::lonnet::coursedescription                          my %newhash=Apache::lonnet::coursedescription
                             ($tcourseid);                              ($tcourseid);
                         if (%newhash) {                          if (%newhash) {
     $sortkey=$newhash{'description'}."\0".$envkey;      $sortkey=$role."\0".$tdom."\0".$newhash{'description'}.
    "\0".$envkey;
                             $twhere=$newhash{'description'}.                              $twhere=$newhash{'description'}.
                               ' <font size="-2">'.                                ' <font size="-2">'.
         &Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$trest,$tdom,$tfont).          &Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$trest,$tdom,$tfont).
Line 463  ENDHEADER Line 521  ENDHEADER
                         } else {                          } else {
                             $twhere=&mt('Currently not available');                              $twhere=&mt('Currently not available');
                             $ENV{'course.'.$tcourseid.'.description'}=$twhere;                              $ENV{'course.'.$tcourseid.'.description'}=$twhere;
     $sortkey=$twhere."\0".$envkey;      $sortkey=$role."\0".$tdom."\0".$twhere."\0".$envkey;
                         }                          }
                     }                      }
     if ($role ne 'st') { $twhere.="<br />".&mt('Domain').":".$tdom; }      if ($role ne 'st') { $twhere.="<br />".&mt('Domain').":".$tdom; }
                 } elsif ($tdom) {                  } elsif ($tdom) {
                     $ttype=&mt('Domain');                      $ttype='Domain';
                     $twhere=$tdom;                      $twhere=$tdom;
     $sortkey=$role.$twhere;      $sortkey=$role.$twhere;
                 } else {                  } else {
                     $ttype=&mt('System');                      $ttype='System';
                     $twhere=&mt('system wide');                      $twhere=&mt('system wide');
     $sortkey=$role.$twhere;      $sortkey=$role.$twhere;
                 }                  }
Line 519  ENDHEADER Line 577  ENDHEADER
     }      }
         }          }
     }      }
   # No active roles
       if ($countactive==0) {
    if ($inrole) {
       $r->print('<h2>'.&mt('Currently no additional roles or courses').'</h2>');
    } else {
       $r->print('<h2>'.&mt('Currently no active roles or courses').'</h2>');
    }
    $r->print('</form></body></html>');
    return OK;
   # Is there only one choice?
       } elsif (($countactive==1) && ($ENV{'request.role'} eq 'cm')) {
    $r->print('<h3>'.&mt('Please stand by.').'</h3>'.
       '<input type="hidden" name="'.$possiblerole.'" value="1" />');
    $r->print("</form>\n");
    $r->rflush();
    $r->print('<script>document.forms.rolechoice.submit();</script>');
    $r->print('</body></html>');
    return OK;
       }
   # More than one possible role
   # ----------------------------------------------------------------------- Table
       unless (($advanced) || ($nochoose)) {
    $r->print("<h2>".&mt('Select a Course to Enter')."</h2>\n");
       }
       $r->print('<br /><table><tr>');
       unless ($nochoose) { $r->print('<th>&nbsp;</th>'); }
       $r->print('<th>'.&mt('User Role').'</th><th colspan=2>'.&mt('Extent').
            '</th><th>'.&mt('Start').'</th><th>'.&mt('End').'</th><th>'.
         &mt('Remarks and Calendar Announcements').'</th></tr>'."\n");
     my $doheaders=-1;      my $doheaders=-1;
     foreach my $type (&mt('Construction Space'),&mt('Course'),      foreach my $type ('Construction Space','Course','Domain','System') {
       &mt('Domain'),&mt('System')) {  
  my $haverole=0;   my $haverole=0;
  foreach my $which (sort {uc($a) cmp uc($b)} (keys(%sortrole))) {   foreach my $which (sort {uc($a) cmp uc($b)} (keys(%sortrole))) {
     if ($roleclass{$sortrole{$which}} =~ /^\Q$type\E/) {       if ($roleclass{$sortrole{$which}} =~ /^\Q$type\E/) { 
Line 530  ENDHEADER Line 616  ENDHEADER
  }   }
  if ($haverole) { $doheaders++; }   if ($haverole) { $doheaders++; }
     }      }
     foreach my $type (&mt('Construction Space'),&mt('Course'),      foreach my $type ('Construction Space','Course','Domain','System') {
       &mt('Domain'),&mt('System')) {  
  my $output;   my $output;
  foreach my $which (sort {uc($a) cmp uc($b)} (keys(%sortrole))) {   foreach my $which (sort {uc($a) cmp uc($b)} (keys(%sortrole))) {
     if ($roleclass{$sortrole{$which}} =~ /^\Q$type\E/) {       if ($roleclass{$sortrole{$which}} =~ /^\Q$type\E/) { 
  $output.=$roletext{$sortrole{$which}};   $output.=&mt($roletext{$sortrole{$which}});
     }      }
  }   }
  if ($output) {   if ($output) {
     if ($doheaders > 0) {      if ($doheaders > 0) {
  $r->print("<tr bgcolor='#99ff99'>".   $r->print("<tr bgcolor='#BBffBB'>".
   "<td align='center' colspan='7'>$type</td>");    "<td align='center' colspan='7'>".&mt($type)."</td>");
     }      }
     $r->print($output);          $r->print($output);    
  }   }
Line 628  ENDHEADER Line 713  ENDHEADER
     $r->print(&Apache::lonnet::getannounce());      $r->print(&Apache::lonnet::getannounce());
     if ($advanced) {      if ($advanced) {
  $r->print('<p><small><i>This is LON-CAPA '.   $r->print('<p><small><i>This is LON-CAPA '.
   $r->dir_config('lonVersion').'</i></small></p>');    $r->dir_config('lonVersion').'</i><br />'.
     '<a href="/adm/logout">'.&mt('Logout').'</a></small></p>');
     }      }
     $r->print("</body></html>\n");      $r->print("</body></html>\n");
     return OK;      return OK;

Removed from v.1.76  
changed lines
  Added in v.1.99


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.