#!/usr/local/qddb/bin/qtclsh
#
# passwd2qddb.qtcl - import /etc/passwd into Clients relation
#

set webserver www.cin-tech.ns.ca
set mailserver mail.cin-tech.ns.ca
set bullet1 http:/images/bullet.gif
set bullet2 http:/images/sun.gif
set acctinfo "http:/members/cgi-bin/users_own_info"
set userDBinfo "http:/members/cgi-bin/user_own_DB_info"

proc new_view {schema_desc tuple_desc array_name} {
  set l [qddb_schema leaves $schema_desc]
  foreach i $l {
    lappend attrs [list $i ${array_name}($i)]
  }
  return [qddb_view define $tuple_desc $attrs]
}

proc initContact {var} {
  global arr gv_tmpattr webserver mailserver bullet1 bullet2 \
		acctinfo userDBinfo
  set n [lindex $var 4] 
  set n [split $n]
  set arr(Company.Contact.ID) $gv_tmpattr(clid)
  incr gv_tmpattr(clid)
  set arr(Company.Contact.Username) [lindex $var 0]
  set arr(Company.Contact.UID) [lindex $var 2]
  set arr(Company.Contact.GID) [lindex $var 3]
  set arr(Company.Contact.First) [lindex $n 0]
  set arr(Company.Contact.Last) [lrange $n 1 end]
  set arr(Company.Contact.Homedir) [lindex $var 5]
  set arr(Company.Contact.Shell) [lindex $var 6]
  set arr(Company.Contact.Months) 1
  set arr(Company.Contact.Hours) 20
  set arr(Company.Contact.WebPages) 1
  set arr(Company.Contact.WebProject.Name) Homepage
  set arr(Company.Contact.WebProject.Categories) "Homepage,Default"
  set arr(Company.Contact.WebProject.Path) \
	[format "http://%s/~%s" $webserver [lindex $var 0]]
  set arr(Company.Contact.WebProject.Title) $n
  set arr(Company.Contact.WebProject.Header) \
	[format "<INSERT NAME=HOMEHEAD TITEL=\"%s\">" $n]
  set arr(Company.Contact.WebProject.Footer) "<INSERT NAME=END>"
  set arr(Company.Contact.WebProject.Background) \
	http:/images/tiles/stdhome1.gif
  set arr(Company.Contact.WebProject.BGcolor) "#A46400"
  set arr(Company.Contact.WebProject.Textcolor) "#FFFFFF"
  set arr(Company.Contact.WebProject.Linkcolor) "#FFFF00"
  set arr(Company.Contact.WebProject.Vlinkcolor) "#E0E000"
  set arr(Company.Contact.WebProject.Bullet1) $bullet1
  set arr(Company.Contact.WebProject.Bullet2) $bullet2
  set arr(Company.Contact.WebProject.Divider1) http:/images/divider1.gif
  set arr(Company.Contact.WebProject.Divider2) http:/images/divider2.gif
  set arr(Company.Contact.WebProject.Image1) http:/images/work.gif
  set arr(Company.Contact.WebProject.Iurl1) http:/admin/no_image.spider
  set arr(Company.Contact.WebProject.Image2) http:/images/work.gif
  set arr(Company.Contact.WebProject.Iurl2) http:/admin/no_image.spider
  set arr(Company.Contact.WebProject.URL1) http:/
  set arr(Company.Contact.WebProject.Anchor1) "My Home Site"
  set arr(Company.Contact.WebProject.URL2) $acctinfo
  set arr(Company.Contact.WebProject.Anchor2) "Account Info"
  set arr(Company.Contact.WebProject.URL3) $userDBinfo
  set arr(Company.Contact.WebProject.Anchor3) "User Info"
  set arr(Company.Contact.WebProject.URL4) \
	"http://$webserver/staff/index.spider"
  set arr(Company.Contact.WebProject.Anchor4) "MarkM's Projects"
  set arr(Company.Contact.WebProject.URL5) \
	"http://$webserver/ISPutil/index.spider"
  set arr(Company.Contact.WebProject.Anchor5) "ISPutil Documentation"
  set arr(Company.Contact.WebProject.URL6) \
	"http://$webserver/WWWutil/index.spider"
  set arr(Company.Contact.WebProject.Anchor6) "WWWutil Documentation"
  set arr(Company.Contact.Email) \
	[format "%s@%s" [lindex $var 0] $mailserver]
  set arr(Company.Contact.MonthlyRate) 0.00
  catch { exec id -Gn $arr(Company.Contact.Username)} \
		arr(Company.Contact.Groups)
}

set S [qddb_schema open Setup]
set K [qddb_search $S -prunebyattr ClientID r .*]
set T {}
foreach i [qddb_keylist get $K] {
    set T [qddb_tuple read $S $i]
    if {[llength $T] > 0} {
      break
    }
}
if {[string compare $T {}] == 0} {
    puts "You must set up fields in the Setup screen first"
    return
}
qddb_keylist delete $K
while {[qddb_tuple lock $T] == 0} {
    puts "Setup record locked, retrying..."
    exec sleep 1
}
set V [qddb_view define $T {
    {ClientID gv_tmpattr(clid)}
}]

set s [qddb_schema open Clients]
set fd [open /etc/passwd r]

puts "Processing passwd file into arrays..."
while {[gets $fd var] != -1} {
  set var [split $var :]
  set uid [lindex $var 2]
  if {[info exists uids($uid)] != 1} {
    set uids($uid) $var
  }
  lappend contacts($uid) $var
}

puts "Processing from arrays..."
foreach uid [array names uids] {
  puts -nonewline "UID : "
  puts -nonewline $uid
  set var $uids($uid)
  set t [qddb_tuple new $s]
  set v [new_view $s $t arr]
  if {$uid < 500} {
    set arr(CustomerType) Admin
    set arr(CustomerClass) Not
    set arr(CreditLimit) 0.00
  } else {
    set arr(CustomerType) COD
    set arr(CustomerClass) Internet
    set arr(CreditLimit) 0.00
  }
  set c $contacts($uid)
  initContact [lindex $c 0]
  puts -nonewline " "
  puts -nonewline [lindex $var 0]
  foreach var [lrange $c 1 end] {
    qddb_instance switch $v Company.Contact \
		[qddb_instance new $v Company.Contact]
    initContact $var
    puts -nonewline " "
    puts -nonewline [lindex $var 0]
  }
  puts "\n"
  qddb_tuple write $t  ;# write to disk
  qddb_tuple delete $t ;# free the memory
}
qddb_schema close $s
qddb_tuple write $T
catch "qddb_tuple delete $T"
qddb_schema close $S
