[LON-CAPA-cvs] cvs: loncom /interface printout.pl

foxr lon-capa-cvs@mail.lon-capa.org
Mon, 09 May 2005 09:54:02 -0000


foxr		Mon May  9 05:54:02 2005 EDT

  Modified files:              
    /loncom/interface	printout.pl 
  Log:
  Use the correct mechanism to deteRmine recipeints on error
  emails - set the subject such that resources will be labelled with
  bombs in the displayed course map.
  
  
Index: loncom/interface/printout.pl
diff -u loncom/interface/printout.pl:1.80 loncom/interface/printout.pl:1.81
--- loncom/interface/printout.pl:1.80	Tue May  3 18:22:47 2005
+++ loncom/interface/printout.pl	Mon May  9 05:54:02 2005
@@ -1,7 +1,6 @@
 #!/usr/bin/perl
 # CGI-script to run LaTeX, dvips, ps2ps, ps2pdf etc.
 #
-# $Id: printout.pl,v 1.80 2005/05/03 22:22:47 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -40,32 +39,7 @@
 
 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.
 #
@@ -78,30 +52,18 @@
 #    $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;
-    }
-
-
+    return (! $env{'request.role.adv'});
 }
 
 #
 #   Debugging:  Dump the environment for debugging.
 #
 sub dumpenv  {
-    print "<p>-------------------</p>";
+    print "<br>-------------------<br>";
     foreach my $key (sort (keys %env)) {
-	print "<br />$key -> $env{$key}";
+	print "<br>$key -> $env{$key}";
     }
-    print "<p>-------------------</p>";
+    print "<br>-------------------<br>";
 }
 
 #
@@ -110,6 +72,7 @@
 #   a student printing inside a course results in messages to the course coordinator.
 #Parmaeters:
 #    identifier -  The unique identifier of this cgi request.
+#    badresource-  Filepath to most likely failing 
 #    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).
@@ -123,14 +86,18 @@
 #                                  was attempted.
 # 
 sub send_error_mail {
-    my ($identifier,$logfile, $texfile) = @_;
+    my ($identifier, $badresource, $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();
+    #  resource file->URL
+    #
+    my $badurl = &Apache::lonnet::declutter($badresource);
+
+    # &dumpenv();
 
 
 
@@ -140,17 +107,17 @@
     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;
+	    # print "sending message to course coordinators.<br>";
+
+	    # Todo: Convert badurl into a url from file path:
+
+	    my $subject  = "Error [$badurl] 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";
@@ -161,7 +128,11 @@
 	    foreach my $line (@$texfile) {
 		$message .= "$line\n";
 	    }
-	    foreach my $dest (@cclist) {
+	    my (undef, %receivers) = &Apache::lonfeedback::decide_receiver(undef, 0,
+									  1,1,1);
+	    # print "<BR> sending...section:  $env{'request.course.sec'}";
+	    foreach my $dest (keys %receivers) {
+		# print "<BR> dest is $dest";
 		my @destinfo = split(/:/,$dest);
 		my $user = $destinfo[0];
 		my $dom  = $destinfo[1];
@@ -364,8 +335,17 @@
 	  print "It probably has errors in it.<br />";
 	  my $whereitbegins = rindex $body_log_file,'STAMPOFPASSEDRESOURCESTART';
 	  my $whereitends = rindex $body_log_file,'STAMPOFPASSEDRESOURCEEND';
+	  my $badresource;
 	  if ($whereitbegins!=-1 and $whereitends!=-1) {
- 	      print "With very high probability this error occured in ".substr($body_log_file,$whereitbegins+26,$whereitends-$whereitbegins-26)."<br /><br />";
+	      my $badtext = substr($body_log_file,$whereitbegins+26, $whereitends-$whereitbegins-26);
+ 	      print "With very high probability this error occured in ".$badtext."<br /><br />";
+	      $whereitbegins  = rindex $badtext,'located in';
+	      if ($whereitbegins != -1) {
+		  
+		  $badresource = substr($badtext, $whereitbegins+27, 
+					length($badtext) - $whereitbegins - 48);
+		  # print "<BR>failing resourcename: $badresource<BR>";
+	      }
 	  }
 	  print "Here are the error messages in the LaTeX log file</br><br /><pre>";
 	  my $sygnal = 0;
@@ -382,7 +362,7 @@
 	  }
 	  print "</pre>\n";
           if ($advanced_role) {  
-	      print "<p> Advanced role </p>";
+	      # print "<br> Advanced role <br>";
               print "<b><big>The link to ";
               $logfilename=~s/\/home\/httpd//;
 	      print "<a href=\"$logfilename\">Your log file </a></big></b>";
@@ -408,7 +388,7 @@
 
 	      my $tex_handle = IO::File->new($name_file);
 	      my @tex_contents = <$tex_handle>;
-	      &send_error_mail($identifier, $body_log_file, \@tex_contents);
+	      &send_error_mail($identifier, $badresource, $body_log_file, \@tex_contents);
 	  }
 
       } elsif ($body_log_file=~m/<inserted text>/) {