[(#REM)
/*******************************************************************************\
 * BIODIV, plugin et squelette pour SPIP - https://www.spip.net/               *
 *         dédié à la gestion d'observations naturalistes                      *
 *                                                                             *
 *         Copyright (C) 2008-2025 Renaud LAURETTE                             *
 *                                                                             *
 * BIODIV a été développé initialement pour le projet Biodiv.Balma de l'APCVEB *
 * (Association de Protection du Cadre de Vie et de l'Environnement balmanais) * 
 *     voir Biodiv.Balma : https://balma.biodiv.fr/                            *
 *     voir APCVEB : https://apcveb.fr/                                        *
 *                                                                             *
 *  Ce programme est un logiciel libre distribué sous licence GNU/GPL.         *
 *  Pour plus de détails voir les fichiers COPYING.txt et LICENCE-BIODIV.md    *
\*******************************************************************************/
]
<?php

/*
 * Recoit un tableau data dont les index sont des noms d'especes par mois
 * sous la forme "<nom>::<mois>" (eg. "Blaireau::01")
 * et dont les valeurs sont des entiers positifs (des comptages). 
 * Le script revoie un SVG dont la largeur fait 100% et qui s'adapte en hauteur.
 *
 * Parametres : 
 *		ENV{data} : le tableau
 *		ENV{titre} : le titre du graphique
 *		ENV{couleur} : la couleur de remplissage des barres
 */
    $i=0; $data = array(
     <BOUCLE_db(POUR) {tableau #ENV{data}} {","}> 
       "#CLE" => #VALEUR
     </BOUCLE_db>
     );
     
    if(count($data) == 0) {
        echo "<svg width='100%' height='auto' viewBox='-10 0 140 20'>\n"; 
        echo " <text x='50' y='60' transform='scale(0.2 0.2)' fill='black'>[(#ENV{titre}) - ]Aucune donnée.</text>\n";
        echo "</svg>\n";
    } else {
    
    $amin = $amax = $vmin = $vmax = $count =0;
     
    	// Dimensionnement des axes
        $grid = array(); $valeurs = array();
        $imois = array('J','F','M','A','M','J','J','A','S','O','N','D');
        $vleg = "";
        
        $especes = []; $count=0; 
        foreach($data as $key => $value) {
          list($espece,$mois) = explode("::",$key);
          $especes[$espece][$mois] = $value;
          $valeurs[$espece] = array_key_exists($espece,$valeurs) ? $valeurs[$espece]+$value : $value;
          $count += $value;
        }
        
        krsort($especes);
        $da = count($especes);
    	$height = $da*10;
    	$yview = $height + 20;

    	// Graphique des especes-mois
    	echo "<svg width='100%' height='auto' viewBox='-10 -2 260 $yview'>\n";
        echo " <g transform='scale(1 -1) translate(5 -$height)' style='stroke:black; fill:white; stroke-width:0.5;'>\n";


        
        
        $i=0;
        foreach($especes as $espece => $values) {
          	// Initialisation des mois à white - 12 mois
          	for($j=0; $j<12; $j++) { $grid[$i][$j] = 'white'; }
          	$py = $i*50 +20; $ev = $valeurs[$espece];
          	$vleg .= "<text x='620' y='-$py' transform='scale(0.2 -0.2)' fill='black'>$espece ($ev)</text>\n";
          	$i++;
        }
        $vleg .= "<text x='0' y='75' transform='scale(0.2 -0.2)' fill='black'>[(#ENV{titre}) - ]Total: $count observation(s)</text>\n";
    
        $index = 0;
        foreach($especes as $espece => $values) {         
        	foreach($values as $when => $value) {
          		$mois = intval($when) -1;
          		if($value==0) $color = 'white';
            		elseif($value==1) $color = '#93CA88';
            		elseif($value==2) $color = '#63A555';
            		elseif($value <5) $color = '#428733';
            		elseif($value <10) $color = '#276B19';
            		else $color = '#104805'; 
            	$grid[$index][$mois] = $color;
            }
            $index++;
        }
                
        for($j=0; $j<12; $j++) {
            $px = $j * 10;
            for($i=0; $i < $index; $i++) {
            	$py = $i * 10;
            	echo "   <rect x='$px' y='$py' width='10' height='10' fill='".$grid[$i][$j]."'/>\n";
            }
            $tx = $j*50  + 20;
            echo "<text x='$tx' y='25' transform='scale(0.2 -0.2)' fill='black'>". $imois[$j] ."</text>\n";
        }
        
        echo $vleg;
        echo "</g>";
        echo "</svg>\n"; 
    }
?>