Diff for /loncom/auth/lonroles.pm between versions 1.140 and 1.152

version 1.140, 2005/12/20 15:47:07 version 1.152, 2006/05/30 21:16:40
Line 39  use Apache::loncommon; Line 39  use Apache::loncommon;
 use Apache::lonhtmlcommon;  use Apache::lonhtmlcommon;
 use Apache::lonannounce;  use Apache::lonannounce;
 use Apache::lonlocal;  use Apache::lonlocal;
   use Apache::lonpageflip();
 use GDBM_File;  use GDBM_File;
   use LONCAPA;
    
   
 sub redirect_user {  sub redirect_user {
     my ($r,$title,$url,$msg,$launch_nav) = @_;      my ($r,$title,$url,$msg,$launch_nav) = @_;
Line 55  sub redirect_user { Line 58  sub redirect_user {
     } else {      } else {
  $navwindow.=&Apache::lonnavmaps::close();   $navwindow.=&Apache::lonnavmaps::close();
     }      }
     my $bodytag=&Apache::loncommon::bodytag('Switching Role');      my $start_page = &Apache::loncommon::start_page('Switching Role',undef,
       {'redirect' => [1,$url],});
       my $end_page   = &Apache::loncommon::end_page();
   
 # Note to style police:   # Note to style police: 
 # This must only replace the spaces, nothing else, or it bombs elsewhere.  # This must only replace the spaces, nothing else, or it bombs elsewhere.
     $url=~s/ /\%20/g;      $url=~s/ /\%20/g;
     $r->print(<<ENDREDIR);      $r->print(<<ENDREDIR);
 <head><title>$title</title>  $start_page
 <meta HTTP-EQUIV="Refresh" CONTENT="1; url=$url">  
 </head>  
 <html>  
 $bodytag  
 <script type="text/javascript">  <script type="text/javascript">
 $swinfo  $swinfo
 </script>  </script>
 $navwindow  $navwindow
 <h1>$msg</h1>  <h1>$msg</h1>
 <a href="$url">Continue</a>  $end_page
 </body>  
 </html>  
 ENDREDIR  ENDREDIR
     return;      return;
 }  }
   
   sub error_page {
       my ($r,$error,$dest)=@_;
       &Apache::loncommon::content_type($r,'text/html');
       &Apache::loncommon::no_cache($r);
       $r->send_http_header;
       return OK if $r->header_only;
       $r->print(&Apache::loncommon::start_page('Problems during Course Initialization').
         '<script type="text/javascript">'.
         &Apache::lonmenu::rawconfig().'</script>'.
         '<p>'.&mt('The following problems occurred:').
         $error.
         '</p><br /><a href="'.$dest.'>'.&mt('Continue').'</a>'.
         &Apache::loncommon::end_page());
   }
   
 sub handler {  sub handler {
   
     my $r = shift;      my $r = shift;
Line 86  sub handler { Line 101  sub handler {
     my $envkey;      my $envkey;
     my %dcroles = ();      my %dcroles = ();
     my $numdc = &check_fordc(\%dcroles,$then);      my $numdc = &check_fordc(\%dcroles,$then);
       &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'});
   
 # ================================================================== Roles Init  # ================================================================== Roles Init
     if ($env{'form.selectrole'}) {      if ($env{'form.selectrole'}) {
Line 108  sub handler { Line 124  sub handler {
 # Check if user is a DC trying to enter a course and needs privs to be created  # Check if user is a DC trying to enter a course and needs privs to be created
         if ($numdc > 0) {          if ($numdc > 0) {
             foreach my $envkey (keys %env) {              foreach my $envkey (keys %env) {
                 if ($envkey =~ m-^form\.cc\./(\w+)/(\w+)$-) {                  if (my ($domain,$coursenum) =
                     if ($dcroles{$1}) {                                      ($envkey =~ m-^form\.cc\./(\w+)/(\w+)$-)) {
                         my $cckey = 'user.role.cc./'.$1.'/'.$2;                      if ($dcroles{$domain}) {
                         &check_privs($cckey,$then,$now);                          &check_privs($domain,$coursenum,$then,$now);
                     }                      }
                     last;                      last;
                 }                  }
Line 159  sub handler { Line 175  sub handler {
  &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 $bodytag=&Apache::loncommon::bodytag   my $start_page=&Apache::loncommon::start_page
     ('Verifying Access Key to Unlock this Course');      ('Verifying Access Key to Unlock this Course');
    my $end_page=&Apache::loncommon::end_page();
  my $buttontext=&mt('Enter Course');   my $buttontext=&mt('Enter Course');
  my $message=&mt('Successfully registered key');   my $message=&mt('Successfully registered key');
  my $assignresult=   my $assignresult=
Line 180  sub handler { Line 197  sub handler {
      $buttontext=&mt('Re-Enter Key');       $buttontext=&mt('Re-Enter Key');
  }   }
  $r->print(<<ENDENTEREDKEY);   $r->print(<<ENDENTEREDKEY);
 <head><title>Verifying Course Access Key</title>  $start_page
 </head>  
 <html>  
 $bodytag  
 <script>  <script>
 $swinfo  $swinfo
 </script>  </script>
Line 193  $swinfo Line 207  $swinfo
 <font size="+2">$message</font><br />  <font size="+2">$message</font><br />
 <input type="submit" value="$buttontext" />  <input type="submit" value="$buttontext" />
 </form>  </form>
 </body></html>  $end_page
 ENDENTEREDKEY  ENDENTEREDKEY
                                  return OK;                                   return OK;
      } else {       } else {
Line 202  ENDENTEREDKEY Line 216  ENDENTEREDKEY
  &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 $bodytag=&Apache::loncommon::bodytag   my $start_page=&Apache::loncommon::start_page
     ('Enter Access Key to Unlock this Course');      ('Enter Access Key to Unlock this Course');
    my $end_page=&Apache::loncommon::end_page();
  $r->print(<<ENDENTERKEY);   $r->print(<<ENDENTERKEY);
 <head><title>Entering Course Access Key</title>  $start_page
 </head>  
 <html>  
 $bodytag  
 <script>  <script>
 $swinfo  $swinfo
 </script>  </script>
Line 218  $swinfo Line 230  $swinfo
 <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>
 </body></html>  $end_page
 ENDENTERKEY  ENDENTERKEY
  return OK;   return OK;
      }       }
Line 235  ENDENTERKEY Line 247  ENDENTERKEY
    'request.course.sec'  => $csec,     'request.course.sec'  => $csec,
                                            'request.course.groups' => $cgrps);                                             'request.course.groups' => $cgrps);
                     my $tadv=0;                      my $tadv=0;
     my $msg=&mt('Entering course ...');  
   
     if (($cnum) && ($role ne 'ca') && ($role ne 'aa')) {      if (($cnum) && ($role ne 'ca') && ($role ne 'aa')) {
                           my $msg;
  my ($furl,$ferr)=   my ($furl,$ferr)=
     &Apache::lonuserstate::readmap($cdom.'/'.$cnum);      &Apache::lonuserstate::readmap($cdom.'/'.$cnum);
  if (($env{'form.orgurl'}) &&    if (($env{'form.orgurl'}) && 
Line 245  ENDENTERKEY Line 257  ENDENTERKEY
     my $dest=$env{'form.orgurl'};      my $dest=$env{'form.orgurl'};
     if (&Apache::lonnet::allowed('adv') eq 'F') { $tadv=1; }      if (&Apache::lonnet::allowed('adv') eq 'F') { $tadv=1; }
     &Apache::lonnet::appenv('request.role.adv'=>$tadv);      &Apache::lonnet::appenv('request.role.adv'=>$tadv);
     $r->internal_redirect($dest);                              if (($ferr) && ($tadv)) {
    &error_page($r,$ferr,$dest);
       } else {
    $r->internal_redirect($dest);
       }
     return OK;      return OK;
  } else {   } else {
     unless ($env{'request.course.id'}) {                              my $type = 'Course/Group';
       if ($env{'request.course.id'}) {
                                   if (defined($env{'course.'.
                                               $env{'request.course.id'}.'.type'})) {
                                       $type = $env{'course.'.
                                                    $env{'request.course.id'}.'.type'};
                                   }
  &Apache::lonnet::appenv(   &Apache::lonnet::appenv(
       "request.course.id"  => $cdom.'_'.$cnum);        "request.course.id"  => $cdom.'_'.$cnum);
  $furl='/adm/roles?tryagain=1';   $furl='/adm/roles?tryagain=1';
  $msg=   $msg=
     '<h1><font color="red">'.      '<h1><font color="red">'.
  &mt('Could not initialize course at this time.').   &mt('Could not initialize [_1] at this time.',lc($type)).
     '</font></h1><h3>'.&mt('Please try again.').'</h3>'.$ferr;      '</font></h1><h3>'.&mt('Please try again.').'</h3>'.$ferr;
     }      }
     if (&Apache::lonnet::allowed('adv') eq 'F') { $tadv=1; }      if (&Apache::lonnet::allowed('adv') eq 'F') { $tadv=1; }
     &Apache::lonnet::appenv('request.role.adv'=>$tadv);      &Apache::lonnet::appenv('request.role.adv'=>$tadv);
   
     # Check to see if the user is a CC entering a course       if (($ferr) && ($tadv)) {
     # for the first time   &error_page($r,$ferr,$furl);
     my (undef, undef, $role, $courseid) = split(/\./, $envkey);      } else {
     if (substr($courseid, 0, 1) eq '/') {   # Check to see if the user is a CC entering a course 
  $courseid = substr($courseid, 1);   # for the first time
    my (undef, undef, $role, $courseid) = split(/\./, $envkey);
    if (substr($courseid, 0, 1) eq '/') {
       $courseid = substr($courseid, 1);
    }
    $courseid =~ s/\//_/;
    if ($role eq 'cc' && $env{'course.' . $courseid . 
         '.course.helper.not.run'}) {
       $furl = "/adm/helper/course.initialization.helper";
       # Send the user to the course they selected
    } elsif ($env{'request.course.id'}) {
       if (&Apache::lonnet::allowed('whn',
    $env{'request.course.id'})
    || &Apache::lonnet::allowed('whn',
       $env{'request.course.id'}.'/'
       .$env{'request.course.sec'})
    ) {
    my $startpage = &courseloadpage($courseid);
    unless ($startpage eq 'firstres') {         
       $msg = &mt('Entering [_1] ....',lc($type));
       &redirect_user($r,&mt('New in course'),
      '/adm/whatsnew?refpage=start',$msg,
      $env{'environment.remotenavmap'});
       return OK;
    }
       }
    }
   # Are we allowed to look at the first resource?
    if (!&Apache::lonnet::allowed('bre',$furl)) {
   # Guess not ...
       $furl=&Apache::lonpageflip::first_accessible_resource();
    }
                                   $msg = &mt('Entering [_1] ...',lc($type));
    &redirect_user($r,&mt('Entering [_1]',$type),
          $furl,$msg,
          $env{'environment.remotenavmap'});
     }      }
     $courseid =~ s/\//_/;  
     if ($role eq 'cc' && $env{'course.' . $courseid .   
   '.course.helper.not.run'}) {  
  $furl = "/adm/helper/course.initialization.helper";  
  # Send the user to the course they selected  
     } elsif ($env{'request.course.fn'}) {  
                                 if ($env{'user.adv'}) {  
                                     my $startpage = &courseloadpage($courseid);  
                                     unless ($startpage eq 'firstres') {           
         $msg = &mt('Entering course ....');  
         &redirect_user($r,&mt('New in course'),  
      '/adm/whatsnew?refpage=start',$msg,  
      $env{'environment.remotenavmap'});  
         return OK;  
                                     }  
                                 }  
     }  
     &redirect_user($r,&mt('Entering Course'),  
                                            $furl,$msg,  
    $env{'environment.remotenavmap'});  
     return OK;      return OK;
  }   }
     }      }
Line 324  ENDENTERKEY Line 361  ENDENTERKEY
     return OK if $r->header_only;      return OK if $r->header_only;
   
     my $swinfo=&Apache::lonmenu::rawconfig();      my $swinfo=&Apache::lonmenu::rawconfig();
     my $bodytag=&Apache::loncommon::bodytag('User Roles');      my $start_page=&Apache::loncommon::start_page('User Roles');
     my $standby=&mt('Role selected. Please stand by.');      my $standby=&mt('Role selected. Please stand by.');
     $standby=~s/\n/\\n/g;      $standby=~s/\n/\\n/g;
     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>';      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>';
     $r->print(<<ENDHEADER);      $r->print(<<ENDHEADER);
 <html>  $start_page
 <head>  
 <title>LON-CAPA User Roles</title>  
 </head>  
 $bodytag  
 $helptag<br />  $helptag<br />
 <script>  <script>
 $swinfo  $swinfo
Line 384  ENDHEADER Line 417  ENDHEADER
     $last=$hash{'last_known'};      $last=$hash{'last_known'};
     untie(%hash);      untie(%hash);
  }   }
  if ($last) { $fn.='?symb='.&Apache::lonnet::escape($last); }   if ($last) { $fn.='?symb='.&escape($last); }
   
  &Apache::londocs::changewarning($r,undef,'You have modified your course recently, [_1] may fix this access problem.',   &Apache::londocs::changewarning($r,undef,'You have modified your course recently, [_1] may fix this access problem.',
  &Apache::lonenc::check_encrypt($fn));   &Apache::lonenc::check_encrypt($fn));
Line 397  ENDHEADER Line 430  ENDHEADER
     }      }
 # -------------------------------------------------------- Choice or no choice?  # -------------------------------------------------------- Choice or no choice?
     if ($nochoose) {      if ($nochoose) {
         if ($advanced) {   $r->print("<h2>".&mt('Sorry ...')."</h2>\n".
     $r->print("<h2>".&mt('Assigned User Roles')."</h2>\n");    &mt('This action is currently not authorized.').
         } else {    &Apache::loncommon::end_page());
     $r->print("<h2>".&mt('Sorry ...')."</h2>\n".   return OK;
       &mt('This resource might be part of'));  
     if ($env{'request.course.id'}) {  
  $r->print(&mt(' another'));  
     } else {  
  $r->print(&mt(' a certain'));  
     }   
     $r->print(&mt(' course.').'</body></html>');  
     return OK;  
         }   
     } else {      } else {
         if ($advanced) {          if ($advanced) {
     $r->print(&mt("Your home server is ").      $r->print(&mt("Your home server is ").
Line 530  ENDHEADER Line 554  ENDHEADER
     foreach my $id (@ids) { if ($id eq $home) { $allowed=1; } }      foreach my $id (@ids) { if ($id eq $home) { $allowed=1; } }
                     if (!$allowed) {                      if (!$allowed) {
  $button=0;   $button=0;
                         $switchserver=&Apache::lonnet::escape('http://'.                          $switchserver='otherserver='.$home.'&role='.$trolecode;
                          $Apache::lonnet::hostname{$home}.  
                           '/adm/login?domain='.$env{'user.domain'}.  
    '&username='.$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};
Line 547  ENDHEADER Line 567  ENDHEADER
                 } elsif ($trest) {                  } elsif ($trest) {
                     $ttype='Course';                      $ttype='Course';
                     my $tcourseid=$tdom.'_'.$trest;                      my $tcourseid=$tdom.'_'.$trest;
                       if (defined($env{'course.'.$tcourseid.'.type'})) {
                           $ttype = $env{'course.'.$tcourseid.'.type'};
                           if ($ttype eq 'Group') {
                               $trole = &Apache::loncommon::convert_role($trole,
                                                                         $ttype);    
                           }
                       }
                     if ($env{'course.'.$tcourseid.'.description'}) {                      if ($env{'course.'.$tcourseid.'.description'}) {
                         $twhere=$env{'course.'.$tcourseid.'.description'};                          $twhere=$env{'course.'.$tcourseid.'.description'};
  $sortkey=$role."\0".$tdom."\0".$twhere."\0".$envkey;   $sortkey=$role."\0".$tdom."\0".$twhere."\0".$envkey;
Line 564  ENDHEADER Line 591  ENDHEADER
                               ' <font size="-2">'.                                ' <font size="-2">'.
         &Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$trest,$tdom,$tfont).          &Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$trest,$tdom,$tfont).
                               '</font>';                                '</font>';
                               $ttype = $newhash{'type'};
                               if ($ttype eq 'Group') {
                                   $trole = &Apache::loncommon::convert_role(
                                                                   $trole,$ttype);
                               }
                         } else {                          } else {
                             $twhere=&mt('Currently not available');                              $twhere=&mt('Currently not available');
                             $env{'course.'.$tcourseid.'.description'}=$twhere;                              $env{'course.'.$tcourseid.'.description'}=$twhere;
     $sortkey=$role."\0".$tdom."\0".$twhere."\0".$envkey;      $sortkey=$role."\0".$tdom."\0".$twhere."\0".$envkey;
                               $ttype = 'Unavailable';
                         }                          }
                     }                      }
                     if ($tsection) {                      if ($tsection) {
                         $twhere.='<br />'.&mt('Section/Group').': '.$tsection;                          $twhere.='<br />'.&mt('Section/Group').': '.$tsection;
     }      }
   
     if ($role ne 'st') { $twhere.="<br />".&mt('Domain').":".$tdom; }      if ($role ne 'st') { $twhere.="<br />".&mt('Domain').":".$tdom; }
                 } elsif ($tdom) {                  } elsif ($tdom) {
                     $ttype='Domain';                      $ttype='Domain';
Line 584  ENDHEADER Line 616  ENDHEADER
                     $twhere=&mt('system wide');                      $twhere=&mt('system wide');
     $sortkey=$role.$twhere;      $sortkey=$role.$twhere;
                 }                  }
                    $roletext.=&build_roletext($trolecode,$tdom,$trest,$tstatus,$tryagain,$advanced,$tremark,$tbg,$tfont,$trole,$twhere,$tpstart,$tpend,$nochoose,$button,$switchserver);
                 $roletext.=&build_roletext($trolecode,$tdom,$trest,$tstatus,$tryagain,$advanced,$tremark,$tbg,$tfont,$trole,$ttype,$twhere,$tpstart,$tpend,$nochoose,$button,$switchserver);  
  $roletext{$envkey}=$roletext;   $roletext{$envkey}=$roletext;
  if (!$sortkey) {$sortkey=$twhere."\0".$envkey;}   if (!$sortkey) {$sortkey=$twhere."\0".$envkey;}
  $sortrole{$sortkey}=$envkey;   $sortrole{$sortkey}=$envkey;
Line 600  ENDHEADER Line 631  ENDHEADER
  } else {   } else {
     $r->print('<h2>'.&mt('Currently no active roles or courses').'</h2>');      $r->print('<h2>'.&mt('Currently no active roles or courses').'</h2>');
  }   }
  $r->print('</form></body></html>');   $r->print('</form>'.&Apache::loncommon::end_page());
  return OK;   return OK;
 # Is there only one choice?  # Is there only one choice?
     } elsif (($countactive==1) && ($env{'request.role'} eq 'cm')) {      } elsif (($countactive==1) && ($env{'request.role'} eq 'cm')) {
Line 609  ENDHEADER Line 640  ENDHEADER
  $r->print("</form>\n");   $r->print("</form>\n");
  $r->rflush();   $r->rflush();
  $r->print('<script>document.forms.rolechoice.submit();</script>');   $r->print('<script>document.forms.rolechoice.submit();</script>');
  $r->print('</body></html>');   $r->print(&Apache::loncommon::end_page());
  return OK;   return OK;
     }      }
 # More than one possible role  # More than one possible role
 # ----------------------------------------------------------------------- Table  # ----------------------------------------------------------------------- Table
     unless (($advanced) || ($nochoose)) {      unless (($advanced) || ($nochoose)) {
  $r->print("<h2>".&mt('Select a Course to Enter')."</h2>\n");   $r->print("<h2>".&mt('Select a Course/Group to Enter')."</h2>\n");
     }      }
     $r->print('<br /><table><tr>');      $r->print('<br /><table><tr>');
     unless ($nochoose) { $r->print('<th>&nbsp;</th>'); }      unless ($nochoose) { $r->print('<th>&nbsp;</th>'); }
     $r->print('<th>'.&mt('User Role').'</th><th>'.&mt('Extent').      $r->print('<th>'.&mt('User Role').'</th><th>'.&mt('Extent').
          '</th><th>'.&mt('Start').'</th><th>'.&mt('End').'</th></tr>'."\n");           '</th><th>'.&mt('Start').'</th><th>'.&mt('End').'</th></tr>'."\n");
     my $doheaders=-1;      my $doheaders=-1;
     foreach my $type ('Domain','Construction Space','Course','System') {      foreach my $type ('Domain','Construction Space','Course','Group','Unavailable','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 661  ENDHEADER Line 692  ENDHEADER
         $r->print(&coursepick_jscript());          $r->print(&coursepick_jscript());
         $r->print(&Apache::loncommon::coursebrowser_javascript());          $r->print(&Apache::loncommon::coursebrowser_javascript());
     }      }
     foreach my $type ('Construction Space','Domain','Course','System') {      foreach my $type ('Construction Space','Domain','Course','Group','Unavailable','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/) { 
Line 724  ENDHEADER Line 755  ENDHEADER
  $twhere='User: '.$trest.', Domain: '.$tdom;   $twhere='User: '.$trest.', Domain: '.$tdom;
     } else {      } else {
  $ttype='Course';   $ttype='Course';
                           if (defined($env{'course.'.$tdom.'_'.$trest.'.type'})) {
                               $ttype = $env{'course.'.$tdom.'_'.$trest.'.type'};
                           }
  $twhere=$env{'course.'.$tdom.'_'.$trest.'.description'};   $twhere=$env{'course.'.$tdom.'_'.$trest.'.description'};
  if ($tsec) {   if ($tsec) {
     $twhere.=' (Section/Group: '.$tsec.')';      $twhere.=' (Section: '.$tsec.')';
  }   }
     }      }
  } elsif ($tdom) {   } elsif ($tdom) {
Line 766  ENDHEADER Line 800  ENDHEADER
   $r->dir_config('lonVersion').'</i><br />'.    $r->dir_config('lonVersion').'</i><br />'.
   '<a href="/adm/logout">'.&mt('Logout').'</a></small></p>');    '<a href="/adm/logout">'.&mt('Logout').'</a></small></p>');
     }      }
     $r->print("</body></html>\n");      $r->print(&Apache::loncommon::end_page());
     return OK;      return OK;
 }  }
   
