source libpasse.ttml
proc tout {} {
return 1
}
proc init_jourbalises {} {
global jourbalises
set jourbalises {}
}
init_jourbalises
proc print_jourbalises {} {
global jourbalises
foreach balise $jourbalises {
hputs " [date_francaise_kely $balise] "
}
}
proc extra_avis {} {
hputs "
Carnet de prise de rendez-vous au CAI Antananarivo
|
|
Centre d'accès à l'information d'Antananarivo
|
ATTENTION : les prises de rendez-vous ne sont qu'à titre
indicatif et n'engagent en aucun cas la responsabilité
du Centre d'accès à l'information quant à
la disponibilité du service
"
}
extra_avis
proc date_francaise {clock} {
set r {}
regsub {^(....)-(..)-(..)$} $clock {\2/\3/\1} clock2
foreach {jour date mois annee} [clock format [clock scan $clock2] -format "%w %e %m %Y"] {}
append r [lindex [list dimanche lundi mardi mercredi jeudi vendredi samedi dimanche] $jour]
append r " $date "
regsub -all {^0*} $mois {} mois
append r [lindex [list {} janvier février mars avril mai juin juillet aout septembre octobre novembre décembre] $mois]
append r " $annee"
return $r
}
proc date_francaise_kely {clock} {
set r {}
regsub {^(....)-(..)-(..)$} $clock {\2/\3/\1} clock2
foreach {jour date mois annee} [clock format [clock scan $clock2] -format "%w %e %m %Y"] {}
append r [lindex [list dimanche lundi mardi mercredi jeudi vendredi samedi dimanche] $jour]
append r " $date"
return $r
}
set prec_date {}
proc changement_date {date} {
upvar ENVS ENVS
upvar prec_date prec_date
upvar postes_heure postes_heure
upvar resas_heure resas_heure
upvar focus_date focus_date
upvar VARS VARS
if {[string compare $prec_date $date]} {
if {[string compare {} $prec_date]} {
output_jour
}
set prec_date $date
catch {
unset postes_heure
unset resas_heure
}
}
}
set prec_heure {heure}
proc changement_heure {heure} {
upvar prec_heure prec_heure
set prec_heure $heure
}
proc output_jour {} {
upvar ENVS ENVS
upvar prec_date prec_date
upvar postes_heure postes_heure
upvar resas_heure resas_heure
upvar focus_date focus_date
upvar VARS VARS
global jourbalises
lappend jourbalises $prec_date
if {![string compare $focus_date $prec_date]} {
hputs ""
}
hputs ""
hputs "\n| "
hputs "[date_francaise $prec_date]"
hputs " |
\n"
upvar prec_heure prec_heure
upvar prec_poste prec_poste
set prec_heure {}
set prec_poste {}
if {[tous_les_jours] || ([info exists VARS(detail)] && ![string compare $VARS(detail) $prec_date])} {
hputs ""
hputs "| | "
set postes [lsort [array names postes_heure]]
foreach poste $postes {
hputs "\n Poste n°$poste | "
}
hputs ""
set i 0
foreach heure [lsort [array names resas_heure]] {
if {[tout] || [lsearch $resas_heure($heure) {}] != -1} {
incr i
hputs "\n\n
"
regsub {^(..:..):..$} $heure {\1} heure2
hputs "| $heure2 | "
# hputs ""
array set poste2client $resas_heure($heure)
foreach poste $postes {
hputs "\n | "
if {[llength [array get poste2client $poste]]} {
hputs ""
set client $poste2client($poste)
if {[string length $client]} {
hputs "$client"
} else {
hputs "LIBRE"
}
hputs ""
} else {
hputs " "
}
hputs " | "
}
hputs "\n
"
unset poste2client
}
}
hputs "
"
} else {
# pas tous les jours...
hputs " Cliquer ici pour le détail de la journée"
}
hputs "
"
}
proc reservation_poste {poste client} {
upvar postes_heure postes_heure
upvar resas_heure resas_heure
upvar prec_heure prec_heure
set postes_heure($poste) $client
lappend resas_heure($prec_heure) $poste $client
}
proc init {} {
upvar env env
package require sql
# load ./libsql.so
# load /usr/lib/sqlite/libtclsqlite.so.0
load ./libcrypt.so
set env(LANG) fr
}
proc connexion {script} {
upvar prec_date prec_date ENVS ENVS VARS VARS
# catch {
if {[test]} {
set base reftest
hputs "
"
} else {
set base refer
}
set pass rentof
set connexion [sql connect localhost refer $pass]
sql selectdb $connexion $base
eval $script
sql exec $connexion "UNLOCK TABLES"
sql disconnect $connexion
# } error
# hputs $error
# hputs [array get errorInfo]
}
proc liste {{focus_date {}}} {
upvar connexion s
upvar prec_date prec_date ENVS ENVS VARS VARS
if 1 {
set f [open menueto.html] ; hputs [read $f] ; close $f
hputs "
"
}
# parray ENVS
proc tous_les_jours {} "return [expr [regexp {^Mozilla/[345]} $ENVS(HTTP_USER_AGENT)] || [info exists VARS(complet)]]"
# proc tous_les_jours {} "return 0"
if {0 && ([tous_les_jours] || ![info exists VARS(detail)])} {
hputs "
Bienvenue !
C'est donc ici, sur cette page web, que s'effectueront maintenant les réservations de poste pour la consultation d'Internet.
Pour réserver une plage horaire, ou pour annuler une réservation, il suffit de cliquer dans la case correspondante. Votre mot de passe vous sera ensuite demandé pour valider l'opération.
Il n'y a plus de grille le lundi matin ; il n'y a plus de limitation du nombre de réservations dans la semaine.
En revanche, à tout instant, vous ne pourrez avoir au plus que 1 réservation dans l'avenir (de 60 minutes chacune). On ne peut pas réserver au-delà de 10 jours dans l'avenir.
N'oubliez pas que ce carnet n'est établi qu'à titre indicatif. Le centre se réserve le droit d'utiliser les postes à tout moment pour les besoins internes.
N'oubliez pas de me faire part de vos commentaires et suggestions :
niry@refer.mg
Bonnes réservations !
Niry
Suites à des pérturbations sur le serveur, les réservations du 3 au 17 août prises avant le 31 juillet 2001 ont été annulées. Toutes nos excuses pour les dérangements que cet incident pourra causer.
"
}
if {0} {
hputs {
Réservation, annulation: cliquer sur la plage horaire souhaitée
}
}
sql query $s {
SELECT place.jour, place.heure, place.poste, client.username
FROM place, reservation, client
WHERE ( ( to_days(place.jour) > to_days(now()) AND to_days(place.jour) <= to_days(now())+20 )
OR ( to_days(place.jour) = to_days(now()) AND time_to_sec(curtime())-30*60 <= time_to_sec(place.heure) )
)
AND reservation.id = place.reservation
AND client.id = reservation.client
ORDER BY place.jour ASC, place.heure ASC, place.poste ASC;
}
while {[set row [sql fetchrow $s]] != ""} {
foreach {date heure poste client} $row {
changement_date $date
changement_heure $heure
reservation_poste $poste $client
}
}
changement_date {}
sql endquery $s
}
proc consultation {} {
upvar connexion s
upvar VARS VARS
upvar ENVS ENVS
sql query $s "
SELECT client.username
FROM place, reservation, client
WHERE reservation.id = place.reservation AND client.id = reservation.client
AND place.heure = '$VARS(heure)' AND place.jour = '$VARS(date)' AND place.poste = '$VARS(poste)'
"
set client {}
while {[set row [sql fetchrow $s]] != ""} {
foreach {client} $row {}
}
sql endquery $s
hputs "Le poste n°$VARS(poste)"
if {[string length $client]} {
hputs " a été réservé par $client "
} else {
hputs " n'a pas été réservé "
}
hputs "pour le [date_francaise $VARS(date)] à $VARS(heure)."
hputs "
"
hputs ""
hputs "
"
}
proc message_passe_invalide {} {
hputs "ERREUR !
"
hputs "Mot de passe invalide.
"
hputs "
"
hputs "Vérifiez que vous avez bien respecté les minuscules/majuscules."
hputs "
"
hputs "Si votre abonnement est terminé, consultez Niry pour le renouveler.
"
hputs "
"
hputs "Vous pouvez changer votre mot de passe ici.
"
}
proc reservation {} {
upvar connexion connexion prec_date prec_date ENVS ENVS VARS VARS
# INTERDICTION DE RESERVATION SUR LE POSTE 6
# if {![string compare 6 $VARS(poste)] && [string compare $ENVS(REMOTE_ADDR) 192.168.1.2]} {
# hputs "ERREUR !
"
# hputs "Reservation impossible sur ce poste.
"
# return
# }
# RECHERCHE DE L'ID DU CLIENT
set nb_client 0
if {[string length $VARS(client)]} {
sql query $connexion "
SELECT client.id, client.numero, client.username, client.prenom, client.nom
FROM client
WHERE client.[expr [regexp {^[0-9]+$} $VARS(client) ]?{numero}:{username}] = '$VARS(client)'
"
set client {}
while {[set row [sql fetchrow $connexion]] != ""} {
foreach {client_id client_numero client_username client_prenom client_nom} $row {
incr nb_client
# puts "id: $client_id"
# puts "numero: $client_numero"
# puts "username: $client_username"
# puts "prenom: $client_prenom"
# puts "nom: $client_nom"
}
}
sql endquery $connexion
}
if {$nb_client != 1} {
hputs "ERREUR !
"
switch $nb_client {
0 {hputs "L'identifiant $VARS(client) ne correspond à aucun client REFER."}
default {hputs "Plusieurs clients correspondent à l'identifiant $VARS(client)."}
}
hputs "
"
return
}
# VERIFICATION DU MOT DE PASSE
if {![motdepasse_valide $client_username $VARS(motdepasse)]} {
message_passe_invalide
return
}
# VERIFICATION DU QUOTA DE RESERVATION
foreach {nb jour} [nombre_de_reservations $client_id] {}
# if { $nb >= 1 && [string compare $ENVS(REMOTE_ADDR) 192.168.1.2]} {
# }
if { $nb >= 1 } {
hputs "Désolé !
"
hputs "1 réservation de 60 minutes au maximum, s'il-vous-plaît.
"
# hputs "Vous pourrez effectuer une nouvelle réservation à partir du [date_francaise $jour]."
return
}
# LOCK DE LA BASE DE DONNEES
sql exec $connexion {
LOCK TABLES place WRITE, ordre WRITE, reservation WRITE, client READ
}
# RECHERCHE D'UN EVENTUEL CLIENT ?
sql query $connexion "
SELECT client.username
FROM place, reservation, client
WHERE reservation.id = place.reservation AND client.id = reservation.client
AND place.heure = '$VARS(heure)' AND place.jour = '$VARS(date)' AND place.poste = '$VARS(poste)'
AND to_days(place.jour) >= to_days(now())
"
set client_precedent {TRICHE}
while {[set row [sql fetchrow $connexion]] != ""} {
foreach {client_precedent} $row {}
}
sql endquery $connexion
if {[string length $client_precedent]} {
hputs "
Cette plage horaire a déjà été réservée.
"
sql exec $connexion "UNLOCK TABLES"
} else {
# RESERVATION DANS LA BASE DE DONNEES
sql query $connexion "select place.id from place where jour='$VARS(date)' AND heure='$VARS(heure)' AND poste='$VARS(poste)'"
while {[set row [sql fetchrow $connexion]] != ""} {
foreach {placeid} $row {}
}
sql endquery $connexion
sql exec $connexion "INSERT INTO ordre SET origine='$ENVS(REMOTE_ADDR)', moment=now()"
sql exec $connexion "INSERT INTO reservation SET client='$client_id', ordre=LAST_INSERT_ID(), place=$placeid"
sql exec $connexion "UPDATE place SET reservation=LAST_INSERT_ID() WHERE place.id = '$placeid'"
sql exec $connexion "UNLOCK TABLES"
liste $VARS(date)
}
}
proc nombre_de_reservations {clientid} {
upvar connexion connexion
set jour {}
sql query $connexion "
SELECT place.jour
FROM place, reservation
WHERE place.jour >now() AND reservation.client = $clientid AND reservation.id = place.reservation AND place.jour >= '2001-11-20'
ORDER BY place.jour DESC
"
set i 0
while {[set row [sql fetchrow $connexion]] != ""} {
foreach {jour heure poste} $row {
}
incr i
}
sql endquery $connexion
return [list $i $jour]
}
proc annulation {} {
upvar connexion connexion prec_date prec_date ENVS ENVS VARS VARS
# RECHERCHE DU CLIENT AYANT RESERVE CETTE PLAGE HORAIRE
sql query $connexion "
SELECT client.id, client.username, reservation.id
FROM place, reservation, client
WHERE reservation.id = place.reservation AND client.id = reservation.client
AND place.heure = '$VARS(heure)' AND place.jour = '$VARS(date)' AND place.poste = '$VARS(poste)'
"
set client_precedent {}
while {[set row [sql fetchrow $connexion]] != ""} {
foreach {client_id client_username reservation_id} $row {
}
}
sql endquery $connexion
# VERIFICATION DU MOT DE PASSE
if {![motdepasse_valide $client_username $VARS(motdepasse)]} {
message_passe_invalide
return 1
}
# LOCK DE LA BASE DE DONNEES
sql exec $connexion {
LOCK TABLES place WRITE, ordre WRITE, reservation WRITE, client READ
}
# ANNULATION DANS LA BASE DE DONNEES
sql exec $connexion "INSERT INTO ordre SET origine='$ENVS(REMOTE_ADDR)', moment=now()"
sql exec $connexion "UPDATE reservation SET annulation=LAST_INSERT_ID() where reservation.id = $reservation_id"
sql exec $connexion "
UPDATE place SET reservation=0
WHERE place.reservation = $reservation_id"
sql exec $connexion "UNLOCK TABLES"
liste $VARS(date)
}
proc traite_operation {} {
upvar connexion connexion prec_date prec_date ENVS ENVS VARS VARS
if {[llength [array get VARS operation]]} {
switch $VARS(operation) {
consultation consultation
reservation reservation
annulation annulation
default {puts erreur}
}
} else {
liste
}
}
proc debut {} {
upvar connexion connexion
hputs "
|
"
if 0 {
hputs "
|
Participez à la fête de l'Internet et de la Francophonie à Madagascar !
Nous organisons un , sur le thème :
Présentation d'un savoir-faire traditionnel malgache
Pour en savoir plus, cliquez ici !
|
|
"
}
hputs "
|
consultation Internet
carnet de rendez-vous
|
|
Accès rapide:
tout le carnet
"
sql query $connexion {
SELECT place.jour
FROM place
WHERE ( ( to_days(place.jour) > to_days(now()) AND to_days(place.jour) <= to_days(now())+20 )
OR ( to_days(place.jour) = to_days(now()) AND time_to_sec(curtime())-30*60 <= time_to_sec(place.heure) )
)
GROUP BY place.jour ASC
}
while {[set row [sql fetchrow $connexion]] != ""} {
foreach {jour} $row {
hputs " [date_francaise_kely $jour]"
}
}
sql endquery $connexion
hputs " | "
if 0 {
hputs {
}
}
if 1 {
hputs ""
}
}
hgetvars
if {![string compare $ENVS(DOCUMENT_NAME) index.ttml]} {
proc test {} {return 0}
} else {
# proc test {} {return 1}
proc test {} {return 0}
}
init
connexion {
debut
traite_operation
}
hputs " |
"
?>