diff options
-rw-r--r-- | core/Tracker/Response.php | 3 | ||||
-rw-r--r-- | plugins/ExampleTracker/Columns/ExampleVisitDimension.php | 11 | ||||
-rw-r--r-- | plugins/ExampleTracker/ExampleTracker.php | 19 | ||||
-rw-r--r-- | plugins/ExampleTracker/VisitorDetails.php | 27 | ||||
-rw-r--r-- | plugins/ExampleTracker/templates/_visitorLogIcons.twig | 1 | ||||
-rw-r--r-- | plugins/ExampleTracker/tracker.js | 50 | ||||
-rw-r--r-- | tests/PHPUnit/Fixtures/JSTrackingUIFixture.php | 53 | ||||
-rw-r--r-- | tests/PHPUnit/Fixtures/UITestFixture.php | 12 | ||||
-rw-r--r-- | tests/UI/expected-screenshots/JSTracker_visitor_log.png | 3 | ||||
-rw-r--r-- | tests/UI/specs/JSTracker_spec.js | 38 | ||||
-rw-r--r-- | tests/resources/overlay-test-site/index.html | 6 | ||||
-rw-r--r-- | tests/resources/overlay-test-site/page-1.html | 6 | ||||
-rw-r--r-- | tests/resources/overlay-test-site/page-2.html | 6 | ||||
-rw-r--r-- | tests/resources/overlay-test-site/page-3.html | 6 | ||||
-rw-r--r-- | tests/resources/overlay-test-site/page-4.html | 6 | ||||
-rw-r--r-- | tests/resources/overlay-test-site/page-5.html | 6 | ||||
-rw-r--r-- | tests/resources/overlay-test-site/page-6.html | 6 |
17 files changed, 239 insertions, 20 deletions
diff --git a/core/Tracker/Response.php b/core/Tracker/Response.php index d0ef9880a5..417323c6d7 100644 --- a/core/Tracker/Response.php +++ b/core/Tracker/Response.php @@ -89,7 +89,8 @@ class Response if ($tracker->isDebugModeEnabled() && $tracker->isDatabaseConnected() - && TrackerDb::isProfilingEnabled()) { + && TrackerDb::isProfilingEnabled() + ) { $db = Tracker::getDatabase(); $db->recordProfiling(); Profiler::displayDbTrackerProfile($db); diff --git a/plugins/ExampleTracker/Columns/ExampleVisitDimension.php b/plugins/ExampleTracker/Columns/ExampleVisitDimension.php index f153e4faca..be294660d5 100644 --- a/plugins/ExampleTracker/Columns/ExampleVisitDimension.php +++ b/plugins/ExampleTracker/Columns/ExampleVisitDimension.php @@ -8,6 +8,7 @@ */ namespace Piwik\Plugins\ExampleTracker\Columns; +use Piwik\Common; use Piwik\Piwik; use Piwik\Plugin\Dimension\VisitDimension; use Piwik\Plugin\Segment; @@ -76,6 +77,11 @@ class ExampleVisitDimension extends VisitDimension */ public function onNewVisit(Request $request, Visitor $visitor, $action) { + $paramValue = Common::getRequestVar('myCustomVisitParam', '', 'string', $request->getParams()); + if (!empty($paramValue)) { + return $paramValue; + } + if (empty($action)) { return 0; } @@ -100,6 +106,11 @@ class ExampleVisitDimension extends VisitDimension */ public function onExistingVisit(Request $request, Visitor $visitor, $action) { + $paramValue = Common::getRequestVar('myCustomVisitParam', '', 'string', $request->getParams()); + if (!empty($paramValue)) { + return $paramValue; + } + if (empty($action)) { return false; // Do not change an already persisted value } diff --git a/plugins/ExampleTracker/ExampleTracker.php b/plugins/ExampleTracker/ExampleTracker.php index 22af517aaa..1eb40ce15d 100644 --- a/plugins/ExampleTracker/ExampleTracker.php +++ b/plugins/ExampleTracker/ExampleTracker.php @@ -8,6 +8,25 @@ */ namespace Piwik\Plugins\ExampleTracker; +use Piwik\Common; +use Piwik\Plugins\Live\Visitor; + class ExampleTracker extends \Piwik\Plugin { + public function getListHooksRegistered() + { + return [ + 'Live.getAllVisitorDetails' => 'getAllVisitorDetails', + ]; + } + + public function isTrackerPlugin() + { + return true; + } + + public function getAllVisitorDetails(&$visitor, $visitorRawData) + { + $visitor['myCustomVisitParam'] = isset($visitorRawData['example_visit_dimension']) ? $visitorRawData['example_visit_dimension'] : 'no-value'; + } } diff --git a/plugins/ExampleTracker/VisitorDetails.php b/plugins/ExampleTracker/VisitorDetails.php new file mode 100644 index 0000000000..530fbf0287 --- /dev/null +++ b/plugins/ExampleTracker/VisitorDetails.php @@ -0,0 +1,27 @@ +<?php +/** + * Piwik - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + * + */ + +namespace Piwik\Plugins\ExampleTracker; + +use Piwik\Plugins\Live\VisitorDetailsAbstract; +use Piwik\View; + +class VisitorDetails extends VisitorDetailsAbstract +{ + public function renderIcons($visitorDetails) + { + if (empty($visitorDetails['myCustomVisitParam'])) { + return ''; + } + + $view = new View('@ExampleTracker/_visitorLogIcons'); + $view->myCustomVisitParam = $visitorDetails['myCustomVisitParam']; + return $view->render(); + } +}
\ No newline at end of file diff --git a/plugins/ExampleTracker/templates/_visitorLogIcons.twig b/plugins/ExampleTracker/templates/_visitorLogIcons.twig new file mode 100644 index 0000000000..c582382f9a --- /dev/null +++ b/plugins/ExampleTracker/templates/_visitorLogIcons.twig @@ -0,0 +1 @@ +<span>{{ myCustomVisitParam }}</span>
\ No newline at end of file diff --git a/plugins/ExampleTracker/tracker.js b/plugins/ExampleTracker/tracker.js new file mode 100644 index 0000000000..0383efc9e1 --- /dev/null +++ b/plugins/ExampleTracker/tracker.js @@ -0,0 +1,50 @@ +/** + * Piwik - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + * + */ + +(function () { + + var configs = {}; + + function init() { + if ('object' === typeof window && 'object' === typeof window.Piwik && 'object' === typeof window.Piwik.ExampleTracker) { + // do not initialize twice + return; + } + + if ('object' === typeof window && !window.Piwik) { + // piwik is not defined yet + return; + } + + Piwik.ExampleTracker = { + // empty + }; + + Piwik.addPlugin('ExampleTracker', { + log: function (eventParams) { + if (!eventParams || !eventParams.tracker) { + return ''; + } + + return '&myCustomVisitParam=' + 500 + eventParams.tracker.getSiteId(); + }, + }); + } + + if ('object' === typeof window.Piwik) { + init(); + } else { + // tracker is loaded separately for sure + if ('object' !== typeof window.piwikPluginAsyncInit) { + window.piwikPluginAsyncInit = []; + } + + window.piwikPluginAsyncInit.push(init); + } + +})();
\ No newline at end of file diff --git a/tests/PHPUnit/Fixtures/JSTrackingUIFixture.php b/tests/PHPUnit/Fixtures/JSTrackingUIFixture.php new file mode 100644 index 0000000000..73c86fef61 --- /dev/null +++ b/tests/PHPUnit/Fixtures/JSTrackingUIFixture.php @@ -0,0 +1,53 @@ +<?php +/** + * Piwik - free/libre analytics platform + * + * @link https://matomo.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + * + */ + +namespace Piwik\Tests\Fixtures; + +use Piwik\Plugins\GeoIp2\LocationProvider\GeoIp2\Php; +use Piwik\Plugins\PrivacyManager\IPAnonymizer; +use Piwik\Plugins\UserCountry\LocationProvider; +use Piwik\Tests\Framework\Fixture; + +class JSTrackingUIFixture extends Fixture +{ + public function setUp() + { + parent::setUp(); + + self::resetPluginsInstalledConfig(); + self::updateDatabase(); + self::installAndActivatePlugins($this->getTestEnvironment()); + self::updateDatabase(); + + // for proper geolocation + LocationProvider::setCurrentProvider(Php::ID); + IPAnonymizer::deactivate(); + + Fixture::createWebsite('2012-02-02 00:00:00'); + } + + public function performSetUp($setupEnvironmentOnly = false) + { + $this->extraTestEnvVars = array( + 'loadRealTranslations' => 1, + ); + $this->extraPluginsToLoad = array( + 'ExampleTracker', + ); + + parent::performSetUp($setupEnvironmentOnly); + + $this->testEnvironment->overlayUrl = UITestFixture::getLocalTestSiteUrl(); + UITestFixture::createOverlayTestSite($idSite = 1); + + $this->testEnvironment->tokenAuth = self::getTokenAuth(); + $this->testEnvironment->pluginsToLoad = $this->extraPluginsToLoad; + $this->testEnvironment->save(); + } +}
\ No newline at end of file diff --git a/tests/PHPUnit/Fixtures/UITestFixture.php b/tests/PHPUnit/Fixtures/UITestFixture.php index 06b4a5650b..e83070eb8f 100644 --- a/tests/PHPUnit/Fixtures/UITestFixture.php +++ b/tests/PHPUnit/Fixtures/UITestFixture.php @@ -17,6 +17,7 @@ use Piwik\DataTable\Row; use Piwik\Date; use Piwik\Db; use Piwik\DbHelper; +use Piwik\Filesystem; use Piwik\FrontController; use Piwik\Option; use Piwik\Piwik; @@ -144,8 +145,8 @@ class UITestFixture extends SqlDump . " WHERE idsite = 2 AND location_latitude IS NOT NULL LIMIT 1")); $this->testEnvironment->forcedIdVisitor = $visitorIdDeterministic; - $this->testEnvironment->overlayUrl = $this->getLocalTestSiteUrl(); - $this->createOverlayTestSite(); + $this->testEnvironment->overlayUrl = self::getLocalTestSiteUrl(); + self::createOverlayTestSite(); $forcedNowTimestamp = Option::get("Tests.forcedNowTimestamp"); if ($forcedNowTimestamp == false) { @@ -237,11 +238,11 @@ class UITestFixture extends SqlDump self::checkBulkTrackingResponse($t->doBulkTrack()); } - private function createOverlayTestSite() + public static function createOverlayTestSite($idSite = 3) { $realDir = PIWIK_INCLUDE_PATH . "/tests/resources/overlay-test-site-real"; if (is_dir($realDir)) { - return; + Filesystem::unlinkRecursive($realDir, true); } $files = array('index.html', 'page-1.html', 'page-2.html', 'page-3.html', 'page-4.html', 'page-5.html', 'page-6.html'); @@ -263,11 +264,12 @@ class UITestFixture extends SqlDump $contents = file_get_contents($path); $contents = str_replace("%trackerBaseUrl%", $url, $contents); + $contents = str_replace("%idSite%", $idSite, $contents); file_put_contents($path, $contents); } } - private function getLocalTestSiteUrl() + public static function getLocalTestSiteUrl() { return self::getRootUrl() . "tests/resources/overlay-test-site-real/"; } diff --git a/tests/UI/expected-screenshots/JSTracker_visitor_log.png b/tests/UI/expected-screenshots/JSTracker_visitor_log.png new file mode 100644 index 0000000000..50f7f03142 --- /dev/null +++ b/tests/UI/expected-screenshots/JSTracker_visitor_log.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e22357b298003038503fbd94e6cc962667b99139cfcf0010b594b8e9ef441ba6 +size 31826 diff --git a/tests/UI/specs/JSTracker_spec.js b/tests/UI/specs/JSTracker_spec.js new file mode 100644 index 0000000000..3101a1b1d0 --- /dev/null +++ b/tests/UI/specs/JSTracker_spec.js @@ -0,0 +1,38 @@ +/*! + * Piwik - free/libre analytics platform + * + * JS tracker UI tests. + * + * @link http://piwik.org + * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later + */ + +describe("JSTracker", function () { + this.fixture = 'Piwik\\Tests\\Fixtures\\JSTrackingUIFixture'; + + var testWebsiteUrl = 'tests/resources/overlay-test-site-real/index.html'; + var generalParams = 'idSite=1&period=day&date=today', + widgetizeParams = "module=Widgetize&action=iframe", + visitorLogUrl = "?" + widgetizeParams + "&" + generalParams + "&moduleToWidgetize=Live&actionToWidgetize=getVisitorLog"; + + it("run correctly on a website and correctly track visits in the visitor log", async function () { + await page.goto(testWebsiteUrl); + + // view another page + await page.evaluate(() => $('a:contains(Page 3)')[0].click()); + await page.waitForNetworkIdle(); + await page.waitFor(500); + await page.waitForNetworkIdle(); + + // visit visitor log for correct date + await page.goto(visitorLogUrl); + + await page.evaluate(function () { + $('.visitor-log-datetime').html('REMOVED'); + var $e = $('.dataTableWrapper>.row>.column>strong'); + $e.text($e.text().replace(/\d+s/, 'Ns')); + }); + + expect(await page.screenshot({ fullPage: true })).to.matchImage('visitor_log'); + }); +});
\ No newline at end of file diff --git a/tests/resources/overlay-test-site/index.html b/tests/resources/overlay-test-site/index.html index 2b1f099263..d8151c2054 100644 --- a/tests/resources/overlay-test-site/index.html +++ b/tests/resources/overlay-test-site/index.html @@ -86,12 +86,14 @@ <script> var pkBaseURL = (("https:" == document.location.protocol) ? "https://%trackerBaseUrl%" : "http://%trackerBaseUrl%"); try { - var piwikTracker = Piwik.getTracker(pkBaseURL + "matomo.php", 3); + var piwikTracker = Piwik.addTracker(pkBaseURL + "matomo.php", %idSite%); piwikTracker.setCookieDomain('*.piwik.org'); piwikTracker.trackPageView(); piwikTracker.enableLinkTracking(); - } catch( err ) {} + } catch( err ) { + console.log(err.stack || err.message); + } </script> </body> </html>
\ No newline at end of file diff --git a/tests/resources/overlay-test-site/page-1.html b/tests/resources/overlay-test-site/page-1.html index 16330c63a8..70575666ae 100644 --- a/tests/resources/overlay-test-site/page-1.html +++ b/tests/resources/overlay-test-site/page-1.html @@ -83,12 +83,14 @@ <script> var pkBaseURL = (("https:" == document.location.protocol) ? "https://%trackerBaseUrl%" : "http://%trackerBaseUrl%"); try { - var piwikTracker = Piwik.getTracker(pkBaseURL + "matomo.php", 3); + var piwikTracker = Piwik.getTracker(pkBaseURL + "matomo.php", %idSite%); piwikTracker.setCookieDomain('*.piwik.org'); piwikTracker.trackPageView(); piwikTracker.enableLinkTracking(); - } catch( err ) {} + } catch( err ) { + console.log(err.stack || err.message); + } </script> </body> </html>
\ No newline at end of file diff --git a/tests/resources/overlay-test-site/page-2.html b/tests/resources/overlay-test-site/page-2.html index 43f08ee61f..cf83bdb641 100644 --- a/tests/resources/overlay-test-site/page-2.html +++ b/tests/resources/overlay-test-site/page-2.html @@ -83,12 +83,14 @@ <script> var pkBaseURL = (("https:" == document.location.protocol) ? "https://%trackerBaseUrl%" : "http://%trackerBaseUrl%"); try { - var piwikTracker = Piwik.getTracker(pkBaseURL + "matomo.php", 3); + var piwikTracker = Piwik.addTracker(pkBaseURL + "matomo.php", %idSite%); piwikTracker.setCookieDomain('*.piwik.org'); piwikTracker.trackPageView(); piwikTracker.enableLinkTracking(); - } catch( err ) {} + } catch( err ) { + console.log(err.stack || err.message); + } </script> </body> </html>
\ No newline at end of file diff --git a/tests/resources/overlay-test-site/page-3.html b/tests/resources/overlay-test-site/page-3.html index a53f07050e..3399004f97 100644 --- a/tests/resources/overlay-test-site/page-3.html +++ b/tests/resources/overlay-test-site/page-3.html @@ -83,12 +83,14 @@ <script> var pkBaseURL = (("https:" == document.location.protocol) ? "https://%trackerBaseUrl%" : "http://%trackerBaseUrl%"); try { - var piwikTracker = Piwik.getTracker(pkBaseURL + "matomo.php", 3); + var piwikTracker = Piwik.addTracker(pkBaseURL + "matomo.php", %idSite%); piwikTracker.setCookieDomain('*.piwik.org'); piwikTracker.trackPageView(); piwikTracker.enableLinkTracking(); - } catch( err ) {} + } catch( err ) { + console.log(err.stack || err.message); + } </script> </body> </html>
\ No newline at end of file diff --git a/tests/resources/overlay-test-site/page-4.html b/tests/resources/overlay-test-site/page-4.html index 8341fc48c7..6085970787 100644 --- a/tests/resources/overlay-test-site/page-4.html +++ b/tests/resources/overlay-test-site/page-4.html @@ -83,12 +83,14 @@ <script> var pkBaseURL = (("https:" == document.location.protocol) ? "https://%trackerBaseUrl%" : "http://%trackerBaseUrl%"); try { - var piwikTracker = Piwik.getTracker(pkBaseURL + "matomo.php", 3); + var piwikTracker = Piwik.addTracker(pkBaseURL + "matomo.php", %idSite%); piwikTracker.setCookieDomain('*.piwik.org'); piwikTracker.trackPageView(); piwikTracker.enableLinkTracking(); - } catch( err ) {} + } catch( err ) { + console.log(err.stack || err.message); + } </script> </body> </html>
\ No newline at end of file diff --git a/tests/resources/overlay-test-site/page-5.html b/tests/resources/overlay-test-site/page-5.html index e8806b0d68..0e4ece13a5 100644 --- a/tests/resources/overlay-test-site/page-5.html +++ b/tests/resources/overlay-test-site/page-5.html @@ -83,12 +83,14 @@ <script> var pkBaseURL = (("https:" == document.location.protocol) ? "https://%trackerBaseUrl%" : "http://%trackerBaseUrl%"); try { - var piwikTracker = Piwik.getTracker(pkBaseURL + "matomo.php", 3); + var piwikTracker = Piwik.addTracker(pkBaseURL + "matomo.php", %idSite%); piwikTracker.setCookieDomain('*.piwik.org'); piwikTracker.trackPageView(); piwikTracker.enableLinkTracking(); - } catch( err ) {} + } catch( err ) { + console.log(err.stack || err.message); + } </script> </body> </html>
\ No newline at end of file diff --git a/tests/resources/overlay-test-site/page-6.html b/tests/resources/overlay-test-site/page-6.html index 1dbe72c1a8..b43abaac79 100644 --- a/tests/resources/overlay-test-site/page-6.html +++ b/tests/resources/overlay-test-site/page-6.html @@ -83,12 +83,14 @@ <script> var pkBaseURL = (("https:" == document.location.protocol) ? "https://%trackerBaseUrl%" : "http://%trackerBaseUrl%"); try { - var piwikTracker = Piwik.getTracker(pkBaseURL + "matomo.php", 3); + var piwikTracker = Piwik.addTracker(pkBaseURL + "matomo.php", %idSite%); piwikTracker.setCookieDomain('*.piwik.org'); piwikTracker.trackPageView(); piwikTracker.enableLinkTracking(); - } catch( err ) {} + } catch( err ) { + console.log(err.stack || err.message); + } </script> </body> </html>
\ No newline at end of file |