Ajout traitement des graphiques, issue #0000187

This commit is contained in:
Michael RICOIS 2010-03-08 16:01:16 +00:00
parent b7351fda4c
commit 3c7b46e161
2 changed files with 212 additions and 11 deletions

View File

@ -0,0 +1,142 @@
<?php
function commentaires_graph($id, $titre, $ratios = array() ){
$pattern = '/(Rs?)\[(.*)]#(.{1})/';
$data = array();
$data['x'] = commentaires_graph_x();
foreach($ratios as $ratio){
FB::log($ratio, 'ratio');
if( preg_match($pattern, $ratio, $matches) ){
$typeRatio = $matches[1];
$numRatio = $matches[2];
$typeElement = $matches[3];
$titreRatio = commentaires_graph_lib($numRatio);
switch($typeRatio){
case 'R' : $titreRatio.= ' - Entreprise'; break;
case 'Rs' : $titreRatio.= ' - Secteur'; break;
}
$data['y'][] = array(
'titre' => $titreRatio,
'data' => commentaires_graph_y($typeRatio, $numRatio),
'style' => $typeElement,
);
}
}
$output = commentaires_graph_xy($id, $titre, $data);
return $output;
}
function commentaires_graph_lib($numRatio){
global $ratiosInfos;
return htmlspecialchars_decode(
$ratiosInfos['r'.$numRatio]['libelle'],
ENT_QUOTES);
}
function commentaires_graph_x(){
global $bilansInfos;
$output = array();
foreach($bilansInfos as $bilan){
$output[] = $bilan['dateCloture'];
}
return $output;
}
function commentaires_graph_y($typeRatio, $numRatio){
global $ratiosEntrep, $ratiosSecteur;
FB::log($typeRatio, 'typeRatio');
switch($typeRatio){
case 'R' : $tabRatio = $ratiosEntrep; break;
case 'Rs' : $tabRatio = $ratiosSecteur; break;
}
$output = array();
foreach($tabRatio as $key => $val){
FB::log($val['r'.$numRatio], 'val');
$output[$key] = $val['r'.$numRatio];
}
return $output;
}
function commentaires_graph_xy($id, $titre, $data){
require_once 'phpchartdir/phpchartdir.php';
$path = PATH_SITE.'/cache/imgcache/';
$file = $id.'.png';
if(count($data)<=1){
$output = 0;
}else{
//Tri des données
foreach($data['y'] as $yKey => $y){
$i = 0;
foreach($y['data'] as $val){
$dataTri[$data['x'][$i]] = $val;
$i++;
}
ksort($dataTri);
$data['y'][$yKey]['data'] = array_values($dataTri);
}
sort($data['x']);
//Génération du graphique
$c = new XYChart(500, 350);
$c->addTitle($titre, 'times.ttf', 10);
$c->yAxis->setTitle('EUR');
$c->yAxis->setWidth(2);
$c->xAxis->setTitle('Années');
$c->xAxis->setWidth(2);
$legendObj = $c->addLegend2(25, 25, -2, "times.ttf", 9);
$legendObj->setBackground(Transparent, Transparent);
$c->setPlotArea(50, 90, 280, 200);
//Génération des labels
$labelsX = array();
foreach($data['x'] as $x){
$annee = substr($x, 0, 4);
$mois = substr($x, 4, 2);
$jour = substr($x, 6, 2);
$labelsX[] = $annee;
}
//Détection multi-bar
$graphStyleMH = false;
$precStyle = '';
foreach($data['y'] as $ydata){
if($ydata['style']=='H' && $precStyle == 'H'){
$graphStyleMH = true;
}
$precStyle = $ydata['style'];
}
//Affichage standard
if(!$graphStyleMH){
foreach($data['y'] as $ydata){
switch($ydata['style']){
case 'L':
$lineLayer = $c->addLineLayer(
$ydata['data'], -1, $ydata['titre']);
$lineLayer->setLineWidth(2);
break;
case 'H':
$c->addBarLayer(
$ydata['data'], -1, $ydata['titre']);
break;
}
}
//Affichage multibar
}else{
$layer = $c->addBarLayer2(Side);
$color = array(0xff8080, 0x80ff80);
$i = 0;
foreach($data['y'] as $ydata){
FB::log($ydata['data'], 'ydata');
$layer->addDataSet($ydata['data'], $color[$i], $ydata['titre']);
$i++;
}
}
$c->xAxis->setLabels($labelsX);
if( $c->makeChart($path.$file) === true ){
$output = $file;
}
else{
$output = false;
}
}
return $output;
}

