Subversion Repositories Sites.tela-botanica.org

Rev

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

Rev 441 Rev 443
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:$
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:$
35
// +------------------------------------------------------------------------------------------------------+
35
// +------------------------------------------------------------------------------------------------------+
36
*/
36
*/
Line 37... Line 37...
37
 
37
 
38
// +------------------------------------------------------------------------------------------------------+
38
// +------------------------------------------------------------------------------------------------------+
Line 47... Line 47...
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/");
Line 50... Line 50...
50
 
50
 
-
 
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
 
51
/**
89
/**
52
 * Procedure retrouvant le nombre de contribution, de message et le contenu de la page a partir des informations de la BDD
90
 * Procedure retrouvant le nombre de contribution, de message et le contenu de la page a partir des informations de la BDD
53
 * @param object $ligne resultat d'un fetch row contenant l'url du document a analyser
91
 * @param object $ligne resultat d'un fetch row contenant l'url du document a analyser
54
 * @param int $nombre_contrib recupere le nombre de contributions du projet 
92
 * @param int $nombre_contrib recupere le nombre de contributions du projet 
-
 
93
 * @param int $nombre_message recupere le nombre de nouveaux messages du projet
-
 
94
 * @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
95
 * @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
96
 * @return false si la fonction echoue lors de la tentative de recuperation des donnees utiles
57
 */
97
 */
