[LON-CAPA-cvs] cvs: loncom /homework grades.pm /interface courseprefs.pm loncommon.pm lonparmset.pm lonpickstudent.pm

raeburn raeburn at source.lon-capa.org
Wed Feb 12 11:25:57 EST 2020


raeburn		Wed Feb 12 16:25:57 2020 EDT

  Modified files:              
    /loncom/interface	lonparmset.pm lonpickstudent.pm loncommon.pm 
                     	courseprefs.pm 
    /loncom/homework	grades.pm 
  Log:
  - Parameter setting via table mode for users with both student and non-student
    roles.
  - Pop-up launched via "Select User" link shows appropriate table(s) of users.
  
  
-------------- next part --------------
Index: loncom/interface/lonparmset.pm
diff -u loncom/interface/lonparmset.pm:1.595 loncom/interface/lonparmset.pm:1.596
--- loncom/interface/lonparmset.pm:1.595	Mon Feb 10 19:48:56 2020
+++ loncom/interface/lonparmset.pm	Wed Feb 12 16:25:47 2020
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Handler to set parameters for assessments
 #
-# $Id: lonparmset.pm,v 1.595 2020/02/10 19:48:56 raeburn Exp $
+# $Id: lonparmset.pm,v 1.596 2020/02/12 16:25:47 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -2420,9 +2420,37 @@
 sub usermenu {
     my ($r,$uname,$id,$udom,$csec,$cgroup,$parmlev,$usersgroups,$pssymb)=@_;
     my $chooseopt=&Apache::loncommon::select_dom_form($udom,'udom').' '.
-        &Apache::loncommon::selectstudent_link('parmform','uname','udom');
-    my $selscript=&Apache::loncommon::studentbrowser_javascript();
+                  &Apache::loncommon::selectstudent_link('parmform','uname','udom','condition').
+                  &Apache::lonhtmlcommon::scripttag(<<ENDJS);
+function setCourseadv(form,caller) {
+    if (caller.value == 'st') {
+        form.courseadv.value = 'none';
+    } else {
+        form.courseadv.value = '';
+    }
+    return;
+}
+ENDJS
 
+    my (%chkroles,$stuonly,$courseadv);
+    if ($env{'form.userroles'} eq 'any') {
+        $chkroles{'any'} = ' checked="checked"';
+    } else {
+        $chkroles{'st'} = ' checked="checked"';
+        $courseadv = 'none';
+    }
+    my $crstype = $env{'course.'.$env{'request.course.id'}.'.type'};
+    if ($crstype eq 'Community') {
+        $stuonly = &mt('member only');
+    } else {
+        $stuonly = &mt('student only');
+    }
+    $chooseopt .= '<br /><span class="LC_cusr_subheading">'.
+                  &mt("User's role").': '.
+                  '<label><input type="radio" name="userroles" value="st"'.$chkroles{'st'}.' onclick="setCourseadv(this.form,this);" />'.
+                  $stuonly.'</label>  '.
+                  '<label><input type="radio" name="userroles" value="any"'.$chkroles{'any'}.' onclick="setCourseadv(this.form,this);" />'.
+                  &mt('any role').'</label><input type="hidden" id="courseadv" name="courseadv" value="'.$courseadv.'" /></span>';
     my $sections='';
     my %sectionhash = &Apache::loncommon::get_sections();
 
@@ -3064,21 +3092,101 @@
             $csec=&Apache::lonnet::getsection($udom,$uname,
                           $env{'request.course.id'});
             if ($csec eq '-1') {
-                $message=
-                    '<p class="LC_warning">'.
-                    &mt('User [_1] at domain [_2] not in this course',
-                        "'".$uname."'","'".$udom."'").
-                    '</p>';
-                $uname='';
-                if ($env{'request.course.sec'} ne '') {
-                    $csec=$env{'request.course.sec'};
+                my $crstype = $env{'course.'.$env{'request.course.id'}.'.type'};
+                if ($env{'form.userroles'} eq 'any') {
+                    if (($env{'user.name'} eq $uname) && ($env{'user.domain'} eq $udom)) {
+                        $csec = $env{'request.course.sec'};
+                        $message = '<span class="LC_info">';
+                        if ($crstype eq 'Community') {
+                            $message .= &mt('User [_1] at domain [_2] has a non-member role in this community',
+                                            $uname,$udom);
+                        } else {
+                            $message .= &mt('User [_1] at domain [_2] has a non-student role in this course',
+                                            $uname,$udom);
+                        }
+                        $message .= '</span>';
+                    } else {
+                        my @possroles = ('in','ep','ta','cr');
+                        if ($crstype eq 'Community') {
+                            unshift(@possroles,'co');
+                        } else {
+                            unshift(@possroles,'cc');
+                        }
+                        my %not_student_roles =
+                            &Apache::lonnet::get_my_roles($uname,$udom,'userroles',['active'],
+                                                          \@possroles,[$udom],1,1);
+                        my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'};
+                        my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'};
+                        my %sections_by_role;
+                        foreach my $role (keys(%not_student_roles)) {
+                            if ($role =~ /^\Q$cnum:$cdom:\E([^:]+):(|[^:]+)$/) {
+                                my ($rolename,$sec) = ($1,$2);
+                                if ($rolename =~ m{^cr/}) {
+                                    $rolename = 'cr';
+                                }
+                                push(@{$sections_by_role{$rolename}},$sec);
+                            }
+                        }
+                        my $numroles = scalar(keys(%sections_by_role));
+                        if ($numroles) {
+                            foreach my $role (@possroles) {
+                                if (ref($sections_by_role{$role}) eq 'ARRAY') {
+                                    my @secs = sort { $a <=> $b } @{$sections_by_role{$role}};
+                                    $csec = $secs[0];
+                                    last;
+                                }
+                            }
+                        }
+                        if ($csec eq '-1') {
+                            $message = '<span class="LC_warning">';
+                            if ($crstype eq 'Community') {
+                                $message .= &mt('User [_1] at domain [_2] does not have a role in this community',
+                                                $uname,$udom);
+                            } else {
+                                $message .= &mt('User [_1] at domain [_2] does not have a role in this course',
+                                                $uname,$udom);
+                            }
+                            $message .= '</span>';
+                            $uname='';
+                            if ($env{'request.course.sec'} ne '') {
+                                $csec=$env{'request.course.sec'};
+                            } else {
+                                $csec=$env{'form.csec'};
+                            }
+                            $cgroup=$env{'form.cgroup'};
+                        } else {
+                            $message = '<span class="LC_info">';
+                            if ($crstype eq 'Community') {
+                                $message .= &mt('User [_1] at domain [_2] has a non-member role in this community',
+                                         $uname,$udom);
+                            } else {
+                                $message .= &mt('User [_1] at domain [_2] has a non-student role in this course',
+                                                $uname,$udom);
+                            }
+                            $message .= '</span>';
+                        }
+                    }
                 } else {
-                    $csec=$env{'form.csec'};
+                    $message = '<span class="LC_warning">';
+                    if ($crstype eq 'Community') {
+                        $message .= &mt('User [_1] at domain [_2] does not have a member role in this community',
+                                         $uname,$udom);
+                    } else {
+                         $message .= &mt('User [_1] at domain [_2] does not have a student role in this course',
+                                         $uname,$udom);
+                    }
+                    $message .= '</span>';
+                    $uname='';
+                    if ($env{'request.course.sec'} ne '') {
+                        $csec=$env{'request.course.sec'};
+                    } else {
+                        $csec=$env{'form.csec'};
+                    }
+                    $cgroup=$env{'form.cgroup'};
                 }
-                $cgroup=$env{'form.cgroup'};
             } elsif ($env{'request.course.sec'} ne '') {
                 if ($csec ne $env{'request.course.sec'}) {
-                    $message='<span class="LC_error">'.
+                    $message='<span class="LC_warning">'.
                               &mt("User '[_1]' at domain '[_2]' not in section '[_3]'",
                                   $uname,$udom,$env{'request.course.sec'}).
                               '</span>';
@@ -3086,19 +3194,22 @@
                     $csec=$env{'request.course.sec'};
                 }
                 $cgroup=$env{'form.cgroup'};
-            } else {
+            }
+            if ($uname ne '') {
                 my %name=&Apache::lonnet::userenvironment($udom,$uname,
                   ('firstname','middlename','lastname','generation','id'));
-                $message="\n<p>\n".&mt("Full Name").": ".
-                $name{'firstname'}.' '.$name{'middlename'}.' '
-                .$name{'lastname'}.' '.$name{'generation'}.
-                "<br />\n".&mt('Student/Employee ID').": ".$name{'id'}.'<p>';
-            }
-            @usersgroups = &Apache::lonnet::get_users_groups(
-                                       $udom,$uname,$env{'request.course.id'});
-            if (@usersgroups > 0) {
-                unless (grep(/^\Q$cgroup\E$/, at usersgroups)) {
-                    $cgroup = $usersgroups[0];
+                $message .= "\n<p>\n".&mt('Full Name').': '
+                            .$name{'firstname'}.' '.$name{'middlename'}.' '
+                            .$name{'lastname'}.' '.$name{'generation'}
+                            ."<br />\n".&mt('Student/Employee ID').': '.$name{'id'}.'</p>';
+                @usersgroups = &Apache::lonnet::get_users_groups(
+                                   $udom,$uname,$env{'request.course.id'});
+                if (@usersgroups > 0) {
+                    unless (grep(/^\Q$cgroup\E$/, at usersgroups)) {
+                        $cgroup = $usersgroups[0];
+                    }
+                } else {
+                    $cgroup = '';
                 }
             }
         }
Index: loncom/interface/lonpickstudent.pm
diff -u loncom/interface/lonpickstudent.pm:1.32 loncom/interface/lonpickstudent.pm:1.33
--- loncom/interface/lonpickstudent.pm:1.32	Mon Jul 15 16:13:22 2013
+++ loncom/interface/lonpickstudent.pm	Wed Feb 12 16:25:47 2020
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Pick a student from the classlist
 #
-# $Id: lonpickstudent.pm,v 1.32 2013/07/15 16:13:22 bisitz Exp $
+# $Id: lonpickstudent.pm,v 1.33 2020/02/12 16:25:47 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -50,18 +50,20 @@
 
     &Apache::loncommon::get_unprocessed_cgi
         ($ENV{'QUERY_STRING'},['filter','form','unameelement','udomelement',
-			       'roles','courseadvonly','clicker']);
+			       'roles','courseadv','clicker']);
 # Allowed?
     my $allowed;
