Skip to content
Extraits de code Groupes Projets
Valider 290deab5 rédigé par Matthieu Aubry's avatar Matthieu Aubry
Parcourir les fichiers

Merge pull request #9390 from piwik/9046

Add possibility to specify a limit for visits in Live.getVisitorProfile
parents 7dd10c28 fa38a3b3
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
tests/System/processed/*xml
\ No newline at end of file
...@@ -198,12 +198,19 @@ class API extends \Piwik\Plugin\API ...@@ -198,12 +198,19 @@ class API extends \Piwik\Plugin\API
* @param int $idSite Site ID * @param int $idSite Site ID
* @param bool|false|string $visitorId The ID of the visitor whose profile to retrieve. * @param bool|false|string $visitorId The ID of the visitor whose profile to retrieve.
* @param bool|false|string $segment * @param bool|false|string $segment
* @param bool|false|int $limitVisits
* @return array * @return array
*/ */
public function getVisitorProfile($idSite, $visitorId = false, $segment = false) public function getVisitorProfile($idSite, $visitorId = false, $segment = false, $limitVisits = false)
{ {
Piwik::checkUserHasViewAccess($idSite); Piwik::checkUserHasViewAccess($idSite);
if ($limitVisits === false) {
$limitVisits = VisitorProfile::VISITOR_PROFILE_MAX_VISITS_TO_SHOW;
} else {
$limitVisits = (int) $limitVisits;
}
if ($visitorId === false) { if ($visitorId === false) {
$visitorId = $this->getMostRecentVisitorId($idSite, $segment); $visitorId = $this->getMostRecentVisitorId($idSite, $segment);
} }
...@@ -220,7 +227,7 @@ class API extends \Piwik\Plugin\API ...@@ -220,7 +227,7 @@ class API extends \Piwik\Plugin\API
} }
$profile = new VisitorProfile($idSite); $profile = new VisitorProfile($idSite);
$result = $profile->makeVisitorProfile($visits, $visitorId, $segment); $result = $profile->makeVisitorProfile($visits, $visitorId, $segment, $limitVisits);
/** /**
* Triggered in the Live.getVisitorProfile API method. Plugins can use this event * Triggered in the Live.getVisitorProfile API method. Plugins can use this event
......
...@@ -38,10 +38,11 @@ class VisitorProfile ...@@ -38,10 +38,11 @@ class VisitorProfile
* @param $visits * @param $visits
* @param $visitorId * @param $visitorId
* @param $segment * @param $segment
* @param $numLastVisits
* @return array * @return array
* @throws Exception * @throws Exception
*/ */
public function makeVisitorProfile(DataTable $visits, $visitorId, $segment) public function makeVisitorProfile(DataTable $visits, $visitorId, $segment, $numLastVisits)
{ {
$this->initVisitorProfile(); $this->initVisitorProfile();
...@@ -75,7 +76,7 @@ class VisitorProfile ...@@ -75,7 +76,7 @@ class VisitorProfile
$this->handleAdjacentVisitorIds($visits, $visitorId, $segment); $this->handleAdjacentVisitorIds($visits, $visitorId, $segment);
// use N most recent visits for last_visits // use N most recent visits for last_visits
$visits->deleteRowsOffset(self::VISITOR_PROFILE_MAX_VISITS_TO_SHOW); $visits->deleteRowsOffset($numLastVisits);
$this->profile['lastVisits'] = $visits; $this->profile['lastVisits'] = $visits;
......
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
namespace Piwik\Plugins\Live\tests\Fixtures;
use Piwik\Date;
use Piwik\Tests\Framework\Fixture;
/**
* Generates many visits for the same visitor
*/
class ManyVisitsOfSameVisitor extends Fixture
{
public $dateTime = '2010-02-01 11:22:33';
public $idSite = 1;
public function setUp()
{
if (!self::siteCreated($idSite = 1)) {
self::createWebsite($this->dateTime);
}
$this->trackVisits();
}
public function tearDown()
{
// empty
}
private function trackVisits()
{
$t = self::getTracker($this->idSite, $this->dateTime, $defaultInit = true);
$t->setTokenAuth(self::getTokenAuth());
$t->enableBulkTracking();
for ($numVisits = 0; $numVisits <= 30; $numVisits++) {
$t->setForceNewVisit();
$t->setUrl('http://example.org/my/dir/page' . ($numVisits % 4));
$visitDateTime = Date::factory($this->dateTime)->addDay($numVisits)->getDatetime();
$t->setForceVisitDateTime($visitDateTime);
self::assertTrue($t->doTrackPageView('incredible title ' . ($numVisits % 3)));
}
self::checkBulkTrackingResponse($t->doBulkTrack());
}
}
\ No newline at end of file
...@@ -18,10 +18,11 @@ use Piwik\Tests\Framework\TestCase\SystemTestCase; ...@@ -18,10 +18,11 @@ use Piwik\Tests\Framework\TestCase\SystemTestCase;
/** /**
* @group Live * @group Live
* @group APITest * @group ApiTest
* @group Api
* @group Plugins * @group Plugins
*/ */
class APITest extends SystemTestCase class ApiCounterTest extends SystemTestCase
{ {
/** /**
* @var API * @var API
......
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
namespace Piwik\Plugins\Live\tests\System;
use Piwik\Plugins\Live\tests\Fixtures\ManyVisitsOfSameVisitor;
use Piwik\Tests\Framework\TestCase\SystemTestCase;
/**
* @group Live
* @group ApiTest
* @group Api
* @group Plugins
*/
class ApiTest extends SystemTestCase
{
/**
* @var ManyVisitsOfSameVisitor
*/
public static $fixture = null; // initialized below class definition
/**
* @dataProvider getApiForTesting
*/
public function testApi($api, $params)
{
$this->runApiTests($api, $params);
}
public function getApiForTesting()
{
$api = array(
'Live.getVisitorProfile',
);
$apiToTest = array();
$apiToTest[] = array($api,
array(
'idSite' => 1,
'date' => self::$fixture->dateTime,
'periods' => array('day'),
'testSuffix' => ''
)
);
$apiToTest[] = array($api,
array(
'idSite' => 1,
'date' => self::$fixture->dateTime,
'periods' => array('day'),
'otherRequestParameters' => array('limitVisits' => 20),
'testSuffix' => 'higherLimit'
)
);
return $apiToTest;
}
public static function getOutputPrefix()
{
return '';
}
public static function getPathToTestDirectory()
{
return dirname(__FILE__);
}
}
ApiTest::$fixture = new ManyVisitsOfSameVisitor();
\ No newline at end of file
Ce diff est replié.
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