diff options
Diffstat (limited to 'plugins/SitesManager')
-rw-r--r-- | plugins/SitesManager/SitesManager.php | 21 | ||||
-rw-r--r-- | plugins/SitesManager/tests/Integration/SitesManagerTest.php | 104 |
2 files changed, 117 insertions, 8 deletions
diff --git a/plugins/SitesManager/SitesManager.php b/plugins/SitesManager/SitesManager.php index 054ecc2fce..cb7fe68547 100644 --- a/plugins/SitesManager/SitesManager.php +++ b/plugins/SitesManager/SitesManager.php @@ -13,9 +13,9 @@ use Piwik\API\Request; use Piwik\Common; use Piwik\Container\StaticContainer; use Piwik\Exception\UnexpectedWebsiteFoundException; +use Piwik\Option; use Piwik\Piwik; use Piwik\Plugins\CoreHome\SystemSummary; -use Piwik\Plugins\PrivacyManager\PrivacyManager; use Piwik\Settings\Storage\Backend\MeasurableSettingsTable; use Piwik\Tracker\Cache; use Piwik\Tracker\Model as TrackerModel; @@ -65,13 +65,18 @@ class SitesManager extends \Piwik\Plugin return; } - // Skip the screen if purging logs is enabled - $settings = PrivacyManager::getPurgeDataSettings(); - if ($settings['delete_logs_enable'] == 1) { + $hadTrafficKey = 'SitesManagerHadTrafficInPast_' . (int) $siteId; + $hadTrafficBefore = Option::get($hadTrafficKey); + if (!empty($hadTrafficBefore)) { + // user had traffic at some stage in the past... not needed to show tracking code return; - } - - if (self::hasTrackedAnyTraffic($siteId)) { + } elseif (self::hasTrackedAnyTraffic($siteId)) { + // remember the user had traffic in the past so we won't show the tracking screen again + // if all visits are deleted for example + Option::set($hadTrafficKey, 1); + return; + } else { + // never had any traffic $session = new SessionNamespace('siteWithoutData'); if (!empty($session->ignoreMessage)) { return; @@ -98,7 +103,7 @@ class SitesManager extends \Piwik\Plugin Piwik::postEvent('SitesManager.shouldPerformEmptySiteCheck', [&$shouldPerformEmptySiteCheck, $siteId]); $trackerModel = new TrackerModel(); - return $shouldPerformEmptySiteCheck && $trackerModel->isSiteEmpty($siteId); + return $shouldPerformEmptySiteCheck && !$trackerModel->isSiteEmpty($siteId); } public function onSiteDeleted($idSite) diff --git a/plugins/SitesManager/tests/Integration/SitesManagerTest.php b/plugins/SitesManager/tests/Integration/SitesManagerTest.php index 5676372776..2f62a39c5a 100644 --- a/plugins/SitesManager/tests/Integration/SitesManagerTest.php +++ b/plugins/SitesManager/tests/Integration/SitesManagerTest.php @@ -10,8 +10,12 @@ namespace Piwik\Plugins\SitesManager\tests\Integration; use Piwik\Cache; use Piwik\Archive\ArchiveInvalidator; +use Piwik\Common; use Piwik\Container\StaticContainer; use Piwik\Date; +use Piwik\Db; +use Piwik\Option; +use Piwik\Piwik; use Piwik\Plugins\SitesManager\SitesManager; use Piwik\Tests\Framework\Fixture; use Piwik\Tests\Framework\Mock\FakeAccess; @@ -74,6 +78,106 @@ class SitesManagerTest extends IntegrationTestCase $this->assertEquals($expected, $archive->getRememberedArchivedReportsThatShouldBeInvalidated()); } + /** + * @dataProvider getTestDataForRedirectDashboard + */ + public function test_redirectDashboardToWelcomePage_doesNothingIfModuleActionAreIncorrect($module, $action) + { + $originalModule = $module; + $originalAction = $action; + $params = []; + + Piwik::postEvent('Request.dispatch', [&$module, &$action, &$params]); + + $this->assertEquals($originalModule, $module); + $this->assertEquals($originalAction, $action); + } + + public function getTestDataForRedirectDashboard() + { + return [ + ['CoreHome', 'someothermethod'], + ['SitesManager', 'index'], + ]; + } + + public function test_redirectDashboardToWelcomePage_doesNothingIfThereIsNoIdSiteParam() + { + $module = 'CoreHome'; + $action = 'index'; + $params = []; + + Piwik::postEvent('Request.dispatch', [&$module, &$action, &$params]); + + $this->assertEquals('CoreHome', $module); + $this->assertEquals('index', $action); + } + + public function test_redirectDashboardToWelcomePage_doesNothingIfAVisitWasTrackedInThePast() + { + $module = 'CoreHome'; + $action = 'index'; + $params = []; + + $_GET['idSite'] = $this->siteId; + + $tracker = Fixture::getTracker($this->siteId, '2015-02-04 04:12:35'); + $tracker->setUrl('http://example.com/'); + Fixture::checkResponse($tracker->doTrackPageView('a test title')); + + $this->assertEquals(false, Option::get('SitesManagerHadTrafficInPast_' . $this->siteId)); + + Piwik::postEvent('Request.dispatch', [&$module, &$action, &$params]); + + $this->assertEquals('1', Option::get('SitesManagerHadTrafficInPast_' . $this->siteId)); + + $this->assertEquals('CoreHome', $module); + $this->assertEquals('index', $action); + } + + public function test_redirectDashboardToWelcomePage_doesNothingIfAVisitWasTrackedAndWasLaterPurged() + { + $module = 'CoreHome'; + $action = 'index'; + $params = []; + + $_GET['idSite'] = $this->siteId; + + $tracker = Fixture::getTracker($this->siteId, '2015-02-04 04:12:35'); + $tracker->setUrl('http://example.com/'); + Fixture::checkResponse($tracker->doTrackPageView('a test title')); + + Piwik::postEvent('Request.dispatch', [&$module, &$action, &$params]); + + Db::exec('TRUNCATE ' . Common::prefixTable('log_visit')); + + $module = 'CoreHome'; + $action = 'index'; + + $this->assertEquals('CoreHome', $module); + $this->assertEquals('index', $action); + } + + public function test_redirectDashboardToWelcomePage_redirectsIfThereIsNoDataAndAppropriateParams() + { + $module = 'CoreHome'; + $action = 'index'; + $params = []; + + $_GET['idSite'] = $this->siteId; + + Piwik::postEvent('Request.dispatch', [&$module, &$action, &$params]); + + $this->assertEquals('SitesManager', $module); + $this->assertEquals('siteWithoutData', $action); + } + + protected static function configureFixture($fixture) + { + parent::configureFixture($fixture); + $fixture->createSuperUser = true; + } + public function provideContainerConfig() { return array( |