58
function analyser($ligne, &$nombre_contrib, &$nombre_message) {
98
function analyser($ligne, &$res, &$nombre_contrib, &$nombre_message, &$nombre_membre, &$nombre_photo) {
59
	$nombre_contrib='0';
99
	$nombre_contrib='0';
60
	$nombre_msg='0';
100
	$nombre_msg='0';
Line 61... Line 101...
61
	$r=false;
101
	$r=false;
Line 73... Line 113...
73
	// Si AGO_A_NOMGRP alors il n'y a pas de flux RSS (groupe Yahoo, cad pas Tela)
113
	// Si AGO_A_NOMGRP alors il n'y a pas de flux RSS (groupe Yahoo, cad pas Tela)
74
	if($ligne->AGO_A_NOMGRP) {
114
	if($ligne->AGO_A_NOMGRP) {
75
		$url='http://fr.groups.yahoo.com/group/'.$ligne->AGO_A_NOMGRP;
115
		$url='http://fr.groups.yahoo.com/group/'.$ligne->AGO_A_NOMGRP;
Line 76... Line 116...
76
		
116
		
77
		// Recherche du schema retrouvant le nombre de nouveaux message dans la semaine
117
		// Recherche du schema retrouvant le nombre de nouveaux message dans la semaine
-
 
118
		$pattern1='>([0-9]+)</span> .ouveaux? .embres?';
-
 
119
		$pattern2='>([0-9]+)</span> .ouveaux? .essages?';
Line 78... Line 120...
78
		$pattern='>([0-9]+)</span> nouveau';
120
		$pattern3='>([0-9]+)</span> .ouvelles? .hotos?';
-
 
121
		
79
		
122
		// Quelques soucis avec la version asynchrone
80
		// Quelques soucis avec la version asynchrone (sockopen)
-
 
-
 
123
		//$contenu=monFileGetContents($url);
81
		$contenu=file_get_contents($url);
124
		$contenu=file_get_contents($url);
82
		
125
		usleep(3000000);
83
		$r=($contenu?true:false);
126
		$r=($contenu?true:false);
84
		ereg($pattern, $contenu, $no);
127
		ereg($pattern2, $contenu, $no);
-
 
128
		$nombre_message=$no[1];
-
 
129
 
-
 
130
		ereg($pattern1, $contenu, $no);
-
 
131
		$nombre_membre=$no[1];
-
 
132
 
Line 85... Line 133...
85
		$nombre_message=$no[1];
133
		ereg($pattern3, $contenu, $no);
86
	  
134
		$nombre_photo=$no[1];
87
 
135
 
88
	} else {
136
	} else {
Line 89... Line 137...
89
		// Parse le flux RSS généré par wikini
137
		// Parse le flux RSS g�n�r� par wikini
90
		$rss =& new XML_RSS(URL_WIKINI.$ligne->p_wikini.'/wakka.php?wiki=DerniersChangementsRSS/xml');
138
		$rss =& new XML_RSS(URL_WIKINI.$ligne->p_wikini.'/wakka.php?wiki=DerniersChangementsRSS/xml');
91
		$rss->parse();
139
		$rss->parse();
92
		
140
		
93
		// On va compter le nombre de modification depuis les x derniers jours (voirs constantes)
141
		// On va compter le nombre de modification depuis les x derniers jours (voirs constantes)
Line 94... Line 142...
94
		foreach ($rss->getItems() as $item) {
142
		foreach ($rss->getItems() as $item) {
95
			// Le script doit être compatiable avec plusieurs formats de date
143
			// Le script doit �tre compatiable avec plusieurs formats de date
Line 126... Line 174...
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)) ' .
174
		'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)) ' .
127
		'left join projet_documents on (p_id=pd_ce_projet and  pd_date_de_mise_a_jour > date_sub(now(), interval 1 week)) ' .
175
		'left join projet_documents on (p_id=pd_ce_projet and  pd_date_de_mise_a_jour > date_sub(now(), interval 1 week)) ' .
128
		'left join projet_statut_utilisateurs on p_id=psu_id_projet ' .
176
		'left join projet_statut_utilisateurs on p_id=psu_id_projet ' .
129
		'left join projet_lien_liste_externe on plle_id_projet=p_id ' .
177
		'left join projet_lien_liste_externe on plle_id_projet=p_id ' .
130
		'left join agora on plle_id_liste=AGO_A_ID ' .
178
		'left join agora on plle_id_liste=AGO_A_ID ' .
131
		'group by p_id order by p_titre' ;
179
		'group by p_id order by p_titre limit 0,15' ;
Line 132... Line 180...
132
 
180
 
133
$resultat = $this->_db->query($requete) ;
181
$resultat = $this->_db->query($requete) ;
134
if (DB::isError($resultat)) {
182
if (DB::isError($resultat)) {
135
	return ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ;
183
	return ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ;
Line 154... Line 202...
154
 
202
 
155
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
203
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
156
	$nombre_contrib = 0;
204
	$nombre_contrib = 0;
Line 157... Line 205...
157
	$nombre_message = 0;
205
	$nombre_message = 0;
158
 
206
 
159
	// On verifie la date de derniere mise à jour
207
	// On verifie la date de derniere mise � jour
160
	$requete_verif='SELECT * FROM projet_statistiques WHERE ps_ce_projet="'.$ligne->p_id.'" ORDER BY ps_date DESC LIMIT 1';
208
	$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);
209
	$resultat_verif = $this->_db->query($requete_verif);
162
	if (DB::isError($resultat_verif)) {
210
	if (DB::isError($resultat_verif)) {
163
		return $resultat_verif->getMessage().$resultat_verif;
211
		return $resultat_verif->getMessage().$resultat_verif;
Line 164... Line 212...
164
	}
212
	}
165
	$ligne_verif = $resultat_verif->fetchRow(DB_FETCHMODE_OBJECT);
213
	$ligne_verif = $resultat_verif->fetchRow(DB_FETCHMODE_OBJECT);
166
	
214
	
Line 167... Line 215...
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
215
	// Si elle remonte a plus de deux heure, on sauvegarde, et a plus de 7 jours, on archive et cr�� une nouvelle entr�e
168
	if($ligne_verif->ps_date > date("Y-m-d H:i:s", time()-NB_SEC_INSERT)) {
216
	if($ligne_verif->ps_date > date("Y-m-d H:i:s", time()-NB_SEC_INSERT)) {
Line 169... Line 217...
169
		if($ligne_verif->ps_maj < date("Y-m-d H:i:s", time()-NB_SEC_UPDATE)) {
217
		if($ligne_verif->ps_maj < date("Y-m-d H:i:s", time()-NB_SEC_UPDATE)) {
170
		
218
		
171
			// Recupere nombre_contrib et nombre_message
219
			// Recupere nombre_contrib et nombre_message
172
			$calculs=analyser($ligne, $nombre_contrib, $nombre_message);
220
			$calculs=analyser($ligne, $res, $nombre_contrib, $nombre_message, $nombre_membre, $nombre_photo);
Line 229... Line 277...
229
$res .= 'Execut&eacute; en '.(round((microtime(true)-$start)*1000)/1000).' secondes.</p>';
277
$res .= 'Execut&eacute; en '.(round((microtime(true)-$start)*1000)/1000).' secondes.</p>';
Line 230... Line 278...
230
 
278
 
Line 231... Line 279...
231
return $res;
279
return $res;
232
 
-
 
233
/* +--Fin du code ---------------------------------------------------------------------------------------+
-
 
234
* $Log: projet_statistiques.php,v $
-
 
235
* Revision 1.2  2008-03-28 08:19:07  j_grillot
-
 
236
* retrait de la fonction monFileGetContents inutilisée & commentaires
-
 
237
*
-
 
238
* Revision 1.1  2008-03-27 09:15:36  j_grillot
280
 
239
* Correction du bug sur le parsing xml
281
/* +--Fin du code ---------------------------------------------------------------------------------------+
240
*
282
* $Log:$
241
* +--Fin du code ----------------------------------------------------------------------------------------+
283
* +--Fin du code ----------------------------------------------------------------------------------------+
242
*/
284
*/