#!/usr/bin/perl use cPanelUserConfig; #AUTEUR: Danny J. Sohier #DATE DE CREATION: 1er avril 2006 #NOM: handicap.pl #PROJET: Maggiebou (Club de golf Lorette Inc.) # Ce programme gère les handicaps. use DBI; use CGI qw/:standard/;; use CGI::Cookie; use Math::Round qw(round nearest); use Math::VecStat qw(max min maxabs minabs sum average); require "commun.pl"; $cgi = new CGI; #&testhtml($cgi->Dump()); ### NEW DBI 2016 $host= 'localhost:3306'; $database= 'golflevi_handicap'; $user= 'golflevi_golflev'; $password= 'NLr34eU?%uer4i68'; $data_source = "DBI:mysql:database=$database;host=$host;mysql_socket=/tmp/mysql.sock"; $dbh = DBI->connect($data_source, $user, $password) or die "Can't connect to $data_source: $DBI::errstr"; # On ramasse les informations du script $action = $cgi->param('action'); $membre = cookie('membre'); $xmembre = $cgi->param('xmembre'); $id_partie = $cgi->param('id_partie'); $kiosque = $cgi->param('kiosque'); $scope = $cgi->param('scope'); $ico_plus = '/images/handicap/plus-ico2.png'; $ico_moins = '/images/handicap/moins-ico.png'; &init_url; # Initialisation des URL $titre = "Gestion des handicaps"; &hdcp_varcalcul; # On initialise certaines variables pour le calcul du HDCP. if ($action eq 'login') { &verif_login; # On vérifie le login &biscuit('creation'); # On émet un cookie } #if elsif ($action eq 'affiche') { $htmlhdcp = &info_handicap; } #elsif elsif (($action eq 'ajout') && ($membre ne '')) { &biscuit('verifie'); # on vérifie l'état du biscuit... $infomembre = &info_membre; &ajout_partie; # On ajoute une partie $htmlhdcp = &info_handicap; &biscuit('creation'); # On émet un cookie } #elsif elsif (($action eq 'supprimepartie') && ($membre ne '') && ($id_partie ne '')) { &biscuit('verifie'); # on vérifie l'état du biscuit... $infomembre = &info_membre; &supprime_partie; # On supprime une partie $htmlhdcp = &info_handicap; &biscuit('creation'); # On émet un cookie } #elsif elsif ($action eq 'calculhdcp') { $membre = $xmembre; $infomembre = &info_membre; $htmlhdcp .= &calculhdcptout; # On calcule le différentiel pour chaque partie d'un membre... $htmlhdcp .= &info_handicap; #$facthdcp = &calcul_handicap; # On calcule le nouveau handicap &update_handicap($facthdcp); # On met à jour l'info du facteur hdcp du joueur dans sa fiche... #$htmlhdcp .= &info_handicap; $htmlhdcp .= $facthdcp; } #elsif elsif ($action eq 'doublon') { # Exceptionnel. Ceci va éliminier les doublons dans la BD de handicaps $infomembre = &info_membre; $htmlhdcp .= &info_handicap; $htmlhdcp .= &doublon; } # elsif elsif ($action eq 'listehdcp') { # Cette fonction permet de lister tous les handicaps si le membre possède ces droits. if ($scope eq 'embed') { print header(); $htmlhdcp = &listehdcp; print "$htmlhdcp"; exit(0); } # if else { &biscuit('verifie'); # on vérifie l'état du biscuit... $infomembre = &info_membre; } # else $htmlhdcp = &listehdcp; &biscuit('creation'); # On émet un cookie &init_html; #print header(-cookie=>$monbiscuit); print header(); print $entete; print $banniere; print $ariane; print $init_contenu; print $infomembre; print "$htmlhdcp"; print $pied; exit(0); } #elsif elsif ($action eq 'calcultous') { # Exceptionnel. Ceci permet de calculer les handicaps de tous les membres $htmlhdcp .= &calcultous; } # elsif else { print "Location: $url\n\n"; exit(0); } #else &init_html; #print $cgi->header(-cookie=>$monbiscuit); print header(-cookie=>$monbiscuit); print $entete; print $banniere; print $ariane; print $init_contenu; print $infomembre; print $formulaire; print "$htmlhdcp"; print $pied; exit(0); &testhtml($cgi->Dump()); #### #### Requetes secondaires #### sub testhtml { local($debug) = @_; $html = $cgi->header; # create the HTTP header print "$html $debug"; exit(0); } sub calcultous { # Exceptionnel. Avec ceci, on fait le calcul de tous les handicaps... local($stuff) = ''; $requete = "SELECT * from individu where ISNULL(handicap) order by numero"; $reqhtml .="
  • $requete"; ###$xth = $dbh->query($requete); $xth = $dbh->prepare($requete); $xth->execute(); ###if ($xth->numrows()) { if ($xth->rows()) { $g=1; $membrevrai=$membre; $hdcpvrai=$MEMBRE->{'handicap'}; ###while (local(%INFO)=$xth->fetchhash()) { while ($INFO=$xth->fetchrow_hashref('NAME_lc')) { $CALC{$INFO->{'numero'}}="$INFO->{'nom'}, $INFO->{'prenom'}"; #$stuff.="
  • $i :: $INFO{'numero'} - $INFO{'nom'}, $INFO{'prenom'}\n"; $requete = "SELECT * from hdcp_partie where id_membre='$INFO->{'numero'}'"; ###$gth = $dbh->query($requete); $gth = $dbh->prepare($requete); $gth->execute(); ###if ($gth->numrows() >= 5) { if ($gth->rows() >= 5) { ###local($nb)=$gth->numrows(); local($nb)=$gth->rows(); $stuff.="
  • $g :: $INFO->{'numero'} - $INFO->{'nom'}, $INFO->{'prenom'} - $nb\n"; $membre=$INFO->{'numero'}; $MEMBRE->{'handicap'}=''; $MEMBRE->{'tournois_ajust'}=''; $MEMBRE->{'tournois_ajust'}=''; undef %DIFF; undef @DIFF; &info_handicap; $g++; } # if } #while $membre=$membrevrai; $MEMBRE->{'handicap'}=$hdcpvrai; } #if return($stuff); } # calcultous sub biscuit { # On fait la gestion des cookies... local($quoi) = @_; if ($quoi eq 'creation') { # On attribue un nouveau cookie... ###$monbiscuit = new CGI::Cookie(-name=>'membre',-value=>$MEMBRE->{'numero'}, -domain=>'.golflorette.ca', -expires =>'+4m'); $monbiscuit = new CGI::Cookie(-name=>'membre',-value=>$MEMBRE->{'numero'}, -expires =>'+4m'); } # creation elsif ($quoi eq 'verifie') { &erreur if ($membre eq ''); } # elsif $bake.="BISCUITS
    "; foreach $cook (@cookies) { $bake.="$cook
    "; } #foreach } # biscuit sub erreur { print "Location: $urlloginerreur\n\n"; exit; } #erreur sub supprime_partie { # On supprime une partie si celle-ci existe et appartient au membre. $requete = "SELECT * from hdcp_partie where id_partie = '$id_partie'"; $reqhtml .="
  • $requete"; $sth = $dbh->prepare($requete); $sth->execute(); if ($sth->rows()) { $PARTIE = $sth->fetchrow_hashref('NAME_lc'); # Il y a une partie. On vérifie maintenant si la partie appartient au membre... Si non, on l'envoie en erreur &erreur if ($MEMBRE->{'numero'} ne $PARTIE->{'id_membre'}); # On continue et on supprime la partie $requete = "DELETE from hdcp_partie where id_partie='$id_partie'"; $reqhtml .="
  • $requete"; $reqhtml .="
  • MEMBRE-numero = $MEMBRE->{'numero'} :: PARTIE-membre = $PARTIE{'id_membre'}"; $dbh->do($requete); } # if else { # Il n'y a pas de partie avec ce numéro. On ejecte... &erreur; } # else } # supprime_partie sub verif_login { $membre = $cgi->param('membre'); $passe = $cgi->param('passe'); if (($membre ne '') && ($passe ne '')) { $infomembre = &info_membre; if ($MEMBRE->{'motdepasse'} eq $passe) { # Le mot de passe est bon on passe à autre chose... $htmlhdcp = &info_handicap; } #if else { &erreur; } #else } # if else { &erreur; } #else } # verif_login sub update_handicap { # On met à jour le facteur du handicap... local($hdcp) = @_; $requete = "UPDATE individu set handicap='$hdcp', date_handicap=now() where numero=$membre"; ###$dbh->query($requete); $dbh->do($requete); } # update_handicap sub calcul_handicap { # Cette fonction permet de calculer le handicap d'un membre. #local($nbmaxparties) = 0; local($facthdcp) = ''; if ($nbmaxparties == 0) { #Il n'y a pas assez de parties pour calculer un facteur de handicap ARGC &update_handicap($facthdcp) if ($facthdcp ne $MEMBRE->{'handicap'}); $MEMBRE->{'handicap'} = "N/D - Pas assez de parties inscrites..."; } #if else { # Il y assez de parties. On prend les $nbmaxparties plus bas différentiels pour calculer le facteur de hdcp ARGC @DIFF = sort {$a <=> $b} (@DIFF); splice(@DIFF,$nbmaxparties); local($somme) = sum(@DIFF); $facthdcp = (($somme/$nbmaxparties) * 0.96); $facthdcp =~s/(^\d{1,}\.\d{1})(.*$)/$1/; #$paul = "HDCP-membre = $MEMBRE{'handicap'} -- FactHDCP = $facthdcp"; #$paul .= " -- ON DOIT UPDATER !!! " if ($facthdcp ne $MEMBRE{'handicap'}); &update_handicap($facthdcp);# if ($facthdcp ne $MEMBRE{'handicap'}); $MEMBRE->{'handicap'} = $facthdcp; $MEMBRE->{'handicap'} = $MEMBRE->{'handicap'} - $MEMBRE->{'tournois_ajust'} if ($MEMBRE->{'tournois_ajust'} > 0); } # else # Mon handicap regroupe l'info du handicap du membre #HOMMES $hdcpnoir = &hdcpparcours($slope_noir,$MEMBRE->{'handicap'}); $hdcpbleu = &hdcpparcours($slope_bleu,$MEMBRE->{'handicap'}); $hdcpblanc_h = &hdcpparcours($slope_blanc_h,$MEMBRE->{'handicap'}); $hdcpvert_h = &hdcpparcours($slope_vert_h,$MEMBRE->{'handicap'}); $hdcpjaune_h = &hdcpparcours($slope_jaune_h,$MEMBRE->{'handicap'}); #FEMMES $hdcpblanc_f = &hdcpparcours($slope_blanc_f,$MEMBRE->{'handicap'}); $hdcpvert_f = &hdcpparcours($slope_vert_f,$MEMBRE->{'handicap'}); $hdcpjaune_f = &hdcpparcours($slope_jaune_f,$MEMBRE->{'handicap'}); $hdcprouge = &hdcpparcours($slope_rouge,$MEMBRE->{'handicap'}); $hdcpgris = &hdcpparcours($slope_gris,$MEMBRE->{'handicap'}); $monhandicap = "\n"; $monhandicap .="\n"; $monhandicap .=""; $monhandicap .="\n"; $monhandicap .="
    Mon facteur
    HDCP ARGC
    $MEMBRE->{'handicap'}
    "; $monhandicap .="calculé le $MEMBRE->{'date_handicap'}" if ($MEMBRE->{'date_handicap'} ne ''); $monhandicap .="
    Nombre de parties jouées cette année : $nbparties"; $monhandicap .="
    HANDICAP
    DE PARCOURS
    "; $monhandicap .=""; $monhandicap .=""; #hommes - ligne 1 $monhandicap .=""; $monhandicap .=""; #hommes - ligne 2 $monhandicap .=""; $monhandicap .=""; #hommes - ligne 3 $monhandicap .=""; $monhandicap .=""; $monhandicap .=""; #femmes - ligne 1 $monhandicap .=""; $monhandicap .=""; #femmes - ligne 2 $monhandicap .=""; $monhandicap .=""; #femmes - ligne 3 $monhandicap .=""; $monhandicap .=""; $monhandicap .="
    HOMMES
    NOIR:$hdcpnoirBLEU:$hdcpbleu
    BLANC:$hdcpblanc_hVERT:$hdcpvert_h
    JAUNE:$hdcpjaune_h
    FEMMES
    BLANC:$hdcpblanc_fVERT:$hdcpvert_f
    JAUNE:$hdcpjaune_fROUGE:$hdcprouge
    GRIS:$hdcpgris
    "; $monhandicap .="
    \n"; #$yeah=join("-",@DIFF); #$yukk=join("-",@nbparties); #return("nbmaxparties=$nbmaxparties
    partiescalcul=$partiescalcul
    HDCP=$facthdcp
    $yeah
    $yukk"); return($facthdcp); } # calcul_handicap sub hdcpparcours { local($slope,$fhdcp) = @_; local($hdcpjalon)=''; if ($fhdcp eq 'N/D - Pas assez de parties inscrites...') { $hdcpjalon = '-'; } else { $hdcpjalon = round($fhdcp*($slope/113)); } return($hdcpjalon); } # hdcpparcours sub calculhdcptout { # On calcule les diff de toutes les parties d'un membre # Cette fonction est spéciale et n'est pas utilisée dans l'interface Web. $requete = "select * from hdcp_partie where id_membre=$membre"; ###$sth = $dbh->query($requete); $sth = $dbh->prepare($requete); $sth->execute(); ###if ($sth->numrows()) { # Il y a des parties... if ($sth->rows()) { # Il y a des parties... ###while (local(%PARTIE) = $sth->fetchhash()) { while ($PARTIE = $sth->fetchrow_hashref('NAME_lc')) { ##local($diff)=&calculdiffpartie(%PARTIE); local($diff)=&calculdiffpartie; $requete = "UPDATE hdcp_partie set diffhdcp='$diff' where id_partie=$PARTIE->{'id_partie'}"; $htmlhdcp .="
  • $requete"; ###$dbh->query($requete); $dbh->do($requete); } # while } # if } # calculhdcptout sub calculdiffpartie { local(%PARTIE) = @_; local($diff) = 0; $diff = ((($PARTIE{'pointage'}-$PARTIE{'evaluation'})*113)/$PARTIE{'slope'}); ###&testhtml("APRES calculdiffpartie"); $diff = nearest(.1, $diff); #$diff =~s/(^\d{1,}\.\d{1})(.*$)/$1/; return($diff); } #calculdiffpartie #sub hdcp_varcalcul { # # Cette fonction initialise des variables qui indique quoi faire pour calculer le facteur de handicap de la RCGA # @nbparties = (0,0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,8,9,10); # #hommmes # $slope_noir = '133'; # $slope_bleu = '131'; # $slope_blanc_h = '125'; # $slope_vert_h = '121'; # $slope_jaune_h = '116'; # #femmes # $slope_blanc_f = '131'; # $slope_vert_f = '128'; # $slope_rouge = '123'; # $slope_jaune_f = '128'; # $slope_gris = '117'; # #$slope_blanc_vert_h = '119'; # #$slope_bleu_blanc = '124'; #} # hdcp_varcalcul sub info_membre { # Cette fonction permet de recueillir les infos d'un membre. local($stuff)=''; $requete="SELECT * from individu where numero='$membre'"; $sth = $dbh->prepare($requete); $sth->execute(); if ($sth->rows()) { # Il y a un membre... On écrit sa fiche... $MEMBRE=$sth->fetchrow_hashref('NAME_lc'); $MEMBRE->{'courriel'}='Aucune adresse fournie...' if ($MEMBRE->{'courriel'} eq ''); $stuff.="\n\n"; $stuff.=""; $stuff.=""; $stuff.="\n"; $stuff.=""; $stuff.="\n"; } # if return($stuff); } # info_membre sub ajout_partie { # Cette fonction permet de recuillir les infos d'une partie et de l'ajouter au dossier de l'usager... # On débute en ramassant les infos de la partie... local($id_terrain,$jalon,$slope,$evaluation) = split(/\+/,$cgi->param('jalons')); #local($jour,$mois,$annee) = split(/\//,$cgi->param('MyDate')); local($mois,$jour,$annee) = split(/\//,$cgi->param('MyDate')); # où 72+Blanc+117.00+69.00 (id_terrain+jalon+slope+evaluation) $HDCP{'id_membre'} = $membre; $HDCP{'date_partie'} = "$annee-$mois-$jour"; $HDCP{'id_terrain'} = $id_terrain; if (($cgi->param('club') ne '99999') && ($cgi->param('club') ne '000')) { # C'est un club listé dans la BD ($HDCP{'nom_club'},$HDCP{'nom_terrain'}) = &fetch_terrain if ($cgi->param('club') ne '000'); } # if else { # C'est un club avec des infos fournies par le membre... $HDCP{'nom_club'} = $cgi->param('clubcache'); $HDCP{'nom_terrain'} = $cgi->param('parcourscache'); } # else $HDCP{'jalon'} = $jalon; $HDCP{'evaluation'} = $cgi->param('evaluation'); $HDCP{'slope'} = $cgi->param('slope'); $HDCP{'pointage'} = $cgi->param('pointage'); $HDCP{'tournoi'} = 'T' if ($cgi->param('tournoi') eq 'tournoi'); $HDCP{'putts'} = $cgi->param('putts') if ($cgi->param('putts') ne ''); $HDCP{'fairways'} = $cgi->param('fairways') if ($cgi->param('fairways') ne ''); $HDCP{'parfigure'} = $cgi->param('parfigure') if ($cgi->param('parfigure') ne ''); $HDCP{'categorie'} = $cgi->param('categorie'); ###&testhtml("Avant WHILE ajout_partie"); $HDCP{'diffhdcp'} = &calculdiffpartie(%HDCP); while (local($cle,$valeur)= each(%HDCP)) { $champs .= "$cle,"; $valeur = $dbh->quote($valeur); $valeurs .= "$valeur,"; $htmlhdcp.= "
  • $cle = $valeur
    "; } #while chop($valeurs); chop($champs); $requete = "INSERT into hdcp_partie ($champs) values ($valeurs)"; #$htmlhdcp .="
  • $requete
    "; $dbh->do($requete); } # ajout_partie sub fetch_terrain { # Cette fonction va chercher le nom du club et le nom du terrain selon le paramètre id_terraint $requete = "SELECT nom_club,nom_terrain from hdcp_terrain where id_terrain=$id_terrain"; ###$idt = $dbh->query($requete); ###local($nc,$nt) = $idt->fetchrow(); $idt = $dbh->prepare($requete); $idt->execute(); local($nc,$nt) = $idt->fetchrow_array(); return($nc,$nt); } # fetch_terrain sub fetch_tournois { local($difftournoi1)= ''; local($difftournoi2)= ''; local($difftournoi)= ''; local($facttournoi)= ''; local($reduction)= ''; local($STUFF)= ''; #local($bi)= ''; $requete = "SELECT * from hdcp_partie where id_membre=$membre and tournoi='T'and (DATE_SUB(curdate(),INTERVAL 365 DAY) <= date_partie) order by diffhdcp"; #$bi .="
  • $requete
    "; $sth = $dbh->prepare($requete); $sth->execute(); local($nbtournois) = $sth->rows(); if ($nbtournois >= 2) { # Il y a plus de différentiels... On peut calculer le facteur des tournois. $i=1; #$bi.="
  • Plus ou egal à 2 tournois"; while ($STUFF = $sth->fetchrow_hashref('NAME_lc')) { if ($i == 1) { # On calcule le premier différentiel formule tournoi... #$bi .= "1- ((( $STUFF{'pointage'} - $STUFF{'evaluation'} ) * 113 )/ $STUFF{'slope'})"; $difftournoi1 = ((($STUFF->{'pointage'}-$STUFF->{'evaluation'})*113)/$STUFF->{'slope'}); if ($difftournoi1 < 0) { $difftournoi1 = nearest(.1, $difftournoi1); } else { $difftournoi1 =~s/(^\d{1,}\.\d{1})(.*$)/$1/; } #$bi .= "=$difftournoi1"; } # if elsif ($i == 2) { #$bi .= "
    2- ((( $STUFF{'pointage'} - $STUFF{'evaluation'} ) * 113 ) / $STUFF{'slope'})"; $difftournoi2 = ((($STUFF->{'pointage'}-$STUFF->{'evaluation'})*113)/$STUFF->{'slope'}); $difftournoi2 =~s/(^\d{1,}\.\d{1})(.*$)/$1/; #$bi .= "=$difftournoi2"; #$bi .= "
    $MEMBRE{'handicap'} - $difftournoi2"; $facttournoi = $MEMBRE->{'handicap'} - $difftournoi2; #$bi .= "=$facttournoi"; if ($facttournoi >= 3) { # C'est qu'on doit diminuer le handicap du membre avec la règle de tournoi... #$bi .="
    ( $difftournoi1 + $difftournoi2 ) / 2"; $difftournoi = ($difftournoi1+$difftournoi2)/2; #$bi .= "=$difftournoi"; #$bi .= "
    $MEMBRE{'handicap'} - $difftournoi"; $difftournoi = $MEMBRE->{'handicap'} - $difftournoi; #$bi .= "=$difftournoi"; $requete = "select reduction from hdcp_tournoi WHERE (moy_inf <= $difftournoi and moy_sup >= $difftournoi) and (nb_score_inf <= $nbtournois and nb_score_sup >= $nbtournois)"; #$bi .="
    $requete"; $sdi = $dbh->prepare($requete); $sdi->execute(); local($reduction)= 0; $reduction = $sdi->fetchrow_array( ) if ($sdi->rows()); #$bi .="
    REDUCTION= $reduction"; #$bi .="
    ANCIEN HDCP= $MEMBRE{'handicap'}"; #$bi .="-- NOUVEAU HDCP= $MEMBRE{'handicap'}"; }# if } #elsif elsif ($i > 2) { last; # On sort de la loop... } # elsif $i++; } # while } # if if ($MEMBRE->{'tournois_ajust'} ne $reduction) { # L'ajustement des tournois n'est plus le même. On doit le modifier dans la BD. $requete= "UPDATE individu set tournois_ajust=$reduction where numero='$membre'"; $dbh->do($requete); $MEMBRE->{'tournois_ajust'} = $reduction; } # if } # fetch_tournois sub infoparties { # Cette fonction permet de retrouver des statistiques sur les parties local($quoi) = 0; $requete = "select count(*) from hdcp_partie where id_membre=$membre and year(date_partie)=year(now()) order by date_partie desc"; $htmlreq .= "
  • $requete
    "; $sth = $dbh->prepare($requete); $sth->execute(); $quoi = $sth->fetchrow_array() if ($sth->rows()); return($quoi); } #infoparties sub info_handicap { # On retrouve les dernières parties et on les affiche local($stuff) = ""; %JALON = ('Bleu','jalon_bleu.gif', 'Jaune (H)','jalon_jaune.gif', 'Jaune (F)','jalon_jaune.gif', 'Blanc','jalon_blanc.gif', 'Blanc (F)','jalon_blanc.gif', 'Blanc (H)','jalon_blanc.gif', 'Gris','jalon_gris.gif', 'Rouge','jalon_rouge.gif', 'Noir','jalon_noir.gif', 'Or','jalon_gold.gif', 'Vert (F)','jalon_vert.gif', 'Vert (H)','jalon_vert.gif', 'Vert','jalon_vert.gif'); # Cette fonction va chercher toutes les parties de tournoi et vérifie si on doit le diminuer selon les tournois... &fetch_tournois; $nbparties = &infoparties; # On retrouve le nombre de parties des joueurs $requete = "SELECT * from hdcp_partie Where Id_membre=$membre Order by date_partie desc limit 20"; $htmlreq .= "
  • $requete
    "; $sth = $dbh->prepare($requete); $sth->execute(); $partiescalcul = $sth->rows(); # Le nombre de parties disponibles pour le calcul... # Dans $nbmaxparties, on retrouve le nombre des plus petits diff utilisés dans le calcul du hdcp. $partie utilise seulement # pour afficher le nombre de parties utilisés dans le calcul. if ($partiescalcul == 20) { $nbmaxparties = 10; } #if else { $nbmaxparties = $nbparties[$partiescalcul]; } # else $stuff .="\t
  • MEMBRE: $MEMBRE->{'nom'}, $MEMBRE->{'prenom'}CATÉGORIE :$MEMBRE->{'desccategorie'}
    COURRIEL: $MEMBRE->{'courriel'}DÉPARTS: "; $stuff.="Envoi par courriel activé" if ($MEMBRE->{'depcourriel'} eq 'Y'); $stuff.="Envoi par courriel désactivé" if ($MEMBRE->{'depcourriel'} eq 'N'); $stuff.="
    \n"; $stuff .="\t"; $stuff .=""; # tournoi $stuff .=""; $stuff .=""; $stuff .=""; # jalon $stuff .=""; $stuff .=""; $stuff .=""; $stuff .=""; #$stuff .=""; $stuff .=""; $stuff .=""; $stuff .="\n"; $i=1; while ($HDCP = $sth->fetchrow_hashref('NAME_lc')) { #$DIFF{$HDCP{'id_partie'}} = $HDCP{'diffhdcp'}; $lastjalon = $HDCP->{'jalon'} if ($i == 1); $DIFF{$i} = $HDCP->{'diffhdcp'}; $stuff .= &hdcp_html; # On code le html pour une ligne de handicap push(@DIFF,$HDCP->{'diffhdcp'}); $i++; } # while #$debug.="
  • ".join('-',@DIFF); $facthdcp = &calcul_handicap; #$debug.="
  • ".join('-',@DIFF); $nbcalc=1; @ELIM = @DIFF; foreach $cle (sort keys %DIFF){ local($valeur) = $DIFF{$cle}; #$debug.="
  • $cle - $valeur (nbcalc ($nbcalc) <= nbmaxparties ($nbmaxparties)"; $i=0; foreach $ele (@ELIM) { if ($valeur eq $ele) { # C'est une partie qui a compté... #$debug.="
  • TROUVER: $valeur"; # $stuff=~s/\/gras/; splice(@ELIM,$i,1); last; } #if $i++; } # foreach } # foreach $stuff=~s/\//g; $stuff .= &hdcp_resume; # On insère une ligne totale... $stuff .= &hdcp_liste_tiers; # Hdcps des autres membres auxquels il a accès $stuff .= "\t
  • DateClubParcoursPointageEval.SlopeDiff HDCP
    ARGC
    CatPuttsAlléesPar Fig.
    \n"; if ($kiosque ne 'oui') { #$stuff .= "

  • Cet outil Web calcule les handicaps selon la méthode approuvée et certifiée de l'Association Royal de Golf du Canada (ARCG). Pour en savoir plus sur cette méthode de calcul, visiter le Manuel du Handicap sur le site Web de l'ARGC."; $stuff .= "
  • Commentaires, questions, suggestions ou pour l'ajout permanent d'un terrain à cette interface, écrivez à secretariat\@golflevis.com

    "; } # if local($final) = "\n\n
    $monhandicap
    $stuff
    \n"; #local($final) ="\n\n
    $stuff$monhandicap
    \n"; #$final.=$debug; return($final); } #info_handicap sub listehdcp { ##29 avril 2012 - On élimine la condition de voir_membre = 100000. Maintenant, tous peuvent voir les handicaps. #$requete = "SELECT * FROM hdcp_acces where id_membre='$membre' and voir_membre='100000'"; #$sth = $dbh->query($requete); #if ($sth->numrows()) { ## Cela indique que ce membre peut voir tous les handicaps. ## 29 avril 2012 - Nouveau début de cette fonction. $stuff = "\n"; if ($scope eq 'embed') { $tabent = "\n"; } # if else { $stuff .= "\n"; $tabent = "\n"; } #else #$requete = "SELECT * from individu order by nom,prenom"; $requete = "SELECT * from individu where typemembre not in ('PH','RT','RZ','35','--','10') order by nom,prenom"; $sth = $dbh->prepare($requete); $sth->execute(); if ($sth->rows()) { $i=0; $gris='non'; while ($MEMBRE = $sth->fetchrow_hashref('NAME_lc')) { $i = 0 if ($i > 15); $stuff .= $tabent if ($i == 0); local($hdcpnoir) =''; local($hdcpbleu) =''; local($hdcpblanc_h) =''; local($hdcpvert_h) =''; local($hdcpjaune_h) =''; local($hdcpblanc_f) =''; local($hdcpvert_f) =''; local($hdcpjaune_f) =''; local($hdcprouge) =''; local($hdcpgris) =''; if ($gris eq 'oui') { $stuff .= ""; $gris = 'non'; } else { $stuff .= ""; $gris = 'oui'; } if ($MEMBRE->{'handicap'} ne '') { #HOMMES $hdcpnoir = &hdcpparcours($slope_noir,$MEMBRE->{'handicap'}); $hdcpbleu = &hdcpparcours($slope_bleu,$MEMBRE->{'handicap'}); $hdcpblanc_h = &hdcpparcours($slope_blanc_h,$MEMBRE->{'handicap'}); $hdcpvert_h = &hdcpparcours($slope_vert_h,$MEMBRE->{'handicap'}); $hdcpjaune_h = &hdcpparcours($slope_jaune_h,$MEMBRE->{'handicap'}); #FEMMES $hdcpblanc_f = &hdcpparcours($slope_blanc_f,$MEMBRE->{'handicap'}); $hdcpvert_f = &hdcpparcours($slope_vert_f,$MEMBRE->{'handicap'}); $hdcpjaune_f = &hdcpparcours($slope_jaune_f,$MEMBRE->{'handicap'}); $hdcprouge = &hdcpparcours($slope_rouge,$MEMBRE->{'handicap'}); $hdcpgris = &hdcpparcours($slope_gris,$MEMBRE->{'handicap'}); } # if if ($MEMBRE->{'handicap'} < 0 ) { $MEMBRE->{'handicap'} = sprintf("%1.1f",$MEMBRE->{'handicap'}); $MEMBRE->{'handicap'} =~s/\-/\+/; #$MEMBRE{'handicap'} = '+'.int($MEMBRE{'handicap'}); } $stuff .= ""; $stuff .= ""; $stuff .= "\n"; $stuff .= "\n"; $i++; } #while # } #if $stuff.="\n"; $stuff.="
    MembreNomPrénomFact hdcpCalculé le Noir Bleu Blamc
    (H)
    Vert
    (H)
    Jaune
    (H)
    Blanc
    (F)
    Vert
    (F)
    Jaune
    (F)
    Rouge Gris
    Fermer cette fenêtre
    MembreNomPrénomFact hdcpCalculé le Noir Bleu Blanc
    (H)
    Vert
    (H)
    Jaune
    (H)
    Blanc
    (F)
    Vert
    (F)
    Jaune
    (F)
    Rouge Gris
    $MEMBRE->{'numero'}$MEMBRE->{'nom'}$MEMBRE->{'prenom'}$MEMBRE->{'handicap'}$MEMBRE->{'date_handicap'}$hdcpnoir$hdcpbleu$hdcpblanc_h$hdcpvert_h$hdcpblanc_h$hdcpblanc_f$hdcpvert_f$hdcpjaune_f$hdcprouge$hdcpgris
    Fermer cette fenêtre
    \n"; } # if return($stuff); } #listehdcp sub hdcp_liste_tiers { # Cette fonction permet de lister les hdcps des autres membres auxquels on a besoin d'avoir accès local($htmltiers)=''; $requete = "Select voir_membre from hdcp_acces where id_membre='$membre' order by voir_membre"; $sth = $dbh->prepare($requete); $sth->execute(); ## 29 avril 2012 - Accès à tous les handicaps par les membres... local($urltoushdpc) = "/cgi-bin/handicap.pl?action=listehdcp&scope=embed"; $htmltiers .= ""; $htmltiers .= '\n"; $htmltiers .= "

    \n"; if ($sth->rows()) { # Il y a des fiches de membres que ce membre peut voir... while ($voir_membre = $sth->fetchrow_array()) { $voir = 'oui'; push(@tiers,"'$voir_membre'"); # } #else } #while if ($voir eq 'oui') { $tiers = join(',',@tiers); $requete = "SELECT * from individu where numero in ($tiers) order by nom,prenom"; ###$sth = $dbh->query($requete); $sth = $dbh->prepare($requete); $sth->execute(); #$htmltiers.="
  • $requete"; ###if ($sth->numrows()) { # On retrouve les informations des membres ici... if ($sth->rows()) { # On retrouve les informations des membres ici... $htmltiers .="LES FACTEURS D'INDEX ET HANDICAPS DE MES COLLÈGUES\n"; $htmltiers .=""; $htmltiers .=""; $htmltiers .=""; $htmltiers .="\n"; ###while (local(%TIERS) = $sth->fetchhash()) { while ($TIERS = $sth->fetchrow_hashref('NAME_lc')) { local($hnoir) =&hdcpparcours($slope_noir,$TIERS->{'handicap'}); local($hbleu) =&hdcpparcours($slope_bleu,$TIERS->{'handicap'}); local($hbleublanc) =&hdcpparcours($slope_bleu_blanc,$TIERS->{'handicap'}); local($hblanc_h) =&hdcpparcours($slope_blanc_h,$TIERS->{'handicap'}); local($hblanc_vert_h) =&hdcpparcours($slope_blanc_vert_h,$TIERS->{'handicap'}); local($hvert_h) =&hdcpparcours($slope_vert_h,$TIERS->{'handicap'}); local($hblanc_f) =&hdcpparcours($slope_blanc_f,$TIERS->{'handicap'}); local($hblanc_vert_f) =&hdcpparcours($slope_blanc_vert_f,$TIERS->{'handicap'}); local($hvert_f) =&hdcpparcours($slope_vert_f,$TIERS->{'handicap'}); local($hrouge) =&hdcpparcours($slope_rouge,$TIERS->{'handicap'}); $htmltiers.=""; $htmltiers.=""; $htmltiers.=""; $htmltiers.=""; $htmltiers.=""; $htmltiers.="\n"; $htmltiers.= "\n"; } #while $htmltiers .="
    No. MembreNomPrénomFacteur
    HDCP
    Calculé le Noir Bleu Bleu
    Blanc
    Blanc
    (H)
    Blanc
    Vert
    (H)
    Vert
    (H)
    Blanc
    (F)
    Blanc
    Vert
    (F)
    Vert
    (F)
    Rouge
    $TIERS->{'numero'}$TIERS->{'nom'}$TIERS->{'prenom'}$TIERS->{'handicap'}$TIERS->{'date_handicap'}$hnoir$hbleu$hbleublanc$hblanc_h$hblanc_vert_h$hvert_h$hblanc_f$hblanc_vert_f$hvert_f$hrouge
    "; } # if } #if } # if return($htmltiers); } #hdcp_liste_tiers sub hdcp_resume { # On fait un résumé des handicaps avec une ligne sommaire... local($stuffhtml) = ""; local($avgpointage) = nearest(.01,average(@pointage)); local($avgputts) = nearest(.01,average(@putts)); local($avgalles) = nearest(.01,average(@alles)); local($avgparfig) = nearest(.01,average(@parfig)); local($avgdiffhdcp) = nearest(.01,average(@diffhdcp)); $stuffhtml = "\t"; $stuffhtml .="MOYENNE(S)"; $stuffhtml .="$avgpointage"; $stuffhtml .=" "; $stuffhtml .="$avgdiffhdcp"; #10 #$stuffhtml .=" "; $stuffhtml .="$avgputts"; $stuffhtml .="$avgalles"; $stuffhtml .="$avgparfig"; $stuffhtml .="\n"; return($stuffhtml); } # hdcp_resume sub hdcp_html { # Ce programme tranforme un record de handicap en HTML local($stuffhtml) = ""; local($jalon) = ""; if ($HDCP->{'pointage'} ne '') { push(@pointage,$HDCP->{'pointage'}); } #if if ($HDCP->{'putts'} ne '') { push(@putts,$HDCP->{'putts'}); } #if if ($HDCP->{'fairways'} ne '') { push(@alles,$HDCP->{'fairways'}); } #if if ($HDCP->{'parfigure'} ne '') { push(@parfig,$HDCP->{'parfigure'}); } #if if ($HDCP->{'diffhdcp'} ne '') { push(@diffhdcp,$HDCP->{'diffhdcp'}); } # if #if ($HDCP{'tournoi'} eq 'Y') {$HDCP{'tournoi'} ="T";} else {$HDCP{'tournoi'} ="";} $HDCP->{'tournoi'}='' if ($HDCP->{'tournoi'} eq 'N'); #$jalon = $JALON{$HDCP{'jalon'}}; $HDCP->{'jalon'} = "" if ($JALON{$HDCP->{'jalon'}}); $stuffhtml .=" $i. $HDCP->{'date_partie'}"; $stuffhtml .="$HDCP->{'tournoi'}"; $stuffhtml .="$HDCP->{'nom_club'}"; $stuffhtml .="$HDCP->{'nom_terrain'}"; $stuffhtml .="$HDCP->{'jalon'}"; #$stuffhtml .=""; $stuffhtml .="$HDCP->{'pointage'}"; $stuffhtml .="$HDCP->{'evaluation'}"; $stuffhtml .="$HDCP->{'slope'}"; $stuffhtml .="$HDCP->{'diffhdcp'}"; #$stuffhtml .="$HDCP->{'categorie'}"; $stuffhtml .="$HDCP->{'putts'}"; $stuffhtml .="$HDCP->{'fairways'}"; $stuffhtml .="$HDCP->{'parfigure'}"; $stuffhtml ="\t>".$stuffhtml."\n"; return($stuffhtml); } # hdcp_html sub init_url { # On initialise ici les URL de login et de login d'erreur selon s'il s'agit du mode kiosque ou non. if ($kiosque eq 'oui') { # Nous sommes dans le mode kiosque (on ne montre pas les menus déroulants... $url= '/handicap/klogin.shtml'; $urlloginerreur='/handicap/kloginerreur.shtml'; } # if else { # Mode Web normal $url= '/handicap/login.shtml'; $urlloginerreur='/handicap/loginerreur.shtml'; } # else } #init_url sub init_html { # On initialise les variables ici... $entete = &lire_fichier("$racineweb/handicap/entete.html"); $pied = "\t\n\t\n\n\n"; #.&lire_fichier("$racineweb/refontepied.html"); $init_contenu = "\n\n\n
    \n
    $titre
    \n"; $formulaire = &lire_fichier("$racineweb/handicap/formulaire.html"); if ($kiosque eq 'oui') { # Nous sommes dans le mode kiosque (on ne montre pas les menus déroulants... $banniere = &lire_fichier("$racineweb/handicap/krefonteentete.html"); $ariane = ''; $formulaire =~s//oui/; # On met la variable du kiosque à oui. } # if else { # Mode Web normal #$banniere = &lire_fichier("$racineweb/refonteentete.html"); #$ariane = &lire_fichier("$racineweb/handicap/ariane.html"); } # else } # init_html ### ### Fonctions très spéciales qui n'ont servies qu'une fois... ### sub doublon { local($stuff)=''; $requete = "select distinct(id_membre) from hdcp_partie"; $sth = $dbh->query($requete); while (local($id)=$sth->fetchrow()) { $requete = "select id_membre, id_partie, date_partie, pointage from hdcp_partie where id_membre='$id' order by date_partie desc"; $nth = $dbh->query($requete); my %PARTIE = (); my %DATEPARTIE = (); while (local($idmembre,$idpartie,$datepartie,$pointage) = $nth->fetchrow()) { if ($PARTIE{$datepartie} eq $pointage) { # Il y a déjà une partie, c'est un doublon. On l'enregistre $stuff .= "
  • DOUBLON JOUEUR $id :: PARTIE $idpartie :: $datepartie $pointage"; $requete = "delete from hdcp_partie where id_partie='$idpartie'"; $dbh->query($requete); $doub++; } # if else { $PARTIE{$datepartie} = $pointage; $DATEPARTIE{$idpartie} = $datepartie; } } # while } # yeah # On passe à travers tous les membres... $stuff.="
  • $doub parties supprimées"; return($stuff); } # doublon