Skip to content
Extraits de code Groupes Projets
Valider ad4eaf13 rédigé par mattpiwik's avatar mattpiwik
Parcourir les fichiers

Fixes #3636 Hopefully I haven't broken anything!

Added new parmeter &pattern= to MultiSites.getAll

Thomas let me know if any feedback on this!

git-svn-id: http://dev.piwik.org/svn/trunk@7717 59fd770c-687e-43c8-a1e3-f5a4ff64c105
parent 68fb458f
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
Affichage de
avec 229 ajouts et 67 suppressions
......@@ -217,8 +217,8 @@ abstract class Piwik_Archive
}
// idSite=1,3 or idSite=all
if( count($sites) > 1
|| $idSite === 'all' )
if( $idSite === 'all'
|| is_array($idSite) )
{
$archive = new Piwik_Archive_Array_IndexedBySite($sites, $period, $strDate, $segment, $_restrictSitesToLogin);
}
......@@ -455,10 +455,10 @@ abstract class Piwik_Archive
static public function isMultiplePeriod($dateString, $period)
{
return (preg_match('/^(last|previous){1}([0-9]*)$/D', $dateString, $regs)
|| Piwik_Period_Range::parseDateRange($dateString))
&& $period != 'range';
|| Piwik_Period_Range::parseDateRange($dateString))
&& $period != 'range';
}
/**
* Indicate if $idSiteString corresponds to multiple sites.
*
......
......@@ -1639,10 +1639,12 @@ class Piwik
'Real Time Web Analytics',
'Analytics',
'Real Time Analytics',
'Analytics in Real time',
'Open Source Analytics',
'Open Source Web Analytics',
'Free Website Analytics',
'Free Web Analytics',
'Analytics Platform',
);
$id = abs(intval(md5(Piwik_Url::getCurrentHost())));
$title = $titles[ $id % count($titles)];
......
......@@ -96,22 +96,51 @@ class Piwik_MultiSites_API
* @param bool|string $_restrictSitesToLogin Hack used to enforce we restrict the returned data to the specified username
* Only used when a scheduled task is running
* @param bool|string $enhanced When true, return additional goal & ecommerce metrics
* @param bool|string $pattern If specified, only the website which names (or site ID) match the pattern will be returned using SitesManager.getPatternMatchSites
* @return Piwik_DataTable
*/
public function getAll($period, $date, $segment = false, $_restrictSitesToLogin = false, $enhanced = false)
public function getAll($period, $date, $segment = false, $_restrictSitesToLogin = false, $enhanced = false, $pattern = false)
{
Piwik::checkUserHasSomeViewAccess();
$idSites = $this->getSitesIdFromPattern($pattern);
return $this->buildDataTable(
'all',
$idSites,
$period,
$date,
$segment,
$_restrictSitesToLogin,
$enhanced
$enhanced,
$multipleWebsitesRequested = true
);
}
/**
* Fetches the list of sites which names match the string pattern
*
* @param $pattern
* @return array|string
*/
private function getSitesIdFromPattern($pattern)
{
$idSites = 'all';
if (!empty($pattern)) {
$sites = Piwik_API_Request::processRequest('SitesManager.getPatternMatchSites',
array('pattern' => $pattern,
// added because caller could overwrite these
'serialize' => 0,
'format' => 'original'));
if (!empty($sites)) {
$idSites = array();
foreach ($sites as $site) {
$idSites[] = $site['idsite'];
}
}
}
return $idSites;
}
/**
* Same as getAll but for a unique Piwik site
* @see Piwik_MultiSites_API::getAll()
......@@ -127,21 +156,21 @@ class Piwik_MultiSites_API
*/
public function getOne($idSite, $period, $date, $segment = false, $_restrictSitesToLogin = false, $enhanced = false)
{
Piwik::checkUserHasSomeViewAccess();
Piwik::checkUserHasViewAccess($idSite);
return $this->buildDataTable(
$idSite,
$period,
$date,
$segment,
$_restrictSitesToLogin,
$enhanced
$enhanced,
$multipleWebsitesRequested = false
);
}
private function buildDataTable($sites, $period, $date, $segment, $_restrictSitesToLogin, $enhanced)
private function buildDataTable($sites, $period, $date, $segment, $_restrictSitesToLogin, $enhanced, $multipleWebsitesRequested)
{
$allWebsitesRequested = $sites == 'all';
$allWebsitesRequested = ($sites == 'all');
if($allWebsitesRequested)
{
if (Piwik::isUserIsSuperUser()
......@@ -192,7 +221,8 @@ class Piwik_MultiSites_API
$dataTable = $archive->getDataTableFromNumeric($fieldsToGet);
// get rid of the DataTable_Array that is created by the IndexedBySite archive type
if($dataTable instanceof Piwik_DataTable_Array && $allWebsitesRequested)
if($dataTable instanceof Piwik_DataTable_Array
&& $multipleWebsitesRequested)
{
$dataTable = $dataTable->mergeChildren();
}
......@@ -204,7 +234,7 @@ class Piwik_MultiSites_API
$firstDataTableRow->setColumn('label', $sites);
}
}
// calculate total visits/actions/revenue
$this->setMetricsTotalsMetadata($dataTable, $apiMetrics);
......@@ -231,7 +261,6 @@ class Piwik_MultiSites_API
// put there is put directly in Piwik_DataTable::metadata.
$dataTable->setMetadata(self::getLastPeriodMetadataName('date'), $lastPeriod);
}
$pastArchive = Piwik_Archive::build('all', $period, $strLastDate, $segment, $_restrictSitesToLogin);
$pastData = $pastArchive->getDataTableFromNumeric($fieldsToGet);
......@@ -268,7 +297,7 @@ class Piwik_MultiSites_API
$dataTable->filter('ColumnCallbackAddMetadata', array('label', 'idsite'));
// set the label of each row to the site name
if($allWebsitesRequested)
if($multipleWebsitesRequested)
{
$getNameFor = array('Piwik_Site', 'getNameFor');
$dataTable->filter('ColumnCallbackReplace', array('label', $getNameFor));
......@@ -286,7 +315,7 @@ class Piwik_MultiSites_API
// filter rows without visits
// note: if only one website is queried and there are no visits, we can not remove the row otherwise Piwik_API_ResponseBuilder throws 'Call to a member function getColumns() on a non-object'
if($allWebsitesRequested)
if($multipleWebsitesRequested)
{
$dataTable->filter(
'ColumnCallbackDeleteRow',
......
......@@ -8,7 +8,11 @@
*/
/**
* testing period=range use case. Recording data before and after, checking that the requested range is processed correctly
* Use case testing various important features:
* - Test Multisites API use cases
* - testing period=range use case.
* - Recording data before and after, checking that the requested range is processed correctly
* - and more
*/
class Test_Piwik_Integration_OneVisitorOneWebsite_SeveralDaysDateRange extends IntegrationTestCase
{
......@@ -19,7 +23,8 @@ class Test_Piwik_Integration_OneVisitorOneWebsite_SeveralDaysDateRange extends I
'2011-01-15 01:00:00',
'2011-01-16 01:00:00',
);
protected static $idSite = 1;
protected static $idSite = 1;
protected static $idSite2 = 2;
// one per visit
protected static $referrerUrls = array(
......@@ -60,19 +65,37 @@ class Test_Piwik_Integration_OneVisitorOneWebsite_SeveralDaysDateRange extends I
public function getApiForTesting()
{
return array(
// FIRST some MultiSites API goodness!
// range test
array('MultiSites.getAll', array('idSite' => self::$idSite,
'date' => '2010-12-15,2011-01-15',
'periods' => array('range'))),
array('MultiSites.getAll', array( 'date' => '2010-12-15,2011-01-15',
'periods' => array('range')
// Testing without &pattern= so should return all sites
)),
// test several dates (tests use of IndexedByDate w/ 'date1,date2,etc.')
array('MultiSites.getAll', array('idSite' => self::$idSite,
'date' => '2010-12-10',
array('MultiSites.getAll', array('date' => '2010-12-15',
'periods' => array('day'),
'setDateLastN' => true,
'testSuffix' => '_IndexedByDate')),
// test socials
'testSuffix' => '_IndexedByDate',
// Testing the pattern to getAll restrict websites using name matching
'otherRequestParameters' => array('pattern' => 'aAa')
)),
// todo: test getOne call used in MobileMessaging SMS reports
array('MultiSites.getOne', array( 'date' => '2010-12-15,2011-01-15',
'periods' => array('range'),
'idSite' => self::$idSite,
// Testing without &pattern= so should return all sites
)),
// test that multiple periods are not supported
array('MultiSites.getAll', array( 'date' => '2010-12-15,2011-01-15',
'periods' => array('day'),
'testSuffix' => '_MultipleDatesNotSupported',
)),
//---------------------------------------
// THEN some Socials tests. Share these...
array('Referers.getSocials', array('idSite' => 'all',
'date' => '2010-12-13,2011-01-18',
'periods' => array('range'))),
......@@ -88,7 +111,7 @@ class Test_Piwik_Integration_OneVisitorOneWebsite_SeveralDaysDateRange extends I
'periods' => 'range',
'testSuffix' => '_noIdSubtable')),
array('Referers.getUrlsForSocial', array('idSite' => self::$idSite, // test w/ idSubtable
array('Referers.getUrlsForSocial', array('idSite' => 1, // test w/ idSubtable
'date' => '2010-12-13,2011-01-18',
'periods' => 'range',
'supertableApi' => 'Referers.getSocials')),
......@@ -102,7 +125,8 @@ class Test_Piwik_Integration_OneVisitorOneWebsite_SeveralDaysDateRange extends I
protected static function setUpWebsitesAndGoals()
{
self::createWebsite(self::$dateTimes[0]);
self::$idSite = self::createWebsite(self::$dateTimes[0], $ecommerce = 0, $siteName = 'Site AAAAAA');
self::$idSite2 =self::createWebsite(self::$dateTimes[0], $ecommerce = 0, $siteName = 'SITE BBbbBB');
}
protected static function trackVisits()
......@@ -134,6 +158,16 @@ class Test_Piwik_Integration_OneVisitorOneWebsite_SeveralDaysDateRange extends I
$visitor->setUrl('http://example.org/news');
$visitor->setUrlReferrer(self::$referrerUrls[$ridx++]);
self::checkResponse($visitor->doTrackPageView('ou pas'));
if($i <= 3 ) {
$visitor = self::getTracker(self::$idSite2, $dateTime, $defaultInit = true);
$visitor->setForceVisitDateTime(Piwik_Date::factory($dateTime)->addHour(0.1)->getDatetime());
$visitor->setUrl('http://example.org/homepage');
$visitor->setUrlReferrer(self::$referrerUrls[$ridx-1]);
self::checkResponse($visitor->doTrackPageView('Second website'));
}
}
}
}
......
......@@ -44,7 +44,7 @@
</reportData>
<reportMetadata>
<row>
<idsubdatatable>6</idsubdatatable>
</row>
</reportMetadata>
</result>
\ No newline at end of file
......@@ -51,7 +51,7 @@
</reportData>
<reportMetadata>
<row>
<idsubdatatable>6</idsubdatatable>
</row>
</reportMetadata>
</result>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8" ?>
<results>
<result date="2010-12-10" />
<result date="2010-12-11" />
<result date="2010-12-12" />
<result date="2010-12-13" />
<result date="2010-12-14">
<row>
<label>Piwik test</label>
<nb_pageviews>3</nb_pageviews>
<nb_actions>3</nb_actions>
<nb_visits>2</nb_visits>
<visits_evolution>100%</visits_evolution>
<actions_evolution>100%</actions_evolution>
<pageviews_evolution>100%</pageviews_evolution>
<idsite>1</idsite>
</row>
</result>
<result date="2010-12-15">
<row>
<label>Piwik test</label>
<nb_pageviews>3</nb_pageviews>
<nb_actions>3</nb_actions>
<nb_visits>2</nb_visits>
<visits_evolution>0%</visits_evolution>
<actions_evolution>0%</actions_evolution>
<pageviews_evolution>0%</pageviews_evolution>
<idsite>1</idsite>
</row>
</result>
<result date="2010-12-16" />
</results>
\ No newline at end of file
<result>
<row>
<label>Site AAAAAA</label>
<nb_visits>2</nb_visits>
<nb_actions>3</nb_actions>
<nb_pageviews>3</nb_pageviews>
<revenue />
<visits_evolution>0%</visits_evolution>
<actions_evolution>0%</actions_evolution>
<pageviews_evolution>0%</pageviews_evolution>
<idsite>1</idsite>
</row>
</result>
\ No newline at end of file
......@@ -47,4 +47,39 @@
</result>
<result date="2010-12-16" />
</result>
<result idSite="2">
<result date="2010-12-10" />
<result date="2010-12-11" />
<result date="2010-12-12" />
<result date="2010-12-13" />
<result date="2010-12-14">
<row>
<label>Facebook</label>
<nb_uniq_visitors>1</nb_uniq_visitors>
<nb_visits>1</nb_visits>
<nb_actions>1</nb_actions>
<max_actions>1</max_actions>
<sum_visit_length>0</sum_visit_length>
<bounce_count>1</bounce_count>
<nb_visits_converted>0</nb_visits_converted>
<url>facebook.com</url>
<logo>plugins/Referers/images/socials/facebook.com.png</logo>
</row>
</result>
<result date="2010-12-15">
<row>
<label>Twitter</label>
<nb_uniq_visitors>1</nb_uniq_visitors>
<nb_visits>1</nb_visits>
<nb_actions>1</nb_actions>
<max_actions>1</max_actions>
<sum_visit_length>0</sum_visit_length>
<bounce_count>1</bounce_count>
<nb_visits_converted>0</nb_visits_converted>
<url>twitter.com</url>
<logo>plugins/Referers/images/socials/twitter.com.png</logo>
</row>
</result>
<result date="2010-12-16" />
</result>
</results>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8" ?>
<result>
<error message="Date format must be: YYYY-MM-DD, or 'today' or 'yesterday' or any keyword supported by the strtotime function (see http://php.net/strtotime for more information): 1970-01-01" />
</result>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8" ?>
<result>
<row>
<label>Piwik test</label>
<label>Site AAAAAA</label>
<nb_visits>6</nb_visits>
<nb_actions>9</nb_actions>
<nb_pageviews>9</nb_pageviews>
<revenue />
<idsite>1</idsite>
</row>
<row>
<label>SITE BBbbBB</label>
<nb_visits>2</nb_visits>
<nb_actions>2</nb_actions>
<nb_pageviews>2</nb_pageviews>
<revenue />
<idsite>2</idsite>
</row>
</result>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8" ?>
<result>
<nb_visits>6</nb_visits>
<nb_actions>9</nb_actions>
<nb_pageviews>9</nb_pageviews>
<revenue>0</revenue>
</result>
\ No newline at end of file
......@@ -74,4 +74,30 @@
<logo>plugins/Referers/images/socials/xanga.com.png</logo>
</row>
</result>
<result idSite="2">
<row>
<label>Twitter</label>
<nb_visits>2</nb_visits>
<nb_actions>2</nb_actions>
<max_actions>1</max_actions>
<sum_visit_length>0</sum_visit_length>
<bounce_count>2</bounce_count>
<nb_visits_converted>0</nb_visits_converted>
<sum_daily_nb_uniq_visitors>2</sum_daily_nb_uniq_visitors>
<url>twitter.com</url>
<logo>plugins/Referers/images/socials/twitter.com.png</logo>
</row>
<row>
<label>Facebook</label>
<nb_visits>1</nb_visits>
<nb_actions>1</nb_actions>
<max_actions>1</max_actions>
<sum_visit_length>0</sum_visit_length>
<bounce_count>1</bounce_count>
<nb_visits_converted>0</nb_visits_converted>
<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
<url>facebook.com</url>
<logo>plugins/Referers/images/socials/facebook.com.png</logo>
</row>
</result>
</results>
\ No newline at end of file
......@@ -112,4 +112,39 @@
<url>http://xanga.com</url>
</row>
</result>
<result defaultKeyName="2">
<row>
<label>t.co/id/?y=dsfs</label>
<nb_visits>1</nb_visits>
<nb_actions>1</nb_actions>
<max_actions>1</max_actions>
<sum_visit_length>0</sum_visit_length>
<bounce_count>1</bounce_count>
<nb_visits_converted>0</nb_visits_converted>
<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
<url>http://t.co/id/?y=dsfs</url>
</row>
<row>
<label>twitter.com/whatever2</label>
<nb_visits>1</nb_visits>
<nb_actions>1</nb_actions>
<max_actions>1</max_actions>
<sum_visit_length>0</sum_visit_length>
<bounce_count>1</bounce_count>
<nb_visits_converted>0</nb_visits_converted>
<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
<url>http://twitter.com/whatever2</url>
</row>
<row>
<label>www.facebook.com/another/path</label>
<nb_visits>1</nb_visits>
<nb_actions>1</nb_actions>
<max_actions>1</max_actions>
<sum_visit_length>0</sum_visit_length>
<bounce_count>1</bounce_count>
<nb_visits_converted>0</nb_visits_converted>
<sum_daily_nb_uniq_visitors>1</sum_daily_nb_uniq_visitors>
<url>http://www.facebook.com/another/path</url>
</row>
</result>
</results>
\ No newline at end of file
......@@ -33,8 +33,8 @@
<nb_hits>The number of times this page was visited.</nb_hits>
<exit_rate>The percentage of visits that left the website after viewing this page.</exit_rate>
</metricsDocumentation>
<imageGraphUrl>index.php?module=API&amp;method=ImageGraph.get&amp;idSite=1&amp;apiModule=CustomVariables&amp;apiAction=getCustomVariablesValuesFromNameId&amp;period=day&amp;date=2010-01-03&amp;idSubtable=9</imageGraphUrl>
<imageGraphEvolutionUrl>index.php?module=API&amp;method=ImageGraph.get&amp;idSite=1&amp;apiModule=CustomVariables&amp;apiAction=getCustomVariablesValuesFromNameId&amp;period=day&amp;date=2009-12-05,2010-01-03&amp;idSubtable=9</imageGraphEvolutionUrl>
<imageGraphUrl>index.php?module=API&amp;method=ImageGraph.get&amp;idSite=1&amp;apiModule=CustomVariables&amp;apiAction=getCustomVariablesValuesFromNameId&amp;period=day&amp;date=2010-01-03&amp;idSubtable=</imageGraphUrl>
<imageGraphEvolutionUrl>index.php?module=API&amp;method=ImageGraph.get&amp;idSite=1&amp;apiModule=CustomVariables&amp;apiAction=getCustomVariablesValuesFromNameId&amp;period=day&amp;date=2009-12-05,2010-01-03&amp;idSubtable=</imageGraphEvolutionUrl>
<uniqueId>CustomVariables_getCustomVariablesValuesFromNameId</uniqueId>
</metadata>
<columns>
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter