Subversion Repositories Applications.projet

Rev

Rev 283 | Rev 293 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 283 Rev 284
1
<?php
1
<?php
2
/*vim: set expandtab tabstop=4 shiftwidth=4: */ 
2
/*vim: set expandtab tabstop=4 shiftwidth=4: */ 
3
// +------------------------------------------------------------------------------------------------------+
3
// +------------------------------------------------------------------------------------------------------+
4
// | PHP version 4.1                                                                                      |
4
// | PHP version 4.1                                                                                      |
5
// +------------------------------------------------------------------------------------------------------+
5
// +------------------------------------------------------------------------------------------------------+
6
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org)                                         |
6
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org)                                         |
7
// +------------------------------------------------------------------------------------------------------+
7
// +------------------------------------------------------------------------------------------------------+
8
// | This library is free software; you can redistribute it and/or                                        |
8
// | This library is free software; you can redistribute it and/or                                        |
9
// | modify it under the terms of the GNU General Public                                                  |
9
// | modify it under the terms of the GNU General Public                                                  |
10
// | License as published by the Free Software Foundation; either                                         |
10
// | License as published by the Free Software Foundation; either                                         |
11
// | version 2.1 of the License, or (at your option) any later version.                                   |
11
// | version 2.1 of the License, or (at your option) any later version.                                   |
12
// |                                                                                                      |
12
// |                                                                                                      |
13
// | This library is distributed in the hope that it will be useful,                                      |
13
// | This library is distributed in the hope that it will be useful,                                      |
14
// | but WITHOUT ANY WARRANTY; without even the implied warranty of                                       |
14
// | but WITHOUT ANY WARRANTY; without even the implied warranty of                                       |
15
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU                                    |
15
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU                                    |
16
// | General Public License for more details.                                                             |
16
// | General Public License for more details.                                                             |
17
// |                                                                                                      |
17
// |                                                                                                      |
18
// | You should have received a copy of the GNU General Public                                            |
18
// | You should have received a copy of the GNU General Public                                            |
19
// | License along with this library; if not, write to the Free Software                                  |
19
// | License along with this library; if not, write to the Free Software                                  |
20
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                            |
20
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                            |
21
// +------------------------------------------------------------------------------------------------------+
21
// +------------------------------------------------------------------------------------------------------+
22
// CVS : $Id: projet_statistiques.php,v 1.1 2008-03-27 09:15:36 j_grillot Exp $
22
// CVS : $Id: projet_statistiques.php,v 1.2 2008-03-28 08:19:07 j_grillot Exp $
23
/**
23
/**
24
* Application projet
24
* Application projet
25
*
25
*
26
* Script pour calculer les statistiques
26
* Script pour calculer les statistiques
27
*
27
*
28
*@package projet
28
*@package projet
29
//Auteur original :
29
//Auteur original :
30
*@author        Alexandre Granier <alexandre@tela-botanica.org>
30
*@author        Alexandre Granier <alexandre@tela-botanica.org>
31
//Autres auteurs :
31
//Autres auteurs :
32
*@author        Julien Grillot <julien.grillot@gmail.com>
32
*@author        Julien Grillot <julien.grillot@gmail.com>
33
*@copyright     Tela-Botanica 2000-2005
33
*@copyright     Tela-Botanica 2000-2005
34
*@version       $Revision: 1.1 $
34
*@version       $Revision: 1.2 $
35
// +------------------------------------------------------------------------------------------------------+
35
// +------------------------------------------------------------------------------------------------------+
36
*/
36
*/
37
 
37
 
38
// +------------------------------------------------------------------------------------------------------+
38
// +------------------------------------------------------------------------------------------------------+
39
// |                                            ENTETE du PROGRAMME                                       |
39
// |                                            ENTETE du PROGRAMME                                       |
40
// +------------------------------------------------------------------------------------------------------+
40
// +------------------------------------------------------------------------------------------------------+
41
 
41
 
42
 
42
 
43
include_once PROJET_CHEMIN_APPLI.'classes/ezmlmAccessObject.class.php';
43
include_once PROJET_CHEMIN_APPLI.'classes/ezmlmAccessObject.class.php';
44
include_once PROJET_CHEMIN_BIBLIOTHEQUE_API.'pear/XML/RSS.php';
44
include_once PROJET_CHEMIN_BIBLIOTHEQUE_API.'pear/XML/RSS.php';
45
 
