[LON-CAPA-cvs] cvs: loncom /auth lonroles.pm roles.tab rolesplain.tab /interface domainprefs.pm loncreateuser.pm lonmenu.pm lonpickcourse.pm lonuserutils.pm /lonnet/perl lonnet.pm

raeburn raeburn at source.lon-capa.org
Fri Jan 27 22:49:01 EST 2017


raeburn		Sat Jan 28 03:49:01 2017 EDT

  Modified files:              
    /loncom/interface	domainprefs.pm loncreateuser.pm lonmenu.pm 
                     	lonpickcourse.pm lonuserutils.pm 
    /loncom/auth	roles.tab rolesplain.tab lonroles.pm 
    /loncom/lonnet/perl	lonnet.pm 
  Log:
  - Domain Helpdesk Assistant role for use by domain helpdesk student employees
    - browse access to shared repository (including own domain) is excluded.
  
  
-------------- next part --------------
Index: loncom/interface/domainprefs.pm
diff -u loncom/interface/domainprefs.pm:1.289 loncom/interface/domainprefs.pm:1.290
--- loncom/interface/domainprefs.pm:1.289	Mon Jan 23 23:50:11 2017
+++ loncom/interface/domainprefs.pm	Sat Jan 28 03:48:44 2017
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Handler to set domain-wide configuration settings
 #
-# $Id: domainprefs.pm,v 1.289 2017/01/23 23:50:11 raeburn Exp $
+# $Id: domainprefs.pm,v 1.290 2017/01/28 03:48:44 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -3259,7 +3259,7 @@
                 @jsarray = ('bystatus');
             }
         }
-        my %domhelpdesk = &Apache::lonnet::get_active_domroles($dom,['dh']);
+        my %domhelpdesk = &Apache::lonnet::get_active_domroles($dom,['dh','da']);
         if (keys(%domhelpdesk)) {
             push(@accesstypes,('inc','exc'));
             push(@jsarray,('notinc','notexc'));
@@ -12458,7 +12458,7 @@
     my (@allpos,%newsettings,%changedprivs,$newrole);
     my ($othertitle,$usertypes,$types) = &Apache::loncommon::sorted_inst_types($dom);
     my @accesstypes = ('all','none','status','inc','exc');
-    my %domhelpdesk = &Apache::lonnet::get_active_domroles($dom,['dh']);
+    my %domhelpdesk = &Apache::lonnet::get_active_domroles($dom,['dh','da']);
     my %lt = &Apache::lonlocal::texthash(
                     s      => 'system',
                     d      => 'domain',
Index: loncom/interface/loncreateuser.pm
diff -u loncom/interface/loncreateuser.pm:1.431 loncom/interface/loncreateuser.pm:1.432
--- loncom/interface/loncreateuser.pm:1.431	Sat Jan 28 02:56:41 2017
+++ loncom/interface/loncreateuser.pm	Sat Jan 28 03:48:44 2017
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Create a user
 #
-# $Id: loncreateuser.pm,v 1.431 2017/01/28 02:56:41 raeburn Exp $
+# $Id: loncreateuser.pm,v 1.432 2017/01/28 03:48:44 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -7218,7 +7218,7 @@
         }
     }
     my %customroles = &get_domain_customroles($cdom,$confname);
