#!/usr/bin/tcl
##########
# Mysqlseen v1.0 by Sato1@undernet (rauleli@wizardteam.com)
#
# For eggdrop1.6.x, tcl8.x, Mytcl and MySQL 3.23.x
# v1.0 (27/11/00) -- First release
#
# Description: Displays as "last" unix command stile the time
#              a nick stayed in a channel
#
# Installation: + copy the sqllast into your cgi directory
#               + make sure that the first line path is pointing to the
#                tcl interpreter
#                privileges to search and add rows.
#               + make sure you got sqlseen.tcl running first
#               + change the var setting as your needs
#               + "chmod 0755 sqllast" to make it executable
#
# Require: MySQL server (www.mysql.com)
#          Mytcl package (www.mytcl.cx)
#
# Usage: only type the nick in the blank field
#
#
# ToDo: usage of wildcards, and more descriptive
#
# Note: newer versions and other mysql scripts for eggdrops
#       at ftp://eggdrop.wizardteam.com/pub/eggdrop/mysql-scripts
# 
##########

#### Var setting
set sqluser ""
set sqlpass ""
set sqlhost ""
set sqldbase ""
# set where your script is located
set url "http://your-host.com/cgi-bin/sqllast"
# set language 1 - spanish |  2 - english
set lang 1

#######################################################
#####   DO NOT CHANGE ANYTHING AFTER THIS LINE    #####
##### (unless you REALLY know what you are doing) #####
#######################################################


