/** * @param Request $request * @param Visitor $visitor * @param Action|null $action * @return mixed */ public function onNewVisit(Request $request, Visitor $visitor, $action) { $referrerUrl = $request->getParam('urlref'); $currentUrl = $request->getParam('url'); $information = $this->getReferrerInformation($referrerUrl, $currentUrl, $request->getIdSite()); return $information['referer_url']; }
public static function shouldHandle(Request $request) { $name = $request->getParam('c_n'); $interaction = $request->getParam('c_i'); // if interaction is set we want it to be for instance an outlink, download, ... return !empty($name) && empty($interaction); }
/** * @param Request $request * @param Visitor $visitor * @param Action|null $action * @return mixed */ public function onNewVisit(Request $request, Visitor $visitor, $action) { $referrerUrl = $request->getParam('urlref'); $currentUrl = $request->getParam('url'); $information = $this->getReferrerInformation($referrerUrl, $currentUrl, $request->getIdSite()); if (!empty($information['referer_keyword'])) { return substr($information['referer_keyword'], 0, 255); } return $information['referer_keyword']; }
protected function getNewVisitorInformation($action) { $actionType = $idActionName = $idActionUrl = false; if ($action) { $idActionUrl = $action->getIdActionUrlForEntryAndExitIds(); $idActionName = $action->getIdActionNameForEntryAndExitIds(); $actionType = $action->getActionType(); } $daysSinceFirstVisit = $this->request->getDaysSinceFirstVisit(); $visitCount = $this->request->getVisitCount(); $daysSinceLastVisit = $this->request->getDaysSinceLastVisit(); $daysSinceLastOrder = $this->request->getDaysSinceLastOrder(); $isReturningCustomer = $daysSinceLastOrder !== false; if ($daysSinceLastOrder === false) { $daysSinceLastOrder = 0; } // User settings $userInfo = $this->getSettingsObject(); $userInfo = $userInfo->getInfo(); // Referrer data $referrer = new Referrer(); $referrerUrl = $this->request->getParam('urlref'); $currentUrl = $this->request->getParam('url'); $referrerInfo = $referrer->getReferrerInformation($referrerUrl, $currentUrl, $this->request->getIdSite()); $visitorReturning = $isReturningCustomer ? 2 : ($visitCount > 1 || $this->isVisitorKnown() || $daysSinceLastVisit > 0 ? 1 : 0); $defaultTimeOnePageVisit = Config::getInstance()->Tracker['default_time_one_page_visit']; return array('idsite' => $this->request->getIdSite(), 'visitor_localtime' => $this->request->getLocalTime(), 'idvisitor' => $this->getVisitorIdcookie(), 'visitor_returning' => $visitorReturning, 'visitor_count_visits' => $visitCount, 'visitor_days_since_last' => $daysSinceLastVisit, 'visitor_days_since_order' => $daysSinceLastOrder, 'visitor_days_since_first' => $daysSinceFirstVisit, 'visit_first_action_time' => Tracker::getDatetimeFromTimestamp($this->request->getCurrentTimestamp()), 'visit_last_action_time' => Tracker::getDatetimeFromTimestamp($this->request->getCurrentTimestamp()), 'visit_entry_idaction_url' => (int) $idActionUrl, 'visit_entry_idaction_name' => (int) $idActionName, 'visit_exit_idaction_url' => (int) $idActionUrl, 'visit_exit_idaction_name' => (int) $idActionName, 'visit_total_actions' => in_array($actionType, array(Action::TYPE_PAGE_URL, Action::TYPE_DOWNLOAD, Action::TYPE_OUTLINK, Action::TYPE_SITE_SEARCH, Action::TYPE_EVENT)) ? 1 : 0, 'visit_total_searches' => $actionType == Action::TYPE_SITE_SEARCH ? 1 : 0, 'visit_total_events' => $actionType == Action::TYPE_EVENT ? 1 : 0, 'visit_total_time' => self::cleanupVisitTotalTime($defaultTimeOnePageVisit), 'visit_goal_buyer' => $this->goalManager->getBuyerType(), 'referer_type' => $referrerInfo['referer_type'], 'referer_name' => $referrerInfo['referer_name'], 'referer_url' => $referrerInfo['referer_url'], 'referer_keyword' => $referrerInfo['referer_keyword'], 'config_id' => $userInfo['config_id'], 'config_os' => $userInfo['config_os'], 'config_browser_name' => $userInfo['config_browser_name'], 'config_browser_version' => $userInfo['config_browser_version'], 'config_resolution' => $userInfo['config_resolution'], 'config_pdf' => $userInfo['config_pdf'], 'config_flash' => $userInfo['config_flash'], 'config_java' => $userInfo['config_java'], 'config_director' => $userInfo['config_director'], 'config_quicktime' => $userInfo['config_quicktime'], 'config_realplayer' => $userInfo['config_realplayer'], 'config_windowsmedia' => $userInfo['config_windowsmedia'], 'config_gears' => $userInfo['config_gears'], 'config_silverlight' => $userInfo['config_silverlight'], 'config_cookie' => $userInfo['config_cookie'], 'location_ip' => $this->getVisitorIp(), 'location_browser_lang' => $userInfo['location_browser_lang']); }
/** * @param Request $request * @param Visitor $visitor * @param Action|null $action * @return mixed */ public function onNewVisit(Request $request, Visitor $visitor, $action) { // Adding &dp=1 will disable the provider plugin, this is an "unofficial" parameter used to speed up log importer $disableProvider = $request->getParam('dp'); if (!empty($disableProvider)) { return false; } // if provider info has already been set, abort $locationValue = $visitor->getVisitorColumn('location_provider'); if (!empty($locationValue)) { return false; } $ip = $visitor->getVisitorColumn('location_ip'); $privacyConfig = new PrivacyManagerConfig(); if (!$privacyConfig->useAnonymizedIpForVisitEnrichment) { $ip = $request->getIp(); } $ip = IPUtils::binaryToStringIP($ip); // In case the IP was anonymized, we should not continue since the DNS reverse lookup will fail and this will slow down tracking if (substr($ip, -2, 2) == '.0') { Common::printDebug("IP Was anonymized so we skip the Provider DNS reverse lookup..."); return false; } $hostname = $this->getHost($ip); $hostnameExtension = ProviderPlugin::getCleanHostname($hostname); // add the provider value in the table log_visit $locationProvider = substr($hostnameExtension, 0, 100); return $locationProvider; }
/** * @param Request $request * @param Visitor $visitor * @param Action|null $action * @return mixed */ public function onExistingVisit(Request $request, Visitor $visitor, $action) { if ($request->getParam('ping') == 1) { return false; } return $this->onNewVisit($request, $visitor, $action); }
/** * @param Request $request * @param Visitor $visitor * @param Action|null $action * @return mixed */ public function onNewVisit(Request $request, Visitor $visitor, $action) { $resolution = $request->getParam('res'); if (!empty($resolution)) { return substr($resolution, 0, 9); } return $resolution; }
public function onLookupAction(Request $request, Action $action) { $contentTarget = $request->getParam('c_t'); $contentTarget = trim($contentTarget); if (strlen($contentTarget) > 0) { return $contentTarget; } return false; }
private function getValueForDimension(Request $request) { /** @var Action $action */ $action = $request->getMetadata('Actions', 'action'); if (in_array($this->dimension, array('url', 'urlparam'))) { if (!empty($action)) { $dimension = $action->getActionUrlRaw(); } else { $dimension = $request->getParam('url'); } } elseif ($this->dimension === 'action_name' && !empty($action)) { $dimension = $action->getActionName(); } else { $dimension = $request->getParam($this->dimension); } if (!empty($dimension)) { $dimension = Common::unsanitizeInputValue($dimension); } return $dimension; }
public function onLookupAction(Request $request, Action $action) { $contentPiece = $request->getParam('c_p'); if (empty($contentPiece)) { return false; } $contentPiece = trim($contentPiece); if (strlen($contentPiece) > 0) { return $contentPiece; } return false; }
public function onLookupAction(Request $request, Action $action) { if (!$action instanceof ActionEvent) { return false; } $eventAction = $request->getParam('e_a'); $eventAction = trim($eventAction); if (strlen($eventAction) > 0) { return $eventAction; } return false; }
/** * Check if the request is from a known spammer host. * * @param Request $request * @return bool */ public function isSpam(Request $request) { $spammers = $this->getSpammerListFromCache(); $referrerUrl = $request->getParam('urlref'); foreach ($spammers as $spammerHost) { if (stripos($referrerUrl, $spammerHost) !== false) { Common::printDebug('Referrer URL is a known spam: ' . $spammerHost); return true; } } return false; }
public function onLookupAction(Request $request, Action $action) { $interaction = $request->getParam('c_i'); if (empty($interaction)) { return false; } $interaction = trim($interaction); if (strlen($interaction) > 0) { return $interaction; } return false; }
/** * Makes the correct Action object based on the request. * * @param Request $request * @return ActionClickUrl|ActionPageview|ActionSiteSearch */ public static function factory(Request $request) { $downloadUrl = $request->getParam('download'); if (!empty($downloadUrl)) { return new ActionClickUrl(self::TYPE_DOWNLOAD, $downloadUrl, $request); } $outlinkUrl = $request->getParam('link'); if (!empty($outlinkUrl)) { return new ActionClickUrl(self::TYPE_OUTLINK, $outlinkUrl, $request); } $url = $request->getParam('url'); $eventCategory = $request->getParam('e_c'); $eventAction = $request->getParam('e_a'); if (strlen($eventCategory) > 0 && strlen($eventAction) > 0) { return new ActionEvent($eventCategory, $eventAction, $url, $request); } $action = new ActionSiteSearch($url, $request); if ($action->isSearchDetected()) { return $action; } return new ActionPageview($url, $request); }
/** * @param Request $request * @param Visitor $visitor * @param Action|null $action * @return int */ public function onConvertedVisit(Request $request, Visitor $visitor, $action) { if (!$visitor->isVisitorKnown()) { return false; } $totalTime = $visitor->getVisitorColumn('visit_total_time'); // If a pageview and goal conversion in the same second, with previously a goal conversion recorded // the request would not "update" the row since all values are the same as previous // therefore the request below throws exception, instead we make sure the UPDATE will affect the row $totalTime = $totalTime + $request->getParam('idgoal'); // +2 to offset idgoal=-1 and idgoal=0 $totalTime = $totalTime + 2; return $this->cleanupVisitTotalTime($totalTime); }
/** * Returns Items read from the request string * @return array|bool */ private function getEcommerceItemsFromRequest() { $items = Common::unsanitizeInputValue($this->request->getParam('ec_items')); if (empty($items)) { Common::printDebug("There are no Ecommerce items in the request"); // we still record an Ecommerce order without any item in it return array(); } $items = Common::json_decode($items, $assoc = true); if (!is_array($items)) { Common::printDebug("Error while json_decode the Ecommerce items = " . var_export($items, true)); return false; } $cleanedItems = $this->getCleanedEcommerceItems($items); return $cleanedItems; }
/** * Returns the campaign information, called from the child classes * @param Request $request * @return array */ protected function getCampaignInformationFromRequest(Request $request) { $currentUrl = $request->getParam('url'); return $this->getCampaignInformation($currentUrl, $request->getIdSite(), $request); }
private function isRequestEcommerce(Request $request) { $idGoal = $request->getParam('idgoal'); return 0 == $idGoal; }
protected function loadTrackerPlugins(Request $request) { // Adding &dp=1 will disable the provider plugin, if token_auth is used (used to speed up bulk imports) $disableProvider = $request->getParam('dp'); if (!empty($disableProvider)) { Tracker::setPluginsNotToLoad(array('Provider')); } try { $pluginsTracker = \Piwik\Plugin\Manager::getInstance()->loadTrackerPlugins(); Common::printDebug("Loading plugins: { " . implode(", ", $pluginsTracker) . " }"); } catch (Exception $e) { Common::printDebug("ERROR: " . $e->getMessage()); } }
public static function shouldHandle(Request $request) { $downloadUrl = $request->getParam('download'); return !empty($downloadUrl); }
public static function shouldHandle(Request $request) { $search = new self($request, false); return $search->detectSiteSearch($request->getParam('url')); }
/** * @param Request $request * @param Visitor $visitor * @param Action|null $action * @return mixed */ public function getValueForRecordGoal(Request $request, Visitor $visitor) { $referrerTimestamp = $request->getParam('_refts'); $referrerUrl = $request->getParam('_ref'); $referrerCampaignName = trim(urldecode($request->getParam('_rcn'))); $referrerCampaignKeyword = trim(urldecode($request->getParam('_rck'))); // Attributing the correct Referrer to this conversion. // Priority order is as follows: // 0) In some cases, the campaign is not passed from the JS so we look it up from the current visit // 1) Campaign name/kwd parsed in the JS // 2) Referrer URL stored in the _ref cookie // 3) If no info from the cookie, attribute to the current visit referrer Common::printDebug("Attributing a referrer to this Goal..."); // 3) Default values: current referrer $type = $visitor->getVisitorColumn('referer_type'); $name = $visitor->getVisitorColumn('referer_name'); $keyword = $visitor->getVisitorColumn('referer_keyword'); // 0) In some (unknown!?) cases the campaign is not found in the attribution cookie, but the URL ref was found. // In this case we look up if the current visit is credited to a campaign and will credit this campaign rather than the URL ref (since campaigns have higher priority) if (empty($referrerCampaignName) && $type == Common::REFERRER_TYPE_CAMPAIGN && !empty($name)) { // Use default values per above Common::printDebug("Invalid Referrer information found: current visitor seems to have used a campaign, but campaign name was not found in the request."); } elseif (!empty($referrerCampaignName)) { $type = Common::REFERRER_TYPE_CAMPAIGN; $name = $referrerCampaignName; $keyword = $referrerCampaignKeyword; Common::printDebug("Campaign information from 1st party cookie is used."); } elseif (!empty($referrerUrl)) { $idSite = $request->getIdSite(); $referrer = $this->getReferrerInformation($referrerUrl, $currentUrl = '', $idSite); // if the parsed referrer is interesting enough, ie. website or search engine if (in_array($referrer['referer_type'], array(Common::REFERRER_TYPE_SEARCH_ENGINE, Common::REFERRER_TYPE_WEBSITE))) { $type = $referrer['referer_type']; $name = $referrer['referer_name']; $keyword = $referrer['referer_keyword']; Common::printDebug("Referrer URL (search engine or website) is used."); } else { Common::printDebug("No referrer attribution found for this user. Current user's visit referrer is used."); } } else { Common::printDebug("No referrer attribution found for this user. Current user's visit referrer is used."); } $this->setCampaignValuesToLowercase($type, $name, $keyword); $fields = array('referer_type' => $type, 'referer_name' => $name, 'referer_keyword' => $keyword); if (array_key_exists($this->columnName, $fields)) { return $fields[$this->columnName]; } return false; }
/** * This method allows to set custom IP + server time + visitor ID, when using Tracking API. * These two attributes can be only set by the Super User (passing token_auth). */ protected function handleTrackingApi(Request $request) { if (!$request->isAuthenticated()) { return; } // Custom IP to use for this visitor $customIp = $request->getParam('cip'); if (!empty($customIp)) { $this->setForceIp($customIp); } // Custom server date time to use $customDatetime = $request->getParam('cdt'); if (!empty($customDatetime)) { $this->setForceDateTime($customDatetime); } }
private function isPingRequest() { return $this->request->getParam('ping') == 1; }
/** * @param Request $request * @param Visitor $visitor * @param Action|null $action * @param GoalManager $goalManager * * @return mixed|false */ public function onEcommerceOrderConversion(Request $request, Visitor $visitor, $action, GoalManager $goalManager) { return $this->roundRevenueIfNeeded($request->getParam('ec_sh')); }
public static function shouldHandle(Request $request) { $eventCategory = $request->getParam('e_c'); $eventAction = $request->getParam('e_a'); return strlen($eventCategory) > 0 && strlen($eventAction) > 0; }
protected function getReferrerCampaignQueryParam(Request $request, $paramName) { return trim(urldecode($request->getParam($paramName))); }
public static function shouldHandle(Request $request) { $outlinkUrl = $request->getParam('link'); return !empty($outlinkUrl); }
private function isManualGoalConversion(Request $request) { $idGoal = $request->getParam('idgoal'); return $idGoal > 0; }
public static function shouldHandle(Request $request) { $name = $request->getParam('c_n'); return !empty($name); }