Subversion Repositories Applications.papyrus

Rev

Rev 1820 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1820 Rev 1858
Line 17... Line 17...
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.2 2008-03-28 08:19:07 j_grillot Exp $
22
// CVS : $Id: projet_statistiques.php,v 1.3 2008-08-25 14:59:22 alexandre_tb 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
*
Line 29... Line 29...
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.2 $
34
*@version       $Revision: 1.3 $
35
// +------------------------------------------------------------------------------------------------------+
35
// +------------------------------------------------------------------------------------------------------+
36
*/
36
*/
Line -... Line 37...
-
 
37
 
-
 
38
 
-
 
39
/**	AVERTISSEMENT
-
 
40
 * 
-
 
41
 * Ce programme n est pas appele par l application projet
-
 
42
 * Il faut le lancer en ligne de commande
-
 
43
 */
-
 
44
 
-
 
45
 define ('PROJET_STATISTIQUE_MODE_LIGNE_COMMANDE', true);
-
 
46
 
-
 
47
 /** Chemin vers les programmes ezmlm en PHP */
-
 
48
 
-
 
49
 define ('PROJET_CHEMIN_EZMLM_PHP', '/home/vpopmail/www/');
-
 
50
 
-
 
51
 /** Chemin vers le site hebergeant l appli projet*/
-
 
52
 define ('PROJET_CHEMIN_SITE_APPLI_PROJET', '/home/telabotap/www/');
-
 
53
  
-
 
54
 /** Chemin vers les wikinis pour les flux rss */
-
 
55
 define('PROJET_URL_WIKINI', "http://www.tela-botanica.org/wikini/");
-
 
56
 
-
 
57
 /** Chemin vers les flux rss de Yahoo! */
-
 
58
 define ('PROJET_URL_RSS_YAHOO', 'http://rss.groups.yahoo.com/group/');
-
 
59
 
-
 
60
 /** Chemin vers les groupes Yahoo! */
37
 
61
 define ('PROJET_URL_GROUPES_YAHOO', 'http://fr.groups.yahoo.com/group/');
38
// +------------------------------------------------------------------------------------------------------+
62
// +------------------------------------------------------------------------------------------------------+
39
// |                                            ENTETE du PROGRAMME                                       |
63
// |                                            ENTETE du PROGRAMME                                       |
Line -... Line 64...
-
 
64
// +------------------------------------------------------------------------------------------------------+
-
 
65
 
-
 
66
/** Connexion base de donne */
-
 
67
 
-
 
68
if (PROJET_STATISTIQUE_MODE_LIGNE_COMMANDE) {
-
 
69
	set_include_path(get_include_path().':'.PROJET_CHEMIN_SITE_APPLI_PROJET.'api/pear/');
-
 
70
	define ('GEN_CHEMIN_API', '/home/telabotap/www/api/');
-
 
71
	include_once PROJET_CHEMIN_SITE_APPLI_PROJET.'papyrus/configuration/pap_config.inc.php';
-
 
72
	$dsn = PAP_DSN;
-
 
73
	include_once 'DB.php';
-
 
74
	$GLOBALS['projet_db'] = DB::connect($dsn);
-
 
75
	if (PEAR::isError($GLOBALS['projet_db'])) die ("\n".'Erreur de connexion a la BD.'."\n".$GLOBALS['projet_db']->getMessage());
-
 
76
	else echo "\n"."connection ok...";
-
 
77
	
-
 
78
	// Quelques constantes de chemin
-
 
79
	include_once PROJET_CHEMIN_SITE_APPLI_PROJET.'client/projet/configuration/projet.config.inc.php';
-
 
80
	
-
 
81
 
-
 
82
	
-
 
83
	if (DB::isError($GLOBALS['projet_db'])) die ("\n".'Erreur de connexion a la BD.'."\n".$GLOBALS['projet_db']->getMessage());
-
 
84
} else {
-
 
85
	$GLOBALS['projet_db'] = &$this->_db;
Line 40... Line -...
40
// +------------------------------------------------------------------------------------------------------+
-
 
41
 
86
}
Line 42... Line 87...
42
 
87
 
43
include_once PROJET_CHEMIN_APPLI.'classes/ezmlmAccessObject.class.php';
88
 
