Diff for /loncom/auth/lonroles.pm between versions 1.350 and 1.353

version 1.350, 2021/06/12 23:14:56 version 1.353, 2021/11/03 01:04:02
Line 266  sub handler { Line 266  sub handler {
         $update = $then;          $update = $then;
     }      }
   
       my $norolelist;
       if (($env{'request.course.id'}) && ($env{'request.deeplink.login'})) {
           my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
           my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
           my $crstype = $env{'course.'.$env{'request.course.id'}.'.type'};
           my $deeplink_symb = &Apache::loncommon::deeplink_login_symb($cnum,$cdom);
           if ($deeplink_symb) {
               my ($menucoll,$deeplinkmenu,$menuref) = &Apache::loncommon::menucoll_in_effect();
               if (ref($menuref) eq 'HASH') {
                   unless (($menuref->{'role'}) || ($env{'request.role.adv'})) {
                       foreach my $envkey (keys(%env)) {
                           next unless ($envkey =~ /^form\./);
                           if ($envkey =~ m{\./($match_domain)/($match_courseid)(?:/(\w+)|$)}) {
                               unless (($1 eq $cdom) && ($2 eq $cnum)) {
                                   delete($env{$envkey});
                               }
                           }
                       }
                       if ($env{'form.selectrole'}) {
                           if ($env{'form.switchrole'} =~ m{\./($match_domain)/($match_courseid)(?:/(\w+)|$)}) {
                               unless (($1 eq $cdom) && ($2 eq $cnum)) {
                                   delete($env{'form.selectrole'});
                                   delete($env{'form.switchrole'});
                               }
                           } elsif ($env{'form.newrole'} =~ m{\./($match_domain)/($match_courseid)(?:/(\w+)|$)}) {
                               unless (($1 eq $cdom) && ($2 eq $cnum)) {
                                   delete($env{'form.selectrole'});
                                   delete($env{'form.newrole'});
                               }
                           }
                       }
                       $norolelist = 1;
                   }
               }
           }
       }
   
     $registered_cleanup=0;      $registered_cleanup=0;
     @{$rosterupdates}=();      @{$rosterupdates}=();
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'});      &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'});
Line 875  ENDCLOSE Line 912  ENDCLOSE
                                                 $dest .= (($dest =~/\?/)? '&':'?').'symb='.$esc_symb;                                                  $dest .= (($dest =~/\?/)? '&':'?').'symb='.$esc_symb;
                                             }                                              }
                                         }                                          }
                                           if ($env{'form.ttoken'}) {
                                               $dest .= (($dest =~/\?/)? '&':'?').'ttoken='.$env{'form.ttoken'};
                                           }
                                         unless ($env{'request.lti.login'}) {                                          unless ($env{'request.lti.login'}) {
                                             $msg = '<p>'.&mt('Entering [_1] ...',                                              $msg = '<p>'.&mt('Entering [_1] ...',
                                                              $env{'course.'.$cdom.'_'.$cnum.'.description'}).                                                               $env{'course.'.$cdom.'_'.$cnum.'.description'}).
Line 902  ENDCLOSE Line 942  ENDCLOSE
     }      }
  }   }
                                 # Are we allowed to look at the first resource?                                  # Are we allowed to look at the first resource?
                                 my $access;                                  #
                                 if ($furl =~ m{^(/adm/wrapper|)/ext/}) {                                  # $furl returned by lonuserstate::readmap() has format:
                                     # If it's an external resource,                                  # $url?symb=escaped($symb). If the resource has the 
                                     # strip off the symb argument and possible query                                  # encrypturl parameter in effect, the entire string
                                     my ($exturl,$symb) = ($furl =~ m{^(.+)(?:\?|\&)symb=(.+)$});                                  # $url?symb=escaped($symb) is encrypted as a string
                                     # Unencode $symb                                  # beginning /enc/.
                                     $symb = &unescape($symb);                                  # 
                                     # Then check for permission                                  my ($access,$unencfurl,$unencsymb);
                                     $access = &Apache::lonnet::allowed('bre',$exturl,$symb);                                  if ($furl =~ m{^(.+)(?:\?|\&)symb=([^&]+)(?:$|&)}) {
                                 # For other resources just check for permission                                      my ($poss_url,$poss_symb) = ($1,$2);
                                       $unencsymb = &unescape($poss_symb);
                                       $unencfurl = $poss_url;
                                   } elsif ($furl =~ m{^/enc/}) {
                                       my $unenc = &Apache::lonenc::unencrypted($furl);
                                       if ($unenc =~ m{^(.+)(?:\?|\&)symb=([^&]+)(?:$|&)}) {
                                           ($unencfurl,$unencsymb) = ($1,$2);
                                           $unencsymb = &unescape($unencsymb);
                                       } else {
                                           $unencfurl = $unenc;
                                       }
                                 } else {                                  } else {
                                     $access = &Apache::lonnet::allowed('bre',$furl);                                      $unencfurl = $furl;
                                 }                                  }
                                 if ((!$access) || ($access eq 'D')) {                                  if ($unencsymb) {
                                       my $symb = &Apache::lonnet::symbclean($unencsymb);
                                       if (($symb ne '') && (&Apache::lonnet::symbverify($symb,$unencfurl))) {
                                           $access = &Apache::lonnet::allowed('bre',$unencfurl,$symb);
                                       } else {
                                           $access = &Apache::lonnet::allowed('bre',$unencfurl);
                                       }
                                   } else {
                                       $access = &Apache::lonnet::allowed('bre',$unencfurl);
                                   }
                                   if ((!$access) || ($access eq 'B') || ($access eq 'D')) {
                                     $furl = &Apache::lonpageflip::first_accessible_resource();                                      $furl = &Apache::lonpageflip::first_accessible_resource();
                                 } elsif ($access eq 'B') {                                      if ($furl eq '') {
                                     $furl = '/adm/navmaps?showOnlyHomework=1';                                          $furl = '/adm/navmaps?showOnlyHomework=1';
                                       }
                                 }                                  }
                                 if ($env{'request.lti.login'}) {                                  if ($env{'request.lti.login'}) {
                                     undef($msg);                                      undef($msg);
Line 1219  ENDHEADER Line 1280  ENDHEADER
         }          }
     }      }
   
       if ($norolelist) {
           if ($env{'request.role'}) {
               my ($roletext,$role_text_end) = &display_curr_role($env{'request.role'});
               if ($roletext) {
                   $r->print(&Apache::loncommon::start_data_table('LC_textsize_mobile').
                             &Apache::loncommon::start_data_table_row().
                             $roletext.
                             &Apache::loncommon::end_data_table_row());
                   if ($role_text_end) {
                       $r->print(&Apache::loncommon::continue_data_table_row().
                                 $role_text_end.
                                 &Apache::loncommon::end_data_table_row());
                   }
                   $r->print(&Apache::loncommon::end_data_table());
               }
           }
           $r->print(&Apache::loncommon::end_page());
           return OK;
       }
   
 # No active roles  # No active roles
     if ($countactive==0) {      if ($countactive==0) {
         my $elapsed = 0;          my $elapsed = 0;
Line 2252  sub display_cc_role { Line 2333  sub display_cc_role {
         }          }
     }      }
     return ($roletext,$roletext_end);      return ($roletext,$roletext_end);
   }
   
   sub display_curr_role {
       my ($currentrole) = @_;
       my ($roletext,$roletext_end);
       my $advanced = $env{'user.adv'};
       my $tryagain = $env{'form.tryagain'};
       my ($role,$rest) = split(m{\./},$currentrole,2);
       unless (!defined($role) || $role eq '') {
           if ($rest =~ m{^($match_domain)/($match_courseid)(?:/(\w+)|$)}) {
               my $cdom = $1;
               my $cnum = $2;
               my $csec = $3;
               my $cid = $cdom.'_'.$cnum;
               my $ttype = $env{'course.'.$cid.'.type'};
               my $skipcal = 1;
               my $tbg='LC_roles_is';
               my $twhere = $env{'course.'.$cid.'.description'}. 
                           ' <span class="LC_fontsize_small">'.
                           &Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$cnum,$cdom).
                           '</span>';
               my $trole = &Apache::lonnet::plaintext($role,$ttype,$cid);
               if ($csec) {
                   $twhere.= '&nbsp; '.&mt('Section').':&nbsp;'.$csec;
               }
               if ($role ne 'st') {
                   $twhere.= '&nbsp; '.&mt('Domain').':&nbsp;'.$cdom;
               }
               ($roletext,$roletext_end) = &build_roletext($currentrole,$cdom,$cnum,'is',$tryagain,$advanced,'',$tbg,$trole,$twhere,'','','',1,'','','',$skipcal);
           }
       }
       return ($roletext,$roletext_end);
 }  }
   
 sub adhoc_roles_row {  sub adhoc_roles_row {

Removed from v.1.350  
changed lines
  Added in v.1.353


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