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("%s %s | \n",$this->firstname,$this->name);
printf("nom | %s |
\n",$this->name);
printf("prenom | %s |
\n",$this->firstname);
printf("date de naissance | %s |
\n",$this->ddn);
printf("lieu de naissance | %s |
\n",$this->ldn);
printf("
\n");
printf("\n");
printf("conjoint |
\n");
$i=0;
foreach($this->spouses as $spouse)
{
$i++;
printf("%d | %s |
\n",$i,$persons[$spouse]->celluleNameFirstNameDdn());
}
printf("ses parents |
\n");
$i=0;
foreach($this->parents as $parent)
{
$i++;
printf("%d | %s |
\n",$i,$persons[$parent]->celluleNameFirstNameDdn());
}
printf("ses enfants |
\n");
$i=0;
foreach($this->childrens as $children)
{
$i++;
printf("%d | %s |
\n",$i,$persons[$children]->celluleNameFirstNameDdn());
}
printf("
\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");
}
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("%s | %s | %s | %s | %s | %s | %s | %s | %s |
\n",
"id","nom","prénom","ddn","ldn","sexe","parent","conjoint","enfants");
foreach($persons as $person)
{
/*
printf("%s | %s%s | %s | %s | %s | %s |
\n",
$person->id,$person->celluleNameFirstNameDdn(),
$person->ldn,$person->sex,
$person->parents,$person->spouses,$person->childrens);
*/
printf("%s | %s%s | %s | %s | %s | %s |
\n",
$person->id,$person->celluleNameFirstNameDdn(),
$person->ldn,$person->sex,
personnesHtml($person->parents),
personnesHtml($person->spouses),
personnesHtml($person->childrens)
);
}
printf("
\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("%d | %s
\n",$id,$persons[$p]->celluleNameFirstNameDdn());
$id++;
}
printf("
\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