############################## table.py ##############################
# -*- coding: utf8 -*-
import mod_python
import dbase, tmplter, auth
def index(req, username, password):
# Присланная через форму инфа:
postname = req.form['username']
postpass = req.form['password']
### коннектимся к базе. вынести во внешний файл-конфиг (параметры)
#db = dbase.Connect('localhost', 'root', 'galka', 'test_db')
db = dbase.Connect()
testAuth = []
# Пробуем забрать введенные параметры из базы
testAuth = dbase.SelectOne (db, 'SELECT username, password, org FROM users WHERE username="%s" AND password="%s"' % (postname, auth.mmd5(postpass)))
# Если пара логин-пароль есть:
if testAuth:
# Делаем выборку для всех записей с полученным ID организации
result = dbase.SelectAll (db, 'SELECT * FROM payments WHERE org RLIKE "%s" ORDER BY date DESC LIMIT 30 ' % testAuth[2])
# Формируем вывод
body = ''
for row in result:
body = body + tmplter.ReplaceTmpl(tmplter.lineTmpl, {'$date$':str(row[0]),
'$session$':str(row[1]),
'$org$':str(row[2]),
'$sum$':str(row[3]),
'$name$':str(row[4])})
top = """\
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Просмотр платежей</title>
<link href="../scripts/cal/calendar.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="../scripts/cal/mootools.js"></script>
<script type="text/javascript" src="../scripts/cal/calendar.js"></script>
</head>
<body>
<br>
<H2 align=center>Последние 30 платежей в Вашу организацию:</H2>
<table align=center>
<tr>
<td>Дата</td>
<td>Сессия</td>
<td>Орагнизация</td>
<td>Сумма</td>
<td>Имя</td>
</tr>
"""
bottom = """\
</table>
<br>
<H3>Изменить диапазон дат:</H3>
<form action="../custom.py/index" method="POST">
<table>
<tr>
<td>Введите начало диапазона: </td>
<td><script type="text/javascript">window.addEvent('domready', function() { myCal = new Calendar({ date1: 'Y-m-d' }); });</script><input type="text" name="startdate" id="date1"></td>
</tr>
<tr>
<td>Введите конец диапазона: </td>
<td><script type="text/javascript">window.addEvent('domready', function() { myCal = new Calendar({ date2: 'Y-m-d' }); });</script><input type="text" name="enddate" id="date2"></td>
</tr>
<tr>
<td></td>
<td align=right><input type="submit" value="Go!"></td>
</tr>
</table>
</form>
</body>
</html>"""
page = top + body + bottom
return page
else:
a = """\
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Ошибка авторизации!</title>
</head>
<body>
<br>
<h2 align=center>Неверный логин или пароль!</h2>
<h3 align=center><a href="http://localhost/index.html">Попробовать еще раз</a></h3>
</body>
</html>
"""
return a
############################## custom.py ##############################
# -*- coding: utf8 -*-
import mod_python
import dbase, tmplter, auth
def index(req, startdate, enddate):
# Присланная через форму инфа:
startdate = req.form['startdate']
enddate = req.form['enddate']
# коннектимся к базе.
db = dbase.Connect()
# Пробуем сделать выборку из указанного диапазона
result = dbase.SelectAll (db, 'SELECT * FROM payments WHERE date BETWEEN "%s"AND "%s" ORDER BY date DESC LIMIT 200' % (startdate, enddate))
if result:
# Формируем вывод
body = ''
for row in result:
body = body + tmplter.ReplaceTmpl(tmplter.lineTmpl, {'$date$':str(row[0]),
'$session$':str(row[1]),
'$org$':str(row[2]),
'$sum$':str(row[3]),
'$name$':str(row[4])})
top = """\
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Просмотр платежей</title>
<link href="../scripts/cal/calendar.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="../scripts/cal/mootools.js"></script>
<script type="text/javascript" src="../scripts/cal/calendar.js"></script>
</head>
<body>
<br>
<H2 align=center>Платежи с .. по .. :</H2>
<table align=center>
<tr>
<td>Дата</td>
<td>Сессия</td>
<td>Орагнизация</td>
<td>Сумма</td>
<td>Имя</td>
</tr>
"""
bottom = """\
</table>
<br>
<H3>Изменить диапазон дат:</H3>
<form action="../custom.py/index" method="POST">
<table>
<tr>
<td>Введите начало диапазона: </td>
<td><script type="text/javascript">window.addEvent('domready', function() { myCal = new Calendar({ date1: 'Y-m-d' }); });</script><input type="text" name="startdate" id="date1"></td>
</tr>
<tr>
<td>Введите конец диапазона: </td>
<td><script type="text/javascript">window.addEvent('domready', function() { myCal = new Calendar({ date2: 'Y-m-d' }); });</script><input type="text" name="enddate" id="date2"></td>
</tr>
<tr>
<td></td>
<td align=right><input type="submit" value="Go!"></td>
</tr>
</table>
</form>
</body>
</html>"""
page = top + body + bottom
return page
else:
a = """\
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Ошибка запроса!</title>
</head>
<body>
<br>
<h2 align=center>Нет результатов для указанного диапазона, либо диапазон задан неверно.</h2>
<h3 align=center><a href="http://localhost/index.html">Попробовать еще раз</a></h3>
</body>
</html>
"""
return a
############################## tmplter.py ##############################
# -*- coding: utf8 -*-
import string
# Путь к шаблону. Вынести во внешний файл-конфиг
lineTmpl = '/var/www/line.tmpl'
def ReplaceTmpl(tmpl, var_list):
u'''Шаблонизатор: подменяет переменные значениями'''
lines = open(tmpl).readlines()
src = "%s"*len(lines) % tuple(lines)
for key, var in var_list.items():
src = string.replace( src, key, var )
return src
############################## dbase.py ##############################
# -*- coding: utf8 -*-
import MySQLdb
#def Connect(host, user, passwd, db):
def Connect():
u'''Коннектор к базе'''
host = 'localhost'
user = 'root'
passwd = 'galka'
db = 'test_db'
db = MySQLdb.Connect(host=host, user=user, passwd=passwd, db=db, use_unicode=True, charset='utf8')
return db.cursor()
def Query(c, query):
u'''Формирует запрос'''
result = c.execute(query)
return result
def SelectOne(db, query):
u'''Делаем запрос к БД и вытаскиваем одну запис'''
result = db.execute(query)
row = db.fetchone()
return row
def SelectAll(db, query):
u'''Делаем запрос к БД и вытаскиваем все записи'''
result = db.execute(query)
rows = db.fetchall()
return rows
############################## auth.py ##############################
# -*- coding: utf8 -*-
import hashlib
def mmd5(passw):
'''Возвращает хэш пароля'''
m = hashlib.md5()
m.update(passw)
pwd = m.hexdigest()
return pwd