44
include_once PROJET_CHEMIN_BIBLIOTHEQUE_API.'pear/XML/RSS.php';
89
include_once PROJET_CHEMIN_BIBLIOTHEQUE_API.'pear/XML/RSS.php';
-
 
90
 
-
 
91
// Ne pas changer : les groupes Yahoo se basent toujours sur la semaine
-
 
92
define("NB_SEC_INSERT", 7*24*3600);
45
 
93
define("NB_SEC_UPDATE", 2*3600);
-
 
94
 
-
 
95
 
-
 
96
function is_natural($val, $acceptzero = false) {
-
 
97
 $return = ((string)$val === (string)(int)$val);
-
 
98
 if ($acceptzero)
-
 
99
  $base = 0;
-
 
100
 else
-
 
101
  $base = 1;
-
 
102
 if ($return && intval($val) < $base)
-
 
103
  $return = false;
-
 
104
 return $return;
-
 
105
}
Line 46... Line 106...
46
// Ne pas changer : les groupes Yahoo se basent toujours sur la semaine
106
if(!is_natural($_GET['start']))$_GET['start']='0';
47
define("NB_SEC_INSERT", 7*24*3600);
107
 
48
define("NB_SEC_UPDATE", 2*3600);
108
 
49
define("URL_WIKINI", "http://www.tela-botanica.org/wikini/");
109
 
50
 
110
 
-
 
111
/**
-
 
112
 * Procedure retrouvant le nombre de contribution, de message et le contenu de la page a partir des informations de la BDD
51
/**
113
 * @param object $ligne resultat d'un fetch row contenant l'url du document a analyser
52
 * Procedure retrouvant le nombre de contribution, de message et le contenu de la page a partir des informations de la BDD
114
 * @param int $nombre_contrib recupere le nombre de contributions du projet 
53
 * @param object $ligne resultat d'un fetch row contenant l'url du document a analyser
115
 * @param int $nombre_message recupere le nombre de nouveaux messages du projet
54
 * @param int $nombre_contrib recupere le nombre de contributions du projet 
116
 * @param int $nombre_membre recupere le nombre de nouveaux messages du projet
55
 * @param int $nombre_message recupere le nombre de nouveaux messages du projet
117
 * @param int $nombre_photo recupere le nombre de nouveaux messages du projet
56
 * @return false si la fonction echoue lors de la tentative de recuperation des donnees utiles
118
 * @return false si la fonction echoue lors de la tentative de recuperation des donnees utiles
Line 57... Line 119...
57
 */
119
 */
-
 