-    my $scope = $env{'request.course.id'};
-    if (!($allowed = &Apache::lonnet::allowed('srm',$scope))) {
-	$scope .= '/'.$env{'request.course.sec'};
-	$allowed = &Apache::lonnet::allowed('srm',$scope);
-	if ($allowed) { $allowed = 'section';	}
+    if ($env{'request.course.id'}) {
+        if (!($allowed = &Apache::lonnet::allowed('srm',$env{'request.course.id'}))) {
+            if ($env{'request.course.sec'}) {
+                $allowed = &Apache::lonnet::allowed('srm',
+                               "$env{'request.course.id'}/$env{'request.course.sec'}");
+                if ($allowed) { $allowed = 'section'; }
+            }
+        }
     }
 
-    unless (($env{'form.roles'}) ||
-            (($env{'request.course.id'}) && ($allowed))) {
+    unless (($env{'form.roles'}) || ($allowed)) {
 	$r->print(&mt('No context.').
 		  &Apache::loncommon::end_page());
         return OK;
@@ -77,16 +79,23 @@
   <input type="text" name="filter" value="$encoded_filter" />
   <input type="submit" name="Change" value="$change" />
 FILTER
-    foreach my $name ('form','unameelement','udomelement','roles') {
+    foreach my $name ('form','unameelement','udomelement','roles','courseadv','clicker') {
 	my $value = &HTML::Entities::encode($env{"form.$name"},'<>&"');
 	$filterbutton .= <<HIDDEN;
    <input type="hidden" name="$name" value="$value" />
 HIDDEN
     }
-    unless ($env{'form.courseadvonly'}) {
-        $filtermsg = '<br />'.
-	    &mt('Showing users with a name starting with [_1]',
-	        $filterbutton).'<br />';
+    unless ($env{'form.courseadv'} eq 'only') {
+        if ($env{'request.course.id'}) {
+            my $crstype = &Apache::loncommon::course_type();
+            my $showrole = &Apache::lonnet::plaintext('st',$crstype);
+            $filtermsg = &mt("Showing users with role of '[_1]' with name starting: [_2]",
+                             $showrole,$filterbutton);
+        } else {
+            $filtermsg =
+	        &mt('Showing users with a name starting with [_1]',
+	            $filterbutton);
+        }
     }
     if ($filter eq '') {
 	$filter = '.'
@@ -110,32 +119,34 @@
 
     $r->print('<form action="">');
     if ($allowed && (!$env{'form.roles'})) {
+        unless ($env{'form.courseadv'} eq 'none') {
 # -------------------------------------------------------- Get course personnel
-	$r->print('<h3>'.$env{'course.'.$env{'request.course.id'}.'.description'}.
-		  '</h3>');
-	my %coursepersonnel=
-	    &Apache::lonnet::get_course_adv_roles();
-	$r->print(&Apache::loncommon::start_data_table());
-	foreach my $role (sort(keys(%coursepersonnel))) {
-	    foreach my $user (split(/\,/,$coursepersonnel{$role})) {
-		my ($puname,$pudom)=split(/\:/,$user);
-		$r->print(&Apache::loncommon::start_data_table_row().
-			  '<td>'.
-			  '<input type="button" value="'.&mt('Select').'" onclick="gochoose('.
-			  "'".$puname."','".$pudom."')".'" /></td><td>'.$role.'</td><td>'.
-			  &Apache::loncommon::aboutmewrapper(&Apache::loncommon::plainname($puname,$pudom),$puname,$pudom).'</td>'.
-			  &Apache::loncommon::end_data_table_row());
-	    }
-	}
-	$r->print(&Apache::loncommon::end_data_table().'<p> ');
-
-	$r->print($filtermsg);
+	    $r->print('<h3>'.$env{'course.'.$env{'request.course.id'}.'.description'}.
+		      '</h3>');
+	    my %coursepersonnel=
+	        &Apache::lonnet::get_course_adv_roles();
+	    $r->print(&Apache::loncommon::start_data_table());
+	    foreach my $role (sort(keys(%coursepersonnel))) {
+	        foreach my $user (split(/\,/,$coursepersonnel{$role})) {
+		    my ($puname,$pudom)=split(/\:/,$user);
+		    $r->print(&Apache::loncommon::start_data_table_row().
+			      '<td>'.
+			      '<input type="button" value="'.&mt('Select').'" onclick="gochoose('.
+			      "'".$puname."','".$pudom."')".'" /></td><td>'.$role.'</td><td>'.
+			      &Apache::loncommon::aboutmewrapper(&Apache::loncommon::plainname($puname,$pudom),$puname,$pudom).'</td>'.
+			      &Apache::loncommon::end_data_table_row());
+                }
+            }
+            $r->print(&Apache::loncommon::end_data_table().'<br /><hr />');
+        }
 
-	$r->print('</p>');
+        if ($filtermsg ne '') {
+            $r->print('<p>'.$filtermsg.'</p>');
+        }
 
         $r->rflush();
 
-        unless ($env{'form.courseadvonly'}) {
+        unless ($env{'form.courseadv'} eq 'only') {
 
 # ------------------------------------------------------------------ Students
 
@@ -276,7 +287,7 @@
     }
     $r->print('</form>'.&Apache::loncommon::end_page());
     return OK;
-} 
+}
 
 1;
 __END__
Index: loncom/interface/loncommon.pm
diff -u loncom/interface/loncommon.pm:1.1336 loncom/interface/loncommon.pm:1.1337
--- loncom/interface/loncommon.pm:1.1336	Wed Feb  5 21:48:05 2020
+++ loncom/interface/loncommon.pm	Wed Feb 12 16:25:48 2020
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # a pile of common routines
 #
-# $Id: loncommon.pm,v 1.1336 2020/02/05 21:48:05 raeburn Exp $
+# $Id: loncommon.pm,v 1.1337 2020/02/12 16:25:48 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -436,7 +436,7 @@
 <script type="text/javascript" language="Javascript">
 // <![CDATA[
     var stdeditbrowser;
-    function openstdbrowser(formname,uname,udom,clicker,roleflag,ignorefilter,courseadvonly) {
+    function openstdbrowser(formname,uname,udom,clicker,roleflag,ignorefilter,courseadv) {
         var url = '/adm/pickstudent?';
         var filter;
 	if (!ignorefilter) {
@@ -451,7 +451,12 @@
                                     '&udomelement='+udom+
                                     '&clicker='+clicker;
 	if (roleflag) { url+="&roles=1"; }
-        if (courseadvonly) { url+="&courseadvonly=1"; }
+        if (courseadv == 'condition') {
+            if (document.getElementById('courseadv')) {
+                courseadv = document.getElementById('courseadv').value;
+            }
+        }
+        if ((courseadv == 'only') || (courseadv == 'none')) { url+="&courseadv="+courseadv; }
         var title = 'Student_Browser';
         var options = 'scrollbars=1,resizable=1,menubar=0';
         options += ',width=700,height=600';
@@ -483,7 +488,7 @@
 }
 
 sub selectstudent_link {
-   my ($form,$unameele,$udomele,$courseadvonly,$clickerid)=@_;
+   my ($form,$unameele,$udomele,$courseadv,$clickerid)=@_;
    my $callargs = "'".&Apache::lonhtmlcommon::entity_encode($form)."','".
                       &Apache::lonhtmlcommon::entity_encode($unameele)."','".
                       &Apache::lonhtmlcommon::entity_encode($udomele)."'";
@@ -494,8 +499,12 @@
 	   return '';
        }
        $callargs.=",'".&Apache::lonhtmlcommon::entity_encode($clickerid)."'";
-       if ($courseadvonly)  {
-           $callargs .= ",'',1,1";
+       if ($courseadv eq 'only') {
+           $callargs .= ",'',1,'$courseadv'";
+       } elsif ($courseadv eq 'none') {
+           $callargs .= ",'','','$courseadv'";
+       } elsif ($courseadv eq 'condition') {
+           $callargs .= ",'','','$courseadv'";
        }
        return '<span class="LC_nobreak">'.
               '<a href="javascript:openstdbrowser('.$callargs.');">'.
Index: loncom/interface/courseprefs.pm
diff -u loncom/interface/courseprefs.pm:1.88 loncom/interface/courseprefs.pm:1.89
--- loncom/interface/courseprefs.pm:1.88	Sat Sep  1 22:28:55 2018
+++ loncom/interface/courseprefs.pm	Wed Feb 12 16:25:48 2020
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Handler to set configuration settings for a course
 #
-# $Id: courseprefs.pm,v 1.88 2018/09/01 22:28:55 raeburn Exp $
+# $Id: courseprefs.pm,v 1.89 2020/02/12 16:25:48 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -3759,7 +3759,7 @@
     my $domform = &Apache::loncommon::select_dom_form($cdom,$item.'_udom_'.$num,$includeempty);
     my $selectlink =
         &Apache::loncommon::selectstudent_link('display',$item.'_uname_'.$num,
-                                               $item.'_udom_'.$num,1);
+                                               $item.'_udom_'.$num,'only');
     my $output = 
         '<table><tr><td align="center">'.&mt('Username').'<br />'.
         '<input type="text" name="'.$item.'_uname_'.$num.'" value="" /></td>'.
Index: loncom/homework/grades.pm
diff -u loncom/homework/grades.pm:1.761 loncom/homework/grades.pm:1.762
--- loncom/homework/grades.pm:1.761	Wed Mar  6 15:45:29 2019
+++ loncom/homework/grades.pm	Wed Feb 12 16:25:56 2020
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # The LON-CAPA Grading handler
 #
-# $Id: grades.pm,v 1.761 2019/03/06 15:45:29 raeburn Exp $
+# $Id: grades.pm,v 1.762 2020/02/12 16:25:56 raeburn Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -10400,7 +10400,7 @@
                    "\n".&mt("Username").": <input type='text' name='uname".$id."' /> ".
                    "\n".&mt("Domain").": ".
                    &Apache::loncommon::select_dom_form($env{'course.'.$env{'request.course.id'}.'.domain'},'udom'.$id).' '.
-                   &Apache::loncommon::selectstudent_link('clickeranalysis','uname'.$id,'udom'.$id,0,$id);
+                   &Apache::loncommon::selectstudent_link('clickeranalysis','uname'.$id,'udom'.$id,'',$id);
           $unknown_count++;
        }
     }


More information about the LON-CAPA-cvs mailing list