View File

@ -51,12 +51,11 @@ $niveau = isset($_REQUEST['niveau']) ? $_REQUEST['niveau'] : '';
}
#commentaires table td, #commentaires table th {
padding:2px;
border:1px solid;
}
#commentaires table {
color:gray;
color:grey;
border-collapse:collapse;
margin:5px 0;
width:100%;
@ -78,7 +77,7 @@ $niveau = isset($_REQUEST['niveau']) ? $_REQUEST['niveau'] : '';
}
#commentaires table tr.VERT {
background:#3c0;
background:#00FF00;
color:#000000;
}
@ -119,6 +118,7 @@ function dRow($lib, $data, $title = '')
$html.= '</tr>'."\n";
return $html;
}
/*
?>
<h1>RAPPORT DE SYNTHESE</h1>
@ -295,6 +295,7 @@ if($element!==false){ echo dRow($element['lib'], $element['data'], $element['tit
require_once 'mappy/mappy.php';
$ville = ' '.trim(preg_replace('/([0-9]|ARRONDISSEMENT|_)/i',' ',$etab['Ville'])).' ';
$ville = trim(strtr($ville, array(' EME '=>'', ' ER '=>'')));
$firephp->log($ville, 'ville');
if ( hasPref('mappy') && in_array(strtoupper($ville), $tabVilleMappy) )
{
$rue = trim( strtr(
@ -347,7 +348,7 @@ if ( hasPref('mappy') && in_array(strtoupper($ville), $tabVilleMappy) )
//News
if (preg_match('/\bNEWS\b/i', $_SESSION['tabInfo']['pref']))
{
/* Information presse 15 Aug 2007 09:21:49 GMT - */
// Information presse 15 Aug 2007 09:21:49 GMT
require_once ('XML/RSS.php');
$rss=&new XML_RSS('http://news.google.fr/news?hl=fr&ned=fr&q='.urlencode('"'.$etab['Nom'].'"').'&output=rss');
$rss->parse();
@ -381,6 +382,7 @@ if (preg_match('/\bNEWS\b/i', $_SESSION['tabInfo']['pref']))
?>
</table>
<?php
*/
//=> FIN BLOC IDENTITE
//=> BLOC ANNONCES
@ -415,6 +417,7 @@ if ($siren != $_SESSION['tabInfo']['entrep']['siren']) {
$raisonSociale = $etab['Nom'];
} else
$raisonSociale = $_SESSION['tabInfo']['entrep']['raisonSociale'];
/*
?>
<h1 class="titre page">ANNONCES L&Eacute;GALES</h1>
<?php
@ -435,7 +438,7 @@ if (count($annonces)>0)
$annoncesBodacc[] = $ann;
}
}
/** Affichage de la liste des annonces **/
// Affichage de la liste des annonces
//Affiche annonces Bodacc
if (count($annoncesBodacc)>0)
{
@ -569,7 +572,7 @@ if (count($annonces)>0)
}
else
{
/** Aucune annonce bodacc pour cette entreprise **/
// Aucune annonce bodacc pour cette entreprise
?>
<h2>Evénements légaux</h2>
<table>
@ -583,7 +586,7 @@ else
</tr>
</table>
<?php
}
}*/
//=> FIN BLOC ANNONCES
//=> BLOC DIRIGEANTS
@ -594,6 +597,7 @@ require_once 'cache/cache.php';
require_once 'scoresws/scoresws.php';
$dirs = scoresws_dirigeants($siret, $siren, $idEntreprise);
/*
?>
<h1 class="page">DIRIGEANTS</h1>
<h2>Liste des dirigeants actifs</h2>
@ -661,6 +665,7 @@ $dirs = scoresws_dirigeants($siret, $siren, $idEntreprise);
</tr>
</table>
<?php
*/
//=> FIN BLOC DIRIGEANTS
//=> BLOC LIENS
@ -683,16 +688,24 @@ $ratiosSecteur = $result['ratiosSecteur'];
$dataActif = $result['dataActif'];
$dataPassif = $result['dataPassif'];
$dataSIG = $result['dataSIG'];
FB::log($bilansInfos, 'bilansInfos');
FB::log($ratiosSecteur, 'ratiosSecteur');
list($typeBilan, $numBilan) = countBilans($bilansInfos, $typeBilan);
$numBilanN = $numBilan['N'];
$numBilanC = $numBilan['C'];
$numBilanB = $numBilan['B'];
$numBilanA = $numBilan['A'];
list($bilansInfos, $ratiosEntrep, $ratiosEntrepEvol, $ratiosSecteur, $dataActif, $dataPassif, $dataSIG) = filtreTypeBilans($bilansInfos, $ratiosEntrep, $ratiosEntrepEvol, $ratiosSecteur, $dataActif, $dataPassif, $dataSIG, $typeBilan);
list($bilansInfos, $ratiosEntrep, $ratiosEntrepEvol,
$ratiosSecteur, $dataActif, $dataPassif, $dataSIG) =
filtreTypeBilans($bilansInfos, $ratiosEntrep, $ratiosEntrepEvol,
$ratiosSecteur, $dataActif, $dataPassif, $dataSIG, $typeBilan);
$nbrAnnees = count($bilansInfos)-1;
$data = synthese_datagraph($bilansInfos, $ratiosEntrep, $ratio);
$dataGraph = $data['graph'];
$dataEvol = $data['evol'];
/*
?>
<h1 class="page">SYNTH&Egrave;SE</h1>
@ -782,9 +795,11 @@ if(count($tabRatio)==1){ ?>
<br/><br/>
<?php
}
*/
//=> FIN BLOC SYNTHESE
//=> BLOC BILANS
/*
?>
<script type="text/javascript">
$(document).ready(function()
@ -1539,6 +1554,7 @@ else
</table> 
<?php
}
*/
//=> FIN BLOC BILANS
//=> BLOC RATIOS
@ -1571,6 +1587,7 @@ else
?>
<h1 class="titre page">RATIOS</h1>
<?php
$firephp->log($_SESSION, 'SESSION');
if (count($bilansInfos)==0)
{
?>
@ -1587,7 +1604,7 @@ else
<td width="30">&nbsp;</td>
<td width="200" class="StyleInfoLib">Secteur d'activité :</td>
<td width="340" class="StyleInfoData">
<?php print $_SESSION['tabInfo']['entrep']['nafEn']; ?> - <?php print $_SESSION['tabInfo']['entrep']['nafEnLib']; ?>
<?=$_SESSION['tabInfo']['entrep']['nafEn']?> - <?=$_SESSION['tabInfo']['entrep']['nafEnLib']?>
</td>
</tr>
<?php
@ -1727,6 +1744,8 @@ $tabCommentaires = $etab['tabCommentaires'];
<br/>
<div class="blockh2" id="commentaires">
<?php
FB::log($ratiosSecteur, 'ratiosSecteur');
require_once 'commentaires/commentaires.php';
if(count($tabCommentaires)>0)
{
$ligne = true;
@ -1735,13 +1754,53 @@ if(count($tabCommentaires)>0)
$output = '';
if(!is_array($commentaires) && !empty($commentaires))
{
$output.= html_entity_decode($commentaires,ENT_COMPAT,'utf-8')."\n";
if ( preg_match('/<(table)/i', $output) ){
//Traitement préalable des lignes
$commentaires = html_entity_decode(
$commentaires,
ENT_COMPAT,
'utf-8');
//Traitement des graphiques
$pattern = '/\[GRAPHIQUE id=(.*?) titre=\'(.*?)\',(.*),(.*)]/';
if( preg_match($pattern, $commentaires, $matches) ){
//Initialisation des éléments
FB::log($matches[0],'graphique');
$image_id = $matches[1];
$graph_titre = $matches[2];
$ratio1 = $matches[3];
$ratio2 = $matches[4];
//Génération du graphique
if (($siret*1)==0 || ($siren*1)<100){
$id = 'gcomment-'.$idEntreprise.'-'.$image_id;
}else{
$id = 'gcomment-'.$siret.'-'.$image_id;
}
$image_file = commentaires_graph($id, $graph_titre,
array($ratio1, $ratio2));
//Le fichier image existe
if( file_exists(PATH_SITE.'/cache/imgcache/'.$image_file) ){
$commentaires = str_replace(
$matches[0],
'<img src="./imgcache/'.$image_file.'" />',
$commentaires);
}else{
$commentaires = str_replace(
$matches[0],
'Erreur génération graphique',
$commentaires);
}
}
$output.= $commentaires."\n";
//Détection des début et fin de tableau
if ( preg_match('/<(table)/i', $commentaires) ){
$ligne = false;
}
if ( preg_match('/<\/(table)>/i', $commentaires) ){
$ligne = true;
}
//Nouvelle ligne
if($ligne){ $output.= '<br/>'; }
echo $output;
}