Diff for /loncom/auth/lonroles.pm between versions 1.240.2.3 and 1.240.2.23

version 1.240.2.3, 2009/12/15 05:04:17 version 1.240.2.23, 2010/12/08 06:48:56
Line 138  use Apache::lonannounce; Line 138  use Apache::lonannounce;
 use Apache::lonlocal;  use Apache::lonlocal;
 use Apache::lonpageflip();  use Apache::lonpageflip();
 use Apache::lonnavdisplay();  use Apache::lonnavdisplay();
 use Apache::lonmainmenu();  use Apache::loncoursequeueadmin;
 use GDBM_File;  use GDBM_File;
 use LONCAPA qw(:DEFAULT :match);  use LONCAPA qw(:DEFAULT :match);
 use HTML::Entities;  use HTML::Entities;
Line 165  sub redirect_user { Line 165  sub redirect_user {
     my $start_page = &Apache::loncommon::start_page('Switching Role',undef,      my $start_page = &Apache::loncommon::start_page('Switching Role',undef,
                                                     {'redirect' => [1,$url],                                                      {'redirect' => [1,$url],
                                                      'bread_crumbs' => $brcrum,});                                                       'bread_crumbs' => $brcrum,});
       &Apache::lonhtmlcommon::clear_breadcrumbs();
     my $end_page   = &Apache::loncommon::end_page();      my $end_page   = &Apache::loncommon::end_page();
   
 # Note to style police:   # Note to style police: 
Line 449  ENDENTERKEY Line 450  ENDENTERKEY
   
     if (($cnum) && ($role ne 'ca') && ($role ne 'aa')) {      if (($cnum) && ($role ne 'ca') && ($role ne 'aa')) {
                         my $msg;                          my $msg;
                           if (&Apache::lonnet::allowed('adv') eq 'F') { $tadv=1; }
                           &Apache::lonnet::appenv({'request.role.adv'=>$tadv});
  my ($furl,$ferr)=   my ($furl,$ferr)=
     &Apache::lonuserstate::readmap($cdom.'/'.$cnum);      &Apache::lonuserstate::readmap($cdom.'/'.$cnum);
                           if ($custommenu) {
                               unless (($ferr) || ($env{'form.switchrole'})) {
                                   &Apache::lonnet::put('nohist_crslastlogin',{$env{'user.name'}.':'.$env{'user.domain'}.':'.$csec.':'.$role => $now},
                                                        $cdom,$cnum);
                               }
                           }
  if (($env{'form.orgurl'}) &&    if (($env{'form.orgurl'}) && 
     ($env{'form.orgurl'}!~/^\/adm\/flip/)) {      ($env{'form.orgurl'}!~/^\/adm\/flip/)) {
     my $dest=$env{'form.orgurl'};      my $dest=$env{'form.orgurl'};
Line 462  ENDENTERKEY Line 471  ENDENTERKEY
                                 }                                  }
                                 $dest .= 'symb='.$env{'form.symb'};                                  $dest .= 'symb='.$env{'form.symb'};
                             }                              }
     if (&Apache::lonnet::allowed('adv') eq 'F') { $tadv=1; }  
     &Apache::lonnet::appenv({'request.role.adv'=>$tadv});  
                             if (($ferr) && ($tadv)) {                              if (($ferr) && ($tadv)) {
  &error_page($r,$ferr,$dest);   &error_page($r,$ferr,$dest);
     } else {      } else {
Line 482  ENDENTERKEY Line 489  ENDENTERKEY
                     .'<p>'.&mt('Please try again.').'</p>'                      .'<p>'.&mt('Please try again.').'</p>'
                     .'<p>'.$ferr.'</p>';                      .'<p>'.$ferr.'</p>';
     }      }
     if (&Apache::lonnet::allowed('adv') eq 'F') { $tadv=1; }  
     &Apache::lonnet::appenv({'request.role.adv'=>$tadv});  
   
     if (($ferr) && ($tadv)) {      if (($ferr) && ($tadv)) {
  &error_page($r,$ferr,$furl);   &error_page($r,$ferr,$furl);
Line 495  ENDENTERKEY Line 500  ENDENTERKEY
     $courseid = substr($courseid, 1);      $courseid = substr($courseid, 1);
  }   }
  $courseid =~ s/\//_/;   $courseid =~ s/\//_/;
  if (($cdom ne 'gcitest') && (($role eq 'cc') || ($role eq 'co'))    if (($cdom !~ /^\w+citest$/) && (($role eq 'cc') || ($role eq 'co')) 
                                     && ($env{'course.' . $courseid .'.course.helper.not.run'})) {                                       && ($env{'course.' . $courseid .'.course.helper.not.run'})) { 
     $furl = "/adm/helper/course.initialization.helper";      $furl = "/adm/helper/course.initialization.helper";
     # Send the user to the course they selected      # Send the user to the course they selected
Line 519  ENDENTERKEY Line 524  ENDENTERKEY
     .$env{'request.course.sec'})      .$env{'request.course.sec'})
  ) {   ) {
  my $startpage = &courseloadpage($courseid);   my $startpage = &courseloadpage($courseid);
  unless (($startpage eq 'firstres') || ($cdom eq 'gcitest')) {   unless (($startpage eq 'firstres') || ($cdom =~ /^\w+citest$/)) {
     $msg = &mt('Entering [_1] ...',      $msg = &mt('Entering [_1] ...',
        $env{'course.'.$courseid.'.description'});         $env{'course.'.$courseid.'.description'});
     &redirect_user($r,&mt('New in course'),      &redirect_user($r,&mt('New in course'),
Line 534  ENDENTERKEY Line 539  ENDENTERKEY
 # Guess not ...  # Guess not ...
     $furl=&Apache::lonpageflip::first_accessible_resource();      $furl=&Apache::lonpageflip::first_accessible_resource();
  }   }
                                 if (($cdom eq 'gcitest') && ($custommenu)) {                                  if (($cdom =~ /^\w+citest$/) && ($custommenu)) {
                                     $furl = '/adm/navmaps';                                      $furl = '/adm/navmaps';
                                 }                                  }
                                 $msg = &mt('Entering [_1] ...',                                  $msg = &mt('Entering [_1] ...',
Line 587  ENDENTERKEY Line 592  ENDENTERKEY
     return OK if $r->header_only;      return OK if $r->header_only;
   
     my ($crumbtext,$pagetitle,$recent,$show_course);      my ($crumbtext,$pagetitle,$recent,$show_course);
     my $noscript='<span class="LC_error">'.&mt('Use of LON-CAPA requires Javascript to be enabled in your web browser.').'<br />'.&mt('As this is not the case, most functionality in the system will be unavailable.').'</span><br />';      $show_course=&Apache::loncommon::show_course();
       my $noscript='<br /><span class="LC_error">'.&mt('Use of LON-CAPA requires Javascript to be enabled in your web browser.').'<br />'.&mt('As this is not the case, most functionality in the system will be unavailable.').'</span><br />';
     if ($custommenu) {      if ($custommenu) {
         my $start_page = &Apache::loncommon::start_page('Main Menu',undef,          my $start_page = &Apache::loncommon::start_page('Main Menu');
                                                         {'bread_crumbs' => 1});  
         $r->print(<<"ENDCUSTOM");          $r->print(<<"ENDCUSTOM");
 $start_page  $start_page
 <br />  
 <noscript>  <noscript>
 $noscript  $noscript
 </noscript>  </noscript>
Line 602  ENDCUSTOM Line 606  ENDCUSTOM
         $crumbtext = 'User Roles';          $crumbtext = 'User Roles';
         $pagetitle = 'My Roles';          $pagetitle = 'My Roles';
         $recent = &mt('Recent Roles');          $recent = &mt('Recent Roles');
         $show_course=&Apache::loncommon::show_course();          my $standby=&mt('Role selected. Please stand by.');
         if ($show_course) {          if ($show_course) {
             $crumbtext = 'Courses';              $crumbtext = 'Courses';
             $pagetitle = 'My Courses';              $pagetitle = 'My Courses';
             $recent = &mt('Recent Courses');              $recent = &mt('Recent Courses');
               $standby = &mt('Course selected. Please stand by.');
         }          }
         my $brcrum =[{href=>"/adm/roles",text=>$crumbtext}];          my $brcrum = [{ href    => '/adm/roles',
                            text    => $crumbtext,},
                        ];
           my $args;
           if ($numdc) {
               $args = {bread_crumbs => $brcrum};
           } else {
               $args = {bread_crumbs          => $brcrum,
                        bread_crumbs_menulink => '_nomenu'};
           }
           my $start_page=&Apache::loncommon::start_page($pagetitle,undef,$args);
         my $swinfo=&Apache::lonmenu::rawconfig();          my $swinfo=&Apache::lonmenu::rawconfig();
         my $start_page=&Apache::loncommon::start_page($pagetitle,undef,{bread_crumbs=>$brcrum});  
         my $standby=&mt('Role selected. Please stand by.');  
         $standby=~s/\n/\\n/g;          $standby=~s/\n/\\n/g;
         $r->print(<<ENDHEADER);          $r->print(<<ENDHEADER);
 $start_page  $start_page
 <br />  
 <noscript>  <noscript>
 $noscript  $noscript
 </noscript>  </noscript>
Line 723  ENDHEADER Line 735  ENDHEADER
   
     $refresh = $now;      $refresh = $now;
     &Apache::lonnet::appenv({'user.refresh.time'  => $refresh});      &Apache::lonnet::appenv({'user.refresh.time'  => $refresh});
       if (!$countactive && !$countfuture) {
           if (&Apache::loncommon::new_roles_update()) {
               ($countactive,$countfuture,$inrole,$possiblerole) =
                   &gather_roles($then,$refresh,$now,$reinit,$nochoose,\%roletext,\%sortrole,
                                 \%roleclass,\%futureroles,\%timezones);
           }
       }
     if ($custommenu) {      if ($custommenu) {
         my %courses = &Apache::loncommon::existing_gcitest_courses();          if ($env{'form.destinationurl'} eq '/adm/ci_info') {
               $r->print(&ci_info_page()).
               &Apache::loncommon::end_page();
               return OK;
           }
           my %courses = &Apache::loncommon::existing_gcitest_courses('cc');
         $env{'browser.interface'}='faketextual';          $env{'browser.interface'}='faketextual';
         $env{'environment.remote'}='off';          $env{'environment.remote'}='off';
         my $numcourses = keys(%courses);          my $numcourses = keys(%courses);
         my $switcher;          my $switcher;
         if ($numcourses > 0) {          if ($numcourses > 0) {
             $switcher = &Apache::lonmainmenu::gcitest_switcher(%courses);              $switcher = &Apache::loncommon::gcitest_switcher('cc',%courses);
             my $current;  
             if ($env{'request.course.id'}) {  
                 $current = 'cc./'.$env{'course.'.$env{'request.course.id'}.'.domain'}.  
                            '/'.$env{'course.'.$env{'request.course.id'}.'.num'};  
             }  
             my $switcher_js = &Apache::lonmainmenu::gcitest_switcher_js($current,$numcourses);  
             $r->print(<<"ENDSCRIPT");  
 <script type="text/javascript">  
 // <![CDATA[  
 $switcher_js  
 // ]]>  
 </script>  
 ENDSCRIPT  
         }          }
         $r->print(&Apache::lonmenu::inlinemenu('gcicustom',$switcher).          $r->print(&Apache::lonmenu::inlinemenu('gcicustom',$switcher).
                   &Apache::loncommon::end_page());                    &Apache::loncommon::end_page());
         return OK;          return OK;
       } else {
           if ($env{'form.destinationurl'} eq '/adm/ci_info') {
               delete($env{'form.destinationurl'});
           }
     }      }
     if ($env{'user.adv'}) {      if ($env{'user.adv'}) {
         $r->print('<p><label><input type="checkbox" name="showall"');          $r->print('<p><label><input type="checkbox" name="showall"');
Line 757  ENDSCRIPT Line 772  ENDSCRIPT
                  .'</p>');                   .'</p>');
     } else {      } else {
         if ($countactive > 0) {          if ($countactive > 0) {
             &queued_selfenrollment($r);              $r->print(&Apache::loncoursequeueadmin::queued_selfenrollment());
             my $domdesc = &Apache::lonnet::domain($env{'user.domain'},'description');              my $domdesc = &Apache::lonnet::domain($env{'user.domain'},'description');
             my $esc_dom = &HTML::Entities::encode($env{'user.domain'},'"<>&');               my $esc_dom = &HTML::Entities::encode($env{'user.domain'},'"<>&'); 
             $r->print(              unless ($env{'user.domain'} =~ /^\w+citest$/) {
                 '<p>'                  $r->print(
                .&mt('[_1]Visit the [_2]Course/Community Catalog[_3]'                      '<p>'
                    .' to view all [_4] LON-CAPA courses and communities.'                     .&mt('[_1]Visit the [_2]Course/Community Catalog[_3]'
                    ,'<b>'                         .' to view all [_4] LON-CAPA courses and communities.'
                    ,'<a href="/adm/coursecatalog?showdom='.$esc_dom.'">'                         ,'<b>'
                    ,'</a></b>',$domdesc)                         ,'<a href="/adm/coursecatalog?showdom='.$esc_dom.'">'
                .'<br />'                         ,'</a></b>',$domdesc)
                .&mt('If a course or community is [_1]not[_2] in your list of current courses and communities below,'                     .'<br />'
                      .&mt('If a course or community is [_1]not[_2] in your list of current courses and communities below,'
                    .' you may be able to enroll if self-enrollment is permitted.'                     .' you may be able to enroll if self-enrollment is permitted.'
                    ,'<b>','</b>')                     ,'<b>','</b>')
                .'</p>'                     .'</p>'
             );                  );
               }
         }          }
     }      }
   
Line 781  ENDSCRIPT Line 798  ENDSCRIPT
  if ($inrole) {   if ($inrole) {
     $r->print('<h2>'.&mt('Currently no additional roles, courses or communities').'</h2>');      $r->print('<h2>'.&mt('Currently no additional roles, courses or communities').'</h2>');
  } else {   } else {
     $r->print('<h2>'.&mt('Currently no active roles, courses or communities').'</h2>');              if ($show_course) {
                   if ($env{'user.domain'} =~ /^\w+citest$/) {
                       $r->print('<h2>'.&mt('Currently no active Concept Tests').'</h2>');
                   } elsif ($env{'user.domain'} =~ /^\w+ci$/) {
                       my $inventory = uc($env{'user.domain'});
                       $r->print('<h2>'.&mt('Currently not assigned as a [_1] contributor',$inventory).'</h2>');
                   }
               } else {
           $r->print('<h2>'.&mt('Currently no active roles, courses or communities').'</h2>');
               }
  }   }
         &findcourse_advice($r);          unless ($env{'user.domain'} =~ /^\w+citest$/) {
         &requestcourse_advice($r);               &findcourse_advice($r);
               &requestcourse_advice($r);
           }
  $r->print('</form>');   $r->print('</form>');
         if ($countfuture) {          if ($countfuture) {
             $r->print(&mt('The following [quant,_1,role,roles] will become active in the future:',$countfuture));              if ($show_course) {
                   if ($env{'user.domain'} =~ /^\w+citest$/) {
                       $r->print(&mt('The following [quant,_1,Concept Test] will be available in the future:',$countfuture));
                   } else {
                       $r->print(&mt('The following [quant,_1,course] will become active in the future:',$countfuture));
                   }
               } else {
                   $r->print(&mt('The following [quant,_1,role,roles] will become active in the future:',$countfuture));
               }
             my $doheaders = &roletable_headers($r,\%roleclass,\%sortrole,              my $doheaders = &roletable_headers($r,\%roleclass,\%sortrole,
                                                $nochoose);                                                 $nochoose);
             &print_rolerows($r,$doheaders,\%roleclass,\%sortrole,\%dcroles,              &print_rolerows($r,$doheaders,\%roleclass,\%sortrole,\%dcroles,
Line 836  ENDSCRIPT Line 872  ENDSCRIPT
         }          }
     }      }
 # ----------------------------------------------------------------------- Table  # ----------------------------------------------------------------------- Table
     unless ((!&Apache::loncommon::show_course()) || ($nochoose) || ($countactive==1)) {      unless ((!$show_course) || ($nochoose) || ($countactive==1)) {
  $r->print("<h2>".&mt('Select a Course to Enter')."</h2>\n");   $r->print("<h2>".&mt('Select a Course to Enter')."</h2>\n");
     }      }
     if ($env{'form.destinationurl'}) {      if ($env{'form.destinationurl'}) {
Line 937  ENDSCRIPT Line 973  ENDSCRIPT
     return OK;      return OK;
 }  }
   
   sub ci_info_page {
       my %longname = (
                        GCI  => 'Geoscience Concept Inventory',
                        SLCI => 'Science Literacy Concept Inventory',
                      );
       my $inventory = uc($env{'user.domain'});
       my %features = (
                        review     => "Review and comment on existing $inventory questions",
                        submit     => "Submit $inventory questions of your own",
                        managetest => 'Create an online test for your students',
                        tutorial   => 'View tutorials on creating online tests',
                      );
       my $tabs = &Apache::loncommon::ci_tabs($env{'user.domain'});
       my %info = (
                    GCI => '<p>For more information about writing and reviewing Concept Inventory questions please refer to the <a href="/res/gci/gci/internal/pdfs/GCIWorkbook.pdf">GCI Workbook</a>.</p>',
                  ); 
       my $output = <<"END";
   <br clear="all">
   <div>
   <h2>Welcome to the $longname{$inventory} WebCenter</h2>
   <p>
   Use the tabs to navigate the WebCenter and...
   <ul>
   END
       if (ref($tabs) eq 'ARRAY') {
           foreach my $tab (@{$tabs}) {
               if ($features{$tab}) {
                   $output .= '<li>'.$features{$tab}.'</li>'."\n";
               }
           }
       }
       $output .= <<"END";
   </ul>
   </p>
   $info{$inventory}
   </div>
   END
   
   }
   
 sub gather_roles {  sub gather_roles {
     my ($then,$refresh,$now,$reinit,$nochoose,$roletext,$sortrole,$roleclass,$futureroles,$timezones) = @_;      my ($then,$refresh,$now,$reinit,$nochoose,$roletext,$sortrole,$roleclass,$futureroles,$timezones) = @_;
     my ($countactive,$countfuture,$inrole,$possiblerole) = (0,0,0,'');      my ($countactive,$countfuture,$inrole,$possiblerole) = (0,0,0,'');
Line 1042  sub gather_roles { Line 1118  sub gather_roles {
                 } elsif ($trest) {                  } elsif ($trest) {
                     my $tcourseid=$tdom.'_'.$trest;                      my $tcourseid=$tdom.'_'.$trest;
                     $ttype = &Apache::loncommon::course_type($tcourseid);                      $ttype = &Apache::loncommon::course_type($tcourseid);
                     $trole = &Apache::lonnet::plaintext($role,$ttype);                      $trole = &Apache::lonnet::plaintext($role,$ttype,$tcourseid);
                     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 1061  sub gather_roles { Line 1137  sub gather_roles {
         &Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$trest,$tdom).          &Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$trest,$tdom).
                               '</span>';                                '</span>';
                             $ttype = $newhash{'type'};                              $ttype = $newhash{'type'};
                             $trole = &Apache::lonnet::plaintext($role,$ttype);                              $trole = &Apache::lonnet::plaintext($role,$ttype,$tcourseid);
                         } else {                          } else {
                             $twhere=&mt('Currently not available');                              $twhere=&mt('Currently not available');
                             $env{'course.'.$tcourseid.'.description'}=$twhere;                              $env{'course.'.$tcourseid.'.description'}=$twhere;
Line 1239  sub findcourse_advice { Line 1315  sub findcourse_advice {
     } else {      } else {
         $r->print(&mt('If you were expecting to see an active role listed for a particular course, that course may not have been created yet.').'<br />');          $r->print(&mt('If you were expecting to see an active role listed for a particular course, that course may not have been created yet.').'<br />');
     }      }
     $r->print('<h3>'.&mt('Self-Enrollment').'</h3>'.      my $queued = &Apache::loncoursequeueadmin::queued_selfenrollment();
               '<p>'.&mt('The [_1]Course/Community Catalog[_2] provides information about all [_3] classes for which LON-CAPA courses have been created, as well as any communities in the domain.','<a href="/adm/coursecatalog?showdom='.$esc_dom.'">','</a>',$domdesc).'<br />');      if ($queued) {
     $r->print(&mt('You can search for courses and communities which permit self-enrollment, if you would like to enroll in one.').'</p>');          $r->print($queued);
     &queued_selfenrollment($r);      } else {
           $r->print(&mt('You have no request for contributor access pending approval by the GCI WebCenter team.').'<ul>'.
               '<li>'.&mt('This may mean that action was taken on your request in the time since your most recent log-in.[_1]View [_2]Message[_3] to see if this is the case.','<br />','<a href="/adm/communicate">','</a>').'</li>'.
               '<li>'.&mt('If you logout and log-in again you may find you now have access to the Geoscience Concept Inventory, as a contributor.').'</li>'.
              '</ul>');
       }
     return;      return;
 }  }
   
Line 1299  sub requestcourse_advice { Line 1380  sub requestcourse_advice {
     return;      return;
 }  }
   
 sub queued_selfenrollment {  
     my ($r) = @_;  
     my %selfenrollrequests = &Apache::lonnet::dump('selfenrollrequests');  
     my %reqs_by_date;  
     foreach my $item (keys(%selfenrollrequests)) {  
         if (ref($selfenrollrequests{$item}) eq 'HASH') {  
             if ($selfenrollrequests{$item}{'status'} eq 'request') {  
                 if ($selfenrollrequests{$item}{'timestamp'}) {  
                     push(@{$reqs_by_date{$selfenrollrequests{$item}{'timestamp'}}},$item);  
                 }  
             }   
         }  
     }  
     if (keys(%reqs_by_date)) {  
         my $rolename = &Apache::lonnet::plaintext('st');  
         $r->print('<b>'.&mt('Enrollment requests pending Course Coordinator approval').'</b><br />'.  
                   &Apache::loncommon::start_data_table().  
                   &Apache::loncommon::start_data_table_header_row().  
                   '<th>'.&mt('Date requested').'</th><th>'.&mt('Course title').'</th>'.  
                   '<th>'.&mt('User role').'</th><th>'.&mt('Section').'</th>'.  
                  &Apache::loncommon::end_data_table_header_row());  
         my @sorted = sort { $a <=> $b } (keys(%reqs_by_date));  
         foreach my $item (@sorted) {  
             if (ref($reqs_by_date{$item}) eq 'ARRAY') {  
                 foreach my $crs (@{$reqs_by_date{$item}}) {  
                     my %courseinfo = &Apache::lonnet::coursedescription($crs);  
                     my $usec = $selfenrollrequests{$crs}{'section'};  
                     if ($usec eq '') {  
                         $usec = &mt('No section');   
                     }  
                     $r->print(&Apache::loncommon::start_data_table_row().  
                              '<td>'.&Apache::lonlocal::locallocaltime($item).'</td>'.  
                              '<td>'.$courseinfo{'description'}.'</td>'.  
                              '<td>'.$rolename.'</td><td>'.$usec.'</td>'.  
                              &Apache::loncommon::end_data_table_row());  
                 }  
             }  
         }  
         $r->print(&Apache::loncommon::end_data_table());  
     }  
     return;  
 }  
   
 sub privileges_info {  sub privileges_info {
     my ($which) = @_;      my ($which) = @_;
     my $output;      my $output;
Line 1682  sub display_cc_role { Line 1720  sub display_cc_role {
                 $twhere=&mt('Currently not available');                  $twhere=&mt('Currently not available');
                 $env{'course.'.$tcourseid.'.description'}=$twhere;                  $env{'course.'.$tcourseid.'.description'}=$twhere;
             }              }
             my $trole = &Apache::lonnet::plaintext($ccrole,$ttype);              my $trole = &Apache::lonnet::plaintext($ccrole,$ttype,$tcourseid);
             $twhere.="<br />".&mt('Domain').":".$1;              $twhere.="<br />".&mt('Domain').":".$1;
             ($roletext,$roletext_end) = &build_roletext($trolecode,$1,$2,'is',$tryagain,$advanced,'',$tbg,$trole,$twhere,'','','',1,'');              ($roletext,$roletext_end) = &build_roletext($trolecode,$1,$2,'is',$tryagain,$advanced,'',$tbg,$trole,$twhere,'','','',1,'');
         }          }

Removed from v.1.240.2.3  
changed lines
  Added in v.1.240.2.23


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