panasonic-log-reader/www.tcl/index.rvt

200 lines
7.9 KiB
Tcl
Raw Normal View History

<?
######################################################
# web
# Distributed under GNU Public License
# Author: Sergey Kalinin banzaj28@yandex.ru
# Copyright (c) "Sergey Kalinin", 2017, http://nuk-svk.ru
######################################################
package require mysqltcl
proc main {} {
if { [::rivet::var exists query_type] } {
set query_type [::rivet::var get query_type]
if {$query_type == "internal"} {
set output "[header] [body] [getInternalNumbers] [footer]"
2018-02-03 20:15:05 +03:00
} elseif {$query_type == "external"} {
set output "[header] [body] [getCOline] [footer]"
} elseif {$query_type == "ldap"} {
set output "[header] [body] [getLDAPusers] [footer]"
} elseif {$query_type == "report"} {
set output "[header] [body] [reportForm] [reportData] [footer]"
}
} else {
set output "[header] [body] [footer]"
}
return $output
}
proc header {} {
set txtHeader "<html><head><meta charset=\"utf-8\"><link rel=\"shortcut icon\" href=\"favicon.png\" >\n
<link rel=\"icon\" type=\"image/png\" href=\"favicon.png\" >\n
<link href=\"css/layout.css\" rel=\"stylesheet\" type=\"text/css\" />\n
<title>Телефоны</title>\n
<link href=\"css/menu.css\" rel=\"stylesheet\" type=\"text/css\" /></head><body>\n"
return $txtHeader
}
proc footer {} {
set txtFooter "</body></html>\n"
return $txtFooter
}
proc body {} {
set txtBody "<table><tr><td><h2 align=left>ТЕЛЕФОНЫ</h2></td></tr>\n
<tr><td>[menu]</td></tr></table>\n"
return $txtBody
}
proc menu {} {
set txtMenu "<div class=\"container\"><ul id=\"nav\"></li>
<li><a class=\"hsubs\" href=\"#\">Справочник</a><ul class=\"subs\">
<li><a href=\"?query_type=external\">Городские телефоны</a></li>
<li><a href=\"?query_type=internal\">Внутренние</a></li></li>
<li><a href=\"?query_type=ldap\">Внутренние (AD)</a></li></ul></li>
<li><a class=\"hsubs\" href=\"\">Отчёты</a><ul class=\"subs\">
<li><a href=\"?query_type=report&report_type=int\">Список звонков по номеру</a></li>
<li><a href=\"?query_type=report&report_type=dep\">Звонки по отделам</a></li>\n</ul></div>"
return $txtMenu
}
proc connectDB {} {
2018-02-03 20:15:05 +03:00
return [mysql::connect -host localhost -user root -db ats]
}
proc disconnectDB {handle} {
mysql::close $handle
}
# Список внутренних номеров из СУБД
proc getInternalNumbers {} {
set conn [connectDB]
set order "int_number"
set result "<h4 align=left>Список внутренних телефонов</h4>"
set qr "SELECT * FROM int_number ORDER by $order"
set query [mysql::query $conn $qr]
set listHeader "<table class=\"table_dark\"><tr><th> п/п</th>\n
<th><a href=index.py?query_type=internal&order=int_number>Телефон</a></th>\n
<th><a href=index.py?query_type=internal&order=fio>ФИО</a></th>\n
<th>Описание<th>Эл.почта</th></tr>\n"
set result "$result $listHeader"
set rowData ""
while {[set row [mysql::fetch $query]]!=""} {
2018-02-03 20:15:05 +03:00
append rowData "<tr><td>[lindex $row 0]</td>
<td>[lindex $row 1]</td>
<td>[lindex $row 2]</td>
<td>[lindex $row 4]</td>
<td><a href=\"mailto:[lindex $row 3]\">[lindex $row 3]</a></td></tr>\n"
}
mysql::endquery $query
set result "$result $rowData"
2018-02-03 20:15:05 +03:00
disconnectDB $conn
return "$result </table>\n"
}
2018-02-03 20:15:05 +03:00
# Список пользователей (ФИО, телефон, почта, отдел) из LDAP (AD)
proc getLDAPusers {} {
}
2018-02-03 20:15:05 +03:00
# Список внешних линий
proc getCOline {} {
2018-02-03 20:15:05 +03:00
set conn [connectDB]
set order "ext_co_line"
set result "<h4 align=left>Список городских линий</h4>"
set qr "SELECT * FROM ext_co_line ORDER by $order"
set query [mysql::query $conn $qr]
set listHeader "<table class=\"table_dark\"><tr><th> п/п</th>\n
<th><a href=index.py?query_type=external&order=int_number>Линия</a></th>\n
<th><a href=index.py?query_type=external&order=fio>Номер</a></th>\n
<th>Описание</tr>\n"
set result "$result $listHeader"
set rowData ""
while {[set row [mysql::fetch $query]] != ""} {
append rowData "<tr><td>[lindex $row 0]</td>
<td>[lindex $row 1]</td>
<td>[lindex $row 2]</td>
<td>[lindex $row 3]</td></tr>\n"
}
mysql::endquery $query
#set result "$result [encoding convertfro utf-8 $rowData]"
set result "$result $rowData"
disconnectDB $conn
return "$result </table>\n"
}
2018-02-03 20:15:05 +03:00
proc reportForm {} {
set txtReportForm "<h3 align=center>Отчёт по звонкам</h3><table><tr valign=top><td>
<form><input type=hidden name=\"query_type\" value=\"report\">
<fieldset class=\"report\">
<label>Номер<input type=\"text\" name=\"int_number\"></label>
<label>Период с<input type=\"date\" name=\"date_begin\"></label>
<label>По<input type=\"date\" name=\"date_end\"></label>
</fieldset>
<fieldset class=\"report-action\">
<input class=\"btn\" type=\"submit\" name=\"submit\" value=\"Выбрать\">
</fieldset></form></td>"
return $txtReportForm
}
2018-02-03 20:15:05 +03:00
proc reportData {} {
set result ""
set err ""
# Проверяем введенные параметры отчёта как на наличие так и на корректность
if { [::rivet::var exists int_number] } {
set number [::rivet::var get int_number]
if {[regexp -nocase -all -- {^([0-9][0-9][0-9])$} $number match v1]} {
append result $number
} else {
append err "<p><font color=red></b>Введите номер телефона</b></font></p>"
}
} else {
return
}
if { [::rivet::var exists date_begin] } {
if [regexp -nocase -- {^(0[1-9]|[12][0-9]|3[01])[.](0[1-9]|1[012])[.](19|20[0-9][0-9])$} [::rivet::var get date_begin] match d m y] {
set dBegin "$y-$m-$d"
} else {
append err "<p><font color=red></b>Введите дату начала</b></font></p>"
}
}
if { [::rivet::var exists date_end] } {
if [regexp -nocase -- {^(0[1-9]|[12][0-9]|3[01])[.](0[1-9]|1[012])[.](19|20[0-9][0-9])$} [::rivet::var get date_end] match d m y] {
set dEnd "$y-$m-$d"
} else {
append err "<p><font color=red></b>Введите дату окончания</b></font></p>"
}
}
if {$err ne ""} {
return "<td>$err</td></tr></table>"
}
set conn [connectDB]
set order "call_date"
set result "<td><h4 align=left>Список звонков с номера $number</h4>"
set qr "SELECT * FROM cdr where int_number=\'$number\' AND call_date BETWEEN CAST(\'$dBegin\' AS DATE) AND CAST(\'$dEnd\' AS DATE) LIMIT 1000"
set query [mysql::query $conn $qr]
set listHeader "<table class=\"table_dark\"><tr>
<th> п/п</th><th>Дата</th><th>Время</th><th>Внут.номер</th><th>Внеш.линия</th><th>Вызываемый номер</th>
<th>Ring</th><th>Длительность</th><th>АСС</th><th>Код звонка</th><th>Направление</th><tr>"
append result $listHeader
set rowData ""
while {[set row [mysql::fetch $query]]!=""} {
append rowData "<tr>"
# этот цикл формирует строку:
#rowData = '<td>{}</td><td>{}</td><td>{}</td><td>{}</td><td>{}</td><td>{}</td><td>{}</td><td>{}</td><td>{}</td><td>{}</td><td>{}</td></tr>'\
#.format(row[0], row[1], row[2], row[3], row[4], row[5], row[5], row[7], row[9], row[9], row[10])
for {set i 0} {$i <=10} {incr i} {
append rowData "<td>[lindex $row $i]</td>"
}
}
append result "$rowData </table></td></tr></table>"
return $result
}
puts [main]
?>
2018-02-03 20:15:05 +03:00