Diff for /loncom/interface/lonviewclasslist.pm between versions 1.3 and 1.8

version 1.3, 2004/12/08 19:30:58 version 1.8, 2007/07/20 00:15:06
Line 36  use Apache::loncommon(); Line 36  use Apache::loncommon();
 use Apache::lonhtmlcommon();  use Apache::lonhtmlcommon();
 use Apache::Constants qw(:common :http REDIRECT);  use Apache::Constants qw(:common :http REDIRECT);
 use Apache::lonlocal;  use Apache::lonlocal;
   use Apache::lonnet;
   
   
 ###################################################################  ###################################################################
Line 67  sub handler { Line 68  sub handler {
           text=>"View Classlist",            text=>"View Classlist",
           faq=>9,bug=>'Instructor Interface',});            faq=>9,bug=>'Instructor Interface',});
     #  Needs to be in a course      #  Needs to be in a course
     if (! ($ENV{'request.course.fn'})) {      if (! ($env{'request.course.fn'})) {
         $ENV{'user.error.msg'}=          $env{'user.error.msg'}=
             "/adm/viewclasslist:not in course role";              "/adm/viewclasslist:not in course role";
         return HTTP_NOT_ACCEPTABLE;           return HTTP_NOT_ACCEPTABLE; 
     }      }
     &Apache::loncommon::content_type($r,'text/html');      &Apache::loncommon::content_type($r,'text/html');
     $r->send_http_header;      $r->send_http_header;
     #      #
     my $bodytag=&Apache::loncommon::bodytag('Classlist');      my $start_page = &Apache::loncommon::start_page('Classlist');
     my $breadcrumbs=&Apache::lonhtmlcommon::breadcrumbs(undef,      my $breadcrumbs= &Apache::lonhtmlcommon::breadcrumbs(undef,
                                                         'Enrollment Manager');   'Enrollment Manager');
     $r->print(<<ENDHEADER);      $r->print(<<ENDHEADER);
 <html>  $start_page
 <head>  
 <title>Classlist</title>  
 </head>  
 $bodytag  
 $breadcrumbs  $breadcrumbs
 ENDHEADER  ENDHEADER
     #  
       # Get classlist view settings
       my %viewsettings = &retrieve_view_settings();
   
     # Print classlist      # Print classlist
     my $cid = $ENV{'request.course.id'};      if (keys(%viewsettings) > 0) {
     my $viewpermission = 'course.'.$cid.'.student_classlist_view';          $r->print(&html_classlist($r,\%viewsettings));
     if (&allowed_to_view_classlist()) {      } else {
         $r->print(&html_classlist());          $r->print('<h3>'.
     } else {                    &mt("Display of a student-viewable course roster is not currently enabled.").
         $r->print('<h2>'.                    '</h3>');
                   &mt("You are not authorized to view the classlist for your course.").  
                   '</h2>');  
     }      }
     #      #
     # Finish up      # Finish up
     $r->print('</body></html>');      $r->print(&Apache::loncommon::end_page());
     return OK;      return OK;
 }  }
   
 sub allowed_to_view_classlist {  sub retrieve_view_settings {
     return 0 if (! exists($ENV{'request.course.id'}));      my %viewsettings;
     my $cid = $ENV{'request.course.id'};      if (exists($env{'request.course.id'})) {
     my $viewpermission = 'course.'.$cid.'.student_classlist_view';          my $cid = $env{'request.course.id'};
     if (exists($ENV{$viewpermission}) &&          my $viewpermission = 'course.'.$cid.'.student_classlist_view';
         $ENV{$viewpermission} =~ /^(all|section)$/) {          my $student_opt_in = 'course.'.$cid.'.student_classlist_opt_in';
         return $ENV{$viewpermission};          my $portfiles_link = 'course.'.$cid.'.student_classlist_portfiles';
     } else {          if (exists($env{$viewpermission}) &&
         return 0;              $env{$viewpermission} =~ /^(all|section)$/) {
               $viewsettings{'permission'} = $env{$viewpermission};
               if ($viewsettings{'permission'} =~ /^section$/i) {
                   $viewsettings{'limit_to_section'} = 1;
               } else {
                   $viewsettings{'limit_to_section'} = 0;
               }
               $viewsettings{'student_opt_in'} = $env{$student_opt_in};
               $viewsettings{'portfiles_link'} = $env{$portfiles_link};
           }
     }      }
       return %viewsettings;
 }  }
   
 sub html_classlist {  sub html_classlist {
     my $limit_to_section = (&allowed_to_view_classlist()=~ /^section$/i);      my ($r,$viewsettings) = @_;
     my $Str;      my ($Str,$title,$secdisplay,$cid,$cdom,$cnum,$listtype,%publicroster);
     if ($limit_to_section) {      my $fullroster = &Apache::loncoursedata::get_classlist();
         if ($ENV{'request.course.sec'} eq '') {      my $classlist;
             $Str .= '<h2>'.  
                 &mt('Students with no section').'</h2>';      if ($env{'form.action'} eq 'setenv') {
           $Str .= &process_student_prefs();
       }
       $Str .= '<h3>'.&mt('Student-viewable course roster').'</h3>';
   
       $cid = $env{'request.course.id'};
       $cdom = $env{'course.'.$cid.'.domain'};
       $cnum = $env{'course.'.$cid.'.num'};
   
       if ($viewsettings->{'limit_to_section'}) {
           if ($env{'request.course.sec'} eq '') {
               $title = '<h4>'.&mt('Students with no section').'</h4>';
               $listtype = 'without a section';
         } else {          } else {
             $Str.='<h2>'.              $title ='<h4>'.&mt('Students in section "[_1]"',
                 &mt('Students in section "[_1]"',                                 $env{'request.course.sec'}).'</h4>';
                     $ENV{'request.course.sec'}).              $listtype = 'in the section';
                     '</h2>';              $secdisplay = " ($env{'request.course.sec'}) ";
           }
       } else {
           $title .= '<h4>'.&mt('Students in any section').'</h4>';
           $listtype = 'in the course';
       }
   
       if ($viewsettings->{'student_opt_in'}) {
           if ($env{'request.role'} =~ /^st/)  {
               $Str .= &print_roster_form();
         }          }
           %publicroster = &Apache::lonnet::dump('publicroster',$cdom,$cnum);
     }      }
     #   
     my $classlist = &Apache::loncoursedata::get_classlist();      $Str .= $title;
     #  
       my $fullcount = 0;
       my $publiccount = 0;
       my $displaycount = 0;
       my $sectionidx  = &Apache::loncoursedata::CL_SECTION();
       my $statusidx   = &Apache::loncoursedata::CL_STATUS();
   
       foreach my $student (keys(%{$fullroster})) {
           my $section  = $fullroster->{$student}->[$sectionidx];
           my $status   = $fullroster->{$student}->[$statusidx];
           next if (lc($status) ne 'active');
           if ($viewsettings->{'limit_to_section'}) {
               next if ($section ne $env{'request.course.sec'});
           }
           $fullcount ++;
           if ($viewsettings->{'student_opt_in'}) {
               if ($publicroster{$student}) {
                   $classlist->{$student} = $fullroster->{$student};
                   $publiccount ++;
               }
           } else {
               $classlist->{$student} = $fullroster->{$student};
           }
       }
       if ($viewsettings->{'student_opt_in'}) {
           $displaycount = $publiccount;
           if ($fullcount > $publiccount) {
               if ($publiccount) {
                   $Str .= &mt('Only students who have opted to be listed in the roster ([_1] out of [_2] students) are shown.',$publiccount,$fullcount).'<br />';
               } else {
                   if ($fullcount == 1) {
                       $Str .= &mt('The single student '.$listtype.'[_1] has opted not to be listed in the roster.',$secdisplay);
                   } else {
                       $Str .= &mt('None of the [_1] students '.$listtype.'[_2] have opted to be listed in the roster.',$fullcount,$secdisplay);
                   }
                   return $Str;
               }
           } else {
               if ($fullcount > 1) {
                   $Str .= &mt('All [_1] students '.$listtype.'[_2] have opted to be listed in the roster.',$fullcount,$secdisplay);
               } elsif ($fullcount == 1) {
                   $Str .= &mt('The single student '.$listtype.'[_1] has opted to be listed in the roster.',$secdisplay);
               }
           }
       } else {
           $displaycount = $fullcount;
           if ($fullcount > 1) {
               $Str .= &mt('All [_1] students '.$listtype.'[_2] are listed in the roster.',$fullcount,$secdisplay);
           } elsif ($fullcount == 1) {
               $Str .= &mt('There is only a single student '.$listtype.'[_1]',$secdisplay);
           }
       }
       undef($fullroster);
   
       if (!$displaycount) {
           $Str .= &mt('There are currently no students to display.');
           return $Str;
       }
   
     # Set up a couple variables.      # Set up a couple variables.
     my $usernameidx = &Apache::loncoursedata::CL_SNAME();      my $usernameidx = &Apache::loncoursedata::CL_SNAME();
     my $domainidx   = &Apache::loncoursedata::CL_SDOM();      my $domainidx   = &Apache::loncoursedata::CL_SDOM();
     my $fullnameidx = &Apache::loncoursedata::CL_FULLNAME();      my $fullnameidx = &Apache::loncoursedata::CL_FULLNAME();
     my $sectionidx  = &Apache::loncoursedata::CL_SECTION();  
     my $statusidx   = &Apache::loncoursedata::CL_STATUS();  
     #  
     # Sort the students      # Sort the students
     my $sortby = $fullnameidx;      my $sortby = $fullnameidx;
     my @Sorted_Students = sort {      my @Sorted_Students = sort {
         lc($classlist->{$a}->[$sortby])  cmp lc($classlist->{$b}->[$sortby])          lc($classlist->{$a}->[$sortby])  cmp lc($classlist->{$b}->[$sortby])
         } (keys(%$classlist));          } (keys(%$classlist));
     $Str .= '<table>'.$/.      $Str .= '<br />'.&Apache::loncommon::start_data_table()."\n".
         '<tr>'.              &Apache::loncommon::start_data_table_header_row()."\n".
         '<th></th>'. # for the count          '<th></th>'. # for the count
         '<th>'.&mt('Student').'</th>'.          '<th>'.&mt('Student').'</th>'.
         '<th>'.&mt('Username').'</th>';          '<th>'.&mt('Username').'</th>';
     if (! $limit_to_section) {      if (! $viewsettings->{'limit_to_section'}) {
         $Str .= '<th>'.&mt('Section').'</th>';          $Str .= '<th>'.&mt('Section').'</th>';
     }      }
     $Str .='</tr>'.$/;      if ($viewsettings->{'portfiles_link'}) {
           $Str .= '<th>'.&mt('Available Portfolio files').'</th>';
       }
       $Str .= &Apache::loncommon::end_data_table_header_row();
     my $count ++;      my $count ++;
     foreach my $student (@Sorted_Students) {      foreach my $student (@Sorted_Students) {
         my $username = $classlist->{$student}->[$usernameidx];          my $username = $classlist->{$student}->[$usernameidx];
Line 162  sub html_classlist { Line 251  sub html_classlist {
             $fullname = &mt('Name not given');              $fullname = &mt('Name not given');
         }          }
         my $section  = $classlist->{$student}->[$sectionidx];          my $section  = $classlist->{$student}->[$sectionidx];
         my $status   = $classlist->{$student}->[$statusidx];          if ($section eq '') {
         next if (lc($status) ne 'active');              $section = &mt('none');
         if ($limit_to_section) {  
             if ($section ne $ENV{'request.course.sec'}) {  
                 next;  
             }  
         }          }
         $Str .= '<tr>'.          $Str .= &Apache::loncommon::start_data_table_row()."\n".
             '<td>'.$count++.'</td>'.              '<td>'.$count++.'</td>'.
             '<td>'.&Apache::loncommon::aboutmewrapper($fullname,              '<td>'.&Apache::loncommon::aboutmewrapper($fullname,
                                                       $username,                                                        $username,
Line 178  sub html_classlist { Line 263  sub html_classlist {
             &Apache::loncommon::messagewrapper              &Apache::loncommon::messagewrapper
             ('<img src="/adm/lonIcons/mailto.gif" border="0" />&nbsp;'.              ('<img src="/adm/lonIcons/mailto.gif" border="0" />&nbsp;'.
              $username.'@'.$domain,$username,$domain).'</td>';               $username.'@'.$domain,$username,$domain).'</td>';
         if (! $limit_to_section) {          if (! $viewsettings->{'limit_to_section'}) {
             $Str .= '<td>'.$section.'</td>';              $Str .= '<td>'.$section.'</td>';
         }          }
         $Str .= '</tr>'.$/;          if ($viewsettings->{'portfiles_link'}) {
               my $filecounts = &Apache::lonaboutme::portfolio_files($r,'showlink',undef,undef,$domain,$username,$fullname);
               my $link;
               if (ref($filecounts) eq 'HASH') {
                   $link = &mt('[quant,_1,file,files,No files]',$filecounts->{'both'});
                   if ($filecounts->{'both'} > 0) {
                       $link = '<a href="/adm/'.$domain.'/'.$username.'/aboutme/portfolio?classlist">'.$link.'</a>'; 
                   }
               } else {
                   $link = &mt("Error retrieving file information.");
               }
               $Str .= '<td>'.$link.'</td>';
           }
           $Str .= &Apache::loncommon::end_data_table_row()."\n";
     }      }
     $Str .= '</table>';      $Str .= &Apache::loncommon::end_data_table();
     return $Str;      return $Str;
 }  }
   
   sub print_roster_form {
       my $cid = $env{'request.course.id'};
       my $showinroster = $env{'environment.internal.'.$cid.'.showinroster'};
       my ($showoff,$showon);
       if ($showinroster) {
           $showon = ' checked="checked" ';
           $showoff = ' ';
       } else {
           $showoff = ' checked="checked" ';
           $showon = ' ';
       }
       my $output = '<hr /><h4>'.&mt('Your roster setting').'</h4>';
       if ($showinroster) {
           $output .= &mt('You are currently listed in the student-viewable roster.');
       } else {
           $output .=  &mt('You are currently <b>not</b> listed in the student-viewable roster.');
       }
       $output .= '<br />'.&mt('Include yourself in the roster?').'&nbsp;&nbsp;'.
           '<form name="studentparm" method="post">'.
           '<span class="LC_nobreak"><label><input type="radio" name="showinroster" value="1"'.$showon.'/>'.&mt('Yes').'</label>&nbsp;&nbsp;<label>'.
           '<input type="radio" name="showinroster" value="0"'.$showoff.'/>'.&mt('No').
           '</label></span><br /><br />'.
           '<input type="hidden" name="action" value="setenv" />'.
           '<input type="submit" name="studentsubmit" value="'.&mt('Save').'" /></form><hr />';
       return $output;
   }
   
   sub process_student_prefs {
       my $cid = $env{'request.course.id'};
       my $cdom = $env{'course.'.$cid.'.domain'};
       my $cnum = $env{'course.'.$cid.'.num'};
       my $uname = $env{'user.name'};
       my $udom = $env{'user.domain'};
       my $student = $uname.':'.$udom;
       my %pubroster = &Apache::lonnet::get('publicroster',[$student],$cdom,$cnum);
       my $visibility = &mt('off');
       my $showinroster = $env{'form.showinroster'};
       if ($showinroster) {
           $visibility = &mt('on');
       }
       my $sturoster = 0;
       if ($pubroster{$student}) {
           $sturoster = 1;
       }
       my $output;
       if ($sturoster ne $showinroster) {
           my %changeHash = (
               'environment.internal.'.$cid.'.showinroster' => $showinroster,
           );
           my $putresult = &Apache::lonnet::put('environment',
                                                \%changeHash,$udom,$uname);
           if ($putresult eq 'ok') {
               &Apache::lonnet::appenv(%changeHash);
               my $result = &Apache::lonnet::put('publicroster',{$student => $showinroster,},$cdom,$cnum);
               if ($result eq 'ok') {
                   $output .= &mt('Display of your name in the student-viewable roster set to <b>[_1]</b>.',$visibility);
               } else {
                   $output .= &mt('Error occurred saving display setting.');
               }
           } else {
               $output .= &mt('Error occurred saving display setting.');
           }
       } else {
           $output .= &mt('Display of your name in the student-viewable roster unchanged (set to <b>[_1]</b>).',$visibility);
       }
       return $output;
   }
   
   
   
   
 ###################################################################  ###################################################################
 ###################################################################  ###################################################################
   

Removed from v.1.3  
changed lines
  Added in v.1.8


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