Diff for /loncom/interface/printout.pl between versions 1.76 and 1.77

version 1.76, 2005/04/07 06:56:23 version 1.77, 2005/05/02 21:57:44
Line 35  use Apache::lonhtmlcommon; Line 35  use Apache::lonhtmlcommon;
 use Apache::lonnet();  use Apache::lonnet();
 use Apache::loncommon;  use Apache::loncommon;
 use Apache::lonlocal;  use Apache::lonlocal;
   use Apache::lonmsg;
   use LONCAPA::Enrollment;
   
 use strict;  use strict;
   
   #  Get the list of course coordinators authorized on this course:
   #Parameters:
   #    id   - Course id.
   #    dom  - Domain of course.
   #Returns:
   #   A (possibly empty) list of course coordinators.  Each course coordinator
   #   is given as user:domain
   #
   sub get_cc_list {
       my ($id, $dom) = @_;
       my @personel = &Apache::lonnet::getkeys('nohist_userroles', $dom, $id);
       my @coordinators;
       foreach my $person (@personel) {
    my @info = split(/:/, $person);
    my $role = $info[0];
    my $user = $info[1];
    my $udom = $info[2];
    if ($role eq 'cc') {
       my $isactive = &LONCAPA::Enrollment::check_user_status($udom, $user, $dom, $id, 'cc');
       if ($isactive eq 'ok') {
    push @coordinators, $user.':'.$udom;
       }
    }
       }
       return (@coordinators);
   }
   #
   #   Determine if a user is operating as a student for this course/domain.
   #
   #
   #Parameters:
   #   course  - The course id.
   #   cdom    - The course domain.
   #
   #Implicit:
   #    $env{request.role} contains the role under which this user operated this
   #                       this request.
   sub is_student {
       my ($course, $cdom) = @_;
       my $active_role = $env{'request.role'};
       my @role_fields = split(/\//, $active_role); 
   
   
       if ( ($role_fields[0] eq 'st.') && ($role_fields[1] eq $cdom) &&
    ($role_fields[2] eq $course)) {
    return 1;
       } else {
    return 0;
       }
   
   
   }
   
   #
   #   Debugging:  Dump the environment for debugging.
   #
   sub dumpenv  {
       print "<br>-------------------<br>";
       foreach my $key (sort (keys %env)) {
    print "<br>$key -> $env{$key}";
       }
       print "<br>-------------------<br>";
   }
   
   #
   #   This sub sends a message to the appropriate person if there was an error
   #   rendering the latex  At present, there's only one case to consider:
   #   a student printing inside a course results in messages to the course coordinator.
   #Parmaeters:
   #    identifier -  The unique identifier of this cgi request.
   #    logfile    -  The contents of the log file (included in the message).
   #    texfile    -  reference to an array containing the LaTeX input file
   #                  (included in the message).
   #Implicit inputs:
   #   From the environment:
   #       cgi.$identifier.user     - User doing the printing.
   #       cgi.$identifier.domain   - Domain the user is logged in on with printing.
   #       cgi.$identifier.courseid - Id of the course (if this is a course).
   #       cgi.$identifier.coursedom- Domain in which course was constituted.
   #       cgi.$identifier.resources - List of resource URL's for which the print
   #                                  was attempted.
   # 
   sub send_error_mail {
       my ($identifier,$logfile, $texfile) = @_;
       my $user     = $env{"cgi.$identifier.user"};
       my $domain   = $env{"cgi.$identifier.domain"};
       my $courseid = $env{"cgi.$identifier.courseid"};
       my $coursedom= $env{"cgi.$identifier.coursedom"};
       my $resources= $env{"cgi.$identifier.resources"};
   
      # &dumpenv();
   
   
   
       #  Only continue if there is a user, domain, courseid, course domain
       #  and resources:
   
       if(defined($user)       && defined($domain) && defined($courseid) &&
          defined($coursedom)  && defined($resources) ){
      
    my @cclist = &get_cc_list($courseid, $coursedom);
   
    #  Only mail if the conditions are ripe for it:
    #  The user is a student in the course:
    #
   
    if (&is_student( $courseid, $coursedom)) {
       # build the subject and message body:
       print "sending message to course coordinators.<br>";
       
       my $subject  = "Print failed for $user".'@'.$domain;
       my $message .= "Print failed to render LaTeX for $user".'@'."$domain\n";
       $message    .= "  User was attempting to print: \n";
       $message    .= "       $resources\n";
       $message    .= "--------------------LaTeX logfile:------------ \n";
       $message    .= $logfile;
       $message    .= "-----------------LaTeX source file: ------------\n";
       
       foreach my $line (@$texfile) {
    $message .= "$line\n";
       }
       foreach my $dest (@cclist) {
    my @destinfo = split(/:/,$dest);
    my $user = $destinfo[0];
    my $dom  = $destinfo[1];
   
    &Apache::lonmsg::user_normal_msg($user, $dom,
    $subject, $message);
   
    # No point in looking at the return status as there's no good
    # error action I can think of right now (log maybe?).
       }
    }
       }
   }
   
 $|=1;  $|=1;
 if (! &LONCAPA::loncgi::check_cookie_and_load_env()) {  if (! &LONCAPA::loncgi::check_cookie_and_load_env()) {
     print <<END;      print <<END;
Line 243  foreach $texfile (@texfile) { Line 382  foreach $texfile (@texfile) {
   }    }
   print "</pre>\n";    print "</pre>\n";
           if ($advanced_role) {              if ($advanced_role) {  
         print "<br> Advanced role <br>";
               print "<b><big>The link to ";                print "<b><big>The link to ";
               $logfilename=~s/\/home\/httpd//;                $logfilename=~s/\/home\/httpd//;
       print "<a href=\"$logfilename\">Your log file </a></big></b>";        print "<a href=\"$logfilename\">Your log file </a></big></b>";
Line 260  foreach $texfile (@texfile) { Line 400  foreach $texfile (@texfile) {
       $texfile=~s/\/home\/httpd//;        $texfile=~s/\/home\/httpd//;
       print "<a href=\"$texfile\">Your original LaTeX file </a></big></b>";        print "<a href=\"$texfile\">Your original LaTeX file </a></big></b>";
       print "\n";        print "\n";
     } else { # Student role...
         #  at this point:
         #    $body_log_file - contains the log file.
                 #    $name_file     - is the name of the LaTeX file.
                 #    $identifier    - is the unique LaTeX identifier.l
   
         my $tex_handle = IO::File->new($name_file);
         my @tex_contents = <$tex_handle>;
         &send_error_mail($identifier, $body_log_file, \@tex_contents);
   }    }
   
       } elsif ($body_log_file=~m/<inserted text>/) {        } elsif ($body_log_file=~m/<inserted text>/) {

Removed from v.1.76  
changed lines
  Added in v.1.77


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