45
 
46
// Ne pas changer : les groupes Yahoo se basent toujours sur la semaine
46
// Ne pas changer : les groupes Yahoo se basent toujours sur la semaine
47
define("NB_SEC_INSERT", 7*24*3600);
47
define("NB_SEC_INSERT", 7*24*3600);
48
define("NB_SEC_UPDATE", 2*3600);
48
define("NB_SEC_UPDATE", 2*3600);
49
define("URL_WIKINI", "http://www.tela-botanica.org/wikini/");
49
define("URL_WIKINI", "http://www.tela-botanica.org/wikini/");
50
 
50
 
51
/**
51
/**
52
 * Retourne le contenu de la page $adresse de facon asynchrone
-
 
53
 * @param string $adresse URL de la page dont le contenu doit etre recupere
-
 
54
 * @param int timeout temps d'attente maximum avant abandon de la recuperation 
-
 
55
 */
-
 
56
function monFileGetContents($adresse, $timeout = 30){
-
 
57
	$url = parse_url($adresse);
-
 
58
	$url['port'] = isset($url['port']) ? $url['port'] : '80';
-
 
59
	$url['scheme'] = isset($url['scheme']) ? strtoupper($url['scheme']) : 'HTTP';
-
 
60
	$fp = fsockopen($url['host'], $url['port'], $errno, $errstr, $timeout);
-
 
61
	if (!$fp) {
-
 
62
		echo "Erreur de socket: $errno - $errstr<br />\n";
-
 
63
		return false;
-
 
64
	} else {
-
 
65
		$header  = 'GET '.$url['path'].' '.$url['scheme']."/1.1\r\n";
-
 
66
	
-
 
67
		$header .= "Host: www.yahoo.com\r\n";
-
 
68
		$header .= "User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1) Gecko/20021204\r\n";
-
 
69
		$header .= "Referer: http://www.yahoo.com/\r\n";
-
 
70
 
-
 
71
		$header .= 'Connection: Close\r\n\r\n';
-
 
72
 
-
 
73
		fputs($fp, $header);
-
 
74
		stream_set_timeout($fp, $timeout);
-
 
75
		while (!feof($fp)) {
-
 
76
			$page .= fread($fp, 262144);
-
 
77
		}
-
 
78
		$stream  = stream_get_meta_data($fp);
-
 
79
		fclose($fp);    
-
 
80
		if ($stream['timed_out']) {
-
 
81
			echo 'Le délai de réponse de la page <b>'.$adresse.'</b> a dépassé le timeout de <b>'.$timeout.'</b> sec.';
-
 
82
			return false;
-
 
83
		}else{
-
 
84
			return $page;
-
 
85
		}
-
 
86
	}
-
 
87
}
-
 
88
 
-
 
89
/**
-
 
90
 * Procedure retrouvant le nombre de contribution, de message et le contenu de la page a partir des informations de la BDD
52
 * Procedure retrouvant le nombre de contribution, de message et le contenu de la page a partir des informations de la BDD
91
 * @param object $ligne resultat d'un fetch row contenant l'url du document a analyser
53
 * @param object $ligne resultat d'un fetch row contenant l'url du document a analyser
92
 * @param int $nombre_contrib recupere le nombre de contributions du projet 
54
 * @param int $nombre_contrib recupere le nombre de contributions du projet 
93
 * @param int $nombre_message recupere le nombre de nouveaux messages du projet
55
 * @param int $nombre_message recupere le nombre de nouveaux messages du projet
94
 * @return false si la fonction echoue lors de la tentative de recuperation des donnees utiles
56
 * @return false si la fonction echoue lors de la tentative de recuperation des donnees utiles
95
 */
57
 */
