⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 action.php

📁 一款可以和GOOGLE媲美的开源统计系统,运用AJAX.功能强大. 无色提示:按照需要PHP5.1以上和MySQL数据库支持。
💻 PHP
字号:
<?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: Action.php 558 2008-07-20 23:10:38Z matt $ *  * @package Piwik_Tracker *//** * Interface of the Action object. * New Action classes can be defined in plugins and used instead of the default one. *  * @package Piwik_Tracker */interface Piwik_Tracker_Action_Interface {	public function getActionId();	public function record( $idVisit, $idRefererAction, $timeSpentRefererAction );	public function setIdSite( $idSite );}/** * Handles an action by the visitor. * A request to the piwik.php script is associated with one Action. * This class is used to build the Action Name (which can be built from the URL,  * or can be directly specified in the JS code, etc.). * It also saves the Action when necessary in the DB.  *   * About the Action concept: * - An action is defined by a name. * - The name can be specified in the JS Code in the variable 'action_name' *    For example you can decide to use the javascript value document.title as an action_name * - If the name is not specified, we use the URL(path+query) to build a default name. *    For example for "http://piwik.org/test/my_page/test.html"  *    the name would be "test/my_page/test.html" * - If the name is empty we set it to default_action_name found in global.ini.php * - Handling UTF8 in the action name * PLUGIN_IDEA - An action is associated to URLs and link to the URL from the reports (currently actions do not link to the url of the pages) * PLUGIN_IDEA - An action hit by a visitor is associated to the HTML title of the page that triggered the action and this HTML title is displayed in the interface *  *  * @package Piwik_Tracker */class Piwik_Tracker_Action implements Piwik_Tracker_Action_Interface{	private $actionName;	private $url;	private $defaultActionName;	private $nameDownloadOutlink;	private $idSite;		/**	 * 3 types of action, Standard action / Download / Outlink click	 */	const TYPE_ACTION   = 1;	const TYPE_DOWNLOAD = 3;	const TYPE_OUTLINK  = 2;		/**	 * @param Piwik_Tracker_Db Database object to be used	 */	function __construct( $db )	{		$this->actionName = Piwik_Common::getRequestVar( 'action_name', '', 'string');				$downloadVariableName = Piwik_Tracker_Config::getInstance()->Tracker['download_url_var_name'];		$this->downloadUrl = Piwik_Common::getRequestVar( $downloadVariableName, '', 'string');				$outlinkVariableName = Piwik_Tracker_Config::getInstance()->Tracker['outlink_url_var_name'];		$this->outlinkUrl = Piwik_Common::getRequestVar( $outlinkVariableName, '', 'string');				$nameVariableName = Piwik_Tracker_Config::getInstance()->Tracker['download_outlink_name_var'];		$this->nameDownloadOutlink = Piwik_Common::getRequestVar( $nameVariableName, '', 'string');				$this->url = Piwik_Common::getRequestVar( 'url', '', 'string');		$this->db = $db;		$this->defaultActionName = Piwik_Tracker_Config::getInstance()->Tracker['default_action_name'];	}			/**	 * Returns the idaction of the current action name.	 * This idaction is used in the visitor logging table to link the visit information 	 * (entry action, exit action) to the actions.	 * This idaction is also used in the table that links the visits and their actions.	 * 	 * The methods takes care of creating a new record in the action table if the existing 	 * action name doesn't exist yet.	 * 	 * @return int Id action that is associated to this action name in the Actions table lookup	 */	function getActionId()	{		$this->loadActionId();		return $this->idAction;	}		/**	 * @param int $idSite	 */	function setIdSite($idSite)	{		$this->idSite = $idSite;	}			/**	 * Records in the DB the association between the visit and this action.	 * 	 * @param int idVisit is the ID of the current visit in the DB table log_visit	 * @param int idRefererAction is the ID of the last action done by the current visit. 	 * @param int timeSpentRefererAction is the number of seconds since the last action was done. 	 * 				It is directly related to idRefererAction.	 */	 public function record( $idVisit, $idRefererAction, $timeSpentRefererAction)	 {	 	$this->db->query("/* SHARDING_ID_SITE = ".$this->idSite." */ INSERT INTO ".$this->db->prefixTable('log_link_visit_action')						." (idvisit, idaction, idaction_ref, time_spent_ref_action) VALUES (?,?,?,?)",					array($idVisit, $this->idAction, $idRefererAction, $timeSpentRefererAction)					);	 }	 	 /**	 * Generates the name of the action from the URL or the specified name.	 * Sets the name as $this->finalActionName	 * 	 * @return void	 */	private function generateInfo()	{		$actionName = '';		if(!empty($this->downloadUrl))		{			$this->actionType = self::TYPE_DOWNLOAD;			$url = $this->downloadUrl;			//$actionName = $this->nameDownloadOutlink;			$actionName = $url;		}		elseif(!empty($this->outlinkUrl))		{			$this->actionType = self::TYPE_OUTLINK;			$url = $this->outlinkUrl;			//remove the last '/' character if it's present			if(substr($url,-1) == '/')			{				$url = substr($url,0,-1);			}			$actionName = $this->nameDownloadOutlink;			if( empty($actionName) )			{				$actionName = $url;			}		}		else		{			$this->actionType = self::TYPE_ACTION;			$url = $this->url;			$actionName = $this->actionName;		}						// the ActionName wasn't specified		if( empty($actionName) )		{			$actionName = trim(Piwik_Common::getPathAndQueryFromUrl($url));						// in case the $actionName is ending with a slash, 			// which means that it is the index page of a category 			// we append the defaultActionName 			// toto/tata/ becomes toto/tata/index 			if(strlen($actionName) > 0 				&& $actionName[strlen($actionName)-1] == '/'			)			{				$actionName.=$this->defaultActionName;			}		}				/*		 * Clean the action name		 */		 		// get the delimiter, by default '/'		$actionCategoryDelimiter = Piwik_Tracker_Config::getInstance()->General['action_category_delimiter'];				// case the name is an URL we dont clean the name the same way		if(Piwik_Common::isLookLikeUrl($actionName))		{			$actionName = trim($actionName);		}		else		{			// create an array of the categories delimited by the delimiter			$split = explode($actionCategoryDelimiter, $actionName);						// trim every category			$split = array_map('trim', $split);						// remove empty categories			$split = array_filter($split);						// rebuild the name from the array of cleaned categories			$actionName = implode($actionCategoryDelimiter, $split);		}				// remove the extra bad characters if any (shouldn't be any at this point...)		$actionName = str_replace(array("\n", "\r"), '', $actionName);				if(empty($actionName))		{			$actionName = $this->defaultActionName;		}				$this->finalActionName = $actionName;	}		/**	 * Sets the attribute $idAction based on $finalActionName and $actionType.	 * 	 * @see getActionId()	 */	private function loadActionId()	{				$this->generateInfo();				$name = $this->finalActionName;		$type = $this->actionType;				$idAction = $this->db->fetch("/* SHARDING_ID_SITE = ".$this->idSite." */ 	SELECT idaction 							FROM ".$this->db->prefixTable('log_action')						."  WHERE name = ? AND type = ?", 						array($name, $type) 					);				// the action name has not been found, create it		if($idAction === false)		{			$this->db->query("/* SHARDING_ID_SITE = ".$this->idSite." */ INSERT INTO ". $this->db->prefixTable('log_action'). "( name, type ) 								VALUES (?,?)",array($name,$type) );			$idAction = $this->db->lastInsertId();		}		else		{			$idAction = $idAction['idaction'];		}				$this->idAction = $idAction;	}	}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -