Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormattpiwik <matthieu.aubry@gmail.com>2008-08-04 03:53:22 +0400
committermattpiwik <matthieu.aubry@gmail.com>2008-08-04 03:53:22 +0400
commit42b52b6d8a88b3fa4c4f3978c4e7bf00b1eac778 (patch)
treee60f0a9ebcbc8ab2c9f45031284bec17cc532523 /modules/LogStats.php
parent6e636d8a92748657ccb1dde7def6ad174a7c8b75 (diff)
- renamed modules/ directory in core/
- cleaning admin UI - adding widgetize module - cleaning template architecture git-svn-id: http://dev.piwik.org/svn/trunk@586 59fd770c-687e-43c8-a1e3-f5a4ff64c105
Diffstat (limited to 'modules/LogStats.php')
-rw-r--r--modules/LogStats.php303
1 files changed, 0 insertions, 303 deletions
diff --git a/modules/LogStats.php b/modules/LogStats.php
deleted file mode 100644
index 12151a8b06..0000000000
--- a/modules/LogStats.php
+++ /dev/null
@@ -1,303 +0,0 @@
-<?php
-/**
- * Piwik - Open source web analytics
- *
- * @link http://piwik.org
- * @license http://www.gnu.org/licenses/gpl-3.0.html Gpl v3 or later
- * @version $Id$
- *
- * @package Piwik_LogStats
- */
-
-/**
- * Class used by the logging script piwik.php called by the javascript tag.
- * Handles the visitor & his/her actions on the website, saves the data in the DB, saves information in the cookie, etc.
- *
- * To maximise the performance of the logging module, we use different techniques.
- *
- * On the PHP-only side:
- * - minimize the number of external files included.
- * Ideally only one (the configuration file) in all the normal cases.
- * We load the Loggers only when an error occurs ; this error is logged in the DB/File/etc
- * depending on the loggers settings in the configuration file.
- * - we may have to include external classes but we try to include only very
- * simple code without any dependency, so that we could simply write a script
- * that would merge all this simple code into a big piwik.php file.
- *
- * On the Database-related side:
- * - write all the SQL queries without using any DB abstraction layer.
- * Of course we carefully filter all input values.
- * - minimize the number of SQL queries necessary to complete the algorithm.
- * - carefully index the tables used
- * - try to have fixed length rows
- *
- * [ - use a partitionning by date for the tables ]
- *
- * - handle the timezone settings??
- *
- * We could also imagine a batch system that would read a log file every 5min,
- * and which prepares the file containg the rows to insert, then we load DATA INFILE
- *
- *
- * Configuration options for the statsLogEngine module:
- * - use_cookie ; defines if we try to get/set a cookie to help recognize a unique visitor
- *
- * @package Piwik_LogStats
- */
-class Piwik_LogStats
-{
- protected $stateValid;
-
- protected $urlToRedirect;
-
- /**
- *
- * @var Piwik_LogStats_Db
- */
- static protected $db = null;
-
- const STATE_NOTHING_TO_NOTICE = 1;
- const STATE_TO_REDIRECT_URL = 2;
- const STATE_LOGGING_DISABLE = 10;
- const STATE_NO_GET_VARIABLE = 11;
-
- const COOKIE_INDEX_IDVISITOR = 1;
- const COOKIE_INDEX_TIMESTAMP_LAST_ACTION = 2;
- const COOKIE_INDEX_TIMESTAMP_FIRST_ACTION = 3;
- const COOKIE_INDEX_ID_VISIT = 4;
- const COOKIE_INDEX_ID_LAST_ACTION = 5;
-
- public function __construct()
- {
- $this->stateValid = self::STATE_NOTHING_TO_NOTICE;
- }
-
- static function connectDatabase()
- {
- if( !is_null(self::$db))
- {
- return;
- }
-
- $configDb = Piwik_LogStats_Config::getInstance()->database;
-
- // we decode the password. Password is html encoded because it's enclosed between " double quotes
- $configDb['password'] = htmlspecialchars_decode($configDb['password']);
- if(!isset($configDb['port']))
- {
- // before 0.2.4 there is no port specified in config file
- $configDb['port'] = '3306';
- }
- self::$db = new Piwik_LogStats_Db( $configDb['host'],
- $configDb['username'],
- $configDb['password'],
- $configDb['dbname'],
- $configDb['port'] );
- self::$db->connect();
- }
-
- public static function getDb()
- {
- return self::$db;
- }
-
- static function disconnectDb()
- {
- if(isset(self::$db))
- {
- self::$db->disconnect();
- }
- }
-
- private function initProcess()
- {
- try{
- $pluginsLogStats = Piwik_LogStats_Config::getInstance()->Plugins_LogStats;
- if(is_array($pluginsLogStats)
- && count($pluginsLogStats) != 0)
- {
- Piwik_PluginsManager::getInstance()->doNotLoadAlwaysActivatedPlugins();
- Piwik_PluginsManager::getInstance()->setPluginsToLoad( $pluginsLogStats['Plugins_LogStats'] );
- }
- } catch(Exception $e) {
- }
-
- $saveStats = Piwik_LogStats_Config::getInstance()->LogStats['record_statistics'];
-
- if($saveStats == 0)
- {
- $this->setState(self::STATE_LOGGING_DISABLE);
- }
-
- if( count($_GET) == 0)
- {
- $this->setState(self::STATE_NO_GET_VARIABLE);
- }
-
- $downloadVariableName = Piwik_LogStats_Config::getInstance()->LogStats['download_url_var_name'];
- $urlDownload = Piwik_Common::getRequestVar( $downloadVariableName, '', 'string');
-
- if( !empty($urlDownload) )
- {
- if( Piwik_Common::getRequestVar( 'redirect', 1, 'int') == 1)
- {
- $this->setState( self::STATE_TO_REDIRECT_URL );
- }
- $this->setUrlToRedirect ( $urlDownload);
- }
-
- $outlinkVariableName = Piwik_LogStats_Config::getInstance()->LogStats['outlink_url_var_name'];
- $urlOutlink = Piwik_Common::getRequestVar( $outlinkVariableName, '', 'string');
-
- if( !empty($urlOutlink) )
- {
- if( Piwik_Common::getRequestVar( 'redirect', 1, 'int') == 1)
- {
- $this->setState( self::STATE_TO_REDIRECT_URL );
- }
- $this->setUrlToRedirect ( $urlOutlink);
- }
- }
-
- private function processVisit()
- {
- return $this->stateValid !== self::STATE_LOGGING_DISABLE
- && $this->stateValid !== self::STATE_NO_GET_VARIABLE;
- }
-
- private function getState()
- {
- return $this->stateValid;
- }
-
- private function setUrlToRedirect( $url )
- {
- $this->urlToRedirect = $url;
- }
-
- private function getUrlToRedirect()
- {
- return $this->urlToRedirect;
- }
-
- private function setState( $value )
- {
- $this->stateValid = $value;
- }
-
- /**
- * Returns the LogStats_Visit object.
- * This method can be overwritten so that we use a different LogStats_Visit object
- *
- * @return Piwik_LogStats_Visit
- */
- protected function getNewVisitObject()
- {
- $visit = null;
- Piwik_PostEvent('LogStats.getNewVisitObject', $visit);
-
- if(is_null($visit))
- {
- $visit = new Piwik_LogStats_Visit();
- }
- elseif(!($visit instanceof Piwik_LogStats_Visit_Interface ))
- {
- throw new Exception("The Visit object set in the plugin must implement Piwik_LogStats_Visit_Interface");
- }
-
- $visit->setDb(self::$db);
- return $visit;
- }
-
- // main algorithm
- // => input : variables filtered
- // => action : read cookie, read database, database logging, cookie writing
- function main()
- {
- $this->initProcess();
-
- if( $this->processVisit() )
- {
- try {
- self::connectDatabase();
- $visit = $this->getNewVisitObject();
- $visit->handle();
- } catch (PDOException $e) {
- $this->setState(self::STATE_LOGGING_DISABLE);
- }
- }
- $this->endProcess();
- }
-
- // display the logo or pixel 1*1 GIF
- // or a marketing page if no parameters in the url
- // or redirect to a url
- // or load a URL (rss feed) (transmit the cookie as well)
- protected function endProcess()
- {
- switch($this->getState())
- {
- case self::STATE_LOGGING_DISABLE:
- printDebug("Logging disabled, display transparent logo");
- $this->outputTransparentGif();
- break;
-
- case self::STATE_NO_GET_VARIABLE:
- printDebug("No get variables => piwik page");
- echo "<a href='index.php'>Piwik</a> is a free open source <a href='http://piwik.org'>web analytics</a> alternative to Google analytics.";
- break;
-
-
- case self::STATE_TO_REDIRECT_URL:
- $this->sendHeader('Location: ' . $this->getUrlToRedirect());
- break;
-
-
- case self::STATE_NOTHING_TO_NOTICE:
- default:
- printDebug("Nothing to notice => default behaviour");
- $this->outputTransparentGif();
- break;
- }
- printDebug("End of the page.");
-
- if($GLOBALS['DEBUGPIWIK'] === true)
- {
- Piwik::printSqlProfilingReportLogStats(self::$db);
- }
-
- self::disconnectDb();
- }
-
- protected function outputTransparentGif()
- {
- if( !isset($GLOBALS['DEBUGPIWIK']) || !$GLOBALS['DEBUGPIWIK'] )
- {
- $trans_gif_64 = "R0lGODlhAQABAJEAAAAAAP///////wAAACH5BAEAAAIALAAAAAABAAEAAAICVAEAOw==";
- header("Content-type: image/gif");
- print(base64_decode($trans_gif_64));
- }
- }
-
- protected function sendHeader($header)
- {
- header($header);
- }
-}
-
-function printDebug( $info = '' )
-{
- if(isset($GLOBALS['DEBUGPIWIK']) && $GLOBALS['DEBUGPIWIK'])
- {
- if(is_array($info))
- {
- print("<PRE>");
- print(var_export($info,true));
- print("</PRE>");
- }
- else
- {
- print($info . "<br>\n");
- }
- }
-}