Example #1
0
 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);
 }
Example #2
0
 /**
  * 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;
 }
Example #3
0
	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;
	}
Example #4
0
 /**
  * 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);
             }
         }
     }
 }
Example #6
0
 /**
  * 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;
 }
Example #7
0
 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(''));
 }
Example #9
0
	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')) 
				);
			}
		}
	}
Example #10
0
 /**
  * @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));
 }
Example #15
0
 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();
 }
Example #16
0
 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));
     }
 }
Example #18
0
 /**
  * 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;
     }
 }
Example #19
0
 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')));
         }
     }
 }
Example #20
0
 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;
 }
Example #21
0
 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;
 }
Example #22
0
 /**
  * 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));
 }
Example #26
0
	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);
                 }
             }
         }
     }
 }
Example #28
0
 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'));
 }
Example #29
0
 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/'));
 }