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 été calculé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 été calculées (datent de moins de '.round(NB_SEC_UPDATE/3600).' heures)</span><br />';
|
268 |
$res .= 'Executé en '.(round((microtime(true)-$start)*1000)/1000).' secondes.</p>';
|
229 |
$res .= 'Executé 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 |
?>
|