Diff for /loncom/interface/lonmanagekeys.pm between versions 1.6 and 1.25

version 1.6, 2003/05/01 02:12:43 version 1.25, 2009/10/29 14:23:23
Line 31 Line 31
 package Apache::lonmanagekeys;  package Apache::lonmanagekeys;
   
 use strict;  use strict;
 use Apache::lonnet();  use Apache::lonnet;
 use Apache::loncommon();  use Apache::loncommon();
 use Apache::lonhtmlcommon();  use Apache::lonhtmlcommon();
 use Apache::Constants qw(:common :http REDIRECT);  use Apache::Constants qw(:common :http REDIRECT);
 use Spreadsheet::WriteExcel;  use Spreadsheet::WriteExcel;
   use Apache::lonlocal;
   
 ###############################################################  ###############################################################
 ###############################################################  ###############################################################
 sub header {  sub header {
     my $bodytag=&Apache::loncommon::bodytag('Access Key Management');      # Breadcrumbs
       my $brcrum = [{'href' => '/adm/managekeys',
                      'text' => 'Access Key Management'}];
   
       my $start_page=&Apache::loncommon::start_page('Access Key Management',
                                                     undef,
                                                     {'bread_crumbs' => $brcrum,});
     return(<<ENDHEAD);      return(<<ENDHEAD);
 <html>  $start_page
 <head>  
 <title>LON-CAPA Access Key Management</title>  
 </head>  
 $bodytag  
 <form method="post" enctype="multipart/form-data"    <form method="post" enctype="multipart/form-data"  
       action="/adm/managekeys" name="keyform">        action="/adm/managekeys" name="keyform">
 ENDHEAD  ENDHEAD
Line 54  ENDHEAD Line 57  ENDHEAD
   
 # =================================================== Show student list to drop  # =================================================== Show student list to drop
 sub show_key_list {  sub show_key_list {
     my ($r,$comment,%cenv)=@_;      my ($r,$csvlist,$comment,$newonly,$checkonly,%cenv)=@_;
       $comment=~s/\W/\./g;
     my %accesskeys=&Apache::lonnet::dump      my %accesskeys=&Apache::lonnet::dump
  ('accesskeys',$cenv{'domain'},$cenv{'num'});   ('accesskeys',$cenv{'domain'},$cenv{'num'});
     foreach (keys %accesskeys) {      unless ($csvlist) {
  $r->print($_.' '.$accesskeys{$_}.'<br />');   $r->print(<<ENDTABLEHEADER);
     }  <script>
     return '';      function copyallcom(tf) {
 #   for (i=0; i<tf.elements.length; i++) {
 # Junk below              if  (tf.elements[i].name.indexOf('com_')==0) {
 #        tf.elements[i].value+=tf.copyall.value;
     my ($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') {  </script>
     } elsif ($mode eq 'excel') {  <h3>List of Keys/Enter New Comments</h3>
         $excel_workbook->close();  <table border="2"><tr><th>Key</th><th>Checked Out</th>
         $r->print('<p><a href="'.$excel_filename.'">'.  <th>Comments/Remarks/Notes</th>
                'Your Excel spreadsheet</a> is ready for download.</p>'."\n");  <th>Enter Additional Comments/Remarks/Notes<br />
   <input type="text" size="40" name="copyall" />
   <input type="button" value="Copy to All" onClick="copyallcom(this.form);" />
   </th></tr>
   ENDTABLEHEADER
     }      }
       foreach (keys %accesskeys) {
           if ($_=~/^error\:/) {
       $r->print('<tr><td>No keys have been generated yet.</td></tr>');
           } elsif ($accesskeys{$_}=~/$comment/) {
       my ($checkout,$com)=split(/\s*\#\s*/,$accesskeys{$_});
               unless ($checkout) {
    if ($checkonly) { next; }
               } else {
    if ($newonly) { next; }
               }
               unless ($csvlist) {
    $r->print("\n<tr><td><tt>".$_.'</tt></td><td>'.($checkout?
                        $checkout:'-').'</td><td>'.
                        join('<br />',split(/\s*\;\s*/,$com)).
        '</td><td><input type="text" size="40" name="com_'.$_.
        '" value="" /></td></tr>');
       } else {
    my @line = ();
    push @line,&Apache::loncommon::csv_translate($_);
    push @line,&Apache::loncommon::csv_translate($checkout);
    foreach (split(/\s*\;\s*/,$com)) {
       push @line,&Apache::loncommon::csv_translate($_);
    }
    my $tmp = $";
    $" = '","';
    $r->print("\"@line\"\n");
    $" = $tmp;
       }
          }
       }
       unless ($csvlist) {
    $r->print('</table>');
    $r->print('<input type="submit" name="addcom" value="Add Above Comments to Keys" /><hr />');
       }
       return '';
 }  }
   
   
Line 160  sub genkeys { Line 153  sub genkeys {
     $num.' access keys (Batch Number: '.$batchnumber.')',$batchnumber;      $num.' access keys (Batch Number: '.$batchnumber.')',$batchnumber;
 }  }
   
   # ---------------------------------------------------------------- Add comments
   
   sub addcom {
       my %cenv=@_;
       my %newcomment=();
       undef %newcomment;
       foreach (keys %env) {
    if ($_=~/^form\.com\_(.+)$/) {
               my $key=$1;
       my $comment=$env{$_};
               $comment=~s/^\s+//gs;
               if ($comment) {
                  &Apache::lonnet::comment_access_key
      ($key,$cenv{'domain'},$cenv{'num'},$comment); 
      }
    }
       }
       return '';
   }
 ###################################################################  ###################################################################
 ###################################################################  ###################################################################
 sub handler {  sub handler {
     my $r=shift;      my $r=shift;
     if ($r->header_only) {      if ($r->header_only) {
         $r->content_type('text/html');          &Apache::loncommon::content_type($r,'text/html');
         $r->send_http_header;          $r->send_http_header;
         return OK;          return OK;
     }      }
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},      &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
     ['state','cid']);      ['state','cid']);
     if (($ENV{'form.domain'}) && ($ENV{'form.course'})) {      if (($env{'form.domain'}) && ($env{'form.course'})) {
  $ENV{'form.cid'}=$ENV{'form.domain'}.'_'.$ENV{'form.course'};   $env{'form.cid'}=$env{'form.domain'}.'_'.$env{'form.course'};
     }      }
   
     unless (&Apache::lonnet::allowed('mky',$ENV{'request.role.domain'})) {      unless (&Apache::lonnet::allowed('mky',$env{'request.role.domain'})) {
         $ENV{'user.error.msg'}=          $env{'user.error.msg'}=
             "/adm/managekeys:mky:0:0:Cannot manage access keys";              "/adm/managekeys:mky:0:0:Cannot manage access keys";
         return HTTP_NOT_ACCEPTABLE;           return HTTP_NOT_ACCEPTABLE; 
     }      }
     if ($ENV{'form.cid'}) {      if ($env{'form.cid'}) {
         my %cenv=&Apache::lonnet::coursedescription($ENV{'form.cid'});   my %cenv=&Apache::lonnet::coursedescription($env{'form.cid'});
  if (exists($ENV{'form.state'}) && ($ENV{'form.state'} eq 'csv')) {   my $keytype='';
    if ($cenv{'url'} eq '/res/') {
       ($cenv{'domain'},$cenv{'num'})=split(/\_/,$env{'form.cid'});
       $keytype='auth';
    } elsif ($cenv{'keyauth'}) {
       ($cenv{'num'},$cenv{'domain'})=split(/:/,$cenv{'keyauth'});
       $keytype='auth';
    } else {
       $keytype='course';
    }
     if ($env{'form.listkeyscsv'}) {
 #  #
 # CSV Output  # CSV Output
 #  #
     $r->content_type('text/csv');      $r->content_type('text/csv');
               $r->send_http_header;
 #  #
 # Do CSV  # Do CSV
 #  #
       &show_key_list($r,1,$env{'form.listcom'},
                             $env{'form.newonly'},$env{'form.checkonly'},%cenv);
   
  } else {   } else {
 #  #
 # Normal web stuff  # Normal web stuff
 #  #
     $r->content_type('text/html');      &Apache::loncommon::content_type($r,'text/html');
     $r->send_http_header;      $r->send_http_header;
     $r->print(&header());      $r->print(&header());
   
     $r->print(      $r->print(
     '<input type="hidden" name="cid" value="'.$ENV{'form.cid'}.'" />');      '<input type="hidden" name="cid" value="'.$env{'form.cid'}.'" />');
 # --- Actions  # --- Actions
     if ($ENV{'form.toggle'}) {      if ($env{'form.toggle'}) {
  $r->print(&togglekeyaccess(%cenv).'<br />');   $r->print(&togglekeyaccess(%cenv).'<br />');
  %cenv=&Apache::lonnet::coursedescription($ENV{'form.cid'});   %cenv=&Apache::lonnet::coursedescription($env{'form.cid'},
    {'freshen_cache'=> 1});
     }      }
             my $batchnumber='';              my $batchnumber='';
     if ($ENV{'form.genkeys'}) {      if ($env{'form.genkeys'}) {
  (my $msg,$batchnumber)=   (my $msg,$batchnumber)=
     &genkeys($ENV{'form.num'},$ENV{'form.comments'},%cenv);      &genkeys($env{'form.num'},$env{'form.comments'},%cenv);
                 $r->print($msg.'<br />');                  $r->print($msg.'<br />');
     }      }
             if ($ENV{'form.listkeys'}) {              if ($env{'form.listkeys'}) {
  &show_key_list($r,$ENV{'form.listcom'},%cenv);   &show_key_list($r,0,$env{'form.listcom'},
                             $env{'form.newonly'},$env{'form.checkonly'},%cenv);
               }
               if ($env{'form.addcom'}) {
    &addcom(%cenv);
             }              }
 # --- Menu  # --- Menu
     $r->print('<h3>Key Access</h3>');      if ($keytype eq 'course') {
     if ($cenv{'keyaccess'} eq 'yes') {   $r->print('<h3>'.&mt('Key Access').'</h3>');
  $r->print('Access to this course is key controlled.<br /><input type="submit" name="toggle" value="Open Access" />')   if ($cenv{'keyaccess'} eq 'yes') {
       $r->print(&mt('Access to this course is key controlled.').
   '<br /><input type="submit" name="toggle" value="'.&mt('Open Access').'" />')
  } else {   } else {
     $r->print('Access to this course is open, no access keys.<br /><input type="submit" name="toggle" value="Control Access" />');      $r->print(&mt('Access to this course is open, no access keys').'<br /><input type="submit" name="toggle" value="'.&mt('Control Access').'" />');
    }
       } else {
    $r->print('<h3>'.&mt('Key Authority').
     ' <tt>'.$cenv{'num'}.'@'.$cenv{'domain'}.'</tt></h3>');
     }      }
     $r->print(<<ENDKEYMENU);      $r->print(<<ENDKEYMENU);
 <hr /><h3>Generate New Keys</h3>  <hr /><h3>Generate New Keys</h3>
Line 227  Number of keys to be generated: <input t Line 264  Number of keys to be generated: <input t
 Comments/Remarks/Notes: <input type="text" name="comments" size="30" /><br />  Comments/Remarks/Notes: <input type="text" name="comments" size="30" /><br />
 <input type="submit" name="genkeys" value="Generate Keys" />  <input type="submit" name="genkeys" value="Generate Keys" />
 <hr /><h3>List Keys</h3>  <hr /><h3>List Keys</h3>
 Comments/Remarks/Notes/Batch Number:  Comments/Remarks/Notes/User/Batch Number Filter:
 <input type="text" name="listcom" size="30" value="$batchnumber" /><br />  <input type="text" name="listcom" size="30" value="$batchnumber" /><br />
 <input type="submit" name="listkeys" value="List Keys" />  <label><input type="checkbox" name="newonly" /> Unused keys only</label><br />
   <label><input type="checkbox" name="checkonly" /> Used keys only</label><br />
   <input type="submit" name="listkeys" value="List Keys/Add Comments" />
   <input type="submit" name="listkeyscsv" value="CSV List of Keys" />
 ENDKEYMENU  ENDKEYMENU
     $r->print('</form></body></html>');      $r->print('</form>'.&Apache::loncommon::end_page());
  }   }
     } else {      } else {
  # Start page no course id   # Start page no course id
  $r->content_type('text/html');   &Apache::loncommon::content_type($r,'text/html');
  $r->send_http_header;   $r->send_http_header;
  $r->print(&header().&Apache::loncommon::coursebrowser_javascript());   $r->print(&header().&Apache::loncommon::coursebrowser_javascript());
         $r->print(          $r->print('<br />');
    'Course ID: <input input type="text" size="25" name="course" value="" />');          $r->print(&Apache::lonhtmlcommon::start_pick_box()
         $r->print('Domain: '.&Apache::loncommon::select_dom_form(                   .&Apache::lonhtmlcommon::row_title(&mt('Course ID of Key Authority'))
                $ENV{'request.role.domain'},'domain'));                   .'<input input type="text" size="25" name="course" value="" />'
         $r->print(&Apache::loncommon::selectcourse_link(                   .' '.&Apache::loncommon::selectcourse_link(
         'keyform','course','domain'));                            'keyform','course','domain',
         $r->print('<br /><input type="submit" value="Manage Access Keys" />');                            undef,undef,undef,'Course')
  $r->print('</form></body></html>');                   .&Apache::lonhtmlcommon::row_closure()
                    .&Apache::lonhtmlcommon::row_title(&mt('Domain'))
                    .&Apache::loncommon::select_dom_form($env{'request.role.domain'},'domain')
                    .&Apache::lonhtmlcommon::row_closure(1)
                    .&Apache::lonhtmlcommon::end_pick_box()
           );
           $r->print('<input type="submit" value="'.&mt('Next').'" />'
                   .'</form>'
                   .&Apache::loncommon::end_page()
           );
     }      }
     return OK;      return OK;
 }  }

Removed from v.1.6  
changed lines
  Added in v.1.25


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.