diff --git a/www/css/layout.css b/www/css/layout.css
new file mode 100644
index 0000000..51e66c1
--- /dev/null
+++ b/www/css/layout.css
@@ -0,0 +1,112 @@
+*{
+ margin:0;
+ padding:0;
+}
+body {
+ font:14px/1.3 Arial,sans-serif;
+ background-color:#212121;
+}
+header {
+ background-color:#212121;
+ box-shadow: 0 -1px 2px #111111;
+ color:#fff;
+ display:block;
+ height:50px;
+ position:relative;
+ width:100%;
+ z-index:100;
+}
+h2{
+ font-size:22px;
+ font-weight:normal;
+ /*left:50%;*/
+ margin-left:20px;
+ padding:10px 0;
+ position:absolute;
+ /*width:540px;*/
+ color:#fff;
+}
+h3{
+ font-size:18px;
+ font-weight:normal;
+ left:50%;
+ /*margin-left:-400px;*/
+ padding:10px 0;
+ /*position:absolute;*/
+ width:540px;
+ color:#fff;
+}
+h4{
+ font-size:16px;
+ font-weight:normal;
+ /*margin-left:20px;*/
+ padding:10px 0;
+ color:#fff;
+}
+
+header a.stuts,a.stuts:visited{
+ border:none;
+ text-decoration:none;
+ color:#fcfcfc;
+ font-size:14px;
+ left:50%;
+ line-height:31px;
+ margin:23px 0 0 110px;
+ position:absolute;
+ top:0;
+}
+header .stuts span {
+ font-size:22px;
+ font-weight:bold;
+ margin-left:5px;
+}
+.container {
+ height: 40px;
+ margin: 30px auto;
+ /*width: 957px;*/
+}
+.table_dark {
+ font-family: "Lucida Sans Unicode", "Lucida Grande", Sans-Serif;
+ font-size: 12px;
+ width: 100%;
+ text-align: left;
+ border-collapse: collapse;
+ margin: 10px;
+}
+.table_dark th {
+ color: #CAD4D6;
+ border-top: 1px solid #CAD4D6;
+ border-bottom: 1px solid #CAD4D6;
+ padding: 12px 17px;
+ background: #212121;
+}
+.table_dark td {
+ color: #CAD4D6;
+ border-bottom: 1px solid #CAD4D6;
+ border-right:1px solid #CAD4D6;
+ padding: 7px 17px;
+}
+.table_dark tr:last-child td {
+ border-bottom: none;
+}
+.table_dark td:last-child {
+ border-right: none;
+}
+
+A:link {
+ text-decoration: none;
+ color: #CAD4D6;
+}
+A:visited {
+ text-decoration: none;
+ color: #CAD4D6;
+}
+A:active {
+ text-decoration: none;
+ color: #CAD4D6;
+}
+A:hover {
+ text-decoration: none;
+ color: #00B4FF;
+}
+
diff --git a/www/css/menu.css b/www/css/menu.css
new file mode 100644
index 0000000..a100a38
--- /dev/null
+++ b/www/css/menu.css
@@ -0,0 +1,129 @@
+#nav,#nav ul {
+list-style: none outside none;
+margin: 0;
+padding: 0;
+}
+#nav {
+background: url('menu_bg.png') no-repeat scroll 0 0 transparent;
+clear: both;
+font-size: 12px;
+height: 58px;
+padding: 0 0 0 9px;
+position: relative;
+width: 957px;
+}
+#nav ul {
+background-color: #222;
+border:1px solid #222;
+border-radius: 0 5px 5px 5px;
+border-width: 0 1px 1px;
+box-shadow: 0 5px 5px rgba(0, 0, 0, 0.5);
+left: -9999px;
+overflow: hidden;
+position: absolute;
+top: -9999px;
+z-index: 2;
+-moz-transform: scaleY(0);
+-ms-transform: scaleY(0);
+-o-transform: scaleY(0);
+-webkit-transform: scaleY(0);
+transform: scaleY(0);
+-moz-transform-origin: 0 0;
+-ms-transform-origin: 0 0;
+-o-transform-origin: 0 0;
+-webkit-transform-origin: 0 0;
+transform-origin: 0 0;
+-moz-transition: -moz-transform 0.1s linear;
+-ms-transition: -ms-transform 0.1s linear;
+-o-transition: -o-transform 0.1s linear;
+-webkit-transition: -webkit-transform 0.1s linear;
+transition: transform 0.1s linear;
+}
+#nav li {
+background: url('menu_line.png') no-repeat scroll right 5px transparent;
+float: left;
+position: relative;
+}
+#nav li a {
+color: #FFFFFF;
+display: block;
+float: left;
+font-weight: normal;
+height: 30px;
+padding: 23px 20px 0;
+position: relative;
+text-decoration: none;
+text-shadow: 1px 1px 1px #000000;
+}
+#nav li:hover > a {
+color: #00B4FF;
+}
+#nav li:hover, #nav a:focus, #nav a:hover, #nav a:active {
+background: none repeat scroll 0 0 #121212;
+outline: 0 none;
+}
+#nav li:hover ul.subs {
+left: 0;
+top: 53px;
+width: 180px;
+-moz-transform: scaleY(1);
+-ms-transform: scaleY(1);
+-o-transform: scaleY(1);
+-webkit-transform: scaleY(1);
+transform: scaleY(1);
+}
+#nav ul li {
+background: none;
+width: 100%;
+}
+#nav ul li a {
+float: none;
+}
+#nav ul li:hover > a {
+background-color: #121212;
+color: #00B4FF;
+}
+#lavalamp {
+background: url('lavalamp.png') no-repeat scroll 0 0 transparent;
+height: 16px;
+left: 13px;
+position: absolute;
+top: 0px;
+width: 64px;
+-moz-transition: all 300ms ease;
+-ms-transition: all 300ms ease;
+-o-transition: all 300ms ease;
+-webkit-transition: all 300ms ease;
+transition: all 300ms ease;
+}
+#lavalamp:hover {
+-moz-transition-duration: 3000s;
+-ms-transition-duration: 3000s;
+-o-transition-duration: 3000s;
+-webkit-transition-duration: 3000s;
+transition-duration: 3000s;
+}
+#nav li:nth-of-type(1):hover ~ #lavalamp {
+left: 13px;
+}
+#nav li:nth-of-type(2):hover ~ #lavalamp {
+left: 90px;
+}
+#nav li:nth-of-type(3):hover ~ #lavalamp {
+left: 170px;
+}
+#nav li:nth-of-type(4):hover ~ #lavalamp {
+left: 250px;
+}
+#nav li:nth-of-type(5):hover ~ #lavalamp {
+left: 330px;
+}
+#nav li:nth-of-type(6):hover ~ #lavalamp {
+left: 410px;
+}
+#nav li:nth-of-type(7):hover ~ #lavalamp {
+left: 490px;
+}
+#nav li:nth-of-type(8):hover ~ #lavalamp {
+left: 565px;
+}
diff --git a/www/index.py b/www/index.py
index 3542b10..29419ba 100755
--- a/www/index.py
+++ b/www/index.py
@@ -1,66 +1,93 @@
-#!/usr/bin/python3
-# -*- coding: utf-8 -*-
-# Turn on debug mode.
-import sys
-import cgi
-import cgitb
-cgitb.enable()
-# Print necessary headers.
-print("Content-Type: text/html; charset=UTF-8\n\n")
-# Connect to the database.
-import pymysql
-conn = pymysql.connect(
-db='ats',
-user='user',
-passwd='password',
-host='localhost',
-charset='utf8')
+import os, sys, \
+ pymysql, urlparse3
-c = conn.cursor()
-# Insert some example data.
-#c.execute("INSERT INTO numbers VALUES (1, 'One!')")
-#c.execute("INSERT INTO numbers VALUES (2, 'Two!')")
-#c.execute("INSERT INTO numbers VALUES (3, 'Three!')")
-#conn.commit()
-# Print the contents of the database.
-#c.execute("SELECT * FROM int_number")
-print("
")
-print("Телефоны ")
-print("ТЕЛЕФОНЫ
")
-print("
[Справочник] [Отчёты ]")
-print("
Телефонный справочник ")
-print("Внутренние Городские ")
+def application(environ, start_response):
+ #sys.stdout._encoding = 'utf-8'
+ status = '200 OK'
+ # проверяем наличие параметров в запросе и всяко-разно реагируем
+ if environ['QUERY_STRING'] == '':
+ output = bytes((header() + body() + footer()).encode('utf8'))
+ elif environ['QUERY_STRING'].split('&'):
+ paramDict = {item.split('=')[0]: item.split('=')[1] for item in environ['QUERY_STRING'].split('&')}
+ if paramDict.get('query_type') == 'internal':
+ output = bytes((header() + body() + getInternalNumbers() + footer()).encode('utf8'))
+ elif paramDict.get('query_type') == 'external':
+ output = bytes((header() + body() + getCOline() + footer()).encode('utf8'))
+ else:
+ output = bytes((header() + body() + footer()).encode('utf8'))
-param = cgi.FieldStorage()
-#Передали заголовки ранее
-param = cgi.FieldStorage() #Здесь пустых значений нет!
-if "qwery_type" not in param:
- qwery_type="internal"
-else:
- qwery_type = param["qwery_type"].value
-if "order" not in param:
- order="fio"
-else:
- order = param["order"].value
+ response_headers = [('Content-type', 'text/html;charset=utf-8'),
+ ('Content-Length', str(len(output)))]
+ start_response(status, response_headers)
-if qwery_type == "internal":
- print("Список внутренних телефонов ")
+ return [output]
+
+def header():
+ txtHeader = ' \n' \
+ ' \n' \
+ ' \n' \
+ 'Телефоны \n' \
+ ' \n'
+ return txtHeader
+
+def footer():
+ txtFooter = '
\n'
+ return txtFooter
+
+def body():
+ txtBody = 'ТЕЛЕФОНЫ \n' \
+ '{} \n'.format(menu())
+ return txtBody
+def menu():
+ #
+ txtMenu = '
\n'
+ return txtMenu
+
+def getInternalNumbers():
+ conn = connectDB()
+ c = conn.cursor()
+ order = 'int_number'
+ result = '
Список внутренних телефонов '
qwr = "SELECT * FROM int_number ORDER by " + order
c.execute(qwr)
- print("
№ п/п Телефон ФИО Описание Электро-почта ")
+ listHeader = '№ п/п \n' \
+ 'Телефон \n' \
+ 'ФИО \n' \
+ 'Описание Электро-почта \n'
+ result = result + listHeader
for row in c.fetchall():
- print("%s %s %s %s %s " % (row[0], row[1], row[2], row[4], row[3]))
- print("
")
+ rowData = " %s %s %s %s %s \n" % (row[0], row[1], row[2], row[4], row[3])
+ result = result + rowData
+ return (result + "
\n")
-if qwery_type == "external":
- print("
Список городских телефонов ")
- c.execute("SELECT * FROM ext_co_line")
- print("
№ п/п Линия Телефон Описание ")
- for r in c.fetchall():
- print(" %s %s %s %s " % (r[0], r[1], r[2], r[3]))
- print("
")
+def getCOline():
+ conn = connectDB()
+ c = conn.cursor()
+ order = 'ext_co_line'
+ result = '
Список внешних линий '
+ qwr = "SELECT * FROM ext_co_line ORDER by " + order
+ c.execute(qwr)
+ listHeader = '
№ п/п \n' \
+ 'Линия \n' \
+ 'Номер телефона \n' \
+ 'Описание \n'
+ result = result + listHeader
+ for row in c.fetchall():
+ rowData = "%s %s %s %s " % (row[0], row[1], row[2], row[3])
+ result = result + rowData
+ return (result + "
\n")
-print("
")
-
-print("")
\ No newline at end of file
+def connectDB():
+ c = pymysql.connect(
+ db='ats_test',
+ user='ats',
+ passwd='',
+ host='kis',
+ charset='utf8')
+ return c
\ No newline at end of file