96
function analyser($ligne, &$nombre_contrib, &$nombre_message) {
58
function analyser($ligne, &$nombre_contrib, &$nombre_message) {
97
	$nombre_contrib='0';
59
	$nombre_contrib='0';
98
	$nombre_msg='0';
60
	$nombre_msg='0';
99
	$r=false;
61
	$r=false;
100
 
62
 
101
	// Recuperation du nbre de message
63
	// Recuperation du nbre de message
102
	$xml_parser = &new ezmlmAccessObject('nombre_messages', $ligne->pl_domaine, $ligne->pl_nom_liste, $GLOBALS['lang']) ;
64
	$xml_parser = &new ezmlmAccessObject('nombre_messages', $ligne->pl_domaine, $ligne->pl_nom_liste, $GLOBALS['lang']) ;
103
	$xml_parser->load();
65
	$xml_parser->load();
104
	
66
	
105
	ob_start();
67
	ob_start();
106
	$xml_parser->parse();
68
	$xml_parser->parse();
107
	$nombre_message = ob_get_contents();
69
	$nombre_message = ob_get_contents();
108
	if(!$nombre_message)$nombre_message='0';
70
	if(!$nombre_message)$nombre_message='0';
109
	ob_end_clean();
71
	ob_end_clean();
110
	
72
	
111
	// Si AGO_A_NOMGRP alors il n'y a pas de flux RSS (groupe Yahoo, cad pas Tela)
73
	// Si AGO_A_NOMGRP alors il n'y a pas de flux RSS (groupe Yahoo, cad pas Tela)
112
	if($ligne->AGO_A_NOMGRP) {
74
	if($ligne->AGO_A_NOMGRP) {
113
		$url='http://fr.groups.yahoo.com/group/'.$ligne->AGO_A_NOMGRP;
75
		$url='http://fr.groups.yahoo.com/group/'.$ligne->AGO_A_NOMGRP;
114
		
76
		
115
		// Recherche du schema retrouvant le nombre de nouveaux message dans la semaine
77
		// Recherche du schema retrouvant le nombre de nouveaux message dans la semaine
116
		$pattern='>([0-9]+)</span> nouveau';
78
		$pattern='>([0-9]+)</span> nouveau';
117
		
79
		
118
		// Quelques soucis avec la version asynchrone
-
 
119
		//$contenu=monFileGetContents($url);
80
		// Quelques soucis avec la version asynchrone (sockopen)
120
		$contenu=file_get_contents($url);
81
		$contenu=file_get_contents($url);
121
		
82
		
122
		$r=($contenu?true:false);
83
		$r=($contenu?true:false);
123
		ereg($pattern, $contenu, $no);
84
		ereg($pattern, $contenu, $no);
124
		$nombre_message=$no[1];
85
		$nombre_message=$no[1];
125
	  
86
	  
126
 
87
 
127
	} else {
88
	} else {
128
		// Parse le flux RSS généré par wikini
89
		// Parse le flux RSS généré par wikini
129
		$rss =& new XML_RSS(URL_WIKINI.$ligne->p_wikini.'/wakka.php?wiki=DerniersChangementsRSS/xml');
90
		$rss =& new XML_RSS(URL_WIKINI.$ligne->p_wikini.'/wakka.php?wiki=DerniersChangementsRSS/xml');
130
		$rss->parse();
91
		$rss->parse();
131
		
92
		
132
		// On va compter le nombre de modification depuis les x derniers jours (voirs constantes)
93
		// On va compter le nombre de modification depuis les x derniers jours (voirs constantes)
133
		foreach ($rss->getItems() as $item) {
94
		foreach ($rss->getItems() as $item) {
134
			// Le script doit être compatiable avec plusieurs formats de date
95
			// Le script doit être compatiable avec plusieurs formats de date
135
			if ($item['pubDate']) {
96
			if ($item['pubDate']) {
136
				if (strtotime($item['pubDate'])>time()-NB_SEC_INSERT) $nombre_contrib++;
97
				if (strtotime($item['pubDate'])>time()-NB_SEC_INSERT) $nombre_contrib++;
137
			
98
			
138
			} else {
99
			} else {
139
				$date = substr($item['title'], strlen($item['title'])-18);
100
				$date = substr($item['title'], strlen($item['title'])-18);
140
				if ($date>date("Y m d - H:i", time()-NB_SEC_INSERT)) $nombre_contrib++;
101
				if ($date>date("Y m d - H:i", time()-NB_SEC_INSERT)) $nombre_contrib++;
141
			}
102
			}
142
		}
103
		}
143
		
104
		
144
		$r=true;
105
		$r=true;
145
		
106
		
146
	}
107
	}
147
	
108
	
148
	return $r;
109
	return $r;
149
}
110
}
150
 
111
 
