Diff for /loncom/interface/lonmanagekeys.pm between versions 1.1 and 1.11

version 1.1, 2003/04/12 15:57:30 version 1.11, 2003/05/02 19:00:29
Line 48  sub header { Line 48  sub header {
 </head>  </head>
 $bodytag  $bodytag
 <form method="post" enctype="multipart/form-data"    <form method="post" enctype="multipart/form-data"  
       action="/adm/keymanage" name="keyform">        action="/adm/managekeys" name="keyform">
 ENDHEAD  ENDHEAD
 }  }
   
 # =================================================== Show student list to drop  # =================================================== Show student list to drop
 sub show_key_list {  sub show_key_list {
     my ($r,$mode,$linkto,$action,$statusmode,$classlist,$keylist)=@_;      my ($r,$csvlist,$comment,$newonly,$checkonly,%cenv)=@_;
 #      $comment=~s/\W/\./g;
 # Just junk so that this compiles      my %accesskeys=&Apache::lonnet::dump
 #   ('accesskeys',$cenv{'domain'},$cenv{'num'});
     my ($username,$domain,$id,$name,$section,$status,@Sorted_Students);      unless ($csvlist) {
 #   $r->print(<<ENDTABLEHEADER);
 #   <script>
 #       function copyallcom(tf) {
     my $cid=$ENV{'request.course.id'};   for (i=0; i<tf.elements.length; i++) {
     #              if  (tf.elements[i].name.indexOf('com_')==0) {
     # Variables for excel output        tf.elements[i].value+=tf.copyall.value;
     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]);  
         }          }
   
       }
   </script>
   <h3>List of Keys/Enter New Comments</h3>
   <table border="2"><tr><th>Key</th><th>Checked Out</th>
   <th>Comments/Remarks/Notes</th>
   <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 />');
     }      }
     if ($mode eq 'view') {      return '';
     } elsif ($mode eq 'excel') {  }
         $excel_workbook->close();  
         $r->print('<p><a href="'.$excel_filename.'">'.  
                   'Your Excel spreadsheet</a> is ready for download.</p>'."\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 ($comments) { $comments=''; }
       $comments=~s/\#/ /g;
       $comments=~s/\;/ /g;
       unless ($num) { return 'No number of keys given.'; }
       unless (($num=~/^\d+$/) && ($num>0)) { 
    return 'Invalid number of keys given.'; 
       }
       my $batchnumber='BATCH_'.time().'_'.$$;
       return 'Generated '.&Apache::lonnet::generate_access_keys
       ($num,$cenv{'domain'},$cenv{'num'},$batchnumber.'; '.$comments).' of '.
       $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 {
Line 124  sub handler { Line 178  sub handler {
         $r->send_http_header;          $r->send_http_header;
         return OK;          return OK;
     }      }
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['state']);      &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'})) {      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'}) {
     # Only output the header information if they did not request csv format          my %cenv=&Apache::lonnet::coursedescription($ENV{'form.cid'});
     #   if ($ENV{'form.listkeyscsv'}) {
     if (exists($ENV{'form.state'}) && ($ENV{'form.state'} eq 'csv')) {  #
         $r->content_type('text/csv');  # CSV Output
     } else {  
         # Start page  
         $r->content_type('text/html');  
         $r->send_http_header;  
         $r->print(&header());  
     }  
 #  #
 # do stuff here.      $r->content_type('text/csv');
               $r->send_http_header;
 #  #
   # Do CSV
   #
       &show_key_list($r,1,$ENV{'form.listcom'},
                             $ENV{'form.newonly'},$ENV{'form.checkonly'},%cenv);
   
     if (exists($ENV{'form.state'}) && ($ENV{'form.state'} eq 'csv')) {   } else {
         $r->print("\n");  #
   # Normal web stuff
   #
       $r->content_type('text/html');
       $r->send_http_header;
       $r->print(&header());
   
       $r->print(
       '<input type="hidden" name="cid" value="'.$ENV{'form.cid'}.'" />');
   # --- Actions
       if ($ENV{'form.toggle'}) {
    $r->print(&togglekeyaccess(%cenv).'<br />');
    %cenv=&Apache::lonnet::coursedescription($ENV{'form.cid'});
       }
               my $batchnumber='';
       if ($ENV{'form.genkeys'}) {
    (my $msg,$batchnumber)=
       &genkeys($ENV{'form.num'},$ENV{'form.comments'},%cenv);
                   $r->print($msg.'<br />');
       }
               if ($ENV{'form.listkeys'}) {
    &show_key_list($r,0,$ENV{'form.listcom'},
                             $ENV{'form.newonly'},$ENV{'form.checkonly'},%cenv);
               }
               if ($ENV{'form.addcom'}) {
    &addcom(%cenv);
               }
   # --- Menu
       $r->print('<h3>Key Access</h3>');
       if ($cenv{'keyaccess'} eq 'yes') {
    $r->print('Access to this course is key controlled.<br /><input type="submit" name="toggle" value="Open Access" />')
    } else {
       $r->print('Access to this course is open, no access keys.<br /><input type="submit" name="toggle" value="Control Access" />');
       }
       $r->print(<<ENDKEYMENU);
   <hr /><h3>Generate New Keys</h3>
   Number of keys to be generated: <input type="text" name="num" size="6" /><br />
   Comments/Remarks/Notes: <input type="text" name="comments" size="30" /><br />
   <input type="submit" name="genkeys" value="Generate Keys" />
   <hr /><h3>List Keys</h3>
   Comments/Remarks/Notes/User/Batch Number Filter:
   <input type="text" name="listcom" size="30" value="$batchnumber" /><br />
   <input type="checkbox" name="newonly" /> Unused keys only<br />
   <input type="checkbox" name="checkonly" /> Used keys only<br />
   <input type="submit" name="listkeys" value="List Keys/Add Comments" />
   <input type="submit" name="listkeyscsv" value="CSV List of Keys" />
   ENDKEYMENU
       $r->print('</form></body></html>');
    }
     } else {      } else {
         $r->print('</form></body></html>');   # 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: <input input type="text" size="25" name="course" value="" />');
           $r->print('Domain: '.&Apache::loncommon::select_dom_form(
                  $ENV{'request.role.domain'},'domain'));
           $r->print(&Apache::loncommon::selectcourse_link(
           'keyform','course','domain'));
           $r->print('<br /><input type="submit" value="Manage Access Keys" />');
    $r->print('</form></body></html>');
     }      }
     return OK;      return OK;
 }  }

Removed from v.1.1  
changed lines
  Added in v.1.11


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