#!/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 # # 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/ # use lib '/home/httpd/lib/perl'; use LONCAPA::loncgi; use File::Path; use IO::File; use Image::Magick; use Apache::lonhtmlcommon; use Apache::lonnet; use Apache::loncommon; use Apache::lonlocal; use Apache::lonmsg; use LONCAPA::Enrollment; 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 "
-------------------
"; foreach my $key (sort (keys %env)) { print "-------------------
"; } # # 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.