# The LearningOnline Network with CAPA # Handler to manage course access keys # # $Id: lonmanagekeys.pm,v 1.4 2003/04/23 13:11:45 www Exp $ # # Copyright Michigan State University Board of Trustees # # This file is part of the LearningOnline Network with CAPA (LON-CAPA). # # LON-CAPA is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # LON-CAPA is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with LON-CAPA; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # /home/httpd/html/adm/gpl.txt # # http://www.lon-capa.org/ # ############################################################### ############################################################### package Apache::lonmanagekeys; use strict; use Apache::lonnet(); use Apache::loncommon(); use Apache::lonhtmlcommon(); use Apache::Constants qw(:common :http REDIRECT); use Spreadsheet::WriteExcel; ############################################################### ############################################################### sub header { my $bodytag=&Apache::loncommon::bodytag('Access Key Management'); return(< LON-CAPA Access Key Management $bodytag
ENDHEAD } # =================================================== Show student list to drop sub show_key_list { my ($r,$mode,$linkto,$action,$statusmode,$classlist,$keylist)=@_; # # Just junk so that this compiles # my ($username,$domain,$id,$name,$section,$status,@Sorted_Students); # # # my $cid=$ENV{'form.cid'}; # # Variables for excel output my ($excel_workbook, $excel_sheet, $excel_filename,$row); # # Print out header if ($mode eq 'view') { } elsif ($mode eq 'excel') { # Create the excel spreadsheet $excel_filename = '/prtspool/'. $ENV{'user.name'}.'_'.$ENV{'user.domain'}.'_'. time.'_'.rand(1000000000).'.xls'; $excel_workbook = Spreadsheet::WriteExcel->new('/home/httpd'. $excel_filename); $excel_workbook->set_tempdir('/home/httpd/perl/tmp'); $excel_sheet = $excel_workbook->addworksheet('classlist'); # my $description = 'Classlist for '. $ENV{'course.'.$ENV{'request.course.id'}.'.description'}; $excel_sheet->write($row++,0,$description); # $excel_sheet->write($row++,0,["username","domain","ID", "student name","section","status"]); } foreach my $student (@Sorted_Students) { if ($mode eq 'view') { } elsif ($mode eq 'csv') { # no need to bother with $linkto my @line = (); foreach ($username,$domain,$id,$name,$section) { push @line,&Apache::loncommon::csv_translate($_); } if ($statusmode eq 'Any') { push @line,&Apache::loncommon::csv_translate($status); } my $tmp = $"; $" = '","'; $r->print("\"@line\"\n"); $" = $tmp; } elsif ($mode eq 'excel') { $excel_sheet->write($row++,0,[$username,$domain,$id, $name,$section,$status]); } } if ($mode eq 'view') { } elsif ($mode eq 'excel') { $excel_workbook->close(); $r->print('

'. 'Your Excel spreadsheet is ready for download.

'."\n"); } } # ----------------------------------------------------------- Toggle Key Access sub togglekeyaccess { my %cenv=@_; unless ($cenv{'domain'}) { return; } if ($cenv{'keyaccess'} eq 'yes') { return 'Removing key access: '. &Apache::lonnet::del('environment',['keyaccess'], $cenv{'domain'},$cenv{'num'}); } else { return 'Establishing key access: '. &Apache::lonnet::put('environment',{'keyaccess' => 'yes'}, $cenv{'domain'},$cenv{'num'}); } } # --------------------------------------------------------------- Generate Keys sub genkeys { my ($num,$comments,%cenv)=@_; unless ($num) { return 'No number of keys given.'; } unless (($num=~/^\d+$/) && ($num>0)) { return 'Invalid number of keys given.'; } return 'Generated '.&Apache::lonnet::generate_access_keys ($num,$cenv{'domain'},$cenv{'num'},$comments).' of '.$num. ' access keys.'; } ################################################################### ################################################################### sub handler { my $r=shift; if ($r->header_only) { $r->content_type('text/html'); $r->send_http_header; return OK; } &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, ['state','cid']); if (($ENV{'form.domain'}) && ($ENV{'form.course'})) { $ENV{'form.cid'}=$ENV{'form.domain'}.'_'.$ENV{'form.course'}; } unless (&Apache::lonnet::allowed('mky',$ENV{'request.role.domain'})) { $ENV{'user.error.msg'}= "/adm/managekeys:mky:0:0:Cannot manage access keys"; return HTTP_NOT_ACCEPTABLE; } if ($ENV{'form.cid'}) { my %cenv=&Apache::lonnet::coursedescription($ENV{'form.cid'}); if (exists($ENV{'form.state'}) && ($ENV{'form.state'} eq 'csv')) { # # CSV Output # $r->content_type('text/csv'); # # Do CSV # } else { # # Normal web stuff # $r->content_type('text/html'); $r->send_http_header; $r->print(&header()); $r->print( ''); # --- Actions if ($ENV{'form.toggle'}) { $r->print(&togglekeyaccess(%cenv).'
'); %cenv=&Apache::lonnet::coursedescription($ENV{'form.cid'}); } if ($ENV{'form.genkeys'}) { $r->print( &genkeys($ENV{'form.num'},$ENV{'form.comments'},%cenv).'
'); } # --- Menu $r->print('

Key Access

'); if ($cenv{'keyaccess'} eq 'yes') { $r->print('Access to this course is key controlled. ') } else { $r->print('Access to this course is open, no access keys. '); } $r->print(<

Generate New Keys

Number of keys to be generated:
Comments/Remarks/Notes:
ENDKEYGEN $r->print(''); } } else { # Start page no course id $r->content_type('text/html'); $r->send_http_header; $r->print(&header().&Apache::loncommon::coursebrowser_javascript()); $r->print( 'Course ID: '); $r->print('Domain: '.&Apache::loncommon::select_dom_form( $ENV{'request.role.domain'},'domain')); $r->print(&Apache::loncommon::selectcourse_link( 'keyform','course','domain')); $r->print('
'); $r->print(''); } return OK; } ################################################################### ################################################################### 1; __END__