151
// Pour calculer le temps d'execution du script
112
// Pour calculer le temps d'execution du script
152
$start=microtime(true);
113
$start=microtime(true);
153
 
114
 
154
 
115
 
155
// +------------------------------------------------------------------------------------------------------+
116
// +------------------------------------------------------------------------------------------------------+
156
// |                                            CORPS du PROGRAMME                                       |
117
// |                                            CORPS du PROGRAMME                                       |
157
// +------------------------------------------------------------------------------------------------------+
118
// +------------------------------------------------------------------------------------------------------+
158
 
119
 
159
 
120
 
160
// requete pour recuperer la liste des projets
121
// requete pour recuperer la liste des projets
161
$requete = 'select count(distinct psu_id_utilisateur) as nb_utilisateur, count(distinct pil_id_utilisateur) as nb_utilisateur_liste, count(distinct projet_documents.pd_id) as nb_doc, p_wikini, ' .
122
$requete = 'select count(distinct psu_id_utilisateur) as nb_utilisateur, count(distinct pil_id_utilisateur) as nb_utilisateur_liste, count(distinct projet_documents.pd_id) as nb_doc, p_wikini, ' .
162
		'p_id, p_titre, p_resume, projet_lien_liste.pl_id_liste, pl_domaine,pl_nom_liste,AGO_A_NOMGRP ' .
123
		'p_id, p_titre, p_resume, projet_lien_liste.pl_id_liste, pl_domaine,pl_nom_liste,AGO_A_NOMGRP ' .
163
		'from projet left join projet_lien_liste on p_id=projet_lien_liste.pl_id_projet ' .
124
		'from projet left join projet_lien_liste on p_id=projet_lien_liste.pl_id_projet ' .
164
		'left join projet_liste on projet_lien_liste.pl_id_liste=projet_liste.pl_id_liste ' .
125
		'left join projet_liste on projet_lien_liste.pl_id_liste=projet_liste.pl_id_liste ' .
165
		'left join projet_inscription_liste on (projet_inscription_liste.pil_id_liste=projet_liste.pl_id_liste and pil_date_inscription > date_sub(now(), interval 1 week)) ' .
126
		'left join projet_inscription_liste on (projet_inscription_liste.pil_id_liste=projet_liste.pl_id_liste and pil_date_inscription > date_sub(now(), interval 1 week)) ' .
166
		'left join projet_documents on (p_id=pd_ce_projet and  pd_date_de_mise_a_jour > date_sub(now(), interval 1 week)) ' .
127
		'left join projet_documents on (p_id=pd_ce_projet and  pd_date_de_mise_a_jour > date_sub(now(), interval 1 week)) ' .
167
		'left join projet_statut_utilisateurs on p_id=psu_id_projet ' .
128
		'left join projet_statut_utilisateurs on p_id=psu_id_projet ' .
168
		'left join projet_lien_liste_externe on plle_id_projet=p_id ' .
129
		'left join projet_lien_liste_externe on plle_id_projet=p_id ' .
169
		'left join agora on plle_id_liste=AGO_A_ID ' .
130
		'left join agora on plle_id_liste=AGO_A_ID ' .
170
		'group by p_id order by p_titre' ;
131
		'group by p_id order by p_titre' ;
171
 
132
 
172
$resultat = $this->_db->query($requete) ;
133
$resultat = $this->_db->query($requete) ;
173
if (DB::isError($resultat)) {
134
if (DB::isError($resultat)) {
174
	return ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ;
135
	return ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ;
175
}
136
}
176
$res .= '<h1>Statistiques des projets</h1>';
137
$res .= '<h1>Statistiques des projets</h1>';
177
 
138
 
178
// Un tableau c'est bien mais un beau tableau c'est mieux.
139
// Un tableau c'est bien mais un beau tableau c'est mieux.
179
$res .= '<style type="text/css">';
140
$res .= '<style type="text/css">';
180
$res .= '.stats { border-spacing: 0px; }';
141
$res .= '.stats { border-spacing: 0px; }';
181
$res .= '.stats .stat_nb { text-align: center; }';
142
$res .= '.stats .stat_nb { text-align: center; }';
182
$res .= '.stats th { font-weight: bold; }';
143
$res .= '.stats th { font-weight: bold; }';
183
$res .= '.stats td { border-bottom: 1px #ddd solid; }';
144
$res .= '.stats td { border-bottom: 1px #ddd solid; }';
184
$res .= '.warning { color: #800; font-weight: bold; }';
145
$res .= '.warning { color: #800; font-weight: bold; }';
185
$res .= '</style>';
146
$res .= '</style>';
186
 
