Diff for /loncom/auth/lonroles.pm between versions 1.256 and 1.256.2.8

version 1.256, 2010/08/01 18:34:19 version 1.256.2.8, 2014/05/05 11:37:41
Line 57  course they should act on, etc. Both in Line 57  course they should act on, etc. Both in
 handler determines via C<lonnet>'s C<&allowed> function that a certain  handler determines via C<lonnet>'s C<&allowed> function that a certain
 action is not allowed, C<lonroles> is used as error handler. This  action is not allowed, C<lonroles> is used as error handler. This
 allows the user to select another role which may have permission to do  allows the user to select another role which may have permission to do
 what they were trying to do.  what they were trying to do. C<lonroles> can also be accessed via the
   B<CRS> button in the Remote Control. 
   
 =begin latex  =begin latex
   
Line 141  use Apache::loncoursequeueadmin; Line 142  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;
    
   
 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 $navwindow;
       if ($launch_nav eq 'on') {
           $navwindow.=&Apache::lonnavdisplay::launch_win('now',undef,undef,
                                                          ($url =~ m-^/adm/whatsnew-));
       } else {
           $navwindow.=&Apache::lonnavmaps::close();
       }
   
     # Breadcrumbs      # Breadcrumbs
     my $brcrum = [{'href' => $url,      my $brcrum = [{'href' => $url,
Line 163  sub redirect_user { Line 172  sub redirect_user {
     $url=~s/ /\%20/g;      $url=~s/ /\%20/g;
     $r->print(<<ENDREDIR);      $r->print(<<ENDREDIR);
 $start_page  $start_page
   <script type="text/javascript">
   // <![CDATA[
   $swinfo
   // ]]>
   </script>
   $navwindow
 <p>$msg</p>  <p>$msg</p>
 $end_page  $end_page
 ENDREDIR  ENDREDIR
Line 542  ENDENTERKEY Line 557  ENDENTERKEY
                                         }                                          }
                                         &redirect_user($r, &mt('Entering [_1]',                                          &redirect_user($r, &mt('Entering [_1]',
                                                        $env{'course.'.$courseid.'.description'}),                                                         $env{'course.'.$courseid.'.description'}),
                                                        $dest, $msg);                                                         $dest, $msg,
                                                          $env{'environment.remotenavmap'});
                                         return OK;                                          return OK;
                                     }                                      }
     if (&Apache::lonnet::allowed('whn',      if (&Apache::lonnet::allowed('whn',
Line 555  ENDENTERKEY Line 571  ENDENTERKEY
  unless ($startpage eq 'firstres') {            unless ($startpage eq 'firstres') {         
     $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'),
                                        '/adm/whatsnew?refpage=start', $msg);                                                             '/adm/whatsnew?refpage=start',$msg,
                                                              $env{'environment.remotenavmap'});
     return OK;      return OK;
  }   }
     }      }
  }   }
 # Are we allowed to look at the first resource?  # Are we allowed to look at the first resource?
  if ($furl !~ m|^/adm/|) {   if (($furl !~ m|^/adm/|) || 
                                       (($env{'environment.remotenavmap'} eq 'on') && 
                                        ($furl =~ m{^/adm/navmaps}))) {
 # Guess not ...  # Guess not ...
     $furl=&Apache::lonpageflip::first_accessible_resource();      $furl=&Apache::lonpageflip::first_accessible_resource();
  }   }
                                 $msg = &mt('Entering [_1] ...',                                  $msg = &mt('Entering [_1] ...',
    $env{'course.'.$courseid.'.description'});     $env{'course.'.$courseid.'.description'});
  &redirect_user($r, &mt('Entering [_1]',                                  &redirect_user($r,&mt('Entering [_1]',
                                $env{'course.'.$courseid.'.description'}),                                                        $env{'course.'.$courseid.'.description'}),
                                $furl, $msg);                                                 $furl,$msg,
                                                  $env{'environment.remotenavmap'});
     }      }
     return OK;      return OK;
  }   }
Line 730  ENDHEADER Line 750  ENDHEADER
         $r->print('<input type="hidden" name="selectrole" value="1" />');          $r->print('<input type="hidden" name="selectrole" value="1" />');
         $r->print('<input type="hidden" name="newrole" value="" />');          $r->print('<input type="hidden" name="newrole" value="" />');
     }      }
       $r->rflush();
   
     my (%roletext,%sortrole,%roleclass,%futureroles,%timezones);      my (%roletext,%sortrole,%roleclass,%futureroles,%timezones);
     my ($countactive,$countfuture,$inrole,$possiblerole) =       my ($countactive,$countfuture,$inrole,$possiblerole) = 
