function getScheduledTasks($notification) { // Reports have to be sent when the period ends for all websites $maxHourOffset = 0; $uniqueTimezones = Piwik_SitesManager_API::getInstance()->getUniqueSiteTimezones(); $baseDate = Piwik_Date::factory("1971-01-01"); foreach ($uniqueTimezones as &$timezone) { $offsetDate = Piwik_Date::factory($baseDate->toString(), $timezone); // Earlier means a negative timezone if ($offsetDate->isEarlier($baseDate)) { // Gets the timezone offset $hourOffset = 24 - date('H', $offsetDate->getTimestamp()); if ($hourOffset > $maxHourOffset) { $maxHourOffset = $hourOffset; } } } $tasks =& $notification->getNotificationObject(); $dailySchedule = new Piwik_ScheduledTime_Daily(); $dailySchedule->setHour($maxHourOffset); $tasks[] = new Piwik_ScheduledTask($this, 'dailySchedule', $dailySchedule); $weeklySchedule = new Piwik_ScheduledTime_Weekly(); $weeklySchedule->setHour($maxHourOffset); $tasks[] = new Piwik_ScheduledTask($this, 'weeklySchedule', $weeklySchedule); $monthlySchedule = new Piwik_ScheduledTime_Monthly(); $monthlySchedule->setHour($maxHourOffset); $tasks[] = new Piwik_ScheduledTask($this, 'monthlySchedule', $monthlySchedule); }
/** * Computes the output for the given data table * * @param Piwik_DataTable $table * @return string * @throws Exception */ protected function renderTable($table) { if (!$table instanceof Piwik_DataTable_Array || $table->getKeyName() != 'date') { throw new Exception("RSS feeds can be generated for one specific website &idSite=X." . "\nPlease specify only one idSite or consider using &format=XML instead."); } $idSite = Piwik_Common::getRequestVar('idSite', 1, 'int'); $period = Piwik_Common::getRequestVar('period'); $piwikUrl = Piwik_Url::getCurrentUrlWithoutFileName() . "?module=CoreHome&action=index&idSite=" . $idSite . "&period=" . $period; $out = ""; $moreRecentFirst = array_reverse($table->getArray(), true); foreach ($moreRecentFirst as $date => $subtable) { $timestamp = $table->metadata[$date]['timestamp']; $site = $table->metadata[$date]['site']; $pudDate = date('r', $timestamp); $dateInSiteTimezone = Piwik_Date::factory($timestamp)->setTimezone($site->getTimezone())->toString('Y-m-d'); $thisPiwikUrl = Piwik_Common::sanitizeInputValue($piwikUrl . "&date={$dateInSiteTimezone}"); $siteName = $site->getName(); $title = $siteName . " on " . $date; $out .= "\t<item>\n\t\t<pubDate>{$pudDate}</pubDate>\n\t\t<guid>{$thisPiwikUrl}</guid>\n\t\t<link>{$thisPiwikUrl}</link>\n\t\t<title>{$title}</title>\n\t\t<author>http://piwik.org</author>\n\t\t<description>"; $out .= Piwik_Common::sanitizeInputValue($this->renderDataTable($subtable)); $out .= "</description>\n\t</item>\n"; } $header = $this->getRssHeader(); $footer = $this->getRssFooter(); return $header . $out . $footer; }
protected function removeHoursInFuture($table, $idSite, $period, $date) { $site = new Piwik_Site($idSite); if( $period == 'day' && ($date == 'today' || $date == Piwik_Date::factory('now', $site->getTimezone())->toString())) { $currentHour = Piwik_Date::factory('now', $site->getTimezone())->toString('G'); // If no data for today, this is an exception to the API output rule, as we normally return nothing: // we shall return all hours of the day, with nb_visits = 0 if($table->getRowsCount() == 0) { for($hour = 0; $hour <= $currentHour; $hour++) { $table->addRowFromSimpleArray( array('label' => $hour, 'nb_visits' => 0)); } return $table; } $idsToDelete = array(); foreach($table->getRows() as $id => $row) { $hour = $row->getColumn('label'); if($hour > $currentHour) { $idsToDelete[] = $id; } } $table->deleteRows($idsToDelete); } return $table; }
/** * The advanced factory method is easier to use from the API than the factory * method above. It doesn't require an instance of Piwik_Date and works for * period=range. Generally speaking, anything that can be passed as period * and range to the API methods can directly be forwarded to this factory * method in order to get a suitable instance of Piwik_Period. * * @param string $strPeriod "day", "week", "month", "year", "range" * @param string $strDate * @return Piwik_Period */ public static function advancedFactory($strPeriod, $strDate) { if (Piwik_Archive::isMultiplePeriod($strDate, $strPeriod) || $strPeriod == 'range') { return new Piwik_Period_Range($strPeriod, $strDate); } return self::factory($strPeriod, Piwik_Date::factory($strDate)); }
public function setUp() { // add one site $this->idSite = $this->createWebsite($this->dateTime, 1, "Site #0"); // add two goals $goals = Piwik_Goals_API::getInstance(); $this->idGoal1 = $goals->addGoal($this->idSite, 'all', 'url', 'http', 'contains', false, 5); $this->idGoal2 = $goals->addGoal($this->idSite, 'all', 'url', 'http', 'contains'); $urls = array(); for ($i = 0; $i != 2; ++$i) { $url = "http://whatever.com/" . ($i - 1) . "/" . ($i + 1); $title = "page view " . ($i - 1) . " / " . ($i + 1); $urls[$url] = $title; } $visitTimes = array(); $date = Piwik_Date::factory($this->dateTime); for ($i = 0; $i != 250; ++$i) { // spread visits out through entire year $day = floor(365 * $i / 250); for ($j = 0; $j != 2; ++$j) { $visitTimes[] = $date->addDay($day)->addHour($j)->toString(); } } // add 12,000 page views (2 visits of 2 page views for 12 visitors on 250 days spread out through year) for ($visitor = 0; $visitor != 12; ++$visitor) { $t = $this->getTracker($this->idSite, $this->dateTime); foreach ($visitTimes as $visitTime) { $t->setForceVisitDateTime($visitTime); foreach ($urls as $url => $title) { $t->setUrl($url); $t->doTrackPageView($title); } } } }
/** * Builds an Archive object or returns the same archive if previously built. * * @param int $idSite * @param string|Piwik_Date $date 'YYYY-MM-DD' or magic keywords 'today' @see Piwik_Date::factory() * @param string $period 'week' 'day' etc. * * @return Piwik_Archive */ public static function build($idSite, $period, $strDate) { $oSite = new Piwik_Site($idSite); // if a period date string is detected: either 'last30', 'previous10' or 'YYYY-MM-DD,YYYY-MM-DD' if (is_string($strDate) && (ereg('^(last|previous){1}([0-9]*)$', $strDate, $regs) || ereg('^([0-9]{4}-[0-9]{1,2}-[0-9]{1,2}),([0-9]{4}-[0-9]{1,2}-[0-9]{1,2})$', $strDate, $regs))) { require_once 'Archive/Array.php'; $archive = new Piwik_Archive_Array($oSite, $period, $strDate); } else { if (is_string($strDate)) { $oDate = Piwik_Date::factory($strDate); } else { $oDate = $strDate; } $date = $oDate->toString(); if (isset(self::$alreadyBuilt[$idSite][$date][$period])) { return self::$alreadyBuilt[$idSite][$date][$period]; } $oPeriod = Piwik_Period::factory($period, $oDate); $archive = new Piwik_Archive_Single(); $archive->setPeriod($oPeriod); $archive->setSite($oSite); self::$alreadyBuilt[$idSite][$date][$period] = $archive; } return $archive; }
protected static function trackVisits() { // Visitor site1 $visitor = self::getTracker(self::$idSite1, self::$dateTime, $defaultInit = true); // Test w/ iso-8859-15 $visitor->setForceVisitDateTime(Piwik_Date::factory(self::$dateTime)->addHour(0.3)->getDatetime()); $visitor->setUrlReferrer('http://anothersite.com/whatever.html?whatever=Ato%FC'); $visitor->setUrl('http://example.org/index.htm?random=param&mykwd=Search 2%FC&test&cats= Search Category &search_count=INCORRECT!'); $visitor->setDebugStringAppend('&cs=iso-8859-15'); self::checkResponse($visitor->doTrackPageView('Site Search results')); $visitor->setDebugStringAppend(''); // Test w/ windows-1251 $visitor = self::getTracker(self::$idSite1, self::$dateTime, $defaultInit = true); $visitor->setForceVisitDateTime(Piwik_Date::factory(self::$dateTime)->addHour(0.3)->getDatetime()); $visitor->setUrlReferrer('http://anothersite.com/whatever.html?txt=%EC%E5%F8%EA%EE%E2%FB%E5'); $visitor->setUrl('http://example.org/page/index.htm?whatever=%EC%E5%F8%EA%EE%E2%FB%E5'); $visitor->setDebugStringAppend('&cs=windows-1251'); self::checkResponse($visitor->doTrackPageView('Page title is always UTF-8')); $visitor->setDebugStringAppend(''); // Test invalid char set $visitor = self::getTracker(self::$idSite1, self::$dateTime, $defaultInit = true); $visitor->setForceVisitDateTime(Piwik_Date::factory(self::$dateTime)->addHour(1)->getDatetime()); $visitor->setUrlReferrer('http://anothersite.com/whatever.html'); $visitor->setUrl('http://example.org/index.htm?random=param&mykwd=a+keyword&test&cats= Search Category &search_count=INCORRECT!'); $visitor->setDebugStringAppend('&cs=GTF-42'); // galactic transformation format self::checkResponse($visitor->doTrackPageView('Site Search results')); $visitor->setDebugStringAppend(''); }
protected static function trackVisits() { // tests run in UTC, the Tracker in UTC $dateTime = self::$dateTime; $idSite = self::$idSite; $t = self::getTracker($idSite, $dateTime, $defaultInit = true, $useThirdPartyCookie = 1); // Also testing to record this as a bot while specifically allowing bots $t->setUserAgent('Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)'); $t->DEBUG_APPEND_URL .= '&bots=1'; $t->DEBUG_APPEND_URL .= '&forceIpAnonymization=1'; // VISIT 1 = Referrer is "Keyword not defined" // Alsotrigger goal to check that attribution goes to this keyword $t->setUrlReferrer('http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CC&url=http%3A%2F%2Fpiwik.org%2F&ei=&usg='); $t->setUrl('http://example.org/this%20is%20cool!'); self::checkResponse($t->doTrackPageView('incredible title!')); $idGoal = Piwik_Goals_API::getInstance()->addGoal($idSite, 'triggered js', 'manually', '', ''); $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.3)->getDatetime()); self::checkResponse($t->doTrackGoal($idGoal, $revenue = 42)); // VISIT 2 = Referrer has keyword, but the URL should be rewritten // in Live Output to point to google search result page $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(2)->getDatetime()); $t->setUrlReferrer('http://www.google.com.vn/url?sa=t&rct=j&q=%3C%3E%26%5C%22the%20pdo%20extension%20is%20required%20for%20this%20adapter%20but%20the%20extension%20is%20not%20loaded&source=web&cd=4&ved=0FjAD&url=http%3A%2F%2Fforum.piwik.org%2Fread.php%3F2%2C1011&ei=y-HHAQ&usg=AFQjCN2-nt5_GgDeg&cad=rja'); // Test with empty title, that the output of Live is valid self::checkResponse($t->doTrackPageView('')); }
protected function setDateTodayIfWebsiteCreatedToday() { $date = Piwik_Common::getRequestVar('date', false); if($date == 'today' || Piwik_Common::getRequestVar('period', false) == 'range') { return; } $websiteId = Piwik_Common::getRequestVar('idSite', false, 'int'); if ($websiteId) { $website = new Piwik_Site($websiteId); $datetimeCreationDate = $this->site->getCreationDate()->getDatetime(); $creationDateLocalTimezone = Piwik_Date::factory($datetimeCreationDate, $website->getTimezone())->toString('Y-m-d'); $todayLocalTimezone = Piwik_Date::factory('now', $website->getTimezone())->toString('Y-m-d'); if( $creationDateLocalTimezone == $todayLocalTimezone ) { Piwik::redirectToModule( 'CoreHome', 'index', array( 'date' => 'today', 'idSite' => $websiteId, 'period' => Piwik_Common::getRequestVar('period')) ); } } }
/** * @group Core * @group Period * @group Period_Year */ public function testGetPrettyString() { Piwik_Translate::getInstance()->loadEnglishTranslation(); $year = new Piwik_Period_Year(Piwik_Date::factory('2024-10-09')); $shouldBe = '2024'; $this->assertEquals($shouldBe, $year->getPrettyString()); }
protected function trackVisits() { $dateTime = $this->dateTime; $idSite = $this->idSite; $idGoal_OneConversionPerVisit = $this->idGoal_OneConversionPerVisit; $idGoal_MultipleConversionPerVisit = $this->idGoal_MultipleConversionPerVisit; $t = $this->getTracker($idSite, $dateTime, $defaultInit = true); // Record 1st goal, should only have 1 conversion $t->setUrl('http://example.org/index.htm'); $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.3)->getDatetime()); $this->checkResponse($t->doTrackPageView('Thank you mate')); $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.4)->getDatetime()); $this->checkResponse($t->doTrackGoal($idGoal_OneConversionPerVisit, $revenue = 10000000)); // Record 2nd goal, should record both conversions $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.5)->getDatetime()); $this->checkResponse($t->doTrackGoal($idGoal_MultipleConversionPerVisit, $revenue = 300)); $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.6)->getDatetime()); $this->checkResponse($t->doTrackGoal($idGoal_MultipleConversionPerVisit, $revenue = 366)); // Update & set to not allow multiple $goals = Piwik_Goals_API::getInstance()->getGoals($idSite); $goal = $goals[$idGoal_OneConversionPerVisit]; $this->assertTrue($goal['allow_multiple'] == 0); Piwik_Goals_API::getInstance()->updateGoal($idSite, $idGoal_OneConversionPerVisit, $goal['name'], @$goal['match_attribute'], @$goal['pattern'], @$goal['pattern_type'], @$goal['case_sensitive'], $goal['revenue'], $goal['allow_multiple'] = 1); $this->assertTrue($goal['allow_multiple'] == 1); // 1st goal should Now be tracked $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.61)->getDatetime()); $this->checkResponse($t->doTrackGoal($idGoal_OneConversionPerVisit, $revenue = 656)); }
protected static function trackVisits() { $dateTimes = self::$dateTimes; $idSite = self::$idSite; $i = 0; $ridx = 0; foreach ($dateTimes as $dateTime) { $i++; $visitor = self::getTracker($idSite, $dateTime, $defaultInit = true); // Fake the visit count cookie $visitor->setDebugStringAppend("&_idvc={$i}"); $visitor->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.1)->getDatetime()); $visitor->setUrl('http://example.org/homepage'); $visitor->setUrlReferrer(self::$referrerUrls[$ridx++]); self::checkResponse($visitor->doTrackPageView('ou pas')); // Test change the IP, the visit should not be split but recorded to the same idvisitor $visitor->setIp('200.1.15.22'); $visitor->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.2)->getDatetime()); $visitor->setUrl('http://example.org/news'); self::checkResponse($visitor->doTrackPageView('ou pas')); $visitor->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(1)->getDatetime()); $visitor->setUrl('http://example.org/news'); $visitor->setUrlReferrer(self::$referrerUrls[$ridx++]); self::checkResponse($visitor->doTrackPageView('ou pas')); } }
public function setUp() { // add one site $this->idSite = $this->createWebsite($this->dateTime, 1, "Site #0"); // add two goals $goals = Piwik_Goals_API::getInstance(); $this->idGoal1 = $goals->addGoal($this->idSite, 'all', 'url', 'http', 'contains', false, 5); $this->idGoal2 = $goals->addGoal($this->idSite, 'all', 'url', 'http', 'contains'); $urls = array(); for ($i = 0; $i != 10; ++$i) { $url = "http://whatever.com/" . ($i - 1) . "/" . ($i + 1); $title = "page view " . ($i - 1) . " / " . ($i + 1); $urls[$url] = $title; } $visitTimes = array(); $date = Piwik_Date::factory($this->dateTime); for ($i = 0; $i != 12; ++$i) { $visitTimes[] = $date->addHour($i)->toString(); } // add 10,000 page views (10 visits of 10 page views for 100 visitors) for ($visitor = 0; $visitor != 100; ++$visitor) { $t = $this->getTracker($this->idSite, $this->dateTime, $defaultInit = true); foreach ($visitTimes as $visitTime) { $t->setForceVisitDateTime($visitTime); foreach ($urls as $url => $title) { $t->setUrl($url); $t->doTrackPageView($title); } } } }
protected function trackVisits() { $idSite = $this->idSite; $dateTime = $this->dateTime; $t = $this->getTracker($idSite, $dateTime, $defaultInit = true); // Record 1st page view $t->setUrl('http://example.org/index.htm'); $this->checkResponse($t->doTrackPageView('incredible title!')); $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.3)->getDatetime()); $this->checkResponse($t->doTrackGoal($this->idGoal3, $revenue = 42.256)); }
public function getSitesInfo() { $view = new Piwik_View("MultiSites/templates/index.tpl"); $mySites = Piwik_SitesManager_API::getInstance()->getSitesWithAtLeastViewAccess(); $params = $this->getGraphParamsModified(); $this->dateToStr = $params['date']; $ids = 'all'; $this->period = Piwik_Common::getRequestVar('period', 'day'); $this->date = Piwik_Common::getRequestVar('date', 'today'); $lastDate = date('Y-m-d', strtotime("-1 " . $this->period, strtotime($this->date))); $visits = Piwik_VisitsSummary_API::getInstance()->getVisits($ids, $this->period, $this->date); $lastVisits = Piwik_VisitsSummary_API::getInstance()->getVisits($ids, $this->period, $lastDate); $actions = Piwik_VisitsSummary_API::getInstance()->getActions($ids, $this->period, $this->date); $lastActions = Piwik_VisitsSummary_API::getInstance()->getActions($ids, $this->period, $lastDate); $uniqueUsers = Piwik_VisitsSummary_API::getInstance()->getUniqueVisitors($ids, $this->period, $this->date); $lastUniqueUsers = Piwik_VisitsSummary_API::getInstance()->getUniqueVisitors($ids, $this->period, $lastDate); $visitsSummary = $this->getSummary($lastVisits, $visits, $mySites, "visits"); $actionsSummary = $this->getSummary($lastActions, $actions, $mySites, "actions"); $uniqueSummary = $this->getSummary($lastUniqueUsers, $uniqueUsers, $mySites, "unique"); $visitsArray = $visits->getArray(); $actionsArray = $actions->getArray(); $uniqueUsersArray = $uniqueUsers->getArray(); $lastVisitsArray = $lastVisits->getArray(); $lastActionsArray = $lastActions->getArray(); $lastUniqueUsersArray = $lastUniqueUsers->getArray(); foreach ($mySites as &$site) { $idSite = $site['idsite']; $site['visits'] = array_shift($visitsArray[$idSite]->getColumn(0)); $site['actions'] = array_shift($actionsArray[$idSite]->getColumn(0)); $site['unique'] = array_shift($uniqueUsersArray[$idSite]->getColumn(0)); $site['lastVisits'] = array_shift($lastVisitsArray[$idSite]->getColumn(0)); $site['lastActions'] = array_shift($lastActionsArray[$idSite]->getColumn(0)); $site['lastUnique'] = array_shift($lastUniqueUsersArray[$idSite]->getColumn(0)); $site['visitsSummaryValue'] = $visitsSummary[$idSite]; $site['actionsSummaryValue'] = $actionsSummary[$idSite]; $site['uniqueSummaryValue'] = $uniqueSummary[$idSite]; } $view->mySites = $mySites; $view->evolutionBy = $this->evolutionBy; $view->period = $this->period; $view->date = $this->date; $view->page = $this->page; $view->limit = $this->limit; $view->orderBy = $this->orderBy; $view->order = $this->order; $view->dateToStr = $this->dateToStr; $this->setGeneralVariablesView($view); $minTimestamp = Zend_Registry::get('access')->getSitesMinDate(); if (!empty($minTimestamp)) { $minDate = Piwik_Date::factory($minTimestamp); $this->setMinDateView($minDate, $view); } echo $view->render(); }
protected function generate() { if ($this->subperiodsProcessed) { return; } parent::generate(); $year = $this->date->get("Y"); for ($i = 1; $i <= 12; $i++) { $this->addSubperiod(new Piwik_Period_Month(Piwik_Date::factory("{$year}-{$i}-01"))); } }
protected function trackVisits() { $dateTime = $this->today; $idSite = $this->idSite; for ($daysIntoPast = 30; $daysIntoPast >= 0; $daysIntoPast--) { $visitDateTime = Piwik_Date::factory($dateTime)->subDay($daysIntoPast)->getDatetime(); $t = $this->getTracker($idSite, $visitDateTime, $defaultInit = true); $t->setUrlReferrer('http://www.referrer' . $daysIntoPast % 5 . '.com/theReferrerPage' . $daysIntoPast % 2 . '.html'); $t->setUrl('http://example.org/my/dir/page' . $daysIntoPast % 4); $t->setForceVisitDateTime($visitDateTime); $this->checkResponse($t->doTrackPageView('incredible title ' . $daysIntoPast % 3)); } }
/** * Builds the controller object, reads the date from the request, extracts plugin name from * */ function __construct() { $aPluginName = explode('_', get_class($this)); $this->pluginName = $aPluginName[1]; $this->strDate = Piwik_Common::getRequestVar('date', 'yesterday', 'string'); // the date looks like YYYY-MM-DD we can build it try { $this->date = Piwik_Date::factory($this->strDate); $this->strDate = $this->date->toString(); } catch (Exception $e) { // the date looks like YYYY-MM-DD,YYYY-MM-DD or other format // case the date looks like a range $this->date = null; } }
protected function setDateTodayIfWebsiteCreatedToday() { $date = Piwik_Common::getRequestVar('date', false); $date = Piwik_Date::factory($date); if ($date->isToday()) { return; } $websiteId = Piwik_Common::getRequestVar('idSite', false); if ($websiteId) { $website = new Piwik_Site($websiteId); if ($website->getCreationDate()->isToday()) { Piwik::redirectToModule('CoreHome', 'index', array('date' => 'today', 'idSite' => $websiteId, 'period' => Piwik_Common::getRequestVar('period'))); } } }
private static function getCleanedVisitorsFromDetails($visitorDetails) { $table = new Piwik_DataTable(); foreach ($visitorDetails as $visitorDetail) { self::cleanVisitorDetails($visitorDetail); $visitor = new Piwik_Live_Visitor($visitorDetail); $visitorDetailsArray = $visitor->getAllVisitorDetails(); $dateTimeVisit = Piwik_Date::factory($visitorDetailsArray['firstActionTimestamp']); //TODO TO FIX $visitorDetailsArray['serverDatePretty'] = $dateTimeVisit->getLocalized('%shortDay% %day% %shortMonth%'); $visitorDetailsArray['serverTimePretty'] = $dateTimeVisit->getLocalized('%time%'); $table->addRowFromArray(array(Piwik_DataTable_Row::COLUMNS => $visitorDetailsArray)); } return $table; }
protected function removeHoursInFuture($table, $idSite, $period, $date) { $site = new Piwik_Site($idSite); if ($period == 'day' && ($date == 'today' || $date == Piwik_Date::factory('now', $site->getTimezone())->toString())) { $currentHour = Piwik_Date::factory('now', $site->getTimezone())->toString('G'); $idsToDelete = array(); foreach ($table->getRows() as $id => $row) { $hour = $row->getColumn('label'); if ($hour > $currentHour) { $idsToDelete[] = $id; } } $table->deleteRows($idsToDelete); } return $table; }
/** * Returns array of counts and images based on Feedburner URI * * @param string $uri * @return array() */ protected function getFeedData($uri) { // Awareness API only supports yesterday and back; // we get stats for previous two days; // @see http://code.google.com/apis/feedburner/awareness_api.html#dates $yesterday = Piwik_Date::factory('-1 day', 'America/Los_Angeles'); $beforeYesterday = Piwik_Date::factory('-2 day', 'America/Los_Angeles'); //create url to gather XML feed from $url = 'https://feedburner.google.com/api/awareness/1.0/GetFeedData?uri=' . $uri . '&dates=' . $beforeYesterday->toString() . ',' . $yesterday->toString(); $data = ''; try { $data = Piwik_Http::sendHttpRequest($url, 5); // Feedburner errors are malformed if (strpos($data, 'The server encountered a temporary error') !== false) { throw new Exception('Unexpected Feedburner response'); } $xml = new SimpleXMLElement($data); } catch (Exception $e) { return "Error parsing the data for feed <a href='http://feeds.feedburner.com/{$uri}' target='_blank'>{$uri}</a>. Fetched data was: \n'" . $data . "'"; } if (count($xml->feed->entry) != 2) { return "Feedburner stats didn't return as expected. \n" . strip_tags($data); } $data = array(); $i = 0; foreach ($xml->feed->entry as $feedDay) { $data[0][$i] = (int) $feedDay['circulation']; $data[1][$i] = (int) $feedDay['hits']; $data[2][$i] = (int) $feedDay['reach']; $i++; } foreach ($data as $key => $value) { if ($value[0] == $value[1]) { $img = 'stop.png'; } else { if ($value[0] < $value[1]) { $img = 'arrow_up.png'; } else { $img = 'arrow_down.png'; } } $prefixImage = '<img alt="" src="./plugins/MultiSites/images/'; $suffixImage = '" />'; $data[$key][2] = $prefixImage . $img . $suffixImage; } return $data; }
public function setUp() { $sitesManager = Piwik_SitesManager_API::getInstance(); $goals = Piwik_Goals_API::getInstance(); // add one thousand sites $allIdSites = array(); for ($i = 0; $i < 1000; ++$i) { $allIdSites[] = IntegrationTestCase::createWebsite($this->date, $ecommerce = 1, $siteName = "Site #{$i}"); } // add goals to 500 sites $idGoals = array(); foreach ($allIdSites as $idSite) { if ($idSite % 2 == 0) { $idGoal1 = $goals->addGoal($idSite, 'all', 'url', 'http', 'contains', false, 5); $idGoal2 = $goals->addGoal($idSite, 'all', 'url', 'http', 'contains'); $idGoals[$idSite] = array($idGoal1, $idGoal2); } else { $idGoals[$idSite] = array(); } } $urls = array(); for ($i = 0; $i != 3; ++$i) { $url = "http://whatever.com/" . ($i - 1) . "/" . ($i + 1); $title = "page view " . ($i - 1) . " / " . ($i + 1); $urls[$url] = $title; } $visitTimes = array(); $date = Piwik_Date::factory($this->date); for ($i = 0; $i != 4; ++$i) { $visitTimes[] = $date->addHour($i)->getDatetime(); } // add 12000 visits (3 visitors with 4 visits each for each site) w/ 3 pageviews each on one day foreach ($visitTimes as $visitTime) { foreach ($allIdSites as $idSite) { for ($visitor = 0; $visitor != 3; ++$visitor) { $t = BenchmarkTestCase::getLocalTracker($this->idSite); $ip = "157.5.6." . ($visitor + 1); $t->setIp($ip); $t->setForceVisitDateTime($visitTime); foreach ($urls as $url => $title) { $t->setUrl($url); $t->doTrackPageView($title); } } } } }
public function setUp() { $this->idSite = $this->createWebsite($this->dateTime, 1, "Site #0"); // add one goal $this->idGoal = Piwik_Goals_API::getInstance()->addGoal($this->idSite, 'all', 'url', 'http', 'contains'); for ($i = 0; $i != 10; ++$i) { $this->urls[] = "http://whatever.com/" . ($i - 1) . "/" . ($i + 1); $this->titles[] = "page view " . ($i - 1) . " / " . ($i + 1); } $this->tracker = $this->getTracker($this->idSite, $this->dateTime); $date = Piwik_Date::factory($this->dateTime); for ($i = 0; $i != 10; ++$i) { for ($j = 0; $j != 10; ++$j) { $this->visitDates[] = $date->addDay($i)->addHour($j)->toString(); } } }
protected function trackVisits() { $dateTime = $this->dateTime; $idSite = $this->idSite; $idGoal = $this->idGoal; $t = $this->getTracker($idSite, $dateTime, $defaultInit = true); // Record 1st page view $t->setUrl('http://example.org/index.htm?utm_campaign=GA Campaign&piwik_kwd=Piwik kwd&utm_term=GA keyword SHOULD NOT DISPLAY#pk_campaign=NOT TRACKED!!&pk_kwd=NOT TRACKED!!'); $this->checkResponse($t->doTrackPageView('incredible title!')); $visitorId = $t->getVisitorId(); $this->assertTrue(strlen($visitorId) == 16); // test setting/getting the first party cookie via the PHP Tracking Client $_COOKIE['_pk_id_1_1fff'] = 'ca0afe7b6b692ff5.1302307497.1.1302307497.1302307497'; $_COOKIE['_pk_ref_1_1fff'] = '["YEAH","RIGHT!",1302307497,"http://referrer.example.org/page/sub?query=test&test2=test3"]'; $_COOKIE['_pk_cvar_1_1fff'] = '{"1":["VAR 1 set, var 2 not set","yes"],"3":["var 3 set","yes!!!!"]}'; $this->assertTrue($t->getVisitorId() == 'ca0afe7b6b692ff5'); $this->assertTrue($t->getAttributionInfo() == $_COOKIE['_pk_ref_1_1fff']); $this->assertTrue($t->getCustomVariable(1) == array("VAR 1 set, var 2 not set", "yes")); $this->assertTrue($t->getCustomVariable(2) == false); $this->assertTrue($t->getCustomVariable(3) == array("var 3 set", "yes!!!!")); $this->assertTrue($t->getCustomVariable(4) == false); $this->assertTrue($t->getCustomVariable(5) == false); $this->assertTrue($t->getCustomVariable(6) == false); $this->assertTrue($t->getCustomVariable(-1) == false); unset($_COOKIE['_pk_id_1_1fff']); unset($_COOKIE['_pk_ref_1_1fff']); unset($_COOKIE['_pk_cvar_1_1fff']); // Create a new Tracker object, with different attributes $t2 = $this->getTracker($idSite, $dateTime, $defaultInit = false); // Make sure the ID is different at first $visitorId2 = $t2->getVisitorId(); $this->assertTrue($visitorId != $visitorId2); // Then force the visitor ID $t2->setVisitorId($visitorId); // And Record a Goal: The previous visit should be updated rather than a new visit Created $t2->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.3)->getDatetime()); $this->checkResponse($t2->doTrackGoal($idGoal, $revenue = 42.256)); // Yet another visitor, this time with a manual goal conversion, which should be credited to the campaign $t3 = $this->getTracker($idSite, $dateTime); $t3->setUrlReferrer('http://example.org/referrer'); $t3->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(1.3)->getDatetime()); // fake a website ref cookie, the campaign should be credited for conversion, not referrer.example.com nor example.org $t3->DEBUG_APPEND_URL = '&_ref=http%3A%2F%2Freferrer.example.com%2Fpage%2Fsub%3Fquery%3Dtest%26test2%3Dtest3'; $t3->setUrl('http://example.org/index.htm#pk_campaign=CREDITED TO GOAL PLEASE'); $this->checkResponse($t3->doTrackGoal($idGoal, 42)); }
protected function renderTable($table) { if(!($table instanceof Piwik_DataTable_Array) || $table->getKeyName() != 'date') { throw new Exception("RSS Feed only used on Piwik_DataTable_Array with keyName = 'date'"); } $idSite = Piwik_Common::getRequestVar('idSite', 1, 'int'); $period = Piwik_Common::getRequestVar('period'); $piwikUrl = Piwik_Url::getCurrentUrlWithoutFileName() . "?module=CoreHome&action=index&idSite=" . $idSite . "&period=" . $period; $out = ""; $moreRecentFirst = array_reverse($table->getArray(), true); foreach($moreRecentFirst as $date => $subtable ) { $timestamp = $table->metadata[$date]['timestamp']; $site = $table->metadata[$date]['site']; $pudDate = date('r', $timestamp); $dateInSiteTimezone = Piwik_Date::factory($timestamp)->setTimezone($site->getTimezone())->toString('Y-m-d'); $thisPiwikUrl = Piwik_Common::sanitizeInputValue($piwikUrl . "&date=$dateInSiteTimezone"); $siteName = $site->getName(); $title = $siteName . " on ". $date; $out .= "\t<item> <pubDate>$pudDate</pubDate> <guid>$thisPiwikUrl</guid> <link>$thisPiwikUrl</link> <title>$title</title> <author>http://piwik.org</author> <description>"; $out .= Piwik_Common::sanitizeInputValue( $this->renderDataTable($subtable) ); $out .= "</description>\n\t</item>\n"; } $header = $this->getRssHeader(); $footer = $this->getRssFooter(); return $header . $out . $footer; }
public function setUp() { // add one thousand sites for ($i = 0; $i < 1000; ++$i) { $this->idSites[] = $this->createWebsite($this->dateTime, 1, "Site #{$i}"); } // add goals to 500 sites $goals = Piwik_Goals_API::getInstance(); foreach ($this->idSites as $idSite) { if ($idSite % 2 == 0) { $idGoal1 = $goals->addGoal($idSite, 'all', 'url', 'http', 'contains', false, 5); $idGoal2 = $goals->addGoal($idSite, 'all', 'url', 'http', 'contains'); $idGoals[$idSite] = array($idGoal1, $idGoal2); } else { $this->idGoals[$idSite] = array(); } } $urls = array(); for ($i = 0; $i != 2; ++$i) { $url = "http://whatever.com/" . ($i - 1) . "/" . ($i + 1); $title = "page view " . ($i - 1) . " / " . ($i + 1); $urls[$url] = $title; } $visitTimes = array(); $date = Piwik_Date::factory($this->dateTime); for ($i = 0; $i != 2; ++$i) { $visitTimes[] = $date->addHour($i)->toString(); } // add 12 page views per site (2 visit w/ 2 page views for 3 visitors) foreach ($this->idSites as $idSite) { for ($visitor = 0; $visitor != 3; ++$visitor) { $t = $this->getTracker($idSite, $this->dateTime); foreach ($visitTimes as $visitTime) { $t->setForceVisitDateTime($visitTime); foreach ($urls as $url => $title) { $t->setUrl($url); $t->doTrackPageView($title); } } } } }
protected static function trackVisits() { $dateTime = self::$dateTime; $idSite = self::$idSite; for ($referrerSite = 1; $referrerSite < 4; $referrerSite++) { for ($referrerPage = 1; $referrerPage < 3; $referrerPage++) { $offset = $referrerSite * 3 + $referrerPage; $t = self::getTracker($idSite, Piwik_Date::factory($dateTime)->addHour($offset)->getDatetime()); $t->setUrlReferrer('http://www.referrer' . $referrerSite . '.com/sub/dir/page' . $referrerPage . '.html'); $t->setCustomVariable(1, 'CustomVarVisit', 'CustomVarValue' . $referrerPage, 'visit'); for ($page = 0; $page < 3; $page++) { $t->setUrl('http://example.org/dir' . $referrerSite . '/sub/dir/page' . $page . '.html'); $t->setCustomVariable(1, 'CustomVarPage', 'CustomVarValue' . $page, 'page'); self::checkResponse($t->doTrackPageView('title')); } } } $t = self::getTracker($idSite, Piwik_Date::factory($dateTime)->addHour(24)->getDatetime()); $t->setCustomVariable(1, 'CustomVarVisit', 'CustomVarValue1', 'visit'); $t->setUrl('http://example.org/sub/dir/dir1/page1.html'); $t->setCustomVariable(1, 'CustomVarPage', 'CustomVarValue1', 'page'); self::checkResponse($t->doTrackPageView('title')); }
protected function trackVisits() { $dateTime = $this->dateTime; $idSite = $this->idSite; $t = $this->getTracker($idSite, $dateTime, $defaultInit = true); $t->setUrlReferrer('http://www.google.com.vn/url?sa=t&rct=j&q=%3C%3E%26%5C%22the%20pdo%20extension%20is%20required%20for%20this%20adapter%20but%20the%20extension%20is%20not%20loaded&source=web&cd=4&ved=0FjAD&url=http%3A%2F%2Fforum.piwik.org%2Fread.php%3F2%2C1011&ei=y-HHAQ&usg=AFQjCN2-nt5_GgDeg&cad=rja'); $t->setUrl('http://example.org/%C3%A9%C3%A9%C3%A9%22%27...%20%3Cthis%20is%20cool%3E!'); $this->checkResponse($t->doTrackPageView('incredible title! <>,;')); $t->setUrl('http://example.org/dir/file.php?foo=bar&foo2=bar'); $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.2)->getDatetime()); $this->checkResponse($t->doTrackPageView('incredible title! <>,;')); $t->setUrl('http://example.org/dir/file.php?foo=bar&foo2=bar2'); $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.3)->getDatetime()); $this->checkResponse($t->doTrackPageView('incredible parent title! <>,; / subtitle <>,;')); $t->setUrl('http://example.org/dir2/file.php?foo=bar&foo2=bar'); $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.4)->getDatetime()); $this->checkResponse($t->doTrackPageView('incredible title! <>,;')); $t->setUrl('http://example.org/dir2/sub/0/file.php'); $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.4)->getDatetime()); $this->checkResponse($t->doTrackPageView('incredible title! <>,;')); $t->setUrl('http://example.org/0'); $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.4)->getDatetime()); $this->checkResponse($t->doTrackPageView('I am URL zero!')); }
protected function trackVisits() { $dateTime = $this->dateTime; $idSite = $this->idSite; $t = $this->getTracker($idSite, $dateTime, $defaultInit = true, $useThirdPartyCookie = 1); $t->setUrlReferrer('http://www.google.com/search?q=piwik'); $t->setUrl('http://example.org/foo/bar.html'); $this->checkResponse($t->doTrackPageView('http://incredible.title/')); $t->setUrl('https://example.org/foo/bar.html'); $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.2)->getDatetime()); $this->checkResponse($t->doTrackPageView('https://incredible.title/')); $t->setUrl('https://wWw.example.org/foo/bar2.html'); $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.3)->getDatetime()); $this->checkResponse($t->doTrackPageView('http://www.incredible.title/')); $t->setUrl('http://WwW.example.org/foo/bar2.html'); $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.4)->getDatetime()); $this->checkResponse($t->doTrackPageView('https://www.incredible.title/')); $t->setUrl('http://www.example.org/foo/bar3.html'); $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.5)->getDatetime()); $this->checkResponse($t->doTrackPageView('incredible.title/')); $t->setUrl('https://example.org/foo/bar4.html'); $t->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.6)->getDatetime()); $this->checkResponse($t->doTrackPageView('incredible.title/')); }