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

200 lines
7.9 KiB
Tcl
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<?
######################################################
# 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]"
} 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 {} {
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]]!=""} {
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"
disconnectDB $conn
return "$result </table>\n"
}
# Список пользователей (ФИО, телефон, почта, отдел) из LDAP (AD)
proc getLDAPusers {} {
}
# Список внешних линий
proc getCOline {} {
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"
}
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
}
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]
?>