147
 
187
$calculs=false;
148
$calculs=false;
188
 
149
 
189
$res .= '<table cellspacing="0" class="stats" style="width: 100%"><tr><th>Nom du projet</th><th>Nom liste</th><th>Inscrits</th><th>Utilisateurs</th><th>Nb msg</th><th>Nb doc</th><th>Nb contrib</th></tr>';
150
$res .= '<table cellspacing="0" class="stats" style="width: 100%"><tr><th>Nom du projet</th><th>Nom liste</th><th>Inscrits</th><th>Utilisateurs</th><th>Nb msg</th><th>Nb doc</th><th>Nb contrib</th></tr>';
190
 
151
 
191
$nombre_contrib = 0;
152
$nombre_contrib = 0;
192
$nombre_message = 0;
153
$nombre_message = 0;
193
 
154
 
194
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
155
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
195
	$nombre_contrib = 0;
156
	$nombre_contrib = 0;
196
	$nombre_message = 0;
157
	$nombre_message = 0;
197
 
158
 
198
	// On verifie la date de derniere mise à jour
159
	// On verifie la date de derniere mise à jour
199
	$requete_verif='SELECT * FROM projet_statistiques WHERE ps_ce_projet="'.$ligne->p_id.'" ORDER BY ps_date DESC LIMIT 1';
160
	$requete_verif='SELECT * FROM projet_statistiques WHERE ps_ce_projet="'.$ligne->p_id.'" ORDER BY ps_date DESC LIMIT 1';
200
	$resultat_verif = $this->_db->query($requete_verif);
161
	$resultat_verif = $this->_db->query($requete_verif);
201
	if (DB::isError($resultat_verif)) {
162
	if (DB::isError($resultat_verif)) {
202
		return $resultat_verif->getMessage().$resultat_verif;
163
		return $resultat_verif->getMessage().$resultat_verif;
203
	}
164
	}
204
	$ligne_verif = $resultat_verif->fetchRow(DB_FETCHMODE_OBJECT);
165
	$ligne_verif = $resultat_verif->fetchRow(DB_FETCHMODE_OBJECT);
205
	
166
	
206
	// Si elle remonte a plus de deux heure, on sauvegarde, et a plus de 7 jours, on archive et créé une nouvelle entrée
167
	// Si elle remonte a plus de deux heure, on sauvegarde, et a plus de 7 jours, on archive et créé une nouvelle entrée
