2006-12-02 04:36:16 +00:00
< ? php
/*
2009-11-17 13:48:46 +00:00
* e107 website system
*
2009-11-18 01:06:08 +00:00
* Copyright ( C ) 2008 - 2009 e107 Inc ( e107 . org )
2009-11-17 13:48:46 +00:00
* Released under the terms and conditions of the
* GNU General Public License ( http :// www . gnu . org / licenses / gpl . txt )
*
*
*
* $Source : / cvs_backup / e107_0 . 8 / e107_plugins / log / consolidate . php , v $
2010-02-10 18:18:01 +00:00
* $Revision $
* $Date $
* $Author $
2009-11-17 13:48:46 +00:00
*/
2006-12-02 04:36:16 +00:00
/* first thing to do is check if the log file is out of date ... */
2007-11-01 20:28:29 +00:00
2012-06-17 22:07:22 +00:00
// $pathtologs = e_PLUGIN."log/logs/";
2012-08-11 02:05:22 +00:00
if ( ! defined ( 'e107_INIT' )){ exit ; }
2013-06-03 14:17:08 -07:00
$pathtologs = e_LOG ;
$date = date ( " z.Y " , time ());
$yesterday = date ( " z.Y " ,( time () - 86400 )); // This makes sure year wraps round OK
$date2 = date ( " Y-m-j " , ( time () - 86400 )); // Yesterday's date for the database summary
$date3 = date ( " Y-m " , ( time () - 86400 )); // Current month's date for monthly summary (we're working with yesterday's data)
$pfileprev = " logp_ " . $yesterday . " .php " ; // Yesterday's log file
$pfile = " logp_ " . $date . " .php " ; // Today's log file
$ifileprev = " logi_ " . $yesterday . " .php " ;
$ifile = " logi_ " . $date . " .php " ;
if ( file_exists ( $pathtologs . $pfile )) /* log file is up to date, no consolidation required */
2007-02-10 15:54:47 +00:00
{
2006-12-02 04:36:16 +00:00
return ;
2006-12-23 18:17:37 +00:00
}
2013-06-03 14:17:08 -07:00
else if ( ! file_exists ( $pathtologs . $pfileprev )) // See if any older log files
{
if (( $retvalue = check_for_old_files ( $pathtologs )) === FALSE ) /* no logfile found at all - create - this will only ever happen once ... */
{
2007-11-01 20:28:29 +00:00
createLog ( $pathtologs );
2006-12-02 04:36:16 +00:00
return FALSE ;
2007-01-17 20:51:24 +00:00
}
2013-06-03 14:17:08 -07:00
list ( $pfileprev , $ifileprev , $date2 , $tstamp ) = explode ( '|' , $retvalue ); // ... if we've got files
2006-12-02 04:36:16 +00:00
}
2007-11-01 20:28:29 +00:00
// List of the non-page-based info which is gathered - historically only 'all-time' stats, now we support monthly as well
$stats_list = array ( 'statBrowser' , 'statOs' , 'statScreen' , 'statDomain' , 'statReferer' , 'statQuery' );
$qry = " `log_id` IN ('statTotal','statUnique' " ;
foreach ( $stats_list as $s )
{
$qry .= " ,' { $s } ' " ; // Always read the all-time stats
if ( $pref [ $s ] == 2 ) $qry .= " ,' { $s } : { $date3 } ' " ; // Look for monthlys as well as cumulative
}
$qry .= " ) " ;
2006-12-02 04:36:16 +00:00
/* log file is out of date - consolidation required */
/* get existing stats ... */
2013-06-03 14:17:08 -07:00
//if($sql->select("logstats", "*", "log_id='statBrowser' OR log_id='statOs' OR log_id='statScreen' OR log_id='statDomain' OR log_id='statTotal' OR log_id='statUnique' OR log_id='statReferer' OR log_id='statQuery'"))
if ( $sql -> select ( " logstats " , " * " , $qry ))
2007-11-01 20:28:29 +00:00
{ // That's read in all the stats we need to modify
2013-06-03 14:17:08 -07:00
while ( $row = $sql -> fetch ())
2006-12-02 04:36:16 +00:00
{
2007-11-01 20:28:29 +00:00
if ( $row [ 'log_id' ] == " statUnique " )
{
$statUnique = $row [ 'log_data' ];
}
elseif ( $row [ 'log_id' ] == " statTotal " )
{
$statTotal = $row [ 'log_data' ];
}
elseif (( $pos = strpos ( $row [ 'log_id' ], ':' )) === FALSE )
{ // Its all-time stats
$$row [ 'log_id' ] = unserialize ( $row [ 'log_data' ]); // $row['log_id'] is the stats type - save in a variable
}
else
{ // Its monthly stats
$row [ 'log_id' ] = 'mon_' . substr ( $row [ 'log_id' ], 0 , $pos ); // Create a generic variable for each monthly stats
$$row [ 'log_id' ] = unserialize ( $row [ 'log_data' ]); // $row['log_id'] is the stats type - save in a variable
}
2006-12-02 04:36:16 +00:00
}
2007-11-01 20:28:29 +00:00
}
else
{
// this must be the first time a consolidation has happened - this will only ever happen once ...
2013-06-03 14:17:08 -07:00
$sql -> insert ( " logstats " , " 0, 'statBrowser', '' " );
$sql -> insert ( " logstats " , " 0, 'statOs', '' " );
$sql -> insert ( " logstats " , " 0, 'statScreen', '' " );
$sql -> insert ( " logstats " , " 0, 'statDomain', '' " );
$sql -> insert ( " logstats " , " 0, 'statReferer', '' " );
$sql -> insert ( " logstats " , " 0, 'statQuery', '' " );
$sql -> insert ( " logstats " , " 0, 'statTotal', '0' " );
$sql -> insert ( " logstats " , " 0, 'statUnique', '0' " );
$statBrowser = array ();
$statOs = array ();
$statScreen = array ();
$statDomain = array ();
$statReferer = array ();
$statQuery = array ();
2006-12-02 04:36:16 +00:00
}
2007-11-01 20:28:29 +00:00
foreach ( $stats_list as $s )
{
$varname = 'mon_' . $s ;
if ( ! isset ( $$varname )) $$varname = array (); // Create monthly arrays if they don't exist
}
require_once ( $pathtologs . $pfileprev ); // Yesterday's page accesses - $pageInfo array
require_once ( $pathtologs . $ifileprev ); // Yesterdays browser accesses etc
foreach ( $browserInfo as $name => $amount )
{
2006-12-02 04:36:16 +00:00
$statBrowser [ $name ] += $amount ;
2007-11-01 20:28:29 +00:00
$mon_statBrowser [ $name ] += $amount ;
2006-12-02 04:36:16 +00:00
}
2007-11-01 20:28:29 +00:00
foreach ( $osInfo as $name => $amount )
{
2006-12-02 04:36:16 +00:00
$statOs [ $name ] += $amount ;
2007-11-01 20:28:29 +00:00
$mon_statOs [ $name ] += $amount ;
2006-12-02 04:36:16 +00:00
}
2007-11-01 20:28:29 +00:00
foreach ( $screenInfo as $name => $amount )
{
2006-12-02 04:36:16 +00:00
$statScreen [ $name ] += $amount ;
2007-11-01 20:28:29 +00:00
$mon_statScreen [ $name ] += $amount ;
2006-12-02 04:36:16 +00:00
}
2007-11-01 20:28:29 +00:00
foreach ( $domainInfo as $name => $amount )
{
if ( ! is_numeric ( $name ))
{
2006-12-02 04:36:16 +00:00
$statDomain [ $name ] += $amount ;
2007-11-01 20:28:29 +00:00
$mon_statDomain [ $name ] += $amount ;
2006-12-02 04:36:16 +00:00
}
}
2007-11-01 20:28:29 +00:00
foreach ( $refInfo as $name => $info )
{
2006-12-02 04:36:16 +00:00
$statReferer [ $name ][ 'url' ] = $info [ 'url' ];
$statReferer [ $name ][ 'ttl' ] += $info [ 'ttl' ];
2007-11-01 20:28:29 +00:00
$mon_statReferer [ $name ][ 'url' ] = $info [ 'url' ];
$mon_statReferer [ $name ][ 'ttl' ] += $info [ 'ttl' ];
2006-12-02 04:36:16 +00:00
}
2007-11-01 20:28:29 +00:00
foreach ( $searchInfo as $name => $amount )
{
2006-12-02 04:36:16 +00:00
$statQuery [ $name ] += $amount ;
2007-11-01 20:28:29 +00:00
$mon_statQuery [ $name ] += $amount ;
2006-12-02 04:36:16 +00:00
}
2013-06-03 14:17:08 -07:00
$browser = serialize ( $statBrowser );
$os = serialize ( $statOs );
$screen = serialize ( $statScreen );
$domain = serialize ( $statDomain );
$refer = serialize ( $statReferer );
$squery = serialize ( $statQuery );
2006-12-02 04:36:16 +00:00
$statTotal += $siteTotal ;
$statUnique += $siteUnique ;
2007-11-01 20:28:29 +00:00
// Save cumulative results - always keep track of these, even if the $pref doesn't display them
2013-06-03 14:17:08 -07:00
$sql -> update ( " logstats " , " log_data=' { $browser } ' WHERE log_id='statBrowser' " );
$sql -> update ( " logstats " , " log_data=' { $os } ' WHERE log_id='statOs' " );
$sql -> update ( " logstats " , " log_data=' { $screen } ' WHERE log_id='statScreen' " );
$sql -> update ( " logstats " , " log_data=' { $domain } ' WHERE log_id='statDomain' " );
$sql -> update ( " logstats " , " log_data=' { $refer } ' WHERE log_id='statReferer' " );
$sql -> update ( " logstats " , " log_data=' { $squery } ' WHERE log_id='statQuery' " );
$sql -> update ( " logstats " , " log_data=' " . intval ( $statTotal ) . " ' WHERE log_id='statTotal' " );
$sql -> update ( " logstats " , " log_data=' " . intval ( $statUnique ) . " ' WHERE log_id='statUnique' " );
2006-12-02 04:36:16 +00:00
2007-11-01 20:28:29 +00:00
// Now save the relevant monthly results - only where enabled
foreach ( $stats_list as $s )
{
if ( isset ( $pref [ $s ]) && ( $pref [ $s ] > 1 ))
{ // Value 2 requires saving of monthly stats
$srcvar = 'mon_' . $s ;
$destvar = 'smon_' . $s ;
$$destvar = serialize ( $$srcvar );
2013-06-03 14:17:08 -07:00
if ( ! $sql -> update ( " logstats " , " log_data=' " . $$destvar . " ' WHERE log_id=' " . $s . " : " . $date3 . " ' " ))
2007-11-01 20:28:29 +00:00
{
2013-06-03 14:17:08 -07:00
$sql -> insert ( " logstats " , " 0, ' " . $s . " : " . $date3 . " ', ' " . $$destvar . " ' " );
2007-11-01 20:28:29 +00:00
}
}
}
/* get page access monthly info from db */
2013-06-03 14:17:08 -07:00
if ( $sql -> select ( " logstats " , " * " , " log_id=' { $date3 } ' " ))
2007-11-01 20:28:29 +00:00
{
2013-06-03 14:17:08 -07:00
$tmp = $sql -> fetch ();
2006-12-02 04:36:16 +00:00
$monthlyInfo = unserialize ( $tmp [ 'log_data' ]);
unset ( $tmp );
$MonthlyExistsFlag = TRUE ;
}
foreach ( $pageInfo as $key => $info )
{
$monthlyInfo [ 'TOTAL' ][ 'ttlv' ] += $info [ 'ttl' ];
$monthlyInfo [ 'TOTAL' ][ 'unqv' ] += $info [ 'unq' ];
$monthlyInfo [ $key ][ 'ttlv' ] += $info [ 'ttl' ];
$monthlyInfo [ $key ][ 'unqv' ] += $info [ 'unq' ];
}
$monthlyinfo = serialize ( $monthlyInfo );
2007-11-01 20:28:29 +00:00
if ( $MonthlyExistsFlag )
{
2013-06-03 14:17:08 -07:00
$sql -> update ( " logstats " , " log_data=' { $monthlyinfo } ' WHERE log_id=' { $date3 } ' " );
2007-11-01 20:28:29 +00:00
}
else
{
2013-06-03 14:17:08 -07:00
$sql -> insert ( " logstats " , " 0, ' { $date3 } ', ' { $monthlyinfo } ' " );
2006-12-02 04:36:16 +00:00
}
/* collate page total information */
2013-06-03 14:17:08 -07:00
if ( $sql -> select ( " logstats " , " * " , " log_id='pageTotal' " ))
2006-12-02 04:36:16 +00:00
{
2013-06-03 14:17:08 -07:00
$tmp = $sql -> fetch ();
2006-12-02 04:36:16 +00:00
$pageTotal = unserialize ( $tmp [ 'log_data' ]);
unset ( $tmp );
}
else
{
$pageTotal = array ();
}
foreach ( $pageInfo as $key => $info )
{
$pageTotal [ $key ][ 'url' ] = $info [ 'url' ];
$pageTotal [ $key ][ 'ttlv' ] += $info [ 'ttl' ];
$pageTotal [ $key ][ 'unqv' ] += $info [ 'unq' ];
}
$pagetotal = serialize ( $pageTotal );
2013-06-03 14:17:08 -07:00
if ( ! $sql -> update ( " logstats " , " log_data=' { $pagetotal } ' WHERE log_id='pageTotal' " ))
2006-12-02 04:36:16 +00:00
{
2013-06-03 14:17:08 -07:00
$sql -> insert ( " logstats " , " 0, 'pageTotal', ' { $pagetotal } ' " );
2006-12-02 04:36:16 +00:00
}
/* now we need to collate the individual page information into an array ... */
$data = " " ;
$dailytotal = 0 ;
$uniquetotal = 0 ;
foreach ( $pageInfo as $key => $value )
{
$data .= $value [ 'url' ] . " | " . $value [ 'ttl' ] . " | " . $value [ 'unq' ] . chr ( 1 );
$dailytotal += $value [ 'ttl' ];
$uniquetotal += $value [ 'unq' ];
}
$data = $dailytotal . chr ( 1 ) . $uniquetotal . chr ( 1 ) . $data ;
2013-06-03 14:17:08 -07:00
$sql -> insert ( " logstats " , " 0, ' $date2 ', ' " . $tp -> toDB ( $data , true ) . " ' " );
2006-12-02 04:36:16 +00:00
/* ok, we're finished with the log file now, we can empty it ... */
if ( ! unlink ( $pathtologs . $pfileprev ))
{
$data = chr ( 60 ) . " ?php \n " . chr ( 47 ) . " * e107 website system: Log file: " . date ( " z:Y " , time ()) . " * " . chr ( 47 ) . " \n \n \n \n " . chr ( 47 ) . " * THE INFORMATION IN THIS LOG FILE HAS BEEN CONSOLIDATED INTO THE DATABASE - YOU CAN SAFELY DELETE IT. * " . chr ( 47 ) . " \n \n \n ? " . chr ( 62 );
if ( $handle = fopen ( $pathtologs . $pfileprev , 'w' )) {
fwrite ( $handle , $data );
}
fclose ( $handle );
}
if ( ! unlink ( $pathtologs . $ifileprev ))
{
$data = chr ( 60 ) . " ?php \n " . chr ( 47 ) . " * e107 website system: Log file: " . date ( " z:Y " , time ()) . " * " . chr ( 47 ) . " \n \n \n \n " . chr ( 47 ) . " * THE INFORMATION IN THIS LOG INFO FILE HAS BEEN CONSOLIDATED INTO THE DATABASE - YOU CAN SAFELY DELETE IT. * " . chr ( 47 ) . " \n \n \n ? " . chr ( 62 );
if ( $handle = fopen ( $pathtologs . $ifileprev , 'w' )) {
fwrite ( $handle , $data );
}
fclose ( $handle );
}
2006-12-23 18:17:37 +00:00
/* and finally, we need to create new logfiles for today ... */
2007-11-01 20:28:29 +00:00
createLog ( $pathtologs );
2006-12-02 04:36:16 +00:00
/* done! */
2007-11-01 20:28:29 +00:00
function createLog ( $pathtologs )
2006-12-23 18:17:37 +00:00
{
2007-11-01 20:28:29 +00:00
global $statTotal , $statUnique , $pfile , $ifile ;
2006-12-23 18:17:37 +00:00
if ( ! is_writable ( $pathtologs ))
{
2012-06-17 22:07:22 +00:00
echo " Log directory is not writable - please CHMOD " . e_LOG . " to 777 " ;
2007-11-01 20:28:29 +00:00
echo '<br />Path to logs: ' . $pathtologs ;
2006-12-02 04:36:16 +00:00
return FALSE ;
}
$varStart = chr ( 36 );
$quote = chr ( 34 );
$data = chr ( 60 ) . " ?php \n " . chr ( 47 ) . " * e107 website system: Log file: " . date ( " z:Y " , time ()) . " * " . chr ( 47 ) . " \n \n " .
$varStart . " refererData = " . $quote . $quote . " ; \n " .
$varStart . " ipAddresses = " . $quote . $quote . " ; \n " .
$varStart . " hosts = " . $quote . $quote . " ; \n " .
$varStart . " siteTotal = " . $quote . " 0 " . $quote . " ; \n " .
$varStart . " siteUnique = " . $quote . " 0 " . $quote . " ; \n " .
$varStart . " screenInfo = array(); \n " .
$varStart . " browserInfo = array(); \n " .
$varStart . " osInfo = array(); \n " .
2007-01-20 15:32:28 +00:00
$varStart . " pageInfo = array( \n " ;
2006-12-02 04:36:16 +00:00
$data .= " \n ); \n \n ? " . chr ( 62 );
if ( ! touch ( $pathtologs . $pfile )) {
return FALSE ;
}
if ( ! touch ( $pathtologs . $ifile )) {
return FALSE ;
}
if ( ! is_writable ( $pathtologs . $pfile )) {
$old = umask ( 0 );
chmod ( $pathtologs . $pfile , 0777 );
umask ( $old );
// return FALSE;
}
if ( ! is_writable ( $pathtologs . $ifile )) {
$old = umask ( 0 );
chmod ( $pathtologs . $ifile , 0777 );
umask ( $old );
// return FALSE;
}
2006-12-23 18:17:37 +00:00
if ( $handle = fopen ( $pathtologs . $pfile , 'w' ))
{
2006-12-02 04:36:16 +00:00
fwrite ( $handle , $data );
}
fclose ( $handle );
2006-12-23 18:17:37 +00:00
$data = " <?php
/* e107 website system: Log info file: ".date("z:Y", time())." */
" ;
$data .= '$domainInfo' . " = array(); \n \n " ;
$data .= '$screenInfo' . " = array(); \n \n " ;
$data .= '$browserInfo' . " = array(); \n \n " ;
$data .= '$osInfo' . " = array(); \n \n " ;
$data .= '$refInfo' . " = array(); \n \n " ;
$data .= '$searchInfo' . " = array(); \n \n " ;
$data .= '$visitInfo' . " = array(); \n \n " ;
$data .= " ?> " ;
if ( $handle = fopen ( $pathtologs . $ifile , 'w' ))
{
fwrite ( $handle , $data );
2006-12-02 04:36:16 +00:00
}
fclose ( $handle );
return ;
}
2007-01-17 20:51:24 +00:00
// Called if both today's and yesterday's log files missing, to see
// if there are any older files we could process. Return FALSE if nothing
// Otherwise return a string of relevant information
function check_for_old_files ( $pathtologs )
{
$no_files = TRUE ;
if ( $dir_handle = opendir ( $pathtologs ))
{
while ( false !== ( $file = readdir ( $dir_handle )))
{
// Do match on #^logp_(\d{1,3})\.php$#i
if ( preg_match ( '#^logp_(\d{1,3}\.\d{4})\.php$#i' , $file , $match ) == 1 )
{ // got a matching file
$yesterday = $match [ 1 ]; // Day of year - zero is 1st Jan
$pfileprev = " logp_ " . $yesterday . " .php " ; // Yesterday's log file
$ifileprev = " logi_ " . $yesterday . " .php " ;
list ( $day , $year ) = explode ( '.' , $yesterday );
$tstamp = mktime ( 0 , 0 , 0 , 1 , 1 , $year ) + ( $day * 86400 );
$date2 = date ( " Y-m-j " , $tstamp ); // Yesterday's date for the database summary
$temp = array ( $pfileprev , $ifileprev , $date2 , $tstamp );
return implode ( '|' , $temp );
}
}
}
return FALSE ;
}
2006-12-02 04:36:16 +00:00
?>