Line 796  sub role_status { Line 830  sub role_status {
 }  }
   
 sub build_roletext {  sub build_roletext {
     my ($trolecode,$tdom,$trest,$tstatus,$tryagain,$advanced,$tremark,$tbg,$tfont,$trole,$ttype,$twhere,$tpstart,$tpend,$nochoose,$button,$switchserver) = @_;      my ($trolecode,$tdom,$trest,$tstatus,$tryagain,$advanced,$tremark,$tbg,$tfont,$trole,$twhere,$tpstart,$tpend,$nochoose,$button,$switchserver) = @_;
     my $roletext='<tr bgcolor="'.$tbg.'">';      my $roletext='<tr bgcolor="'.$tbg.'">';
     my $is_dc=($trolecode =~ m/^dc\./);      my $is_dc=($trolecode =~ m/^dc\./);
     my $rowspan=($is_dc) ? ''      my $rowspan=($is_dc) ? ''
Line 846  sub build_roletext { Line 880  sub build_roletext {
 }  }
   
 sub check_privs {  sub check_privs {
     my ($cckey,$then,$now) = @_;      my ($cdom,$cnum,$then,$now) = @_;
       my $cckey = 'user.role.cc./'.$cdom.'/'.$cnum; 
     if ($env{$cckey}) {      if ($env{$cckey}) {
         my ($role,$where,$trolecode,$tstart,$tend,$tremark,$tstatus,$tpstart,$tpend,$tfont);          my ($role,$where,$trolecode,$tstart,$tend,$tremark,$tstatus,$tpstart,$tpend,$tfont);
         &role_status($cckey,$then,$now,\$role,\$where,\$trolecode,\$tstatus,\$tstart,\$tend);          &role_status($cckey,$then,$now,\$role,\$where,\$trolecode,\$tstatus,\$tstart,\$tend);
         unless (($tstatus eq 'is') || ($tstatus eq 'will_not')) {          unless (($tstatus eq 'is') || ($tstatus eq 'will_not')) {
             &set_privileges($1,$2);              &set_privileges($cdom,$cnum);
         }          }
     } else {      } else {
         &set_privileges($1,$2);          &set_privileges($cdom,$cnum);
     }      }
 }  }
   
Line 880  sub check_fordc { Line 915  sub check_fordc {
 }  }
   
 sub courselink {  sub courselink {
     my ($dcdom,$rowtype) = @_;      my ($dcdom,$rowtype,$selecttype) = @_;
     my $courseform=&Apache::loncommon::selectcourse_link      my $courseform=&Apache::loncommon::selectcourse_link
                      ('rolechoice','dccourse'.$rowtype.'_'.$dcdom,'dcdomain'.$rowtype.'_'.$dcdom,'coursedesc'.$rowtype.'_'.$dcdom,$dcdom);                     ('rolechoice','dccourse'.$rowtype.'_'.$dcdom,
                       'dcdomain'.$rowtype.'_'.$dcdom,'coursedesc'.$rowtype.'_'.
                       $dcdom,$dcdom,undef,$selecttype);
     my $hiddenitems = '<input type="hidden" name="dcdomain'.$rowtype.'_'.$dcdom.'" value="'.$dcdom.'" />'.      my $hiddenitems = '<input type="hidden" name="dcdomain'.$rowtype.'_'.$dcdom.'" value="'.$dcdom.'" />'.
                       '<input type="hidden" name="origdom'.$rowtype.'_'.$dcdom.'" value="'.$dcdom.'" />'.                        '<input type="hidden" name="origdom'.$rowtype.'_'.$dcdom.'" value="'.$dcdom.'" />'.
                       '<input type="hidden" name="dccourse'.$rowtype.'_'.$dcdom.'" value="" />'.                        '<input type="hidden" name="dccourse'.$rowtype.'_'.$dcdom.'" value="" />'.
Line 963  sub display_cc_role { Line 1000  sub display_cc_role {
             my $trolecode = 'cc./'.$1.'/'.$2;              my $trolecode = 'cc./'.$1.'/'.$2;
             my $trole = Apache::lonnet::plaintext('cc');              my $trole = Apache::lonnet::plaintext('cc');
             my $twhere;              my $twhere;
               my $ttype;
             my $tbg='#77FF77';              my $tbg='#77FF77';
             my $tfont='#003300';              my $tfont='#003300';
             my %newhash=&Apache::lonnet::coursedescription($tcourseid);              my %newhash=&Apache::lonnet::coursedescription($tcourseid);
Line 971  sub display_cc_role { Line 1009  sub display_cc_role {
                         ' <font size="-2">'.                          ' <font size="-2">'.
                         &Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$2,$1,$tfont).                          &Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$2,$1,$tfont).
                         '</font>';                          '</font>';
                   $ttype=$newhash{'type'};
                   if ($ttype eq 'Group') {
                       $trole = &Apache::loncommon::convert_role($trole,$ttype);
                   }
             } else {              } else {
                 $twhere=&mt('Currently not available');                  $twhere=&mt('Currently not available');
                 $env{'course.'.$tcourseid.'.description'}=$twhere;                  $env{'course.'.$tcourseid.'.description'}=$twhere;
                   $ttype = 'Unavailable';
             }              }
             $twhere.="<br />".&mt('Domain').":".$1;              $twhere.="<br />".&mt('Domain').":".$1;
             $roletext = &build_roletext($trolecode,$1,$2,'is',$tryagain,$advanced,'',$tbg,$tfont,$trole,&mt('Course'),$twhere,'','','',1,'');              $roletext = &build_roletext($trolecode,$1,$2,'is',$tryagain,$advanced,'',$tbg,$tfont,$trole,$twhere,'','','',1,'');
         }          }
     }      }
     return $roletext;      return ($roletext);
 }  }
   
 sub allcourses_row {  sub allcourses_row {
     my ($dcdom,$rowtype) = @_;      my ($dcdom,$rowtype) = @_;
     my $ccrole = Apache::lonnet::plaintext('cc');      my $ccrole = Apache::lonnet::plaintext('cc');
     my $selectlink = &courselink($dcdom,$rowtype);  
     my $output = '<tr bgcolor="#77FF77">'.      my $output = '<tr bgcolor="#77FF77">'.
  '<td colspan="5">'.                   ' <td colspan="5">';
  '<font color="#002200">'.$ccrole.'</font>'.      foreach my $type ('Course','Group') {
  ' <b>'.$selectlink.'</b>'.          my $selectlink = &courselink($dcdom,$rowtype,$type);
  ' from '.&mt('Domain').' '.$dcdom.          if ($type eq 'Group') {
  '<tr><td colspan="5" height="3"></td></tr>'."\n";              $ccrole = &Apache::loncommon::convert_role($ccrole,$type);
           }
           $output.= '<font color="#002200">'.$ccrole.'</font>'.
                 ' <b>'.$selectlink.'</b>'.
                 ' from '.&mt('Domain').' '.$dcdom.'<br />';
       }
       $output .= '</tr><tr><td colspan="5" height="3"></td></tr>'."\n";
     return $output;      return $output;
 }  }
   
 sub recent_filename {  sub recent_filename {
     my $area=shift;      my $area=shift;
     return 'nohist_recent_'.&Apache::lonnet::escape($area);      return 'nohist_recent_'.&escape($area);
 }  }
   
 sub set_privileges {  sub set_privileges {
Line 1021  sub set_privileges { Line 1069  sub set_privileges {
                          $env{'user.home'},                           $env{'user.home'},
                         "Role ".$role);                          "Role ".$role);
     &Apache::lonnet::appenv(      &Apache::lonnet::appenv(
                           'request.role'        => $role,                            'request.role'        => $spec,
                           'request.role.domain' => $dcdom,                            'request.role.domain' => $dcdom,
                           'request.course.sec'  => '');                            'request.course.sec'  => '');
     my $tadv=0;      my $tadv=0;
Line 1032  sub set_privileges { Line 1080  sub set_privileges {
 sub courseloadpage {  sub courseloadpage {
     my ($courseid) = @_;      my ($courseid) = @_;
     my $startpage;      my $startpage;
     my %entry_settings =      my %entry_settings = &Apache::lonnet::get('nohist_whatsnew',
               &Apache::lonnet::dump('nohist_whatsnew',$env{'user.domain'},        [$courseid.':courseinit']);
                                     $env{'user.name'},$courseid.':courseinit');  
     my ($tmp) = %entry_settings;      my ($tmp) = %entry_settings;
     unless ($tmp =~ /^Error/) {      unless ($tmp =~ /^error: 2 /) {
         $startpage = $entry_settings{$courseid.':courseinit'};          $startpage = $entry_settings{$courseid.':courseinit'};
     }      }
     if ($startpage eq '') {      if ($startpage eq '') {

Removed from v.1.140  
changed lines
  Added in v.1.152


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