207
	if($ligne_verif->ps_date > date("Y-m-d H:i:s", time()-NB_SEC_INSERT)) {
168
	if($ligne_verif->ps_date > date("Y-m-d H:i:s", time()-NB_SEC_INSERT)) {
208
		if($ligne_verif->ps_maj < date("Y-m-d H:i:s", time()-NB_SEC_UPDATE)) {
169
		if($ligne_verif->ps_maj < date("Y-m-d H:i:s", time()-NB_SEC_UPDATE)) {
209
		
170
		
210
			// Recupere nombre_contrib et nombre_message
171
			// Recupere nombre_contrib et nombre_message
211
			$calculs=analyser($ligne, $nombre_contrib, $nombre_message);
172
			$calculs=analyser($ligne, $nombre_contrib, $nombre_message);
212
			
173
			
213
			$requete_maj = 'UPDATE projet_statistiques SET ps_msg_derniere_semaine="'.$nombre_message.'", ps_doc_derniere_semaine="'.$ligne->nb_doc.'", ps_nombre_inscrit="'.$ligne->nb_utilisateur.'", ps_nombre_inscrit_liste="'.$ligne->nb_utilisateur_liste.'", ps_modifwiki_derniere_semaine="'.$nombre_contrib.'", ps_maj=NOW() WHERE ps_ce_projet="'.$ligne->p_id.'" AND ps_date="'.$ligne->ps_date.'"';
174
			$requete_maj = 'UPDATE projet_statistiques SET ps_msg_derniere_semaine="'.$nombre_message.'", ps_doc_derniere_semaine="'.$ligne->nb_doc.'", ps_nombre_inscrit="'.$ligne->nb_utilisateur.'", ps_nombre_inscrit_liste="'.$ligne->nb_utilisateur_liste.'", ps_modifwiki_derniere_semaine="'.$nombre_contrib.'", ps_maj=NOW() WHERE ps_ce_projet="'.$ligne->p_id.'" AND ps_date="'.$ligne->ps_date.'"';
214
			$resultat_maj = $this->_db->query($requete_maj);
175
			$resultat_maj = $this->_db->query($requete_maj);
215
			if (DB::isError($resultat_maj)) {
176
			if (DB::isError($resultat_maj)) {
216
				return $resultat_maj->getMessage().$requete_maj;
177
				return $resultat_maj->getMessage().$requete_maj;
217
			}
178
			}
218
		} else {
179
		} else {
219
		
180
		
220
			$nombre_contrib = $ligne_verif->ps_modifwiki_derniere_semaine;
181
			$nombre_contrib = $ligne_verif->ps_modifwiki_derniere_semaine;
221
			$nombre_message = $ligne_verif->ps_msg_derniere_semaine;
182
			$nombre_message = $ligne_verif->ps_msg_derniere_semaine;
222
		
183
		
223
		}
184
		}
224
	
185
	
225
	} else {
186
	} else {
226
	
187
	
227
		// Recupere nombre_contrib et nombre_message
188
		// Recupere nombre_contrib et nombre_message
228
		$calculs=analyser($ligne, $nombre_contrib, $nombre_message);
189
		$calculs=analyser($ligne, $nombre_contrib, $nombre_message);
229
 
190
 
230
		$requete_maj = 'INSERT INTO projet_statistiques (ps_ce_projet, ps_msg_derniere_semaine, ps_doc_derniere_semaine, ps_nombre_inscrit, ps_nombre_inscrit_liste, ps_modifwiki_derniere_semaine, ps_date, ps_maj) '.
191
		$requete_maj = 'INSERT INTO projet_statistiques (ps_ce_projet, ps_msg_derniere_semaine, ps_doc_derniere_semaine, ps_nombre_inscrit, ps_nombre_inscrit_liste, ps_modifwiki_derniere_semaine, ps_date, ps_maj) '.
231
						'VALUES ("'.$ligne->p_id.'", "'.$nombre_message.'", "'.$ligne->nb_doc.'", "'.$ligne->nb_utilisateur.'", "'.$ligne->nb_utilisateur_liste.'", "'.$nombre_contrib.'", NOW(), NOW())';
192
						'VALUES ("'.$ligne->p_id.'", "'.$nombre_message.'", "'.$ligne->nb_doc.'", "'.$ligne->nb_utilisateur.'", "'.$ligne->nb_utilisateur_liste.'", "'.$nombre_contrib.'", NOW(), NOW())';
232
		$resultat_maj = $this->_db->query($requete_maj);
193
		$resultat_maj = $this->_db->query($requete_maj);
233
		if (DB::isError($resultat_maj)) {
194
		if (DB::isError($resultat_maj)) {
234
			return $resultat_maj->getMessage().$requete_maj;
195
			return $resultat_maj->getMessage().$requete_maj;
235
		}
196
		}
236
	}
197
	}
237
	
198
	
238
	// Et on affiche les stats courantes
199
	// Et on affiche les stats courantes
239
	$res .= '<tr><td>'.$ligne->p_titre.'</td><td>'.($ligne->pl_nom_liste?$ligne->pl_nom_liste:$ligne->AGO_A_NOMGRP.' (Yahoo)').'</td><td class="stat_nb">'.$ligne->nb_utilisateur_liste.'</td><td class="stat_nb">'.$ligne->nb_utilisateur.'</td><td class="stat_nb">'.$nombre_message.'</td><td class="stat_nb">'.$ligne->nb_doc.'</td><td class="stat_nb">'.$nombre_contrib.'</td></tr>';
200
	$res .= '<tr><td>'.$ligne->p_titre.'</td><td>'.($ligne->pl_nom_liste?$ligne->pl_nom_liste:$ligne->AGO_A_NOMGRP.' (Yahoo)').'</td><td class="stat_nb">'.$ligne->nb_utilisateur_liste.'</td><td class="stat_nb">'.$ligne->nb_utilisateur.'</td><td class="stat_nb">'.$nombre_message.'</td><td class="stat_nb">'.$ligne->nb_doc.'</td><td class="stat_nb">'.$nombre_contrib.'</td></tr>';