set stdin [gets stdin]
regsub -all -- \\\+ $stdin " " stdin
regsub -all -- %3A $stdin : stdin
regsub -all -- %2F $stdin / stdin
regsub -all -- %3F $stdin ? stdin
regsub -all -- %5B $stdin \[ stdin
regsub -all -- %5D $stdin \] stdin
regsub -all -- %25 $stdin % stdin
regsub -all -- %7C $stdin | stdin
regsub -all -- %E1 $stdin  stdin
regsub -all -- %E9 $stdin  stdin
regsub -all -- %ED $stdin  stdin
regsub -all -- %A1 $stdin \161 stdin
regsub -all -- %F3 $stdin  stdin
regsub -all -- %FA $stdin  stdin
regsub -all -- %F1 $stdin  stdin
regsub -all -- %D1 $stdin  stdin
regsub -all -- %C1 $stdin  stdin
regsub -all -- %C9 $stdin  stdin
regsub -all -- %CD $stdin  stdin
regsub -all -- %D3 $stdin  stdin
regsub -all -- %DA $stdin  stdin
regsub -all -- %DC $stdin  stdin
regsub -all -- %FC $stdin  stdin
regsub -all -- %7E $stdin ~ stdin
regsub -all -- %60 $stdin ` stdin
regsub -all -- %21 $stdin ! stdin
regsub -all -- %23 $stdin # stdin
regsub -all -- %24 $stdin $ stdin
regsub -all -- %26 $stdin \038 stdin
regsub -all -- %28 $stdin ( stdin
regsub -all -- %29 $stdin ) stdin
regsub -all -- %5E $stdin ^ stdin
regsub -all -- %3D $stdin = stdin
regsub -all -- %2B $stdin + stdin
regsub -all -- %2C $stdin , stdin
regsub -all -- %3C $stdin < stdin
regsub -all -- %3E $stdin > stdin
regsub -all -- %5C $stdin \\ stdin
regsub -all -- %0D $stdin \013 stdin
regsub -all -- %0A $stdin \010 stdin
regsub -all -- %40 $stdin @ stdin
regsub -all -- %B4 $stdin \180 stdin

set stdin [split $stdin &]
foreach item $stdin {
  set var [lindex [split $item =] 0]
  set dat [string range $item [expr [string length $var]+1] e]
  set arg($var) $dat
}

fconfigure stdout -buffering line
package require mytcl

if {[array get arg T1] > 0} {set op $arg(T1)} else {set op ""}

proc cero {x} { if {$x <10} {return 0$x} else {return $x} }

proc fec {secs} {
 set dia ""
 set minutos 0
 set horas 0
 set segundos 0
 if {$secs > 86400} {
  set dd [expr $secs / 86400]
  set secs [expr $secs - $dd * 86400]
  if {$dd > 1} {set dia "$dd+"} else {set dia ""}
 }
 if {$secs > 3600} {
  set dd [expr $secs / 3600]
  set secs [expr $secs - $dd * 3600]
  set horas $dd
 }
 if {$secs > 60} {
  set dd [expr $secs / 60]
  set secs [expr $secs - $dd * 60]
  set minutos $dd
 }
 if {$secs > 0} {
  set segundos $secs
 }
 return $dia[cero $horas]:[cero $minutos]:[cero $segundos]
}

proc limpia { data } {
  regsub -all -- \\\\ $data \\\\\\\\ data ; regsub -all -- \\\[ $data \\\\\[ data ; regsub -all -- \\\] $data \\\\\] data
  regsub -all -- \\\} $data \\\\\} data ; regsub -all -- \\\{ $data \\\\\{ data ; regsub -all -- \\\" $data \\\\\" data
  regsub -all -- \' $data \\\' data
  return $data
}

proc feci {txt} {
 return "[string range $txt 6 7]/[string range $txt 4 5]/[string range $txt 0 3] [string range $txt 8 9]:[string range $txt 10 11]:[string range $txt 12 13]"
}
proc s {txt n} {
 set sp "                    "
 return $txt[string range $sp 0 [expr $n - [string length $txt]]]
}
  
set connuno [sql connect $sqlhost $sqluser $sqlpass]
sql selectdb $connuno $sqldbase

set tt 0
set co [sql query $connuno "select id from nick where nick = '$op'"]
while {[set row [sql fetchrow $connuno $co]] != ""} {set tt $row }
sql endquery $connuno $co
if {$tt == 0} { sql disconnect $connuno;return}
 puts "Content-type: text/html"

 puts ""
 puts "<html>"
 puts ""
 puts "<head>"
 puts "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1252\">"
 puts "<meta http-equiv=\"Content-Language\" content=\"en-us\">"
 puts "<title>Home Page</title>"
 puts "</head>"
 puts ""
 puts "<body>"
 puts "<form method=\"POST\" action=\"$url\">"

 puts "  <p><font face=\"Arial\">Nick:</font><input type=\"text\" name=\"T1\" size=\"20\"><input type=\"submit\" value=\"Submit\" name=\"B1\"></p>"
 puts "</form>"
if {[string length $op] == 0} {
 puts "<font face=\"Arial\">?</font></p>"
} else {
# puts "<div align=\"center\">"
# puts "  <center>"
 puts "  <table border=\"0\" cellpadding=\"0\" cellspacing=\"1\" width=\"680\">"

set co [sql query $connuno "select * from last where nick = $tt order by lin desc"]
while {[set row [sql fetchrow $connuno $co]] != ""} {
 set cu [sql query $connuno "select fecha_hora,stat,chan,unix_timestamp(fecha_hora),ident,host from master where id = [lindex $row 0]"]
 while {[set rowa [sql fetchrow $connuno $cu]] != ""} {
  set fec_ini [lindex $rowa 0] ; set stat_ini [lindex $rowa 1] ; set chan [lindex $rowa 2] ; set ufec_ini [lindex $rowa 3] ; set ident [lindex $rowa 4] ; set host [lindex $rowa 5]
 }
 sql endquery $connuno $cu

 if {[string length [lindex $row 1]] > 0} {
  set cu [sql query $connuno "select fecha_hora,stat,unix_timestamp(fecha_hora),ident,host from master where id = [lindex $row 1]"]
  while {[set rowb [sql fetchrow $connuno $cu]] != ""} {
   set fec_end [lindex $rowb 0] ; set stat_end [lindex $rowb 1] ; set ufec_end [lindex $rowb 2]
  }
  sql endquery $connuno $cu
  set cu [sql query $connuno "select chan from chan where id = $chan"]
  while {[set rowc [sql fetchrow $connuno $cu]] != ""} {set chan $rowc} ; sql endquery $connuno $cu
 puts "    <tr>"
 puts "      <td width=\"60\" bgcolor=\"#C0C0C0\">"
  puts "<p><font face=\"Arial\" size=\"1\">$op</font></p>"
 puts "      </td>"
 puts "      <td width=\"80\" bgcolor=\"#C0C0C0\">"
  puts "<p><font face=\"Arial\" size=\"1\">$chan</font></p>"
 puts "      </td>"
 puts "      <td width=\"100\" bgcolor=\"#C0C0C0\">"
  puts "<p><font face=\"Arial\" size=\"1\">[feci $fec_ini]</font></p>"
 puts "      </td>"
 puts "      <td width=\"8\" bgcolor=\"#C0C0C0\" align=\"center\">"
  puts "<p><font face=\"Arial\" size=\"1\">$stat_ini</font></p>"
 puts "      </td>"
 puts "      <td width=\"5\" bgcolor=\"#C0C0C0\" align=\"center\">"
  puts "<p><font face=\"Arial\" size=\"1\">-</font></p>"
 puts "      </td>"
 puts "      <td width=\"100\" bgcolor=\"#C0C0C0\">"
  puts "<p><font face=\"Arial\" size=\"1\">[feci $fec_end]</font></p>"
 puts "      </td>"

 puts "      <td width=\"8\" bgcolor=\"#C0C0C0\" align=\"center\">"
  puts "<p><font face=\"Arial\" size=\"1\">$stat_end</font></p>"
 puts "      </td>"
 puts "      <td width=\"50\" bgcolor=\"#C0C0C0\">"
  puts "<p><font face=\"Arial\" size=\"1\">([fec [expr $ufec_end - $ufec_ini]])</font></p>"
 puts "      </td>"

  set cu [sql query $connuno "select ident from ident where id = $ident"]
  while {[set rowc [sql fetchrow $connuno $cu]] != ""} {set ident $rowc} ; sql endquery $connuno $cu
  set cu [sql query $connuno "select host from host where id = $host"]
  while {[set rowc [sql fetchrow $connuno $cu]] != ""} {set host $rowc} ; sql endquery $connuno $cu

 puts "      <td width=\"230\" bgcolor=\"#C0C0C0\" align=\"right\">"
  puts "<p><font face=\"Arial\" size=\"1\">$ident@$host</font></p>"
 puts "      </td>"
 puts "    </tr>"
 }
}
sql endquery $connuno $co


 puts "  </table>"
# puts "  </center>"
# puts "</div>"
}
 puts "<hr>"
 switch $lang {
  1 {
      puts "1:Entro al canal - 2:Salio del canal - 3:Salio del servidor - 4:Salio por netsplit"
      puts "5:Regreso de netsplit - 6:Pateado del canal - 7:Cambio de nick"
    }
  2 {
      puts "1:Join - 2:Part - 3:Sign off - 4:Sign netsplit"
      puts "5:Rejoin netsplit - 6:Kicked - 7:Nick change"
    }
 }
 puts "</body>"
 puts ""
 puts "</html>"
 puts ""


sql disconnect $connuno


## 1 - join
## 2 - part
## 3 - sign
## 4 - split
## 5 - rejoin
## 6 - kick
## 7 - chnick
## 8 - chmode
## 9 - topc
# 10 - chon
# 11 - chjn
# 12 - chpt


proc ob {tc dato} {
 global sqluser sqlpass sqlhost sqldbase
 set connuno [sql connect $sqlhost $sqluser $sqlpass]
 sql selectdb $connuno $sqldbase
 set co [sql query $connuno "select id from $tc where $tc = '$dato'"]
 set tt 0
 while {[set row [sql fetchrow $connuno $co]] != ""} {set tt $row }
 sql endquery $connuno
 if {$tt == 0} {
  sql exec $connuno "insert into $tc ($tc) values('$dato')" 
  sql query $connuno "select id from $tc where $tc = '$dato'"
  while {[set row [sql fetchrow $connuno]] != ""} {set tt $row }
  sql endquery $connuno $co
 }
 sql disconnect $connuno
 return $tt
}

proc obn {tc dato} {
 global sqluser sqlpass sqlhost sqldbase
 set connuno [sql connect $sqlhost $sqluser $sqlpass]
 sql selectdb $connuno $sqldbase
 set co [sql query $connuno "select $tc from $tc where id = '$dato'"]
 set tt 0
 while {[set row [sql fetchrow $connuno $co]] != ""} {set tt $row }
 sql endquery $connuno $co
 sql disconnect $connuno
 return $tt
}


proc ho {st n} {
 return [lindex [split $st @] $n]
}


