root / pykota / trunk / cgi-bin / pykotme.cgi @ 2153

Revision 2153, 5.2 kB (checked in by jerome, 19 years ago)

First working version of web enabled print quote generator.

  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Rev
RevLine 
[2152]1#! /usr/bin/python
2# -*- coding: ISO-8859-15 -*-
3
4# PyKota Print Quotes generator
5#
6# PyKota - Print Quotas for CUPS and LPRng
7#
8# (c) 2003, 2004, 2005 Jerome Alet <alet@librelogiciel.com>
9# This program is free software; you can redistribute it and/or modify
10# it under the terms of the GNU General Public License as published by
11# the Free Software Foundation; either version 2 of the License, or
12# (at your option) any later version.
13#
14# This program is distributed in the hope that it will be useful,
15# but WITHOUT ANY WARRANTY; without even the implied warranty of
16# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17# GNU General Public License for more details.
18#
19# You should have received a copy of the GNU General Public License
20# along with this program; if not, write to the Free Software
21# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
22#
23# $Id$
24#
25#
26
27import sys
28import os
29import cgi
30import urllib
[2153]31import cStringIO
[2152]32
33from pykota import version
34from pykota.tool import PyKotaTool, PyKotaToolError
35from pykota.pdlanalyzer import PDLAnalyzer, PDLAnalyzerError
36from pykota.cgifuncs import getLanguagePreference, getCharsetPreference
37
38header = """Content-type: text/html
39
40<?xml version="1.0" encoding="%s"?>
41<html>
42  <head>
43    <title>%s</title>
44    <link rel="stylesheet" type="text/css" href="/pykota.css" />
45  </head>
46  <body>
[2153]47    <form action="pykotme.cgi" method="POST" enctype="multipart/form-data">
[2152]48      <table>
49        <tr>
50          <td>
51            <p>
52              <a href="http://www.librelogiciel.com/software/"><img src="http://www.librelogiciel.com/software/PyKota/pykota.png" alt="PyKota's Logo" /></a>
53              <br />
54              <a href="http://www.librelogiciel.com/software/">PyKota v%s</a>
55            </p>
56          </td>
57          <td colspan="2">
58            <h1>%s</h1>
59          </td>
60        </tr>
61        <tr>
62          <td colspan="3" align="center">
63            <input type="submit" name="report" value="%s" />
64          </td>
65        </tr>
66      </table>"""
67   
68footer = """
69      <table>
70        <tr>
71          <td colspan="3" align="center">
72            <input type="submit" name="report" value="%s" />
73          </td>
74        </tr>
75      </table> 
76    </form>
77  </body>
78</html>""" 
79
80class PyKotMeGUI(PyKotaTool) :
81    """PyKota Quote's Generator GUI"""
82    def guiDisplay(self) :
83        """Displays the administrative interface."""
84        global header, footer
85        print header % (self.getCharset(), _("PyKota Reports"), version.__version__, _("PyKota Quotes"), _("Quote"))
86        print self.body
87        print footer % _("Quote")
88       
89    def error(self, message) :
90        """Adds an error message to the GUI's body."""
91        if message :
92            self.body = '<p><font color="red">%s</font></p>\n%s' % (message, self.body)
93       
[2153]94    def htmlListPrinters(self, selected=[], mask="*") :   
95        """Displays the printers multiple selection list."""
96        printers = self.storage.getMatchingPrinters(mask)
97        selectednames = [p.Name for p in selected]
98        message = '<table><tr><td valign="top">%s :</td><td valign="top"><select name="printers" multiple="multiple">' % _("Printer")
99        for printer in printers :
100            if printer.Name in selectednames :
101                message += '<option value="%s" selected="selected">%s (%s)</option>' % (printer.Name, printer.Name, printer.Description)
102            else :
103                message += '<option value="%s">%s (%s)</option>' % (printer.Name, printer.Name, printer.Description)
104        message += '</select></td></tr></table>'
105        return message
[2152]106       
107    def guiAction(self) :
108        """Main function"""
[2153]109        printers = inputfile = None
[2152]110        self.body = "<p>%s</p>\n" % _("Please click on the above button")
111        if self.form.has_key("report") :
112            if self.form.has_key("printers") :
113                printersfield = self.form["printers"]
114                if type(printersfield) != type([]) :
115                    printersfield = [ printersfield ]
116                printers = [self.storage.getPrinter(p.value) for p in printersfield]
117            else :   
118                printers = self.storage.getMatchingPrinters("*")
[2153]119            if self.form.has_key("inputfile") :   
120                inputfile = self.form["inputfile"].value
[2152]121               
[2153]122        self.body += self.htmlListPrinters(printers or [])           
123        self.body += "<br />"
124        self.body += _("Filename") + " : "
125        self.body += '<input type="file" size="64" name="inputfile" />'
126        self.body += "<br />"
127        if inputfile :
128            try :
129                parser = PDLAnalyzer(cStringIO.StringIO(inputfile))
130                jobsize = parser.getJobSize()
131            except PDLAnalyzerError, msg :   
132                self.body += '<font color="red">%s</font>' % msg
133            else :   
134                self.body += _("This file is %i pages long.") % jobsize
[2152]135           
136if __name__ == "__main__" :
137    os.environ["LC_ALL"] = getLanguagePreference()
138    admin = PyKotMeGUI(lang=os.environ["LC_ALL"], charset=getCharsetPreference())
139    admin.form = cgi.FieldStorage()
140    admin.guiAction()
141    admin.guiDisplay()
142    try :
143        admin.storage.close()
144    except (TypeError, NameError, AttributeError) :   
145        pass
146       
147    sys.exit(0)
Note: See TracBrowser for help on using the browser.