Changeset 3413 for pykota/trunk/cgi-bin/printquota.cgi
- Timestamp:
- 09/27/08 22:02:37 (16 years ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
pykota/trunk/cgi-bin/printquota.cgi
r3411 r3413 11 11 # the Free Software Foundation, either version 3 of the License, or 12 12 # (at your option) any later version. 13 # 13 # 14 14 # This program is distributed in the hope that it will be useful, 15 15 # but WITHOUT ANY WARRANTY; without even the implied warranty of 16 16 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 17 # GNU General Public License for more details. 18 # 18 # 19 19 # You should have received a copy of the GNU General Public License 20 20 # along with this program. If not, see <http://www.gnu.org/licenses/>. … … 68 68 </tr> 69 69 </table>""" 70 70 71 71 footer = """ 72 72 <table> … … 76 76 </td> 77 77 </tr> 78 </table> 78 </table> 79 79 </form> 80 80 </p> … … 83 83 <font size="-2"> 84 84 <a href="http://www.pykota.com/">%s</a> 85 © %s %s 85 © %s %s 86 86 <br /> 87 87 <pre> … … 91 91 </p> 92 92 </body> 93 </html>""" 93 </html>""" 94 94 95 95 class PyKotaReportGUI(PyKotaTool) : … … 104 104 version.__version__, _("PyKota Reports"), \ 105 105 _("Report")) ] 106 content.append(self.body) 107 content.append(footer % (_("Report"), 108 version.__doc__, 109 version.__years__, 110 version.__author__, 106 content.append(self.body) 107 content.append(footer % (_("Report"), 108 version.__doc__, 109 version.__years__, 110 version.__author__, 111 111 saxutils.escape(version.__gplblurb__))) 112 112 for c in content : 113 113 sys.stdout.write(c.encode(self.charset, "replace")) 114 114 sys.stdout.flush() 115 115 116 116 def error(self, message) : 117 117 """Adds an error message to the GUI's body.""" 118 118 if message : 119 119 self.body = '<p><font color="red">%s</font></p>\n%s' % (message, self.body) 120 121 def htmlListPrinters(self, selected=[], mask="*") : 120 121 def htmlListPrinters(self, selected=[], mask="*") : 122 122 """Displays the printers multiple selection list.""" 123 123 printers = self.storage.getMatchingPrinters(mask) … … 131 131 message += '</select></td></tr></table>' 132 132 return message 133 134 def htmlUGNamesInput(self, value="*") : 133 134 def htmlUGNamesInput(self, value="*") : 135 135 """Input field for user/group names wildcard.""" 136 136 return _("User / Group names mask") + (' : <input type="text" name="ugmask" size="20" value="%s" /> <em>e.g. <strong>jo*</strong></em>' % (value or "*")) 137 137 138 138 def htmlGroupsCheckbox(self, isgroup=0) : 139 139 """Groups checkbox.""" 140 140 if isgroup : 141 141 return _("Groups report") + ' : <input type="checkbox" checked="checked" name="isgroup" />' 142 else : 142 else : 143 143 return _("Groups report") + ' : <input type="checkbox" name="isgroup" />' 144 144 145 145 def guiAction(self) : 146 146 """Main function""" 147 147 printers = ugmask = isgroup = None 148 remuser = os.environ.get("REMOTE_USER", "root") 148 remuser = os.environ.get("REMOTE_USER", "root") 149 149 # special hack to accomodate mod_auth_ldap Apache module 150 150 try : 151 151 remuser = remuser.split("=")[1].split(",")[0] 152 except IndexError : 152 except IndexError : 153 153 pass 154 154 self.body = "<p>%s</p>\n" % _("Please click on the above button") … … 159 159 printersfield = [ printersfield ] 160 160 printers = [self.storage.getPrinter(p.value) for p in printersfield] 161 else : 161 else : 162 162 printers = self.storage.getMatchingPrinters("*") 163 163 if remuser == "root" : 164 if self.form.has_key("ugmask") : 164 if self.form.has_key("ugmask") : 165 165 ugmask = self.form["ugmask"].value 166 else : 166 else : 167 167 ugmask = "*" 168 else : 169 if self.form.has_key("isgroup") : 168 else : 169 if self.form.has_key("isgroup") : 170 170 user = self.storage.getUser(remuser) 171 171 if user.Exists : 172 172 ugmask = " ".join([ g.Name for g in self.storage.getUserGroups(user) ]) 173 else : 173 else : 174 174 ugmask = remuser # result will probably be empty, we don't care 175 else : 175 else : 176 176 ugmask = remuser 177 if self.form.has_key("isgroup") : 177 if self.form.has_key("isgroup") : 178 178 isgroup = 1 179 else : 179 else : 180 180 isgroup = 0 181 self.body += self.htmlListPrinters(printers or []) 181 self.body += self.htmlListPrinters(printers or []) 182 182 self.body += "<br />" 183 183 self.body += self.htmlUGNamesInput(ugmask) … … 189 189 self.reportingtool = openReporter(admin, "html", printers, ugmask.split(), isgroup) 190 190 self.body += "%s" % self.reportingtool.generateReport() 191 else : 191 else : 192 192 if remuser != "root" : 193 193 username = remuser 194 elif self.form.has_key("username") : 194 elif self.form.has_key("username") : 195 195 username = self.form["username"].value 196 else : 196 else : 197 197 username = None 198 if username is not None : 198 if username is not None : 199 199 user = self.storage.getUser(username) 200 else : 200 else : 201 201 user = None 202 202 if self.form.has_key("printername") : 203 203 printer = self.storage.getPrinter(self.form["printername"].value) 204 else : 204 else : 205 205 printer = None 206 if self.form.has_key("datelimit") : 206 if self.form.has_key("datelimit") : 207 207 datelimit = self.form["datelimit"].value 208 else : 208 else : 209 209 datelimit = None 210 if self.form.has_key("hostname") : 210 if self.form.has_key("hostname") : 211 211 hostname = self.form["hostname"].value 212 else : 212 else : 213 213 hostname = None 214 if self.form.has_key("billingcode") : 214 if self.form.has_key("billingcode") : 215 215 billingcode = self.form["billingcode"].value 216 else : 216 else : 217 217 billingcode = None 218 self.report = ["<h2>%s</h2>" % _("History")] 218 self.report = ["<h2>%s</h2>" % _("History")] 219 219 history = self.storage.retrieveHistory(user=user, printer=printer, hostname=hostname, billingcode=billingcode, end=datelimit) 220 220 if not history : … … 232 232 for job in history : 233 233 oddeven += 1 234 if job.JobAction == "ALLOW" : 234 if job.JobAction == "ALLOW" : 235 235 if oddeven % 2 : 236 236 oddevenclass = "odd" 237 else : 237 else : 238 238 oddevenclass = "even" 239 239 else : … … 243 243 if job.JobHostName : 244 244 hostname_url = '<a href="%s?%s">%s</a>' % (os.environ.get("SCRIPT_NAME", ""), urllib.urlencode({"history" : 1, "hostname" : job.JobHostName}), job.JobHostName) 245 else : 245 else : 246 246 hostname_url = None 247 247 if job.JobBillingCode : 248 248 billingcode_url = '<a href="%s?%s">%s</a>' % (os.environ.get("SCRIPT_NAME", ""), urllib.urlencode({"history" : 1, "billingcode" : job.JobBillingCode}), job.JobBillingCode) 249 else : 249 else : 250 250 billingcode_url = None 251 251 curdate = DateTime.ISO.ParseDateTime(str(job.JobDate)[:19]) … … 286 286 if printer and printer.Exists : 287 287 dico.update({ "printername" : printer.Name }) 288 if hostname : 288 if hostname : 289 289 dico.update({ "hostname" : hostname }) 290 290 prevurl = "%s?%s" % (os.environ.get("SCRIPT_NAME", ""), urllib.urlencode(dico)) 291 291 self.report.append('<a href="%s">%s</a>' % (prevurl, _("Previous page"))) 292 self.body = "\n".join(self.report) 292 self.body = "\n".join(self.report) 293 293 except : 294 294 self.body += '<p><font color="red">%s</font></p>' % self.crashed("CGI Error").replace("\n", "<br />") 295 295 296 296 if __name__ == "__main__" : 297 297 utils.reinitcgilocale() … … 303 303 try : 304 304 admin.storage.close() 305 except (TypeError, NameError, AttributeError) : 305 except (TypeError, NameError, AttributeError) : 306 306 pass 307 307 308 308 sys.exit(0)