240
}
201
}
241
$res .= '</table>';
202
$res .= '</table>';
242
 
203
 
243
// Met a jour les statistiques et somme d'activite
204
// Met a jour les statistiques et somme d'activite
244
$sql="update `projet_statistiques` set ps_somme=(ps_msg_derniere_semaine +ps_doc_derniere_semaine+ps_nombre_inscrit_liste+ps_modifwiki_derniere_semaine);";
205
$sql="update `projet_statistiques` set ps_somme=(ps_msg_derniere_semaine +ps_doc_derniere_semaine+ps_nombre_inscrit_liste+ps_modifwiki_derniere_semaine);";
245
$resultat = $this->_db->query($sql);
206
$resultat = $this->_db->query($sql);
246
if (DB::isError($resultat)) {
207
if (DB::isError($resultat)) {
247
	return $resultat->getMessage().$sql;
208
	return $resultat->getMessage().$sql;
248
}
209
}
249
 
210
 
250
// On cherche le max pour ponderer les sommes
211
// On cherche le max pour ponderer les sommes
251
$sql='SELECT MAX( ps_somme ) AS max FROM projet_statistiques WHERE ps_date>=CURDATE()';
212
$sql='SELECT MAX( ps_somme ) AS max FROM projet_statistiques WHERE ps_date>=CURDATE()';
252
$resultat = $this->_db->query($sql);
213
$resultat = $this->_db->query($sql);
253
if (DB::isError($resultat)) {
214
if (DB::isError($resultat)) {
254
	return $resultat->getMessage().$sql;
215
	return $resultat->getMessage().$sql;
255
}
216
}
256
$tresultat = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
217
$tresultat = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
257
 
218
 
258
// On pondere
219
// On pondere
259
$sql="UPDATE `projet_statistiques` SET ps_pourcent=ps_somme / ".($tresultat->max?$tresultat->max:1)." * 100 WHERE ps_date>=CURDATE();";
220
$sql="UPDATE `projet_statistiques` SET ps_pourcent=ps_somme / ".($tresultat->max?$tresultat->max:1)." * 100 WHERE ps_date>=CURDATE();";
260
$resultat = $this->_db->query($sql);
221
$resultat = $this->_db->query($sql);
261
if (DB::isError($resultat)) {
222
if (DB::isError($resultat)) {
262
	return $resultat->getMessage().$sql;
223
	return $resultat->getMessage().$sql;
263
}
224
}
264
 
225
 
265
// On affiche quelques infos inutiles mais indispensables
226
// On affiche quelques infos inutiles mais indispensables
266
$res .= '<p>';
227
$res .= '<p>';
267
if(!$calculs)$res .= '<span class="warning">Les variables nb_msg et nb_contrib n\'ont pas &eacute;t&eacute; calcul&eacute;es (datent de moins de '.round(NB_SEC_UPDATE/3600).' heures)</span><br />';
228
if(!$calculs)$res .= '<span class="warning">Les variables nb_msg et nb_contrib n\'ont pas &eacute;t&eacute; calcul&eacute;es (datent de moins de '.round(NB_SEC_UPDATE/3600).' heures)</span><br />';
268
$res .= 'Execut&eacute; en '.(round((microtime(true)-$start)*1000)/1000).' secondes.</p>';
229
$res .= 'Execut&eacute; en '.(round((microtime(true)-$start)*1000)/1000).' secondes.</p>';
269
 
230
 
270
return $res;
231
return $res;
271
 
232
 
272
/* +--Fin du code ---------------------------------------------------------------------------------------+
233
/* +--Fin du code ---------------------------------------------------------------------------------------+
273
* $Log: not supported by cvs2svn $
234
* $Log: not supported by cvs2svn $
-
 
235
* Revision 1.1  2008-03-27 09:15:36  j_grillot
-
 
236
* Correction du bug sur le parsing xml
-
 
237
*
274
* +--Fin du code ----------------------------------------------------------------------------------------+
238
* +--Fin du code ----------------------------------------------------------------------------------------+
275
*/
239
*/
276
?>
240
?>