-    my %domhelpdesk = &Apache::lonnet::get_active_domroles($cdom,['dh']);
+    my %domhelpdesk = &Apache::lonnet::get_active_domroles($cdom,['dh','da']);
     if (keys(%domhelpdesk)) {
        push(@accesstypes,('inc','exc'));
        push(@jsarray,('notinc','notexc'));
@@ -7603,7 +7603,8 @@
             my $access = $domcurrent->{$role}{'access'};
             if (($access eq '') || (!grep(/^\Q$access\E$/,@{$accesstypes}))) {
                 $access = 'all';
-                $domusage{$role} = &mt('Any user in domain with active [_1] role',&Apache::lonnet::plaintext('dh'));
+                $domusage{$role} = &mt('Any user in domain with active [_1] or [_2] role',&Apache::lonnet::plaintext('dh'),
+                                                                                          &Apache::lonnet::plaintext('da'));
             } elsif ($access eq 'status') {
                 if (ref($domcurrent->{$role}{$access}) eq 'ARRAY') {
                     my @shown;
@@ -7619,8 +7620,8 @@
                     }
                     if (@shown) {
                         my $shownstatus = join(' '.&mt('or').' ', at shown);
-                        $domusage{$role} = &mt('Any user in domain with active [_1] role, and institutional status: [_2]',
-                                               &Apache::lonnet::plaintext('dh'),$shownstatus);
+                        $domusage{$role} = &mt('Any user in domain with active [_1] or [_2] role, and institutional status: [_3]',
+                                               &Apache::lonnet::plaintext('dh'),&Apache::lonnet::plaintext('da'),$shownstatus);
                     } else {
                         $domusage{$role} = &mt('No one in the domain');
                     }
@@ -7634,10 +7635,11 @@
                     }
                     my $showninc = join(', ', at dominc);
                     if ($showninc ne '') {
-                        $domusage{$role} = &mt('Include any user in domain with active [_1] role, except: [_2]',
-                                               &Apache::lonnet::plaintext('dh'),$showninc);
+                        $domusage{$role} = &mt('Include any user in domain with active [_1] or [_2] role, except: [_3]',
+                                               &Apache::lonnet::plaintext('dh'),&Apache::lonnet::plaintext('da'),$showninc);
                     } else {
-                        $domusage{$role} = &mt('Any user in domain with active [_1] role',&Apache::lonnet::plaintext('dh'));
+                        $domusage{$role} = &mt('Any user in domain with active [_1] or [_2] role',
+                                               &Apache::lonnet::plaintext('dh'),&Apache::lonnet::plaintext('da'));
                     }
                 }
             } elsif ($access eq 'exc') {
@@ -7650,18 +7652,20 @@
                 }
                 my $shownexc = join(', ', at domexc);
                 if ($shownexc ne '') {
-                    $domusage{$role} = &mt('Only the following in the domain with active [_1] role: [_2]',
-                                           &Apache::lonnet::plaintext('dh'),$shownexc);
+                    $domusage{$role} = &mt('Only the following in the domain with active [_1] or [_2] role: [_3]',
+                                           &Apache::lonnet::plaintext('dh'),&Apache::lonnet::plaintext('da'),$shownexc);
                 } else {
                     $domusage{$role} = &mt('No one in the domain');
                 }
             } elsif ($access eq 'none') {
                 $domusage{$role} = &mt('No one in the domain');
             } elsif ($access eq 'all') {
-                $domusage{$role} = &mt('Any user in domain with active [_1] role',&Apache::lonnet::plaintext('dh'));
+                $domusage{$role} = &mt('Any user in domain with active [_1] or [_2] role',
+                                       &Apache::lonnet::plaintext('dh'),&Apache::lonnet::plaintext('da'));
             }
         } else {
-            $domusage{$role} = &mt('Any user in domain with active [_1] role',&Apache::lonnet::plaintext('dh'));
+            $domusage{$role} = &mt('Any user in domain with active [_1] or [_2] role',
+                                   &Apache::lonnet::plaintext('dh'),&Apache::lonnet::plaintext('da'));
         }
     }
     return %domusage;
@@ -7852,7 +7856,7 @@
     my (%settings,%overridden);
     &get_adhocrole_settings($env{'request.course.id'},\@accesstypes,
                             $types,\%customroles,\%settings,\%overridden);
-    my %domhelpdesk = &Apache::lonnet::get_active_domroles($cdom,['dh']);
+    my %domhelpdesk = &Apache::lonnet::get_active_domroles($cdom,['dh','da']);
     my (%changed,%storehash, at todelete);
 
     if (keys(%customroles)) {
Index: loncom/interface/lonmenu.pm
diff -u loncom/interface/lonmenu.pm:1.465 loncom/interface/lonmenu.pm:1.466
--- loncom/interface/lonmenu.pm:1.465	Mon Jan  2 19:44:06 2017
+++ loncom/interface/lonmenu.pm	Sat Jan 28 03:48:44 2017
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Routines to control the menu
 #
-# $Id: lonmenu.pm,v 1.465 2017/01/02 19:44:06 raeburn Exp $
+# $Id: lonmenu.pm,v 1.466 2017/01/28 03:48:44 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -2340,78 +2340,85 @@
             (ref($courseprivs) eq 'HASH') && (ref($roledesc) eq 'HASH')) {
         return;
     }
