id=$i; $this->firstname=$f; $this->name=$n; $this->sex=$s; $this->ddn=$d; $this->ldn=$l; $this->parents=$p; $this->spouses=$o; $this->childrens=$c; } function descendance($pre,$post,&$arg,$level) { global $persons; $isLeaf=count($this->childrens)==0; $pre($this,$arg,$level,$isLeaf); foreach($this->childrens as $children) { $persons[$children]->descendance($pre,$post,$arg,$level+1); } $post($this,$arg,$level,$isLeaf); } function html() { global $persons; printf("\n"); printf("\n",$this->firstname,$this->name); printf("\n",$this->name); printf("\n",$this->firstname); printf("\n",$this->ddn); printf("\n",$this->ldn); printf("
%s %s
nom%s
prenom%s
date de naissance%s
lieu de naissance%s
\n"); printf("\n"); printf("\n"); $i=0; foreach($this->spouses as $spouse) { $i++; printf("\n",$i,$persons[$spouse]->celluleNameFirstNameDdn()); } printf("\n"); $i=0; foreach($this->parents as $parent) { $i++; printf("\n",$i,$persons[$parent]->celluleNameFirstNameDdn()); } printf("\n"); $i=0; foreach($this->childrens as $children) { $i++; printf("\n",$i,$persons[$children]->celluleNameFirstNameDdn()); } printf("
conjoint
%d%s
ses parents
%d%s
ses enfants
%d%s
\n"); $this->imageDescendance(3,640,256); } function imageDescendance($level,$w,$h) { global $persons; if($w>4096) $w=4096; if($h>2048) $h=2048; printf("
\n",$this->id,$level,$w,$h); $args=positionRecur($this->id,$level,$w,$h); $dx=$args->dx/2; $dy=$args->dy/2; printf("\n"); foreach($args->founds as $id) { $p=$persons[$id]; printf( "\"%s\"\n", $args->xs[$p->id]-$dx,$args->ys[$p->id]-$dy, $args->xs[$p->id]+$dx,$args->ys[$p->id]+$dy, "?cmd=person&id=" . $p->id, "" . $p->id, $p->firstname . " " . $p->name . " " . $p->ddn ); } printf("\n"); } function celluleNameFirstNameDdn() { $a="?cmd=person&id=" . $this->id; return sprintf("%s%s%s", $a,$this->firstname, $a,$this->name, $this->ddn ); } function idHtml() { $a="?cmd=person&id=" . $this->id; return sprintf("%s", $a,$this->id ); } }; function personnesHtml($ps) { global $persons; $text=" "; foreach($ps as $p) { $text= $text . " " . $persons[$p]->idHtml() . " "; } return $text; } function parseList($l) { $a=Array(); if(strlen($l)) { $ls=explode(",",$l); foreach($ls as $s) { $a[]=(int)$s; } } //uasort($a, "compareDdn"); return $a; } function parse() { global $persons; $persons=Array(); $f = fopen("base.txt", "r"); while (!feof($f)) { $line = fgets($f, 4096); if ( preg_match("/\\/\\/.*/",$line) ) continue; if(preg_match("/personne\\(" . "([[:alnum:]]+)[[:space:]]*," . "\"([^\"]*)\"[[:space:]]*," . "\"([^\"]*)\"[[:space:]]*," . "[[:space:]]*([-[:alnum:]]+)[[:space:]]*," . "\"([^\"]*)\"[[:space:]]*," . "\"([^\"]*)\"[[:space:]]*," . "\\[(.*)\\][[:space:]]*," . "\\[(.*)\\][[:space:]]*," . "\\[(.*)\\][[:space:]]*" . "(.*)\\)/", $line,$regs )) { //$id,$prenom,$nom,$s,$ddn,$ldn,$parents,$conjoints,$enfants $p=new person($regs[1],$regs[2],$regs[3],$regs[4],$regs[5],$regs[6],parseList($regs[7]),parseList($regs[8]),parseList($regs[9])); $persons[$regs[1]]=$p; } } fclose($f); // echo "<" . $persons[0]->id . ">"; } function getPersons() { global $persons; if (isset($_SESSION['persons'])) { $persons=$_SESSION['persons']; return; } parse(); $_SESSION['persons']=$persons; } function reparse() { global $persons; parse(); $_SESSION['persons']=$persons; echo "done"; } function tous() { header("Content-type: text/html; charset=utf-8"); global $persons; echo("retour
"); printf("\n"); printf("\n", "id","nom","prénom","ddn","ldn","sexe","parent","conjoint","enfants"); foreach($persons as $person) { /* printf("%s\n", $person->id,$person->celluleNameFirstNameDdn(), $person->ldn,$person->sex, $person->parents,$person->spouses,$person->childrens); */ printf("%s\n", $person->id,$person->celluleNameFirstNameDdn(), $person->ldn,$person->sex, personnesHtml($person->parents), personnesHtml($person->spouses), personnesHtml($person->childrens) ); } printf("
%s%s%s%s%s%s%s%s%s
%s%s%s%s%s%s
%s%s%s%s%s%s
\n"); } function person($id) { header("Content-type: text/html; charset=utf-8"); global $persons; printf("retour
"); $persons[$id]->html(); } function bigImage($w,$h,$id) { global $persons; printf("retour
"); $persons[$id]->imageDescendance(7,$w,$h); } function odnPre($p,&$args,$level,$isLeaf) { if($args->level==$level) $args->founds[]=$p->id; } function odnPost($p,&$args,$level,$isLeaf) { } function compareDdn($l,$r) { global $persons; sscanf($persons[$l]->ddn,"%d/%d/%d",$ll[2],$ll[1],$ll[0]); sscanf($persons[$r]->ddn,"%d/%d/%d",$lr[2],$lr[1],$lr[0]); for($i=0;$i<2;$i++) { if( $ll[$i]==$lr[$i] ) continue; return $ll[$i]>$lr[$i] ? +1:-1; } return 0; } function ordre_de_naissance($level,$id) { global $persons; class Args { var $level; var $found; }; $args=new Args(); $args->level=$level; $args->founds=Array(); $persons[$id]->descendance("odnPre","odnPost",$args,0); if(0==count($args->founds)) { header('HTTP/1.0 404 Not Found'); header("Content-type: text/html; charset=utf-8");?> pas trouvé Pas trouvé ! founds, "compareDdn"); printf("ordre de naissance "); if($level) printf("<< ",$level-1,$id); else printf("<<"); printf(" %d ",$level); printf(">>
",$level+1,$id); switch(count($args->founds)) { case 0: printf("y a plus
"); break; case 1: printf("il est tout seul
"); break; default: printf("ils sont %d
",count($args->founds)); break; } printf("\n"); $id=0; foreach($args->founds as $p) { printf("%s\n",$id,$persons[$p]->celluleNameFirstNameDdn()); $id++; } printf("
%d
\n"); } function imageExample() { header("Content-type: image/jpg"); if (!isset($string)) { $string = "Missing data"; } $font = 4; $width = ImageFontWidth($font) * strlen($string); $height = ImageFontHeight($font); $im = @imagecreate ($width,$height); //white background $background_color = imagecolorallocate($im, 255, 255, 255); //black text $text_color = imagecolorallocate($im, 0, 0, 0); imagestring ($im, $font, 0, 0, $string, $text_color); imagejpeg ($im); } function positionPre($p,&$args,$level,$isLeaf) { global $persons; if($level<$args->count) { $args->founds[]=$p->id; $args->ps[$p->id]=Array(); $args->xs[$p->id]= $args->cumul; $args->ys[$p->id]= $level; if( ($level==$args->count-1) || $isLeaf) $args->cumul++; } } function positionPost($p,&$args,$level,$isLeaf) { if($level<$args->count) { $args->xs[$p->id]+=$args->cumul; $args->ys[$p->id]*=$args->dy; $args->xs[$p->id]*=$args->dx/2; } } function positionRecur($id,$level,$w,$h) { global $persons; $count=$level; class Args { var $founds; var $count; var $cumul; var $dx; var $dy; var $ps; var $xs; var $ys; }; $args=new Args(); $args->count=$count; $args->cumul=0; $args->founds=Array(); $args->ws=Array(); $args->xs=Array(); $args->ys=Array(); $args->dx=8; $args->dy=32; $args->width = $w; $args->height = $h; foreach($persons as $p) { $args->ps[$p->id]=0; $args->xs[$p->id]=0; $args->ys[$p->id]=0; } $persons[$id]->descendance("positionPre","positionPost",$args,0); foreach($args->founds as $p) { $p=$persons[$p]; foreach($p->parents as $pid) { if(is_array($args->ps[$pid])) { $args->ps[$p->id][]=$pid; } } } foreach($args->founds as $id) { $p=$persons[$id]; $args->xs[$id]*=$args->width; $args->xs[$id]/=$args->cumul*$args->dx; $args->ys[$id]+=$args->dy/2; $args->ys[$id]*=$args->height; $args->ys[$id]/=$level*$args->dy; } return $args; } function image($id,$level,$w,$h) { global $persons; header("Content-type: image/png"); $args=positionRecur($id,$level,$w,$h); $im = @imagecreate ($args->width,$args->height); $white = imagecolorallocate($im, 255, 255, 255); $black = imagecolorallocate($im, 0, 0, 0); $red = imagecolorallocate($im, 255, 0, 0); $pink = imagecolorallocate($im, 255, 128, 128); $blue = imagecolorallocate($im, 128, 128, 255); $dx=$args->dx; //$dy=$args->dy/2; foreach($args->founds as $id) { $p=$persons[$id]; foreach($args->ps[$id] as $pid) { imageline($im, $args->xs[$pid],$args->ys[$pid], $args->xs[ $id],$args->ys[ $id], $black ); } imagefilledellipse($im, $args->xs[$id],$args->ys[$id], $dx,$dx, ($p->sex== 1) ? $blue : (($p->sex==2) ? $pink : $black) ); } imagepng($im); imagedestroy($im); } function main() { header("Content-type: text/html; charset=utf-8"); ?>

Généalogie

base de donnée

les Pouteau

l'ancêtre
ordre de naissance
j'ai un grand écran (1280*1024)

les Larmoire

l'ancêtre
ordre de naissance
j'ai un grand écran (1280*1024)

tous le monde
le source php

des nouveautés, des commentaires ? Mon e-mail est <monprenom>.<monnom>@free.fr