120
function analyser($ligne, &$nombre_contrib, &$nombre_message, &$nombre_nouveau_membre, &$nombre_photo, &$nombre_membre) {
-
 
121
	$nombre_contrib='0';
-
 
122
	$nombre_msg='0';
-
 
123
	$r=false;
58
function analyser($ligne, &$nombre_contrib, &$nombre_message) {
124
 
-
 
125
	// Recuperation du nbre de message
59
	$nombre_contrib='0';
126
	$domaine = $ligne->pl_domaine;
60
	$nombre_msg='0';
127
	$liste = $ligne->pl_nom_liste;
61
	$r=false;
128
	if ($domaine != '' && $liste != '') {
62
 
129
		ob_start();
-
 
130
		include PROJET_CHEMIN_EZMLM_PHP.'nombre_messages.php';
63
	// Recuperation du nbre de message
131
		$xml = ob_get_contents();
-
 
132
		ob_end_clean();
-
 
133
		
64
	$xml_parser = &new ezmlmAccessObject('nombre_messages', $ligne->pl_domaine, $ligne->pl_nom_liste, $GLOBALS['lang']) ;
134
		if (isset($xml) && $xml != '' && $xml != 0) {
65
	$xml_parser->load();
-
 
Line -... Line 135...
-
 
135
			$simpleXML = simplexml_load_string($xml);
66
	
136
		
-
 
137
			$nombre_message = $simpleXML[0];
-
 
138
		}
67
	ob_start();
139
	}
68
	$xml_parser->parse();
140
	if(!$nombre_message)$nombre_message='0';
69
	$nombre_message = ob_get_contents();
141
	
70
	if(!$nombre_message)$nombre_message='0';
142
	
-
 
143
	// Si AGO_A_NOMGRP existe, la liste est sur Yahoo
-
 
144
	// on essaie de parser la page d accueil du groupe
-
 
145
	// poue recuperer les 
71
	ob_end_clean();
146
	if($ligne->AGO_A_NOMGRP) {
Line 72... Line -...
72
	
-
 
73
	// Si AGO_A_NOMGRP alors il n'y a pas de flux RSS (groupe Yahoo, cad pas Tela)
147
		$url = PROJET_URL_GROUPES_YAHOO.$ligne->AGO_A_NOMGRP;
Line -... Line 148...
-
 
148
 
-
 
149
		// Recherche du schema retrouvant le nombre de nouveaux message dans la semaine
-
 
150
		$pattern_membres = '(: ([0-9]+) </li>)((<li>Rubriqu)|( <li>Cr))';
-
 
151
		$pattern_nouveaux_membres = '>([0-9]+)</span> .ouveaux? .embres?';
74
	if($ligne->AGO_A_NOMGRP) {
152
		$pattern_message = '>([0-9]+)</span> .ouveaux? .essages?';
-
 
153
		$pattern3 = '>([0-9]+)</span> .ouvelles? .hotos?';
-
 
154
		
-
 
155
		$contenu = @file_get_contents($url);
-
 
156
		
-
 
157
		// en cas d echec, ce qui est frequent
-
 
158
		// on lit le flux rss
75
		$url='http://fr.groups.yahoo.com/group/'.$ligne->AGO_A_NOMGRP;
159
		if ($contenu) {
76
		
160
			sleep(2);
-
 
161
			$r=($contenu?true:false);
-
 
162
			ereg($pattern_message, $contenu, $registre_message);
-
 
163
			$nombre_message=$registre_message[1];
-
 
164
	
-
 
165
			ereg($pattern_nouveaux_membres, $contenu, $registre_nouveau_membre);
-
 
166
			$nombre_nouveau_membre=$registre_nouveau_membre[1];
-
 
167
	
-
 
168
			ereg($pattern3, $contenu, $no);
-
 
169
			$nombre_photo=$no[1];
-
 
170
			
-
 
171
			ereg ($pattern_membres, $contenu, $registre_membre);
-
 
172
			$nombre_membre = $registre_membre[2];
-
 
173
			
-
 
174
		} else {
-
 
175
			// Parse le flux RSS genere par wikini
-
 
176
			$rss =& new XML_RSS(PROJET_URL_RSS_YAHOO.$ligne->AGO_A_NOMGRP.'/rss');
-
 
177
			if (PEAR::isError($rss)) {
-
 
178
				echo $rss->getMessage()."\n";
77
		// Recherche du schema retrouvant le nombre de nouveaux message dans la semaine
179
				return;
-
 
180
			}
-
 
181
			$rss->parse();
-
 
182
			
-
 
183
			// On va compter le nombre de modification depuis les x derniers jours (voirs constantes)
-
 
184
			foreach ($rss->getItems() as $item) {
-
 
185
				// Le script doit etre compatiable avec plusieurs formats de date
-
 
186
				if ($item['pubDate']) {
-
 
187
					if (strtotime($item['pubDate'])>time()-NB_SEC_INSERT) $nombre_message++;
-
 
188
				
78
		$pattern='>([0-9]+)</span> nouveau';
189
				} else {
79
		
190
					$date = substr($item['title'], strlen($item['title'])-18);
80
		// Quelques soucis avec la version asynchrone (sockopen)
191
					if ($date>date("Y m d - H:i", time()-NB_SEC_INSERT)) $nombre_message++;
81
		$contenu=file_get_contents($url);
192
				}
82
		
193
			}
Line 83... Line 194...
83
		$r=($contenu?true:false);
194
			// On met une * dans les autres variables pour indiquer que ca ne fonctionne pas
84
		ereg($pattern, $contenu, $no);
195
			$nombre_membre = '*';
85
		$nombre_message=$no[1];
196
			$nombre_photo = '*';
86
	  
197
		}
87
 
198
				
Line 88... Line 199...
88
	} else {
199
	} else {
89
		// Parse le flux RSS généré par wikini
200
		// Parse le flux RSS genere par wikini
90
		$rss =& new XML_RSS(URL_WIKINI.$ligne->p_wikini.'/wakka.php?wiki=DerniersChangementsRSS/xml');
201
		$rss =& new XML_RSS(PROJET_URL_WIKINI.$ligne->p_wikini.'/wakka.php?wiki=DerniersChangementsRSS/xml');
91
		$rss->parse();
202
		$rss->parse();
92
		
203
		
Line -... Line 204...
-
 
204
		// 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)
205
		foreach ($rss->getItems() as $item) {
Line -... Line 206...
-
 
206
			// Le script doit etre compatiable avec plusieurs formats de date
-
 
207
			if ($item['pubDate']) {
-
 
208
				if (strtotime($item['pubDate'])>time()-NB_SEC_INSERT) $nombre_contrib++;
-
 
209
			
-
 
210
			} else {
-
 
211
				$date = substr($item['title'], strlen($item['title'])-18);
-
 
212
				if ($date>date("Y m d - H:i", time()-NB_SEC_INSERT)) $nombre_contrib++;
-
 
213
			}
94
		foreach ($rss->getItems() as $item) {
214
		}
Line 95... Line 215...
95
			// Le script doit être compatiable avec plusieurs formats de date
215
		
96
			if ($item['pubDate']) {
216
		// On recupere le nombre de nouveaux inscrit au projet
Line 128... Line 248...
128
		'left join projet_statut_utilisateurs on p_id=psu_id_projet ' .
248
		'left join projet_statut_utilisateurs on p_id=psu_id_projet ' .
129
		'left join projet_lien_liste_externe on plle_id_projet=p_id ' .
249
		'left join projet_lien_liste_externe on plle_id_projet=p_id ' .
130
		'left join agora on plle_id_liste=AGO_A_ID ' .
250
		'left join agora on plle_id_liste=AGO_A_ID ' .
131
		'group by p_id order by p_titre' ;
251
		'group by p_id order by p_titre' ;
Line 132... Line 252...
132
 
252
 
133
$resultat = $this->_db->query($requete) ;
253
$resultat = $GLOBALS['projet_db']->query($requete) ;
134
if (DB::isError($resultat)) {
254
if (DB::isError($resultat)) {
135
	return ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ;
255
	echo ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ;
136
}
256
}
-
 
257
echo "\n".'Statistiques des projets';
Line 137... Line -...
137
$res .= '<h1>Statistiques des projets</h1>';
-
 
138
 
-
 
139
// Un tableau c'est bien mais un beau tableau c'est mieux.
-
 
140
$res .= '<style type="text/css">';
-
 
141
$res .= '.stats { border-spacing: 0px; }';
-
 
142
$res .= '.stats .stat_nb { text-align: center; }';
-
 
143
$res .= '.stats th { font-weight: bold; }';
-
 
144
$res .= '.stats td { border-bottom: 1px #ddd solid; }';
-
 
Line 145... Line 258...
145
$res .= '.warning { color: #800; font-weight: bold; }';
258
echo "\n".'Requete : '."\n\n".$requete."\n";
Line 146... Line -...
146
$res .= '</style>';
-
 
Line 147... Line 259...
147
 
259
 
-
 
260
 
148
$calculs=false;
261
$calculs = false;
Line 149... Line 262...
149
 
262
 
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>';
263
 
151
 
264
printf ("\n%-56s %-35s %-12s %-12s %-12s %-12s %-12s %-12s", 
152
$nombre_contrib = 0;
-
 
-
 
265
			"Nom du projet", "Nom liste", "Nouv inscrits", "Utilisateurs", "Nb messages", "Nb doc", "Nb contrib", 'Nombre inscrit Yahoo');
-
 
266
$nombre_photo = 0;
153
$nombre_message = 0;
267
 
154
 
268
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
155
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
269
	$nombre_contrib = 0;
156
	$nombre_contrib = 0;
270
	$nombre_message = 0;
157
	$nombre_message = 0;
271
	$nombre_nouveau_membre = 0;
158
 
272
	$nombre_membre_yahoo = 0;
159
	// On verifie la date de derniere mise à jour
273
	// On verifie la date de derniere mise a jour
Line 160... Line 274...
160
	$requete_verif='SELECT * FROM projet_statistiques WHERE ps_ce_projet="'.$ligne->p_id.'" ORDER BY ps_date DESC LIMIT 1';
274
	$requete_verif='SELECT * FROM projet_statistiques WHERE ps_ce_projet="'.$ligne->p_id.'" ORDER BY ps_date DESC LIMIT 1';
161
	$resultat_verif = $this->_db->query($requete_verif);
275
	$resultat_verif = $GLOBALS['projet_db']->query($requete_verif);
162
	if (DB::isError($resultat_verif)) {
276
	if (DB::isError($resultat_verif)) {
Line 163... Line 277...
163
		return $resultat_verif->getMessage().$resultat_verif;
277
		echo $resultat_verif->getMessage().$resultat_verif;
164
	}
278
	}
Line 165... Line 279...
165
	$ligne_verif = $resultat_verif->fetchRow(DB_FETCHMODE_OBJECT);
279
	$ligne_verif = $resultat_verif->fetchRow(DB_FETCHMODE_OBJECT);
-
 
280
	
-
 
281
	// Si elle remonte a plus de deux heure, on sauvegarde, et a plus de 7 jours, on archive et cree une nouvelle entree
-
 
282
	if($ligne_verif->ps_date > date("Y-m-d H:i:s", time()-NB_SEC_INSERT)) {
-
 
283
		if($ligne_verif->ps_maj < date("Y-m-d H:i:s", time()-NB_SEC_UPDATE)) {
-
 
284
		
-
 
285
			// Recupere nombre_contrib et nombre_message
166
	
286
			$calculs=analyser($ligne, $nombre_contrib, $nombre_message, $nombre_nouveau_membre, $nombre_photo, $nombre_membre_yahoo);
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
287
			
168
	if($ligne_verif->ps_date > date("Y-m-d H:i:s", time()-NB_SEC_INSERT)) {
288
			$requete_maj = 'UPDATE projet_statistiques SET ps_msg_derniere_semaine="'.$nombre_message.'", ps_doc_derniere_semaine="'.
169
		if($ligne_verif->ps_maj < date("Y-m-d H:i:s", time()-NB_SEC_UPDATE)) {
289
							$ligne->nb_doc.'", ps_nombre_inscrit_derniere_semaine="'.$nombre_nouveau_membre.'", ps_nombre_inscrit="'.$ligne->nb_utilisateur.
170
		
290
							'", ps_nombre_inscrit_liste="'.
Line 171... Line 291...
171
			// Recupere nombre_contrib et nombre_message
291
							$ligne->nb_utilisateur_liste.'", ps_modifwiki_derniere_semaine="'.$nombre_contrib.
172
			$calculs=analyser($ligne, $nombre_contrib, $nombre_message);
292
							'", ps_maj=NOW(), ps_nombre_membre_yahoo="'.$nombre_membre_yahoo.'" WHERE ps_ce_projet="'.
Line 184... Line 304...
184
		}
304
		}
Line 185... Line 305...
185
	
305
	
Line 186... Line 306...
186
	} else {
306
	} else {
187
	
307
	
188
		// Recupere nombre_contrib et nombre_message
-
 
-
 
308
		// Recupere nombre_contrib et nombre_message
-
 
309
		$calculs=analyser($ligne, $nombre_contrib, $nombre_message, $nombre_nouveau_membre, $nombre_photo, $nombre_membre_yahoo);
-
 
310
		// On place ps_dernier a O pour les stats de la semaine precedente
189
		$calculs=analyser($ligne, $nombre_contrib, $nombre_message);
311
		$requete_stat_prec = 'update projet_statistiques set ps_dernier=0 where ps_ce_projet='.$ligne->p_id;
-
 
312
		$resultat_stat_prec = $GLOBALS['projet_db']->query($requete_stat_prec);
190
 
313
		$requete_maj = 'INSERT INTO projet_statistiques set ps_ce_projet="'.$ligne->p_id.'", ps_msg_derniere_semaine="'.$nombre_message
-
 
314
						.'", ps_doc_derniere_semaine="'.$ligne->nb_doc.'", ps_nombre_inscrit_derniere_semaine="'.$nombre_nouveau_membre.
-
 
315
						'", ps_nombre_inscrit= "'.$ligne->nb_utilisateur.'", ps_nombre_inscrit_liste="'.$ligne->nb_utilisateur_liste.
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) '.
316
						'", ps_modifwiki_derniere_semaine="'.$nombre_contrib.'", ps_date=now(), ps_maj=now(), ps_dernier=1'.
192
						'VALUES ("'.$ligne->p_id.'", "'.$nombre_message.'", "'.$ligne->nb_doc.'", "'.$ligne->nb_utilisateur.'", "'.$ligne->nb_utilisateur_liste.'", "'.$nombre_contrib.'", NOW(), NOW())';
317
						', ps_nombre_membre_yahoo="'.$nombre_membre_yahoo.'"';
193
		$resultat_maj = $this->_db->query($requete_maj);
318
		$resultat_maj = $GLOBALS['projet_db']->query($requete_maj);
194
		if (DB::isError($resultat_maj)) {
319
		if (DB::isError($resultat_maj)) {
195
			return $resultat_maj->getMessage().$requete_maj;
320
			echo $resultat_maj->getMessage().$requete_maj;
Line 196... Line 321...
196
		}
321
		}
-
 
322
	}
-
 
323
	
-
 
324
	// Et on affiche les stats courantes
197
	}
325
	$format = "\n%-56s %-35s %-12d %-12d %-12d %-12d %-12d %-12d";
198
	
326
	printf ($format, html_entity_decode($ligne->p_titre), ($ligne->pl_nom_liste?$ligne->pl_nom_liste:$ligne->AGO_A_NOMGRP.' (Yahoo)'), 
199
	// Et on affiche les stats courantes
327
				$nombre_nouveau_membre, $ligne->nb_utilisateur, $nombre_message, $ligne->nb_doc, $nombre_contrib, $nombre_membre_yahoo);
Line 200... Line 328...
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>';
328
 
201
}
329
}
202
$res .= '</table>';
330
//$res .= '</table>';
203
 
331
 
204
// Met a jour les statistiques et somme d'activite
332
// Met a jour les statistiques et somme d'activite
205
$sql="update `projet_statistiques` set ps_somme=(ps_msg_derniere_semaine +ps_doc_derniere_semaine+ps_nombre_inscrit_liste+ps_modifwiki_derniere_semaine);";
333
$sql="update `projet_statistiques` set ps_somme=(ps_msg_derniere_semaine +5*ps_doc_derniere_semaine+ps_nombre_inscrit_liste+ps_modifwiki_derniere_semaine);";
Line 206... Line 334...
206
$resultat = $this->_db->query($sql);
334
$resultat = $GLOBALS['projet_db']->query($sql);
207
if (DB::isError($resultat)) {
335
if (DB::isError($resultat)) {
208
	return $resultat->getMessage().$sql;
336
	return $resultat->getMessage().$sql;
209
}
337
}
210
 
338
 
211
// On cherche le max pour ponderer les sommes
339
// On cherche le max pour ponderer les sommes
212
$sql='SELECT MAX( ps_somme ) AS max FROM projet_statistiques WHERE ps_date>=CURDATE()';
340
$sql='SELECT MAX( LN(ps_somme+1) ) AS max FROM projet_statistiques WHERE ps_dernier=1';
213
$resultat = $this->_db->query($sql);
-
 
-
 
341
$resultat = $GLOBALS['projet_db']->query($sql);
214
if (DB::isError($resultat)) {
342
if (DB::isError($resultat)) {
215
	return $resultat->getMessage().$sql;
343
	return $resultat->getMessage().$sql;
216
}
344
}
217
$tresultat = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
345
$tresultat = $resultat->fetchRow(DB_FETCHMODE_OBJECT);
218
 
346
$max = $tresultat->max;
219
// On pondere
347
// On pondere
Line -... Line 348...
-
 
348
$sql = 'UPDATE projet_statistiques SET ps_pourcent=LN(ps_somme+1) / '.$max.' * 100 WHERE ps_dernier=1';
-
 
349
$resultat = $GLOBALS['projet_db']->query($sql);
-
 
350
if (DB::isError($resultat)) {
-
 
351
	return $resultat->getMessage().$sql;
-
 
352
}
-
 
353
 
-
 
354
// Calcul de al dormance de certains projets
-
 
355
$requete_dormance = 'select ps_ce_projet from projet_statistiques where ps_ce_projet not in '.
-
 
356
					'(SELECT ps_ce_projet FROM `projet_statistiques` WHERE `ps_somme` <> 0 group by ps_ce_projet) group by ps_ce_projet';
-
 
357
$resultat_dormance = $GLOBALS['projet_db']->query ($requete_dormance);
-
 
358
 
-
 
359
echo "\n".'Mise a jour de la dormance...'."\n";
-
 
360
 
-
 
361
while ($ligne_dormance = $resultat_dormance->fetchRow(DB_FETCHMODE_OBJECT)) {
-
 
362
	// Comme les statistiques n'ont pas un an, on verifie s'il n'y pas de documents	
-
 
363
	$requete_complementaire = 'select pd_id from projet_documents where pd_date_de_mise_a_jour > date_sub(now(), interval 1 year) and pd_ce_projet = '
-
 
364
								.$ligne_dormance->ps_ce_projet;
-
 
365
	$resultat_complementaire = $GLOBALS['projet_db']->query ($requete_complementaire);
-
 
366
	if (DB::isError($resultat_complementaire)) {
-
 
367
		echo $resultat_complementaire->getMessage()."\n".$resultat_complementaire->getDebugInfo()."\n".'Requete : '.$requete_complementaire."\n";
-
 
368
	}
-
 
369
	if ($resultat_complementaire->numRows() !=0) {  // Le projet a eu una activite meme infime depuis un an
-
 
370
		
-
 
371
		$requete_projet = 'update projet set p_en_dormance=0 where p_id='.$ligne_dormance->ps_ce_projet;
-
 
372
		$GLOBALS['projet_db']->query($requete_projet);
-
 
373
		
-
 
374
		// Suppression puis insertion
-
 
375
		$requete_avoir_theme = 'delete from projet_avoir_theme where pat_id_projet='.$ligne_dormance->ps_ce_projet.' and pat_id_theme=9';
-
 
376
		$GLOBALS['projet_db']->query ($requete_avoir_theme);
-
 
377
		
-
 
378
	} else {  // Le projet dort on fait les mises a jour sur projet et projet_avoir_theme
-
 
379
		$requete_projet = 'update projet set p_en_dormance=1 where p_id='.$ligne_dormance->ps_ce_projet;
-
 
380
		$GLOBALS['projet_db']->query($requete_projet);
-
 
381
		
-
 
382
		// Suppression puis insertion
-
 
383
		$requete_avoir_theme = 'delete from projet_avoir_theme where pat_id_projet='.$ligne_dormance->ps_ce_projet.' and pat_id_theme=9';
-
 
384
		$GLOBALS['projet_db']->query ($requete_avoir_theme);
220
$sql="UPDATE `projet_statistiques` SET ps_pourcent=ps_somme / ".($tresultat->max?$tresultat->max:1)." * 100 WHERE ps_date>=CURDATE();";
385
		
221
$resultat = $this->_db->query($sql);
386
		$requete_avoir_theme = 'insert into projet_avoir_theme set pat_id_projet='.$ligne_dormance->ps_ce_projet.', pat_id_theme=9';  // Le theme en dormance
222
if (DB::isError($resultat)) {
387
		$GLOBALS['projet_db']->query ($requete_avoir_theme);
223
	return $resultat->getMessage().$sql;
388
	}
Line 224... Line 389...
224
}
389
}
Line -... Line 390...
-
 
390
 
-
 
391
// On affiche quelques infos inutiles mais indispensables
-
 
392
echo "\n";
225
 
393
if(!$calculs) $res .= '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)'."\n";
226
// On affiche quelques infos inutiles mais indispensables
394
echo 'Execut&eacute; en '.(round((microtime(true)-$start)*1000)/1000).' secondes.'."\n";
227
$res .= '<p>';
-
 
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 />';
-
 
229
$res .= 'Execut&eacute; en '.(round((microtime(true)-$start)*1000)/1000).' secondes.</p>';
-
 
230
 
395
 
231
return $res;
396
if (PROJET_STATISTIQUE_MODE_LIGNE_COMMANDE) {
232
 
397
 
233
/* +--Fin du code ---------------------------------------------------------------------------------------+
398
} else {