-    if ($env{"user.role.dh./$cdom/"}) {
-        my ($start,$end)=split(/\./,$env{"user.role.dh./$cdom/"});
-        my $now = time;
-        if (!($start && ($now<$start)) && !($end && ($now>$end))) {
-            my ($possroles,$description) = &Apache::lonnet::get_my_adhocroles($cdom.'_'.$cnum);
-            my %available;
-            if (ref($possroles) eq 'ARRAY') {
-                map { $available{$_} = 1; } @{$possroles};
-            }
-            my %domdefaults = &Apache::lonnet::get_domain_defaults($cdom);
-            if (ref($domdefaults{'adhocroles'}) eq 'HASH') {
-                if (keys(%{$domdefaults{'adhocroles'}})) {
-                    my $numsec = 1;
-                    my @sections;
-                    my ($allseclist,$cached) =
-                        &Apache::lonnet::is_cached_new('courseseclist',$cdom.'_'.$cnum);
-                    if (defined($cached)) {
-                        if ($allseclist ne '') {
-                            @sections = split(/,/,$allseclist);
-                            $numsec += scalar(@sections);
-                        }
-                    } else {
-                        my %sections_count = &Apache::loncommon::get_sections($cdom,$cnum);
-                        @sections = sort(keys(%sections_count));
+    my $is_helpdesk = 0;
+    my $now = time;
+    foreach my $role ('dh','da') {
+        if ($env{"user.role.$role./$cdom/"}) {
+            my ($start,$end)=split(/\./,$env{"user.role.$role./$cdom/"});
+            if (!($start && ($now<$start)) && !($end && ($now>$end))) {
+                $is_helpdesk = 1;
+                last;
+            }
+        }
+    }
+    if ($is_helpdesk) {
+        my ($possroles,$description) = &Apache::lonnet::get_my_adhocroles($cdom.'_'.$cnum);
+        my %available;
+        if (ref($possroles) eq 'ARRAY') {
+            map { $available{$_} = 1; } @{$possroles};
+        }
+        my %domdefaults = &Apache::lonnet::get_domain_defaults($cdom);
+        if (ref($domdefaults{'adhocroles'}) eq 'HASH') {
+            if (keys(%{$domdefaults{'adhocroles'}})) {
+                my $numsec = 1;
+                my @sections;
+                my ($allseclist,$cached) =
+                    &Apache::lonnet::is_cached_new('courseseclist',$cdom.'_'.$cnum);
+                if (defined($cached)) {
+                    if ($allseclist ne '') {
+                        @sections = split(/,/,$allseclist);
                         $numsec += scalar(@sections);
-                        $allseclist = join(',', at sections);
-                        &Apache::lonnet::do_cache_new('courseseclist',$cdom.'_'.$cnum,$allseclist);
                     }
-                    my (%adhoc,$gotprivs);
-                    my $prefix = "cr/$cdom/$cdom".'-domainconfig';
-                    foreach my $role (keys(%{$domdefaults{'adhocroles'}})) {
-                        next if (($role eq '') || ($role =~ /\W/));
-                        $seccount->{"$prefix/$role"} = $numsec;
-                        $roledesc->{"$prefix/$role"} = $description->{$role};
-                        if ((ref($privref) eq 'ARRAY') && (@{$privref} > 0)) {
-                            if (exists($env{"user.priv.$prefix/$role./$cdom/$cnum./"})) {
-                                $courseprivs->{"$prefix/$role./$cdom/$cnum./"} =
-                                    $env{"user.priv.$prefix/$role./$cdom/$cnum./"};
-                                $courseprivs->{"$prefix/$role./$cdom/$cnum./$cdom/"} =
-                                    $env{"user.priv.$prefix/$role./$cdom/$cnum./$cdom/"};
-                                $courseprivs->{"$prefix/$role./$cdom/$cnum./$cdom/$cnum"} =
-                                    $env{"user.priv.$prefix/$role./$cdom/$cnum./$cdom/$cnum"};
-                            } else {
-                                unless ($gotprivs) {
-                                    my ($adhocroles,$privscached) =
-                                        &Apache::lonnet::is_cached_new('adhocroles',$cdom);
-                                    if ((defined($privscached)) && (ref($adhocroles) eq 'HASH')) {
-                                        %adhoc = %{$adhocroles};
-                                    } else {
-                                        my $confname = &Apache::lonnet::get_domainconfiguser($cdom);
-                                        my %roledefs = &Apache::lonnet::dump('roles',$cdom,$confname,'rolesdef_');
-                                        foreach my $key (keys(%roledefs)) {
-                                            (undef,my $rolename) = split(/_/,$key);
-                                            if ($rolename ne '') {
-                                                my ($systempriv,$domainpriv,$coursepriv) = split(/\_/,$roledefs{$key});
-                                                $coursepriv = &Apache::lonnet::course_adhocrole_privs($rolename,$cdom,$cnum,$coursepriv);
-                                                $adhoc{$rolename} = join('_',($systempriv,$domainpriv,$coursepriv));
-                                            }
+                } else {
+                    my %sections_count = &Apache::loncommon::get_sections($cdom,$cnum);
+                    @sections = sort(keys(%sections_count));
+                    $numsec += scalar(@sections);
+                    $allseclist = join(',', at sections);
+                    &Apache::lonnet::do_cache_new('courseseclist',$cdom.'_'.$cnum,$allseclist);
+                }
+                my (%adhoc,$gotprivs);
+                my $prefix = "cr/$cdom/$cdom".'-domainconfig';
+                foreach my $role (keys(%{$domdefaults{'adhocroles'}})) {
+                    next if (($role eq '') || ($role =~ /\W/));
+                    $seccount->{"$prefix/$role"} = $numsec;
+                    $roledesc->{"$prefix/$role"} = $description->{$role};
+                    if ((ref($privref) eq 'ARRAY') && (@{$privref} > 0)) {
+                        if (exists($env{"user.priv.$prefix/$role./$cdom/$cnum./"})) {
+                            $courseprivs->{"$prefix/$role./$cdom/$cnum./"} =
+                                $env{"user.priv.$prefix/$role./$cdom/$cnum./"};
+                            $courseprivs->{"$prefix/$role./$cdom/$cnum./$cdom/"} =
+                                $env{"user.priv.$prefix/$role./$cdom/$cnum./$cdom/"};
+                            $courseprivs->{"$prefix/$role./$cdom/$cnum./$cdom/$cnum"} =
+                                $env{"user.priv.$prefix/$role./$cdom/$cnum./$cdom/$cnum"};
+                        } else {
+                            unless ($gotprivs) {
+                                my ($adhocroles,$privscached) =
+                                    &Apache::lonnet::is_cached_new('adhocroles',$cdom);
+                                if ((defined($privscached)) && (ref($adhocroles) eq 'HASH')) {
+                                    %adhoc = %{$adhocroles};
+                                } else {
+                                    my $confname = &Apache::lonnet::get_domainconfiguser($cdom);
+                                    my %roledefs = &Apache::lonnet::dump('roles',$cdom,$confname,'rolesdef_');
+                                    foreach my $key (keys(%roledefs)) {
+                                        (undef,my $rolename) = split(/_/,$key);
+                                        if ($rolename ne '') {
+                                            my ($systempriv,$domainpriv,$coursepriv) = split(/\_/,$roledefs{$key});
+                                            $coursepriv = &Apache::lonnet::course_adhocrole_privs($rolename,$cdom,$cnum,$coursepriv);
+                                            $adhoc{$rolename} = join('_',($systempriv,$domainpriv,$coursepriv));
                                         }
-                                        &Apache::lonnet::do_cache_new('adhocroles',$cdom,\%adhoc);
                                     }
-                                    $gotprivs = 1;
+                                    &Apache::lonnet::do_cache_new('adhocroles',$cdom,\%adhoc);
                                 }
-                                ($courseprivs->{"$prefix/$role./$cdom/$cnum./"},
-                                 $courseprivs->{"$prefix/$role./$cdom/$cnum./$cdom/"},
-                                 $courseprivs->{"$prefix/$role./$cdom/$cnum./$cdom/$cnum"}) =
-                                     split(/\_/,$adhoc{$role});
+                                $gotprivs = 1;
                             }
+                            ($courseprivs->{"$prefix/$role./$cdom/$cnum./"},
+                             $courseprivs->{"$prefix/$role./$cdom/$cnum./$cdom/"},
+                             $courseprivs->{"$prefix/$role./$cdom/$cnum./$cdom/$cnum"}) =
+                                 split(/\_/,$adhoc{$role});
                         }
-                        if ($available{$role}) {
-                            $courseroles->{"$prefix/$role"} = \@sections;
-                        }
+                    }
+                    if ($available{$role}) {
+                        $courseroles->{"$prefix/$role"} = \@sections;
                     }
                 }
             }
Index: loncom/interface/lonpickcourse.pm
diff -u loncom/interface/lonpickcourse.pm:1.125 loncom/interface/lonpickcourse.pm:1.126
--- loncom/interface/lonpickcourse.pm:1.125	Thu Jan  5 16:17:11 2017
+++ loncom/interface/lonpickcourse.pm	Sat Jan 28 03:48:44 2017
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Pick a course
 #
-# $Id: lonpickcourse.pm,v 1.125 2017/01/05 16:17:11 raeburn Exp $
+# $Id: lonpickcourse.pm,v 1.126 2017/01/28 03:48:44 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -89,13 +89,13 @@
         $title = 'Selecting '.$type.'(s)';
     }
 
-    # if called when a DC or DH is selecting a course 
+    # if called when a DC, DH or DA is selecting a course 
     my ($roledom,$rolename) = split(/:/,$env{'form.roleelement'});
     if ($roledom) {
         $roleelement = '<input type="hidden" name="roleelement" value="'.$env{'form.roleelement'}.'" />';
         $submitopener = &processpick();
         $autosubmit = 'process_pick("'.$roledom.'","'.$rolename.'")';
-        if ($rolename eq 'dh') {
+        if (($rolename eq 'dh') || ($rolename eq 'da')) {
             my %lt = &Apache::lonlocal::texthash(
                      title    => 'Ad hoc role selection',
                      preamble => 'Please choose an ad hoc role in the course.',
@@ -958,7 +958,7 @@
         document.courselist.cnum.value = cname;
         document.courselist.cdom.value = cdom;
     }
-    if ((openerForm == 'rolechoice') && (openerRole == 'dh')) {
+    if ((openerForm == 'rolechoice') && ((openerRole == 'dh') || (openerRole == 'da'))) {
 \$("#LC_choose_adhoc").empty();
 var http = new XMLHttpRequest();
 var url = "/adm/pickcourse";
Index: loncom/interface/lonuserutils.pm
diff -u loncom/interface/lonuserutils.pm:1.181 loncom/interface/lonuserutils.pm:1.182
--- loncom/interface/lonuserutils.pm:1.181	Wed Jan 18 21:07:31 2017
+++ loncom/interface/lonuserutils.pm	Sat Jan 28 03:48:44 2017
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Utility functions for managing LON-CAPA user accounts
 #
-# $Id: lonuserutils.pm,v 1.181 2017/01/18 21:07:31 raeburn Exp $
+# $Id: lonuserutils.pm,v 1.182 2017/01/28 03:48:44 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -5833,7 +5833,7 @@
     } elsif ($context eq 'author') {
         @allroles = ('ca','aa');
     } elsif ($context eq 'domain') {
-        @allroles = ('li','ad','dg','dh','sc','au','dc');
+        @allroles = ('li','ad','dg','dh','da','sc','au','dc');
     }
     return @allroles;
 }
Index: loncom/auth/roles.tab
diff -u loncom/auth/roles.tab:1.69 loncom/auth/roles.tab:1.70
--- loncom/auth/roles.tab:1.69	Tue Nov 22 00:44:59 2016
+++ loncom/auth/roles.tab	Sat Jan 28 03:48:52 2017
@@ -1,6 +1,6 @@
 su:s csu&U:sma:mau:cdc&U:dro:psa:adv
 dc:s bre:sma:adv:mcr:srm
-dc:d cli&UIK:cau&UIK:cca&UIK:caa&UIK:cdg&UIK:cdh&UIK:mau:ccc&U:cco&U:cin&UIK:cta&UIK:cep&UIK:ccr&UIK:cst&UIK:cad&UIK:csc&UIK:dro:mky:psa:usc:mpq:mut:vac:eco&U
+dc:d cli&UIK:cau&UIK:cca&UIK:caa&UIK:cdg&UIK:cdh&UIK:cda&UIK:mau:ccc&U:cco&U:cin&UIK:cta&UIK:cep&UIK:ccr&UIK:cst&UIK:cad&UIK:csc&UIK:dro:mky:psa:usc:mpq:mut:vac:eco&U
 cc:s bre:sma:mcr:vsa:adv:vcl
 cc:c cin&IK:cta&IK:cep&IK:ccr&IK:cst&IK:are:cre:ere:vgr:gan:dcm:evb:srm:dff:opa:mgr:mqg:mgq:rin:pch:plc:mdc:usc:vsa:vcl:mdg:vcg:pav:pfo:whn:las:pac:dch
 co:s bro:sma:mcr:vsa:adv:vcl 
@@ -30,6 +30,7 @@
 aa:d are:ere
 dg:d bre&R
 dh:d sma:rar:dcd:dcc:vac:vur:udp:bre
+da:d sma:rar:dcd:dcc:vac:vur:udp
 sc:d usc
 
 
Index: loncom/auth/rolesplain.tab
diff -u loncom/auth/rolesplain.tab:1.50 loncom/auth/rolesplain.tab:1.51
--- loncom/auth/rolesplain.tab:1.50	Tue Nov 22 00:44:59 2016
+++ loncom/auth/rolesplain.tab	Sat Jan 28 03:48:52 2017
@@ -26,6 +26,7 @@
 au:Author
 dg:Domain Guest
 dh:Domain Helpdesk
+da:Domain Helpdesk Assistant 
 ca:Co-Author
 aa:Assistant Co-Author
 sc:Bubblesheet Scanning Operator
Index: loncom/auth/lonroles.pm
diff -u loncom/auth/lonroles.pm:1.324 loncom/auth/lonroles.pm:1.325
--- loncom/auth/lonroles.pm:1.324	Sat Jan 21 19:58:05 2017
+++ loncom/auth/lonroles.pm	Sat Jan 28 03:48:52 2017
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # User Roles Screen
 #
-# $Id: lonroles.pm,v 1.324 2017/01/21 19:58:05 raeburn Exp $
+# $Id: lonroles.pm,v 1.325 2017/01/28 03:48:52 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -255,8 +255,9 @@
 
     my $envkey;
     my %dcroles = ();
-    my %dhroles = ();
-    my ($numdc,$numdh,$numadhoc) = &check_for_adhoc(\%dcroles,\%dhroles,$update,$then);
+    my %helpdeskroles = ();
+    my ($numdc,$numhelpdesk,$numadhoc) = 
+        &check_for_adhoc(\%dcroles,\%helpdeskroles,$update,$then);
     my $loncaparev = $r->dir_config('lonVersion');
 
 # ================================================================== Roles Init
@@ -268,9 +269,9 @@
         my $custom_adhoc;
         if ($env{'form.newrole'}) {
             $env{'form.'.$env{'form.newrole'}}=1;
-# Check if this is a Domain Helpdesk role trying to enter a course
+# Check if this is a Domain Helpdesk or Domain Helpdesk Assistant role trying to enter a course
             if ($env{'form.newrole'} =~ m{^cr/($match_domain)/\1\-domainconfig/\w+\./\1/$match_courseid$}) {
-                if ($dhroles{$1}) {
+                if ($helpdeskroles{$1}) {
                     $custom_adhoc = 1;
                 }
             }
@@ -321,9 +322,9 @@
                     }
                 }
             }
-        } elsif (($numdc > 0) || ($numdh > 0)) {
+        } elsif (($numdc > 0) || ($numhelpdesk > 0)) {
 # Check if user is a DC trying to enter a course or author space and needs privs to be created
-# Check if user is a DH trying to enter a course and needs privs to be created
+# Check if user is a DH or DA trying to enter a course and needs privs to be created
             foreach my $envkey (keys(%env)) {
 # Is this an ad-hoc Coordinator role?
                 if ($numdc) {
@@ -393,10 +394,10 @@
                         last;
                     }
                 }
-                if ($numdh) {
+                if ($numhelpdesk) {
 # Is this an ad hoc custom role in a course/community?
                     if (my ($domain,$rolename,$coursenum,$sec) = ($envkey =~ m{^form\.cr/($match_domain)/\1\-domainconfig/(\w+)\./\1/($match_courseid)(?:/(\w+)|$)})) {
-                        if ($dhroles{$domain}) {
+                        if ($helpdeskroles{$domain}) {
                             my ($possroles,$description) = &Apache::lonnet::get_my_adhocroles($domain.'_'.$coursenum,1);
                             if (ref($possroles) eq 'ARRAY') {
                                 if (grep(/^\Q$rolename\E$/,@{$possroles})) {
@@ -783,6 +784,12 @@
                                        $redirect_url);
                         return OK;
                     }
+                    if ($role eq 'da') {
+                        my $redirect_url = '/adm/menu/';
+                        &redirect_user($r,&mt('Loading Domain Helpdesk Assistant Menu'),
+                                       $redirect_url);
+                        return OK;
+                    }
                     if ($role eq 'sc') {
                         my $redirect_url = '/adm/grades?command=scantronupload';
                         &redirect_user($r,&mt('Loading Data Upload Page'),
@@ -1080,7 +1087,7 @@
     }
 # ----------------------------------------------------------------------- Table
 
-    if (($numdc > 0) || (($numdh > 0) && ($numadhoc > 0))) {
+    if (($numdc > 0) || (($numhelpdesk > 0) && ($numadhoc > 0))) {
         $r->print(&coursepick_jscript());
         $r->print(&Apache::loncommon::coursebrowser_javascript().
                   &Apache::loncommon::authorbrowser_javascript());
@@ -1116,7 +1123,7 @@
                 if ($role =~ m{^dc\./($match_domain)/$} 
 		    && $dcroles{$1}) {
 		    $output .= &adhoc_roles_row($1,'recent');
-                } elsif ($role =~ m{^(dh)\./($match_domain)/$}) {
+                } elsif ($role =~ m{^(dh|da)\./($match_domain)/$}) {
                     $output .= &adhoc_customroles_row($1,$2,'recent',$update,$then);
                 }
 	    } elsif ($numdc > 0) {
@@ -1548,7 +1555,7 @@
                                     $output .= &adhoc_roles_row($1,'');
                                 }
                             }
-                        } elsif ($sortrole->{$which} =~ m{^user\.role\.(dh)\./($match_domain)/}) {
+                        } elsif ($sortrole->{$which} =~ m{^user\.role\.(dh|da)\./($match_domain)/}) {
                             $output .= &adhoc_customroles_row($1,$2,'',$update,$then);
                         }
                     }
@@ -1808,21 +1815,20 @@
 }
 
 sub check_for_adhoc {
-    my ($dcroles,$dhroles,$update,$then) = @_;
+    my ($dcroles,$helpdeskroles,$update,$then) = @_;
     my $numdc = 0;
-    my $numdh = 0;
+    my $numhelpdesk = 0;
     my $numadhoc = 0;
     my $num_custom_adhoc = 0; 
     if ($env{'user.adv'}) {
         foreach my $envkey (sort(keys(%env))) {
-            if ($envkey=~/^user\.role\.(dc|dh)\.\/($match_domain)\/$/) {
+            if ($envkey=~/^user\.role\.(dc|dh|da)\.\/($match_domain)\/$/) {
                 my $role = $1;
                 my $roledom = $2;
                 my $liverole = 1;
                 my ($tstart,$tend)=split(/\./,$env{$envkey});
                 my $limit = $update;
-                if ((($role eq 'dc') && ($env{'request.role'} eq 'dc./'.$roledom.'/')) ||
-                    (($role eq 'dh') && ($env{'request.role'} eq 'dh./'.$roledom.'/'))) {
+                if ($env{'request.role'} eq "$role./$roledom/") {
                     $limit = $then;
                 }
                 if ($tstart && $tstart>$limit) { $liverole = 0; }
@@ -1832,20 +1838,20 @@
                         $dcroles->{$roledom} = $envkey;
                         $numdc++;
                     } else {
-                        $dhroles->{$roledom} = $envkey;
+                        $helpdeskroles->{$roledom} = $envkey;
                         my %domdefaults = &Apache::lonnet::get_domain_defaults($roledom);
                         if (ref($domdefaults{'adhocroles'}) eq 'HASH') {
                             if (keys(%{$domdefaults{'adhocroles'}})) {
                                 $numadhoc ++;
                             }
                         }
-                        $numdh++;
+                        $numhelpdesk++;
                     }
                 }
             }
         }
     }
-    return ($numdc,$numdh,$numadhoc);
+    return ($numdc,$numhelpdesk,$numadhoc);
 }
 
 sub adhoc_course_role {
Index: loncom/lonnet/perl/lonnet.pm
diff -u loncom/lonnet/perl/lonnet.pm:1.1333 loncom/lonnet/perl/lonnet.pm:1.1334
--- loncom/lonnet/perl/lonnet.pm:1.1333	Thu Jan  5 18:44:41 2017
+++ loncom/lonnet/perl/lonnet.pm	Sat Jan 28 03:49:00 2017
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # TCP networking package
 #
-# $Id: lonnet.pm,v 1.1333 2017/01/05 18:44:41 raeburn Exp $
+# $Id: lonnet.pm,v 1.1334 2017/01/28 03:49:00 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -4116,7 +4116,7 @@
         }
     }
 #
-# Reverse lookup of domain roles (dc, ad, li, sc, dh, au)
+# Reverse lookup of domain roles (dc, ad, li, sc, dh, da, au)
 #
     my %domrolebuffer = ();
     foreach my $entry (keys(%domainrolehash)) {
@@ -4263,7 +4263,7 @@
          {$trole.':'.$username.':'.$domain.':'.$env{'user.name'}.':'.$env{'user.domain'}.':'}
                     =$tend.':'.$tstart;
     }
-    if ($trole =~ /^(dc|ad|li|au|dg|sc|dh)/ ) {
+    if ($trole =~ /^(dc|ad|li|au|dg|sc|dh|da)/ ) {
        my (undef,$rudom,$runame,$rsec)=split(/\//,$area);
        $domainrolehash
          {$trole.':'.$username.':'.$domain.':'.$runame.':'.$rudom.':'.$rsec}
@@ -4547,17 +4547,22 @@
         }
     }
     if (($cdom ne '') && ($cnum ne ''))  {
-        if ($env{"user.role.dh./$cdom/"}) {
+        if (($env{"user.role.dh./$cdom/"}) || ($env{"user.role.da./$cdom/"})) {
             my $then=$env{'user.login.time'};
             my $update=$env{'user.update.time'};
             my $liverole = 1;
-            my ($tstart,$tend)=split(/\./,$env{'user.role.dh./'.$cdom});
-            my $limit = $update;
-            if ($env{'request.role'} eq 'dh./'.$cdom.'/') {
-                $limit = $then;
+            foreach my $role ('dh','da') {
+                if ($env{"user.role.$role./$cdom/"}) {
+                    my ($tstart,$tend)=split(/\./,$env{"user.role.$role./$cdom"});
+                    my $limit = $update;
+                    if ($env{'request.role'} eq "$role./$cdom/") {
+                        $limit = $then;
+                    }
+                    if ($tstart && $tstart>$limit) { $liverole = 0; }
+                    if ($tend   && $tend  <$limit) { $liverole = 0; }
+                    last if ($liverole);
+                }
             }
-            if ($tstart && $tstart>$limit) { $liverole = 0; }
-            if ($tend   && $tend  <$limit) { $liverole = 0; }
             if ($liverole) {
                 if (&homeserver($cnum,$cdom) ne 'no_host') {
                     my ($accessref,$accessinfo,%access_in_dom);
@@ -9127,7 +9132,8 @@
             &courserolelog($role,$uname,$udom,$url,$origstart,$origend,$delflag,
                            $selfenroll,$context);
         } elsif (($role eq 'li') || ($role eq 'dg') || ($role eq 'sc') ||
-                 ($role eq 'au') || ($role eq 'dc') || ($role eq 'dh')) {
+                 ($role eq 'au') || ($role eq 'dc') || ($role eq 'dh') ||
+                 ($role eq 'da')) {
             &domainrolelog($role,$uname,$udom,$url,$origstart,$origend,$delflag,
                            $context);
         } elsif (($role eq 'ca') || ($role eq 'aa')) {


More information about the LON-CAPA-cvs mailing list