Line 845  ENDHEADER Line 866  ENDHEADER
     } elsif ($numdc > 0) {      } elsif ($numdc > 0) {
                 unless ($role =~/^error\:/) {                  unless ($role =~/^error\:/) {
                     my ($roletext,$role_text_end) = &display_cc_role('user.role.'.$role);                      my ($roletext,$role_text_end) = &display_cc_role('user.role.'.$role);
                     $output.= &Apache::loncommon::start_data_table_row().                      if ($roletext) {
                               $roletext.                          $output.= &Apache::loncommon::start_data_table_row().
                               &Apache::loncommon::end_data_table_row().                                    $roletext.
                               &Apache::loncommon::continue_data_table_row().                                    &Apache::loncommon::end_data_table_row();
                               $role_text_end.                          if ($role_text_end) {
                               &Apache::loncommon::end_data_table_row();                              $output .= &Apache::loncommon::continue_data_table_row().
                                          $role_text_end.
                                          &Apache::loncommon::end_data_table_row();
                           }
                       }
                 }                  }
             }              }
  }   }
Line 931  sub gather_roles { Line 956  sub gather_roles {
             &Apache::lonnet::role_status($envkey,$then,$refresh,$now,\$role,\$where,              &Apache::lonnet::role_status($envkey,$then,$refresh,$now,\$role,\$where,
                                          \$trolecode,\$tstatus,\$tstart,\$tend);                                           \$trolecode,\$tstatus,\$tstart,\$tend);
             next if (!defined($role) || $role eq '' || $role =~ /^gr/);              next if (!defined($role) || $role eq '' || $role =~ /^gr/);
             my $timezone = &role_timezone($where,$timezones);  
             $tremark='';              $tremark='';
             $tpstart='&nbsp;';              $tpstart='&nbsp;';
             $tpend='&nbsp;';              $tpend='&nbsp;';
             if ($tstart) {  
                 $tpstart=&Apache::lonlocal::locallocaltime($tstart,$timezone);  
             }  
             if ($tend) {  
                 $tpend=&Apache::lonlocal::locallocaltime($tend,$timezone);  
             }  
             if ($env{'request.role'} eq $trolecode) {              if ($env{'request.role'} eq $trolecode) {
                 $tstatus='selected';                  $tstatus='selected';
             }              }
Line 949  sub gather_roles { Line 967  sub gather_roles {
                 || ($tstatus eq 'selected')                  || ($tstatus eq 'selected')
                 || ($tstatus eq 'future')                  || ($tstatus eq 'future')
                 || ($env{'form.showall'})) {                  || ($env{'form.showall'})) {
                   my $timezone = &role_timezone($where,$timezones);
                   if ($tstart) {
                       $tpstart=&Apache::lonlocal::locallocaltime($tstart,$timezone);
                   }
                   if ($tend) {
                       $tpend=&Apache::lonlocal::locallocaltime($tend,$timezone);
                   }
                 if ($tstatus eq 'is') {                  if ($tstatus eq 'is') {
                     $tbg='LC_roles_is';                      $tbg='LC_roles_is';
                     $possiblerole=$trolecode;                      $possiblerole=$trolecode;
Line 1032  sub gather_roles { Line 1057  sub gather_roles {
                                     '</span>';                                      '</span>';
                             unless ($home && grep(/^\Q$home\E$/,@ids) && $loncaparev eq '') {                              unless ($home && grep(/^\Q$home\E$/,@ids) && $loncaparev eq '') {
                                 my $required = $env{'course.'.$tcourseid.'.internal.releaserequired'};                                  my $required = $env{'course.'.$tcourseid.'.internal.releaserequired'};
                                 ($switchserver,$switchwarning) =                                   if ($required ne '') {
                                     &check_release_required($loncaparev,$tcourseid,$trolecode,$required);                                      ($switchserver,$switchwarning) = 
                                 if ($switchserver || $switchwarning) {                                          &check_release_required($loncaparev,$tcourseid,$trolecode,$required);
                                     $button = 0;                                      if ($switchserver || $switchwarning) {
                                           $button = 0;
                                       }
                                 }                                  }
                             }                              }
                         }                          }
Line 1053  sub gather_roles { Line 1080  sub gather_roles {
                             my $home = $newhash{'home'};                              my $home = $newhash{'home'};
                             unless ($home && grep(/^\Q$home\E$/,@ids) && $loncaparev eq '') {                              unless ($home && grep(/^\Q$home\E$/,@ids) && $loncaparev eq '') {
                                 my $required = $newhash{'internal.releaserequired'};                                  my $required = $newhash{'internal.releaserequired'};
                                 ($switchserver,$switchwarning) =                                  if ($required ne '') {
                                     &check_release_required($loncaparev,$tcourseid,$trolecode,$required);                                      ($switchserver,$switchwarning) =
                                 if ($switchserver || $switchwarning) {                                          &check_release_required($loncaparev,$tcourseid,$trolecode,$required);
                                     $button = 0;                                      if ($switchserver || $switchwarning) {
                                           $button = 0;
                                       }
                                 }                                  }
                             }                              }
                         } else {                          } else {
Line 1102  sub role_timezone { Line 1131  sub role_timezone {
             my $cnum = $2;              my $cnum = $2;
             if ($cdom && $cnum) {              if ($cdom && $cnum) {
                 if (!exists($timezones->{$cdom.'_'.$cnum})) {                  if (!exists($timezones->{$cdom.'_'.$cnum})) {
                     my %timehash =                      my $tz;
                         &Apache::lonnet::get('environment',['timezone'],$cdom,$cnum);                      if ($env{'course.'.$cdom.'_'.$cnum.'.description'}) {
                     if ($timehash{'timezone'} eq '') {                          $tz = $env{'course.'.$cdom.'_'.$cnum.'.timezone'};
                       } else {
                           my %timehash =
                               &Apache::lonnet::get('environment',['timezone'],$cdom,$cnum);
                           $tz = $timehash{'timezone'};
                       }
                       if ($tz eq '') {
                         if (!exists($timezones->{$cdom})) {                          if (!exists($timezones->{$cdom})) {
                             my %domdefaults =                               my %domdefaults = 
                                 &Apache::lonnet::get_domain_defaults($cdom);                                  &Apache::lonnet::get_domain_defaults($cdom);
Line 1117  sub role_timezone { Line 1152  sub role_timezone {
                         $timezones->{$cdom.'_'.$cnum} = $timezones->{$cdom};                          $timezones->{$cdom.'_'.$cnum} = $timezones->{$cdom};
                     } else {                      } else {
                         $timezones->{$cdom.'_'.$cnum} =                           $timezones->{$cdom.'_'.$cnum} = 
                             &Apache::lonlocal::gettimezone($timehash{'timezone'});                              &Apache::lonlocal::gettimezone($tz);
                     }                      }
                 }                  }
                 $timezone = $timezones->{$cdom.'_'.$cnum};                  $timezone = $timezones->{$cdom.'_'.$cnum};
Line 1564  sub check_release_required { Line 1599  sub check_release_required {
     my ($switchserver,$warning);      my ($switchserver,$warning);
     if ($required ne '') {      if ($required ne '') {
         my ($reqdmajor,$reqdminor) = ($required =~ /^(\d+)\.(\d+)$/);          my ($reqdmajor,$reqdminor) = ($required =~ /^(\d+)\.(\d+)$/);
         my ($major,$minor) = ($loncaparev =~ /^\'?(\d+)\.(\d+)\.[\d.\-]+\'?$/);          my ($major,$minor) = ($loncaparev =~ /^\'?(\d+)\.(\d+)\.[\w.\-]+\'?$/);
         if ($reqdmajor ne '' && $reqdminor ne '') {          if ($reqdmajor ne '' && $reqdminor ne '') {
             my $otherserver;              my $otherserver;
             if (($major eq '' && $minor eq '') ||               if (($major eq '' && $minor eq '') || 
                 (($reqdmajor > $major) || (($reqdmajor == $major) && ($reqdminor > $minor)))) {                  (($reqdmajor > $major) || (($reqdmajor == $major) && ($reqdminor > $minor)))) {
                 my ($userdomserver) = &Apache::lonnet::choose_server($env{'user.domain'});                  my ($userdomserver) = &Apache::lonnet::choose_server($env{'user.domain'},undef,$required,1);
                 my $switchlcrev =                   my $switchlcrev = 
                     &Apache::lonnet::get_server_loncaparev($env{'user.domain'},                      &Apache::lonnet::get_server_loncaparev($env{'user.domain'},
                                                            $userdomserver);                                                             $userdomserver);
                 my ($swmajor,$swminor) = ($switchlcrev =~ /^\'?(\d+)\.(\d+)\.[\d.\-]+\'?$/);                  my ($swmajor,$swminor) = ($switchlcrev =~ /^\'?(\d+)\.(\d+)\.[\w.\-]+\'?$/);
                 if (($swmajor eq '' && $swminor eq '') || ($reqdmajor > $swmajor) ||                   if (($swmajor eq '' && $swminor eq '') || ($reqdmajor > $swmajor) || 
                     (($reqdmajor == $swmajor) && ($reqdminor > $swminor))) {                      (($reqdmajor == $swmajor) && ($reqdminor > $swminor))) {
                     my $cdom = $env{'course.'.$tcourseid.'.domain'};                      my $cdom = $env{'course.'.$tcourseid.'.domain'};
                     if ($cdom ne $env{'user.domain'}) {                      if ($cdom ne $env{'user.domain'}) {
                         my ($coursedomserver,$coursehostname) = &Apache::lonnet::choose_server($cdom);                           my ($coursedomserver,$coursehostname) = &Apache::lonnet::choose_server($cdom,undef,$required,1); 
                         my $serverhomeID = &Apache::lonnet::get_server_homeID($coursehostname);                          my $serverhomeID = &Apache::lonnet::get_server_homeID($coursehostname);
                         my $serverhomedom = &Apache::lonnet::host_domain($serverhomeID);                          my $serverhomedom = &Apache::lonnet::host_domain($serverhomeID);
                         my %defdomdefaults = &Apache::lonnet::get_domain_defaults($serverhomedom);                          my %defdomdefaults = &Apache::lonnet::get_domain_defaults($serverhomedom);
Line 1728  sub display_cc_role { Line 1763  sub display_cc_role {
             my %newhash=&Apache::lonnet::coursedescription($tcourseid);              my %newhash=&Apache::lonnet::coursedescription($tcourseid);
             if (%newhash) {              if (%newhash) {
                 $twhere=$newhash{'description'}.                  $twhere=$newhash{'description'}.
                         ' <span style="LC_fontsize_small">'.                          ' <span class="LC_fontsize_small">'.
                         &Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$trest,$tdom).                          &Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$trest,$tdom).
                         '</span>';                          '</span>';
                 $ttype = $newhash{'type'};                  $ttype = $newhash{'type'};
Line 1737  sub display_cc_role { Line 1772  sub display_cc_role {
                 $env{'course.'.$tcourseid.'.description'}=$twhere;                  $env{'course.'.$tcourseid.'.description'}=$twhere;
             }              }
             my $trole = &Apache::lonnet::plaintext($ccrole,$ttype,$tcourseid);              my $trole = &Apache::lonnet::plaintext($ccrole,$ttype,$tcourseid);
             $twhere.="<br />".&mt('Domain').":".$1;              $twhere.="<br />".&mt('Domain').":".$tdom;
             ($roletext,$roletext_end) = &build_roletext($trolecode,$tdom,$trest,'is',$tryagain,$advanced,'',$tbg,$trole,$twhere,'','','',1,'');              ($roletext,$roletext_end) = &build_roletext($trolecode,$tdom,$trest,'is',$tryagain,$advanced,'',$tbg,$trole,$twhere,'','','',1,'');
         }          }
     }      }
Line 1814  course they should act on, etc. Both in Line 1849  course they should act on, etc. Both in
 handler determines via C<lonnet>'s C<&allowed> function that a certain  handler determines via C<lonnet>'s C<&allowed> function that a certain
 action is not allowed, C<lonroles> is used as error handler. This  action is not allowed, C<lonroles> is used as error handler. This
 allows the user to select another role which may have permission to do  allows the user to select another role which may have permission to do
 what they were trying to do.  what they were trying to do. C<lonroles> can also be accessed via the
   B<CRS> button in the Remote Control.
   
 =begin latex  =begin latex
   

Removed from v.1.256  
changed lines
  Added in v.1.256.2.8


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