[LON-CAPA-cvs] cvs: loncom /auth lonroles.pm

raeburn raeburn at source.lon-capa.org
Tue Oct 26 10:25:09 EDT 2021


raeburn		Tue Oct 26 14:25:09 2021 EDT

  Modified files:              
    /loncom/auth	lonroles.pm 
  Log:
  - When access is via deep-link and menu collection in effect is configured
    to omit Courses/Roles link, roles listing shows only current role.
  
  
Index: loncom/auth/lonroles.pm
diff -u loncom/auth/lonroles.pm:1.351 loncom/auth/lonroles.pm:1.352
--- loncom/auth/lonroles.pm:1.351	Mon Jul 19 14:26:40 2021
+++ loncom/auth/lonroles.pm	Tue Oct 26 14:25:09 2021
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # User Roles Screen
 #
-# $Id: lonroles.pm,v 1.351 2021/07/19 14:26:40 raeburn Exp $
+# $Id: lonroles.pm,v 1.352 2021/10/26 14:25:09 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -266,6 +266,43 @@
         $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;
     @{$rosterupdates}=();
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'});
@@ -1240,6 +1277,26 @@
         }
     }
 
+    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
     if ($countactive==0) {
         my $elapsed = 0;
@@ -2275,6 +2332,38 @@
     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.= '  '.&mt('Section').': '.$csec;
+            }
+            if ($role ne 'st') {
+                $twhere.= '  '.&mt('Domain').': '.$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 {
     my ($dcdom,$rowtype) = @_;
     my $output = &Apache::loncommon::continue_data_table_row()




More information about the LON-CAPA-cvs mailing list