Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthieu Napoli <matthieu@mnapoli.fr>2015-02-09 06:20:42 +0300
committerMatthieu Napoli <matthieu@mnapoli.fr>2015-02-09 06:20:42 +0300
commit5723e93aaeeee34914abc41869c24a1e10476f31 (patch)
treec99491c32822281aab067f0ea9c5378623e80778
parent47772c937bf32baa1ad2af3dbf96e70354a64d59 (diff)
parent8a15d3a0ee47d24582843cd0c157d69ff16a8907 (diff)
Merge branch 'master' into removed-registry
Conflicts: CHANGELOG.md
-rw-r--r--.gitmodules11
-rw-r--r--.travis.yml7
-rw-r--r--CHANGELOG.md6
-rw-r--r--README.md2
-rw-r--r--config/global.ini.php1
-rw-r--r--core/API/Proxy.php2
-rw-r--r--core/API/Request.php8
-rw-r--r--core/Archive.php2
-rw-r--r--core/ArchiveProcessor/Rules.php19
-rw-r--r--core/Piwik.php2
-rw-r--r--core/Plugin/ComponentFactory.php4
-rw-r--r--core/Plugin/Controller.php67
-rw-r--r--core/Plugin/Manager.php6
-rw-r--r--core/Plugin/Report.php2
-rw-r--r--core/Tracker/PageUrl.php17
-rw-r--r--core/Updates/2.11.0-b4.php49
-rw-r--r--core/Url.php2
-rw-r--r--core/UrlHelper.php1
-rw-r--r--core/Version.php2
-rw-r--r--core/ViewDataTable/Config.php6
-rw-r--r--core/ViewDataTable/Factory.php2
-rw-r--r--core/WidgetsList.php2
-rw-r--r--lang/am.json1
-rw-r--r--lang/ar.json1
-rw-r--r--lang/be.json1
-rw-r--r--lang/bg.json1
-rw-r--r--lang/ca.json1
-rw-r--r--lang/cs.json5
-rw-r--r--lang/da.json2
-rw-r--r--lang/de.json1
-rw-r--r--lang/el.json2
-rw-r--r--lang/en.json1
-rw-r--r--lang/es.json1
-rw-r--r--lang/et.json1
-rw-r--r--lang/eu.json1
-rw-r--r--lang/fa.json1
-rw-r--r--lang/fi.json1
-rw-r--r--lang/fr.json1
-rw-r--r--lang/hi.json1
-rw-r--r--lang/hr.json1
-rw-r--r--lang/hu.json1
-rw-r--r--lang/id.json1
-rw-r--r--lang/is.json1
-rw-r--r--lang/it.json1
-rw-r--r--lang/ja.json1
-rw-r--r--lang/ka.json1
-rw-r--r--lang/ko.json1
-rw-r--r--lang/lt.json1
-rw-r--r--lang/lv.json1
-rw-r--r--lang/nb.json1
-rw-r--r--lang/nl.json1
-rw-r--r--lang/nn.json1
-rw-r--r--lang/pl.json1
-rw-r--r--lang/pt-br.json1
-rw-r--r--lang/pt.json1
-rw-r--r--lang/ro.json1
-rw-r--r--lang/ru.json4
-rw-r--r--lang/sk.json1
-rw-r--r--lang/sl.json1
-rw-r--r--lang/sq.json1
-rw-r--r--lang/sr.json1
-rw-r--r--lang/sv.json1
-rw-r--r--lang/te.json1
-rw-r--r--lang/th.json1
-rw-r--r--lang/tl.json1
-rw-r--r--lang/tr.json1
-rw-r--r--lang/uk.json1
-rw-r--r--lang/vi.json1
-rw-r--r--lang/zh-cn.json1
-rw-r--r--lang/zh-tw.json1
-rw-r--r--misc/others/api_internal_call.php2
-rw-r--r--misc/others/uninstall-delete-piwik-directory.php9
-rw-r--r--plugins/Actions/lang/nl.json18
-rw-r--r--plugins/Contents/lang/es.json2
-rw-r--r--plugins/CoreAdminHome/lang/es.json3
-rw-r--r--plugins/CoreAdminHome/lang/nl.json2
-rw-r--r--plugins/CoreAdminHome/lang/ru.json1
-rw-r--r--plugins/CoreConsole/Commands/DevelopmentSyncUITestScreenshots.php14
-rw-r--r--plugins/CoreHome/javascripts/dataTable.js19
-rw-r--r--plugins/CoreHome/lang/cs.json1
-rw-r--r--plugins/CoreHome/lang/da.json1
-rw-r--r--plugins/CoreHome/lang/de.json1
-rw-r--r--plugins/CoreHome/lang/el.json1
-rw-r--r--plugins/CoreHome/lang/it.json1
-rw-r--r--plugins/CoreHome/templates/_dataTableFooter.twig21
-rw-r--r--plugins/CorePluginsAdmin/lang/ru.json1
m---------plugins/CustomAlerts0
-rw-r--r--plugins/DevicePlugins/Reports/Base.php2
-rw-r--r--plugins/DevicePlugins/lang/cs.json1
-rw-r--r--plugins/Ecommerce/lang/cs.json6
-rw-r--r--plugins/Ecommerce/lang/da.json6
-rw-r--r--plugins/Ecommerce/lang/el.json6
-rw-r--r--plugins/Events/lang/ru.json1
-rw-r--r--plugins/Goals/lang/cs.json5
-rw-r--r--plugins/Goals/lang/da.json4
-rw-r--r--plugins/Goals/lang/de.json1
-rw-r--r--plugins/Goals/lang/el.json5
-rw-r--r--plugins/Goals/lang/it.json1
-rw-r--r--plugins/Insights/Visualizations/Insight.php1
-rw-r--r--plugins/Installation/lang/de.json2
-rw-r--r--plugins/Installation/lang/pl.json1
m---------plugins/PleineLune0
-rw-r--r--plugins/PrivacyManager/lang/pl.json2
-rw-r--r--plugins/Provider/lang/am.json1
-rw-r--r--plugins/Provider/lang/ar.json1
-rw-r--r--plugins/Provider/lang/be.json1
-rw-r--r--plugins/Provider/lang/bg.json1
-rw-r--r--plugins/Provider/lang/ca.json1
-rw-r--r--plugins/Provider/lang/cs.json1
-rw-r--r--plugins/Provider/lang/da.json1
-rw-r--r--plugins/Provider/lang/de.json1
-rw-r--r--plugins/Provider/lang/el.json1
-rw-r--r--plugins/Provider/lang/es.json1
-rw-r--r--plugins/Provider/lang/et.json1
-rw-r--r--plugins/Provider/lang/eu.json1
-rw-r--r--plugins/Provider/lang/fa.json1
-rw-r--r--plugins/Provider/lang/fi.json1
-rw-r--r--plugins/Provider/lang/fr.json1
-rw-r--r--plugins/Provider/lang/gl.json1
-rw-r--r--plugins/Provider/lang/hi.json1
-rw-r--r--plugins/Provider/lang/hu.json1
-rw-r--r--plugins/Provider/lang/id.json1
-rw-r--r--plugins/Provider/lang/is.json1
-rw-r--r--plugins/Provider/lang/it.json1
-rw-r--r--plugins/Provider/lang/ja.json1
-rw-r--r--plugins/Provider/lang/ka.json1
-rw-r--r--plugins/Provider/lang/ko.json1
-rw-r--r--plugins/Provider/lang/lt.json1
-rw-r--r--plugins/Provider/lang/lv.json1
-rw-r--r--plugins/Provider/lang/nb.json1
-rw-r--r--plugins/Provider/lang/nl.json1
-rw-r--r--plugins/Provider/lang/pl.json1
-rw-r--r--plugins/Provider/lang/pt-br.json1
-rw-r--r--plugins/Provider/lang/pt.json1
-rw-r--r--plugins/Provider/lang/ro.json1
-rw-r--r--plugins/Provider/lang/ru.json1
-rw-r--r--plugins/Provider/lang/sk.json1
-rw-r--r--plugins/Provider/lang/sl.json1
-rw-r--r--plugins/Provider/lang/sq.json1
-rw-r--r--plugins/Provider/lang/sr.json1
-rw-r--r--plugins/Provider/lang/sv.json1
-rw-r--r--plugins/Provider/lang/th.json1
-rw-r--r--plugins/Provider/lang/tl.json1
-rw-r--r--plugins/Provider/lang/tr.json1
-rw-r--r--plugins/Provider/lang/uk.json1
-rw-r--r--plugins/Provider/lang/vi.json1
-rw-r--r--plugins/Provider/lang/zh-cn.json1
-rw-r--r--plugins/Provider/lang/zh-tw.json1
m---------plugins/QueuedTracking0
-rw-r--r--plugins/Resolution/API.php3
-rw-r--r--plugins/Resolution/Reports/Base.php2
-rw-r--r--plugins/Resolution/lang/cs.json1
-rw-r--r--plugins/ScheduledReports/javascripts/pdf.js7
-rw-r--r--plugins/ScheduledReports/lang/ar.json1
-rw-r--r--plugins/ScheduledReports/lang/be.json1
-rw-r--r--plugins/ScheduledReports/lang/bg.json1
-rw-r--r--plugins/ScheduledReports/lang/ca.json1
-rw-r--r--plugins/ScheduledReports/lang/cs.json1
-rw-r--r--plugins/ScheduledReports/lang/da.json1
-rw-r--r--plugins/ScheduledReports/lang/de.json1
-rw-r--r--plugins/ScheduledReports/lang/el.json1
-rw-r--r--plugins/ScheduledReports/lang/es.json1
-rw-r--r--plugins/ScheduledReports/lang/et.json1
-rw-r--r--plugins/ScheduledReports/lang/fa.json1
-rw-r--r--plugins/ScheduledReports/lang/fi.json1
-rw-r--r--plugins/ScheduledReports/lang/fr.json1
-rw-r--r--plugins/ScheduledReports/lang/hi.json1
-rw-r--r--plugins/ScheduledReports/lang/id.json1
-rw-r--r--plugins/ScheduledReports/lang/it.json1
-rw-r--r--plugins/ScheduledReports/lang/ja.json1
-rw-r--r--plugins/ScheduledReports/lang/ko.json1
-rw-r--r--plugins/ScheduledReports/lang/lt.json1
-rw-r--r--plugins/ScheduledReports/lang/nb.json1
-rw-r--r--plugins/ScheduledReports/lang/nl.json1
-rw-r--r--plugins/ScheduledReports/lang/pl.json1
-rw-r--r--plugins/ScheduledReports/lang/pt-br.json1
-rw-r--r--plugins/ScheduledReports/lang/pt.json1
-rw-r--r--plugins/ScheduledReports/lang/ro.json1
-rw-r--r--plugins/ScheduledReports/lang/ru.json1
-rw-r--r--plugins/ScheduledReports/lang/sl.json1
-rw-r--r--plugins/ScheduledReports/lang/sq.json1
-rw-r--r--plugins/ScheduledReports/lang/sr.json1
-rw-r--r--plugins/ScheduledReports/lang/sv.json1
-rw-r--r--plugins/ScheduledReports/lang/ta.json3
-rw-r--r--plugins/ScheduledReports/lang/tl.json1
-rw-r--r--plugins/ScheduledReports/lang/vi.json1
-rw-r--r--plugins/ScheduledReports/lang/zh-cn.json1
-rw-r--r--plugins/ScheduledReports/tests/Integration/ApiTest.php4
m---------plugins/SecurityInfo0
-rw-r--r--plugins/SitesManager/lang/pl.json1
m---------plugins/TasksTimetable0
-rw-r--r--plugins/TestRunner/Commands/TestsRunOnAws.php2
-rw-r--r--plugins/TestRunner/Commands/TestsRunUI.php6
-rw-r--r--plugins/TestRunner/Commands/TestsSetupFixture.php11
-rw-r--r--plugins/TestRunner/TravisYml/TravisYmlView.php2
-rw-r--r--plugins/TestRunner/templates/travis.yml.twig6
-rw-r--r--plugins/Transitions/lang/pl.json3
m---------plugins/TreemapVisualization0
-rw-r--r--plugins/UserCountry/lang/pl.json15
-rw-r--r--plugins/UserLanguage/.gitignore (renamed from plugins/UserSettings/.gitignore)0
-rw-r--r--plugins/UserLanguage/API.php55
-rw-r--r--plugins/UserLanguage/Archiver.php (renamed from plugins/UserSettings/Archiver.php)8
-rw-r--r--plugins/UserLanguage/Columns/Language.php (renamed from plugins/UserSettings/Columns/Language.php)2
-rw-r--r--plugins/UserLanguage/Reports/Base.php (renamed from plugins/UserSettings/Reports/Base.php)4
-rw-r--r--plugins/UserLanguage/Reports/GetLanguage.php (renamed from plugins/UserSettings/Reports/GetLanguage.php)8
-rw-r--r--plugins/UserLanguage/Reports/GetLanguageCode.php (renamed from plugins/UserSettings/Reports/GetLanguageCode.php)8
-rw-r--r--plugins/UserLanguage/UserLanguage.php16
-rw-r--r--plugins/UserLanguage/functions.php (renamed from plugins/UserSettings/functions.php)7
-rw-r--r--plugins/UserLanguage/lang/am.json (renamed from plugins/UserSettings/lang/am.json)5
-rw-r--r--plugins/UserLanguage/lang/ar.json (renamed from plugins/UserSettings/lang/ar.json)6
-rw-r--r--plugins/UserLanguage/lang/be.json (renamed from plugins/UserSettings/lang/be.json)6
-rw-r--r--plugins/UserLanguage/lang/bg.json (renamed from plugins/UserSettings/lang/bg.json)6
-rw-r--r--plugins/UserLanguage/lang/bn.json (renamed from plugins/UserSettings/lang/bn.json)2
-rw-r--r--plugins/UserLanguage/lang/bs.json (renamed from plugins/UserSettings/lang/bs.json)2
-rw-r--r--plugins/UserLanguage/lang/ca.json (renamed from plugins/UserSettings/lang/ca.json)6
-rw-r--r--plugins/UserLanguage/lang/cs.json (renamed from plugins/UserSettings/lang/cs.json)5
-rw-r--r--plugins/UserLanguage/lang/cy.json (renamed from plugins/UserSettings/lang/cy.json)2
-rw-r--r--plugins/UserLanguage/lang/da.json (renamed from plugins/UserSettings/lang/da.json)5
-rw-r--r--plugins/UserLanguage/lang/de.json (renamed from plugins/UserSettings/lang/de.json)5
-rw-r--r--plugins/UserLanguage/lang/el.json (renamed from plugins/UserSettings/lang/el.json)5
-rw-r--r--plugins/UserLanguage/lang/en.json191
-rw-r--r--plugins/UserLanguage/lang/es.json (renamed from plugins/UserSettings/lang/es.json)6
-rw-r--r--plugins/UserLanguage/lang/et.json (renamed from plugins/UserSettings/lang/et.json)5
-rw-r--r--plugins/UserLanguage/lang/eu.json (renamed from plugins/UserSettings/lang/eu.json)5
-rw-r--r--plugins/UserLanguage/lang/fa.json (renamed from plugins/UserSettings/lang/fa.json)6
-rw-r--r--plugins/UserLanguage/lang/fi.json (renamed from plugins/UserSettings/lang/fi.json)6
-rw-r--r--plugins/UserLanguage/lang/fr.json (renamed from plugins/UserSettings/lang/fr.json)6
-rw-r--r--plugins/UserLanguage/lang/gl.json (renamed from plugins/UserSettings/lang/gl.json)2
-rw-r--r--plugins/UserLanguage/lang/he.json (renamed from plugins/UserSettings/lang/he.json)2
-rw-r--r--plugins/UserLanguage/lang/hi.json (renamed from plugins/UserSettings/lang/hi.json)6
-rw-r--r--plugins/UserLanguage/lang/hr.json (renamed from plugins/UserSettings/lang/hr.json)5
-rw-r--r--plugins/UserLanguage/lang/hu.json (renamed from plugins/UserSettings/lang/hu.json)6
-rw-r--r--plugins/UserLanguage/lang/id.json (renamed from plugins/UserSettings/lang/id.json)6
-rw-r--r--plugins/UserLanguage/lang/is.json (renamed from plugins/UserSettings/lang/is.json)6
-rw-r--r--plugins/UserLanguage/lang/it.json (renamed from plugins/UserSettings/lang/it.json)5
-rw-r--r--plugins/UserLanguage/lang/ja.json (renamed from plugins/UserSettings/lang/ja.json)6
-rw-r--r--plugins/UserLanguage/lang/ka.json (renamed from plugins/UserSettings/lang/ka.json)6
-rw-r--r--plugins/UserLanguage/lang/ko.json (renamed from plugins/UserSettings/lang/ko.json)6
-rw-r--r--plugins/UserLanguage/lang/lt.json (renamed from plugins/UserSettings/lang/lt.json)6
-rw-r--r--plugins/UserLanguage/lang/lv.json (renamed from plugins/UserSettings/lang/lv.json)6
-rw-r--r--plugins/UserLanguage/lang/nb.json (renamed from plugins/UserSettings/lang/nb.json)6
-rw-r--r--plugins/UserLanguage/lang/nl.json (renamed from plugins/UserSettings/lang/nl.json)6
-rw-r--r--plugins/UserLanguage/lang/nn.json (renamed from plugins/UserSettings/lang/nn.json)6
-rw-r--r--plugins/UserLanguage/lang/pl.json (renamed from plugins/UserSettings/lang/pl.json)6
-rw-r--r--plugins/UserLanguage/lang/pt-br.json (renamed from plugins/UserSettings/lang/pt-br.json)6
-rw-r--r--plugins/UserLanguage/lang/pt.json (renamed from plugins/UserSettings/lang/pt.json)6
-rw-r--r--plugins/UserLanguage/lang/ro.json (renamed from plugins/UserSettings/lang/ro.json)6
-rw-r--r--plugins/UserLanguage/lang/ru.json (renamed from plugins/UserSettings/lang/ru.json)6
-rw-r--r--plugins/UserLanguage/lang/sk.json (renamed from plugins/UserSettings/lang/sk.json)6
-rw-r--r--plugins/UserLanguage/lang/sl.json (renamed from plugins/UserSettings/lang/sl.json)5
-rw-r--r--plugins/UserLanguage/lang/sq.json (renamed from plugins/UserSettings/lang/sq.json)6
-rw-r--r--plugins/UserLanguage/lang/sr.json (renamed from plugins/UserSettings/lang/sr.json)6
-rw-r--r--plugins/UserLanguage/lang/sv.json (renamed from plugins/UserSettings/lang/sv.json)6
-rw-r--r--plugins/UserLanguage/lang/ta.json (renamed from plugins/UserSettings/lang/ta.json)2
-rw-r--r--plugins/UserLanguage/lang/te.json (renamed from plugins/UserSettings/lang/te.json)5
-rw-r--r--plugins/UserLanguage/lang/th.json (renamed from plugins/UserSettings/lang/th.json)6
-rw-r--r--plugins/UserLanguage/lang/tl.json (renamed from plugins/UserSettings/lang/tl.json)6
-rw-r--r--plugins/UserLanguage/lang/tr.json (renamed from plugins/UserSettings/lang/tr.json)6
-rw-r--r--plugins/UserLanguage/lang/uk.json (renamed from plugins/UserSettings/lang/uk.json)6
-rw-r--r--plugins/UserLanguage/lang/vi.json (renamed from plugins/UserSettings/lang/vi.json)6
-rw-r--r--plugins/UserLanguage/lang/zh-cn.json (renamed from plugins/UserSettings/lang/zh-cn.json)6
-rw-r--r--plugins/UserLanguage/lang/zh-tw.json (renamed from plugins/UserSettings/lang/zh-tw.json)6
-rw-r--r--plugins/UserLanguage/tests/Fixtures/LanguageFixture.php (renamed from plugins/UserSettings/tests/Fixtures/LanguageFixture.php)3
-rw-r--r--plugins/UserLanguage/tests/System/GetLanguageSystemTest.php (renamed from plugins/UserSettings/tests/System/GetLanguageSystemTest.php)12
-rw-r--r--plugins/UserLanguage/tests/System/expected/test___UserLanguage.getLanguageCode_day.xml (renamed from plugins/UserSettings/tests/System/expected/test___UserSettings.getLanguageCode_day.xml)0
-rw-r--r--plugins/UserLanguage/tests/System/expected/test___UserLanguage.getLanguage_day.xml (renamed from plugins/UserSettings/tests/System/expected/test___UserSettings.getLanguage_day.xml)0
-rw-r--r--plugins/UserSettings/API.php43
-rw-r--r--plugins/UserSettings/Controller.php11
-rw-r--r--plugins/UserSettings/Segment.php21
-rw-r--r--plugins/UserSettings/UserSettings.php15
-rw-r--r--plugins/UserSettings/lang/en.json189
-rw-r--r--plugins/UserSettings/templates/index.twig2
-rw-r--r--plugins/UserSettings/tests/System/processed/.gitkeep0
-rw-r--r--plugins/UsersManager/lang/cs.json2
-rw-r--r--plugins/UsersManager/lang/da.json2
-rw-r--r--plugins/UsersManager/lang/el.json2
-rw-r--r--plugins/UsersManager/lang/pl.json2
-rw-r--r--plugins/VisitTime/Reports/GetByDayOfWeek.php2
m---------plugins/VisitorGenerator0
-rw-r--r--plugins/Widgetize/Controller.php4
-rwxr-xr-xtests/PHPUnit/BenchmarkTestCase.php16
-rw-r--r--tests/PHPUnit/ConsoleCommandTestCase.php16
-rwxr-xr-xtests/PHPUnit/DatabaseTestCase.php21
-rw-r--r--tests/PHPUnit/FakeAccess.php18
-rw-r--r--tests/PHPUnit/Fixture.php31
-rw-r--r--tests/PHPUnit/Framework/TestCase/IntegrationTestCase.php6
-rwxr-xr-xtests/PHPUnit/Framework/TestCase/SystemTestCase.php2
-rw-r--r--tests/PHPUnit/Integration/ArchiveTest.php134
-rw-r--r--tests/PHPUnit/Integration/Plugin/ManagerTest.php2
-rw-r--r--tests/PHPUnit/Integration/WidgetsListTest.php4
-rw-r--r--tests/PHPUnit/IntegrationTestCase.php22
-rwxr-xr-xtests/PHPUnit/System/BlobReportLimitingTest.php2
-rw-r--r--tests/PHPUnit/System/PivotByQueryParamTest.php2
-rw-r--r--tests/PHPUnit/System/expected/test_ImportLogs__UserLanguage.getLanguageCode_month.xml14
-rw-r--r--tests/PHPUnit/System/expected/test_ImportLogs__UserLanguage.getLanguage_month.xml14
-rw-r--r--tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__UserLanguage.getLanguageCode_day.xml13
-rw-r--r--tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__UserLanguage.getLanguage_day.xml13
-rw-r--r--tests/PHPUnit/System/expected/test_OneVisitor_LongUrlsTruncated__UserSettings.getPlugin_day.xml20
-rw-r--r--tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_month.original.html8
-rw-r--r--tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getReportMetadata_day.xml16
-rw-r--r--tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_week.original.html8
-rw-r--r--tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserLanguage.getLanguageCode_day.xml10
-rw-r--r--tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserLanguage.getLanguageCode_week.xml10
-rw-r--r--tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserLanguage.getLanguage_day.xml10
-rw-r--r--tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserLanguage.getLanguage_week.xml10
-rw-r--r--tests/PHPUnit/System/expected/test_noVisit__UserLanguage.getLanguageCode_day.xml2
-rw-r--r--tests/PHPUnit/System/expected/test_noVisit__UserLanguage.getLanguage_day.xml2
-rw-r--r--tests/PHPUnit/System/expected/test_reportLimiting__Resolution.getConfiguration_day.xml (renamed from tests/PHPUnit/System/expected/test_reportLimiting__UserSettings.getConfiguration_day.xml)0
-rw-r--r--tests/PHPUnit/System/expected/test_reportLimiting__Resolution.getResolution_day.xml (renamed from tests/PHPUnit/System/expected/test_reportLimiting__UserSettings.getResolution_day.xml)0
-rw-r--r--tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Resolution.getConfiguration_day.xml (renamed from tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__UserSettings.getConfiguration_day.xml)0
-rw-r--r--tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Resolution.getResolution_day.xml (renamed from tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__UserSettings.getResolution_day.xml)0
m---------tests/PHPUnit/UI0
-rw-r--r--tests/PHPUnit/Unit/DeprecatedMethodsTest.php4
-rw-r--r--tests/PHPUnit/bootstrap.php8
-rw-r--r--tests/README.screenshots.md193
-rw-r--r--tests/README.testing-data.md21
-rw-r--r--tests/UI/.gitignore10
-rw-r--r--tests/UI/Fixtures/UpdaterTestFixture.php21
-rw-r--r--tests/UI/config.dist.js (renamed from tests/lib/screenshot-testing/config.js)0
m---------tests/UI/expected-ui-screenshots0
-rw-r--r--tests/UI/resources/piwik1.0.sql.gzbin0 -> 249108 bytes
-rw-r--r--tests/UI/screenshot-diffs/diffgenerator.js58
-rw-r--r--tests/UI/screenshot-diffs/singlediff.html27
-rw-r--r--tests/UI/specs/ActionsDataTable_spec.js78
-rw-r--r--tests/UI/specs/BarGraph_spec.js33
-rw-r--r--tests/UI/specs/DBStats_spec.js20
-rw-r--r--tests/UI/specs/DashboardManager_spec.js52
-rw-r--r--tests/UI/specs/Dashboard_spec.js216
-rw-r--r--tests/UI/specs/EvolutionGraph_spec.js143
-rw-r--r--tests/UI/specs/GoalsTable_spec.js56
-rw-r--r--tests/UI/specs/Installation_spec.js136
-rw-r--r--tests/UI/specs/Login_spec.js98
-rw-r--r--tests/UI/specs/Menus_spec.js48
-rw-r--r--tests/UI/specs/Overlay_spec.js97
-rw-r--r--tests/UI/specs/PeriodSelector_spec.js89
-rw-r--r--tests/UI/specs/PieGraph_spec.js39
-rw-r--r--tests/UI/specs/PivotByDimension_spec.js40
-rw-r--r--tests/UI/specs/RowEvolution_spec.js65
-rw-r--r--tests/UI/specs/SegmentSelectorEditor_spec.js187
-rw-r--r--tests/UI/specs/SiteSelector_spec.js55
-rw-r--r--tests/UI/specs/Transitions_spec.js33
-rw-r--r--tests/UI/specs/UIIntegration_spec.js608
-rw-r--r--tests/UI/specs/Updater_spec.js37
-rw-r--r--tests/UI/specs/ViewDataTable_spec.js143
-rw-r--r--tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_0_initial.pngbin19620 -> 0 bytes
-rw-r--r--tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_10_change_limit.pngbin28185 -> 0 bytes
-rw-r--r--tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_11_flattened.pngbin35957 -> 0 bytes
-rw-r--r--tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_12_aggregate_shown.pngbin37890 -> 0 bytes
-rw-r--r--tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_13_make_hierarchical.pngbin28185 -> 0 bytes
-rw-r--r--tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_14_visits_percent.pngbin33738 -> 0 bytes
-rw-r--r--tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_15_search.pngbin19324 -> 0 bytes
-rw-r--r--tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_1_all_columns.pngbin25255 -> 0 bytes
-rw-r--r--tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_2_column_sorted_desc.pngbin28463 -> 0 bytes
-rw-r--r--tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_3_column_sorted_asc.pngbin24571 -> 0 bytes
-rw-r--r--tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_4_exclude_low_population.pngbin24892 -> 0 bytes
-rw-r--r--tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_5_goals.pngbin29218 -> 0 bytes
-rw-r--r--tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_6_bar_graph.pngbin12645 -> 0 bytes
-rw-r--r--tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_7_pie_graph.pngbin26126 -> 0 bytes
-rw-r--r--tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_8_tag_cloud.pngbin30972 -> 0 bytes
-rw-r--r--tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_9_normal_table.pngbin36538 -> 0 bytes
-rw-r--r--tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_export_options.pngbin22297 -> 0 bytes
-rw-r--r--tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_related_report_click.pngbin19061 -> 0 bytes
-rw-r--r--tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_subtables_loaded.pngbin34649 -> 0 bytes
-rw-r--r--tests/lib/screenshot-testing/run-tests.js15
-rw-r--r--tests/lib/screenshot-testing/support/app.js6
-rw-r--r--tests/lib/screenshot-testing/support/diff-viewer.js4
-rw-r--r--tests/lib/screenshot-testing/support/globals.js2
-rw-r--r--tests/lib/screenshot-testing/support/page-renderer.js4
-rw-r--r--tests/resources/OmniFixture-dump.sql.gzbin656140 -> 656155 bytes
-rwxr-xr-xtests/travis/initiate_ui_tests.sh32
-rwxr-xr-xtests/travis/travis.sh2
-rwxr-xr-xtests/travis/upload_artifacts.sh4
372 files changed, 3499 insertions, 1065 deletions
diff --git a/.gitmodules b/.gitmodules
index 084907ad46..55da909488 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,7 +1,3 @@
-[submodule "plugins/PleineLune"]
- path = plugins/PleineLune
- url = https://github.com/piwik/theme-PleineLune.git
- branch = master
[submodule "plugins/SecurityInfo"]
path = plugins/SecurityInfo
url = https://github.com/piwik/plugin-SecurityInfo.git
@@ -14,10 +10,6 @@
path = plugins/VisitorGenerator
url = https://github.com/piwik/plugin-VisitorGenerator.git
branch = master
-[submodule "tests/PHPUnit/UI"]
- path = tests/PHPUnit/UI
- url = https://github.com/piwik/piwik-ui-tests.git
- branch = master
[submodule "plugins/CustomAlerts"]
path = plugins/CustomAlerts
url = https://github.com/piwik/plugin-CustomAlerts.git
@@ -34,6 +26,9 @@
path = plugins/QueuedTracking
url = https://github.com/piwik/plugin-QueuedTracking.git
branch = master
+[submodule "tests/UI/expected-ui-screenshots"]
+ path = tests/UI/expected-ui-screenshots
+ url = https://github.com/piwik/piwik-ui-tests.git
# Note: when you add a submodule that SHOULD be left in the packaged release such as the few submodules below,
# then you MUST add these submodules names in the SUBMODULES_PACKAGED_WITH_CORE variable in:
diff --git a/.travis.yml b/.travis.yml
index 39d6727062..481aad01a2 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -30,6 +30,7 @@ env:
# All tests after another
- TEST_SUITE=AllTests MYSQL_ADAPTER=PDO_MYSQL
- TEST_SUITE=AllTests MYSQL_ADAPTER=MYSQLI
+ - TEST_SUITE=UITests MYSQL_ADAPTER=PDO_MYSQL
global:
- PIWIK_ROOT_DIR=$TRAVIS_BUILD_DIR
- secure: "AMhZmPZx4SUcuZRBzGHlQPxzM4D8FvFB3UThDa52gbi9KIBrwcumzV2VGi6B\n5fgjwtB4XTE1In7qhY2HMikPWBmWYYOQ5QcMPJsqqHt4iMmahx8WKzne6NOk\nNpqAuje/fulNGeP2LJZi0nrub3Fh4VwXaOvpNloKNQN/2JuqPtM="
@@ -58,6 +59,9 @@ matrix:
env: TEST_SUITE=IntegrationTests MYSQL_ADAPTER=PDO_MYSQL
- php: hhvm
env: TEST_SUITE=UnitTests MYSQL_ADAPTER=PDO_MYSQL
+ # run UI tests on PHP 5.3.3 only
+ - php: 5.6
+ env: TEST_SUITE=UITests MYSQL_ADAPTER=PDO_MYSQL
# run all tests not on PHP 5.6 and run MySQLI tests only on 5.6
- php: 5.6
env: TEST_SUITE=AllTests MYSQL_ADAPTER=PDO_MYSQL
@@ -117,9 +121,6 @@ before_script:
- mysql -e "SELECT @@sql_mode;"
# - mysql -e "SHOW GLOBAL VARIABLES;"
-
- # Start UI tests
- - ./tests/travis/initiate_ui_tests.sh
# travis now complains about this failing 9 times out of 10, so removing it. hopefully the random failures it prevented won't come back
# - travis_retry composer self-update
diff --git a/CHANGELOG.md b/CHANGELOG.md
index ebc0fbb1af..325e6ecdd2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -22,17 +22,23 @@ This is a changelog for Piwik platform developers. All changes for our HTTP API'
* The following classes have been deprecated:
* `Piwik\TaskScheduler`: use `Piwik\Scheduler\Scheduler` instead
* `Piwik\ScheduledTask`: use `Piwik\Scheduler\Task` instead
+* The API method `UserSettings.getLanguage` is deprecated and will be removed from May 1st 2015. Use `UserLanguage.getLanguage` instead
+* The API method `UserSettings.getLanguageCode` is deprecated and will be removed from May 1st 2015. Use `UserLanguage.getLanguageCode` instead
* The `Piwik\Registry` class has been removed in favor of using the container:
* `Registry::get('auth')` should be replaced with `StaticContainer::get('Piwik\Auth')`
* `Registry::set('auth', $auth)` should be replaced with `StaticContainer::getContainer()->set('Piwik\Auth', $auth)`
### New features
* You can now generate UI / screenshot tests using the command `generate:test`
+* During UI tests we do now add a CSS class to the HTML element called `uiTest`. This allows you do hide content when screenshots are captured.
### Library updates
* Updated AngularJS from 1.2.26 to 1.2.28
* Updated piwik/device-detector from 2.8 to 3.0
+### Internal change
+* UI specs were moved from `tests/PHPUnit/UI` to `tests/UI`. We also moved the UI specs directly into the Piwik repository meaning the [piwik-ui-tests](https://github.com/piwik/piwik-ui-tests) repository contains only the expected screenshots from now on.
+
## Piwik 2.10.0
### Breaking Changes
diff --git a/README.md b/README.md
index 4d3302298d..49ec6f8ae4 100644
--- a/README.md
+++ b/README.md
@@ -99,7 +99,7 @@ We are grateful if you can share the Job Description with your friends and colle
The Piwik project uses an ever-expanding comprehensive set of thousands of unit and integration tests and dozens of system [tests](https://github.com/piwik/piwik/tree/master/tests),
running on the hosted distributed continuous integration platform Travis-CI.
-Build status (master branch) [![Build Status](https://travis-ci.org/piwik/piwik.svg?branch=master)](https://travis-ci.org/piwik/piwik) - Screenshot tests Build [![Build Status](https://travis-ci.org/piwik/piwik-ui-tests.svg?branch=master)](https://travis-ci.org/piwik/piwik-ui-tests)
+Build status (master branch) [![Build Status](https://travis-ci.org/piwik/piwik.svg?branch=master)](https://travis-ci.org/piwik/piwik)
Code Coverage: [![Code Coverage](https://scrutinizer-ci.com/g/piwik/piwik/badges/coverage.png?b=master)](https://scrutinizer-ci.com/g/piwik/piwik/?branch=master)
diff --git a/config/global.ini.php b/config/global.ini.php
index 183dc48a6f..3a71c90683 100644
--- a/config/global.ini.php
+++ b/config/global.ini.php
@@ -717,6 +717,7 @@ Plugins[] = Dashboard
Plugins[] = MultiSites
Plugins[] = Referrers
Plugins[] = UserSettings
+Plugins[] = UserLanguage
Plugins[] = DevicesDetection
Plugins[] = Goals
Plugins[] = Ecommerce
diff --git a/core/API/Proxy.php b/core/API/Proxy.php
index f442949a3c..0345693b62 100644
--- a/core/API/Proxy.php
+++ b/core/API/Proxy.php
@@ -415,7 +415,7 @@ class Proxy extends Singleton
}
/**
- * Includes the class API by looking up plugins/UserSettings/API.php
+ * Includes the class API by looking up plugins/xxx/API.php
*
* @param string $fileName api class name eg. "API"
* @throws Exception
diff --git a/core/API/Request.php b/core/API/Request.php
index 631b7c089c..8fd3518093 100644
--- a/core/API/Request.php
+++ b/core/API/Request.php
@@ -46,7 +46,7 @@ use Piwik\Log;
*
* **Basic Usage**
*
- * $request = new Request('method=UserSettings.getLanguage&idSite=1&date=yesterday&period=week'
+ * $request = new Request('method=UserLanguage.getLanguage&idSite=1&date=yesterday&period=week'
* . '&format=xml&filter_limit=5&filter_offset=0')
* $result = $request->process();
* echo $result;
@@ -54,7 +54,7 @@ use Piwik\Log;
* **Getting a unrendered DataTable**
*
* // use the convenience method 'processRequest'
- * $dataTable = Request::processRequest('UserSettings.getLanguage', array(
+ * $dataTable = Request::processRequest('UserLanguage.getLanguage', array(
* 'idSite' => 1,
* 'date' => 'yesterday',
* 'period' => 'week',
@@ -78,7 +78,7 @@ class Request
* forwarded to request array before it is returned.
*
* @param string|array $request The base request string or array, eg,
- * `'module=UserSettings&action=getLanguage'`.
+ * `'module=UserLanguage&action=getLanguage'`.
* @param array $defaultRequest Default query parameters. If a query parameter is absent in `$request`, it will be loaded
* from this. Defaults to `$_GET + $_POST`.
* @return array
@@ -125,7 +125,7 @@ class Request
* Constructor.
*
* @param string|array $request Query string that defines the API call (must at least contain a **method** parameter),
- * eg, `'method=UserSettings.getLanguage&idSite=1&date=yesterday&period=week&format=xml'`
+ * eg, `'method=UserLanguage.getLanguage&idSite=1&date=yesterday&period=week&format=xml'`
* If a request is not provided, then we use the values in the `$_GET` and `$_POST`
* superglobals.
* @param array $defaultRequest Default query parameters. If a query parameter is absent in `$request`, it will be loaded
diff --git a/core/Archive.php b/core/Archive.php
index 307718f52b..60d6791726 100644
--- a/core/Archive.php
+++ b/core/Archive.php
@@ -829,7 +829,7 @@ class Archive
/**
* Returns the name of the plugin that archives a given report.
*
- * @param string $report Archive data name, eg, `'nb_visits'`, `'UserSettings_...'`, etc.
+ * @param string $report Archive data name, eg, `'nb_visits'`, `'DevicesDetection_...'`, etc.
* @return string Plugin name.
* @throws \Exception If a plugin cannot be found or if the plugin for the report isn't
* activated.
diff --git a/core/ArchiveProcessor/Rules.php b/core/ArchiveProcessor/Rules.php
index 1334ad1f9a..df2a8c45af 100644
--- a/core/ArchiveProcessor/Rules.php
+++ b/core/ArchiveProcessor/Rules.php
@@ -10,6 +10,7 @@ namespace Piwik\ArchiveProcessor;
use Exception;
use Piwik\Config;
+use Piwik\Container\StaticContainer;
use Piwik\DataAccess\ArchiveWriter;
use Piwik\Date;
use Piwik\Log;
@@ -228,18 +229,28 @@ class Rules
public static function isArchivingDisabledFor(array $idSites, Segment $segment, $periodLabel)
{
+ $generalConfig = Config::getInstance()->General;
+
if ($periodLabel == 'range') {
- return false;
+ if (!isset($generalConfig['archiving_range_force_on_browser_request'])
+ || $generalConfig['archiving_range_force_on_browser_request'] != false
+ ) {
+ return false;
+ } else {
+ Log::debug("Not forcing archiving for range period.");
+ }
}
+
$processOneReportOnly = !self::shouldProcessReportsAllPlugins($idSites, $segment, $periodLabel);
$isArchivingDisabled = !self::isRequestAuthorizedToArchive() || self::$archivingDisabledByTests;
- if ($processOneReportOnly) {
-
+ if ($processOneReportOnly
+ && $periodLabel != 'range'
+ ) {
// When there is a segment, we disable archiving when browser_archiving_disabled_enforce applies
if (!$segment->isEmpty()
&& $isArchivingDisabled
- && Config::getInstance()->General['browser_archiving_disabled_enforce']
+ && $generalConfig['browser_archiving_disabled_enforce']
&& !SettingsServer::isArchivePhpTriggered() // Only applies when we are not running core:archive command
) {
Log::debug("Archiving is disabled because of config setting browser_archiving_disabled_enforce=1");
diff --git a/core/Piwik.php b/core/Piwik.php
index 8494f7b83a..a9773c7449 100644
--- a/core/Piwik.php
+++ b/core/Piwik.php
@@ -503,7 +503,7 @@ class Piwik
}
/**
- * Returns the current module read from the URL (eg. 'API', 'UserSettings', etc.)
+ * Returns the current module read from the URL (eg. 'API', 'DevicesDetection', etc.)
*
* @return string
*/
diff --git a/core/Plugin/ComponentFactory.php b/core/Plugin/ComponentFactory.php
index 68415e9397..751f1157d4 100644
--- a/core/Plugin/ComponentFactory.php
+++ b/core/Plugin/ComponentFactory.php
@@ -24,7 +24,7 @@ class ComponentFactory
* associated subdirectory.
*
* @param string $pluginName The name of the plugin the component is expected to belong to,
- * eg, `'UserSettings'`.
+ * eg, `'DevicesDetection'`.
* @param string $componentClassSimpleName The component's class name w/o namespace, eg,
* `"GetKeywords"`.
* @param string $componentTypeClass The fully qualified class name of the component type, eg,
@@ -70,7 +70,7 @@ class ComponentFactory
* @param string $componentTypeClass The fully qualified class name of the component type, eg,
* `"Piwik\Plugin\Report"`.
* @param string $pluginName|false The name of the plugin the component is expected to belong to,
- * eg, `'UserSettings'`.
+ * eg, `'DevicesDetection'`.
* @param callback $predicate
* @return mixed The component that satisfies $predicate or null if not found.
*/
diff --git a/core/Plugin/Controller.php b/core/Plugin/Controller.php
index c754a4c18b..b7b1db6d82 100644
--- a/core/Plugin/Controller.php
+++ b/core/Plugin/Controller.php
@@ -580,43 +580,55 @@ abstract class Controller
*/
protected function setGeneralVariablesView($view)
{
- $view->date = $this->strDate;
-
$view->idSite = $this->idSite;
$this->checkSitePermission();
$this->setPeriodVariablesView($view);
- $rawDate = Common::getRequestVar('date');
- $periodStr = Common::getRequestVar('period');
- if ($periodStr != 'range') {
- $date = Date::factory($this->strDate);
- $period = Period\Factory::build($periodStr, $date);
- } else {
- $period = new Range($periodStr, $rawDate, $this->site->getTimezone());
- }
- $view->rawDate = $rawDate;
- $view->prettyDate = self::getCalendarPrettyDate($period);
-
$view->siteName = $this->site->getName();
$view->siteMainUrl = $this->site->getMainUrl();
+ $siteTimezone = $this->site->getTimezone();
+
$datetimeMinDate = $this->site->getCreationDate()->getDatetime();
- $minDate = Date::factory($datetimeMinDate, $this->site->getTimezone());
+ $minDate = Date::factory($datetimeMinDate, $siteTimezone);
$this->setMinDateView($minDate, $view);
- $maxDate = Date::factory('now', $this->site->getTimezone());
+ $maxDate = Date::factory('now', $siteTimezone);
$this->setMaxDateView($maxDate, $view);
+ $rawDate = Common::getRequestVar('date');
+ $periodStr = Common::getRequestVar('period');
+
+ if ($periodStr != 'range') {
+ $date = Date::factory($this->strDate);
+ $validDate = $this->getValidDate($date, $minDate, $maxDate);
+ $period = Period\Factory::build($periodStr, $validDate);
+
+ if ($date->toString() !== $validDate->toString()) {
+ // we to not always change date since it could convert a strDate "today" to "YYYY-MM-DD"
+ // only change $this->strDate if it was not valid before
+ $this->setDate($validDate);
+ }
+ } else {
+ $period = new Range($periodStr, $rawDate, $siteTimezone);
+ }
+
// Setting current period start & end dates, for pre-setting the calendar when "Date Range" is selected
$dateStart = $period->getDateStart();
- if ($dateStart->isEarlier($minDate)) {
- $dateStart = $minDate;
- }
- $dateEnd = $period->getDateEnd();
- if ($dateEnd->isLater($maxDate)) {
- $dateEnd = $maxDate;
+ $dateStart = $this->getValidDate($dateStart, $minDate, $maxDate);
+
+ $dateEnd = $period->getDateEnd();
+ $dateEnd = $this->getValidDate($dateEnd, $minDate, $maxDate);
+
+ if ($periodStr == 'range') {
+ // make sure we actually display the correct calendar pretty date
+ $newRawDate = $dateStart->toString() . ',' . $dateEnd->toString();
+ $period = new Range($periodStr, $newRawDate, $siteTimezone);
}
+ $view->date = $this->strDate;
+ $view->prettyDate = self::getCalendarPrettyDate($period);
+ $view->rawDate = $rawDate;
$view->startDate = $dateStart;
$view->endDate = $dateEnd;
@@ -635,6 +647,19 @@ abstract class Controller
}
}
+ private function getValidDate(Date $date, Date $minDate, Date $maxDate)
+ {
+ if ($date->isEarlier($minDate)) {
+ $date = $minDate;
+ }
+
+ if ($date->isLater($maxDate)) {
+ $date = $maxDate;
+ }
+
+ return $date;
+ }
+
/**
* Assigns a set of generally useful variables to a {@link Piwik\View} instance.
*
diff --git a/core/Plugin/Manager.php b/core/Plugin/Manager.php
index 3d793bf0c1..fd7b02837f 100644
--- a/core/Plugin/Manager.php
+++ b/core/Plugin/Manager.php
@@ -711,7 +711,7 @@ class Manager extends Singleton
*
* array(
* 'UserCountry' => Plugin $pluginObject,
- * 'UserSettings' => Plugin $pluginObject,
+ * 'UserLanguage' => Plugin $pluginObject,
* );
*
* @return Plugin[]
@@ -745,7 +745,7 @@ class Manager extends Singleton
*
* array(
* 'UserCountry' => Plugin $pluginObject,
- * 'UserSettings' => Plugin $pluginObject,
+ * 'UserLanguage' => Plugin $pluginObject,
* );
*
* @return Plugin[]
@@ -768,7 +768,7 @@ class Manager extends Singleton
*
* array(
* 'UserCountry'
- * 'UserSettings'
+ * 'UserLanguage'
* );
*
* @return string[]
diff --git a/core/Plugin/Report.php b/core/Plugin/Report.php
index 3608a5facb..62ed594f8c 100644
--- a/core/Plugin/Report.php
+++ b/core/Plugin/Report.php
@@ -196,7 +196,7 @@ class Report
'Goals_Goals',
'General_Visitors',
'DevicesDetection_DevicesDetection',
- 'UserSettings_VisitorSettings',
+ 'General_VisitorSettings',
'API'
);
diff --git a/core/Tracker/PageUrl.php b/core/Tracker/PageUrl.php
index 0e5da41ba4..bbd98882cd 100644
--- a/core/Tracker/PageUrl.php
+++ b/core/Tracker/PageUrl.php
@@ -11,6 +11,7 @@ namespace Piwik\Tracker;
use Piwik\Common;
use Piwik\Config;
+use Piwik\Piwik;
use Piwik\UrlHelper;
class PageUrl
@@ -86,14 +87,22 @@ class PageUrl
$website = Cache::getCacheWebsiteAttributes($idSite);
$excludedParameters = self::getExcludedParametersFromWebsite($website);
- if (!empty($excludedParameters)) {
- Common::printDebug('Excluding parameters "' . implode(',', $excludedParameters) . '" from URL');
- }
-
$parametersToExclude = array_merge($excludedParameters,
self::$queryParametersToExclude,
$campaignTrackingParameters);
+ /**
+ * Triggered before setting the action url in Piwik\Tracker\Action so plugins can register
+ * parameters to be excluded from the tracking URL (e.g. campaign parameters).
+ *
+ * @param array &$parametersToExclude An array of parameters to exclude from the tracking url.
+ */
+ Piwik::postEvent('Tracker.PageUrl.getQueryParametersToExclude', array(&$parametersToExclude));
+
+ if (!empty($parametersToExclude)) {
+ Common::printDebug('Excluding parameters "' . implode(',', $parametersToExclude) . '" from URL');
+ }
+
$parametersToExclude = array_map('strtolower', $parametersToExclude);
return $parametersToExclude;
}
diff --git a/core/Updates/2.11.0-b4.php b/core/Updates/2.11.0-b4.php
new file mode 100644
index 0000000000..00dc1b23ee
--- /dev/null
+++ b/core/Updates/2.11.0-b4.php
@@ -0,0 +1,49 @@
+<?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\Updates;
+
+use Piwik\DataAccess\ArchiveTableCreator;
+use Piwik\Updater;
+use Piwik\Updates;
+
+class Updates_2_11_0_b4 extends Updates
+{
+
+ static function getSql()
+ {
+ $sqls = array();
+
+ $archiveTables = ArchiveTableCreator::getTablesArchivesInstalled();
+
+ $archiveBlobTables = array_filter($archiveTables, function($name) {
+ return ArchiveTableCreator::getTypeFromTableName($name) == ArchiveTableCreator::BLOB_TABLE;
+ });
+
+ foreach ($archiveBlobTables as $table) {
+
+ $sqls["UPDATE " . $table . " SET name = 'UserLanguage_language' WHERE name = 'UserSettings_language'"] = false;
+ }
+
+ return $sqls;
+ }
+
+ static function update()
+ {
+ $pluginManager = \Piwik\Plugin\Manager::getInstance();
+
+ try {
+ $pluginManager->activatePlugin('UserLanguage');
+ } catch(\Exception $e) {
+ }
+
+ Updater::updateDatabase(__FILE__, self::getSql());
+ }
+
+}
diff --git a/core/Url.php b/core/Url.php
index 297932416c..04131c9827 100644
--- a/core/Url.php
+++ b/core/Url.php
@@ -28,7 +28,7 @@ use Piwik\Session;
* public function myControllerAction()
* {
* $url = Url::getCurrentQueryStringWithParametersModified(array(
- * 'module' => 'UserSettings',
+ * 'module' => 'DevicesDetection',
* 'action' => 'index'
* ));
* Url::redirectToUrl($url);
diff --git a/core/UrlHelper.php b/core/UrlHelper.php
index 4eedce07a9..a0bc340bbd 100644
--- a/core/UrlHelper.php
+++ b/core/UrlHelper.php
@@ -416,6 +416,7 @@ class UrlHelper
|| strpos($query, sprintf('?%s=', $variableName)) !== false
// search engines with no keyword
+ || $searchEngineName == 'Ixquick'
|| $searchEngineName == 'Google Images'
|| $searchEngineName == 'DuckDuckGo')
) {
diff --git a/core/Version.php b/core/Version.php
index eab5ff373f..f67f64b677 100644
--- a/core/Version.php
+++ b/core/Version.php
@@ -20,7 +20,7 @@ final class Version
* The current Piwik version.
* @var string
*/
- const VERSION = '2.11.0-b3';
+ const VERSION = '2.11.0-b4';
public function isStableVersion($version)
{
diff --git a/core/ViewDataTable/Config.php b/core/ViewDataTable/Config.php
index 1706e4b15f..220a253518 100644
--- a/core/ViewDataTable/Config.php
+++ b/core/ViewDataTable/Config.php
@@ -586,7 +586,7 @@ class Config
* references the one that is currently being displayed, it will not be added to the related
* report list.
*
- * @param string $relatedReport The plugin and method of the report, eg, `'UserSettings.getBrowser'`.
+ * @param string $relatedReport The plugin and method of the report, eg, `'DevicesDetection.getBrowsers'`.
* @param string $title The report's display name, eg, `'Browsers'`.
* @param array $queryParams Any extra query parameters to set in releated report's URL, eg,
* `array('idGoal' => 'ecommerceOrder')`.
@@ -620,8 +620,8 @@ class Config
* titles, eg,
* ```
* array(
- * 'UserSettings.getBrowser' => 'Browsers',
- * 'UserSettings.getConfiguration' => 'Configurations'
+ * 'DevicesDetection.getBrowsers' => 'Browsers',
+ * 'Resolution.getConfiguration' => 'Configurations'
* )
* ```
*/
diff --git a/core/ViewDataTable/Factory.php b/core/ViewDataTable/Factory.php
index 01d7113498..a5de6b3f06 100644
--- a/core/ViewDataTable/Factory.php
+++ b/core/ViewDataTable/Factory.php
@@ -80,7 +80,7 @@ class Factory
* If nothing is configured for the report and `null` is supplied for this
* argument, **table** is used.
* @param bool|false|string $apiAction The API method for the report that will be displayed, eg,
- * `'UserSettings.getBrowser'`.
+ * `'DevicesDetection.getBrowsers'`.
* @param bool|false|string $controllerAction The controller name and action dedicated to displaying the report. This
* action is used when reloading reports or changing the report visualization.
* Defaulted to `$apiAction` if `false` is supplied.
diff --git a/core/WidgetsList.php b/core/WidgetsList.php
index c474061606..e91a0f2b38 100644
--- a/core/WidgetsList.php
+++ b/core/WidgetsList.php
@@ -138,7 +138,7 @@ class WidgetsList extends Singleton
'VisitsSummary_VisitsSummary',
'Live!',
'General_Visitors',
- 'UserSettings_VisitorSettings',
+ 'General_VisitorSettings',
'DevicesDetection_DevicesDetection',
'General_Actions',
'Events_Events',
diff --git a/lang/am.json b/lang/am.json
index 2487e0f825..71588db3d8 100644
--- a/lang/am.json
+++ b/lang/am.json
@@ -113,6 +113,7 @@
"VBarGraph": "አቀባዊ አሞሌ ግራፍ",
"View": "ትእይታ",
"Visitors": "ጎብኝዎች",
+ "VisitorSettings": "የጎበኚዎች ቅንብሮች",
"Warning": "ማስጠንቀቂያ",
"Website": "ድር ጣቢያ",
"Widgets": "Widgets",
diff --git a/lang/ar.json b/lang/ar.json
index 4d3abdb165..67ea382819 100644
--- a/lang/ar.json
+++ b/lang/ar.json
@@ -268,6 +268,7 @@
"VisitorID": "معرف الزائر",
"VisitorIP": "عنوان IP للزائر",
"Visitors": "الزوار",
+ "VisitorSettings": "إعدادات الزوار",
"VisitType": "نوع الزائر",
"Warning": "تنبيه",
"WarningFileIntegrityNoManifest": "لم يمكن إجراء فحص سلامة الملفات بسبب فقد ملف manifest.inc.php.",
diff --git a/lang/be.json b/lang/be.json
index d67ba3d578..d94b105a7b 100644
--- a/lang/be.json
+++ b/lang/be.json
@@ -306,6 +306,7 @@
"VisitorID": "ID наведвальніка",
"VisitorIP": "IP наведвальніка",
"Visitors": "Наведвальнікі",
+ "VisitorSettings": "Налады карыстача",
"VisitsWith": "Наведванняў з %s",
"VisitType": "Тып наведвальніка",
"VisitTypeExample": "Напрыклад, каб выбраць усіх наведвальнікаў, якія вяртаюцца на вэб-сайт, у тым ліку і тых, хто купіў нешта ў сваіх папярэдніх візітах, API-запыт будзе змяшчаць %s",
diff --git a/lang/bg.json b/lang/bg.json
index 1fa1cb1c30..c30f48ca0c 100644
--- a/lang/bg.json
+++ b/lang/bg.json
@@ -407,6 +407,7 @@
"VisitorID": "ID на посетител",
"VisitorIP": "IP на посетител",
"Visitors": "Посетители",
+ "VisitorSettings": "Настройки на посетителя",
"VisitsWith": "Посещения с %s",
"VisitType": "Тип на посетител",
"VisitTypeExample": "Например, ако изберете всички посетители, които са се завърнали на сайта, включително тези, които са купили нещо при предишните посещения, API заявката ще съдържа %s",
diff --git a/lang/ca.json b/lang/ca.json
index fc8c5e72bf..759cae5d79 100644
--- a/lang/ca.json
+++ b/lang/ca.json
@@ -362,6 +362,7 @@
"VisitorID": "ID del visitant",
"VisitorIP": "Ip del visitant",
"Visitors": "Visitants",
+ "VisitorSettings": "Configuració del visitant",
"VisitsWith": "Visites amb %s",
"VisitType": "Tipus de visitant",
"VisitTypeExample": "Per exemple, per seleccionar tots els visitants que han retornat al lloc web, incloent els que han comprat alguna cosa en anteriors visites, la petició de l'API tindria %s",
diff --git a/lang/cs.json b/lang/cs.json
index 71bf4ded0b..91a1b0191c 100644
--- a/lang/cs.json
+++ b/lang/cs.json
@@ -148,7 +148,10 @@
"EvolutionSummaryGeneric": "%1$s v %2$s srovnáno s %3$s v %4$s. Vývin: %5$s",
"ExceptionCheckUserHasSuperUserAccessOrIsTheUser": "Uživatel musí být super uživatel nebo uživatel %s.",
"ExceptionConfigurationFileNotFound": "Konfigurační soubor {%s} nebyl nalezen",
+ "ExceptionContactSupportGeneric": "Pokud problém přetrvá, %skontaktujte pro pomoc vašeho Piwik administrátora%s.",
"ExceptionDatabaseVersion": "Vaše %1$s verze je %2$s ale Piwik vyžaduje minimálně %3$s.",
+ "ExceptionDatabaseVersionNewerThanCodebase": "Kód Piwiku je z verze %1$s, ale bylo zjištěno, že databáze byla již aktualizována na verzi %2$s.",
+ "ExceptionDatabaseVersionNewerThanCodebaseWait": "Vaši administrátoři možná pracují na aktualizaci. Zkuste to, prosím, za pár minut.",
"ExceptionFileIntegrity": "Test integrity selhal: %s",
"ExceptionFilesizeMismatch": "Nesouhlasí velikost souboru: %1$s (očekávaná délka: %2$s, nalezeno: %3$s)",
"ExceptionIncompatibleClientServerVersions": "Vaše %1$s verze klienta je %2$s tato je ale nekompatibilní se serverem %3$s.",
@@ -185,6 +188,7 @@
"ForExampleShort": "např.",
"Forums": "Fóra",
"FromReferrer": "z",
+ "General": "Obecné",
"GeneralInformation": "Obecné informace",
"GetStarted": "Začít",
"GiveUsYourFeedback": "Dejte nám zpětnou vazbu!",
@@ -425,6 +429,7 @@
"VisitorID": "ID návštěvníka",
"VisitorIP": "IP návštěvníka",
"Visitors": "Návštěvníci",
+ "VisitorSettings": "Nastavení návštěvníků",
"VisitsWith": "Návštěv s %s",
"VisitType": "Typ návštěvníka",
"VisitTypeExample": "Například pro výběr všech návštěvníků, kteří se vrátili na stránky včetně těch, co si v předcchozích návštěvách něco koupili, by API požadavek obsahoval %s",
diff --git a/lang/da.json b/lang/da.json
index 5d92d3b2f2..75f876bca3 100644
--- a/lang/da.json
+++ b/lang/da.json
@@ -187,6 +187,7 @@
"ForExampleShort": "fx.",
"Forums": "Forum",
"FromReferrer": "fra",
+ "General": "Generelt",
"GeneralInformation": "General Information",
"GetStarted": "Kom i gang",
"GiveUsYourFeedback": "Tilbagemelding!",
@@ -427,6 +428,7 @@
"VisitorID": "Besøgendes ID",
"VisitorIP": "Besøgendes IP",
"Visitors": "Besøgende",
+ "VisitorSettings": "Besøgendes indstillinger",
"VisitsWith": "Besøg med %s",
"VisitType": "Besøgstype",
"VisitTypeExample": "F. eks., for at vælge alle besøgende, som er vendt tilbage til hjemmesiden, herunder dem, der har købt noget i deres tidligere besøg, vil API-anmodningen indeholde %s",
diff --git a/lang/de.json b/lang/de.json
index 7092d5a722..b70dd4d624 100644
--- a/lang/de.json
+++ b/lang/de.json
@@ -429,6 +429,7 @@
"VisitorID": "ID des Besuchers",
"VisitorIP": "IP des Besuchers",
"Visitors": "Besucher",
+ "VisitorSettings": "Besuchereinstellungen",
"VisitsWith": "Besuche mit %s",
"VisitType": "Art des Besuchers",
"VisitTypeExample": "Um beispielsweise alle wiederkehrenden Besucher abzufragen, die Bestellungen getätigt haben, muss der API Aufruf folgendes enthalten: %s",
diff --git a/lang/el.json b/lang/el.json
index 7b978be9d1..31e323dcb6 100644
--- a/lang/el.json
+++ b/lang/el.json
@@ -188,6 +188,7 @@
"ForExampleShort": "π.χ.",
"Forums": "Φόρουμ",
"FromReferrer": "από",
+ "General": "Γενικά",
"GeneralInformation": "Γενικές Πληροφορίες",
"GetStarted": "Ξεκινήστε",
"GiveUsYourFeedback": "Έχετε παρατηρήσεις;",
@@ -428,6 +429,7 @@
"VisitorID": "Κωδικός Επισκέπτη",
"VisitorIP": "IP Επισκέπτη",
"Visitors": "Επισκέπτες",
+ "VisitorSettings": "Ρυθμίσεις επισκέπτη",
"VisitsWith": "Επισκέψεις με %s",
"VisitType": "Τύπος Επισκέπτη",
"VisitTypeExample": "Για παράδειγμα, για να επιλέξετε όλους τους επισκέπτες που έχουν επιστρέψει στην ιστοσελίδα και να περιλάβετε αυτούς που έχουν αγοράσει κάτι στις προηγούμενες επισκέψεις, το αίτημα API θα περιέχει %s",
diff --git a/lang/en.json b/lang/en.json
index 7c3eb05f17..dbaa9a47c1 100644
--- a/lang/en.json
+++ b/lang/en.json
@@ -430,6 +430,7 @@
"VisitorIP": "Visitor IP",
"Visitors": "Visitors",
"VisitsWith": "Visits with %s",
+ "VisitorSettings": "Visitor Settings",
"VisitType": "Visitor type",
"VisitTypeExample": "For example, to select all visitors who have returned to the website, including those who have bought something in their previous visits, the API request would contain %s",
"Warning": "Warning",
diff --git a/lang/es.json b/lang/es.json
index 2e6835fb37..dd8591e4c6 100644
--- a/lang/es.json
+++ b/lang/es.json
@@ -417,6 +417,7 @@
"VisitorID": "ID del visitante",
"VisitorIP": "IP del visitante",
"Visitors": "Visitantes",
+ "VisitorSettings": "Configuración de visitantes",
"VisitsWith": "Visitas con %s",
"VisitType": "Tipo de visitante",
"VisitTypeExample": "Por ejemplo, para seleccionar todos los visitantes que han vuelto al sitio web, incluyendo a aquellos que han comprado algo en sus anteriores visitas, la solicitud de la API debe contener %s",
diff --git a/lang/et.json b/lang/et.json
index 127e582d18..14b7555e56 100644
--- a/lang/et.json
+++ b/lang/et.json
@@ -345,6 +345,7 @@
"VisitorID": "Külastaja ID",
"VisitorIP": "Külastaja IP",
"Visitors": "Külastajad",
+ "VisitorSettings": "Külastajate seaded",
"VisitsWith": "Külastused koos %s",
"VisitType": "Külalise tüüp",
"Warning": "Hoiatus",
diff --git a/lang/eu.json b/lang/eu.json
index 52db29fb93..79703933f0 100644
--- a/lang/eu.json
+++ b/lang/eu.json
@@ -184,6 +184,7 @@
"View": "Ikusi",
"VisitDuration": "B.b.ko bisiten iraupena (segundotan)",
"Visitors": "Bisitariak",
+ "VisitorSettings": "Bisitariaren ezarpenak",
"Warning": "Abisua",
"Website": "Webgunea",
"Weekly": "Astero",
diff --git a/lang/fa.json b/lang/fa.json
index 16d471a013..356423128b 100644
--- a/lang/fa.json
+++ b/lang/fa.json
@@ -397,6 +397,7 @@
"VisitorID": "آی دی بازدید کننده",
"VisitorIP": "آی پی بازدید کننده",
"Visitors": "بازدید کننده ها",
+ "VisitorSettings": "تنظیمات بازدید کننده",
"VisitsWith": "بازدید ها با %s",
"VisitType": "نوع بازدید کننده",
"VisitTypeExample": "به عنوان مثال، برای انتخاب تمام بازدید کنندگان که به وب سایت،از جمله کسانی که چیزی در بازدیدکننده داشته است گذشته خود را خریداری بازگردانده، درخواست API حاوی %s",
diff --git a/lang/fi.json b/lang/fi.json
index e46f1275f0..646b12fd0e 100644
--- a/lang/fi.json
+++ b/lang/fi.json
@@ -419,6 +419,7 @@
"VisitorID": "Kävijän ID",
"VisitorIP": "Kävijän IP",
"Visitors": "Kävijät",
+ "VisitorSettings": "Kävijöiden asetukset",
"VisitsWith": "Käynnit %s:n kanssa",
"VisitType": "Kävijän tyyppi",
"VisitTypeExample": "Voit esimerkiksi valita kaikki kävijät jotka palasivat sivulle ja ostivat edellisellä käynnillä. Esimerkki pyynnöstä on %s",
diff --git a/lang/fr.json b/lang/fr.json
index 32b8c09d18..2d7cb0255b 100644
--- a/lang/fr.json
+++ b/lang/fr.json
@@ -425,6 +425,7 @@
"VisitorID": "ID du visiteur",
"VisitorIP": "IP du visiteur",
"Visitors": "Visiteurs",
+ "VisitorSettings": "Paramètres visiteur",
"VisitsWith": "Visites avec %s",
"VisitType": "Type du visiteur",
"VisitTypeExample": "Par exemple, pour sélectionner tous les visiteurs qui sont retournés sur le site web, en incluant ceux qui ont acheté quelque chose lors de leur dernière visite, la requête à l'API contiendrait %s",
diff --git a/lang/hi.json b/lang/hi.json
index a2621b1c59..fea4bb2fa7 100644
--- a/lang/hi.json
+++ b/lang/hi.json
@@ -401,6 +401,7 @@
"VisitorID": "आगंतुक आईडी",
"VisitorIP": "आगंतुक आईपी",
"Visitors": "आगंतुकों",
+ "VisitorSettings": "आगंतुक सेटिंग्स",
"VisitsWith": "%s साथ दौरा",
"VisitType": "आगंतुक के प्रकार",
"VisitTypeExample": "उदाहरण के लिए, अपने पिछले दौरों में कुछ खरीदा है जो उन सहित, वेबसाइट पर लौट आए हैं, जो सभी आगंतुकों का चयन करने के लिए, एपीआई अनुरोध %s शामिल होगा",
diff --git a/lang/hr.json b/lang/hr.json
index fcd49822a9..ea57e4e315 100644
--- a/lang/hr.json
+++ b/lang/hr.json
@@ -274,6 +274,7 @@
"VisitorID": "Oznaka posjetitelja",
"VisitorIP": "IP adresa posjetitelja",
"Visitors": "Posjetitelji",
+ "VisitorSettings": "Postavke posjetitelja",
"VisitsWith": "Posjete sa %s",
"VisitType": "Vrsta posjetitelja",
"VisitTypeExample": "Na primjer, za biranje svih posjetitelja koji su se vratili na stranicu, uključujući i one koji su pri prošloj posjeti nešto i kupili, API zahtjev treba sadržavati %s",
diff --git a/lang/hu.json b/lang/hu.json
index c7e5274cfe..4fba3cc1ef 100644
--- a/lang/hu.json
+++ b/lang/hu.json
@@ -292,6 +292,7 @@
"VisitorID": "Látogatóazonosító",
"VisitorIP": "Látogató IP-címe",
"Visitors": "Látogatók",
+ "VisitorSettings": "Látogatók adatai",
"VisitsWith": "Látogatások ezzel: %s",
"VisitType": "Látogató típusa",
"VisitTypeExample": "Például azoknak a látogatóknak a kiválasztására, akik visszatértek a weboldalra, köztük azok, akik vásároltak valamit a korábbi látogatásaik során, az API lekérés ezt tartalmazná: %s",
diff --git a/lang/id.json b/lang/id.json
index 524532809f..c80f0254c9 100644
--- a/lang/id.json
+++ b/lang/id.json
@@ -394,6 +394,7 @@
"VisitorID": "ID pengunjung",
"VisitorIP": "IP pengujung",
"Visitors": "Pengunjung",
+ "VisitorSettings": "Pengaturan Pengunjung",
"VisitsWith": "Kunjungan dengan %s",
"VisitType": "Jenis pengunjung",
"VisitTypeExample": "Sebagai contoh, untuk memilih semua pengunjung yang telah kembali ke situs, termasuk yang telah membeli sesuatu saat kunjungan sebelumnya, permintaan API akan mengandung %s",
diff --git a/lang/is.json b/lang/is.json
index 87858282ea..adbb5478ec 100644
--- a/lang/is.json
+++ b/lang/is.json
@@ -191,6 +191,7 @@
"View": "Sýn",
"VisitDuration": "Meðallengd heimsókna(í sekúndum)",
"Visitors": "Gestir",
+ "VisitorSettings": "Stillingar gesta",
"Warning": "Aðvörun",
"WarningPasswordStored": "%sVarist:%s Þetta lykilorð mun vera vistað í stillingar skrá sem er sýnileg öllum sem hafa næga aðgangsheimild.",
"Website": "Vefur",
diff --git a/lang/it.json b/lang/it.json
index 220a25b36b..61a9707c9f 100644
--- a/lang/it.json
+++ b/lang/it.json
@@ -429,6 +429,7 @@
"VisitorID": "ID visitatore",
"VisitorIP": "IP visitatore",
"Visitors": "Visitatori",
+ "VisitorSettings": "Impostazioni visitatori",
"VisitsWith": "Visite con %s",
"VisitType": "Tipo di visitatore",
"VisitTypeExample": "Ad esempio, per selezionare tutti i visitatori che sono ritornati al sito Web, compresi quelli che hanno comprato qualcosa nella loro precedenti visite, la richiesta di API conterrebbe %s",
diff --git a/lang/ja.json b/lang/ja.json
index c9eedf2c31..4a306af538 100644
--- a/lang/ja.json
+++ b/lang/ja.json
@@ -425,6 +425,7 @@
"VisitorID": "ビジターID",
"VisitorIP": "ビジターIP",
"Visitors": "ビジター",
+ "VisitorSettings": "ビジターの環境",
"VisitsWith": "%s のビジット",
"VisitType": "ビジター種類",
"VisitTypeExample": "例えば、前回のビジットで何かを購入した訪問者を含む、全てのリピーターを選択するためのAPIリクエストは %s を含むものとなります。",
diff --git a/lang/ka.json b/lang/ka.json
index 3614dfd479..c273bec0fe 100644
--- a/lang/ka.json
+++ b/lang/ka.json
@@ -214,6 +214,7 @@
"View": "დათვალიერება",
"VisitDuration": "ვიზიტის საშუალო ხანგრძლივობა (წამებში)",
"Visitors": "ვიზიტორები",
+ "VisitorSettings": "ვიზიტორის პარამეტრები",
"Warning": "გაფრთხილება",
"WarningFileIntegrityNoManifest": "ფაილის მთლიანობის შემოწმება ვერ განხორციელდება, რადგან manifest.inc.php ფაილი არ არსებობს.",
"WarningFileIntegrityNoMd5file": "ფაილის მთლიანობის შემოწმება ვერ დასრულდება, რადგან md5_file() ფუნქცია არ არსებობს.",
diff --git a/lang/ko.json b/lang/ko.json
index 8ac651e79f..5a7e41454f 100644
--- a/lang/ko.json
+++ b/lang/ko.json
@@ -368,6 +368,7 @@
"VisitorID": "방문자 ID",
"VisitorIP": "방문자 IP",
"Visitors": "방문",
+ "VisitorSettings": "방문자 설정",
"VisitsWith": "%s의 방문",
"VisitType": "방문자 유형",
"VisitTypeExample": "예를 들어, 이전 방문에서 무언가를 구입한 방문자를 포함한 모든 리피터를 선택하기 위한 API 요청 %s를 포함합니다.",
diff --git a/lang/lt.json b/lang/lt.json
index e3e7b13bd6..40e3b96a99 100644
--- a/lang/lt.json
+++ b/lang/lt.json
@@ -261,6 +261,7 @@
"VisitorID": "Lankytojo ID",
"VisitorIP": "Lankytojo IP",
"Visitors": "Lankytojai",
+ "VisitorSettings": "Lankytojų nustatymai",
"VisitType": "Lankytojo tipas",
"Warning": "Įspėjimas",
"WarningFileIntegrityNoManifest": "Failo vientisumo patikra negali būti atlikta dėl nesamo manifest.inc.php failo.",
diff --git a/lang/lv.json b/lang/lv.json
index 6734b9e6c1..4a0d1f7a10 100644
--- a/lang/lv.json
+++ b/lang/lv.json
@@ -291,6 +291,7 @@
"VisitorID": "Apmeklētāja ID",
"VisitorIP": "Apmeklētāja IP",
"Visitors": "Apmeklētāji",
+ "VisitorSettings": "Apmeklētāju iestatījumi",
"VisitsWith": "Apmeklējumi ar %s",
"VisitType": "Apmeklētāja tips",
"VisitTypeExample": "Piemēram, lai izvēlētos visus apmeklētājus, kas atgriezušies vietnē (ieskaitot tos, kas veikuši pasūtījumu kādā no iepriekšējiem apmeklējumiem), API pieprasījumam būtu jāsatur %s",
diff --git a/lang/nb.json b/lang/nb.json
index d44578d268..822a61176a 100644
--- a/lang/nb.json
+++ b/lang/nb.json
@@ -315,6 +315,7 @@
"VisitDuration": "Gj. besøksvarighet (i sekunder)",
"VisitorIP": "IP for besøkende",
"Visitors": "Besøkende",
+ "VisitorSettings": "Besøkendes innstillinger",
"VisitType": "Type besøkende",
"Warning": "Advarsel",
"WarningFileIntegrityNoManifest": "Klarte ikke utføre integritetskontroll av filer fordi manifest.inc.php mangler.",
diff --git a/lang/nl.json b/lang/nl.json
index 0b0546cc9d..7f33a90450 100644
--- a/lang/nl.json
+++ b/lang/nl.json
@@ -418,6 +418,7 @@
"VisitorID": "Bezoekers ID",
"VisitorIP": "Bezoekers IP",
"Visitors": "Bezoekers",
+ "VisitorSettings": "Bezoekers Instellingen",
"VisitsWith": "Bezoeken met %s",
"VisitType": "Type bezoeker",
"VisitTypeExample": "Om bijvoorbeeld het aantal terugkerende bezoekers (inclusief die bezoekers die iets gekocht hebben) te selecteren moet de API %s bevatten",
diff --git a/lang/nn.json b/lang/nn.json
index c6748cdfd1..cba964da26 100644
--- a/lang/nn.json
+++ b/lang/nn.json
@@ -313,6 +313,7 @@
"VisitorID": "Vitjar-ID",
"VisitorIP": "Vitjar-IP",
"Visitors": "Vitjarar",
+ "VisitorSettings": "Vitjarinnstillingar",
"VisitsWith": "Vitjingar med %s",
"VisitType": "Vitjar-type",
"VisitTypeExample": "Døme: For å velja alle vitjarar som kjem attende til vevstaden, inkludert dei som har kjøpt noko førre gong, vil API-førespurnaden innehalde %s",
diff --git a/lang/pl.json b/lang/pl.json
index 42af0217a9..e7bee573ac 100644
--- a/lang/pl.json
+++ b/lang/pl.json
@@ -403,6 +403,7 @@
"VisitorID": "ID oglądającego",
"VisitorIP": "IP oglądającego",
"Visitors": "Oglądający",
+ "VisitorSettings": "Konfiguracje użytkownika",
"VisitsWith": "Odwiedzin z %s",
"VisitType": "Typ oglądającego",
"VisitTypeExample": "Przykładowo, aby wybrać wszystkich odwiedzających, którzy powrócili na serwis, włączając tych, którzy zakupili coś podczas poprzednich wizyt, zapytanie API będzie zawierać %s",
diff --git a/lang/pt-br.json b/lang/pt-br.json
index 62fe356159..32804a0919 100644
--- a/lang/pt-br.json
+++ b/lang/pt-br.json
@@ -405,6 +405,7 @@
"VisitorID": "Visitante ID",
"VisitorIP": "IP do Visitante",
"Visitors": "Visitantes",
+ "VisitorSettings": "Configurações dos visitantes",
"VisitsWith": "Visitas com %s",
"VisitType": "Tipo do Visitante",
"VisitTypeExample": "Por exemplo, para selecionar todos os visitantes que voltaram para o site, incluindo aqueles que compraram algo em suas visitas anteriores, a requisição a API deve conter %s",
diff --git a/lang/pt.json b/lang/pt.json
index 97277e03de..8644570d88 100644
--- a/lang/pt.json
+++ b/lang/pt.json
@@ -306,6 +306,7 @@
"VisitorID": "ID do Visitante",
"VisitorIP": "IP do Visitante",
"Visitors": "Visitantes",
+ "VisitorSettings": "Definições do Visitante",
"VisitsWith": "Visitas com %s",
"VisitType": "Tipo de Visitante",
"VisitTypeExample": "Por exemplo, para selecionar todos os visitantes que voltaram ao website, incluindo aqueles que compraram algo nas visitas anteriores, o pedido API contem %s",
diff --git a/lang/ro.json b/lang/ro.json
index 92da9ac2e3..a021c5c312 100644
--- a/lang/ro.json
+++ b/lang/ro.json
@@ -414,6 +414,7 @@
"VisitorID": "ID vizitator",
"VisitorIP": "IP vizitator",
"Visitors": "Vizitatori",
+ "VisitorSettings": "Setări vizitatori",
"VisitsWith": "Vizite cu %s",
"VisitType": "Tip vizitator",
"VisitTypeExample": "De exemplu, pentru a selecta toti vizitatorii care s-au intors pe site, inclusiv cei care au cumparat in trecut, cererea catre API ar include %s",
diff --git a/lang/ru.json b/lang/ru.json
index 818c9b8c15..79c9d16a5c 100644
--- a/lang/ru.json
+++ b/lang/ru.json
@@ -32,6 +32,7 @@
"ChooseLanguage": "Выбрать язык",
"ChoosePeriod": "Выбрать период",
"ChooseWebsite": "Выбрать сайт",
+ "Clear": "Очистить",
"ClickHere": "Нажмите здесь, чтобы узнать больше",
"ClickToChangePeriod": "Нажмите еще раз, чтобы изменить период.",
"Close": "Закрыть",
@@ -65,6 +66,7 @@
"ColumnNbActionsDocumentation": "Количество действий, выполненных вашими пользователями. К событиям относятся просмотры страниц, загрузки и внешние ссылки.",
"ColumnNbUniqVisitors": "Уникальные посетители",
"ColumnNbUniqVisitorsDocumentation": "Число неповторяющихся посетителей на вашем сайте. Каждый пользователь засчитывается один раз, даже если он посещает сайт несколько раз в день.",
+ "ColumnNbUsers": "Пользователи",
"ColumnNbVisits": "Посещения",
"ColumnNbVisitsDocumentation": "Если посетитель посещает ваш сайт впервые или после 30 минут с момента последнего посещения, такое посещение будет записано как новое.",
"ColumnPageBounceRateDocumentation": "Процент посещений, которые начались на этой странице и сразу же закончились (посетитель ушел на другой сайт или закрыл вкладку).",
@@ -176,6 +178,7 @@
"ForExampleShort": "напр.,",
"Forums": "Форумы",
"FromReferrer": "из (от)",
+ "General": "Основное",
"GeneralInformation": "Общая информация",
"GetStarted": "Приступить",
"GiveUsYourFeedback": "Обратная связь",
@@ -406,6 +409,7 @@
"VisitorID": "ID посетителя",
"VisitorIP": "IP посетителя",
"Visitors": "Посетители",
+ "VisitorSettings": "Настройки посетителей",
"VisitsWith": "Посещения с %s",
"VisitType": "Тип посетителя",
"VisitTypeExample": "Например, чтобы выбрать всех посетителей, которые вернулисть на сайт, включая тех, кто уже купил что-то в свои предыдущие визиты, API-запрос будет содержать: %s",
diff --git a/lang/sk.json b/lang/sk.json
index a357c0f98b..50cfdc1ba5 100644
--- a/lang/sk.json
+++ b/lang/sk.json
@@ -370,6 +370,7 @@
"VisitorID": "ID návštevníka",
"VisitorIP": "IP návštevníka",
"Visitors": "Návštevníci",
+ "VisitorSettings": "Nastavenia návštevníkov",
"VisitsWith": "Návštevy s %s",
"VisitType": "Typ návštevníka",
"VisitTypeExample": "Napríklad: Pre výber všetkých návštevníkov, ktorí sa vrátili na webovú stránku, vrátane tých, ktorí niečo nakúpili počas prechádzajúcej návštevy by API požiadavka obsahovala %s",
diff --git a/lang/sl.json b/lang/sl.json
index 7a1b24d124..1621bf562c 100644
--- a/lang/sl.json
+++ b/lang/sl.json
@@ -342,6 +342,7 @@
"VisitorID": "ID Obiskovalca",
"VisitorIP": "Obiskovalčev IP",
"Visitors": "Obiskovalci",
+ "VisitorSettings": "Nastavitve obiskovalcev",
"VisitsWith": "Obiski z\/s %s",
"VisitType": "Vrsta obiskovalca",
"VisitTypeExample": "Na primer, če želite zbrati vse obiskovalce, ki so se vrnili na spletno stran, vključno s tistimi, ki so v prejšnjih obiskih kaj kupili, bi API zahteva vsebovala %s",
diff --git a/lang/sq.json b/lang/sq.json
index 3c96dd116f..76522687c6 100644
--- a/lang/sq.json
+++ b/lang/sq.json
@@ -309,6 +309,7 @@
"VisitorID": "ID vizitori",
"VisitorIP": "IP vizitori",
"Visitors": "Vizitorë",
+ "VisitorSettings": "Rregullimet për Vizitor",
"VisitsWith": "Vizita me %s",
"VisitType": "Lloj vizitori",
"VisitTypeExample": "Për shembull, për përzgjedhjen e krejt vizitorëve që janë rikthyer te site-i web, përfshi ata që kanë blerë diçka gjatë vizitash të mëparshme, kërkesa API do të duhej të përmbante %s",
diff --git a/lang/sr.json b/lang/sr.json
index dbe9018606..8ac2e35995 100644
--- a/lang/sr.json
+++ b/lang/sr.json
@@ -418,6 +418,7 @@
"VisitorID": "ID posetioca",
"VisitorIP": "IP adresa posetioca",
"Visitors": "Posetioci",
+ "VisitorSettings": "Parametri posetilaca",
"VisitsWith": "Posete sa %s",
"VisitType": "Tip posetioca",
"VisitTypeExample": "Na primer, kako biste obeležili sve posetioce koji su se vratili na sajt, uključujući i one koji su već nešto kupili, API zahtev bi sadržao %s",
diff --git a/lang/sv.json b/lang/sv.json
index cd617f6b69..9f4860f28d 100644
--- a/lang/sv.json
+++ b/lang/sv.json
@@ -415,6 +415,7 @@
"VisitorID": "Besöks-id",
"VisitorIP": "Besökarens IP",
"Visitors": "Besökare",
+ "VisitorSettings": "Besökarinställningar",
"VisitsWith": "Besök med %s",
"VisitType": "Besökstyp",
"VisitTypeExample": "Till exempel, för att markera alla besökare som har återvänt till webbplatsen, inklusive de som har köpt något i sina tidigare besök, så skulle API-begäran innehålla %s",
diff --git a/lang/te.json b/lang/te.json
index 6380e85f49..6d439c8bc9 100644
--- a/lang/te.json
+++ b/lang/te.json
@@ -156,6 +156,7 @@
"Username": "వాడుకరి పేరు",
"Value": "విలువ",
"Visitors": "సందర్శకులు",
+ "VisitorSettings": "సందర్శకుల అమరికలు",
"Warning": "హెచ్చరిక",
"Website": "వెబ్‌సైటు",
"Widgets": "విడ్జెట్లు",
diff --git a/lang/th.json b/lang/th.json
index 0387dc5420..2379a79d3d 100644
--- a/lang/th.json
+++ b/lang/th.json
@@ -335,6 +335,7 @@
"VisitorID": "ID ของผู้เข้าชม",
"VisitorIP": "IP ของเข้าชม",
"Visitors": "ผู้เข้าชม",
+ "VisitorSettings": "การตั้งค่าของผู้เข้าชม",
"VisitsWith": "%s เข้าชม",
"VisitType": "รูปแบบผู้เข้าชม",
"VisitTypeExample": "ตัวอย่างเช่น การเลือกผู้เข้าชมทั้งหมดที่มีส่งกลับไปยังเว็บไซต์ รวมทั้งผู้ที่ได้ซื้อบางสิ่งบางอย่างในการเข้าชมก่อนหน้านี้ของพวกเขาที่ขอ API จะมี %s",
diff --git a/lang/tl.json b/lang/tl.json
index 8f76e90a86..f1ae350410 100644
--- a/lang/tl.json
+++ b/lang/tl.json
@@ -356,6 +356,7 @@
"TranslatorName": "<a href=\"http:\/\/levante.se\/\">Levante.se<\/a>",
"View": "Tingnan",
"Visitors": "Mga Bisita",
+ "VisitorSettings": "Mga Setting ng bisita",
"Website": "Website",
"XFromY": "%1$s mula %2$s",
"Yesterday": "ontem"
diff --git a/lang/tr.json b/lang/tr.json
index e097a9617c..b1ae4e6068 100644
--- a/lang/tr.json
+++ b/lang/tr.json
@@ -336,6 +336,7 @@
"VisitorID": "Ziyaretçi ID",
"VisitorIP": "Ziyaretçi IP",
"Visitors": "Ziyaretçiler",
+ "VisitorSettings": "Ziyaretçi Ayarlari",
"VisitsWith": "%s ile Ziyaretler",
"VisitType": "Ziyaretçi Türü",
"Warning": "Uyarı",
diff --git a/lang/uk.json b/lang/uk.json
index 8e0dcec90a..ba79594bca 100644
--- a/lang/uk.json
+++ b/lang/uk.json
@@ -214,6 +214,7 @@
"VBarGraph": "Гістограма",
"VisitDuration": "Середня тривалість відвідування (в секундах)",
"Visitors": "Відвідувачі",
+ "VisitorSettings": "Налаштування відвідувача",
"Warning": "Застереження",
"WarningFileIntegrityNoManifest": "Перевірка цілісності файлу не може бути виконана через відсутність manifest.inc.php",
"WarningFileIntegrityNoMd5file": "Перевірка цілісності файлу не може бути виконана через відсутність функції md5_file().",
diff --git a/lang/vi.json b/lang/vi.json
index 4235b6e1b3..cbae41d504 100644
--- a/lang/vi.json
+++ b/lang/vi.json
@@ -404,6 +404,7 @@
"VisitorID": "ID khách truy cập",
"VisitorIP": "IP khách truy cập",
"Visitors": "Các khách truy cập",
+ "VisitorSettings": "Thiết lập khách truy cập",
"VisitsWith": "Các khách truy cập với %s",
"VisitType": "kiểu khách truy cập",
"VisitTypeExample": "Lấy ví dụ, để chọn tất cả những người truy cập đã quay lại website, bao gồm cả những người đã mua thứ gì đó trong những lượt truy cập trước, yêu cầu API có thể chứa %s",
diff --git a/lang/zh-cn.json b/lang/zh-cn.json
index e77176fefc..5bfef037cb 100644
--- a/lang/zh-cn.json
+++ b/lang/zh-cn.json
@@ -405,6 +405,7 @@
"VisitorID": "访客 ID",
"VisitorIP": "访客 IP",
"Visitors": "访客分析",
+ "VisitorSettings": "访客设置",
"VisitsWith": "有%s的访客",
"VisitType": "访客类型",
"VisitTypeExample": "例如,要选择所有回头访客,包括那些以前购买过产品的,API 请求需要包含 %s",
diff --git a/lang/zh-tw.json b/lang/zh-tw.json
index fb4b9ca862..7d324bce6d 100644
--- a/lang/zh-tw.json
+++ b/lang/zh-tw.json
@@ -235,6 +235,7 @@
"View": "檢視",
"VisitDuration": "平均訪問時間(以秒為單位)",
"Visitors": "訪客",
+ "VisitorSettings": "造訪者設定值",
"Warning": "警告",
"WarningFileIntegrityNoManifest": "缺少 manifest.inc.php 所以檔案完整性檢查無法執行。",
"WarningFileIntegrityNoMd5file": "缺少 md5_file() 函式所以檔案完整性檢查無法玩成。",
diff --git a/misc/others/api_internal_call.php b/misc/others/api_internal_call.php
index f099b962ee..4cc0052911 100644
--- a/misc/others/api_internal_call.php
+++ b/misc/others/api_internal_call.php
@@ -18,7 +18,7 @@ FrontController::getInstance()->init();
// This inits the API Request with the specified parameters
$request = new Request('
module=API
- &method=UserSettings.getResolution
+ &method=Resolution.getResolution
&idSite=7
&date=yesterday
&period=week
diff --git a/misc/others/uninstall-delete-piwik-directory.php b/misc/others/uninstall-delete-piwik-directory.php
index 97030daa48..ac606bb721 100644
--- a/misc/others/uninstall-delete-piwik-directory.php
+++ b/misc/others/uninstall-delete-piwik-directory.php
@@ -1,10 +1,13 @@
<?php
+exit; // Remove this line before using the script
+
// How to remove the piwik/ directory if it does not work in FTP?
// 1) Download and upload this file to your webserver
-// 2) Put this file in the folder that contains the piwik/ directory (above the piwik/ directory)
+// 2) Remove the 2nd line (the "exit;")
+// 3) Put this file in the folder that contains the piwik/ directory (above the piwik/ directory)
// For example if the piwik/ folder is at http://your-site/piwik/ you put the file in http://your-site/uninstall-delete-piwik-directory.php
-// 3) Go with your browser to http://your-site/uninstall-delete-piwik-directory.php
-// 4) The folder http://your-site/piwik/ should now be deleted!
+// 4) Go with your browser to http://your-site/uninstall-delete-piwik-directory.php
+// 5) The folder http://your-site/piwik/ should now be deleted!
// We hope you enjoyed Piwik. If you have any feedback why you stopped using Piwik,
// please let us know at hello@piwik.org - we are interested by your experience
function unlinkRecursive($dir)
diff --git a/plugins/Actions/lang/nl.json b/plugins/Actions/lang/nl.json
index 6905c5d20d..0f0629e06d 100644
--- a/plugins/Actions/lang/nl.json
+++ b/plugins/Actions/lang/nl.json
@@ -5,9 +5,9 @@
"ColumnClicks": "Kliks",
"ColumnClicksDocumentation": "Aantal keer dat er op deze link geklikt is.",
"ColumnDownloadURL": "Download link",
- "ColumnEntryPageTitle": "Inkomende pagina titel",
+ "ColumnEntryPageTitle": "Inkomende paginatitel",
"ColumnEntryPageURL": "Inkomende pagina URL",
- "ColumnExitPageTitle": "Uitgaande pagina titel",
+ "ColumnExitPageTitle": "Uitgaande paginatitel",
"ColumnExitPageURL": "Uitgaande pagina URL",
"ColumnNoResultKeyword": "Sleutelwoord zonder zoekresultaten",
"ColumnPageName": "Pagina naam",
@@ -27,10 +27,10 @@
"ColumnUniqueOutlinks": "Unieke Outlinks",
"DownloadsReportDocumentation": "Dit rapport laat zien welke bestanden door de bezoekers zijn gedownload. %s Piwik telt een klik op een downloadlink als een download. Piwik kan niet zien of de download succesvol is uitgevoerd en afgerond.",
"EntryPagesReportDocumentation": "Dit rapport bevat informatie over de inkomende pagina's in de opgegeven periode. Een inkomende pagina is de eerste pagina waarop de bezoeker binnenkomt. %s De URL's van de inkomende pagina's worden getoond in een mapstructuur.",
- "EntryPageTitles": "Inkomende pagina titels",
+ "EntryPageTitles": "Inkomende paginatitels",
"EntryPageTitlesReportDocumentation": "Dit rapport bevat informatie over de titels van de inkomende pagina's in de opgegeven periode.",
"ExitPagesReportDocumentation": "Dit rapport bevat informatie over de uitgaande pagina's tijdens de opgegeven periode. De iutgaande pagina is de laatste pagina die de bezoeker bekijkt. %s De URL's van de uitgaande pagina's worden getoond in een mapstructuur.",
- "ExitPageTitles": "Uitgaande pagina titels",
+ "ExitPageTitles": "Uitgaande paginatitels",
"ExitPageTitlesReportDocumentation": "Dit rapport bevat informatie over de titels van de uitgaande pagina's in de opgegeven periode.",
"LearnMoreAboutSiteSearchLink": "Leer meer over de manier waarop bezoekers de zoekoptie in uw website gebruiken.",
"OneSearch": "1 zoekopdracht",
@@ -49,14 +49,14 @@
"SiteSearchKeywordsNoResultDocumentation": "Dit rapport toon een lijst met sleutelwoorden waarop door uw website geen zoekresultaten werden gegeven. Wellicht kan het zoekalgorithm worden verbeterd of misschien wordt gezocht op content dat (nog) niet beschikbaar is op uw website.",
"SubmenuPagesEntry": "Pagina's waarlangs de bezoeker binnen kwam",
"SubmenuPagesExit": "Pagina's die verlaten werden",
- "SubmenuPageTitles": "Pagina titels",
+ "SubmenuPageTitles": "Paginatitels",
"SubmenuSitesearch": "Lokale zoekopdracht",
- "WidgetEntryPageTitles": "Inkomende pagina titels.",
- "WidgetExitPageTitles": "Uitgaande pagina titels",
+ "WidgetEntryPageTitles": "Inkomende paginatitels.",
+ "WidgetExitPageTitles": "Uitgaande paginatitels",
"WidgetPagesEntry": "Beginpagina's",
"WidgetPagesExit": "Pagina's die verlaten werden.",
- "WidgetPageTitles": "Pagina titels",
- "WidgetPageTitlesFollowingSearch": "Pagina titels na zoekopdrachten",
+ "WidgetPageTitles": "Paginatitels",
+ "WidgetPageTitlesFollowingSearch": "Paginatitels na zoekopdrachten",
"WidgetPageUrlsFollowingSearch": "Bestemmings pagina na lokale zoekopdracht",
"WidgetSearchCategories": "Zoekcategorieën",
"WidgetSearchKeywords": "Zoektermen lokale zoekopdracht",
diff --git a/plugins/Contents/lang/es.json b/plugins/Contents/lang/es.json
index 2d8d48572a..af41fb774c 100644
--- a/plugins/Contents/lang/es.json
+++ b/plugins/Contents/lang/es.json
@@ -3,7 +3,9 @@
"ContentName": "Nombre del contenido",
"ContentPiece": "Pieza de Contenido",
"Contents": "Contenidos",
+ "ContentTarget": "Contenido de objetivo",
"Impressions": "Impresiones",
+ "InteractionRate": "Nivel de interaccion",
"Interactions": "Interacciones"
}
} \ No newline at end of file
diff --git a/plugins/CoreAdminHome/lang/es.json b/plugins/CoreAdminHome/lang/es.json
index 6b034059f4..5ef2bfa865 100644
--- a/plugins/CoreAdminHome/lang/es.json
+++ b/plugins/CoreAdminHome/lang/es.json
@@ -28,6 +28,8 @@
"JSTracking_CodeNote": "Asegúrate de que este código se encuentre en cada página de tu sitio web antes de la etiqueta %1$s.",
"JSTracking_CustomCampaignQueryParam": "Utiliza nombres de parámetros de consulta personalizados para el nombre de la campaña y la palabra clave",
"JSTracking_CustomCampaignQueryParamDesc": "Nota: %1$sPiwik detectara automáticamente los parámetros de Google Analytics.%2$s",
+ "JSTracking_DisableCookies": "Desactivar todas las cookies de rastreo",
+ "JSTracking_DisableCookiesDesc": "Desactiva todas las cookies de origen. Piwik cookies existentes de este sitio web seran eliminarán en la siguiente página vistada.",
"JSTracking_EnableDoNotTrack": "Habilitar detección por parte del cliente de DoNotTrack",
"JSTracking_EnableDoNotTrack_AlreadyEnabled": "Nota: Soporte del lado del servidor para DoNotTrack ha sido activado, por lo que esta opción no tendrá ningún efecto.",
"JSTracking_EnableDoNotTrackDesc": "De esta manera las solicitudes de seguimiento no será enviada si el visitante no desea ser seguido.",
@@ -66,6 +68,7 @@
"PluginSettingReadNotAllowed": "No está permitido que leas el valor de la opción \"%s\" en el plugin \"%s\"",
"PluginSettings": "Configuración del plugin",
"PluginSettingsIntro": "Aquí puedes cambiar la configuración de los siguientes plugins de terceros:",
+ "PluginSettingsSaveFailed": "Error al guardar la configuración del plugin",
"PluginSettingsValueNotAllowed": "El valor del campo \"%s\" del plugin \"%s\" no es permitido.",
"SendPluginUpdateCommunication": "Enviarme una notificación por correo electrónico cuando hay una actualización para los plugins",
"SendPluginUpdateCommunicationHelp": "Se enviará un correo electrónico a los Super Users cuando hay disponible una nueva versión de un plugin.",
diff --git a/plugins/CoreAdminHome/lang/nl.json b/plugins/CoreAdminHome/lang/nl.json
index 29c671240a..15d3b118d3 100644
--- a/plugins/CoreAdminHome/lang/nl.json
+++ b/plugins/CoreAdminHome/lang/nl.json
@@ -33,7 +33,7 @@
"JSTracking_EnableDoNotTrack": "Schakel Client side DoNotTrack detectie in.",
"JSTracking_EnableDoNotTrack_AlreadyEnabled": "Opmerking: Server side DoNotTrack ondersteuning is ingeschakeld, deze optie heeft dus geen effect.",
"JSTracking_EnableDoNotTrackDesc": "Tracking verzoeken zullen niet worden verzonden indien de bezoeker niet wenst gevolgd te worden.",
- "JSTracking_GroupPageTitlesByDomain": "Plaats het site domein voor de pagina titel tijdens het traceren.",
+ "JSTracking_GroupPageTitlesByDomain": "Plaats het sitedomein voor de paginatitel tijdens het traceren.",
"JSTracking_GroupPageTitlesByDomainDesc1": "Als iemand de 'over mij' bezoekt op blog.%1$s wordt het bewaard als 'blog \/ over mij'. Dit is de gemakkelijkste manier om een overzicht volgens subdomein te krijgen op je verkeer.",
"JSTracking_MergeAliases": "In het \"Uitgaande links\" rapport, verberg kliks naar bekende aliassen van",
"JSTracking_MergeAliasesDesc": "zo zullen kliks op links naar Ailias URL's (bijv. %s) zullen niet worden geteld worden als \"Uitgaande Link\"",
diff --git a/plugins/CoreAdminHome/lang/ru.json b/plugins/CoreAdminHome/lang/ru.json
index dcf244d77d..1020fcabae 100644
--- a/plugins/CoreAdminHome/lang/ru.json
+++ b/plugins/CoreAdminHome/lang/ru.json
@@ -63,6 +63,7 @@
"PluginSettingReadNotAllowed": "Вам не разрешено читать значение \"%s\" плагина \"%s\"",
"PluginSettings": "Настройки плагина",
"PluginSettingsIntro": "Здесь вы можете изменить настройки для следующих плагинов:",
+ "PluginSettingsSaveFailed": "Ошибка при сохранении настроек плагина",
"SendPluginUpdateCommunication": "Отправить мне уведомление по электронной почте, когда есть новое обновление плагина",
"SendPluginUpdateCommunicationHelp": "Письмо будет отправлено суперпользователю когда будет доступна новая версия плагина.",
"StableReleases": "Если Piwik является важной частью вашего бизнеса, мы рекомендуем использовать последнюю стабильную версию. Если вы используете последнюю бета версию, и вы нашли ошибку или есть предложение, пожалуйста, %sперейдите по ссылке%s.",
diff --git a/plugins/CoreConsole/Commands/DevelopmentSyncUITestScreenshots.php b/plugins/CoreConsole/Commands/DevelopmentSyncUITestScreenshots.php
index f80864ad43..be1bedd05d 100644
--- a/plugins/CoreConsole/Commands/DevelopmentSyncUITestScreenshots.php
+++ b/plugins/CoreConsole/Commands/DevelopmentSyncUITestScreenshots.php
@@ -29,7 +29,7 @@ class DevelopmentSyncUITestScreenshots extends ConsoleCommand
{
$this->setName('development:sync-ui-test-screenshots');
$this->setDescription('For Piwik core devs. Copies screenshots '
- . 'from travis artifacts to tests/PHPUnit/UI/expected-ui-screenshots/');
+ . 'from travis artifacts to tests/UI/expected-ui-screenshots/');
$this->addArgument('buildnumber', InputArgument::REQUIRED, 'Travis build number you want to sync.');
$this->addArgument('screenshotsRegex', InputArgument::OPTIONAL,
'A regex to use when selecting screenshots to copy. If not supplied all screenshots are copied.', '.*');
@@ -74,7 +74,7 @@ class DevelopmentSyncUITestScreenshots extends ConsoleCommand
&& preg_match("/" . $screenshotsRegex . "/", $file)
) {
if ($testPlugin == null) {
- $downloadTo = "tests/PHPUnit/UI/expected-ui-screenshots/$file";
+ $downloadTo = "tests/UI/expected-ui-screenshots/$file";
} else {
$downloadTo = "plugins/$testPlugin/tests/UI/expected-ui-screenshots/$file";
}
@@ -99,15 +99,15 @@ class DevelopmentSyncUITestScreenshots extends ConsoleCommand
$output->writeln('');
$output->writeln("If all downloaded screenshots are valid you may push them with these commands:");
$output->writeln('');
- $commands = "cd tests/PHPUnit/UI/
+ $commands = "cd tests/UI/expected-ui-screenshots
git pull
-git add expected-ui-screenshots/
-git commit -m'' # WRITE A COMMIT MESSAGE
+git add .
+git commit -m '' # WRITE A COMMIT MESSAGE
git push
cd ..
git pull
-git add UI
-git commit -m'' #WRITE A COMMIT MESSAGE
+git add expected-ui-screenshots
+git commit -m '' #WRITE A COMMIT MESSAGE
git push";
$output->writeln($commands);
}
diff --git a/plugins/CoreHome/javascripts/dataTable.js b/plugins/CoreHome/javascripts/dataTable.js
index 5b37493a60..2ce28c7ebf 100644
--- a/plugins/CoreHome/javascripts/dataTable.js
+++ b/plugins/CoreHome/javascripts/dataTable.js
@@ -22,7 +22,7 @@ var exports = require('piwik/UI'),
* method, and this class instance is stored using the jQuery $.data function
* with the 'uiControlObject' key.
*
- * To find a datatable element by report (ie, 'UserSettings.getBrowser'),
+ * To find a datatable element by report (ie, 'DevicesDetection.getBrowsers'),
* use piwik.DataTable.getDataTableByReport.
*
* To get the dataTable JS instance (an instance of this class) for a
@@ -67,7 +67,7 @@ DataTable.registerFooterIconHandler = function (id, handler) {
/**
* Returns the first datatable div displaying a specific report.
*
- * @param {string} report The report, eg, UserSettings.getLanguage
+ * @param {string} report The report, eg, UserLanguage.getLanguage
* @return {Element} The datatable div displaying the report, or undefined if
* it cannot be found.
*/
@@ -1048,6 +1048,14 @@ $.extend(DataTable.prototype, UIControl.prototype, {
.attr('href', function () {
var format = $(this).attr('format');
var method = $(this).attr('methodToCall');
+ var params = $(this).attr('requestParams');
+
+ if (params) {
+ params = JSON.parse(params)
+ } else {
+ params = {};
+ }
+
var segment = self.param.segment;
var label = self.param.label;
var idGoal = self.param.idGoal;
@@ -1072,6 +1080,7 @@ $.extend(DataTable.prototype, UIControl.prototype, {
&& self.param.viewDataTable == "graphEvolution") {
period = 'day';
}
+
var str = 'index.php?module=API'
+ '&method=' + method
+ '&format=' + format
@@ -1081,6 +1090,12 @@ $.extend(DataTable.prototype, UIControl.prototype, {
+ ( typeof self.param.filter_pattern != "undefined" ? '&filter_pattern=' + self.param.filter_pattern : '')
+ ( typeof self.param.filter_pattern_recursive != "undefined" ? '&filter_pattern_recursive=' + self.param.filter_pattern_recursive : '');
+ if ($.isPlainObject(params)) {
+ $.each(params, function (index, param) {
+ str += '&' + index + '=' + encodeURIComponent(param);
+ });
+ }
+
if (typeof self.param.flat != "undefined") {
str += '&flat=' + (self.param.flat == 0 ? '0' : '1');
if (typeof self.param.include_aggregate_rows != "undefined" && self.param.include_aggregate_rows) {
diff --git a/plugins/CoreHome/lang/cs.json b/plugins/CoreHome/lang/cs.json
index 7b72a67a2e..4a36087378 100644
--- a/plugins/CoreHome/lang/cs.json
+++ b/plugins/CoreHome/lang/cs.json
@@ -4,6 +4,7 @@
"CheckForUpdates": "Zkontrolovat aktualizace",
"CheckPiwikOut": "Vyzkoušejte Piwik!",
"ClickRowToExpandOrContract": "Klikněte na tento řádek pro rozbalení nebo zbalení podtabulky.",
+ "ClickToEditX": "Klikněte pro úpravu %s",
"CloseWidgetDirections": "Tento widget můžete zavřít kliknutím na ikonu X na horní části widgetu.",
"DataForThisReportHasBeenPurged": "Data pro toto hlášení jsou starší než %s měsíců a byla odstraněna.",
"DataTableExcludeAggregateRows": "Agregované řádky jsou zobrazeny %s Skrýt",
diff --git a/plugins/CoreHome/lang/da.json b/plugins/CoreHome/lang/da.json
index e62b9fd950..3f56462f9b 100644
--- a/plugins/CoreHome/lang/da.json
+++ b/plugins/CoreHome/lang/da.json
@@ -4,6 +4,7 @@
"CheckForUpdates": "Søg efter opdateringer",
"CheckPiwikOut": "Tjek Piwik!",
"ClickRowToExpandOrContract": "Klik på rækken for at udvide eller sammentrække undertabelen.",
+ "ClickToEditX": "Klik for at redigere %s",
"CloseWidgetDirections": "Luk modulet ved at klikke på 'X' ikonet øverst.",
"DataForThisReportHasBeenPurged": "Data til rapporten er er mere end %s måneder gamle og er blevet ryddet op.",
"DataTableExcludeAggregateRows": "Samlede rækker vises %s Skjul dem",
diff --git a/plugins/CoreHome/lang/de.json b/plugins/CoreHome/lang/de.json
index 24ca6e25a1..bbcb29bbea 100644
--- a/plugins/CoreHome/lang/de.json
+++ b/plugins/CoreHome/lang/de.json
@@ -4,6 +4,7 @@
"CheckForUpdates": "Nach Aktualisierungen suchen",
"CheckPiwikOut": "Sieh dir Piwik an!",
"ClickRowToExpandOrContract": "Klicken Sie auf diese Zeile um die Untertabelle anzuzeigen oder zu verbergen.",
+ "ClickToEditX": "Klicken Sie um %s zu bearbeiten",
"CloseWidgetDirections": "Sie können das Widget schließen, indem Sie auf das 'X' oben im Widget klicken.",
"DataForThisReportHasBeenPurged": "Die Daten für diesen Bericht sind älter als %s Monate und wurden gelöscht",
"DataTableExcludeAggregateRows": "Aggregierte Zeilen werden angezeigt %s Ausschließen",
diff --git a/plugins/CoreHome/lang/el.json b/plugins/CoreHome/lang/el.json
index 3251141515..a0be987bc3 100644
--- a/plugins/CoreHome/lang/el.json
+++ b/plugins/CoreHome/lang/el.json
@@ -4,6 +4,7 @@
"CheckForUpdates": "Έλεγχος για ενημερώσεις",
"CheckPiwikOut": "Δοκιμάστε το Piwik!",
"ClickRowToExpandOrContract": "Πατήστε στη γραμμή για να επεκταθεί ή να κρυφτεί ο υποπίνακας.",
+ "ClickToEditX": "Κάντε κλικ για να επεξεργαστείτε το %s",
"CloseWidgetDirections": "Μπορείτε να κλείσετε αυτή τη λειτουργία κάνοντας κλικ στο εικονίδιο 'X' στην κορυφή του widget.",
"DataForThisReportHasBeenPurged": "Τα δεδομένα για αυτή την αναφορά είναι περισσότερα από %s μήνες και κόπηκαν.",
"DataTableExcludeAggregateRows": "Συγκεντρωτικές εγγραφές είναι ορατές %s Απόκρυωη",
diff --git a/plugins/CoreHome/lang/it.json b/plugins/CoreHome/lang/it.json
index 704abae336..9a5448aa78 100644
--- a/plugins/CoreHome/lang/it.json
+++ b/plugins/CoreHome/lang/it.json
@@ -4,6 +4,7 @@
"CheckForUpdates": "Cerca aggiornamenti",
"CheckPiwikOut": "Controlla Piwik!",
"ClickRowToExpandOrContract": "Clicca su questa riga per espandere o restringere la sotto-tabella.",
+ "ClickToEditX": "Clicca per modificare %s",
"CloseWidgetDirections": "Potete chiudere questo widget cliccando sull'icona 'X' nella parte alta del widget stesso.",
"DataForThisReportHasBeenPurged": "I dati di questo report hanno più di un mese %s e sono stati eliminato.",
"DataTableExcludeAggregateRows": "Le righe di aggregazione vengono visualizzate %s Nascondile",
diff --git a/plugins/CoreHome/templates/_dataTableFooter.twig b/plugins/CoreHome/templates/_dataTableFooter.twig
index 0f0f59556e..39ad2b0da0 100644
--- a/plugins/CoreHome/templates/_dataTableFooter.twig
+++ b/plugins/CoreHome/templates/_dataTableFooter.twig
@@ -16,7 +16,7 @@
{% if properties.show_search %}
<span class="dataTableSearchPattern">
- <label for="widgetSearch_{{ properties.report_id }}" style="display:none;"> {{ 'General_Search'|translate }} {{ visualization.config.translations.label|default('') }}</label>
+ <label for="widgetSearch_{{ properties.report_id }}" style="display:none;"> {{ 'General_Search'|translate }} {{ visualization.config.translations.label|default('') }}</label>
<input id="widgetSearch_{{ properties.report_id }}" type="text" class="searchInput" length="15" />
<input type="submit" value="{{ 'General_Search'|translate }}" />
</span>
@@ -57,20 +57,21 @@
<img width="16" height="16" src="plugins/Morpheus/images/export.png" title="{{ 'General_ExportThisReport'|translate }}"/>
</a>
</span>
- <span class="exportToFormatItems" style="display:none;">
- {{ 'General_Export'|translate }}:
- <a target="_blank" methodToCall="{{ properties.apiMethodToRequestDataTable }}" format="CSV" filter_limit="{{ properties.export_limit }}">CSV</a> |
- <a target="_blank" methodToCall="{{ properties.apiMethodToRequestDataTable }}" format="TSV" filter_limit="{{ properties.export_limit }}">TSV (Excel)</a> |
- <a target="_blank" methodToCall="{{ properties.apiMethodToRequestDataTable }}" format="XML" filter_limit="{{ properties.export_limit }}">XML</a> |
- <a target="_blank" methodToCall="{{ properties.apiMethodToRequestDataTable }}" format="JSON" filter_limit="{{ properties.export_limit }}">Json</a> |
- <a target="_blank" methodToCall="{{ properties.apiMethodToRequestDataTable }}" format="PHP" filter_limit="{{ properties.export_limit }}">Php</a>
+ <span class="exportToFormatItems" style="display:none;">
+ {{ 'General_Export'|translate }}:
+ {% set requestParams = properties.request_parameters_to_modify|json_encode %}
+ <a target="_blank" requestParams="{{ requestParams|e('html_attr') }}" methodToCall="{{ properties.apiMethodToRequestDataTable }}" format="CSV" filter_limit="{{ properties.export_limit }}">CSV</a> |
+ <a target="_blank" requestParams="{{ requestParams|e('html_attr') }}" methodToCall="{{ properties.apiMethodToRequestDataTable }}" format="TSV" filter_limit="{{ properties.export_limit }}">TSV (Excel)</a> |
+ <a target="_blank" requestParams="{{ requestParams|e('html_attr') }}" methodToCall="{{ properties.apiMethodToRequestDataTable }}" format="XML" filter_limit="{{ properties.export_limit }}">XML</a> |
+ <a target="_blank" requestParams="{{ requestParams|e('html_attr') }}" methodToCall="{{ properties.apiMethodToRequestDataTable }}" format="JSON" filter_limit="{{ properties.export_limit }}">Json</a> |
+ <a target="_blank" requestParams="{{ requestParams|e('html_attr') }}" methodToCall="{{ properties.apiMethodToRequestDataTable }}" format="PHP" filter_limit="{{ properties.export_limit }}">Php</a>
{% if properties.show_export_as_rss_feed %}
|
- <a target="_blank" methodToCall="{{ properties.apiMethodToRequestDataTable }}" format="RSS" filter_limit="{{ properties.export_limit }}" date="last10">
+ <a target="_blank" requestParams="{{ requestParams|e('html_attr') }}" methodToCall="{{ properties.apiMethodToRequestDataTable }}" format="RSS" filter_limit="{{ properties.export_limit }}" date="last10">
<img border="0" src="plugins/Morpheus/images/feed.png"/>
</a>
{% endif %}
- </span>
+ </span>
{% if properties.show_export_as_image_icon %}
<span id="dataTableFooterExportAsImageIcon">
<a class="tableIcon" href="#" onclick="$(this).closest('.dataTable').find('div.jqplot-target').trigger('piwikExportAsImage'); return false;">
diff --git a/plugins/CorePluginsAdmin/lang/ru.json b/plugins/CorePluginsAdmin/lang/ru.json
index 5d5a8bf2a8..7a2326d92d 100644
--- a/plugins/CorePluginsAdmin/lang/ru.json
+++ b/plugins/CorePluginsAdmin/lang/ru.json
@@ -19,6 +19,7 @@
"CorePluginTooltip": "Основные плагины не имеют версию, так как они распространяются с Piwik.",
"Deactivate": "Деактивировать",
"Developer": "Разработчик",
+ "DoMoreContactPiwikAdmins": "Для установки нового плагина или новой темы, пожалуйста свяжитесь с вашим Piwik-администратором",
"FeaturedPlugin": "Набирающий популярность плагин",
"GetEarlyAccessForPaidPlugins": "Примечание: в настоящее время все плагины доступны бесплатно, в будущем мы включим платные плагины на Marketplace (%sсвяжитесь с нами%s для раннего доступа).",
"History": "История",
diff --git a/plugins/CustomAlerts b/plugins/CustomAlerts
-Subproject d66e08e1f4ea336b96a263f0ea07bfb56a9001b
+Subproject 60f477b2ec100382638276d5bdde7812d99ccd8
diff --git a/plugins/DevicePlugins/Reports/Base.php b/plugins/DevicePlugins/Reports/Base.php
index cb075958be..81116f4d1d 100644
--- a/plugins/DevicePlugins/Reports/Base.php
+++ b/plugins/DevicePlugins/Reports/Base.php
@@ -15,7 +15,7 @@ abstract class Base extends \Piwik\Plugin\Report
{
protected function init()
{
- $this->category = 'UserSettings_VisitorSettings';
+ $this->category = 'General_VisitorSettings';
}
protected function getBasicDevicePluginsDisplayProperties(ViewDataTable $view)
diff --git a/plugins/DevicePlugins/lang/cs.json b/plugins/DevicePlugins/lang/cs.json
index 63c7807235..a760becbfa 100644
--- a/plugins/DevicePlugins/lang/cs.json
+++ b/plugins/DevicePlugins/lang/cs.json
@@ -2,6 +2,7 @@
"DevicePlugins": {
"BrowserWithNoPluginsEnabled": "%1$s bez povolených zásuvných modulů",
"BrowserWithPluginsEnabled": "%1$s s povolenými zásuvnými moduly %2$s",
+ "PluginDescription": "Hlásí zásuvné moduly prohlížeče",
"PluginDetectionDoesNotWorkInIE": "Poznámka: Detekce zásuvných modulů nepracuje v prohlížeči Interet Explorer. Toto hlášení je založeno na ostatních prohlížečích",
"WidgetPlugins": "Seznam zásuvných modulů",
"WidgetPluginsDocumentation": "Toto hlášení zobrazuje zásuvné moduly, které měli vaši návštěvníci povoleny. Tato informace může být důležitá při rozhodování o tom, jakým způsobem prezentovat obsah."
diff --git a/plugins/Ecommerce/lang/cs.json b/plugins/Ecommerce/lang/cs.json
new file mode 100644
index 0000000000..e77b6363f3
--- /dev/null
+++ b/plugins/Ecommerce/lang/cs.json
@@ -0,0 +1,6 @@
+{
+ "Ecommerce": {
+ "Sales": "Tržby",
+ "ViewSalesBy": "Zobrazí tržby podle %s"
+ }
+} \ No newline at end of file
diff --git a/plugins/Ecommerce/lang/da.json b/plugins/Ecommerce/lang/da.json
new file mode 100644
index 0000000000..4076385005
--- /dev/null
+++ b/plugins/Ecommerce/lang/da.json
@@ -0,0 +1,6 @@
+{
+ "Ecommerce": {
+ "Sales": "Salg",
+ "ViewSalesBy": "Vis salg fra %s"
+ }
+} \ No newline at end of file
diff --git a/plugins/Ecommerce/lang/el.json b/plugins/Ecommerce/lang/el.json
new file mode 100644
index 0000000000..03666581e6
--- /dev/null
+++ b/plugins/Ecommerce/lang/el.json
@@ -0,0 +1,6 @@
+{
+ "Ecommerce": {
+ "Sales": "Πωλήσεις",
+ "ViewSalesBy": "Εμφανίζει τις πωλήσεις ανά %s"
+ }
+} \ No newline at end of file
diff --git a/plugins/Events/lang/ru.json b/plugins/Events/lang/ru.json
index 61d63e59c4..86ff0366bb 100644
--- a/plugins/Events/lang/ru.json
+++ b/plugins/Events/lang/ru.json
@@ -1,6 +1,7 @@
{
"Events": {
"Event": "Событие",
+ "Events": "События",
"MaxValue": "Максимальное значение",
"MaxValueDocumentation": "Максимальное значения для этого события",
"MinValue": "Минимальное значение",
diff --git a/plugins/Goals/lang/cs.json b/plugins/Goals/lang/cs.json
index 8310e48662..9092f9f084 100644
--- a/plugins/Goals/lang/cs.json
+++ b/plugins/Goals/lang/cs.json
@@ -38,6 +38,7 @@
"DefaultRevenue": "Výchozí příjem cíle je",
"DefaultRevenueHelp": "Na příklad kontaktní formulář odeslaný návštěvníkem má průměrnou cenu $10. Piwik vám pomůže dobře pochopit chování skupin uživatelů",
"DeleteGoalConfirm": "Jste si jisti, že chcete vymazat tento cíl %s?",
+ "Details": "Detaily cíle",
"DocumentationRevenueGeneratedByProductSales": "Tržby produktu. Nepočítají se daně, poplatky za doručení a slevy.",
"Download": "Stáhnout soubor",
"Ecommerce": "Obchody",
@@ -61,7 +62,10 @@
"GoalX": "Cíl: %s",
"HelpOneConversionPerVisit": "Pokud byla stránka odpovídající cíli při návštěvě obnovena nebo zobrazena vícekrát, bude cíl započítán pouze jednou a to při prvním zobrazení.",
"IsExactly": "je přesně %s",
+ "LearnMoreAboutGoalTrackingDocumentation": "Více o sledování cílu se dozvíte v %suživatelské dokumentaci%s.",
"LeftInCart": "%s Zbylo v košíku",
+ "ManageGoals": "Spravovat cíle",
+ "ManageGoalsOrCreateANewGoal": "%sSpravovat cíle%s nebo ho vytvořte.",
"Manually": "ručně",
"ManuallyTriggeredUsingJavascriptFunction": "Cíl je ručně zaznamenáván pomocí JavaScriptového API trackGoal()",
"MatchesExpression": "odpovídá %s",
@@ -81,6 +85,7 @@
"ReturningVisitorsConversionRateIs": "Poměr konverze navracejících se uživatelů je %s",
"SendEvent": "Poslat událost",
"SingleGoalOverviewDocumentation": "Toto je přehled konverzí jednoho cíle. %s Linky lze zvětšit kliknutím na ně.",
+ "ThereIsNoGoalToManage": "Pro stránky %s není žádný cíl ke spravování",
"UpdateGoal": "Aktualizovat cíl",
"URL": "URL",
"ViewAndEditGoals": "Zobrazit a editovat cíle",
diff --git a/plugins/Goals/lang/da.json b/plugins/Goals/lang/da.json
index 0ace8c2f88..f482cb2aa5 100644
--- a/plugins/Goals/lang/da.json
+++ b/plugins/Goals/lang/da.json
@@ -38,6 +38,7 @@
"DefaultRevenue": "Målets standard indtægter er",
"DefaultRevenueHelp": "F.eks. en kontaktformular sendt af en besøgende kan være 10 kr. værd i gennemsnit. Piwik vil hjælpe dig med at forstå, hvor godt dine besøgssegmenter klarer sig.",
"DeleteGoalConfirm": "Bekræft sletning af mål %s?",
+ "Details": "Mål detaljer",
"DocumentationRevenueGeneratedByProductSales": "Produktsalg. Omfatter ikke moms, forsendelse og rabat",
"Download": "Henter en fil",
"Ecommerce": "E-handel",
@@ -63,6 +64,8 @@
"IsExactly": "er nøjagtig %s",
"LearnMoreAboutGoalTrackingDocumentation": "Lær mere om %s sporingsmål i Piwik%s i brugerdokumentationen.",
"LeftInCart": "%s tilbage i kurven",
+ "ManageGoals": "Administrer mål",
+ "ManageGoalsOrCreateANewGoal": "%sAdministrer mål%s eller opret et nyt mål nu!",
"Manually": "manuelt",
"ManuallyTriggeredUsingJavascriptFunction": "Målet udløses manuelt ved hjælp af JavaScript API trackGoal ()",
"MatchesExpression": "matcher udtrykket %s",
@@ -82,6 +85,7 @@
"ReturningVisitorsConversionRateIs": "Tilbagevendende besøgendes konverteringsrate er %s",
"SendEvent": "Send en hændelse",
"SingleGoalOverviewDocumentation": "Oversigt over konverteringer for et enkelt mål. %s Minidiagrammer under diagrammet kan forstørres ved at klikke på dem.",
+ "ThereIsNoGoalToManage": "Der er ingen mål at administrere for hjemmeside %s",
"UpdateGoal": "Opdater mål",
"URL": "Netadresse",
"ViewAndEditGoals": "Vis og rediger mål",
diff --git a/plugins/Goals/lang/de.json b/plugins/Goals/lang/de.json
index 3513dc5e9b..835bfb2c00 100644
--- a/plugins/Goals/lang/de.json
+++ b/plugins/Goals/lang/de.json
@@ -38,6 +38,7 @@
"DefaultRevenue": "Standard Zielumsatz ist",
"DefaultRevenueHelp": "Das Absenden eines Kontaktformulars durch einen Besucher kann zum Beispiel durchschnittlich 10 € wert sein. Piwik hilft Ihnen, zu verstehen, wie sich Ihre Besucher-Segmente verhalten.",
"DeleteGoalConfirm": "Wollen sie wirklich das Ziel %s löschen?",
+ "Details": "Ziel-Details",
"DocumentationRevenueGeneratedByProductSales": "Verkaufsumsatz ohne Steuer, Versand und Rabatt",
"Download": "eine Datei herunterladen wird",
"Ecommerce": "Ecommerce",
diff --git a/plugins/Goals/lang/el.json b/plugins/Goals/lang/el.json
index 1e8902882a..5f20910ef8 100644
--- a/plugins/Goals/lang/el.json
+++ b/plugins/Goals/lang/el.json
@@ -38,6 +38,7 @@
"DefaultRevenue": "Η προεπιλεγμένη πρόσοδος του στόχου είναι",
"DefaultRevenueHelp": "Για παράδειγμα, μια Φόρμα Επικοινωνίας που υποβλήθηκε από έναν επισκέπτη μπορεί να αξίζει 10€ κατά μέσο όρο. Το Piwik θα σας βοηθήσει να καταλάβετε πως λειτουργούν τα τμήματα των χρηστών σας.",
"DeleteGoalConfirm": "Είστε σίγουροι ότι θέλετε να διαγράψετε το Στόχο %s;",
+ "Details": "Λεπτομέρειες στόχου",
"DocumentationRevenueGeneratedByProductSales": "Πωλήσεις προϊόντος. Χωρίς φόρο, μεταφορικά και έκπτωση",
"Download": "Τη λήψη ενός αρχείου",
"Ecommerce": "Ηλεκτρονικό Εμπόριο",
@@ -61,7 +62,10 @@
"GoalX": "Στόχος %s",
"HelpOneConversionPerVisit": "Αν μια Σελίδα ταιριάζει, αυτός ο Στόχος ανανεώνεται ή προβάλεται περισσόερες φορές ανά Επίσκεψη και ο Στόχος θα καταγράφετε μόνο την πρώτη φορά που φορτώθηκε η σελίδα κατά την επίσκεψη.",
"IsExactly": "είναι ακριβώς %s",
+ "LearnMoreAboutGoalTrackingDocumentation": "Μάθετε περισσότερα σχετικά με την %sΠαρακολούθηση Στόχων στο Piwik%s στην τεκμηρίωση για το χρήστη.",
"LeftInCart": "%s απομένουν στο καλάθι",
+ "ManageGoals": "Διαχείριση των Στόχων",
+ "ManageGoalsOrCreateANewGoal": "%sΔιαχειριστείτε τους Στόχους%s ή δημιουργήστε τώρα έναν νέο!",
"Manually": "χειροκίνητα",
"ManuallyTriggeredUsingJavascriptFunction": "Ο Στόχος ενεργοποιείτε χειροκίνητα με χρήση του Javascript API trackGoal()",
"MatchesExpression": "ταιριάζει στην έκφραση %s",
@@ -81,6 +85,7 @@
"ReturningVisitorsConversionRateIs": "Ο βαθμός μετατροπής επιστρεφόμενων επισκεπτών είναι %s",
"SendEvent": "Αποστολή συμβάντος",
"SingleGoalOverviewDocumentation": "Αυτή είναι μια επισκόπηση των μετατροπών για ένα μόνο στόχο. %s Τα μικροδιαγράμματα κάτω από το διάγραμμα μπορούν να μεγεθυνθούν πατώντας επάνω τους.",
+ "ThereIsNoGoalToManage": "Δεν υπάρχει στόχος για να διαχειριστείτε για τον ιστοτόπο %s",
"UpdateGoal": "Ενημέρωση Στόχου",
"URL": "URL",
"ViewAndEditGoals": "Προβολή και Επεξεργασία Στόχων",
diff --git a/plugins/Goals/lang/it.json b/plugins/Goals/lang/it.json
index 06874ed45d..f95ddbed16 100644
--- a/plugins/Goals/lang/it.json
+++ b/plugins/Goals/lang/it.json
@@ -38,6 +38,7 @@
"DefaultRevenue": "Il ricavo predefinito per l'obiettivo è",
"DefaultRevenueHelp": "Per esempio, un Form di Contatto inviato da un visitatore può valere mediamente $10. Piwik pu%ograve; aiutarti a capire quanto rendono i tuoi visitatori.",
"DeleteGoalConfirm": "Sei sicuro di voler cancellare il Goal %s?",
+ "Details": "Dettagli Goal",
"DocumentationRevenueGeneratedByProductSales": "Vendite prodotti. Escluse tasse, spedizione e sconto",
"Download": "Scaricano un file",
"Ecommerce": "Ecommerce",
diff --git a/plugins/Insights/Visualizations/Insight.php b/plugins/Insights/Visualizations/Insight.php
index a22206d698..7fe304e5be 100644
--- a/plugins/Insights/Visualizations/Insight.php
+++ b/plugins/Insights/Visualizations/Insight.php
@@ -93,6 +93,7 @@ class Insight extends Visualization
$this->config->show_pagination_control = false;
$this->config->show_offset_information = false;
$this->config->show_search = false;
+ $this->config->show_export_as_rss_feed = false;
if (!self::canDisplayViewDataTable($this)) {
$this->assignTemplateVar('cannotDisplayReport', true);
diff --git a/plugins/Installation/lang/de.json b/plugins/Installation/lang/de.json
index 98131b4731..6d44676866 100644
--- a/plugins/Installation/lang/de.json
+++ b/plugins/Installation/lang/de.json
@@ -83,7 +83,7 @@
"SystemCheckGlobHelp": "Diese eingebaute Funktion ist auf ihrem System deaktiviert. Piwik wird versuchen, diese Funktion zu emulieren, aber dabei möglicherweise auf weitere Sicherheitseinschränkungen stoßen. Die Funktionalität kann beeinträchtigt werden.",
"SystemCheckGzcompressHelp": "Sie müssen die zlib Erweiterung und die gzcompress Funktion aktivieren.",
"SystemCheckGzuncompressHelp": "Sie müssen die zlib Erweiterung und die gzuncompress Funktion aktivieren.",
- "SystemCheckIconvHelp": "Sie müssen PHP mit \"iconv\" Unterstützung konfigurieren und neu übersetzen ( --with-iconv).",
+ "SystemCheckIconvHelp": "Sie müssen PHP mit \"iconv\" Unterstützung konfigurieren und neu bauen ( --with-iconv).",
"SystemCheckJsonHelp": "Die php5-json Erweiterung wird benötigt, damit Piwik JSON-Daten lesen und schreiben kann.",
"SystemCheckMailHelp": "Feedback und Nachrichten zu verlorenen Passwörtern können nicht ohne mail() versendet werden.",
"SystemCheckMbstring": "mbstring",
diff --git a/plugins/Installation/lang/pl.json b/plugins/Installation/lang/pl.json
index 1c1deb7371..e4316c1f2d 100644
--- a/plugins/Installation/lang/pl.json
+++ b/plugins/Installation/lang/pl.json
@@ -44,6 +44,7 @@
"SetupWebSiteName": "nazwa portalu",
"SetupWebsiteSetupSuccess": "Serwis %s utworzono pomyślnie!",
"SetupWebSiteURL": "adres URL portalu",
+ "SiteSetup": "Proszę utworzyć pierwszą stronę, która miała by być anmalizowana prze Piwik'a:",
"SiteSetupFootnote": "UWAGA: Nowe strony do śledzenia będzie mozna dodawać dopiero po zakończeniu instalacji Piwik'a",
"SuperUser": "Super Użytkownik",
"SuperUserLogin": "login super użytkownika",
diff --git a/plugins/PleineLune b/plugins/PleineLune
deleted file mode 160000
-Subproject d2d78dd7973811cfb3d0744655a2f0d763b0129
diff --git a/plugins/PrivacyManager/lang/pl.json b/plugins/PrivacyManager/lang/pl.json
index 205f9abdb0..14a97b8c9e 100644
--- a/plugins/PrivacyManager/lang/pl.json
+++ b/plugins/PrivacyManager/lang/pl.json
@@ -1,6 +1,7 @@
{
"PrivacyManager": {
"AnonymizeIpDescription": "Wybierz \"Tak\" jeśli chcesz aby nie śledzić w pełni wykwalifikowanych adresów IP.",
+ "AnonymizeIpExtendedHelp": "Kiedy użytkownik odwiedzi twoją stronę. Piwik nie użyje całego adresu IP danej osoby (np %s), a zamiast tego wykona anonimizację adresu (do %s). Anonimizacja adresu IP jest wymogiem prawnym w niektórych krajach - na przykład w Niemczech.",
"AnonymizeIpInlineHelp": "Anonimizacja ostatniego bajtu w adresie IP odwiedzających, by dostosować się do być może lokalnego prawa do prywatności\/wytycznych o prywatności.",
"AnonymizeIpMaskLengtDescription": "Wybierz ile bajtów z odwiedzających' adresów IP powinny być zamaskowane.",
"AnonymizeIpMaskLength": "%s bajt(ów) - np. %s",
@@ -21,6 +22,7 @@
"DoNotTrack_DisabledMoreInfo": "Dla uszanowania prywatności odwiedzających zalecamy włączenie wsparcia DoNotTrack.",
"DoNotTrack_Enable": "Włącz wspracie Do Not Track",
"DoNotTrack_Enabled": "Obecnie szanujesz prywatności swojch użytkowników, Brawo!",
+ "DoNotTrack_EnabledMoreInfo": "Jeżeli użytkownik przeglądarki ustawi sobie ,,I do not want to be tracked \/ Nie chcę być śledzony'' (DoNotTrack jest aktywny) wtedy Piwik nie będzie analizował takich odwiedzin.",
"KeepDataFor": "Zachowaj wszystkie dane dla:",
"LastDelete": "Ostatnio był usunięte",
"LeastDaysInput": "Proszę podać liczbę dni większą niż %s.",
diff --git a/plugins/Provider/lang/am.json b/plugins/Provider/lang/am.json
index fb7cbc4bc1..1c6787d220 100644
--- a/plugins/Provider/lang/am.json
+++ b/plugins/Provider/lang/am.json
@@ -1,7 +1,6 @@
{
"Provider": {
"ColumnProvider": "አቅራቢ",
- "SubmenuLocationsProvider": "መገኛ እና አቅራቢ",
"WidgetProviders": "አቅራቢዎች"
}
} \ No newline at end of file
diff --git a/plugins/Provider/lang/ar.json b/plugins/Provider/lang/ar.json
index 05c6b61ae3..2e95162c50 100644
--- a/plugins/Provider/lang/ar.json
+++ b/plugins/Provider/lang/ar.json
@@ -2,7 +2,6 @@
"Provider": {
"ColumnProvider": "مزود الخدمة",
"PluginDescription": "يعرض تقارير عن مزود الخدمة للزوار.",
- "SubmenuLocationsProvider": "المكان ومزود الخدمة",
"WidgetProviders": "مزودو الخدمة"
}
} \ No newline at end of file
diff --git a/plugins/Provider/lang/be.json b/plugins/Provider/lang/be.json
index f673a9159b..bb65384aaa 100644
--- a/plugins/Provider/lang/be.json
+++ b/plugins/Provider/lang/be.json
@@ -3,7 +3,6 @@
"ColumnProvider": "Правайдар",
"PluginDescription": "Справаздача правайдараў наведвальнікаў.",
"ProviderReportDocumentation": "Гэтая справаздача паказвае, якія інтэрнэт-правайдэры наведвальнікаў выкарыстоўваюцца для доступу да вэб-сайту. Вы можаце націснуць на імя правайдэра для больш падрабязнай інфармацыі. %s Калі Piwik не можа вызначыць, правайдэра наведвальніка, ён паказваецца ў якасці IP-адраса.",
- "SubmenuLocationsProvider": "Лакацыі і правайдары",
"WidgetProviders": "Правайдары"
}
} \ No newline at end of file
diff --git a/plugins/Provider/lang/bg.json b/plugins/Provider/lang/bg.json
index 3d6cefdf5d..cd30212857 100644
--- a/plugins/Provider/lang/bg.json
+++ b/plugins/Provider/lang/bg.json
@@ -3,7 +3,6 @@
"ColumnProvider": "Интернет доставчик",
"PluginDescription": "Доклад за доставчиците на посетителите.",
"ProviderReportDocumentation": "Отчетът показва кои доставчици на интернет услуги използват вашите потребители за достъп до уеб сайта. Можете да щракнете върху името на доставчика за повече детайли. %s Ако Piwik не може да определи доставчика на потребителя, той е показан само като IP.",
- "SubmenuLocationsProvider": "Места & Доставчици",
"WidgetProviders": "Доставчици"
}
} \ No newline at end of file
diff --git a/plugins/Provider/lang/ca.json b/plugins/Provider/lang/ca.json
index a5daa7f4ba..96c08cd7b8 100644
--- a/plugins/Provider/lang/ca.json
+++ b/plugins/Provider/lang/ca.json
@@ -3,7 +3,6 @@
"ColumnProvider": "Proveïdor",
"PluginDescription": "Informació del Proveïdor dels visitants.",
"ProviderReportDocumentation": "Aquest informe mostra quin Proveïdor d'Internet han utiltizat els vostres visitants per accedir al lloc. Podeu click al nom del proveïdor per més detalls. %s Si el Piwik no pot determinar el proveïdor del visitant, es mostra la seva adreça IP.",
- "SubmenuLocationsProvider": "Localitzacions i proveïdors",
"WidgetProviders": "Proveïdors"
}
} \ No newline at end of file
diff --git a/plugins/Provider/lang/cs.json b/plugins/Provider/lang/cs.json
index 3914c77a5f..fcbc311fd4 100644
--- a/plugins/Provider/lang/cs.json
+++ b/plugins/Provider/lang/cs.json
@@ -4,7 +4,6 @@
"PluginDescription": "Zobrazí poskytovatele připojení návštěvníků",
"ProviderReportDocumentation": "Toto hlášení poskytuje informace o tom, jakého poskytovatele internetového připojení vaši návštěvníci při přístupu na stránky použili. Pokud kliknete na jméno poskytovatele, zobrazí se podrobnosti. %s Pokud Piwik nebyl schopen poskytovatele zjistit, je zobrazen jako IP.",
"ProviderReportFooter": "Neznámý poskytovatel znamená, že IP adresu nebylo možné vyhledat.",
- "SubmenuLocationsProvider": "Umístění a poskytovatel",
"WidgetProviders": "Poskytovatelé"
}
} \ No newline at end of file
diff --git a/plugins/Provider/lang/da.json b/plugins/Provider/lang/da.json
index 3f5f8dd911..9ebcd96f60 100644
--- a/plugins/Provider/lang/da.json
+++ b/plugins/Provider/lang/da.json
@@ -4,7 +4,6 @@
"PluginDescription": "Rapporter de besøgendes udbyder.",
"ProviderReportDocumentation": "Rapporten viser hvilken Internet udbyder de besøgende bruger. Klik på en udbyders navn for flere oplysninger. %s Hvis Piwik ikke kan bestemme besøgendes udbyder, er den opført som IP.",
"ProviderReportFooter": "Ukendt udbyder betyder at IP-adressen kunne ikke slås op.",
- "SubmenuLocationsProvider": "Sted og udbyder",
"WidgetProviders": "Udbydere"
}
} \ No newline at end of file
diff --git a/plugins/Provider/lang/de.json b/plugins/Provider/lang/de.json
index 1e2be2784c..d143173e82 100644
--- a/plugins/Provider/lang/de.json
+++ b/plugins/Provider/lang/de.json
@@ -4,7 +4,6 @@
"PluginDescription": "Stellt Informationen über den Provider des Besuchers dar.",
"ProviderReportDocumentation": "Dieser Bericht zeigt Ihnen, welche Internetanbieter die Besucher Ihrer Webseite nutzen. Sie können auf den Namen eines Anbieters klicken, um mehr Informationen dazu zu erhalten. %s Wenn Piwik den Internetanbieter eines Besuchers nicht feststellen kann, wird er unter IP gelistet.",
"ProviderReportFooter": "Unbekannter Provider bedeutet die IP-Adresse konnte nicht aufgelöst werden.",
- "SubmenuLocationsProvider": "Standorte und Provider",
"WidgetProviders": "Provider"
}
} \ No newline at end of file
diff --git a/plugins/Provider/lang/el.json b/plugins/Provider/lang/el.json
index 07eedc062d..cf32f5e7ec 100644
--- a/plugins/Provider/lang/el.json
+++ b/plugins/Provider/lang/el.json
@@ -4,7 +4,6 @@
"PluginDescription": "Αναφέρει τον Παροχέα των επισκεπτών.",
"ProviderReportDocumentation": "Αυτή η αναφορά εμφανίζει ποιος Παροχέας Υπηρεσιών Διαδικτύου (ISP) χρησιμοποιείτε από τους επισκέπτες σας για να επισκεφθούν τις ιστοσελίδες σας. Μπορείτε να πατήσετε σε ένα όνομα Παροχέα για περισσότερες λεπτομέρειες. %s Αν το Piwik δεν μπορεί να ανιχνεύσει το παροχέα του επισκέπτη, χαρακτηρίζεται ως IP.",
"ProviderReportFooter": "Άγνωστος πάροχος σημαίνει ότι δεν ήταν δυνατή η εύρεση της διεύθυνσης IP.",
- "SubmenuLocationsProvider": "Τοποθεσίες & πάροχοι",
"WidgetProviders": "Πάροχοι"
}
} \ No newline at end of file
diff --git a/plugins/Provider/lang/es.json b/plugins/Provider/lang/es.json
index 7ff037c1cb..f644f73079 100644
--- a/plugins/Provider/lang/es.json
+++ b/plugins/Provider/lang/es.json
@@ -3,7 +3,6 @@
"ColumnProvider": "Proveedor",
"PluginDescription": "Reporta el Proveedor de los Visitantes.",
"ProviderReportDocumentation": "Este reporte muestra que Proveedores de Servicios de Internet (ISPs) usan sus visitantes para acceder al sitio web. Usted puede hacer clic en el nombre de un proveedor para más detalles. %s Si Piwik no puede determinar el proveedor de un visitante, será puesto como la IP.",
- "SubmenuLocationsProvider": "Localizaciones y proveedores",
"WidgetProviders": "Proveedores"
}
} \ No newline at end of file
diff --git a/plugins/Provider/lang/et.json b/plugins/Provider/lang/et.json
index 62d493341f..6200fe1913 100644
--- a/plugins/Provider/lang/et.json
+++ b/plugins/Provider/lang/et.json
@@ -1,7 +1,6 @@
{
"Provider": {
"ColumnProvider": "Teenusepakkuja",
- "SubmenuLocationsProvider": "Asukoht & pakkuja",
"WidgetProviders": "Teenusepakkujad"
}
} \ No newline at end of file
diff --git a/plugins/Provider/lang/eu.json b/plugins/Provider/lang/eu.json
index 0c069cffeb..776906791b 100644
--- a/plugins/Provider/lang/eu.json
+++ b/plugins/Provider/lang/eu.json
@@ -1,7 +1,6 @@
{
"Provider": {
"ColumnProvider": "Hornitzailea",
- "SubmenuLocationsProvider": "Kokalekuak eta hornitzailea",
"WidgetProviders": "Hornitzaileak"
}
} \ No newline at end of file
diff --git a/plugins/Provider/lang/fa.json b/plugins/Provider/lang/fa.json
index ff4c40f973..3c3a4efdd0 100644
--- a/plugins/Provider/lang/fa.json
+++ b/plugins/Provider/lang/fa.json
@@ -2,7 +2,6 @@
"Provider": {
"ColumnProvider": "ارائه دهنده خدمات",
"PluginDescription": "ارائه دهنده خدمات بازدیدکنندگان را گزارش کن.",
- "SubmenuLocationsProvider": "محل و ارائه دهنده خدمات",
"WidgetProviders": "ارائه دهندگان"
}
} \ No newline at end of file
diff --git a/plugins/Provider/lang/fi.json b/plugins/Provider/lang/fi.json
index fd31c3300e..4492ea9f82 100644
--- a/plugins/Provider/lang/fi.json
+++ b/plugins/Provider/lang/fi.json
@@ -3,7 +3,6 @@
"ColumnProvider": "Palveluntarjoajat",
"PluginDescription": "Raportit käyttäjien palveluntarjoajista.",
"ProviderReportDocumentation": "Tämä raportti näyttää, mitä internetin toimittajia kävijäsi käyttivät sivuillasi. Saat lisätietoja klikkaamalla toimittajan nimeä. %s Jos Piwik ei tunnista toimittajan nimeä, kävijästä näytetään IP.",
- "SubmenuLocationsProvider": "Sijainnit & palveluntarjoajat",
"WidgetProviders": "Palveluntarjoajat"
}
} \ No newline at end of file
diff --git a/plugins/Provider/lang/fr.json b/plugins/Provider/lang/fr.json
index c22839beb3..245f33cc51 100644
--- a/plugins/Provider/lang/fr.json
+++ b/plugins/Provider/lang/fr.json
@@ -4,7 +4,6 @@
"PluginDescription": "Effectue des rapports sur les FAI des visiteurs.",
"ProviderReportDocumentation": "Ce rapport affiche quel Fournisseur d'Accès à Internet vos visiteurs ont utilisé pour accéder à votre site web. Vous pouvez cliquer sur le nom d'un FAI pour plus de détails. %s Si Piwik ne peut déterminer le FAI d'un visiteur, il est listé en tant qu'IP.",
"ProviderReportFooter": "Fournisseur d'accès inconnu signifie que l'adresse IP ne peut pas être déterminée",
- "SubmenuLocationsProvider": "Situation géographique et FAI",
"WidgetProviders": "Fournisseurs d'accès à Internet"
}
} \ No newline at end of file
diff --git a/plugins/Provider/lang/gl.json b/plugins/Provider/lang/gl.json
index 4d6188a76a..e983b9143d 100644
--- a/plugins/Provider/lang/gl.json
+++ b/plugins/Provider/lang/gl.json
@@ -1,6 +1,5 @@
{
"Provider": {
- "SubmenuLocationsProvider": "Localizacións e provedor",
"WidgetProviders": "Provedores"
}
} \ No newline at end of file
diff --git a/plugins/Provider/lang/hi.json b/plugins/Provider/lang/hi.json
index 1d0929f54d..4a9982d1c6 100644
--- a/plugins/Provider/lang/hi.json
+++ b/plugins/Provider/lang/hi.json
@@ -3,7 +3,6 @@
"ColumnProvider": "प्रदाता",
"PluginDescription": "आगंतुकों के प्रदाता के रिपोर्ट.",
"ProviderReportDocumentation": "इस रिपोर्ट से पता चलता है आपके आगंतुकों को वेबसाइट का उपयोग करने के लिए जो इंटरनेट सेवा प्रदाता इस्तेमाल किया है. आप अधिक जानकारी के लिए एक प्रदाता के नाम पर क्लिक कर सकते हैं. %sPiwik एक आगंतुक प्रदाता निर्धारित नहीं कर सकते हैं, यह आईपी के रूप में सूचीबद्ध किया जाता है.",
- "SubmenuLocationsProvider": "स्थान और प्रदाता",
"WidgetProviders": "प्रदाता"
}
} \ No newline at end of file
diff --git a/plugins/Provider/lang/hu.json b/plugins/Provider/lang/hu.json
index 443f485c8e..048fd62996 100644
--- a/plugins/Provider/lang/hu.json
+++ b/plugins/Provider/lang/hu.json
@@ -2,7 +2,6 @@
"Provider": {
"ColumnProvider": "Internetszolgáltató",
"PluginDescription": "Jelentések a látogatók internetszolgáltatóról",
- "SubmenuLocationsProvider": "Hely és internetszolgáltató",
"WidgetProviders": "Internetszolgáltatók"
}
} \ No newline at end of file
diff --git a/plugins/Provider/lang/id.json b/plugins/Provider/lang/id.json
index 95094809f4..2c189c611e 100644
--- a/plugins/Provider/lang/id.json
+++ b/plugins/Provider/lang/id.json
@@ -3,7 +3,6 @@
"ColumnProvider": "Penyedia",
"PluginDescription": "Membuat laporan Penyedia pengunjung.",
"ProviderReportDocumentation": "Laporan ini menampilkan Penyedia Layanan Internet yang digunakan oleh pengunjung Anda untuk mengunjungi situs. Anda dapat mengeklik nama penyedia untuk melihat rinciannya. %s Bila Piwik tak dapat menentukan penyedia pengunjung, ini akan ditampikan sebagai IP.",
- "SubmenuLocationsProvider": "Lokasi & Penyedia",
"WidgetProviders": "Penyedia"
}
} \ No newline at end of file
diff --git a/plugins/Provider/lang/is.json b/plugins/Provider/lang/is.json
index 22c436a004..76f95f96a0 100644
--- a/plugins/Provider/lang/is.json
+++ b/plugins/Provider/lang/is.json
@@ -2,7 +2,6 @@
"Provider": {
"ColumnProvider": "Veitandi",
"PluginDescription": "Skilar gögnum um þá sem veita gestum á vefinn.",
- "SubmenuLocationsProvider": "Staðsetningar & Veitandi",
"WidgetProviders": "Veitendur"
}
} \ No newline at end of file
diff --git a/plugins/Provider/lang/it.json b/plugins/Provider/lang/it.json
index 411f3565da..7e9acde2ab 100644
--- a/plugins/Provider/lang/it.json
+++ b/plugins/Provider/lang/it.json
@@ -4,7 +4,6 @@
"PluginDescription": "Riporta i Provider dei visitatori.",
"ProviderReportDocumentation": "Questo reports mostra quali prvider Internet Service (ISP)i tuoi visitatori hanno utilizzato per accedere al sito web. È possibile fare clic su un nome per maggiori dettagli. %s Se Piwik non può determinare il provider di un visitatore, questo viene elencato come IP.",
"ProviderReportFooter": "Provider sconosciuto significa che l'indirizzo IP non può essere ricercato",
- "SubmenuLocationsProvider": "Località & Provider",
"WidgetProviders": "Providers"
}
} \ No newline at end of file
diff --git a/plugins/Provider/lang/ja.json b/plugins/Provider/lang/ja.json
index 59bc3ff874..ea5a684935 100644
--- a/plugins/Provider/lang/ja.json
+++ b/plugins/Provider/lang/ja.json
@@ -4,7 +4,6 @@
"PluginDescription": "ビジターのプロバイダをリポートします。",
"ProviderReportDocumentation": "このリポートは、ウェブサイトにアクセスする訪問者が使っているインターネットサービスプロバイダを示しています。詳細については、プロバイダ名をクリックしてください。 %s Piwikが訪問者のプロバイダを判別できない場合は、IPとして表示されます。",
"ProviderReportFooter": "未知のプロバイダーとは IP アドレスが検索できなかったことを意味します。",
- "SubmenuLocationsProvider": "所在地とプロバイダ",
"WidgetProviders": "プロバイダ"
}
} \ No newline at end of file
diff --git a/plugins/Provider/lang/ka.json b/plugins/Provider/lang/ka.json
index 1b7884e94f..903b6a6085 100644
--- a/plugins/Provider/lang/ka.json
+++ b/plugins/Provider/lang/ka.json
@@ -2,7 +2,6 @@
"Provider": {
"ColumnProvider": "პროვაიდერი",
"PluginDescription": "აკეტებს ანგარიშს ვიზიტორების პროვაიდერების შესახებ.",
- "SubmenuLocationsProvider": "მდებარეობა და პროვაიდერი",
"WidgetProviders": "პროვაიდერები"
}
} \ No newline at end of file
diff --git a/plugins/Provider/lang/ko.json b/plugins/Provider/lang/ko.json
index e5810e76f5..36a09ca4d2 100644
--- a/plugins/Provider/lang/ko.json
+++ b/plugins/Provider/lang/ko.json
@@ -3,7 +3,6 @@
"ColumnProvider": "공급자",
"PluginDescription": "방문자의 공급자를 보고합니다.",
"ProviderReportDocumentation": "이 보고서는 웹사이트를 방문하는 방문자가 사용하고있는 인터넷 서비스 공급자를 보여줍니다. 자세한 내용은 공급자 이름을 클릭하세요. %s Piwik가 방문자의 공급자를 확인할 수없는 경우는 IP로 표시됩니다.",
- "SubmenuLocationsProvider": "위치 및 공급자",
"WidgetProviders": "공급자"
}
} \ No newline at end of file
diff --git a/plugins/Provider/lang/lt.json b/plugins/Provider/lang/lt.json
index eb5beb4bca..f8dadfcd42 100644
--- a/plugins/Provider/lang/lt.json
+++ b/plugins/Provider/lang/lt.json
@@ -2,7 +2,6 @@
"Provider": {
"ColumnProvider": "IP tiekėjas",
"PluginDescription": "Nurodo lankytojų interneto paslaugų tiekėją.",
- "SubmenuLocationsProvider": "Vietovės ir IP tiekėjas",
"WidgetProviders": "IP tiekėjai"
}
} \ No newline at end of file
diff --git a/plugins/Provider/lang/lv.json b/plugins/Provider/lang/lv.json
index 3e3bbeb285..f1f456274b 100644
--- a/plugins/Provider/lang/lv.json
+++ b/plugins/Provider/lang/lv.json
@@ -1,7 +1,6 @@
{
"Provider": {
"ColumnProvider": "Pakalpojumu sniedzējs",
- "SubmenuLocationsProvider": "Lokācijas un pakalpojumu sniedzējs",
"WidgetProviders": "Pakalpojumu sniedzēji"
}
} \ No newline at end of file
diff --git a/plugins/Provider/lang/nb.json b/plugins/Provider/lang/nb.json
index df2ddd6398..2d9b58595b 100644
--- a/plugins/Provider/lang/nb.json
+++ b/plugins/Provider/lang/nb.json
@@ -2,7 +2,6 @@
"Provider": {
"ColumnProvider": "Tilbyder",
"PluginDescription": "Rapporterer tilbyderen for de besøkende.",
- "SubmenuLocationsProvider": "Lokasjoner og tilbyder",
"WidgetProviders": "Tilbydere"
}
} \ No newline at end of file
diff --git a/plugins/Provider/lang/nl.json b/plugins/Provider/lang/nl.json
index fdbc832388..ccd9cad639 100644
--- a/plugins/Provider/lang/nl.json
+++ b/plugins/Provider/lang/nl.json
@@ -3,7 +3,6 @@
"ColumnProvider": "Provider",
"PluginDescription": "Rapporteert de provider van de bezoekers",
"ProviderReportDocumentation": "Dit rapport toont de Internet Service Providers die uw bezoekers gebruiken om de website te bezoeken. Klik op een provider naam voor meer informatie. %s Als Piwik de naam van de provider niet kan achterhalen, dan wordt deze vermeld als IP.",
- "SubmenuLocationsProvider": "Lokatie & provider",
"WidgetProviders": "Providers"
}
} \ No newline at end of file
diff --git a/plugins/Provider/lang/pl.json b/plugins/Provider/lang/pl.json
index 392dc9fbf3..0c21c86927 100644
--- a/plugins/Provider/lang/pl.json
+++ b/plugins/Provider/lang/pl.json
@@ -2,7 +2,6 @@
"Provider": {
"ColumnProvider": "Dostawca",
"PluginDescription": "Raporty dostawców o odwiedzających.",
- "SubmenuLocationsProvider": "Lokalizacje & dostawcy",
"WidgetProviders": "Dostawcy"
}
} \ No newline at end of file
diff --git a/plugins/Provider/lang/pt-br.json b/plugins/Provider/lang/pt-br.json
index 43cc0ecc0c..c585a5eeb3 100644
--- a/plugins/Provider/lang/pt-br.json
+++ b/plugins/Provider/lang/pt-br.json
@@ -3,7 +3,6 @@
"ColumnProvider": "Provedor",
"PluginDescription": "Relata o provedor dos visitantes.",
"ProviderReportDocumentation": "Este relatório mostra como o Internet Service Providers de seus visitantes -e usado para acessar o site. Você pode clicar no nome de um provedor para obter mais detalhes. %s Se o Piwik não puder determinar o fornecedor de um visitante, ele será listado como IP.",
- "SubmenuLocationsProvider": "Lugares e Provedores",
"WidgetProviders": "Provedores"
}
} \ No newline at end of file
diff --git a/plugins/Provider/lang/pt.json b/plugins/Provider/lang/pt.json
index 7e295d8279..7c5a619b3e 100644
--- a/plugins/Provider/lang/pt.json
+++ b/plugins/Provider/lang/pt.json
@@ -3,7 +3,6 @@
"ColumnProvider": "Fornecedor",
"PluginDescription": "Relata os Fornecedores dos visitantes.",
"ProviderReportDocumentation": "Este relatório mostra quais os ISPs que os seus visitantes usaram para aceder ao website. Você pode clicar num nome do ISP para obter mais detalhes. %s Se o Piwik não pode determinar o ISP do visitante, é listado como IP.",
- "SubmenuLocationsProvider": "Localizações & Fornecedores",
"WidgetProviders": "Fornecedores"
}
} \ No newline at end of file
diff --git a/plugins/Provider/lang/ro.json b/plugins/Provider/lang/ro.json
index b8d7812650..1f33330eb1 100644
--- a/plugins/Provider/lang/ro.json
+++ b/plugins/Provider/lang/ro.json
@@ -3,7 +3,6 @@
"ColumnProvider": "Operator",
"PluginDescription": "Rapoarte ale Furnizorului de vizitatori.",
"ProviderReportDocumentation": "Acest raport arată care furnizorii de servicii de Internet vizitatorii dvs. au folosit pentru a accesa site-ul. Puteți face clic pe un nume de furnizor pentru mai multe detalii. %s Daca Piwik nu poate determina furnizor un vizitator, acesta este listat ca IP.",
- "SubmenuLocationsProvider": "Locație și operatori",
"WidgetProviders": "Provideri"
}
} \ No newline at end of file
diff --git a/plugins/Provider/lang/ru.json b/plugins/Provider/lang/ru.json
index 02ed392a23..4008abd63c 100644
--- a/plugins/Provider/lang/ru.json
+++ b/plugins/Provider/lang/ru.json
@@ -3,7 +3,6 @@
"ColumnProvider": "Провайдер",
"PluginDescription": "Отображает провайдеры посетителей.",
"ProviderReportDocumentation": "Этот отчет показывает, какие интернет-провайдеры у посетителей вашего сайта. Вы можете кликнуть на имя провайдера, чтобы посмотреть детали. %s Если Piwik не может определить провайдера, отображается просто IP.",
- "SubmenuLocationsProvider": "Локации и провайдеры",
"WidgetProviders": "Провайдеры"
}
} \ No newline at end of file
diff --git a/plugins/Provider/lang/sk.json b/plugins/Provider/lang/sk.json
index a5d817600b..785fececee 100644
--- a/plugins/Provider/lang/sk.json
+++ b/plugins/Provider/lang/sk.json
@@ -2,7 +2,6 @@
"Provider": {
"ColumnProvider": "Poskytovateľ",
"PluginDescription": "Report cez ktorého poskytovateľa pripojenia prišli návštevníci na web stránku.",
- "SubmenuLocationsProvider": "Umiestnenie & poskytovateľ",
"WidgetProviders": "Poskytovatelia"
}
} \ No newline at end of file
diff --git a/plugins/Provider/lang/sl.json b/plugins/Provider/lang/sl.json
index 9fa58d1d4a..aecafe7656 100644
--- a/plugins/Provider/lang/sl.json
+++ b/plugins/Provider/lang/sl.json
@@ -2,7 +2,6 @@
"Provider": {
"ColumnProvider": "Ponudnik",
"ProviderReportFooter": "Neznan ponudnik pomeni, da IP številke ni bilo mogoče povezati s ponudnikom.",
- "SubmenuLocationsProvider": "Lokacije & Ponudniki",
"WidgetProviders": "Ponudniki"
}
} \ No newline at end of file
diff --git a/plugins/Provider/lang/sq.json b/plugins/Provider/lang/sq.json
index b710b409ef..2172f02a67 100644
--- a/plugins/Provider/lang/sq.json
+++ b/plugins/Provider/lang/sq.json
@@ -3,7 +3,6 @@
"ColumnProvider": "Mundësues",
"PluginDescription": "Raporton Mundësuesin e vizitorëve.",
"ProviderReportDocumentation": "Ky raport ju tregon cilët Mundësuesa Shërbimi Internet kanë përdorur vizitorët tuaj për të hyrë te site-i web. Për më tepër hollësi mund të klikoni mbi emrin e një mundësuesi. %s Nëse Piwik nuk arrin ta përcaktojë mundësuesin për një vizitor, e tregon thjesht si IP.",
- "SubmenuLocationsProvider": "Vende & Mundësuesa",
"WidgetProviders": "Mundësuesa"
}
} \ No newline at end of file
diff --git a/plugins/Provider/lang/sr.json b/plugins/Provider/lang/sr.json
index 4769ee4f59..0b3dd4893a 100644
--- a/plugins/Provider/lang/sr.json
+++ b/plugins/Provider/lang/sr.json
@@ -3,7 +3,6 @@
"ColumnProvider": "Provajder",
"PluginDescription": "Izveštaj o provajderima",
"ProviderReportDocumentation": "Ovaj izveštaj prikazuje koje Internet provajdere koriste vaši posetioci kako bi pristupili sajtu. Možete kliknuti na naziv provajdera kako biste videli više detalja. %s Ako Piwik ne može da odredi koji provajder je u pitanju, onda prikazuje IP.",
- "SubmenuLocationsProvider": "Lokacije i provajderi",
"WidgetProviders": "Provajderi"
}
} \ No newline at end of file
diff --git a/plugins/Provider/lang/sv.json b/plugins/Provider/lang/sv.json
index b07e603efb..ef80a50220 100644
--- a/plugins/Provider/lang/sv.json
+++ b/plugins/Provider/lang/sv.json
@@ -3,7 +3,6 @@
"ColumnProvider": "Internetleverantör",
"PluginDescription": "Rapporterar Internetleverantören som besökaren använder.",
"ProviderReportDocumentation": "Denna rapport visar vilka Internetleverantörer dina besökare använde för att få åtkomst till webbplatsen. Du kan klicka på en leverantörs namn för mer information. %s Om Piwik inte kan avgöra en besökares leverantör, så listas den som IP.",
- "SubmenuLocationsProvider": "Ursprung och operatör",
"WidgetProviders": "Internetleverantör"
}
} \ No newline at end of file
diff --git a/plugins/Provider/lang/th.json b/plugins/Provider/lang/th.json
index cd71ded0ba..2b1b52c53d 100644
--- a/plugins/Provider/lang/th.json
+++ b/plugins/Provider/lang/th.json
@@ -2,7 +2,6 @@
"Provider": {
"ColumnProvider": "ผู้ให้บริการ",
"PluginDescription": "รายงานผู้ให้บริการของผู้เข้าชม",
- "SubmenuLocationsProvider": "ตำแหน่งที่อยู่และผู้ให้บริการ",
"WidgetProviders": "ผู้ให้บริการ"
}
} \ No newline at end of file
diff --git a/plugins/Provider/lang/tl.json b/plugins/Provider/lang/tl.json
index 561e248f46..151c759268 100644
--- a/plugins/Provider/lang/tl.json
+++ b/plugins/Provider/lang/tl.json
@@ -4,7 +4,6 @@
"PluginDescription": "Mga Ulat ng provider ng mga bisita.",
"ProviderReportDocumentation": "Ang ulat na itoy ang nagpapakita kung anong Internet Server Providers ang gamit ng iyung bisita upang ma-access ang website. Maari mong e-click ang pangalan ng provider para sa karagdagang detalye. %s kung ang Piwik ay hindi matukoy ang provider ng bisita. ito ay nakalista bilang IP.",
"ProviderReportFooter": "Ang hindi kilalang provider ay hindi makikita ang IP address.",
- "SubmenuLocationsProvider": "Mga Lokasyon at Provider",
"WidgetProviders": "Mga Tagapagtustos"
}
} \ No newline at end of file
diff --git a/plugins/Provider/lang/tr.json b/plugins/Provider/lang/tr.json
index 7526ee9471..644d760ddd 100644
--- a/plugins/Provider/lang/tr.json
+++ b/plugins/Provider/lang/tr.json
@@ -2,7 +2,6 @@
"Provider": {
"ColumnProvider": "Sağlayıcı",
"PluginDescription": "Ziyaretciden Sağlayıcının Rapoarları",
- "SubmenuLocationsProvider": "Konumlar & Sağlayıcı",
"WidgetProviders": "Sağlayıcılar"
}
} \ No newline at end of file
diff --git a/plugins/Provider/lang/uk.json b/plugins/Provider/lang/uk.json
index 00717ecf37..b719aa329f 100644
--- a/plugins/Provider/lang/uk.json
+++ b/plugins/Provider/lang/uk.json
@@ -2,7 +2,6 @@
"Provider": {
"ColumnProvider": "Провайдер",
"PluginDescription": "Звітує про провейдера відвідувачів",
- "SubmenuLocationsProvider": "Місцезнаходження та провайдер",
"WidgetProviders": "Провайдери"
}
} \ No newline at end of file
diff --git a/plugins/Provider/lang/vi.json b/plugins/Provider/lang/vi.json
index a123aed9ae..42cc2af83c 100644
--- a/plugins/Provider/lang/vi.json
+++ b/plugins/Provider/lang/vi.json
@@ -3,7 +3,6 @@
"ColumnProvider": "Nhà cung cấp",
"PluginDescription": "Báo cáo nhà cung cấp của khách truy cập",
"ProviderReportDocumentation": "Báo cáo này cho thấy Nhà cung cấp dịch vụ Internet mà khách truy cập sử dụng để truy cập website. Bạn có thể ckick trên tên nhà cung cấp để biết thêm chi tiết. %s Nếu Piwik không thể xác định được nhà cung cấp của khách truy cập, nó liệt kê danh sách IP.",
- "SubmenuLocationsProvider": "Vị trí và nhà cung cấp",
"WidgetProviders": "Các nhà cung cấp"
}
} \ No newline at end of file
diff --git a/plugins/Provider/lang/zh-cn.json b/plugins/Provider/lang/zh-cn.json
index 71cd2924f9..9d97f44b70 100644
--- a/plugins/Provider/lang/zh-cn.json
+++ b/plugins/Provider/lang/zh-cn.json
@@ -3,7 +3,6 @@
"ColumnProvider": "网络服务商",
"PluginDescription": "访客的网络服务商的报表。",
"ProviderReportDocumentation": "本报表显示访客的网络服务商。点击服务商名字查看详细资料。%s 如果 Piwik 无法判断访客的网络服务商,就列出IP地址。",
- "SubmenuLocationsProvider": "地区和网络服务商",
"WidgetProviders": "网络服务商"
}
} \ No newline at end of file
diff --git a/plugins/Provider/lang/zh-tw.json b/plugins/Provider/lang/zh-tw.json
index 977a425aca..f37f4154a2 100644
--- a/plugins/Provider/lang/zh-tw.json
+++ b/plugins/Provider/lang/zh-tw.json
@@ -2,7 +2,6 @@
"Provider": {
"ColumnProvider": "供應商",
"PluginDescription": "訪客的網際網路服務供應商報表。",
- "SubmenuLocationsProvider": "訪客分佈 & 網際網路服務供應商",
"WidgetProviders": "網際網路服務供應商"
}
} \ No newline at end of file
diff --git a/plugins/QueuedTracking b/plugins/QueuedTracking
-Subproject 86a41d864432ad4734a8fa813dd1f78223cb7f1
+Subproject f1f7b460b500e5b7233ce9286bb8fd6e95e51a9
diff --git a/plugins/Resolution/API.php b/plugins/Resolution/API.php
index 8fc33efddb..a3c0215518 100644
--- a/plugins/Resolution/API.php
+++ b/plugins/Resolution/API.php
@@ -43,7 +43,8 @@ class API extends \Piwik\Plugin\API
public function getConfiguration($idSite, $period, $date, $segment = false)
{
$dataTable = $this->getDataTable(Archiver::CONFIGURATION_RECORD_NAME, $idSite, $period, $date, $segment);
- $dataTable->queueFilter('ColumnCallbackReplace', array('label', __NAMESPACE__ . '\getConfigurationLabel'));
+ // use GroupBy filter to avoid duplicate rows if old reports are displayed
+ $dataTable->queueFilter('GroupBy', array('label', __NAMESPACE__ . '\getConfigurationLabel'));
return $dataTable;
}
}
diff --git a/plugins/Resolution/Reports/Base.php b/plugins/Resolution/Reports/Base.php
index 4b0e9a5a42..259a164113 100644
--- a/plugins/Resolution/Reports/Base.php
+++ b/plugins/Resolution/Reports/Base.php
@@ -15,7 +15,7 @@ abstract class Base extends \Piwik\Plugin\Report
{
protected function init()
{
- $this->category = 'UserSettings_VisitorSettings';
+ $this->category = 'General_VisitorSettings';
}
protected function getBasicResolutionDisplayProperties(ViewDataTable $view)
diff --git a/plugins/Resolution/lang/cs.json b/plugins/Resolution/lang/cs.json
index 9173a432a8..18ff5e94ed 100644
--- a/plugins/Resolution/lang/cs.json
+++ b/plugins/Resolution/lang/cs.json
@@ -3,6 +3,7 @@
"ColumnConfiguration": "Konfigurace",
"ColumnResolution": "Rozlišení",
"Configurations": "Nastavení",
+ "PluginDescription": "Hlásí rozlišení návštěvníků",
"Resolutions": "Rozlišení",
"WidgetGlobalVisitors": "Hlavní nastavení návštěvníků",
"WidgetGlobalVisitorsDocumentation": "Toto hlášení zobrazuje nejčastější konfigurace, které vaši návštěvníci měli. Konfigurace je kombinace operačního systému, prohlížeče a rozlišení.",
diff --git a/plugins/ScheduledReports/javascripts/pdf.js b/plugins/ScheduledReports/javascripts/pdf.js
index c34de6f9ca..126f956adf 100644
--- a/plugins/ScheduledReports/javascripts/pdf.js
+++ b/plugins/ScheduledReports/javascripts/pdf.js
@@ -36,16 +36,17 @@ function formSetEditReport(idReport) {
$('#report_hour').val(report.hour);
$('[name=report_format].' + report.type + ' option[value=' + report.format + ']').prop('selected', 'selected');
- var selectorReportFormat = 'select[name=report_format].' + $('#report_type').val();
- $(selectorReportFormat).change( toggleDisplayOptionsByFormat );
+ $('select[name=report_type]').change( toggleDisplayOptionsByFormat );
+ $('select[name=report_format]').change( toggleDisplayOptionsByFormat );
// When CSV is selected, hide "Display options"
toggleDisplayOptionsByFormat();
function toggleDisplayOptionsByFormat() {
+ var selectorReportFormat = 'select[name=report_format].' + $('#report_type').val();
var format = $(selectorReportFormat).val();
var displayOptionsSelector = $('#row_report_display_options');
- if (format == 'csv') {
+ if (format == 'csv' || format == 'sms') {
displayOptionsSelector.hide();
} else {
displayOptionsSelector.show();
diff --git a/plugins/ScheduledReports/lang/ar.json b/plugins/ScheduledReports/lang/ar.json
index dd612352e5..6ca745ba36 100644
--- a/plugins/ScheduledReports/lang/ar.json
+++ b/plugins/ScheduledReports/lang/ar.json
@@ -10,7 +10,6 @@
"EmailReports": "التقارير البريدية",
"EmailSchedule": "جدولة البريد",
"FrontPage": "صفحة المقدمة",
- "ManageEmailReports": "إدارة تقارير البريد",
"MonthlyScheduleHelp": "الجدولة الشهرية: سيتم إرسال التقرير في الأول من كل شهر.",
"MustBeLoggedIn": "يجب أن تسجل الدخول لإنشاء وجدولة التقارير.",
"PiwikReports": "تقارير Piwik",
diff --git a/plugins/ScheduledReports/lang/be.json b/plugins/ScheduledReports/lang/be.json
index 4f920ab3f5..c8b66f3601 100644
--- a/plugins/ScheduledReports/lang/be.json
+++ b/plugins/ScheduledReports/lang/be.json
@@ -10,7 +10,6 @@
"EmailReports": "Справаздачы па Email",
"EmailSchedule": "Расклад электроннай пошты",
"FrontPage": "Галоўная старонка",
- "ManageEmailReports": "Упраўленне справаздачамі па электроннай пошце",
"MonthlyScheduleHelp": "Штомесячны расклад: справаздача будзе адпраўлена першым днём кожнага месяца.",
"MustBeLoggedIn": "Вы павінны ўвайсці ў сістэму для стварэння і планавання карыстацкіх справаздач.",
"Pagination": "Старонка %s з %s",
diff --git a/plugins/ScheduledReports/lang/bg.json b/plugins/ScheduledReports/lang/bg.json
index 85a63f3990..8496fda3de 100644
--- a/plugins/ScheduledReports/lang/bg.json
+++ b/plugins/ScheduledReports/lang/bg.json
@@ -17,7 +17,6 @@
"EmailSchedule": "Списък с е-пощи",
"EvolutionGraph": "Показване на графиките с история за най-високите %s стойности",
"FrontPage": "Заглавна страница",
- "ManageEmailReports": "Управление на Email докладите",
"MonthlyScheduleHelp": "Месечен график: докладът ще бъде изпратен на първия ден от всеки месец.",
"MustBeLoggedIn": "Трябва да сте влязъл, за да създавате и планирате персонализирани отчети.",
"NoRecipients": "Този доклад все още няма получатели",
diff --git a/plugins/ScheduledReports/lang/ca.json b/plugins/ScheduledReports/lang/ca.json
index 65472b7bcf..3dae4cc9d9 100644
--- a/plugins/ScheduledReports/lang/ca.json
+++ b/plugins/ScheduledReports/lang/ca.json
@@ -16,7 +16,6 @@
"EmailSchedule": "Programació per correu electrònic",
"EvolutionGraph": "Mostrar els valors històrics pels %s valors més representatius.",
"FrontPage": "Portada",
- "ManageEmailReports": "Administra els informes per correu electrònic.",
"MonthlyScheduleHelp": "Programació mensual: L'informe s'enviarà el primer día de cada més.",
"MustBeLoggedIn": "Heu d'estar identificat per crear i programar informes personalitzats",
"NoRecipients": "Aquest informe no té destinataris",
diff --git a/plugins/ScheduledReports/lang/cs.json b/plugins/ScheduledReports/lang/cs.json
index a05e8577a1..7c61c7d326 100644
--- a/plugins/ScheduledReports/lang/cs.json
+++ b/plugins/ScheduledReports/lang/cs.json
@@ -17,7 +17,6 @@
"EmailSchedule": "Plánování zasílání hlášení",
"EvolutionGraph": "Zobrazit historické grafy pro %s nejvyšších hodnot",
"FrontPage": "Hlavní strana",
- "ManageEmailReports": "Spravovat emailové hlášení",
"MonthlyScheduleHelp": "Měsíční plán: hlášení bude odesláno první den měsíce",
"MustBeLoggedIn": "Musíte být přihlášen, abyste mohl vytvářet vlastní hlášení.",
"NoRecipients": "Toto hlášení nemá příjemce",
diff --git a/plugins/ScheduledReports/lang/da.json b/plugins/ScheduledReports/lang/da.json
index 2c9443f8c6..9c9c5db6f0 100644
--- a/plugins/ScheduledReports/lang/da.json
+++ b/plugins/ScheduledReports/lang/da.json
@@ -17,7 +17,6 @@
"EmailSchedule": "E-mail tidsplan",
"EvolutionGraph": "Vis historiske grafer for top %s værdier",
"FrontPage": "Forside",
- "ManageEmailReports": "Administrer e-mail rapporter",
"MonthlyScheduleHelp": "Månedlig tidsplan: Rapporten vil blive sendt den første dag i hver måned.",
"MustBeLoggedIn": "Du skal være logget på for at oprette og planlægge brugerdefinerede rapporter.",
"NoRecipients": "Denne rapport har ingen modtagere",
diff --git a/plugins/ScheduledReports/lang/de.json b/plugins/ScheduledReports/lang/de.json
index b9a942d1ba..43347c5103 100644
--- a/plugins/ScheduledReports/lang/de.json
+++ b/plugins/ScheduledReports/lang/de.json
@@ -17,7 +17,6 @@
"EmailSchedule": "E-Mail-Zeitplan",
"EvolutionGraph": "Zeige historischen Graph für die Top %s Werte",
"FrontPage": "Titelseite",
- "ManageEmailReports": "E-Mail-Berichte verwalten",
"MonthlyScheduleHelp": "Monatlich: Bericht wird immer am ersten Tag des Monats verschickt.",
"MustBeLoggedIn": "Sie müssen angemeldet sein, um Berichte anlegen und versenden zu können.",
"NoRecipients": "Dieser Bericht hat keine Empfänger.",
diff --git a/plugins/ScheduledReports/lang/el.json b/plugins/ScheduledReports/lang/el.json
index 64fc8fd25b..3100e30182 100644
--- a/plugins/ScheduledReports/lang/el.json
+++ b/plugins/ScheduledReports/lang/el.json
@@ -17,7 +17,6 @@
"EmailSchedule": "Προγραμματισμός Ηλεκτρονικής Αλληλογραφίας",
"EvolutionGraph": "Προβολή Ιστορικών Διαγραμμάτων για τις κορυφαίες %s τιμές",
"FrontPage": "Εξώφυλλο",
- "ManageEmailReports": "Διαχείριση Αναφορών Αλληλογραφίας",
"MonthlyScheduleHelp": "Μηνιαίος προγραμματισμός: η αναφορά θα αποσταλεί την πρώτη μέρα κάθε μήνα.",
"MustBeLoggedIn": "Πρέπει να έχετε συνδεθεί για να δημιουργήσετε και να προγραμματίσετε προσαρμοσμένες αναφορές.",
"NoRecipients": "Αυτή η αναφορά δεν έχει παραλήπτες",
diff --git a/plugins/ScheduledReports/lang/es.json b/plugins/ScheduledReports/lang/es.json
index 0f7dbbbfa3..1f3783e377 100644
--- a/plugins/ScheduledReports/lang/es.json
+++ b/plugins/ScheduledReports/lang/es.json
@@ -17,7 +17,6 @@
"EmailSchedule": "Programe el envío del Email",
"EvolutionGraph": "Mostrar Gráficas Históricas para los %s valores más altos",
"FrontPage": "Página Incial",
- "ManageEmailReports": "Administrar los Reportes por Email",
"MonthlyScheduleHelp": "Envío mensual: los reportes serán enviados el primer día de cada mes.",
"MustBeLoggedIn": "Usted debe haber iniciado sesión para crear y programar reportes personalizados.",
"NoRecipients": "Este reporte no tiene destinatarios",
diff --git a/plugins/ScheduledReports/lang/et.json b/plugins/ScheduledReports/lang/et.json
index 71355349bb..cfbd4c26aa 100644
--- a/plugins/ScheduledReports/lang/et.json
+++ b/plugins/ScheduledReports/lang/et.json
@@ -13,7 +13,6 @@
"EmailReports": "E-posti raportid",
"EmailSchedule": "E-posti ajastamine",
"FrontPage": "Esileht",
- "ManageEmailReports": "Halda e-posti raporteid",
"OClock": "kell",
"Pagination": "Lehekülg %s \/ %s",
"PiwikReports": "Piwiku raportid",
diff --git a/plugins/ScheduledReports/lang/fa.json b/plugins/ScheduledReports/lang/fa.json
index 15ab6652be..2b0639a91c 100644
--- a/plugins/ScheduledReports/lang/fa.json
+++ b/plugins/ScheduledReports/lang/fa.json
@@ -17,7 +17,6 @@
"EmailSchedule": "زمانبندی ایمیل",
"EvolutionGraph": "نمایش نمودارهای گرافیکی برای مقدار %s بالا",
"FrontPage": "صفحه اول",
- "ManageEmailReports": "مدیریت گزارش از راه ایمیل",
"MonthlyScheduleHelp": "زمانبندی ماهانه: گزارش در اولین روز هر ماه فرستاده خواهد شد.",
"MustBeLoggedIn": "برای ساخت و زمانبندی گزارشات دلخواه باید ابتدا وارد شوید",
"NoRecipients": "این گزارش هیچ دریافت کننده ای ندارد.",
diff --git a/plugins/ScheduledReports/lang/fi.json b/plugins/ScheduledReports/lang/fi.json
index f0cc16e6c7..243c714d26 100644
--- a/plugins/ScheduledReports/lang/fi.json
+++ b/plugins/ScheduledReports/lang/fi.json
@@ -17,7 +17,6 @@
"EmailSchedule": "Sähköpostiaikataulu",
"EvolutionGraph": "Näytä historiakuvaajat top-%s arvolle",
"FrontPage": "Etusivu",
- "ManageEmailReports": "Hallitse sähköpostiraportteja",
"MonthlyScheduleHelp": "Kuukausittainen aikataulu: raportti lähetetään kuun ensimmäisenä päivänä.",
"MustBeLoggedIn": "Sinun täytyy olla kirjautuneena sisään ennen kustomoitujen raporttien luomista ja ajastamista.",
"NoRecipients": "Tällä raportilla ei ole vastaanottajia",
diff --git a/plugins/ScheduledReports/lang/fr.json b/plugins/ScheduledReports/lang/fr.json
index 4f02025ed8..98a8c2602c 100644
--- a/plugins/ScheduledReports/lang/fr.json
+++ b/plugins/ScheduledReports/lang/fr.json
@@ -17,7 +17,6 @@
"EmailSchedule": "Planification courriel",
"EvolutionGraph": "Afficher les graphiques historiques pour les plus hautes %s valeurs",
"FrontPage": "Première page",
- "ManageEmailReports": "Gérer les rapports par e-mail",
"MonthlyScheduleHelp": "Planification mensuelle : le rapport sera envoyé le premier jour de chaque mois.",
"MustBeLoggedIn": "Vous devez être connecté pour créer et planifier des rapports personnalisés.",
"NoRecipients": "Ce rapport n'a aucun destinataire",
diff --git a/plugins/ScheduledReports/lang/hi.json b/plugins/ScheduledReports/lang/hi.json
index 7eaff3b79d..0ab9d5f667 100644
--- a/plugins/ScheduledReports/lang/hi.json
+++ b/plugins/ScheduledReports/lang/hi.json
@@ -17,7 +17,6 @@
"EmailSchedule": "ईमेल कार्यक्रम तय करे",
"EvolutionGraph": "शीर्ष %sमूल्यों के लिए ऐतिहासिक रेखाचित्र दिखाएँ",
"FrontPage": "मुखपृष्ठ",
- "ManageEmailReports": "ईमेल प्रतिवेदन प्रबंधन",
"MonthlyScheduleHelp": "मासिक अनुसूची: रिपोर्ट प्रत्येक माह के पहले दिन भेजी जाएगी.",
"MustBeLoggedIn": "तुम्हें विशिष्ट प्रतिवेदन बनाने और अनुसूची करने के लिए लॉग इन होना चाहिए.",
"NoRecipients": "इस रिपोर्ट में कोई प्राप्तकर्ता नहीं हैं",
diff --git a/plugins/ScheduledReports/lang/id.json b/plugins/ScheduledReports/lang/id.json
index 4849633914..5f207a471a 100644
--- a/plugins/ScheduledReports/lang/id.json
+++ b/plugins/ScheduledReports/lang/id.json
@@ -17,7 +17,6 @@
"EmailSchedule": "Jadwal Surel",
"EvolutionGraph": "Tampilkan Grapik Riwayat untuk nilai %s teratas",
"FrontPage": "Halaman Depan",
- "ManageEmailReports": "Pengatur Laporan Surel",
"MonthlyScheduleHelp": "Laporan bulanan: laporan akan dikirim satiap hari pertama tiap bulan.",
"MustBeLoggedIn": "Anda harus masuk-log untuk membuat dan mengatur jadwal laporan.",
"NoRecipients": "Laporan ini tidak memiliki penerima",
diff --git a/plugins/ScheduledReports/lang/it.json b/plugins/ScheduledReports/lang/it.json
index f26669d8ca..c43d2b83bf 100644
--- a/plugins/ScheduledReports/lang/it.json
+++ b/plugins/ScheduledReports/lang/it.json
@@ -17,7 +17,6 @@
"EmailSchedule": "Pianifica Email",
"EvolutionGraph": "Mostra Grafici Storici per i %s valori top",
"FrontPage": "Prima pagina",
- "ManageEmailReports": "Gestisci Report Email",
"MonthlyScheduleHelp": "Pianificazione mensile: il report verrà inviato il primo giorno di ogni mese.",
"MustBeLoggedIn": "Devi avere effettuato l'accesso per creare e pianificare i report personalizzati.",
"NoRecipients": "Questo report non ha destinatari",
diff --git a/plugins/ScheduledReports/lang/ja.json b/plugins/ScheduledReports/lang/ja.json
index 6ff59005fd..1298149d96 100644
--- a/plugins/ScheduledReports/lang/ja.json
+++ b/plugins/ScheduledReports/lang/ja.json
@@ -17,7 +17,6 @@
"EmailSchedule": "メールのスケジュール",
"EvolutionGraph": "トップの %s 値の履歴グラフを表示",
"FrontPage": "表紙",
- "ManageEmailReports": "メールリポートの管理",
"MonthlyScheduleHelp": "月間スケジュール: リポートは毎月1日に送信されます。",
"MustBeLoggedIn": "カスタムリポートの作成とスケジュールにはログインする必要があります。",
"NoRecipients": "このレポートは、受取人がいません",
diff --git a/plugins/ScheduledReports/lang/ko.json b/plugins/ScheduledReports/lang/ko.json
index b59c39c1b6..1a81450362 100644
--- a/plugins/ScheduledReports/lang/ko.json
+++ b/plugins/ScheduledReports/lang/ko.json
@@ -16,7 +16,6 @@
"EmailSchedule": "이메일 예약",
"EvolutionGraph": "%s의 값에 대한 이력 그래프 표시",
"FrontPage": "시작 페이지",
- "ManageEmailReports": "이메일 보고서 관리",
"MonthlyScheduleHelp": "월간 스케줄: 보고서는 매월 1일에 발송됩니다.",
"MustBeLoggedIn": "보고서 작성 및 일정을 사용자정의하려면 로그인해야합니다.",
"NoRecipients": "이 보고서의 수신자가 없음",
diff --git a/plugins/ScheduledReports/lang/lt.json b/plugins/ScheduledReports/lang/lt.json
index d3a56495e8..5f6df46080 100644
--- a/plugins/ScheduledReports/lang/lt.json
+++ b/plugins/ScheduledReports/lang/lt.json
@@ -7,7 +7,6 @@
"EmailReports": "Ataskaitos el. paštu",
"EmailSchedule": "Siuntimo tvarkaraštis",
"FrontPage": "Pirminis puslapis",
- "ManageEmailReports": "Administruoti ataskaitas",
"MonthlyScheduleHelp": "Kas mėnesį: ataskaita bus išsiųsta kiekvieno mėnesio pirmąją dieną.",
"Pagination": "Puslapis %s iš %s",
"PiwikReports": "Piwik ataskaitos",
diff --git a/plugins/ScheduledReports/lang/nb.json b/plugins/ScheduledReports/lang/nb.json
index 22e703648c..4a524c5031 100644
--- a/plugins/ScheduledReports/lang/nb.json
+++ b/plugins/ScheduledReports/lang/nb.json
@@ -7,7 +7,6 @@
"EmailReports": "E-postrapporter",
"EmailSchedule": "E-postplan",
"FrontPage": "Forside",
- "ManageEmailReports": "Administrer e-postrapporter",
"MonthlyScheduleHelp": "Månedsplan: Rapportene blir sendt første dag i hver måned.",
"NoRecipients": "Denne rapporten har ingen mottakere",
"Pagination": "Side %s av %s",
diff --git a/plugins/ScheduledReports/lang/nl.json b/plugins/ScheduledReports/lang/nl.json
index 110898e58b..8689867aad 100644
--- a/plugins/ScheduledReports/lang/nl.json
+++ b/plugins/ScheduledReports/lang/nl.json
@@ -17,7 +17,6 @@
"EmailSchedule": "E-mail tijdsschema",
"EvolutionGraph": "Toon historische grafieken voor de top %s waarden",
"FrontPage": "Voorpagina",
- "ManageEmailReports": "Beheer de e-mail rapporten",
"MonthlyScheduleHelp": "Maandelijks versturen: Rapport zal worden verzonden elke eerste dag van de maand.",
"MustBeLoggedIn": "U moet ingelogd zijn om aangepaste rapporten te maken en in te plannen.",
"NoRecipients": "Dit rapport heeft geen ontvangers",
diff --git a/plugins/ScheduledReports/lang/pl.json b/plugins/ScheduledReports/lang/pl.json
index 4639f0b616..85d6b37322 100644
--- a/plugins/ScheduledReports/lang/pl.json
+++ b/plugins/ScheduledReports/lang/pl.json
@@ -13,7 +13,6 @@
"EmailReports": "Raporty pocztowe",
"EmailSchedule": "Kalendarium poczty e-mail",
"FrontPage": "Strona główna",
- "ManageEmailReports": "Administracja raportami pocztowymi",
"MonthlyScheduleHelp": "Planowanie miesięczne: raport będzie wysyłany pierwszego dnia każdego miesiąca.",
"PiwikReports": "Raporty Piwik",
"PleaseFindAttachedFile": "Prosimy odszukać w pliku załącznika twój %1$s raport dla %2$s.",
diff --git a/plugins/ScheduledReports/lang/pt-br.json b/plugins/ScheduledReports/lang/pt-br.json
index 9010596b78..a2057c8ef9 100644
--- a/plugins/ScheduledReports/lang/pt-br.json
+++ b/plugins/ScheduledReports/lang/pt-br.json
@@ -17,7 +17,6 @@
"EmailSchedule": "Agendamento de e-mail",
"EvolutionGraph": "Mostrar gráficos históricos para os principais %s valores",
"FrontPage": "Primeira página",
- "ManageEmailReports": "Gerenciar relatórios de e-mail",
"MonthlyScheduleHelp": "Programação mensal: relatório será enviado no primeiro dia de cada mês.",
"MustBeLoggedIn": "Você precisa estar logado para criar e agendar relatórios personalizados.",
"NoRecipients": "Este relatório não tem destinatários",
diff --git a/plugins/ScheduledReports/lang/pt.json b/plugins/ScheduledReports/lang/pt.json
index b91b390ec4..42a9fd7f95 100644
--- a/plugins/ScheduledReports/lang/pt.json
+++ b/plugins/ScheduledReports/lang/pt.json
@@ -14,7 +14,6 @@
"EmailReports": "Relatórios Email",
"EmailSchedule": "Agenda de Email",
"FrontPage": "Primeira Página",
- "ManageEmailReports": "Gerir relatórios de email",
"MonthlyScheduleHelp": "Agenda mensal: o relatório será enviado no primeiro dia de cada mês.",
"MustBeLoggedIn": "Deve estar autenticado para criar e agendar relatórios personalizados.",
"Pagination": "Página %s de %s",
diff --git a/plugins/ScheduledReports/lang/ro.json b/plugins/ScheduledReports/lang/ro.json
index d574374163..3b0822b5cb 100644
--- a/plugins/ScheduledReports/lang/ro.json
+++ b/plugins/ScheduledReports/lang/ro.json
@@ -17,7 +17,6 @@
"EmailSchedule": "E-mail Program",
"EvolutionGraph": "Arata Graficele Istorice pentru valorile top %s",
"FrontPage": "Pagina titlu",
- "ManageEmailReports": "Gestionare e-mail Rapoarte",
"MonthlyScheduleHelp": "Program lunar: Raportul va fi trimis în prima zi a fiecărei luni.",
"MustBeLoggedIn": "Trebuie să fii logat pentru a crea și programa rapoarte personalizate.",
"NoRecipients": "Acest raport nu are destinatari",
diff --git a/plugins/ScheduledReports/lang/ru.json b/plugins/ScheduledReports/lang/ru.json
index 82dde7dcd3..507d4bda0d 100644
--- a/plugins/ScheduledReports/lang/ru.json
+++ b/plugins/ScheduledReports/lang/ru.json
@@ -16,7 +16,6 @@
"EmailSchedule": "Расписание e-mail рассылки",
"EvolutionGraph": "Показать историю изменения графика для первых %s значений.",
"FrontPage": "Первая страница",
- "ManageEmailReports": "Управление Email-отчетами",
"MonthlyScheduleHelp": "Ежемесячное расписание: отчеты будут рассылаться каждый первый день месяца.",
"MustBeLoggedIn": "Вы должны быть авторизованы для создания и редактирования расписания отчетов.",
"NoRecipients": "У этого отчета нет получателей",
diff --git a/plugins/ScheduledReports/lang/sl.json b/plugins/ScheduledReports/lang/sl.json
index 1f68dfb058..6867ebf308 100644
--- a/plugins/ScheduledReports/lang/sl.json
+++ b/plugins/ScheduledReports/lang/sl.json
@@ -8,7 +8,6 @@
"EmailReports": "Email Poročila",
"EmailSchedule": "Urnik Emailov",
"FrontPage": "Prva Stran",
- "ManageEmailReports": "Urejaj Email Poročila",
"MonthlyScheduleHelp": "Mesečno poročilo: poročilo bo poslano vsak prvi dan v mesecu.",
"Pagination": "Stran %s od %s",
"PiwikReports": "Piwik Poročila",
diff --git a/plugins/ScheduledReports/lang/sq.json b/plugins/ScheduledReports/lang/sq.json
index af1d5e09f0..d0572d2881 100644
--- a/plugins/ScheduledReports/lang/sq.json
+++ b/plugins/ScheduledReports/lang/sq.json
@@ -14,7 +14,6 @@
"EmailReports": "Dërgo Raportet Me Email",
"EmailSchedule": "Plan Dërgimi me Email",
"FrontPage": "Faqja Ballore",
- "ManageEmailReports": "Administroni Raporte Email",
"MonthlyScheduleHelp": "Planifikim mujor: raporti do të dërgohet ditën e parë të çdo muaji.",
"MustBeLoggedIn": "Duhet të jeni i futur që të krijoni dhe të planifikoni raporte të personalizuar.",
"Pagination": "Faqja %s nga %s",
diff --git a/plugins/ScheduledReports/lang/sr.json b/plugins/ScheduledReports/lang/sr.json
index e24b0f6640..03d6f6048f 100644
--- a/plugins/ScheduledReports/lang/sr.json
+++ b/plugins/ScheduledReports/lang/sr.json
@@ -17,7 +17,6 @@
"EmailSchedule": "Zakaži slanje",
"EvolutionGraph": "Prikaži istorijske grafikone za prvih %s vrednosti",
"FrontPage": "Naslovna strana",
- "ManageEmailReports": "Upravljanje izveštajima",
"MonthlyScheduleHelp": "Mesečno zakazivanje: izveštaj će biti poslat svakog prvog u mesecu.",
"MustBeLoggedIn": "Morate biti prijavljeni na sistem kako biste kreirali i zakazivali izveštaje.",
"NoRecipients": "Nije definisan primaoc",
diff --git a/plugins/ScheduledReports/lang/sv.json b/plugins/ScheduledReports/lang/sv.json
index 7101c7f4c0..39cb85be69 100644
--- a/plugins/ScheduledReports/lang/sv.json
+++ b/plugins/ScheduledReports/lang/sv.json
@@ -17,7 +17,6 @@
"EmailSchedule": "Schemalagd e-post",
"EvolutionGraph": "Visa historiska grafer för dom topp %s värdena",
"FrontPage": "Startsida",
- "ManageEmailReports": "Hantera e-postrapporter",
"MonthlyScheduleHelp": "Månatligt schema: Rapporten kommer att skickas ut den första dagen i varje månad.",
"MustBeLoggedIn": "Du måste vara inloggad för att skapa och schemalägga anpassade rapporter.",
"NoRecipients": "Rapporten har ingen mottagare",
diff --git a/plugins/ScheduledReports/lang/ta.json b/plugins/ScheduledReports/lang/ta.json
index 956f74dad9..025dbfcad4 100644
--- a/plugins/ScheduledReports/lang/ta.json
+++ b/plugins/ScheduledReports/lang/ta.json
@@ -3,7 +3,6 @@
"CreateReport": "அறிக்கையை உருவாக்கு",
"EmailReports": "மின்னஞ்சல் அறிக்கைகள்",
"EmailSchedule": "மின்னஞ்சல் பட்டி",
- "FrontPage": "முன் பக்கம்",
- "ManageEmailReports": "மின்னஞ்சல் அறிக்கைகளை மேலாண் செய்"
+ "FrontPage": "முன் பக்கம்"
}
} \ No newline at end of file
diff --git a/plugins/ScheduledReports/lang/tl.json b/plugins/ScheduledReports/lang/tl.json
index ffd25ed8c8..1ef12ad137 100644
--- a/plugins/ScheduledReports/lang/tl.json
+++ b/plugins/ScheduledReports/lang/tl.json
@@ -17,7 +17,6 @@
"EmailSchedule": "Iskedyul ng email",
"EvolutionGraph": "Ipakita ang mga Makasaysayang Graph para sa nangungunang %s halaga",
"FrontPage": "Pangunahing Pahina",
- "ManageEmailReports": "Pamahalaan ang mga Ulat sa Email",
"MonthlyScheduleHelp": "Buwanang iskedyul: ang ulat ay ipapadala sa unang araw ng bawat buwan.",
"MustBeLoggedIn": "Kailangang naka-log in upang gumawa at mag-iskedyul ng mga pasadyang ulat",
"NoRecipients": "Wala pang makakatanggap sa ulat na ito",
diff --git a/plugins/ScheduledReports/lang/vi.json b/plugins/ScheduledReports/lang/vi.json
index 7c516be7f3..f823b6ed6a 100644
--- a/plugins/ScheduledReports/lang/vi.json
+++ b/plugins/ScheduledReports/lang/vi.json
@@ -17,7 +17,6 @@
"EmailSchedule": "Lịch email",
"EvolutionGraph": "Hiển thị đồ thị lịch sử cho các giá trị %s đứng đầu",
"FrontPage": "Trang đầu",
- "ManageEmailReports": "Quản lý các báo cáo email",
"MonthlyScheduleHelp": "Lịch trình hàng tháng: báo cáo sẽ được gửi vào ngày đầu tiên của mỗi tháng.",
"MustBeLoggedIn": "Bạn phải đăng nhập để tạo và lập lịch các báo cáo tùy chỉnh.",
"NoRecipients": "Báo cáo này không có người nhận",
diff --git a/plugins/ScheduledReports/lang/zh-cn.json b/plugins/ScheduledReports/lang/zh-cn.json
index 15fcd666d3..4fbd319d04 100644
--- a/plugins/ScheduledReports/lang/zh-cn.json
+++ b/plugins/ScheduledReports/lang/zh-cn.json
@@ -17,7 +17,6 @@
"EmailSchedule": "邮件计划",
"EvolutionGraph": "显示前 %s 个的历史图形",
"FrontPage": "首页",
- "ManageEmailReports": "管理报表邮件",
"MonthlyScheduleHelp": "每月计划: 报表将会在每月的第一天寄出。",
"MustBeLoggedIn": "登录后才能创建和自定义报表。",
"NoRecipients": "这个报表没有收件人",
diff --git a/plugins/ScheduledReports/tests/Integration/ApiTest.php b/plugins/ScheduledReports/tests/Integration/ApiTest.php
index af8450308a..080e3b3be1 100644
--- a/plugins/ScheduledReports/tests/Integration/ApiTest.php
+++ b/plugins/ScheduledReports/tests/Integration/ApiTest.php
@@ -406,8 +406,8 @@ class ApiTest extends IntegrationTestCase
public function getGetReportSubjectAndReportTitleTestCases()
{
return array(
- array('<Piwik.org>', '<Piwik.org>', '<Piwik.org>', array('UserSettings_getBrowserType')),
- array('Piwik.org', 'Piwik.org', 'Piwik.org', array('MultiSites_getAll', 'UserSettings_getBrowserType')),
+ array('<Piwik.org>', '<Piwik.org>', '<Piwik.org>', array('DevicesDetection_getBrowserEngines')),
+ array('Piwik.org', 'Piwik.org', 'Piwik.org', array('MultiSites_getAll', 'DevicesDetection_getBrowserEngines')),
array('General_MultiSitesSummary', 'General_MultiSitesSummary', 'Piwik.org', array('MultiSites_getAll')),
);
}
diff --git a/plugins/SecurityInfo b/plugins/SecurityInfo
-Subproject fe012ca497f8cc433d4d3f9547dfdc1f5c2f83a
+Subproject d0717d1e8becaf2dfd1ff05cc73105083676f7d
diff --git a/plugins/SitesManager/lang/pl.json b/plugins/SitesManager/lang/pl.json
index 6e66aacd4d..f291f701d9 100644
--- a/plugins/SitesManager/lang/pl.json
+++ b/plugins/SitesManager/lang/pl.json
@@ -28,6 +28,7 @@
"ListOfQueryParametersToBeExcludedOnAllWebsites": "Parametry dotyczące listy zapytań z adresami URL przedstawione poniżej zostaną wykluczone ze statystyk na wszystkich stronach.",
"ListOfQueryParametersToExclude": "Wprowadź listę z parametrami zapytań URL, po jednym w linii, by móc wykluczyć je z raportów o adresach URL stron.",
"MainDescription": "Twoje raporty z analityką statystyczną stron wymagają posiadania serwisu internetowego! Dodaj, zaktualizuj, zmień serwis internetowy, i wyświetl kod JavaScript do umieszczenia na stronach.",
+ "NotAnEcommerceSite": "Strona nie jest typu Ecommerce",
"NotFound": "Nie znaleziono stron dla",
"NoWebsites": "Nie posiadasz żadnej strony którą możesz zarządzać.",
"OnlyOneSiteAtTime": "W danym momencie możesz edytować tylko jedną ze stron. Zapisz lub zrezygnuj z wprowadzonych teraz modyfikacji dla strony %s.",
diff --git a/plugins/TasksTimetable b/plugins/TasksTimetable
-Subproject 5ed63f04d1faa1899419884995acb2c0d6d1c39
+Subproject e61b78be9754ac6dae24eb225dfe4f4c0172ee1
diff --git a/plugins/TestRunner/Commands/TestsRunOnAws.php b/plugins/TestRunner/Commands/TestsRunOnAws.php
index 495ecfa461..8ff81fa0a5 100644
--- a/plugins/TestRunner/Commands/TestsRunOnAws.php
+++ b/plugins/TestRunner/Commands/TestsRunOnAws.php
@@ -155,7 +155,7 @@ This feature is still beta and there might be problems with pictures and/or bina
if (in_array($testSuite, array('system', 'all'))) {
$message = "<info>Tests finished. You can browse processed files and download artifacts at </info><comment>http://$host/tests/PHPUnit/System/processed/</comment>";
} elseif ('ui' === $testSuite) {
- $message = "<info>Tests finished. You can browse processed screenshots at </info><comment>http://$host/tests/PHPUnit/UI/screenshot-diffs/diffviewer.html</comment>";
+ $message = "<info>Tests finished. You can browse processed screenshots at </info><comment>http://$host/tests/UI/screenshot-diffs/diffviewer.html</comment>";
} else {
$message = "<info>Tests finished</info>";
}
diff --git a/plugins/TestRunner/Commands/TestsRunUI.php b/plugins/TestRunner/Commands/TestsRunUI.php
index 453b777570..c8d31d891c 100644
--- a/plugins/TestRunner/Commands/TestsRunUI.php
+++ b/plugins/TestRunner/Commands/TestsRunUI.php
@@ -33,6 +33,12 @@ class TestsRunUI extends ConsoleCommand
protected function execute(InputInterface $input, OutputInterface $output)
{
+ if (!file_exists(PIWIK_INCLUDE_PATH . '/tests/UI/expected-ui-screenshots/README.md')) {
+ // REMOVE THIS CHECK AFTER 1st April 2015
+ $output->writeln('<error>"tests/UI/expected-ui-screenshots" does not exist. You might have to run "git submodule update --init"</error>');
+ return;
+ }
+
$specs = $input->getArgument('specs');
$persistFixtureData = $input->getOption("persist-fixture-data");
$keepSymlinks = $input->getOption('keep-symlinks');
diff --git a/plugins/TestRunner/Commands/TestsSetupFixture.php b/plugins/TestRunner/Commands/TestsSetupFixture.php
index cda1a5c585..f0195396b9 100644
--- a/plugins/TestRunner/Commands/TestsSetupFixture.php
+++ b/plugins/TestRunner/Commands/TestsSetupFixture.php
@@ -111,22 +111,23 @@ class TestsSetupFixture extends ConsoleCommand
}
}
+ if ($input->getOption('set-phantomjs-symlinks')) {
+ $this->createSymbolicLinksForUITests();
+ }
+
$fixture = $this->createFixture($input, $allowSave = !empty($configDomainToSave));
$this->setupDatabaseOverrides($input, $fixture);
// perform setup and/or teardown
if ($input->getOption('teardown')) {
+ exit;
$fixture->getTestEnvironment()->save();
$fixture->performTearDown();
} else {
$fixture->performSetUp();
}
- if ($input->getOption('set-phantomjs-symlinks')) {
- $this->createSymbolicLinksForUITests();
- }
-
$this->writeSuccessMessage($output, array("Fixture successfully setup!"));
$sqlDumpPath = $input->getOption('sqldump');
@@ -238,7 +239,7 @@ class TestsSetupFixture extends ConsoleCommand
$fixturesToLoad = array(
'/tests/PHPUnit/Fixtures/*.php',
- '/tests/PHPUnit/UI/Fixtures/*.php',
+ '/tests/UI/Fixtures/*.php',
'/plugins/*/tests/Fixtures/*.php',
'/plugins/*/Test/Fixtures/*.php',
);
diff --git a/plugins/TestRunner/TravisYml/TravisYmlView.php b/plugins/TestRunner/TravisYml/TravisYmlView.php
index 71faf4408b..e923b29784 100644
--- a/plugins/TestRunner/TravisYml/TravisYmlView.php
+++ b/plugins/TestRunner/TravisYml/TravisYmlView.php
@@ -76,7 +76,7 @@ class TravisYmlView extends View
/**
* Sets the name of plugin the generated .travis.yml file is for.
*
- * @param string $pluginName ie, ExamplePlugin, UserSettings, etc.
+ * @param string $pluginName ie, ExamplePlugin, UserLanguage, etc.
*/
public function setPlugin($pluginName)
{
diff --git a/plugins/TestRunner/templates/travis.yml.twig b/plugins/TestRunner/templates/travis.yml.twig
index 5f8e97936d..0d2e53714e 100644
--- a/plugins/TestRunner/templates/travis.yml.twig
+++ b/plugins/TestRunner/templates/travis.yml.twig
@@ -151,12 +151,6 @@ before_script:
- mysql -e "SELECT @@sql_mode;"
# - mysql -e "SHOW GLOBAL VARIABLES;"
-{% if generationMode == 'core' %}
-
- # Start UI tests
- - ./tests/travis/initiate_ui_tests.sh
-{%- endif %}
-
# travis now complains about this failing 9 times out of 10, so removing it. hopefully the random failures it prevented won't come back
# - travis_retry composer self-update
diff --git a/plugins/Transitions/lang/pl.json b/plugins/Transitions/lang/pl.json
index fe46fd9685..07eb95002b 100644
--- a/plugins/Transitions/lang/pl.json
+++ b/plugins/Transitions/lang/pl.json
@@ -10,6 +10,7 @@
"LoopsInline": "%s odświeżeń stron",
"OutgoingTraffic": "Ruch wychodzący",
"ToFollowingSiteSearches": "Wyszukania Wewnętrzne",
- "ToFollowingSiteSearchesInline": "%s wewnętrzne wyszukiwania"
+ "ToFollowingSiteSearchesInline": "%s wewnętrzne wyszukiwania",
+ "XOutOfYVisits": "%s (z %s)"
}
} \ No newline at end of file
diff --git a/plugins/TreemapVisualization b/plugins/TreemapVisualization
-Subproject 64d23854136773c5d0fb1d98fa17e9ba6b36a75
+Subproject 0b1bf195bffd3d32db0783899349298b94afdf3
diff --git a/plugins/UserCountry/lang/pl.json b/plugins/UserCountry/lang/pl.json
index 826d1ac6bf..3ee40d3b98 100644
--- a/plugins/UserCountry/lang/pl.json
+++ b/plugins/UserCountry/lang/pl.json
@@ -289,12 +289,26 @@
"country_zm": "Zambia",
"country_zr": "Zair",
"country_zw": "Zimbabwe",
+ "CurrentLocationIntro": "Według tego dostawcy, twoją aktualną lokalizacją jest",
+ "DefaultLocationProviderDesc1": "Domyślny dostawca usług geolokacyjnych zgaduje państwo odwiedzającego na podstawie języka używanego w przeglądarce.",
"DistinctCountries": "%s wyróżniających się krajów",
"DownloadingDb": "Pobieranie %s",
"DownloadNewDatabasesEvery": "Zaktualizuj bazę danych co",
"FoundApacheModules": "Piwik znalazł następujące moduły Apache",
"FromDifferentCities": "różne miasta",
"GeoIPDatabases": "Baza danych GeoIP",
+ "GeoIPImplHasAccessTo": "Ta implementacja GeoIP ma dostęp do następujących typów baz danych",
+ "GeoIPIncorrectDatabaseFormat": "Twoja baza GeoIP ma niepoprawny format. Może być uszkodzona. Dopilnuj by używać wersji binarnej oraz spróbuj podmienić bazę na nową kopię\/wersję.",
+ "GeoIpLocationProviderDesc_Pecl2": "Ten dostawca nie podlega żadnym ograniczeniom w działaniu, dlatego polecamy jego używanie.",
+ "GeoIpLocationProviderDesc_Php2": "Jeżeli twoja strona ma bardzo dużo ruchu, ten dostawca usług lokacyjnych może okazać się za wolny. W takim wypadku zaleca się instalację %1$srozszerzenia PECL%2$s lub %3$smoduło serverowego%4$s.",
+ "GeoIpLocationProviderDesc_ServerBased2": "W przypadku importu plików logów lub wykonaniu innej operacji mogącej wymagać ustawienia adres IP, prosimy używać %1$simplementacji GeoIP PECL (rekomendowana)%2$s lub %3$simplementacji GeoIP PHP%4$s.",
+ "GeoIpLocationProviderDesc_ServerBasedAnonWarn": "NOTKA: Anonimizacja IP nie wywiera żadnego efektu gdy jest używana z tym dostawcą. Przed użyciem anonimizacji adresów IP, upewnij się, iż nie narusza ono żadnych praw do prywatności, który może podlegać.",
+ "GeoIpLocationProviderNotRecomnended": "Geolokacja działa, ale nie używasz rekomendowanego dostawcy.",
+ "GeoIPNoServerVars": "Piwik nie może znaleźć żadnych zmiennych %s GeoIP",
+ "GeoIPServerVarsFound": "Piwik wykrył następujące zmienne GeoIP %s",
+ "GeoIPUpdaterInstructions": "Wprowadź poniżej linki do twoich baz danych. Jeżeli bazy zostały zakupione od %3$sMaxMind%4$s, możesz znaleźć takowe linki %1$stutaj%2$s. W przypadku problemów z dostępem do plików, należy kontaktować się z %3$sMaxMind%4$s.",
+ "GeoIPUpdaterIntro": "Piwik zarządza aktualizacjami dla następujących baz GeoIP",
+ "GeoLiteCityLink": "W przypadku używania darmowej bazy GeoLite Miasta, użyj tego linka: %1$s%2$s%3$s",
"Geolocation": "Geolokalizacja",
"GeolocationPageDesc": "Na tej stronie można zmienić sposób wykrywania lokalizacji odwiedzających stosowany przez Piwik'a.",
"getCityDocumentation": "Raport ten pokazuje miasta, w których przebywali odwiedzający gdy whcodzili na stronę.",
@@ -322,6 +336,7 @@
"SetupAutomaticUpdatesOfGeoIP": "Ustaw automatyczne aktualizacje dla bazy danych GeoIP",
"SubmenuLocations": "Położenia",
"UnsupportedArchiveType": "Napotkał nieobsługiwany typ archiwum %1$s.",
+ "UpdaterHasNotBeenRun": "Aktualizacja nie została jeszcze wykonana.",
"WidgetLocation": "Lokalizacja odwiedzającego"
}
} \ No newline at end of file
diff --git a/plugins/UserSettings/.gitignore b/plugins/UserLanguage/.gitignore
index c8c9480010..c8c9480010 100644
--- a/plugins/UserSettings/.gitignore
+++ b/plugins/UserLanguage/.gitignore
diff --git a/plugins/UserLanguage/API.php b/plugins/UserLanguage/API.php
new file mode 100644
index 0000000000..30d6ffd8ce
--- /dev/null
+++ b/plugins/UserLanguage/API.php
@@ -0,0 +1,55 @@
+<?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\UserLanguage;
+
+use Piwik\Archive;
+use Piwik\DataTable;
+use Piwik\Metrics;
+use Piwik\Piwik;
+
+/**
+ * @see plugins/UserLanguage/functions.php
+ */
+require_once PIWIK_INCLUDE_PATH . '/plugins/UserLanguage/functions.php';
+
+/**
+ * The UserLanguage API lets you access reports about your Visitors language setting
+ *
+ * @method static \Piwik\Plugins\UserLanguage\API getInstance()
+ */
+class API extends \Piwik\Plugin\API
+{
+ protected function getDataTable($name, $idSite, $period, $date, $segment)
+ {
+ Piwik::checkUserHasViewAccess($idSite);
+ $archive = Archive::build($idSite, $period, $date, $segment);
+ $dataTable = $archive->getDataTable($name);
+ $dataTable->filter('Sort', array(Metrics::INDEX_NB_VISITS));
+ $dataTable->queueFilter('ReplaceColumnNames');
+ $dataTable->queueFilter('ReplaceSummaryRowLabel');
+ return $dataTable;
+ }
+
+ public function getLanguage($idSite, $period, $date, $segment = false)
+ {
+ $dataTable = $this->getDataTable(Archiver::LANGUAGE_RECORD_NAME, $idSite, $period, $date, $segment);
+ $dataTable->filter('GroupBy', array('label', __NAMESPACE__ . '\groupByLangCallback'));
+ $dataTable->filter('ColumnCallbackReplace', array('label', __NAMESPACE__ . '\languageTranslate'));
+
+ return $dataTable;
+ }
+
+ public function getLanguageCode($idSite, $period, $date, $segment = false)
+ {
+ $dataTable = $this->getDataTable(Archiver::LANGUAGE_RECORD_NAME, $idSite, $period, $date, $segment);
+ $dataTable->filter('ColumnCallbackReplace', array('label', __NAMESPACE__ . '\languageTranslateWithCode'));
+
+ return $dataTable;
+ }
+}
diff --git a/plugins/UserSettings/Archiver.php b/plugins/UserLanguage/Archiver.php
index 28f405adf3..14fd369eec 100644
--- a/plugins/UserSettings/Archiver.php
+++ b/plugins/UserLanguage/Archiver.php
@@ -7,7 +7,7 @@
*
*/
-namespace Piwik\Plugins\UserSettings;
+namespace Piwik\Plugins\UserLanguage;
use Piwik\Common;
use Piwik\Container\StaticContainer;
@@ -16,16 +16,16 @@ use Piwik\DataTable;
use Piwik\Intl\Data\Provider\RegionDataProvider;
use Piwik\Metrics;
-require_once PIWIK_INCLUDE_PATH . '/plugins/UserSettings/functions.php';
+require_once PIWIK_INCLUDE_PATH . '/plugins/UserLanguage/functions.php';
/**
- * Archiver for UserSettings Plugin
+ * Archiver for UserLanguage Plugin
*
* @see PluginsArchiver
*/
class Archiver extends \Piwik\Plugin\Archiver
{
- const LANGUAGE_RECORD_NAME = 'UserSettings_language';
+ const LANGUAGE_RECORD_NAME = 'UserLanguage_language';
const LANGUAGE_DIMENSION = "log_visit.location_browser_lang";
diff --git a/plugins/UserSettings/Columns/Language.php b/plugins/UserLanguage/Columns/Language.php
index 4f31778e2d..5812528688 100644
--- a/plugins/UserSettings/Columns/Language.php
+++ b/plugins/UserLanguage/Columns/Language.php
@@ -6,7 +6,7 @@
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
-namespace Piwik\Plugins\UserSettings\Columns;
+namespace Piwik\Plugins\UserLanguage\Columns;
use Piwik\Common;
use Piwik\Piwik;
diff --git a/plugins/UserSettings/Reports/Base.php b/plugins/UserLanguage/Reports/Base.php
index e802c9a3f1..5496a64b9e 100644
--- a/plugins/UserSettings/Reports/Base.php
+++ b/plugins/UserLanguage/Reports/Base.php
@@ -6,7 +6,7 @@
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
-namespace Piwik\Plugins\UserSettings\Reports;
+namespace Piwik\Plugins\UserLanguage\Reports;
use Piwik\Plugin\ViewDataTable;
use Piwik\Plugins\CoreVisualizations\Visualizations\Graph;
@@ -15,7 +15,7 @@ abstract class Base extends \Piwik\Plugin\Report
{
protected function init()
{
- $this->category = 'UserSettings_VisitorSettings';
+ $this->category = 'General_VisitorSettings';
}
protected function getBasicUserSettingsDisplayProperties(ViewDataTable $view)
diff --git a/plugins/UserSettings/Reports/GetLanguage.php b/plugins/UserLanguage/Reports/GetLanguage.php
index 9c67e8b8ea..70f4304fa6 100644
--- a/plugins/UserSettings/Reports/GetLanguage.php
+++ b/plugins/UserLanguage/Reports/GetLanguage.php
@@ -6,11 +6,11 @@
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
-namespace Piwik\Plugins\UserSettings\Reports;
+namespace Piwik\Plugins\UserLanguage\Reports;
use Piwik\Piwik;
use Piwik\Plugin\ViewDataTable;
-use Piwik\Plugins\UserSettings\Columns\Language;
+use Piwik\Plugins\UserLanguage\Columns\Language;
class GetLanguage extends Base
{
@@ -18,10 +18,10 @@ class GetLanguage extends Base
{
parent::init();
$this->dimension = new Language();
- $this->name = Piwik::translate('UserSettings_BrowserLanguage');
+ $this->name = Piwik::translate('UserLanguage_BrowserLanguage');
$this->documentation = ''; // TODO
$this->order = 10;
- $this->widgetTitle = 'UserSettings_BrowserLanguage';
+ $this->widgetTitle = 'UserLanguage_BrowserLanguage';
}
public function configureView(ViewDataTable $view)
diff --git a/plugins/UserSettings/Reports/GetLanguageCode.php b/plugins/UserLanguage/Reports/GetLanguageCode.php
index c6b609c8f9..9b2ab021d9 100644
--- a/plugins/UserSettings/Reports/GetLanguageCode.php
+++ b/plugins/UserLanguage/Reports/GetLanguageCode.php
@@ -6,10 +6,10 @@
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
-namespace Piwik\Plugins\UserSettings\Reports;
+namespace Piwik\Plugins\UserLanguage\Reports;
use Piwik\Piwik;
-use Piwik\Plugins\UserSettings\Columns\Language;
+use Piwik\Plugins\UserLanguage\Columns\Language;
class GetLanguageCode extends GetLanguage
{
@@ -17,10 +17,10 @@ class GetLanguageCode extends GetLanguage
{
parent::init();
$this->dimension = new Language();
- $this->name = Piwik::translate('UserSettings_LanguageCode');
+ $this->name = Piwik::translate('UserLanguage_LanguageCode');
$this->documentation = '';
$this->order = 11;
- $this->widgetTitle = 'UserSettings_LanguageCode';
+ $this->widgetTitle = 'UserLanguage_LanguageCode';
}
public function getRelatedReports()
diff --git a/plugins/UserLanguage/UserLanguage.php b/plugins/UserLanguage/UserLanguage.php
new file mode 100644
index 0000000000..f8bad84ba2
--- /dev/null
+++ b/plugins/UserLanguage/UserLanguage.php
@@ -0,0 +1,16 @@
+<?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\UserLanguage;
+
+/**
+ *
+ */
+class UserLanguage extends \Piwik\Plugin
+{
+} \ No newline at end of file
diff --git a/plugins/UserSettings/functions.php b/plugins/UserLanguage/functions.php
index f00f717ea3..6e28cddf27 100644
--- a/plugins/UserSettings/functions.php
+++ b/plugins/UserLanguage/functions.php
@@ -7,10 +7,9 @@
*
*/
-namespace Piwik\Plugins\UserSettings;
+namespace Piwik\Plugins\UserLanguage;
use Piwik\Piwik;
-use Piwik\Tracker\Request;
/**
* Returns the given language code to translated language name
@@ -25,13 +24,13 @@ function languageTranslate($label)
return Piwik::translate('General_Unknown');
}
- $key = 'UserSettings_Language_' . $label;
+ $key = 'UserLanguage_Language_' . $label;
$translation = Piwik::translate($key);
// Show language code if unknown code
if ($translation == $key) {
- $translation = Piwik::translate('UserSettings_LanguageCode') . ' ' . $label;
+ $translation = Piwik::translate('UserLanguage_LanguageCode') . ' ' . $label;
}
return $translation;
diff --git a/plugins/UserSettings/lang/am.json b/plugins/UserLanguage/lang/am.json
index fdf11f9b68..52e9db00c0 100644
--- a/plugins/UserSettings/lang/am.json
+++ b/plugins/UserLanguage/lang/am.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"Language_aa": "አፋርኛ",
"Language_ab": "አብሐዚኛ",
"Language_af": "አፍሪካንስኛ",
@@ -154,7 +154,6 @@
"Language_za": "ዡዋንግኛ",
"Language_zh": "ቻይንኛ",
"Language_zu": "ዙሉኛ",
- "LanguageCode": "የቋንቋ ኮድ",
- "VisitorSettings": "የጎበኚዎች ቅንብሮች"
+ "LanguageCode": "የቋንቋ ኮድ"
}
} \ No newline at end of file
diff --git a/plugins/UserSettings/lang/ar.json b/plugins/UserLanguage/lang/ar.json
index f8e7b5a261..c02fc61e8c 100644
--- a/plugins/UserSettings/lang/ar.json
+++ b/plugins/UserLanguage/lang/ar.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"Language_aa": "الأفارية",
"Language_ab": "الأبخازية",
"Language_ae": "الأفستية",
@@ -183,8 +183,6 @@
"Language_za": "الزهيونج",
"Language_zh": "الصينية",
"Language_zu": "الزولو",
- "LanguageCode": "كود اللغة",
- "PluginDescription": "تقارير عن إعدادات المستخدمين المختلفة: المتصفح، عائلة المتصفح، نظام التشغيل، الإضافات البرمجية، كثافة الشاشة النقطية، الإعدادات العامة.",
- "VisitorSettings": "إعدادات الزوار"
+ "LanguageCode": "كود اللغة"
}
} \ No newline at end of file
diff --git a/plugins/UserSettings/lang/be.json b/plugins/UserLanguage/lang/be.json
index 567de44341..eca3f52fd8 100644
--- a/plugins/UserSettings/lang/be.json
+++ b/plugins/UserLanguage/lang/be.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"Language_ab": "абхазская",
"Language_af": "афрыкаанс",
"Language_am": "амхарская",
@@ -114,8 +114,6 @@
"Language_yi": "ідыш",
"Language_zh": "кітайская",
"Language_zu": "зулу",
- "LanguageCode": "Код мовы",
- "PluginDescription": "Справаздачы наладак карыстальнікаў: Браўзэр, Сямейства Браўзэр сям'і, Аперацыйная сістэма, Плагіны, Глабальныя параметры.",
- "VisitorSettings": "Налады карыстача"
+ "LanguageCode": "Код мовы"
}
} \ No newline at end of file
diff --git a/plugins/UserSettings/lang/bg.json b/plugins/UserLanguage/lang/bg.json
index 4507c890df..0696d8caaf 100644
--- a/plugins/UserSettings/lang/bg.json
+++ b/plugins/UserLanguage/lang/bg.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"BrowserLanguage": "Език на браузъра",
"Language_aa": "афарски",
"Language_ab": "абхазки",
@@ -185,8 +185,6 @@
"Language_za": "зуанг",
"Language_zh": "китайски",
"Language_zu": "зулуски",
- "LanguageCode": "Код на езика",
- "PluginDescription": "Докладът за различните потребителски настройки: Браузър, Браузър Семейство, операционна система, модули, резолюция, Глобални настройки.",
- "VisitorSettings": "Настройки на посетителя"
+ "LanguageCode": "Код на езика"
}
} \ No newline at end of file
diff --git a/plugins/UserSettings/lang/bn.json b/plugins/UserLanguage/lang/bn.json
index 5b8fcf773b..54b756072d 100644
--- a/plugins/UserSettings/lang/bn.json
+++ b/plugins/UserLanguage/lang/bn.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"Language_aa": "আফার",
"Language_ab": "আব্খাজিয়",
"Language_ae": "আবেস্তীয়",
diff --git a/plugins/UserSettings/lang/bs.json b/plugins/UserLanguage/lang/bs.json
index f1fe068ab9..ca9c0b02d2 100644
--- a/plugins/UserSettings/lang/bs.json
+++ b/plugins/UserLanguage/lang/bs.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"Language_aa": "afarski",
"Language_ab": "abkazijski",
"Language_ae": "avestanski",
diff --git a/plugins/UserSettings/lang/ca.json b/plugins/UserLanguage/lang/ca.json
index bf108dbdc6..46c4b804ea 100644
--- a/plugins/UserSettings/lang/ca.json
+++ b/plugins/UserLanguage/lang/ca.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"Language_aa": "Afar",
"Language_ab": "Abkhazian",
"Language_ae": "Avestan",
@@ -184,8 +184,6 @@
"Language_za": "Chuang",
"Language_zh": "Xinès",
"Language_zu": "Zulu",
- "LanguageCode": "Codi de l'idioma",
- "PluginDescription": "Informe sobre les preferències del usuari: Navegador, Família del navegador, Sistema Operatiu, Extensions, Resolució, Preferències Globals",
- "VisitorSettings": "Configuració del visitant"
+ "LanguageCode": "Codi de l'idioma"
}
} \ No newline at end of file
diff --git a/plugins/UserSettings/lang/cs.json b/plugins/UserLanguage/lang/cs.json
index f635b64bdb..fa86208466 100644
--- a/plugins/UserSettings/lang/cs.json
+++ b/plugins/UserLanguage/lang/cs.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"BrowserLanguage": "Jazyk prohlížeče",
"Language_aa": "afarština",
"Language_ab": "abcházština",
@@ -186,7 +186,6 @@
"Language_zh": "čínština",
"Language_zu": "zulu",
"LanguageCode": "Jazykový kód",
- "PluginDescription": "Zobrazí různá uživatelská nastavení: prohlížeč, rodinu prohlížečů, operační systém, zásuvné moduly, rozlišení, globální nastavení.",
- "VisitorSettings": "Nastavení návštěvníků"
+ "PluginDescription": "Hlásí jazyková nastavení vašich uživatelů."
}
} \ No newline at end of file
diff --git a/plugins/UserSettings/lang/cy.json b/plugins/UserLanguage/lang/cy.json
index 10a3d95f56..a5ade8256f 100644
--- a/plugins/UserSettings/lang/cy.json
+++ b/plugins/UserLanguage/lang/cy.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"Language_aa": "Affareg",
"Language_ab": "Abchaseg",
"Language_ae": "Afestaneg",
diff --git a/plugins/UserSettings/lang/da.json b/plugins/UserLanguage/lang/da.json
index 93035bac1f..ed2ae51105 100644
--- a/plugins/UserSettings/lang/da.json
+++ b/plugins/UserLanguage/lang/da.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"BrowserLanguage": "Browser sprog",
"Language_aa": "Afar",
"Language_ab": "Abkhasisk",
@@ -186,7 +186,6 @@
"Language_zh": "Kinesisk",
"Language_zu": "Zulu",
"LanguageCode": "Sprogkode",
- "PluginDescription": "Rapporter brugerindstillinger: browser, browsertype, operativsystem, udvidelsesmoduler, opløsning, globale indstillinger.",
- "VisitorSettings": "Besøgendes indstillinger"
+ "PluginDescription": "Rapporter om sprogindstillinger for dine brugere."
}
} \ No newline at end of file
diff --git a/plugins/UserSettings/lang/de.json b/plugins/UserLanguage/lang/de.json
index ccbe596669..155f8b2538 100644
--- a/plugins/UserSettings/lang/de.json
+++ b/plugins/UserLanguage/lang/de.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"BrowserLanguage": "Browsersprache",
"Language_aa": "Afar",
"Language_ab": "Abchasisch",
@@ -186,7 +186,6 @@
"Language_zh": "Chinesisch",
"Language_zu": "IsiZulu",
"LanguageCode": "Sprach-Code",
- "PluginDescription": "Bericht über verschiedene Benutzereinstellungen: Browser, Browserfamilie, Betriebssystem, Plugins, Auflösung, Allgemeine Einstellungen.",
- "VisitorSettings": "Besuchereinstellungen"
+ "PluginDescription": "Berichte über die Spracheinstellungen ihrer Benutzer."
}
} \ No newline at end of file
diff --git a/plugins/UserSettings/lang/el.json b/plugins/UserLanguage/lang/el.json
index 17f71f9857..3d67020507 100644
--- a/plugins/UserSettings/lang/el.json
+++ b/plugins/UserLanguage/lang/el.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"BrowserLanguage": "Γλώσσα φυλλομετρητή",
"Language_aa": "Αφαρικά",
"Language_ab": "Αμπχαζικά",
@@ -186,7 +186,6 @@
"Language_zh": "Κινεζικά",
"Language_zu": "Ζουλού",
"LanguageCode": "Κωδικός γλώσσας",
- "PluginDescription": "Αναφέρει διάφορες Ρυθμίσεις Χρήστη: Φυλλομετρητής, Ομάδα Φυλλομετρητών, Λειτουργικό Σύστημα, Πρόσθετα, Ανάλυση, Γενικές Ρυθμίσεις.",
- "VisitorSettings": "Ρυθμίσεις επισκέπτη"
+ "PluginDescription": "Αναφέρει σχετικά με τη γλώσσα των ρυθμίσεων των χρηστών σας."
}
} \ No newline at end of file
diff --git a/plugins/UserLanguage/lang/en.json b/plugins/UserLanguage/lang/en.json
new file mode 100644
index 0000000000..f29cbb74ff
--- /dev/null
+++ b/plugins/UserLanguage/lang/en.json
@@ -0,0 +1,191 @@
+{
+ "UserLanguage": {
+ "BrowserLanguage": "Browser language",
+ "Language_aa": "Afar",
+ "Language_ab": "Abkhazian",
+ "Language_ae": "Avestan",
+ "Language_af": "Afrikaans",
+ "Language_ak": "Akan",
+ "Language_am": "Amharic",
+ "Language_an": "Aragonese",
+ "Language_ar": "Arabic",
+ "Language_as": "Assamese",
+ "Language_av": "Avaric",
+ "Language_ay": "Aymara",
+ "Language_az": "Azerbaijani",
+ "Language_ba": "Bashkir",
+ "Language_be": "Belarusian",
+ "Language_bg": "Bulgarian",
+ "Language_bh": "Bihari",
+ "Language_bi": "Bislama",
+ "Language_bm": "Bambara",
+ "Language_bn": "Bengali",
+ "Language_bo": "Tibetan",
+ "Language_br": "Breton",
+ "Language_bs": "Bosnian",
+ "Language_ca": "Catalan",
+ "Language_ce": "Chechen",
+ "Language_ch": "Chamorro",
+ "Language_co": "Corsican",
+ "Language_cr": "Cree",
+ "Language_cs": "Czech",
+ "Language_cu": "Church Slavic",
+ "Language_cv": "Chuvash",
+ "Language_cy": "Welsh",
+ "Language_da": "Danish",
+ "Language_de": "German",
+ "Language_dv": "Divehi",
+ "Language_dz": "Dzongkha",
+ "Language_ee": "Ewe",
+ "Language_el": "Greek",
+ "Language_en": "English",
+ "Language_eo": "Esperanto",
+ "Language_es": "Spanish",
+ "Language_et": "Estonian",
+ "Language_eu": "Basque",
+ "Language_fa": "Persian",
+ "Language_ff": "Fulah",
+ "Language_fi": "Finnish",
+ "Language_fj": "Fijian",
+ "Language_fo": "Faroese",
+ "Language_fr": "French",
+ "Language_fy": "Western Frisian",
+ "Language_ga": "Irish",
+ "Language_gd": "Scottish Gaelic",
+ "Language_gl": "Galician",
+ "Language_gn": "Guarani",
+ "Language_gu": "Gujarati",
+ "Language_gv": "Manx",
+ "Language_ha": "Hausa",
+ "Language_he": "Hebrew",
+ "Language_hi": "Hindi",
+ "Language_ho": "Hiri Motu",
+ "Language_hr": "Croatian",
+ "Language_ht": "Haitian Creole",
+ "Language_hu": "Hungarian",
+ "Language_hy": "Armenian",
+ "Language_hz": "Herero",
+ "Language_ia": "Interlingua",
+ "Language_id": "Indonesian",
+ "Language_ie": "Interlingue",
+ "Language_ig": "Igbo",
+ "Language_ii": "Sichuan Yi",
+ "Language_ik": "Inupiaq",
+ "Language_io": "Ido",
+ "Language_is": "Icelandic",
+ "Language_it": "Italian",
+ "Language_iu": "Inuktitut",
+ "Language_ja": "Japanese",
+ "Language_jv": "Javanese",
+ "Language_ka": "Georgian",
+ "Language_kg": "Kongo",
+ "Language_ki": "Kukuyu",
+ "Language_kj": "Kuanyama",
+ "Language_kk": "Kazakh",
+ "Language_kl": "Greenlandic",
+ "Language_km": "Central Khmer",
+ "Language_kn": "Kannada",
+ "Language_ko": "Korean",
+ "Language_kr": "Kanuri",
+ "Language_ks": "Kashmiri",
+ "Language_ku": "Kurdish",
+ "Language_kv": "Komi",
+ "Language_kw": "Cornish",
+ "Language_ky": "Kirghiz",
+ "Language_la": "Latin",
+ "Language_lb": "Luxembourgish",
+ "Language_lg": "Ganda",
+ "Language_li": "Limburgish",
+ "Language_ln": "Lingala",
+ "Language_lo": "Lao",
+ "Language_lt": "Lithuanian",
+ "Language_lu": "Luba-Katanga",
+ "Language_lv": "Latvian",
+ "Language_mg": "Malagasy",
+ "Language_mh": "Marshallese",
+ "Language_mi": "Maori",
+ "Language_mk": "Macedonian",
+ "Language_ml": "Malayalam",
+ "Language_mn": "Mongolian",
+ "Language_mr": "Marathi",
+ "Language_ms": "Malay",
+ "Language_mt": "Maltese",
+ "Language_my": "Burmese",
+ "Language_na": "Nauru",
+ "Language_nb": "Norwegian Bokm\u00e5l",
+ "Language_nd": "North Ndebele",
+ "Language_ne": "Nepali",
+ "Language_ng": "Ndonga",
+ "Language_nl": "Dutch",
+ "Language_nn": "Norwegian Nynorsk",
+ "Language_no": "Norwegian",
+ "Language_nr": "South Ndebele",
+ "Language_nv": "Navajo",
+ "Language_ny": "Chichewa",
+ "Language_oc": "Occitan",
+ "Language_oj": "Ojibwa",
+ "Language_om": "Oroma",
+ "Language_or": "Oriya",
+ "Language_os": "Ossetian",
+ "Language_pa": "Panjabi",
+ "Language_pi": "Pali",
+ "Language_pl": "Polish",
+ "Language_ps": "Pashto",
+ "Language_pt": "Portuguese",
+ "Language_qu": "Quechua",
+ "Language_rm": "Raeto-Romance",
+ "Language_rn": "Rundi",
+ "Language_ro": "Romanian",
+ "Language_ru": "Russian",
+ "Language_rw": "Kinyarwanda",
+ "Language_sa": "Sanskrit",
+ "Language_sc": "Sardinian",
+ "Language_sd": "Sindhi",
+ "Language_se": "Northern Sami",
+ "Language_sg": "Sango",
+ "Language_si": "Sinhala",
+ "Language_sk": "Slovak",
+ "Language_sl": "Slovenian",
+ "Language_sm": "Samoan",
+ "Language_sn": "Shona",
+ "Language_so": "Somali",
+ "Language_sq": "Albanian",
+ "Language_sr": "Serbian",
+ "Language_ss": "Swati",
+ "Language_st": "Sotho",
+ "Language_su": "Sundanese",
+ "Language_sv": "Swedish",
+ "Language_sw": "Swahili",
+ "Language_ta": "Tamil",
+ "Language_te": "Telugu",
+ "Language_tg": "Tajik",
+ "Language_th": "Thai",
+ "Language_ti": "Tigrinya",
+ "Language_tk": "Turkmen",
+ "Language_tl": "Tagalog",
+ "Language_tn": "Tswana",
+ "Language_to": "Tonga",
+ "Language_tr": "Turkish",
+ "Language_ts": "Tsonga",
+ "Language_tt": "Tatar",
+ "Language_tw": "Twi",
+ "Language_ty": "Tahitian",
+ "Language_ug": "Uighur",
+ "Language_uk": "Ukrainian",
+ "Language_ur": "Urdu",
+ "Language_uz": "Uzbek",
+ "Language_ve": "Venda",
+ "Language_vi": "Vietnamese",
+ "Language_vo": "Volap\u00fck",
+ "Language_wa": "Walloon",
+ "Language_wo": "Wolof",
+ "Language_xh": "Xhosa",
+ "Language_yi": "Yiddish",
+ "Language_yo": "Yoruba",
+ "Language_za": "Chuang",
+ "Language_zh": "Chinese",
+ "Language_zu": "Zulu",
+ "LanguageCode": "Language code",
+ "PluginDescription": "Reports about the language settings of your users."
+ }
+} \ No newline at end of file
diff --git a/plugins/UserSettings/lang/es.json b/plugins/UserLanguage/lang/es.json
index f921adc0dc..07f4b0cf7b 100644
--- a/plugins/UserSettings/lang/es.json
+++ b/plugins/UserLanguage/lang/es.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"BrowserLanguage": "Idioma de Navegador",
"Language_aa": "Lejos",
"Language_ab": "Abjasia",
@@ -185,8 +185,6 @@
"Language_za": "Chuang",
"Language_zh": "Chino",
"Language_zu": "Zulú",
- "LanguageCode": "Código de idioma",
- "PluginDescription": "Reporta varias configuraciones de usuario: Navegador, Familia del Navegador, Sistema Operativo, Plugins, Resolución, Configuración General.",
- "VisitorSettings": "Configuración de visitantes"
+ "LanguageCode": "Código de idioma"
}
} \ No newline at end of file
diff --git a/plugins/UserSettings/lang/et.json b/plugins/UserLanguage/lang/et.json
index 1db4c23fa3..21d96c38ef 100644
--- a/plugins/UserSettings/lang/et.json
+++ b/plugins/UserLanguage/lang/et.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"BrowserLanguage": "Veebisirvija keel",
"Language_aa": "afari",
"Language_ab": "abhaasi",
@@ -185,7 +185,6 @@
"Language_za": "tšuangi",
"Language_zh": "hiina",
"Language_zu": "suulu",
- "LanguageCode": "Keele kood",
- "VisitorSettings": "Külastajate seaded"
+ "LanguageCode": "Keele kood"
}
} \ No newline at end of file
diff --git a/plugins/UserSettings/lang/eu.json b/plugins/UserLanguage/lang/eu.json
index a4949895d4..c3f072d669 100644
--- a/plugins/UserSettings/lang/eu.json
+++ b/plugins/UserLanguage/lang/eu.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"Language_ab": "abkhazera",
"Language_af": "afrikaans",
"Language_ak": "Akanera",
@@ -145,7 +145,6 @@
"Language_yo": "yorubera",
"Language_zh": "txinera",
"Language_zu": "zuluera",
- "LanguageCode": "Hizkuntza-kodea",
- "VisitorSettings": "Bisitariaren ezarpenak"
+ "LanguageCode": "Hizkuntza-kodea"
}
} \ No newline at end of file
diff --git a/plugins/UserSettings/lang/fa.json b/plugins/UserLanguage/lang/fa.json
index fdefbdb01e..fcb4bd7071 100644
--- a/plugins/UserSettings/lang/fa.json
+++ b/plugins/UserLanguage/lang/fa.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"BrowserLanguage": "زبان مرورگر",
"Language_aa": "آفاری",
"Language_ab": "آبخازیایی",
@@ -185,8 +185,6 @@
"Language_za": "چوانگی",
"Language_zh": "چینی",
"Language_zu": "زولویی",
- "LanguageCode": "کد زبان",
- "PluginDescription": "گزارش تنظیمات کاربر های مختلف: مرورگر، Family (خانواده) مرورگر، سیستم عامل، پلاگین، سایز تصویر، تنظیمات جهانی است.",
- "VisitorSettings": "تنظیمات بازدید کننده"
+ "LanguageCode": "کد زبان"
}
} \ No newline at end of file
diff --git a/plugins/UserSettings/lang/fi.json b/plugins/UserLanguage/lang/fi.json
index ad70ea0159..a49fb05355 100644
--- a/plugins/UserSettings/lang/fi.json
+++ b/plugins/UserLanguage/lang/fi.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"BrowserLanguage": "Selaimen kieli",
"Language_aa": "afar",
"Language_ab": "abkhazian",
@@ -185,8 +185,6 @@
"Language_za": "chuang",
"Language_zh": "kiinan kieli",
"Language_zu": "zulu",
- "LanguageCode": "Kielikoodi",
- "PluginDescription": "Raportit käyttäjien asetuksista: selain, selaimen perhe, käyttöjärjestelmä, lisäosat, resoluutio, yleiset asetukset.",
- "VisitorSettings": "Kävijöiden asetukset"
+ "LanguageCode": "Kielikoodi"
}
} \ No newline at end of file
diff --git a/plugins/UserSettings/lang/fr.json b/plugins/UserLanguage/lang/fr.json
index d90382ebc9..4ce253f215 100644
--- a/plugins/UserSettings/lang/fr.json
+++ b/plugins/UserLanguage/lang/fr.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"BrowserLanguage": "Langage du navigateur",
"Language_aa": "Afar",
"Language_ab": "Abkhaze",
@@ -185,8 +185,6 @@
"Language_za": "Chuang",
"Language_zh": "Chinois",
"Language_zu": "Zoulou",
- "LanguageCode": "Code langue",
- "PluginDescription": "Effectue des rapports variés sur les paramètres utilisateurs: navigateur, famille du navigateur, système d'exploitation, plugins, résolution, paramètres généraux.",
- "VisitorSettings": "Paramètres visiteur"
+ "LanguageCode": "Code langue"
}
} \ No newline at end of file
diff --git a/plugins/UserSettings/lang/gl.json b/plugins/UserLanguage/lang/gl.json
index dd30b05ce2..a0d8202653 100644
--- a/plugins/UserSettings/lang/gl.json
+++ b/plugins/UserLanguage/lang/gl.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"Language_ab": "abkhazo",
"Language_af": "Afrikaans",
"Language_ak": "Akán",
diff --git a/plugins/UserSettings/lang/he.json b/plugins/UserLanguage/lang/he.json
index 5a31eaa865..e7109e39ad 100644
--- a/plugins/UserSettings/lang/he.json
+++ b/plugins/UserLanguage/lang/he.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"Language_aa": "אפארית",
"Language_ab": "אבחזית",
"Language_ae": "אבסטן",
diff --git a/plugins/UserSettings/lang/hi.json b/plugins/UserLanguage/lang/hi.json
index 57f065402d..8edd9333ca 100644
--- a/plugins/UserSettings/lang/hi.json
+++ b/plugins/UserLanguage/lang/hi.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"BrowserLanguage": "ब्राउज़र की भाषा",
"Language_aa": "अफ़ार",
"Language_ab": "अब्खाज़ियन्",
@@ -185,8 +185,6 @@
"Language_za": "ज़ुआंग",
"Language_zh": "चीनी",
"Language_zu": "ज़ुलू",
- "LanguageCode": "भाषा कोड",
- "PluginDescription": "विभिन्न उपयोगकर्ता सेटिंग्स की रिपोर्ट: ब्राउज़र, ब्राउज़र परिवार, आपरेटिंग सिस्टम, प्लगइन्स, संकल्प, वैश्विक सेटिंग्स.",
- "VisitorSettings": "आगंतुक सेटिंग्स"
+ "LanguageCode": "भाषा कोड"
}
} \ No newline at end of file
diff --git a/plugins/UserSettings/lang/hr.json b/plugins/UserLanguage/lang/hr.json
index 533587f029..1c5d7a9d54 100644
--- a/plugins/UserSettings/lang/hr.json
+++ b/plugins/UserLanguage/lang/hr.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"Language_aa": "afarski",
"Language_ab": "abhaski",
"Language_ae": "avestan",
@@ -183,7 +183,6 @@
"Language_yo": "joruba",
"Language_za": "zhuang",
"Language_zh": "kineski",
- "Language_zu": "zulu",
- "VisitorSettings": "Postavke posjetitelja"
+ "Language_zu": "zulu"
}
} \ No newline at end of file
diff --git a/plugins/UserSettings/lang/hu.json b/plugins/UserLanguage/lang/hu.json
index b4d3153cdc..a8db5c2c63 100644
--- a/plugins/UserSettings/lang/hu.json
+++ b/plugins/UserLanguage/lang/hu.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"Language_aa": "afar",
"Language_ab": "abház",
"Language_ae": "avesztán",
@@ -184,8 +184,6 @@
"Language_za": "zsuang",
"Language_zh": "kínai",
"Language_zu": "zulu",
- "LanguageCode": "Nyelvi kód",
- "PluginDescription": "Jelentéseket készít a látogatóknál észlelt beállításokról és rendszerkörnyezetről mint például: böngésző típusa, böngészőcsaládok, operációs rendszer, böngésző bővítmények, képernyőfelbontás, globális beállítások.",
- "VisitorSettings": "Látogatók adatai"
+ "LanguageCode": "Nyelvi kód"
}
} \ No newline at end of file
diff --git a/plugins/UserSettings/lang/id.json b/plugins/UserLanguage/lang/id.json
index 54df69b53b..cfe49baf4b 100644
--- a/plugins/UserSettings/lang/id.json
+++ b/plugins/UserLanguage/lang/id.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"BrowserLanguage": "Bahasa Peramban",
"Language_aa": "Afar",
"Language_ab": "Abkhaz",
@@ -185,8 +185,6 @@
"Language_za": "Zhuang",
"Language_zh": "Cina",
"Language_zu": "Zulu",
- "LanguageCode": "Kode Bahasa",
- "PluginDescription": "Laporan Pengaturan Pengguna: Peramban, Keluarga Peramban, Sistem Operasi, Pengaya, Resolusi Layar, Pengaturan Umum.",
- "VisitorSettings": "Pengaturan Pengunjung"
+ "LanguageCode": "Kode Bahasa"
}
} \ No newline at end of file
diff --git a/plugins/UserSettings/lang/is.json b/plugins/UserLanguage/lang/is.json
index 230ee1aa28..b8752b4ac2 100644
--- a/plugins/UserSettings/lang/is.json
+++ b/plugins/UserLanguage/lang/is.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"Language_aa": "afár",
"Language_ab": "abkasíska",
"Language_ae": "avestíska",
@@ -184,8 +184,6 @@
"Language_za": "súang",
"Language_zh": "kínverska",
"Language_zu": "súlú",
- "LanguageCode": "Kóði tungumáls",
- "PluginDescription": "Gefur skýrslu um ýmsar stillingar gesta:Vafra, Vafrafjölskyldu, Stýrikerfi, Íbætur, Skjáupplausn, altækar stillingar.",
- "VisitorSettings": "Stillingar gesta"
+ "LanguageCode": "Kóði tungumáls"
}
} \ No newline at end of file
diff --git a/plugins/UserSettings/lang/it.json b/plugins/UserLanguage/lang/it.json
index 35f98dd3a3..bdb5d0708f 100644
--- a/plugins/UserSettings/lang/it.json
+++ b/plugins/UserLanguage/lang/it.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"BrowserLanguage": "Lingua Browser",
"Language_aa": "afar",
"Language_ab": "abkhazian",
@@ -186,7 +186,6 @@
"Language_zh": "cinese",
"Language_zu": "zulu",
"LanguageCode": "Codice della lingua",
- "PluginDescription": "Mostra le varie impostazioni per gli utenti: Browser, Famiglia del Browser, Sistema Operativo, Plugin, Risoluzione, Impostazioni Globali.",
- "VisitorSettings": "Impostazioni visitatori"
+ "PluginDescription": "Reports sulle impostazioni della lingua degli utenti."
}
} \ No newline at end of file
diff --git a/plugins/UserSettings/lang/ja.json b/plugins/UserLanguage/lang/ja.json
index 3a03d8a3e0..d16b5563e5 100644
--- a/plugins/UserSettings/lang/ja.json
+++ b/plugins/UserLanguage/lang/ja.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"BrowserLanguage": "ブラウザの言語",
"Language_aa": "アファル語",
"Language_ab": "アブハズ語",
@@ -185,8 +185,6 @@
"Language_za": "チワン語",
"Language_zh": "中国語",
"Language_zu": "ズールー語",
- "LanguageCode": "言語コード",
- "PluginDescription": "各種ユーザー設定(ブラウザ、ブラウザファミリー、オペレーティングシステム、プラグイン、解像度、全般設定)をリポートします。",
- "VisitorSettings": "ビジターの環境"
+ "LanguageCode": "言語コード"
}
} \ No newline at end of file
diff --git a/plugins/UserSettings/lang/ka.json b/plugins/UserLanguage/lang/ka.json
index c76c043e50..6002246265 100644
--- a/plugins/UserSettings/lang/ka.json
+++ b/plugins/UserLanguage/lang/ka.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"Language_aa": "აფარი",
"Language_ab": "აფხაზური",
"Language_ae": "ავესტა",
@@ -157,8 +157,6 @@
"Language_yo": "იორუბა",
"Language_zh": "ჩინური",
"Language_zu": "ზულუ",
- "LanguageCode": "ენის კოდი",
- "PluginDescription": "იძლევა ანგარიშს მომხმარებლის სხვადასხვა პარამეტრებზე: ბრაუზერები, ბრაუზერის ოჯახი, ოპერაციული სისტემა, პლაგინები, რეზოლუცია, გლობალური პარამეტრები.",
- "VisitorSettings": "ვიზიტორის პარამეტრები"
+ "LanguageCode": "ენის კოდი"
}
} \ No newline at end of file
diff --git a/plugins/UserSettings/lang/ko.json b/plugins/UserLanguage/lang/ko.json
index 54a35a3c53..07a2b0e3a7 100644
--- a/plugins/UserSettings/lang/ko.json
+++ b/plugins/UserLanguage/lang/ko.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"BrowserLanguage": "브라우저 언어",
"Language_aa": "아파르어",
"Language_ab": "압하스어",
@@ -185,8 +185,6 @@
"Language_za": "주앙어",
"Language_zh": "중국어",
"Language_zu": "줄루어",
- "LanguageCode": "언어 코드",
- "PluginDescription": "각종 사용자 설정 (브라우저, 브라우저 페밀리, 운영 시스템, 플러그인, 해상도, 일반 설정)를 보고합니다.",
- "VisitorSettings": "방문자 설정"
+ "LanguageCode": "언어 코드"
}
} \ No newline at end of file
diff --git a/plugins/UserSettings/lang/lt.json b/plugins/UserLanguage/lang/lt.json
index d2dae7529d..75f6dd4209 100644
--- a/plugins/UserSettings/lang/lt.json
+++ b/plugins/UserLanguage/lang/lt.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"Language_aa": "afarų",
"Language_ab": "abchazų",
"Language_ae": "avestų",
@@ -184,8 +184,6 @@
"Language_za": "chuang",
"Language_zh": "kinų",
"Language_zu": "zulų",
- "LanguageCode": "Kalbos kodas",
- "PluginDescription": "Parodo įvairius lankytojo nustatymus: naršyklę, naršyklės šeimą, operacinę sistemą, papildinius, ekrano raišką, skiriamąją gebą, globalius nustatymus.",
- "VisitorSettings": "Lankytojų nustatymai"
+ "LanguageCode": "Kalbos kodas"
}
} \ No newline at end of file
diff --git a/plugins/UserSettings/lang/lv.json b/plugins/UserLanguage/lang/lv.json
index 26f072d5f1..bed7f8edeb 100644
--- a/plugins/UserSettings/lang/lv.json
+++ b/plugins/UserLanguage/lang/lv.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"Language_aa": "afāru",
"Language_ab": "abhāzu",
"Language_ae": "avesta",
@@ -184,8 +184,6 @@
"Language_za": "džuanu",
"Language_zh": "ķīniešu",
"Language_zu": "zulu",
- "LanguageCode": "Valodas kods",
- "PluginDescription": "Apskata dažādus lietotāju iestatījumus: pārlūku, pārlūku ģimeni, operētājsistēmu, spraudņus, ekrāna izšķirtspēju, globālos iestatījumus.",
- "VisitorSettings": "Apmeklētāju iestatījumi"
+ "LanguageCode": "Valodas kods"
}
} \ No newline at end of file
diff --git a/plugins/UserSettings/lang/nb.json b/plugins/UserLanguage/lang/nb.json
index 6e25fa09e3..0a8f7d6b0c 100644
--- a/plugins/UserSettings/lang/nb.json
+++ b/plugins/UserLanguage/lang/nb.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"Language_aa": "afar",
"Language_ab": "abkhasisk",
"Language_ae": "avestisk",
@@ -184,8 +184,6 @@
"Language_za": "zhuang",
"Language_zh": "kinesisk",
"Language_zu": "zulu",
- "LanguageCode": "Språkkode",
- "PluginDescription": "Rapporterer forskjellige brukerinnstillinger: Nettleser, nettleserfamilie, operativsystem, tillegg, oppløsning, globale innstillinger.",
- "VisitorSettings": "Besøkendes innstillinger"
+ "LanguageCode": "Språkkode"
}
} \ No newline at end of file
diff --git a/plugins/UserSettings/lang/nl.json b/plugins/UserLanguage/lang/nl.json
index ef48387e87..708e3b034f 100644
--- a/plugins/UserSettings/lang/nl.json
+++ b/plugins/UserLanguage/lang/nl.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"BrowserLanguage": "Browsertaal",
"Language_aa": "Afar",
"Language_ab": "Abchazisch",
@@ -185,8 +185,6 @@
"Language_za": "Zhuang",
"Language_zh": "Chinees",
"Language_zu": "Zulu",
- "LanguageCode": "Taal code",
- "PluginDescription": "Rapporteert verschillende gebruikers instellingen: Browser, Browser familie, Besturingssysteem, Plugins, Resolutie, Globale Instellingen.",
- "VisitorSettings": "Bezoekers Instellingen"
+ "LanguageCode": "Taal code"
}
} \ No newline at end of file
diff --git a/plugins/UserSettings/lang/nn.json b/plugins/UserLanguage/lang/nn.json
index bb721142f8..35699b3a50 100644
--- a/plugins/UserSettings/lang/nn.json
+++ b/plugins/UserLanguage/lang/nn.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"Language_aa": "afar",
"Language_ab": "abkhasisk",
"Language_ae": "avestisk",
@@ -184,8 +184,6 @@
"Language_za": "zhuang",
"Language_zh": "kinesisk",
"Language_zu": "zulu",
- "LanguageCode": "Språkkode",
- "PluginDescription": "Rapporter diverse vitjarinnstillingar: Nettlesar, Nettlesarfamilie, operativsystem, oppløysing og globale innstillingar.",
- "VisitorSettings": "Vitjarinnstillingar"
+ "LanguageCode": "Språkkode"
}
} \ No newline at end of file
diff --git a/plugins/UserSettings/lang/pl.json b/plugins/UserLanguage/lang/pl.json
index 01697fe556..8ff635e825 100644
--- a/plugins/UserSettings/lang/pl.json
+++ b/plugins/UserLanguage/lang/pl.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"BrowserLanguage": "Język przeglądarki",
"Language_aa": "afar",
"Language_ab": "abchaski",
@@ -185,8 +185,6 @@
"Language_za": "czuang",
"Language_zh": "chiński",
"Language_zu": "zulu",
- "LanguageCode": "Kod języka",
- "PluginDescription": "Raporty rozmaitych konfiguracji użytkownika: przeglądarki, rodziny przeglądarek, systemów operacyjnych, wtyczek, rozdzielczości, ogólnej konfiguracji.",
- "VisitorSettings": "Konfiguracje użytkownika"
+ "LanguageCode": "Kod języka"
}
} \ No newline at end of file
diff --git a/plugins/UserSettings/lang/pt-br.json b/plugins/UserLanguage/lang/pt-br.json
index 0e4b6667da..dae4601280 100644
--- a/plugins/UserSettings/lang/pt-br.json
+++ b/plugins/UserLanguage/lang/pt-br.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"BrowserLanguage": "Idioma do navegador",
"Language_aa": "afar",
"Language_ab": "abcázio",
@@ -185,8 +185,6 @@
"Language_za": "zhuang",
"Language_zh": "chinês",
"Language_zu": "zulu",
- "LanguageCode": "Código do Idioma",
- "PluginDescription": "Relatórios diversas configurações de usuário: navegador, navegador família, sistema operacional, plugins, resolução, configurações globais.",
- "VisitorSettings": "Configurações dos visitantes"
+ "LanguageCode": "Código do Idioma"
}
} \ No newline at end of file
diff --git a/plugins/UserSettings/lang/pt.json b/plugins/UserLanguage/lang/pt.json
index d6ccab7375..7a0e0e8615 100644
--- a/plugins/UserSettings/lang/pt.json
+++ b/plugins/UserLanguage/lang/pt.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"Language_aa": "afar",
"Language_ab": "abcázio",
"Language_ae": "avéstico",
@@ -184,8 +184,6 @@
"Language_za": "zhuang",
"Language_zh": "chinês",
"Language_zu": "zulu",
- "LanguageCode": "Código do idioma",
- "PluginDescription": "Relata várias Definições de Utilizador: Navegador, Família de Navegadores, Sistema Operativo, Plugins, Resolução, Definições Globais",
- "VisitorSettings": "Definições do Visitante"
+ "LanguageCode": "Código do idioma"
}
} \ No newline at end of file
diff --git a/plugins/UserSettings/lang/ro.json b/plugins/UserLanguage/lang/ro.json
index de3768248d..b6362e4267 100644
--- a/plugins/UserSettings/lang/ro.json
+++ b/plugins/UserLanguage/lang/ro.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"BrowserLanguage": "Limba browser-ului",
"Language_aa": "Afar",
"Language_ab": "abhază",
@@ -185,8 +185,6 @@
"Language_za": "zhuang",
"Language_zh": "chineză",
"Language_zu": "zulu",
- "LanguageCode": "Cod limbă",
- "PluginDescription": "Rapoarte difera la setări utilizator: Browser, Browser de familie, sistemul de operare, plugins, Rezolutie, Global Setări.",
- "VisitorSettings": "Setări vizitatori"
+ "LanguageCode": "Cod limbă"
}
} \ No newline at end of file
diff --git a/plugins/UserSettings/lang/ru.json b/plugins/UserLanguage/lang/ru.json
index 25716d1d0b..7362daece6 100644
--- a/plugins/UserSettings/lang/ru.json
+++ b/plugins/UserLanguage/lang/ru.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"BrowserLanguage": "Язык браузера",
"Language_aa": "афар",
"Language_ab": "абхазский",
@@ -185,8 +185,6 @@
"Language_za": "чжуань",
"Language_zh": "китайский",
"Language_zu": "зулу",
- "LanguageCode": "Код языка",
- "PluginDescription": "Ведет учет различных настроек пользователя: браузер, семейство браузера, операционная система, плагины, разрешение экрана, а также глобальные настройки.",
- "VisitorSettings": "Настройки посетителей"
+ "LanguageCode": "Код языка"
}
} \ No newline at end of file
diff --git a/plugins/UserSettings/lang/sk.json b/plugins/UserLanguage/lang/sk.json
index 800547c1fd..eeefdc8545 100644
--- a/plugins/UserSettings/lang/sk.json
+++ b/plugins/UserLanguage/lang/sk.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"Language_aa": "afarčina",
"Language_ab": "abcházština",
"Language_ae": "avestčina",
@@ -184,8 +184,6 @@
"Language_za": "čuangčina",
"Language_zh": "čínština",
"Language_zu": "zuluština",
- "LanguageCode": "Kód jazyka",
- "PluginDescription": "Rôzne reporty užívateľského nastavenia: Prehliadač, Rodina prehliadača, Operačný systém, Pluginy, Rozlíšenie, Globálne nastavenia.",
- "VisitorSettings": "Nastavenia návštevníkov"
+ "LanguageCode": "Kód jazyka"
}
} \ No newline at end of file
diff --git a/plugins/UserSettings/lang/sl.json b/plugins/UserLanguage/lang/sl.json
index 1ca2cb1142..6529bc25fa 100644
--- a/plugins/UserSettings/lang/sl.json
+++ b/plugins/UserLanguage/lang/sl.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"BrowserLanguage": "Jezik brskalnika",
"Language_aa": "afarščina",
"Language_ab": "abhaščina",
@@ -185,7 +185,6 @@
"Language_za": "za",
"Language_zh": "kitajščina",
"Language_zu": "zulujščina",
- "LanguageCode": "Šifra jezika",
- "VisitorSettings": "Nastavitve obiskovalcev"
+ "LanguageCode": "Šifra jezika"
}
} \ No newline at end of file
diff --git a/plugins/UserSettings/lang/sq.json b/plugins/UserLanguage/lang/sq.json
index 9705d70fad..e7c32170f2 100644
--- a/plugins/UserSettings/lang/sq.json
+++ b/plugins/UserLanguage/lang/sq.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"Language_af": "Afrikanisht",
"Language_am": "Amharike",
"Language_ar": "Arabisht",
@@ -101,8 +101,6 @@
"Language_yi": "Jiden",
"Language_zh": "Kineze",
"Language_zu": "Zulu",
- "LanguageCode": "Kod Gjuhe",
- "PluginDescription": "Raporton Rregullime të ndryshme të Përdoruesit: Shfletues, Familje Shfletuesi, Sistem Operativ, Shtojca, Qartësi, Rregullime Globale.",
- "VisitorSettings": "Rregullimet për Vizitor"
+ "LanguageCode": "Kod Gjuhe"
}
} \ No newline at end of file
diff --git a/plugins/UserSettings/lang/sr.json b/plugins/UserLanguage/lang/sr.json
index 680d7b3e19..d967828998 100644
--- a/plugins/UserSettings/lang/sr.json
+++ b/plugins/UserLanguage/lang/sr.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"BrowserLanguage": "Jezik brauzera",
"Language_aa": "Afar",
"Language_ab": "Abhazijski",
@@ -185,8 +185,6 @@
"Language_za": "Čueng",
"Language_zh": "Kineski",
"Language_zu": "Zulu",
- "LanguageCode": "Kod jezika",
- "PluginDescription": "Izveštaj o različitim parametrima vezanim za posetioce: brauzeri, operativni sistemi, dodaci, ekranske rezolucije, globalna podešavanja.",
- "VisitorSettings": "Parametri posetilaca"
+ "LanguageCode": "Kod jezika"
}
} \ No newline at end of file
diff --git a/plugins/UserSettings/lang/sv.json b/plugins/UserLanguage/lang/sv.json
index 8c8d467c01..6bdb8ab128 100644
--- a/plugins/UserSettings/lang/sv.json
+++ b/plugins/UserLanguage/lang/sv.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"BrowserLanguage": "Webbläsarspråk",
"Language_aa": "Afar",
"Language_ab": "Abchaziska",
@@ -185,8 +185,6 @@
"Language_za": "Zhuang",
"Language_zh": "Kinesiska",
"Language_zu": "Zulu",
- "LanguageCode": "Språkkod",
- "PluginDescription": "Rapporterar olika användarinställningar: Webbläsare, Webbläsarfamilj, operativsystem, Plugins, upplösning, Globala inställningar.",
- "VisitorSettings": "Besökarinställningar"
+ "LanguageCode": "Språkkod"
}
} \ No newline at end of file
diff --git a/plugins/UserSettings/lang/ta.json b/plugins/UserLanguage/lang/ta.json
index 92e48896c8..4ecd3d9fb9 100644
--- a/plugins/UserSettings/lang/ta.json
+++ b/plugins/UserLanguage/lang/ta.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"Language_aa": "அஃபார்",
"Language_ab": "அப்காஜியான்",
"Language_ae": "அவெஸ்தான்",
diff --git a/plugins/UserSettings/lang/te.json b/plugins/UserLanguage/lang/te.json
index f61fd26b87..60380c9be4 100644
--- a/plugins/UserSettings/lang/te.json
+++ b/plugins/UserLanguage/lang/te.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"Language_aa": "అఫార్",
"Language_ab": "అబ్ఖాజియన్",
"Language_ae": "అవేస్టాన్",
@@ -184,7 +184,6 @@
"Language_za": "జువాన్",
"Language_zh": "చైనీస్",
"Language_zu": "జూలూ",
- "LanguageCode": "భాషా సంకేతం",
- "VisitorSettings": "సందర్శకుల అమరికలు"
+ "LanguageCode": "భాషా సంకేతం"
}
} \ No newline at end of file
diff --git a/plugins/UserSettings/lang/th.json b/plugins/UserLanguage/lang/th.json
index a0c6ffacef..a4a07a3c70 100644
--- a/plugins/UserSettings/lang/th.json
+++ b/plugins/UserLanguage/lang/th.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"Language_aa": "อะฟาร์",
"Language_ab": "อับคาซ",
"Language_ae": "อเวสตะ",
@@ -184,8 +184,6 @@
"Language_za": "จ้วง",
"Language_zh": "จีน",
"Language_zu": "ซูลู",
- "LanguageCode": "รหัสภาษา",
- "PluginDescription": "รายงานการตั้งค่าผู้ใช้ต่างๆ: เบราว์เซอร์, ตระกูลเบราว์เซอร์,ระบบปฏิบัติการ, ปลั๊กอิน, การแก้ไขและการตั้งค่าส่วนกลาง",
- "VisitorSettings": "การตั้งค่าของผู้เข้าชม"
+ "LanguageCode": "รหัสภาษา"
}
} \ No newline at end of file
diff --git a/plugins/UserSettings/lang/tl.json b/plugins/UserLanguage/lang/tl.json
index 7fb967d127..96d6d77148 100644
--- a/plugins/UserSettings/lang/tl.json
+++ b/plugins/UserLanguage/lang/tl.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"BrowserLanguage": "wika ng browser",
"Language_aa": "Afar",
"Language_ab": "Abkhazian",
@@ -184,8 +184,6 @@
"Language_za": "Chuang",
"Language_zh": "Tsino",
"Language_zu": "Zulu",
- "LanguageCode": "wika ng code",
- "PluginDescription": "Ulat para sa ibat-ibang mga Setting ng user: Browser Pamilya ng browser Operating System Plugins Resolution Pang-kalahatang settings.",
- "VisitorSettings": "Mga Setting ng bisita"
+ "LanguageCode": "wika ng code"
}
} \ No newline at end of file
diff --git a/plugins/UserSettings/lang/tr.json b/plugins/UserLanguage/lang/tr.json
index 74ceaf6900..79ae6fc82a 100644
--- a/plugins/UserSettings/lang/tr.json
+++ b/plugins/UserLanguage/lang/tr.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"Language_aa": "Afar",
"Language_ab": "Abazca",
"Language_ae": "Avestçe",
@@ -184,8 +184,6 @@
"Language_za": "Zhuang",
"Language_zh": "Çince",
"Language_zu": "Zulu",
- "LanguageCode": "Dil kodu",
- "PluginDescription": "Çeşitli kullanıcı rapor ayalari: Tarayıcı, Tarayıcı Ailesi, İşletim Sistemi, Eklentiler, Çözünürlük, Genel Ayarlar.",
- "VisitorSettings": "Ziyaretçi Ayarlari"
+ "LanguageCode": "Dil kodu"
}
} \ No newline at end of file
diff --git a/plugins/UserSettings/lang/uk.json b/plugins/UserLanguage/lang/uk.json
index 86784d750c..3a94be5699 100644
--- a/plugins/UserSettings/lang/uk.json
+++ b/plugins/UserLanguage/lang/uk.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"Language_aa": "афарська",
"Language_ab": "абхазька",
"Language_ae": "авестійська",
@@ -184,8 +184,6 @@
"Language_za": "чжуан",
"Language_zh": "китайська",
"Language_zu": "зулуська",
- "LanguageCode": "Код мови",
- "PluginDescription": "Повідомляє різні налаштуванян користовувача: веб-оглядач, родина веб-оглядача, операційна система, плагіни, роздільна здатність, глобальні налаштування.",
- "VisitorSettings": "Налаштування відвідувача"
+ "LanguageCode": "Код мови"
}
} \ No newline at end of file
diff --git a/plugins/UserSettings/lang/vi.json b/plugins/UserLanguage/lang/vi.json
index 62ec4565ad..8bb7e99f59 100644
--- a/plugins/UserSettings/lang/vi.json
+++ b/plugins/UserLanguage/lang/vi.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"BrowserLanguage": "Ngôn ngữ trình duyệt",
"Language_aa": "Tiếng Afar",
"Language_ab": "Tiếng Abkhazia",
@@ -185,8 +185,6 @@
"Language_za": "Tiếng Zhuang",
"Language_zh": "Tiếng Trung Quốc",
"Language_zu": "Tiếng Zulu",
- "LanguageCode": "Mã ngôn ngữ",
- "PluginDescription": "Cài đặt báo cáo người dùng khác nhau: trình duyệt, họ trình duyệt, Hệ điều hành, Plugin, Độ phân giải, Cài đặt tổng quát.",
- "VisitorSettings": "Thiết lập khách truy cập"
+ "LanguageCode": "Mã ngôn ngữ"
}
} \ No newline at end of file
diff --git a/plugins/UserSettings/lang/zh-cn.json b/plugins/UserLanguage/lang/zh-cn.json
index 9de7f32e3f..792fea9b17 100644
--- a/plugins/UserSettings/lang/zh-cn.json
+++ b/plugins/UserLanguage/lang/zh-cn.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"BrowserLanguage": "浏览器语言",
"Language_aa": "阿法文",
"Language_ab": "阿布哈西亚文",
@@ -185,8 +185,6 @@
"Language_za": "壮语",
"Language_zh": "中文",
"Language_zu": "祖鲁文",
- "LanguageCode": "语言代码",
- "PluginDescription": "用户环境报表: 浏览器、浏览器种类、操作系统、插件、分辨率、全局参数。",
- "VisitorSettings": "访客设置"
+ "LanguageCode": "语言代码"
}
} \ No newline at end of file
diff --git a/plugins/UserSettings/lang/zh-tw.json b/plugins/UserLanguage/lang/zh-tw.json
index fa535f0b85..4006c31d9d 100644
--- a/plugins/UserSettings/lang/zh-tw.json
+++ b/plugins/UserLanguage/lang/zh-tw.json
@@ -1,5 +1,5 @@
{
- "UserSettings": {
+ "UserLanguage": {
"BrowserLanguage": "瀏覽器語系",
"Language_aa": "阿法文",
"Language_ab": "阿布哈西亚文",
@@ -185,8 +185,6 @@
"Language_za": "壮语",
"Language_zh": "中文",
"Language_zu": "祖鲁文",
- "LanguageCode": "語系代碼",
- "PluginDescription": "各個用戶設定報表:瀏覽器、瀏覽器家族、作業系統、外掛、解析度、全域設定。",
- "VisitorSettings": "造訪者設定值"
+ "LanguageCode": "語系代碼"
}
} \ No newline at end of file
diff --git a/plugins/UserSettings/tests/Fixtures/LanguageFixture.php b/plugins/UserLanguage/tests/Fixtures/LanguageFixture.php
index dd3089a365..3e015f776a 100644
--- a/plugins/UserSettings/tests/Fixtures/LanguageFixture.php
+++ b/plugins/UserLanguage/tests/Fixtures/LanguageFixture.php
@@ -7,12 +7,11 @@
*
*/
-namespace Piwik\Plugins\UserSettings\tests\Fixtures;
+namespace Piwik\Plugins\UserLanguage\tests\Fixtures;
use Piwik\Tests\Framework\Fixture;
use Piwik\Date;
-use Piwik\Common;
class LanguageFixture extends Fixture
{
diff --git a/plugins/UserSettings/tests/System/GetLanguageSystemTest.php b/plugins/UserLanguage/tests/System/GetLanguageSystemTest.php
index 3c409c1112..2ce1c215d5 100644
--- a/plugins/UserSettings/tests/System/GetLanguageSystemTest.php
+++ b/plugins/UserLanguage/tests/System/GetLanguageSystemTest.php
@@ -6,18 +6,18 @@
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
-namespace Piwik\Plugins\UserSettings\tests\System;
+namespace Piwik\Plugins\UserLanguage\tests\System;
-use Piwik\Plugins\UserSettings\tests\Fixtures\LanguageFixture;
+use Piwik\Plugins\UserLanguage\tests\Fixtures\LanguageFixture;
use Piwik\Tests\Framework\TestCase\SystemTestCase;
/**
* Class GetLanguageSystemTest
- * @package Piwik\Plugins\UserSettings\tests
+ * @package Piwik\Plugins\UserLanguage\tests
* @group GetLanguageSystemTest
* @group Plugins
- * @group UserSettings
+ * @group UserLanguage
*/
class GetLanguageSystemTest extends SystemTestCase {
@@ -45,8 +45,8 @@ class GetLanguageSystemTest extends SystemTestCase {
public function getApiForTesting()
{
$apiToCall = array(
- "UserSettings.getLanguage",
- "UserSettings.getLanguageCode"
+ "UserLanguage.getLanguage",
+ "UserLanguage.getLanguageCode"
);
$apiToTest = array();
diff --git a/plugins/UserSettings/tests/System/expected/test___UserSettings.getLanguageCode_day.xml b/plugins/UserLanguage/tests/System/expected/test___UserLanguage.getLanguageCode_day.xml
index 02c15ad520..02c15ad520 100644
--- a/plugins/UserSettings/tests/System/expected/test___UserSettings.getLanguageCode_day.xml
+++ b/plugins/UserLanguage/tests/System/expected/test___UserLanguage.getLanguageCode_day.xml
diff --git a/plugins/UserSettings/tests/System/expected/test___UserSettings.getLanguage_day.xml b/plugins/UserLanguage/tests/System/expected/test___UserLanguage.getLanguage_day.xml
index 18d4468a2e..18d4468a2e 100644
--- a/plugins/UserSettings/tests/System/expected/test___UserSettings.getLanguage_day.xml
+++ b/plugins/UserLanguage/tests/System/expected/test___UserLanguage.getLanguage_day.xml
diff --git a/plugins/UserSettings/API.php b/plugins/UserSettings/API.php
index d2703489a4..68ff9b1f90 100644
--- a/plugins/UserSettings/API.php
+++ b/plugins/UserSettings/API.php
@@ -8,19 +8,7 @@
*/
namespace Piwik\Plugins\UserSettings;
-use Piwik\Archive;
-use Piwik\DataTable;
-use Piwik\Metrics;
-use Piwik\Piwik;
-use Piwik\Plugins\DevicesDetection\Archiver AS DDArchiver;
-use Piwik\Plugins\CoreHome\Columns\Metrics\VisitsPercent;
-
-/**
- * @see plugins/UserSettings/functions.php
- */
-require_once PIWIK_INCLUDE_PATH . '/plugins/UserSettings/functions.php';
-
-/**
+/*
* The UserSettings API lets you access reports about some of your Visitors technical settings:
* plugins supported in their browser, Screen resolution and Screen types (normal, widescreen, dual screen or mobile).
*
@@ -28,17 +16,6 @@ require_once PIWIK_INCLUDE_PATH . '/plugins/UserSettings/functions.php';
*/
class API extends \Piwik\Plugin\API
{
- protected function getDataTable($name, $idSite, $period, $date, $segment)
- {
- Piwik::checkUserHasViewAccess($idSite);
- $archive = Archive::build($idSite, $period, $date, $segment);
- $dataTable = $archive->getDataTable($name);
- $dataTable->filter('Sort', array(Metrics::INDEX_NB_VISITS));
- $dataTable->queueFilter('ReplaceColumnNames');
- $dataTable->queueFilter('ReplaceSummaryRowLabel');
- return $dataTable;
- }
-
/**
* @deprecated since 2.10.0 See {@link Piwik\Plugins\Resolution\API} for new implementation.
*/
@@ -77,7 +54,6 @@ class API extends \Piwik\Plugin\API
}
/**
- * Gets a DataTable displaying number of visits by device type.
* @deprecated since 2.10.0 See {@link Piwik\Plugins\DevicesDetector\API} for new implementation.
*/
public function getMobileVsDesktop($idSite, $period, $date, $segment = false)
@@ -117,20 +93,19 @@ class API extends \Piwik\Plugin\API
return \Piwik\Plugins\DevicePlugins\API::getInstance()->getPlugin($idSite, $period, $date, $segment);
}
+ /**
+ * @deprecated since 2.11.0 See {@link Piwik\Plugins\UserLanguage\API} for new implementation.
+ */
public function getLanguage($idSite, $period, $date, $segment = false)
{
- $dataTable = $this->getDataTable(Archiver::LANGUAGE_RECORD_NAME, $idSite, $period, $date, $segment);
- $dataTable->filter('GroupBy', array('label', __NAMESPACE__ . '\groupByLangCallback'));
- $dataTable->filter('ColumnCallbackReplace', array('label', __NAMESPACE__ . '\languageTranslate'));
-
- return $dataTable;
+ return \Piwik\Plugins\UserLanguage\API::getInstance()->getLanguage($idSite, $period, $date, $segment);
}
+ /**
+ * @deprecated since 2.11.0 See {@link Piwik\Plugins\UserLanguage\API} for new implementation.
+ */
public function getLanguageCode($idSite, $period, $date, $segment = false)
{
- $dataTable = $this->getDataTable(Archiver::LANGUAGE_RECORD_NAME, $idSite, $period, $date, $segment);
- $dataTable->filter('ColumnCallbackReplace', array('label', __NAMESPACE__ . '\languageTranslateWithCode'));
-
- return $dataTable;
+ return \Piwik\Plugins\UserLanguage\API::getInstance()->getLanguageCode($idSite, $period, $date, $segment);
}
}
diff --git a/plugins/UserSettings/Controller.php b/plugins/UserSettings/Controller.php
index 33640a55fb..ba18becf5b 100644
--- a/plugins/UserSettings/Controller.php
+++ b/plugins/UserSettings/Controller.php
@@ -10,7 +10,7 @@ namespace Piwik\Plugins\UserSettings;
use Piwik\Plugin\Manager as PluginManager;
use Piwik\Plugins\Resolution\Reports\GetConfiguration;
-use Piwik\Plugins\UserSettings\Reports\GetLanguage;
+use Piwik\Plugins\UserLanguage\Reports\GetLanguage;
use Piwik\Plugins\DevicePlugins\Reports\GetPlugin;
use Piwik\Plugins\Resolution\Reports\GetResolution;
use Piwik\View;
@@ -24,19 +24,20 @@ class Controller extends \Piwik\Plugin\Controller
{
$view = new View('@UserSettings/index');
- $isDeviceDetectionEnabled = PluginManager::getInstance()->isPluginLoaded('DevicesDetection');
+ $isDeviceDetectionEnabled = PluginManager::getInstance()->isPluginActivated('DevicePlugins');
if ($isDeviceDetectionEnabled) {
$view->dataTablePlugin = $this->renderReport(new GetPlugin());
}
- $isResolutionEnabled = PluginManager::getInstance()->isPluginLoaded('Resolution');
+ $isResolutionEnabled = PluginManager::getInstance()->isPluginActivated('Resolution');
if ($isResolutionEnabled) {
$view->dataTableResolution = $this->renderReport(new GetResolution());
$view->dataTableConfiguration = $this->renderReport(new GetConfiguration());
}
- $view->dataTableBrowserLanguage = $this->renderReport(new GetLanguage());
-
+ if (PluginManager::getInstance()->isPluginActivated('UserLanguage')) {
+ $view->dataTableBrowserLanguage = $this->renderReport(new GetLanguage());
+ }
return $view->render();
}
}
diff --git a/plugins/UserSettings/Segment.php b/plugins/UserSettings/Segment.php
deleted file mode 100644
index 194ab6314a..0000000000
--- a/plugins/UserSettings/Segment.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?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\UserSettings;
-
-/**
- * UserSettings segment base class.
- *
- */
-class Segment extends \Piwik\Plugin\Segment
-{
- protected function init()
- {
- $this->setCategory('General_Visit');
- }
-}
diff --git a/plugins/UserSettings/UserSettings.php b/plugins/UserSettings/UserSettings.php
index cb034c7d94..7c90528502 100644
--- a/plugins/UserSettings/UserSettings.php
+++ b/plugins/UserSettings/UserSettings.php
@@ -23,7 +23,6 @@ class UserSettings extends \Piwik\Plugin
public function getListHooksRegistered()
{
return array(
- 'Metrics.getDefaultMetricTranslations' => 'addMetricTranslations',
'Request.getRenamedModuleAndAction' => 'renameDeprecatedModuleAndAction',
);
}
@@ -55,18 +54,12 @@ class UserSettings extends \Piwik\Plugin
$module = 'Resolution';
}
+ if ($module == 'UserSettings' && ($action == 'getLanguage' || $action == 'getLanguageCode')) {
+ $module = 'UserLanguage';
+ }
+
if ($module == 'UserSettings' && $action == 'getPlugin') {
$module = 'DevicePlugins';
}
}
-
- public function addMetricTranslations(&$translations)
- {
- $metrics = array(
- 'nb_visits_percentage' => Piwik::translate('General_ColumnPercentageVisits')
- );
-
- $translations = array_merge($translations, $metrics);
- }
-
}
diff --git a/plugins/UserSettings/lang/en.json b/plugins/UserSettings/lang/en.json
index de1005438b..0dde158fc4 100644
--- a/plugins/UserSettings/lang/en.json
+++ b/plugins/UserSettings/lang/en.json
@@ -1,192 +1,5 @@
{
"UserSettings": {
- "BrowserLanguage": "Browser language",
- "Language_aa": "Afar",
- "Language_ab": "Abkhazian",
- "Language_ae": "Avestan",
- "Language_af": "Afrikaans",
- "Language_ak": "Akan",
- "Language_am": "Amharic",
- "Language_an": "Aragonese",
- "Language_ar": "Arabic",
- "Language_as": "Assamese",
- "Language_av": "Avaric",
- "Language_ay": "Aymara",
- "Language_az": "Azerbaijani",
- "Language_ba": "Bashkir",
- "Language_be": "Belarusian",
- "Language_bg": "Bulgarian",
- "Language_bh": "Bihari",
- "Language_bi": "Bislama",
- "Language_bm": "Bambara",
- "Language_bn": "Bengali",
- "Language_bo": "Tibetan",
- "Language_br": "Breton",
- "Language_bs": "Bosnian",
- "Language_ca": "Catalan",
- "Language_ce": "Chechen",
- "Language_ch": "Chamorro",
- "Language_co": "Corsican",
- "Language_cr": "Cree",
- "Language_cs": "Czech",
- "Language_cu": "Church Slavic",
- "Language_cv": "Chuvash",
- "Language_cy": "Welsh",
- "Language_da": "Danish",
- "Language_de": "German",
- "Language_dv": "Divehi",
- "Language_dz": "Dzongkha",
- "Language_ee": "Ewe",
- "Language_el": "Greek",
- "Language_en": "English",
- "Language_eo": "Esperanto",
- "Language_es": "Spanish",
- "Language_et": "Estonian",
- "Language_eu": "Basque",
- "Language_fa": "Persian",
- "Language_ff": "Fulah",
- "Language_fi": "Finnish",
- "Language_fj": "Fijian",
- "Language_fo": "Faroese",
- "Language_fr": "French",
- "Language_fy": "Western Frisian",
- "Language_ga": "Irish",
- "Language_gd": "Scottish Gaelic",
- "Language_gl": "Galician",
- "Language_gn": "Guarani",
- "Language_gu": "Gujarati",
- "Language_gv": "Manx",
- "Language_ha": "Hausa",
- "Language_he": "Hebrew",
- "Language_hi": "Hindi",
- "Language_ho": "Hiri Motu",
- "Language_hr": "Croatian",
- "Language_ht": "Haitian Creole",
- "Language_hu": "Hungarian",
- "Language_hy": "Armenian",
- "Language_hz": "Herero",
- "Language_ia": "Interlingua",
- "Language_id": "Indonesian",
- "Language_ie": "Interlingue",
- "Language_ig": "Igbo",
- "Language_ii": "Sichuan Yi",
- "Language_ik": "Inupiaq",
- "Language_io": "Ido",
- "Language_is": "Icelandic",
- "Language_it": "Italian",
- "Language_iu": "Inuktitut",
- "Language_ja": "Japanese",
- "Language_jv": "Javanese",
- "Language_ka": "Georgian",
- "Language_kg": "Kongo",
- "Language_ki": "Kukuyu",
- "Language_kj": "Kuanyama",
- "Language_kk": "Kazakh",
- "Language_kl": "Greenlandic",
- "Language_km": "Central Khmer",
- "Language_kn": "Kannada",
- "Language_ko": "Korean",
- "Language_kr": "Kanuri",
- "Language_ks": "Kashmiri",
- "Language_ku": "Kurdish",
- "Language_kv": "Komi",
- "Language_kw": "Cornish",
- "Language_ky": "Kirghiz",
- "Language_la": "Latin",
- "Language_lb": "Luxembourgish",
- "Language_lg": "Ganda",
- "Language_li": "Limburgish",
- "Language_ln": "Lingala",
- "Language_lo": "Lao",
- "Language_lt": "Lithuanian",
- "Language_lu": "Luba-Katanga",
- "Language_lv": "Latvian",
- "Language_mg": "Malagasy",
- "Language_mh": "Marshallese",
- "Language_mi": "Maori",
- "Language_mk": "Macedonian",
- "Language_ml": "Malayalam",
- "Language_mn": "Mongolian",
- "Language_mr": "Marathi",
- "Language_ms": "Malay",
- "Language_mt": "Maltese",
- "Language_my": "Burmese",
- "Language_na": "Nauru",
- "Language_nb": "Norwegian Bokm\u00e5l",
- "Language_nd": "North Ndebele",
- "Language_ne": "Nepali",
- "Language_ng": "Ndonga",
- "Language_nl": "Dutch",
- "Language_nn": "Norwegian Nynorsk",
- "Language_no": "Norwegian",
- "Language_nr": "South Ndebele",
- "Language_nv": "Navajo",
- "Language_ny": "Chichewa",
- "Language_oc": "Occitan",
- "Language_oj": "Ojibwa",
- "Language_om": "Oroma",
- "Language_or": "Oriya",
- "Language_os": "Ossetian",
- "Language_pa": "Panjabi",
- "Language_pi": "Pali",
- "Language_pl": "Polish",
- "Language_ps": "Pashto",
- "Language_pt": "Portuguese",
- "Language_qu": "Quechua",
- "Language_rm": "Raeto-Romance",
- "Language_rn": "Rundi",
- "Language_ro": "Romanian",
- "Language_ru": "Russian",
- "Language_rw": "Kinyarwanda",
- "Language_sa": "Sanskrit",
- "Language_sc": "Sardinian",
- "Language_sd": "Sindhi",
- "Language_se": "Northern Sami",
- "Language_sg": "Sango",
- "Language_si": "Sinhala",
- "Language_sk": "Slovak",
- "Language_sl": "Slovenian",
- "Language_sm": "Samoan",
- "Language_sn": "Shona",
- "Language_so": "Somali",
- "Language_sq": "Albanian",
- "Language_sr": "Serbian",
- "Language_ss": "Swati",
- "Language_st": "Sotho",
- "Language_su": "Sundanese",
- "Language_sv": "Swedish",
- "Language_sw": "Swahili",
- "Language_ta": "Tamil",
- "Language_te": "Telugu",
- "Language_tg": "Tajik",
- "Language_th": "Thai",
- "Language_ti": "Tigrinya",
- "Language_tk": "Turkmen",
- "Language_tl": "Tagalog",
- "Language_tn": "Tswana",
- "Language_to": "Tonga",
- "Language_tr": "Turkish",
- "Language_ts": "Tsonga",
- "Language_tt": "Tatar",
- "Language_tw": "Twi",
- "Language_ty": "Tahitian",
- "Language_ug": "Uighur",
- "Language_uk": "Ukrainian",
- "Language_ur": "Urdu",
- "Language_uz": "Uzbek",
- "Language_ve": "Venda",
- "Language_vi": "Vietnamese",
- "Language_vo": "Volap\u00fck",
- "Language_wa": "Walloon",
- "Language_wo": "Wolof",
- "Language_xh": "Xhosa",
- "Language_yi": "Yiddish",
- "Language_yo": "Yoruba",
- "Language_za": "Chuang",
- "Language_zh": "Chinese",
- "Language_zu": "Zulu",
- "LanguageCode": "Language code",
- "PluginDescription": "Reports various User Settings: Browser, Browser Family, Operating System, Plugins, Resolution, Global Settings.",
- "VisitorSettings": "Visitor Settings"
+ "PluginDescription": "<i><b>Deprecated</b> Provides only fallbacks for deprecated methods. Will be removed in May 2015</i>"
}
} \ No newline at end of file
diff --git a/plugins/UserSettings/templates/index.twig b/plugins/UserSettings/templates/index.twig
index c97562910e..e64d8e52a8 100644
--- a/plugins/UserSettings/templates/index.twig
+++ b/plugins/UserSettings/templates/index.twig
@@ -5,7 +5,7 @@
{% endif %}
{% if dataTableBrowserLanguage|default is not empty %}
- <h2 piwik-enriched-headline>{{ 'UserSettings_BrowserLanguage'|translate }}</h2>
+ <h2 piwik-enriched-headline>{{ 'UserLanguage_BrowserLanguage'|translate }}</h2>
{{ dataTableBrowserLanguage|raw }}
{% endif %}
</div>
diff --git a/plugins/UserSettings/tests/System/processed/.gitkeep b/plugins/UserSettings/tests/System/processed/.gitkeep
deleted file mode 100644
index e69de29bb2..0000000000
--- a/plugins/UserSettings/tests/System/processed/.gitkeep
+++ /dev/null
diff --git a/plugins/UsersManager/lang/cs.json b/plugins/UsersManager/lang/cs.json
index 338cf6d7e2..71d117e5d9 100644
--- a/plugins/UsersManager/lang/cs.json
+++ b/plugins/UsersManager/lang/cs.json
@@ -3,6 +3,7 @@
"AddUser": "Přidat nového uživatele",
"Alias": "Alias",
"AllWebsites": "Všechny weby",
+ "AnonymousUser": "Anonymní uživatel",
"AnonymousUserHasViewAccess": "Poznámka: %1$s uživatel má právo k přístupu k %2$s",
"AnonymousUserHasViewAccess2": "Vaše analytická hlášení a informace o návštěvnících je veřejně dostupná.",
"ApplyToAllWebsites": "Použít na všechny weby",
@@ -43,6 +44,7 @@
"MenuUserSettings": "Nastavení uživatele",
"NoteNoAnonymousUserAccessSettingsWontBeUsed2": "Poznámka: Nemůžete měnit nastavení v této sekci, protože žádná z vašich stránek nemůže být zobrazena anonymním uživatelem.",
"NoUsersExist": "Zatím nejsou žádní uživatelé.",
+ "PersonalSettings": "Osobní nastavení",
"PluginDescription": "Správa uživatelů v Piwiku: přidat nového uživatele, upravit existujícícho, aktualizace oprávnění. Všechny akce jsou k dizpozici přes API",
"PrivAdmin": "Administrátor",
"PrivNone": "Žádné oprávnění",
diff --git a/plugins/UsersManager/lang/da.json b/plugins/UsersManager/lang/da.json
index 3d89a17b2f..c70a6fcdd0 100644
--- a/plugins/UsersManager/lang/da.json
+++ b/plugins/UsersManager/lang/da.json
@@ -3,6 +3,7 @@
"AddUser": "Opret ny bruger",
"Alias": "Alias",
"AllWebsites": "Alle hjemmesider",
+ "AnonymousUser": "Anonym bruger",
"AnonymousUserHasViewAccess": "Bemærk: %1$s bruger har %2$s adgang til hjemmesiden.",
"AnonymousUserHasViewAccess2": "Analyserapporter og besøgendes oplysninger er offentligt tilgængelige.",
"ApplyToAllWebsites": "Tilføj til alle hjemmesider",
@@ -43,6 +44,7 @@
"MenuUserSettings": "Bruger indstillinger",
"NoteNoAnonymousUserAccessSettingsWontBeUsed2": "Bemærk: Indstillingerne kan ikke ændres i denne del, fordi der ikke er en hjemmeside, der kan tilgås af den anonyme bruger.",
"NoUsersExist": "Der er endnu ingen brugere.",
+ "PersonalSettings": "Personlige indstillinger",
"PluginDescription": "Brugere styring i Piwik: tilføje en ny bruger, redigere en eksisterende, opdatere tilladelserne. Alle handlinger er også tilgængelige via API.",
"PrivAdmin": "Administration",
"PrivNone": "Ingen adgang",
diff --git a/plugins/UsersManager/lang/el.json b/plugins/UsersManager/lang/el.json
index 3533237707..9e07c5531b 100644
--- a/plugins/UsersManager/lang/el.json
+++ b/plugins/UsersManager/lang/el.json
@@ -3,6 +3,7 @@
"AddUser": "Προσθήκη νέου χρήστη",
"Alias": "Ψευδώνυμο",
"AllWebsites": "Όλες οι ιστοσελίδες",
+ "AnonymousUser": "Ανώνυμος χρήστης",
"AnonymousUserHasViewAccess": "Σημείωση: ο %1$s χρήστης έχει %2$s πρόσβαση στον ιστοτόπο.",
"AnonymousUserHasViewAccess2": "Οι αναφορές στατιστικών σας και οι πληροφορίες για τους επισκέπτες είναι δημόσια προσπελάσιμες.",
"ApplyToAllWebsites": "Εφαρμογή σε όλες τις ιστοσελίδες",
@@ -43,6 +44,7 @@
"MenuUserSettings": "Ρυθμίσεις χρήστη",
"NoteNoAnonymousUserAccessSettingsWontBeUsed2": "Σημείωση: Δεν μπορείτε να αλλάξετε τις ρυθμίσεις σε αυτό τον τομέα γιατί δεν έχετε κάποια ιστοσελίδα που μπορείτε να έχετε πρόσβαση ως ανώνυμος χρήστης.",
"NoUsersExist": "Δεν υπάρχουν ακόμη χρήστες.",
+ "PersonalSettings": "Προσωπικές ρυθμίσεις",
"PluginDescription": "Διαχείριση Χρηστών στο Piwik: προσθήκη ενός νέου Χρήστη, επεξεργασία ενός υπάρχοντος χρήστη, αναβαθμίστε τα δικαιώματα. Όλες οι δραστηριότητες είναι επίσης διαθέσιμες μέσω του API.",
"PrivAdmin": "Διαχείριση",
"PrivNone": "Χωρίς πρόσβαση",
diff --git a/plugins/UsersManager/lang/pl.json b/plugins/UsersManager/lang/pl.json
index 23487ca7e7..f45d493ceb 100644
--- a/plugins/UsersManager/lang/pl.json
+++ b/plugins/UsersManager/lang/pl.json
@@ -38,6 +38,8 @@
"PrivView": "Widok",
"ReportDateToLoadByDefault": "Data raportu jako domyślna do wczytania, dotyczy",
"ReportToLoadByDefault": "Raport jako domyślny do wczytania",
+ "SuperUserAccessManagement": "Zarządzaj dostępem Super Użytkowników",
+ "SuperUserAccessManagementMainDescription": "Super Użytkownicy mają najwyższe uprawnienia w systemie. Mogą zarządzać wszystkimi zadaniami jak: dodawanie strony do monitoringu, użytkowników, aktywowaći deaktywować wtyczki, zmieniać uprawnienia innym użytkownikom, a także instalować nowe wtyczki z Marketu.",
"TheLoginScreen": "Ekran logowania",
"ThereAreCurrentlyNRegisteredUsers": "Obecnie znajduje się %s zarejestrowanych użytkowników.",
"TypeYourPasswordAgain": "Wpisz nowe hasło ponownie.",
diff --git a/plugins/VisitTime/Reports/GetByDayOfWeek.php b/plugins/VisitTime/Reports/GetByDayOfWeek.php
index c720166cf5..d695ba5a7e 100644
--- a/plugins/VisitTime/Reports/GetByDayOfWeek.php
+++ b/plugins/VisitTime/Reports/GetByDayOfWeek.php
@@ -39,6 +39,8 @@ class GetByDayOfWeek extends Base
$view->config->show_footer_message = Piwik::translate('General_ReportGeneratedFrom', $this->getDateRangeForFooterMessage());
$view->config->addTranslation('label', $this->dimension->getName());
+ $view->config->disable_row_evolution = true;
+
if ($view->isViewDataTableId(Graph::ID)) {
$view->config->max_graph_elements = false;
$view->config->show_all_ticks = true;
diff --git a/plugins/VisitorGenerator b/plugins/VisitorGenerator
-Subproject 9834e8fffbd1293818a813f003c5f3a08181cdf
+Subproject a292a7fe8b815ffe43ea9fd47940938c6bc2fa6
diff --git a/plugins/Widgetize/Controller.php b/plugins/Widgetize/Controller.php
index 5b1d31b586..5dd61a66c7 100644
--- a/plugins/Widgetize/Controller.php
+++ b/plugins/Widgetize/Controller.php
@@ -30,7 +30,7 @@ class Controller extends \Piwik\Plugin\Controller
public function testJsInclude1()
{
$view = new View('@Widgetize/testJsInclude1');
- $view->url1 = '?module=Widgetize&action=js&moduleToWidgetize=UserSettings&actionToWidgetize=getBrowser&idSite=1&period=day&date=yesterday';
+ $view->url1 = '?module=Widgetize&action=js&moduleToWidgetize=DevicesDetection&actionToWidgetize=getBrowsers&idSite=1&period=day&date=yesterday';
$view->url2 = '?module=Widgetize&action=js&moduleToWidgetize=API&actionToWidgetize=index&method=ExamplePlugin.getGoldenRatio&format=original';
return $view->render();
}
@@ -38,7 +38,7 @@ class Controller extends \Piwik\Plugin\Controller
public function testJsInclude2()
{
$view = new View('@Widgetize/testJsInclude2');
- $view->url1 = '?module=Widgetize&action=js&moduleToWidgetize=UserSettings&actionToWidgetize=getBrowser&idSite=1&period=day&date=yesterday';
+ $view->url1 = '?module=Widgetize&action=js&moduleToWidgetize=DevicesDetection&actionToWidgetize=getBrowsers&idSite=1&period=day&date=yesterday';
$view->url2 = '?module=Widgetize&action=js&moduleToWidgetize=UserCountry&actionToWidgetize=getCountry&idSite=1&period=day&date=yesterday&viewDataTable=cloud&show_footer=0';
$view->url3 = '?module=Widgetize&action=js&moduleToWidgetize=Referrers&actionToWidgetize=getKeywords&idSite=1&period=day&date=yesterday&viewDataTable=table&show_footer=0';
return $view->render();
diff --git a/tests/PHPUnit/BenchmarkTestCase.php b/tests/PHPUnit/BenchmarkTestCase.php
deleted file mode 100755
index a067a3286a..0000000000
--- a/tests/PHPUnit/BenchmarkTestCase.php
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-/**
- * Piwik - free/libre analytics platform
- *
- * @link http://piwik.org
- * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */
-
-/**
- * Base class for benchmarks.
- *
- * @deprecated since 2.10.0 use Piwik\Tests\Framework\TestCase\BenchmarkTestCase instead
- */
-abstract class BenchmarkTestCase extends \Piwik\Tests\Framework\TestCase\BenchmarkTestCase
-{
-}
diff --git a/tests/PHPUnit/ConsoleCommandTestCase.php b/tests/PHPUnit/ConsoleCommandTestCase.php
deleted file mode 100644
index 138e6e77eb..0000000000
--- a/tests/PHPUnit/ConsoleCommandTestCase.php
+++ /dev/null
@@ -1,16 +0,0 @@
-<?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\Tests;
-
-/**
- * @deprecated since 2.10.0 use \Piwik\Tests\Framework\TestCase\ConsoleCommandTestCase instead
- */
-class ConsoleCommandTestCase extends Framework\TestCase\ConsoleCommandTestCase
-{
-} \ No newline at end of file
diff --git a/tests/PHPUnit/DatabaseTestCase.php b/tests/PHPUnit/DatabaseTestCase.php
deleted file mode 100755
index 70a06ca303..0000000000
--- a/tests/PHPUnit/DatabaseTestCase.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-/**
- * Piwik - free/libre analytics platform
- *
- * @link http://piwik.org
- * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */
-
-/**
- * @deprecated since 2.8.0 use \Piwik\Tests\Framework\TestCase\IntegrationTestCase instead
- */
-class DatabaseTestCase extends \Piwik\Tests\Framework\TestCase\IntegrationTestCase
-{
-
- public static function setUpBeforeClass()
- {
- \Piwik\Log::debug('\DatabaseTestCase is deprecated since 2.8.0 extend \Piwik\Tests\Framework\TestCase\IntegrationTestCase instead');
-
- parent::setUpBeforeClass();
- }
-}
diff --git a/tests/PHPUnit/FakeAccess.php b/tests/PHPUnit/FakeAccess.php
deleted file mode 100644
index 66f58c795b..0000000000
--- a/tests/PHPUnit/FakeAccess.php
+++ /dev/null
@@ -1,18 +0,0 @@
-<?php
-/**
- * Piwik - free/libre analytics platform
- *
- * @link http://piwik.org
- * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */
-
-use \Piwik\Tests\Framework\Mock\FakeAccess as MockFakeAccess;
-
-/**
- * FakeAccess for UnitTests
- *
- * @deprecated since 2.10.0 use \Piwik\Tests\Framework\Mock\FakeAccess instead
- */
-class FakeAccess extends MockFakeAccess
-{
-} \ No newline at end of file
diff --git a/tests/PHPUnit/Fixture.php b/tests/PHPUnit/Fixture.php
deleted file mode 100644
index 4d15574808..0000000000
--- a/tests/PHPUnit/Fixture.php
+++ /dev/null
@@ -1,31 +0,0 @@
-<?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\Tests;
-use Piwik\Log;
-
-/**
- * @deprecated since 2.8.0 use \Piwik\Tests\Framework\Fixture instead
- */
-class Fixture extends Framework\Fixture
-{
-
- /** Adds data to Piwik. Creates sites, tracks visits, imports log files, etc. */
- public function setUp()
- {
- Log::warning('Piwik\Tests\Fixture is deprecated, use \Piwik\Tests\Framework\Fixture instead');
-
- parent::setUp();
- }
-}
-
-/**
- * @deprecated since 2.8.0 use \Piwik\Tests\Framework\OverrideLogin instead
- */
-class OverrideLogin extends Framework\OverrideLogin
-{
-} \ No newline at end of file
diff --git a/tests/PHPUnit/Framework/TestCase/IntegrationTestCase.php b/tests/PHPUnit/Framework/TestCase/IntegrationTestCase.php
index 8381aea43f..bbd76f453f 100644
--- a/tests/PHPUnit/Framework/TestCase/IntegrationTestCase.php
+++ b/tests/PHPUnit/Framework/TestCase/IntegrationTestCase.php
@@ -56,6 +56,7 @@ abstract class IntegrationTestCase extends SystemTestCase
{
static::configureFixture(static::$fixture);
parent::setUpBeforeClass();
+ static::beforeTableDataCached();
self::$tableData = self::getDbTablesWithData();
}
@@ -98,6 +99,11 @@ abstract class IntegrationTestCase extends SystemTestCase
$fixture->createSuperUser = false;
$fixture->configureComponents = false;
}
+
+ protected static function beforeTableDataCached()
+ {
+ // empty
+ }
}
IntegrationTestCase::$fixture = new Fixture(); \ No newline at end of file
diff --git a/tests/PHPUnit/Framework/TestCase/SystemTestCase.php b/tests/PHPUnit/Framework/TestCase/SystemTestCase.php
index d0932ec0cf..5826ab04ba 100755
--- a/tests/PHPUnit/Framework/TestCase/SystemTestCase.php
+++ b/tests/PHPUnit/Framework/TestCase/SystemTestCase.php
@@ -399,7 +399,7 @@ abstract class SystemTestCase extends PHPUnit_Framework_TestCase
* Assert that the response of an API method call is the same as the contents in an
* expected file.
*
- * @param string $api ie, `"UserSettings.getBrowser"`
+ * @param string $api ie, `"DevicesDetection.getBrowsers"`
* @param array $queryParams Query parameters to send to the API.
*/
public function assertApiResponseEqualsExpected($apiMethod, $queryParams)
diff --git a/tests/PHPUnit/Integration/ArchiveTest.php b/tests/PHPUnit/Integration/ArchiveTest.php
new file mode 100644
index 0000000000..b22a835f34
--- /dev/null
+++ b/tests/PHPUnit/Integration/ArchiveTest.php
@@ -0,0 +1,134 @@
+<?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\Tests\Integration;
+
+use Piwik\Archive;
+use Piwik\ArchiveProcessor\Rules;
+use Piwik\Common;
+use Piwik\Config;
+use Piwik\DataAccess\ArchiveTableCreator;
+use Piwik\Date;
+use Piwik\Db;
+use Piwik\Piwik;
+use Piwik\Tests\Fixtures\OneVisitorTwoVisits;
+use Piwik\Tests\Framework\Fixture;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
+
+/**
+ * @group Core
+ */
+class ArchiveTest extends IntegrationTestCase
+{
+ /**
+ * @var OneVisitorTwoVisits
+ */
+ public static $fixture;
+
+ public function tearDown()
+ {
+ parent::tearDown();
+
+ unset($_GET['trigger']);
+ }
+
+ protected static function configureFixture($fixture)
+ {
+ $fixture->createSuperUser = true;
+ }
+
+ protected static function beforeTableDataCached()
+ {
+ $date = Date::factory('2010-03-01');
+
+ $archiveTableCreator = new ArchiveTableCreator();
+ $archiveTableCreator->getBlobTable($date);
+ $archiveTableCreator->getNumericTable($date);
+ }
+
+ public function getForceOptionsForForceArchivingOnBrowserRequest()
+ {
+ return array(
+ array(1),
+ array(null)
+ );
+ }
+
+ /**
+ * @dataProvider getForceOptionsForForceArchivingOnBrowserRequest
+ */
+ public function test_ArchivingIsLaunchedForRanges_WhenForceOnBrowserRequest_IsTruthy($optionValue)
+ {
+ $this->archiveDataForIndividualDays();
+
+ Config::getInstance()->General['archiving_range_force_on_browser_request'] = $optionValue;
+ Rules::setBrowserTriggerArchiving(false);
+
+ $data = $this->initiateArchivingForRange();
+
+ $this->assertNotEmpty($data);
+ $this->assertArchiveTablesAreNotEmpty('2010_03');
+ }
+
+ public function test_ArchivingIsNotLaunchedForRanges_WhenForceOnBrowserRequest_IsFalse()
+ {
+ $this->archiveDataForIndividualDays();
+
+ Config::getInstance()->General['archiving_range_force_on_browser_request'] = 0;
+ Rules::setBrowserTriggerArchiving(false);
+
+ $data = $this->initiateArchivingForRange();
+
+ $this->assertEmpty($data);
+ $this->assertArchiveTablesAreEmpty('2010_03');
+ }
+
+ public function test_ArchiveIsLaunched_WhenForceOnBrowserRequest_IsFalse_AndArchivePhpTriggered()
+ {
+ $this->archiveDataForIndividualDays();
+
+ Config::getInstance()->General['archiving_range_force_on_browser_request'] = 0;
+ $_GET['trigger'] = 'archivephp';
+ Rules::setBrowserTriggerArchiving(false);
+
+ $data = $this->initiateArchivingForRange();
+
+ $this->assertNotEmpty($data);
+ $this->assertArchiveTablesAreNotEmpty('2010_03');
+ }
+
+ private function assertArchiveTablesAreNotEmpty($tableMonth)
+ {
+ $this->assertNotEquals(0, $this->getRangeArchiveTableCount('archive_numeric', $tableMonth));
+ }
+
+ private function assertArchiveTablesAreEmpty($tableMonth)
+ {
+ $this->assertEquals(0, $this->getRangeArchiveTableCount('archive_numeric', $tableMonth));
+ $this->assertEquals(0, $this->getRangeArchiveTableCount('archive_blob', $tableMonth));
+ }
+
+ private function getRangeArchiveTableCount($tableType, $tableMonth)
+ {
+ $table = Common::prefixTable($tableType . '_' . $tableMonth);
+ return Db::fetchOne("SELECT COUNT(*) FROM $table WHERE period = " . Piwik::$idPeriods['range']);
+ }
+
+ private function initiateArchivingForRange()
+ {
+ $archive = Archive::build(self::$fixture->idSite, 'range', '2010-03-04,2010-03-07');
+ return $archive->getNumeric('nb_visits');
+ }
+
+ private function archiveDataForIndividualDays()
+ {
+ $archive = Archive::build(self::$fixture->idSite, 'day', '2010-03-04,2010-03-07');
+ return $archive->getNumeric('nb_visits');
+ }
+}
+
+ArchiveTest::$fixture = new OneVisitorTwoVisits(); \ No newline at end of file
diff --git a/tests/PHPUnit/Integration/Plugin/ManagerTest.php b/tests/PHPUnit/Integration/Plugin/ManagerTest.php
index e9bd4ad801..e05c259cda 100644
--- a/tests/PHPUnit/Integration/Plugin/ManagerTest.php
+++ b/tests/PHPUnit/Integration/Plugin/ManagerTest.php
@@ -55,7 +55,7 @@ class ManagerTest extends IntegrationTestCase
public function test_loadTrackerPlugins_shouldBeAbleToLoadPluginsCorrectWhenItIsCached()
{
- $pluginsToLoad = array('CoreHome', 'UserSettings', 'Login', 'CoreAdminHome');
+ $pluginsToLoad = array('CoreHome', 'UserLanguage', 'Login', 'CoreAdminHome');
$this->getCacheForTrackerPlugins()->save($this->trackerCacheId, $pluginsToLoad);
$pluginsToLoad = $this->manager->loadTrackerPlugins();
diff --git a/tests/PHPUnit/Integration/WidgetsListTest.php b/tests/PHPUnit/Integration/WidgetsListTest.php
index 22967a9d2d..340bb9abed 100644
--- a/tests/PHPUnit/Integration/WidgetsListTest.php
+++ b/tests/PHPUnit/Integration/WidgetsListTest.php
@@ -41,11 +41,11 @@ class WidgetsListTest extends IntegrationTestCase
'VisitsSummary_VisitsSummary' => 6,
'Live!' => 4,
'General_Visitors' => 12,
- 'UserSettings_VisitorSettings' => 5,
+ 'General_VisitorSettings' => 5,
'General_Actions' => 10,
'Events_Events' => 3,
'Actions_SubmenuSitesearch' => 5,
- 'Referrers_Referrers' => 7,
+ 'Referrers_Referrers' => 7,
'Goals_Goals' => 1,
'SEO' => 2,
'Example Widgets' => 4,
diff --git a/tests/PHPUnit/IntegrationTestCase.php b/tests/PHPUnit/IntegrationTestCase.php
deleted file mode 100644
index 47c2f16bff..0000000000
--- a/tests/PHPUnit/IntegrationTestCase.php
+++ /dev/null
@@ -1,22 +0,0 @@
-<?php
-/**
- * Piwik - free/libre analytics platform
- *
- * @link http://piwik.org
- * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- */
-
-/**
- * @deprecated since 2.8.0 extend \Piwik\Tests\Framework\TestCase\SystemTestCase instead
- */
-class IntegrationTestCase extends \Piwik\Tests\Framework\TestCase\SystemTestCase
-{
- public static function setUpBeforeClass()
- {
- \Piwik\Log::debug('\IntegrationTestCase is deprecated since 2.8.0 extend \Piwik\Tests\Framework\TestCase\SystemTestCase instead');
-
- parent::setUpBeforeClass();
- }
-}
-
-IntegrationTestCase::$fixture = new \Piwik\Tests\Framework\Fixture();
diff --git a/tests/PHPUnit/System/BlobReportLimitingTest.php b/tests/PHPUnit/System/BlobReportLimitingTest.php
index b539e111b8..f40305d1ad 100755
--- a/tests/PHPUnit/System/BlobReportLimitingTest.php
+++ b/tests/PHPUnit/System/BlobReportLimitingTest.php
@@ -37,7 +37,7 @@ class BlobReportLimitingTest extends SystemTestCase
'CustomVariables.getCustomVariables',
'Referrers.getReferrerType', 'Referrers.getKeywords', 'Referrers.getSearchEngines',
'Referrers.getWebsites', 'Referrers.getAll', /* TODO 'Referrers.getCampaigns', */
- 'UserSettings.getResolution', 'UserSettings.getConfiguration', 'DevicesDetection.getOsVersions',
+ 'Resolution.getResolution', 'Resolution.getConfiguration', 'DevicesDetection.getOsVersions',
'DevicesDetection.getBrowserVersions',
'UserCountry.getRegion', 'UserCountry.getCity',
);
diff --git a/tests/PHPUnit/System/PivotByQueryParamTest.php b/tests/PHPUnit/System/PivotByQueryParamTest.php
index e07ab83280..099f82fcf6 100644
--- a/tests/PHPUnit/System/PivotByQueryParamTest.php
+++ b/tests/PHPUnit/System/PivotByQueryParamTest.php
@@ -125,7 +125,7 @@ class PivotByQueryParamTest extends SystemTestCase
$this->markTestSkipped("Not working right now.");
- $this->assertApiResponseEqualsExpected("UserSettings.getBrowser", array( // should have logo metadata in output
+ $this->assertApiResponseEqualsExpected("DevicesDetection.getBrowsers", array( // should have logo metadata in output
'idSite' => self::$fixture->idSite,
'date' => Date::factory(self::$fixture->dateTime)->toString(),
'period' => 'week',
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs__UserLanguage.getLanguageCode_month.xml b/tests/PHPUnit/System/expected/test_ImportLogs__UserLanguage.getLanguageCode_month.xml
new file mode 100644
index 0000000000..55b8fea073
--- /dev/null
+++ b/tests/PHPUnit/System/expected/test_ImportLogs__UserLanguage.getLanguageCode_month.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<result>
+ <row>
+ <label>Unknown (xx)</label>
+ <nb_visits>35</nb_visits>
+ <nb_actions>40</nb_actions>
+ <max_actions>3</max_actions>
+ <sum_visit_length>550</sum_visit_length>
+ <bounce_count>31</bounce_count>
+ <nb_visits_converted>31</nb_visits_converted>
+ <sum_daily_nb_uniq_visitors>34</sum_daily_nb_uniq_visitors>
+ <sum_daily_nb_users>2</sum_daily_nb_users>
+ </row>
+</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs__UserLanguage.getLanguage_month.xml b/tests/PHPUnit/System/expected/test_ImportLogs__UserLanguage.getLanguage_month.xml
new file mode 100644
index 0000000000..b8dd5583e4
--- /dev/null
+++ b/tests/PHPUnit/System/expected/test_ImportLogs__UserLanguage.getLanguage_month.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<result>
+ <row>
+ <label>Unknown</label>
+ <nb_visits>35</nb_visits>
+ <nb_actions>40</nb_actions>
+ <max_actions>3</max_actions>
+ <sum_visit_length>550</sum_visit_length>
+ <bounce_count>31</bounce_count>
+ <nb_visits_converted>31</nb_visits_converted>
+ <sum_daily_nb_uniq_visitors>34</sum_daily_nb_uniq_visitors>
+ <sum_daily_nb_users>2</sum_daily_nb_users>
+ </row>
+</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__UserLanguage.getLanguageCode_day.xml b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__UserLanguage.getLanguageCode_day.xml
new file mode 100644
index 0000000000..b5d5e44542
--- /dev/null
+++ b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__UserLanguage.getLanguageCode_day.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<result>
+ <row>
+ <label>French (fr)</label>
+ <nb_uniq_visitors>1</nb_uniq_visitors>
+ <nb_visits>2</nb_visits>
+ <nb_actions>8</nb_actions>
+ <max_actions>7</max_actions>
+ <sum_visit_length>1621</sum_visit_length>
+ <bounce_count>1</bounce_count>
+ <nb_visits_converted>2</nb_visits_converted>
+ </row>
+</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__UserLanguage.getLanguage_day.xml b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__UserLanguage.getLanguage_day.xml
new file mode 100644
index 0000000000..a1a81bcc68
--- /dev/null
+++ b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits__UserLanguage.getLanguage_day.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<result>
+ <row>
+ <label>French</label>
+ <nb_uniq_visitors>1</nb_uniq_visitors>
+ <nb_visits>2</nb_visits>
+ <nb_actions>8</nb_actions>
+ <max_actions>7</max_actions>
+ <sum_visit_length>1621</sum_visit_length>
+ <bounce_count>1</bounce_count>
+ <nb_visits_converted>2</nb_visits_converted>
+ </row>
+</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_OneVisitor_LongUrlsTruncated__UserSettings.getPlugin_day.xml b/tests/PHPUnit/System/expected/test_OneVisitor_LongUrlsTruncated__UserSettings.getPlugin_day.xml
new file mode 100644
index 0000000000..000a410083
--- /dev/null
+++ b/tests/PHPUnit/System/expected/test_OneVisitor_LongUrlsTruncated__UserSettings.getPlugin_day.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<result>
+ <row>
+ <label>Cookie</label>
+ <nb_visits>7</nb_visits>
+ <nb_visits_percentage>100%</nb_visits_percentage>
+ <logo>plugins/DevicePlugins/images/plugins/cookie.gif</logo>
+ </row>
+ <row>
+ <label>Flash</label>
+ <nb_visits>7</nb_visits>
+ <nb_visits_percentage>100%</nb_visits_percentage>
+ <logo>plugins/DevicePlugins/images/plugins/flash.gif</logo>
+ </row>
+ <row>
+ <label>Autres</label>
+ <nb_visits>7</nb_visits>
+ <nb_visits_percentage>100%</nb_visits_percentage>
+ </row>
+</result> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_month.original.html b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_month.original.html
index 7bdeab9d38..1442ad9c23 100644
--- a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_month.original.html
+++ b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_month.original.html
@@ -60,12 +60,12 @@
</a>
</li>
<li>
- <a href="#UserSettings_getLanguage" style="text-decoration:none; color: rgb(13,13,13);">
+ <a href="#UserLanguage_getLanguage" style="text-decoration:none; color: rgb(13,13,13);">
Browser language
</a>
</li>
<li>
- <a href="#UserSettings_getLanguageCode" style="text-decoration:none; color: rgb(13,13,13);">
+ <a href="#UserLanguage_getLanguageCode" style="text-decoration:none; color: rgb(13,13,13);">
Language code
</a>
</li>
@@ -2208,7 +2208,7 @@
<a style="text-decoration:none; color: rgb(13,13,13); font-size: 9pt;" href="#reportTop">
Back to top
</a>
-<h2 id="UserSettings_getLanguage" style="color: rgb(13,13,13); font-size: 24pt; font-weight:normal;">
+<h2 id="UserLanguage_getLanguage" style="color: rgb(13,13,13); font-size: 24pt; font-weight:normal;">
Browser language
</h2>
@@ -2291,7 +2291,7 @@
<a style="text-decoration:none; color: rgb(13,13,13); font-size: 9pt;" href="#reportTop">
Back to top
</a>
-<h2 id="UserSettings_getLanguageCode" style="color: rgb(13,13,13); font-size: 24pt; font-weight:normal;">
+<h2 id="UserLanguage_getLanguageCode" style="color: rgb(13,13,13); font-size: 24pt; font-weight:normal;">
Language code
</h2>
diff --git a/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getReportMetadata_day.xml b/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getReportMetadata_day.xml
index c358cad903..efa250ecf4 100644
--- a/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getReportMetadata_day.xml
+++ b/tests/PHPUnit/System/expected/test_apiGetReportMetadata__API.getReportMetadata_day.xml
@@ -269,7 +269,7 @@
<row>
<category>Visitor Settings</category>
<name>Browser language</name>
- <module>UserSettings</module>
+ <module>UserLanguage</module>
<action>getLanguage</action>
<dimension>Language</dimension>
<metrics>
@@ -290,14 +290,14 @@
<bounce_rate>Bounce Rate</bounce_rate>
<conversion_rate>Conversion Rate</conversion_rate>
</processedMetrics>
- <imageGraphUrl>index.php?module=API&amp;method=ImageGraph.get&amp;idSite=1&amp;apiModule=UserSettings&amp;apiAction=getLanguage&amp;period=day&amp;date=2009-01-04</imageGraphUrl>
- <imageGraphEvolutionUrl>index.php?module=API&amp;method=ImageGraph.get&amp;idSite=1&amp;apiModule=UserSettings&amp;apiAction=getLanguage&amp;period=day&amp;date=2008-12-06,2009-01-04</imageGraphEvolutionUrl>
- <uniqueId>UserSettings_getLanguage</uniqueId>
+ <imageGraphUrl>index.php?module=API&amp;method=ImageGraph.get&amp;idSite=1&amp;apiModule=UserLanguage&amp;apiAction=getLanguage&amp;period=day&amp;date=2009-01-04</imageGraphUrl>
+ <imageGraphEvolutionUrl>index.php?module=API&amp;method=ImageGraph.get&amp;idSite=1&amp;apiModule=UserLanguage&amp;apiAction=getLanguage&amp;period=day&amp;date=2008-12-06,2009-01-04</imageGraphEvolutionUrl>
+ <uniqueId>UserLanguage_getLanguage</uniqueId>
</row>
<row>
<category>Visitor Settings</category>
<name>Language code</name>
- <module>UserSettings</module>
+ <module>UserLanguage</module>
<action>getLanguageCode</action>
<dimension>Language</dimension>
<metrics>
@@ -318,9 +318,9 @@
<bounce_rate>Bounce Rate</bounce_rate>
<conversion_rate>Conversion Rate</conversion_rate>
</processedMetrics>
- <imageGraphUrl>index.php?module=API&amp;method=ImageGraph.get&amp;idSite=1&amp;apiModule=UserSettings&amp;apiAction=getLanguageCode&amp;period=day&amp;date=2009-01-04</imageGraphUrl>
- <imageGraphEvolutionUrl>index.php?module=API&amp;method=ImageGraph.get&amp;idSite=1&amp;apiModule=UserSettings&amp;apiAction=getLanguageCode&amp;period=day&amp;date=2008-12-06,2009-01-04</imageGraphEvolutionUrl>
- <uniqueId>UserSettings_getLanguageCode</uniqueId>
+ <imageGraphUrl>index.php?module=API&amp;method=ImageGraph.get&amp;idSite=1&amp;apiModule=UserLanguage&amp;apiAction=getLanguageCode&amp;period=day&amp;date=2009-01-04</imageGraphUrl>
+ <imageGraphEvolutionUrl>index.php?module=API&amp;method=ImageGraph.get&amp;idSite=1&amp;apiModule=UserLanguage&amp;apiAction=getLanguageCode&amp;period=day&amp;date=2008-12-06,2009-01-04</imageGraphEvolutionUrl>
+ <uniqueId>UserLanguage_getLanguageCode</uniqueId>
</row>
<row>
<category>API</category>
diff --git a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_week.original.html b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_week.original.html
index 7792107689..6b23888c12 100644
--- a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_week.original.html
+++ b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_week.original.html
@@ -60,12 +60,12 @@
</a>
</li>
<li>
- <a href="#UserSettings_getLanguage" style="text-decoration:none; color: rgb(13,13,13);">
+ <a href="#UserLanguage_getLanguage" style="text-decoration:none; color: rgb(13,13,13);">
Browser language
</a>
</li>
<li>
- <a href="#UserSettings_getLanguageCode" style="text-decoration:none; color: rgb(13,13,13);">
+ <a href="#UserLanguage_getLanguageCode" style="text-decoration:none; color: rgb(13,13,13);">
Language code
</a>
</li>
@@ -2199,7 +2199,7 @@
<a style="text-decoration:none; color: rgb(13,13,13); font-size: 9pt;" href="#reportTop">
Back to top
</a>
-<h2 id="UserSettings_getLanguage" style="color: rgb(13,13,13); font-size: 24pt; font-weight:normal;">
+<h2 id="UserLanguage_getLanguage" style="color: rgb(13,13,13); font-size: 24pt; font-weight:normal;">
Browser language
</h2>
@@ -2282,7 +2282,7 @@
<a style="text-decoration:none; color: rgb(13,13,13); font-size: 9pt;" href="#reportTop">
Back to top
</a>
-<h2 id="UserSettings_getLanguageCode" style="color: rgb(13,13,13); font-size: 24pt; font-weight:normal;">
+<h2 id="UserLanguage_getLanguageCode" style="color: rgb(13,13,13); font-size: 24pt; font-weight:normal;">
Language code
</h2>
diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserLanguage.getLanguageCode_day.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserLanguage.getLanguageCode_day.xml
new file mode 100644
index 0000000000..106f23f16b
--- /dev/null
+++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserLanguage.getLanguageCode_day.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<results>
+ <result date="2009-01-04" />
+ <result date="2009-01-05" />
+ <result date="2009-01-06" />
+ <result date="2009-01-07" />
+ <result date="2009-01-08" />
+ <result date="2009-01-09" />
+ <result date="2009-01-10" />
+</results> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserLanguage.getLanguageCode_week.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserLanguage.getLanguageCode_week.xml
new file mode 100644
index 0000000000..5cfb246edc
--- /dev/null
+++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserLanguage.getLanguageCode_week.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<results>
+ <result date="From 2008-12-29 to 2009-01-04" />
+ <result date="From 2009-01-05 to 2009-01-11" />
+ <result date="From 2009-01-12 to 2009-01-18" />
+ <result date="From 2009-01-19 to 2009-01-25" />
+ <result date="From 2009-01-26 to 2009-02-01" />
+ <result date="From 2009-02-02 to 2009-02-08" />
+ <result date="From 2009-02-09 to 2009-02-15" />
+</results> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserLanguage.getLanguage_day.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserLanguage.getLanguage_day.xml
new file mode 100644
index 0000000000..106f23f16b
--- /dev/null
+++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserLanguage.getLanguage_day.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<results>
+ <result date="2009-01-04" />
+ <result date="2009-01-05" />
+ <result date="2009-01-06" />
+ <result date="2009-01-07" />
+ <result date="2009-01-08" />
+ <result date="2009-01-09" />
+ <result date="2009-01-10" />
+</results> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserLanguage.getLanguage_week.xml b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserLanguage.getLanguage_week.xml
new file mode 100644
index 0000000000..5cfb246edc
--- /dev/null
+++ b/tests/PHPUnit/System/expected/test_noVisit_PeriodIsLast__UserLanguage.getLanguage_week.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<results>
+ <result date="From 2008-12-29 to 2009-01-04" />
+ <result date="From 2009-01-05 to 2009-01-11" />
+ <result date="From 2009-01-12 to 2009-01-18" />
+ <result date="From 2009-01-19 to 2009-01-25" />
+ <result date="From 2009-01-26 to 2009-02-01" />
+ <result date="From 2009-02-02 to 2009-02-08" />
+ <result date="From 2009-02-09 to 2009-02-15" />
+</results> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_noVisit__UserLanguage.getLanguageCode_day.xml b/tests/PHPUnit/System/expected/test_noVisit__UserLanguage.getLanguageCode_day.xml
new file mode 100644
index 0000000000..c234bed59e
--- /dev/null
+++ b/tests/PHPUnit/System/expected/test_noVisit__UserLanguage.getLanguageCode_day.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<result /> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_noVisit__UserLanguage.getLanguage_day.xml b/tests/PHPUnit/System/expected/test_noVisit__UserLanguage.getLanguage_day.xml
new file mode 100644
index 0000000000..c234bed59e
--- /dev/null
+++ b/tests/PHPUnit/System/expected/test_noVisit__UserLanguage.getLanguage_day.xml
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<result /> \ No newline at end of file
diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__UserSettings.getConfiguration_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting__Resolution.getConfiguration_day.xml
index b90214c2e9..b90214c2e9 100644
--- a/tests/PHPUnit/System/expected/test_reportLimiting__UserSettings.getConfiguration_day.xml
+++ b/tests/PHPUnit/System/expected/test_reportLimiting__Resolution.getConfiguration_day.xml
diff --git a/tests/PHPUnit/System/expected/test_reportLimiting__UserSettings.getResolution_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting__Resolution.getResolution_day.xml
index 7b29bb6e65..7b29bb6e65 100644
--- a/tests/PHPUnit/System/expected/test_reportLimiting__UserSettings.getResolution_day.xml
+++ b/tests/PHPUnit/System/expected/test_reportLimiting__Resolution.getResolution_day.xml
diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__UserSettings.getConfiguration_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Resolution.getConfiguration_day.xml
index b90214c2e9..b90214c2e9 100644
--- a/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__UserSettings.getConfiguration_day.xml
+++ b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Resolution.getConfiguration_day.xml
diff --git a/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__UserSettings.getResolution_day.xml b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Resolution.getResolution_day.xml
index 7b29bb6e65..7b29bb6e65 100644
--- a/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__UserSettings.getResolution_day.xml
+++ b/tests/PHPUnit/System/expected/test_reportLimiting_rankingQuery__Resolution.getResolution_day.xml
diff --git a/tests/PHPUnit/UI b/tests/PHPUnit/UI
deleted file mode 160000
-Subproject 5d9d1d6691b4f0ebeb0496c3daa077d59200a9d
diff --git a/tests/PHPUnit/Unit/DeprecatedMethodsTest.php b/tests/PHPUnit/Unit/DeprecatedMethodsTest.php
index 94e265c9a1..ffc1418631 100644
--- a/tests/PHPUnit/Unit/DeprecatedMethodsTest.php
+++ b/tests/PHPUnit/Unit/DeprecatedMethodsTest.php
@@ -20,7 +20,7 @@ use ReflectionClass;
*/
class DeprecatedMethodsTest extends \PHPUnit_Framework_TestCase
{
- public function test_version2_0_4()
+ public function test_deprecations()
{
$validTill = '2015-02-25';
$this->assertDeprecatedMethodIsRemoved('\Piwik\Period', 'factory', $validTill);
@@ -65,6 +65,8 @@ class DeprecatedMethodsTest extends \PHPUnit_Framework_TestCase
$this->assertDeprecatedMethodIsRemoved('Piwik\Plugins\UserSettings\API', 'getResolution', $validTill);
$this->assertDeprecatedMethodIsRemoved('Piwik\Plugins\UserSettings\API', 'getConfiguration', $validTill);
$this->assertDeprecatedMethodIsRemoved('Piwik\Plugins\UserSettings\API', 'getPlugin', $validTill);
+ $this->assertDeprecatedMethodIsRemoved('Piwik\Plugins\UserSettings\API', 'getLanguage', $validTill);
+ $this->assertDeprecatedMethodIsRemoved('Piwik\Plugins\UserSettings\API', 'getLanguageCode', $validTill);
$this->assertDeprecatedMethodIsRemoved('Piwik\Plugins\UserSettings\UserSettings', 'renameDeprecatedModuleAndAction', $validTill);
$this->assertDeprecatedMethodIsRemovedInPiwik3('\Piwik\Menu\MenuAbstract', 'add');
diff --git a/tests/PHPUnit/bootstrap.php b/tests/PHPUnit/bootstrap.php
index 2795dc89ac..3e1cd4aa2f 100644
--- a/tests/PHPUnit/bootstrap.php
+++ b/tests/PHPUnit/bootstrap.php
@@ -34,10 +34,7 @@ if (!defined('PIWIK_INCLUDE_SEARCH_PATH')) {
require_once PIWIK_INCLUDE_PATH . '/core/bootstrap.php';
-require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/DatabaseTestCase.php';
-require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/IntegrationTestCase.php';
-require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/BenchmarkTestCase.php';
-require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/FakeAccess.php';
+require_once PIWIK_INCLUDE_PATH . '/libs/PiwikTracker/PiwikTracker.php';
require_once PIWIK_INCLUDE_PATH . '/tests/PHPUnit/TestingEnvironment.php';
if (getenv('PIWIK_USE_XHPROF') == 1) {
@@ -49,7 +46,7 @@ StaticContainer::setEnvironment('test');
// require test fixtures
$fixturesToLoad = array(
- '/tests/PHPUnit/UI/Fixtures/*.php',
+ '/tests/UI/Fixtures/*.php',
'/plugins/*/tests/Fixtures/*.php',
'/plugins/*/Test/Fixtures/*.php',
);
@@ -117,6 +114,7 @@ Try again.";
// The SQL error is for Travis...
|| strpos($response, 'Table &#039;piwik_tests.option&#039; doesn&#039;t exist') !== false
|| strpos($response, 'Table &#039;piwik_tests.piwiktests_option&#039; doesn&#039;t exist') !== false
+ || strpos($response, 'Unknown database &#039;piwik_tests&#039;') !== false
) {
return;
diff --git a/tests/README.screenshots.md b/tests/README.screenshots.md
index 675d534cee..da3f7fd7a3 100644
--- a/tests/README.screenshots.md
+++ b/tests/README.screenshots.md
@@ -1,9 +1,10 @@
# Screenshots UI tests
Piwik contains UI tests that compare captured screenshots of URLs and UI controls with expected screenshots.
-If a captured screenshot does not match its expected screenshot, the build will fail.
+If a captured screenshot does not match its expected screenshot, the build will fail.
-Read on to learn how to run, manage and create screenshot tests.
+For a plugin developer documentation have a look here: https://developer.piwik.org/guides/tests-ui
+The remaining part of this document is rather Piwik Core Developer related.
## Fixing a broken build
@@ -18,7 +19,7 @@ then you should update the expected screenshots accordingly.
To fix a broken build, follow these steps:
- * Go to the UI tests travis build: [https://travis-ci.org/piwik/piwik-ui-tests](https://travis-ci.org/piwik/piwik-ui-tests)
+ * Go to the Tests travis build: [https://travis-ci.org/piwik/piwik](https://travis-ci.org/piwik/piwik) and select the build containing `TEST_SUITE=UITests`
* Find the build you are interested in. The UI tests build will be run for each commit in each branch, so if you're
looking to resolve a specific failure, you'll have to find the build for the commit you've made.
* In the build output, at the beginning of the test output, there will be a link to a image diff viewer. It will look something
@@ -32,71 +33,22 @@ To fix a broken build, follow these steps:
* If a change is not wanted, revert or fix your commit.
* If a change is correct, then you can set the new screenshot as the expected screenshot.
To do so, in the diffviewer.html page click on the "Processed" link for this screenshot.
- Then "Save this file as" and save it in the piwik/tests/PHPUnit/UI/expected-ui-screenshots/ directory.
+ Then "Save this file as" and save it in the piwik/tests/UI/expected-ui-screenshots/ directory.
(If the screenshot test is for a plugin and not Piwik Core, the expected screenshot should be added to the
plugin's expected screenshot directory. For example: piwik/plugins/DBStats/tests/UI/expected-ui-screenshots.)
_Note: When determining whether a screenshot is correct, the data displayed is not important. Report data correctness is verified through System and other PHP tests. The UI tests should only test UI behavior._
* Push the changes (to your code and/or to the expected-ui-screenshots directory.
- * Wait for next UI Tests build [on travis](https://travis-ci.org/piwik/piwik-ui-tests). Hopefully, the build should be green!
+ * Wait for next Test build [on travis](https://travis-ci.org/piwik/piwik). Hopefully, the build should be green!
_Note: the **development:sync-ui-test-screenshots** console command can be used to speed up the process. Run **./console help development:sync-ui-test-screenshots** to learn more._
-## <a name="setup"></a>Setup screenshots tests on your dev box
-
-These tests are in another repository but are included in Piwik as a submodule. To get the tests, run the following commands:
-
- $ git submodule init
- $ git submodule update
-
-In order to run UI tests, you need to have [phantomjs](http://phantomjs.org) version 1.9.0 or greater
-installed on your machine. You can download phantomjs [here](http://phantomjs.org/download.html). phantomjs is headless, so even if you're on a server without the X window system, you can still run the UI tests.
-
-To generate screenshots identical to those generated by Travis, we install some extra fonts. On Ubuntu run:
-
- $ sudo apt-get install ttf-mscorefonts-installer imagemagick imagemagick-doc
-
-Imagick is used to generate the "difference" screenshots which show which pixels have changed.
-
-Removing this font may be useful if your generated screenshots' fonts do not match the expected screenshots:
-
- $ sudo apt-get remove ttf-bitstream-vera
-
-### Configuring screenshot testing library
-
-The screenshot testing library's configuration resides in the tests/lib/screenshot-testing/config.js file.
-If your development environment's PHP executable isn't named `php`
-or your dev Piwik install isn't at `http://localhost/` you may need to edit the contents of this file.
-
-For example if Piwik is setup at `http://localhost/piwik` modify the config.js such as:
-```
-exports.piwikUrl = "http://localhost/piwik/";
-exports.phpServer = {
- HTTP_HOST: 'localhost',
- REQUEST_URI: '/piwik/',
- REMOTE_ADDR: '127.0.0.1'
-};
-
-```
-
## <a name="run-tests"></a>Running Tests
You can test the UI by running the following command in the root piwik directory:
$ ./console tests:run-ui
-This will run every UI test in Piwik Core as well as in each plugin directory.
-
-To run a single test, run:
-
- $ ./console tests:run-ui TestName
-
-where **TestName** is the name of a mocha test specification. For example, to run the tests within the Dashboard\_spec.js, run:
-
- $ ./console tests:run-ui Dashboard
-
-The test names to use is determined by the test itself in the calls to `describe(...`.
-
The following options may be useful if you plan on running the UI tests locally often:
* **--persist-fixture-data**: This will save the test data in a separate database so the setup only has to be run once.
@@ -104,136 +56,3 @@ The following options may be useful if you plan on running the UI tests locally
* **--drop**: If you've used --persist-fixture-data and need to re-setup the separate data, use this option with --persist-fixture-data.
* **--keep-symlinks**: If you want to visit the URLs of captured pages in a browser to diagnose failures use this option.
This will keep the recursive symlinks in tests/PHPUnit/proxy.
-
-## Writing Tests
-
-UI screenshot tests are run directly by phantomjs and are written using [mocha](http://visionmedia.github.io/mocha/) and [chai](http://chaijs.com).
-
-To create a new test, first decide whether it will belong to Piwik Core or a plugin. If it will belong to Piwik Core, the test should be placed within the [piwik-ui-tests](https://github.com/piwik/piwik-ui-tests) repository. Otherwise, it should be placed within tests/UI sub-directory of your plugin.
-
-All test files should have \_spec.js file name suffixes (for example, **ActionsDataTable\_spec.js**).
-
-Tests should be written using [BDD](http://en.wikipedia.org/wiki/Behavior-driven_development) style, for example:
-
- describe("TheControlImTesting", function () {
- // ...
- });
-
-Since screenshots can take a while to capture, you will want to override mocha's default timeout like this:
-
- describe("TheControlImTesting", function () {
- this.timeout(0);
-
- // ...
- });
-
-Each test should use Piwik's special chai extension to capture and compare screenshots:
-
- describe("TheControlImTesting", function () {
- this.timeout(0);
-
- var url = // ...
-
- it("should load correctly", function (done) {
- expect.screenshot("screenshot_name").to.be.capture(function (page) {
- page.load(url);
- }, done);
- });
- });
-
-If you want to compare a screenshot against an already existing expected screenshot you can do the following:
-
- it("should load correctly", function (done) {
- expect.screenshot("screenshot_to_comapre_against", "OptionalPrefix").to.be.capture("processed_screenshot_name", function (page) {
- page.load(url);
- }, done);
- });
-
-If you want to compare only parts (all content within an element / selector) of a page you can do the following:
-
- it("should load correctly", function (done) {
- expect.screenshot("screenshot_name").to.be.captureSelector("#content", function (page) {
- page.load(url);
- }, done);
- });
-
-If you want to compare a screenshot against an already existing expected screenshot and capture a selector you can do the following:
-
- it("should load correctly", function (done) {
- expect.screenshot("screenshot_name").to.be.captureSelector("processed_screenshot_name", "#content", function (page) {
- page.load(url);
- }, done);
- });
-
-### <a name="manipulating-pages"></a>Manipulating Pages Before Capture
-
-The callback supplied to the `capture()` function accepts one argument: the page renderer. You can use this object to queue events to be sent to the page before taking a screenshot. For example:
-
- .capture(function (page) {
- page.click('.myDropDown');
- page.mouseMove('.someOtherElement');
- }, done);
-
-After each event the page renderer will wait for all AJAX requests to finish and for all images to load and then will wait 1s longer for any JavaScript to finish. If you want to wait longer, you can supply an extra wait time (in milliseconds) to the event queuing call:
-
- .capture(function (page) {
- page.click('.something');
- page.click('.myReallyLongRunningJavaScriptFunctionButton', 10000); // will wait for 10s
- }, done);
-
-_Note: phantomjs has its quirks and you may have to hack around to get certain behavior to work. For example, clicking a &lt;select&gt; will not open the dropdown, so dropdowns have to be manipulated via JavaScript within the page (ie, the .evaluate() method)._
-
-**Page Renderer Object Methods**
-
-The page renderer object has the following methods:
-
- * **click(selector, [modifiers], [waitTime])**: Sends a click to the element referenced by `selector`. Modifiers is an array of strings that can be used to specify keys that are pressed at the same time. Currently only `'shift'` is supported.
- * **mouseMove(selector, [waitTime])**: Sends a mouse move event to the element referenced by `selector`.
- * **mousedown(selector, [waitTime])**: Sends a mouse down event to the element referenced by `selector`.
- * **mouseup(selector, [waitTime])**: Sends a mouse up event to the element referenced by `selector`.
- * **sendKeys(selector, keyString, [waitTime])**: Clicks an element to bring it into focus and then simulates typing a string of keys.
- * **sendMouseEvent(type, pos. [waitTime])**: Sends a mouse event by name to a specific position. `type` is the name of an event that phantomjs will recognize. `pos` is a point, eg, `{x: 0, y: 0}`.
- * **dragDrop(selectorStart, selectorEnd, waitTime)**: Performs a drag/drop of an element (mousedown, mousemove, mouseup) from the element referenced by `selectorStart` and the element referenced by `selectorEnd`.
- * **wait([waitTime])**: Waits without doing anything.
- * **load(url, [waitTime])**: Loads a URL.
- * **reload([waitTime])**: Reloads the current URL.
- * **evaluate(impl, [waitTime])**: Evaluates a function (`impl`) within a webpage. `impl` is an actual function, not a string and must take no arguments.
-
-All **selector**s are jQuery selectors, so you can use jQuery only filters such as `:eq`.
-
-All events are real events, not synthetic DOM events.
-
-### Manipulating the Test Environment
-
-Sometimes it will be necessary to manipulate Piwik for testing purposes. You may want to remove randomness, manipulate data or simulate certain situations (such as there being no config.ini.php file). This section describes how you can do that.
-
-**In your screenshot tests,** use the global **testEnvironment** object. You can use this object to call Piwik API methods using the **callApi(method, params, callback)** method and to call Piwik Controller methods using the **callController(method, params, callback)** method.
-
-You can communicate with PHP code by setting data on the testEnvironment object and calling **save()**, for example:
-
- testEnvironment.myTestVar = "abcdefg";
- testEnvironment.save();
-
-This data will be loaded by the **TestingEnvironment** PHP class.
-
-**In your Piwik plugin,** handle the **TestingEnvironment.addHooks** event and use the data in the TestingEnvironment object. for example:
-
- // event handler in a plugin descriptor class
- public function addTestHooks($testingEnvironment) {
- if ($testingEnvironment->myTestVar) {
- // ...
- }
- }
-
-_Note: the Piwik environment is not initialized when the **TestingEnvironment.addHooks** event is fired, so attempts to use the Config and other objects may fail. It is best to use Piwik::addAction to inject logic._
-
-The following are examples of test environment manipulation:
-
- * [Overlay_spec.js](https://github.com/piwik/piwik-ui-tests/blob/master/specs/Overlay_spec.js)
- * [Dashboard_spec.js](https://github.com/piwik/piwik-ui-tests/blob/master/specs/Dashboard_spec.js)
- * [Login_spec.js](https://github.com/piwik/piwik-ui-tests/blob/master/specs/Login_spec.js)
-
-## Learn more
-
-Check out this blog post to learn more about Screenshot Tests in Piwik:
-[QA Screenshot Testing blog post](http://piwik.org/blog/2013/10/our-latest-improvement-to-qa-screenshot-testing/)
diff --git a/tests/README.testing-data.md b/tests/README.testing-data.md
index 63431a3966..2f926b3966 100644
--- a/tests/README.testing-data.md
+++ b/tests/README.testing-data.md
@@ -1,16 +1,9 @@
As a developer it may be useful to generate test data. Follow these steps:
-1. Install Piwik
-2. Create a site with URL http://piwik.org/
-3. Create a Goal eg. URL Contains "blog"
-4. Import data from an anonimized test log file in piwik/tests/resources/ directory. Run the following command:
-
- $ python /home/piwik/misc/log-analytics/import_logs.py --url=http://localhost/path/ --idsite=1 --enable-http-errors --enable-http-redirects --enable-static --enable-bots /path/to/piwik/tests/resources/access.log-dev-anon-9-days-nov-2012.log.bz2
-
- This will import 9 days worth of data from Nov 20th-Nov 29th 2012.
-
-5. You can then archive the reports with:
-
- $ php5 /home/piwik/console core:archive --url=http://localhost/path/
-
-You should now have some interesting data to test with in November 2012!
+* Install Piwik, for help see [Setting up Piwik](http://developer.piwik.org/guides/getting-started-part-1#getting-setup-to-extend-piwik)
+* Install and activate the `VisitorGenerator` plugin via the Marketplace if needed
+* Generate websites `./console visitorgenerator:generate-websites --limit=50`
+* Generate users `./console visitorgenerator:generate-users --limit=50`
+* Generate goals for a website `./console visitorgenerator:generate-goals --idsite=1`
+* Generate visits for a website `./console visitorgenerator:generate-visits --idsite=1`
+* Trigger the archiving in case browser archiving is disabled `./console core:archive --url=http://localhost/path/`
diff --git a/tests/UI/.gitignore b/tests/UI/.gitignore
new file mode 100644
index 0000000000..7ad59df613
--- /dev/null
+++ b/tests/UI/.gitignore
@@ -0,0 +1,10 @@
+processed-ui-screenshots/*.png
+processed-ui-screenshots/**/*.png
+processed-ui-screenshots
+screenshot-diffs/*.png
+screenshot-diffs/diff*.html
+screenshot-diffs/jquery.js
+screenshot-diffs/resemble.js
+.idea/*
+php_errors.log
+config.js \ No newline at end of file
diff --git a/tests/UI/Fixtures/UpdaterTestFixture.php b/tests/UI/Fixtures/UpdaterTestFixture.php
new file mode 100644
index 0000000000..e2b3a0024e
--- /dev/null
+++ b/tests/UI/Fixtures/UpdaterTestFixture.php
@@ -0,0 +1,21 @@
+<?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\Tests\Fixtures;
+
+class UpdaterTestFixture extends SqlDump
+{
+ public function performSetUp($setupEnvironmentOnly = false)
+ {
+ $this->dumpUrl = PIWIK_INCLUDE_PATH . "/tests/UI/resources/piwik1.0.sql.gz";
+ $this->dropDatabaseInSetUp = true;
+ $this->resetPersistedFixture = true;
+
+ parent::performSetUp($setupEnvironmentOnly);
+ }
+} \ No newline at end of file
diff --git a/tests/lib/screenshot-testing/config.js b/tests/UI/config.dist.js
index 93aa763cf1..93aa763cf1 100644
--- a/tests/lib/screenshot-testing/config.js
+++ b/tests/UI/config.dist.js
diff --git a/tests/UI/expected-ui-screenshots b/tests/UI/expected-ui-screenshots
new file mode 160000
+Subproject e7b90c0fbdeb9eace9f57271b8218eb31c02cb4
diff --git a/tests/UI/resources/piwik1.0.sql.gz b/tests/UI/resources/piwik1.0.sql.gz
new file mode 100644
index 0000000000..dbaf9ec1e0
--- /dev/null
+++ b/tests/UI/resources/piwik1.0.sql.gz
Binary files differ
diff --git a/tests/UI/screenshot-diffs/diffgenerator.js b/tests/UI/screenshot-diffs/diffgenerator.js
new file mode 100644
index 0000000000..78063a6674
--- /dev/null
+++ b/tests/UI/screenshot-diffs/diffgenerator.js
@@ -0,0 +1,58 @@
+/**
+ * Piwik - free/libre analytics platform
+ *
+ * Diff generator
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+resemble.outputSettings({
+ errorColor: {
+ red: 255,
+ green: 0,
+ blue: 0,
+ alpha: 125
+ },
+ errorType: 'movement',
+ transparency: 0.3
+});
+
+function compareImages(expected, expectedGithub, processed)
+{
+ resemble(processed).compareTo(expected).onComplete(function(data){
+
+ var info = 'Mismatch percentage: ' + data.misMatchPercentage + '%';
+
+ if (data.dimensionDifference && !data.isSameDimensions) {
+ info += ' Dimension difference width: ' + data.dimensionDifference.width + ' height: ' + data.dimensionDifference.height;
+ }
+
+ $('.info').text(info);
+ $('.diff').attr('src', data.getImageDataUrl());
+ });
+
+ $('.processed').attr('src', encodeURI(processed));
+ $('.expected').attr('src', encodeURI(expected));
+ $('.expectedGithub').attr('src', 'https://raw.githubusercontent.com/piwik/piwik-ui-tests/master/' + encodeURI(expectedGithub));
+}
+
+function getUrlQueryParam(sParam) {
+ var query = window.location.search.substring(1);
+ var variables = query.split('&');
+
+ for (var index = 0; index < variables.length; index++) {
+
+ var paramName = variables[index].split('=');
+ if (paramName[0] == sParam) {
+ return paramName[1];
+ }
+ }
+}
+
+$(function () {
+ var processed = getUrlQueryParam('processed');
+ var expected = getUrlQueryParam('expected');
+ var github = getUrlQueryParam('github');
+ compareImages(expected, github, processed);
+}); \ No newline at end of file
diff --git a/tests/UI/screenshot-diffs/singlediff.html b/tests/UI/screenshot-diffs/singlediff.html
new file mode 100644
index 0000000000..a91ffa7a40
--- /dev/null
+++ b/tests/UI/screenshot-diffs/singlediff.html
@@ -0,0 +1,27 @@
+<html>
+<head>
+ <!-- loaded when on build-artifacts -->
+ <script src='jquery.js'></script>
+ <script src='resemble.js'></script>
+ <!-- loaded when viewing within piwik -->
+ <script src='../../../../libs/bower_components/jquery/dist/jquery.min.js'></script>
+ <script src='../../../../tests/lib/resemblejs/resemble.js'></script>
+ <script src='diffgenerator.js'></script>
+</head>
+<body>
+
+<span class="info"></span>
+<br />
+<br />
+<img class="diff">
+
+<h2>Processed</h2>
+<img class="processed">
+
+<h2>Expected</h2>
+<img class="expected">
+
+<h2>Expected GitHub</h2>
+<img class="expectedGithub">
+
+</body></html> \ No newline at end of file
diff --git a/tests/UI/specs/ActionsDataTable_spec.js b/tests/UI/specs/ActionsDataTable_spec.js
new file mode 100644
index 0000000000..71969c49c3
--- /dev/null
+++ b/tests/UI/specs/ActionsDataTable_spec.js
@@ -0,0 +1,78 @@
+/*!
+ * Piwik - free/libre analytics platform
+ *
+ * ActionsDataTable screenshot tests.
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+describe("ActionsDataTable", function () {
+ this.timeout(0);
+
+ var url = "?module=Widgetize&action=iframe&idSite=1&period=year&date=2012-08-09&moduleToWidgetize=Actions&actionToWidgetize=getPageUrls&isFooterExpandedInDashboard=1";
+
+ it("should load correctly", function (done) {
+ expect.screenshot('initial').to.be.capture(function (page) {
+ page.load(url);
+ }, done);
+ });
+
+ it("should sort column correctly when column header clicked", function (done) {
+ expect.screenshot('column_sorted').to.be.capture(function (page) {
+ page.click('th#avg_time_on_page');
+ }, done);
+ });
+
+ it("should load subtables correctly when row clicked", function (done) {
+ expect.screenshot('subtables_loaded').to.be.capture(function (page) {
+ page.click('tr.subDataTable:first');
+ page.click('tr.subDataTable:eq(2)');
+ }, done);
+ });
+
+ it("should flatten table when flatten link clicked", function (done) {
+ expect.screenshot('flattened').to.be.capture(function (page) {
+ page.mouseMove('.tableConfiguration');
+ page.click('.dataTableFlatten');
+ }, done);
+ });
+
+ // Test is skipped as it randomly fails http://builds-artifacts.piwik.org/ui-tests.master/2433.1/screenshot-diffs/diffviewer.html
+ it.skip("should exclude low population rows when exclude low population link clicked", function (done) {
+ expect.screenshot('exclude_low_population').to.be.capture(function (page) {
+ page.mouseMove('.tableConfiguration');
+ page.click('.dataTableExcludeLowPopulation');
+ }, done);
+ });
+
+ it("should load normal view when switch to view hierarchical view link is clicked", function (done) {
+ expect.screenshot('unflattened').to.be.capture(function (page) {
+ // exclude low population (copied from exclude_low_population test above as it was 'skipped')
+ page.mouseMove('.tableConfiguration');
+ page.click('.dataTableExcludeLowPopulation');
+
+ page.mouseMove('.tableConfiguration');
+ page.click('.dataTableFlatten');
+ }, done);
+ });
+
+ it("should display pageview percentages when hovering over pageviews column", function (done) {
+ expect.screenshot('pageview_percentages').to.be.capture(function (page) {
+ page.mouseMove('tr:eq(2) td.column:first');
+ }, done);
+ });
+
+ it("should display unique pageview percentages when hovering over unique pageviews column", function (done) {
+ expect.screenshot('unique_pageview_percentages').to.be.capture(function (page) {
+ page.mouseMove('tr:eq(2) td.column:eq(1)');
+ }, done);
+ });
+
+ it("should search through table when search input entered and search button clicked", function (done) {
+ expect.screenshot('search').to.be.capture(function (page) {
+ page.sendKeys('.dataTableSearchPattern>input[type=text]', 'i');
+ page.click('.dataTableSearchPattern>input[type=submit]');
+ }, done);
+ });
+}); \ No newline at end of file
diff --git a/tests/UI/specs/BarGraph_spec.js b/tests/UI/specs/BarGraph_spec.js
new file mode 100644
index 0000000000..0acdd15662
--- /dev/null
+++ b/tests/UI/specs/BarGraph_spec.js
@@ -0,0 +1,33 @@
+/*!
+ * Piwik - free/libre analytics platform
+ *
+ * Bar graph screenshot tests.
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+describe("BarGraph", function () {
+ this.timeout(0);
+
+ var url = "?module=Widgetize&action=iframe&moduleToWidgetize=Referrers&idSite=1&period=year&date=2012-08-09&"
+ + "actionToWidgetize=getKeywords&viewDataTable=graphVerticalBar&isFooterExpandedInDashboard=1";
+
+ it("should load correctly", function (done) {
+ expect.screenshot("load").to.be.capture(function (page) {
+ page.load(url);
+ }, done);
+ });
+
+ it("should display the metric picker on hover of metric picker icon", function (done) {
+ expect.screenshot('metric_picker_shown').to.be.capture(function (page) {
+ page.mouseMove('.jqplot-seriespicker');
+ }, done);
+ });
+
+ it("should display multiple metrics when another metric picked", function (done) {
+ expect.screenshot('other_metric').to.be.capture(function (page) {
+ page.click('.jqplot-seriespicker-popover input:not(:checked)');
+ }, done);
+ });
+}); \ No newline at end of file
diff --git a/tests/UI/specs/DBStats_spec.js b/tests/UI/specs/DBStats_spec.js
new file mode 100644
index 0000000000..81b815e14f
--- /dev/null
+++ b/tests/UI/specs/DBStats_spec.js
@@ -0,0 +1,20 @@
+/*!
+ * Piwik - free/libre analytics platform
+ *
+ * Screenshot tests for the DBStats plugin.
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+describe("DBStats", function () {
+ this.timeout(0);
+
+ var url = "?module=DBStats&action=index&idSite=1&period=day&date=yesterday";
+
+ it("should load correctly", function (done) {
+ expect.screenshot('admin_page').to.be.captureSelector('#content', function (page) {
+ page.load(url);
+ }, done);
+ });
+}); \ No newline at end of file
diff --git a/tests/UI/specs/DashboardManager_spec.js b/tests/UI/specs/DashboardManager_spec.js
new file mode 100644
index 0000000000..9ada832b83
--- /dev/null
+++ b/tests/UI/specs/DashboardManager_spec.js
@@ -0,0 +1,52 @@
+/*!
+ * Piwik - free/libre analytics platform
+ *
+ * Dashboard manager screenshot tests.
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+describe("DashboardManager", function () {
+
+ this.timeout(0);
+
+ var selectorToCapture = '.dashboard-manager';
+ var url = "?module=CoreHome&action=index&idSite=1&period=day&date=2012-01-01";
+
+ it("should load correctly", function (done) {
+ expect.screenshot("loaded").to.be.captureSelector(selectorToCapture, function (page) {
+ page.load(url);
+ }, done);
+ });
+
+ it("should expand when clicked", function (done) {
+ expect.screenshot("expanded").to.be.captureSelector(selectorToCapture, function (page) {
+ page.click('.dashboard-manager');
+ }, done);
+ });
+
+ it("should show widget for a category when category label hovered", function (done) {
+ expect.screenshot("widget_list_shown").to.be.captureSelector(selectorToCapture, function (page) {
+ page.mouseMove('.widgetpreview-categorylist>li:contains(Live!)'); // have to mouse move twice... otherwise Live! will just be highlighted
+ page.mouseMove('.widgetpreview-categorylist>li:contains(Visits Summary)');
+ }, done);
+ });
+
+ it("should load a widget preview when a widget is hovered", function (done) {
+ expect.screenshot("widget_preview").to.be.captureSelector(selectorToCapture, function (page) {
+ page.mouseMove('.widgetpreview-widgetlist>li:contains(Visits Over Time)');
+ }, done);
+ });
+
+ it("should close the manager when a widget is selected", function (done) {
+ expect.screenshot("loaded").to.be.captureSelector("widget_selected", selectorToCapture, function (page) {
+ // make sure selecting a widget does nothing
+ page.evaluate(function () {
+ $('.dashboard-manager').data('uiControlObject').widgetSelected = function () {};
+ });
+
+ page.click('.widgetpreview-widgetlist>li:contains(Visits Over Time)');
+ }, done);
+ });
+}); \ No newline at end of file
diff --git a/tests/UI/specs/Dashboard_spec.js b/tests/UI/specs/Dashboard_spec.js
new file mode 100644
index 0000000000..b485943449
--- /dev/null
+++ b/tests/UI/specs/Dashboard_spec.js
@@ -0,0 +1,216 @@
+/*!
+ * Piwik - free/libre analytics platform
+ *
+ * Dashboard screenshot tests.
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+// TODO: should move this & dashboard manager test to Dashboard plugin
+describe("Dashboard", function () {
+ this.timeout(0);
+
+ var url = "?module=Widgetize&action=iframe&idSite=1&period=year&date=2012-08-09&moduleToWidgetize=Dashboard&"
+ + "actionToWidgetize=index&idDashboard=5";
+
+ var removeAllExtraDashboards = function (done) {
+ testEnvironment.callController("Dashboard.getAllDashboards", {}, function (err, dashboards) {
+ dashboards = (dashboards || []).filter(function (dash) {
+ return parseInt(dash.iddashboard) > 5;
+ });
+
+ var removeDashboard = function (i) {
+ if (i >= dashboards.length) {
+ done();
+ return;
+ }
+
+ console.log("Removing dashboard ID = " + dashboards[i].iddashboard);
+ testEnvironment.callController("Dashboard.removeDashboard", {idDashboard: dashboards[i].iddashboard}, function () {
+ removeDashboard(i + 1);
+ });
+ };
+
+ removeDashboard(0);
+ });
+ };
+
+ var setup = function (done) {
+ // save empty layout for dashboard ID = 5
+ var layout = [
+ [
+ {
+ uniqueId: "widgetVisitsSummarygetEvolutionGraphcolumnsArray",
+ parameters: {module: "VisitsSummary", action: "getEvolutionGraph", columns: "nb_visits"}
+ }
+ ],
+ [],
+ []
+ ];
+
+ // TODO: should probably include an async lib
+ testEnvironment.callController("Dashboard.saveLayout", {name: 'D4', layout: JSON.stringify(layout), idDashboard: 5, idSite: 2}, function () {
+ // reset default widget selection
+ testEnvironment.callController("Dashboard.saveLayoutAsDefault", {layout: 0}, function () {
+ removeAllExtraDashboards(done);
+ });
+ });
+ };
+
+ before(setup);
+ after(setup);
+
+ it("should load correctly", function (done) {
+ expect.screenshot("loaded").to.be.capture(function (page) {
+ page.load(url, 5000);
+ }, done);
+ });
+
+ it("should move a widget when widget is drag & dropped", function (done) {
+ expect.screenshot("widget_move").to.be.capture(function (page) {
+ page.mousedown('.widgetTop');
+ page.mouseMove('#dashboardWidgetsArea > .col:eq(2)');
+ page.mouseup('#dashboardWidgetsArea > .col:eq(2)');
+ }, done);
+ });
+
+ it("should refresh widget when widget refresh icon clicked", function (done) {
+ expect.screenshot("widget_move").to.be.capture("widget_refresh", function (page) {
+ page.mouseMove('.widgetTop');
+ page.click('.button#refresh');
+ page.mouseMove('.dashboard-manager'); // let widget top hide again
+ }, done);
+ });
+
+ it("should minimise widget when widget minimise icon clicked", function (done) {
+ expect.screenshot("widget_minimised").to.be.capture(function (page) {
+ page.mouseMove('.widgetTop');
+ page.click('.button#minimise');
+ }, done);
+ });
+
+ it("should unminimise widget when widget maximise icon is clicked after being minimised", function (done) {
+ expect.screenshot("widget_move").to.be.capture("widget_unminimised", function (page) {
+ page.mouseMove('.widgetTop');
+ page.click('.button#maximise');
+ page.mouseMove('.dashboard-manager'); // let widget top hide again
+ }, done);
+ });
+
+ it("should maximise widget when widget maximise icon is clicked", function (done) {
+ expect.screenshot("widget_maximise").to.be.capture(function (page) {
+ page.mouseMove('.widgetTop');
+ page.click('.button#maximise');
+ }, done);
+ });
+
+ it("should close maximise dialog when minimise icon is clicked", function (done) {
+ expect.screenshot("widget_move").to.be.capture("widget_unmaximise", function (page) {
+ page.mouseMove('.widgetTop');
+ page.click('.button#minimise');
+ page.mouseMove('.dashboard-manager'); // let widget top hide again
+ }, done);
+ });
+
+ it("should add a widget when a widget is selected in the dashboard manager", function (done) {
+ expect.screenshot("widget_add_widget").to.be.capture(function (page) {
+ page.click('.dashboard-manager');
+
+ page.mouseMove('.widgetpreview-categorylist>li:contains(Live!)'); // have to mouse move twice... otherwise Live! will just be highlighted
+ page.mouseMove('.widgetpreview-categorylist>li:contains(Visits Summary)');
+
+ page.mouseMove('.widgetpreview-widgetlist>li:contains(Visits by Local Time)');
+
+ page.click('.widgetpreview-widgetlist>li:contains(Visits by Local Time)');
+ }, done);
+ });
+
+ it("should remove widget when remove widget icon is clicked", function (done) {
+ expect.screenshot("widget_move").to.be.capture("widget_removed", function (page) {
+ page.mouseMove('#widgetVisitTimegetVisitInformationPerLocalTime .widgetTop');
+ page.click('#widgetVisitTimegetVisitInformationPerLocalTime .button#close');
+ page.click('.ui-dialog button>span:contains(Yes)');
+ page.mouseMove('.dashboard-manager');
+ }, done);
+ });
+
+ it("should change dashboard layout when new layout is selected", function (done) {
+ expect.screenshot("change_layout").to.be.capture(function (page) {
+ page.click('.dashboard-manager');
+ page.click('li[data-action=showChangeDashboardLayoutDialog]');
+ page.click('div[layout=50-50]');
+ page.click('.ui-dialog button>span:contains(Save)', 3000);
+ }, done);
+ });
+
+ it("should rename dashboard when dashboard rename process completed", function (done) {
+ expect.screenshot("rename").to.be.capture(function (page) {
+ page.click('.dashboard-manager');
+ page.click('li[data-action=renameDashboard]');
+ page.evaluate(function () {
+ $('#newDashboardName').val('');
+ });
+ page.sendKeys('#newDashboardName', 'newname');
+
+ // sending a mouse event doesn't seem to work...
+ page.click('.ui-dialog[aria-describedby=renameDashboardConfirm] button>span:contains(Save)');
+ }, done);
+ });
+
+ it("should copy dashboard successfully when copy dashboard process completed", function (done) {
+ expect.screenshot("copied").to.be.capture(function (page) {
+ page.click('.dashboard-manager');
+ page.click('li[data-action=copyDashboardToUser]');
+ page.evaluate(function () {
+ $('#copyDashboardName').val('');
+ });
+ page.sendKeys('#copyDashboardName', 'newdash');
+ page.evaluate(function () {
+ $('#copyDashboardUser').val('superUserLogin');
+ });
+ page.click('.ui-dialog button>span:contains(Ok)');
+
+ page.load(url.replace("idDashboard=5", "idDashboard=6"));
+ }, done);
+ });
+
+ it("should reset dashboard when reset dashboard process completed", function (done) {
+ expect.screenshot("reset").to.be.capture(function (page) {
+ page.click('.dashboard-manager');
+ page.click('li[data-action=resetDashboard]');
+ page.click('.ui-dialog button>span:contains(Yes)', 10000);
+ page.mouseMove('.dashboard-manager');
+ }, done);
+ });
+
+ it("should remove dashboard when remove dashboard process completed", function (done) {
+ expect.screenshot("removed").to.be.capture(function (page) {
+ page.click('.dashboard-manager');
+ page.click('li[data-action=removeDashboard]');
+ page.click('.ui-dialog[aria-describedby=removeDashboardConfirm] button>span:contains(Yes)');
+ page.mouseMove('.dashboard-manager');
+ page.evaluate(function () {
+ $('.widgetTop').removeClass('widgetTopHover');
+ });
+ }, done);
+ });
+
+ it("should not fail when default widget selection changed", function (done) {
+ expect.screenshot("default_widget_selection_changed").to.be.capture(function (page) {
+ page.load(url);
+ page.click('.dashboard-manager');
+ page.click('li[data-action=setAsDefaultWidgets]');
+ page.click('.ui-dialog button>span:contains(Yes)');
+ }, done);
+ });
+
+ it("should create new dashboard with new default widget selection when create dashboard process completed", function (done) {
+ expect.screenshot("create_new").to.be.capture(function (page) {
+ page.click('.dashboard-manager');
+ page.click('li[data-action=createDashboard]');
+ page.sendKeys('#createDashboardName', 'newdash2');
+ page.click('.ui-dialog[aria-describedby=createDashboardConfirm] button>span:contains(Yes)');
+ }, done);
+ });
+}); \ No newline at end of file
diff --git a/tests/UI/specs/EvolutionGraph_spec.js b/tests/UI/specs/EvolutionGraph_spec.js
new file mode 100644
index 0000000000..c6576516a2
--- /dev/null
+++ b/tests/UI/specs/EvolutionGraph_spec.js
@@ -0,0 +1,143 @@
+/*!
+ * Piwik - free/libre analytics platform
+ *
+ * evolution graph screenshot tests.
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+describe("EvolutionGraph", function () {
+ this.timeout(0);
+
+ var url = "?module=Widgetize&action=iframe&idSite=1&period=day&date=2012-01-31&evolution_day_last_n=30"
+ + "&moduleToWidgetize=UserCountry&actionToWidgetize=getCountry&viewDataTable=graphEvolution"
+ + "&isFooterExpandedInDashboard=1";
+
+ before(function (done) {
+ testEnvironment.callApi("Annotations.deleteAll", {idSite: 3}, done);
+ });
+
+ it("should load correctly", function (done) {
+ expect.screenshot('initial').to.be.capture(function (page) {
+ page.load(url);
+ }, done);
+ });
+
+ it("should show percent metrics like bounce rate correctly", function (done) {
+ expect.screenshot('bounce_rate').to.be.capture(function (page) {
+ page.load(url + "&columns=nb_visits,bounce_rate&filter_add_columns_when_show_all_columns=0");
+ }, done);
+ });
+
+ it("should show only one series when a label is specified", function (done) {
+ expect.screenshot('one_series').to.be.capture(function (page) {
+ page.load(url + "&label=Canada");
+ }, done);
+ });
+
+ it("should display the metric picker on hover of metric picker icon", function (done) {
+ expect.screenshot('metric_picker_shown').to.be.capture(function (page) {
+ page.mouseMove('.jqplot-seriespicker');
+ }, done);
+ });
+
+ it("should show multiple metrics when another metric picked", function (done) {
+ expect.screenshot('two_metrics').to.be.capture(function (page) {
+ page.click('.jqplot-seriespicker-popover input:not(:checked)');
+ }, done);
+ });
+
+ it("should show graph as image when export as image icon clicked", function (done) {
+ expect.screenshot('export_image').to.be.capture(function (page) {
+ page.click('#dataTableFooterExportAsImageIcon>a');
+ }, done);
+ });
+
+ it("should display more periods when limit selection changed", function (done) {
+ expect.screenshot('limit_changed').to.be.capture(function (page) {
+ page.click('.limitSelection');
+ page.evaluate(function () {
+ $('.limitSelection ul li[value=60]').click();
+ });
+ }, done);
+ });
+
+ // annotations tests
+ it("should show annotations when annotation icon on x-axis clicked", function (done) {
+ expect.screenshot('annotations_single_period').to.be.capture(function (page) {
+ page.evaluate(function () {
+ $('.limitSelection ul li[value=30]').click(); // change limit back
+ });
+
+ page.click('.evolution-annotations>span[data-count!=0]', 3000);
+ }, done);
+ });
+
+ it("should show all annotations when annotations footer link clicked", function (done) {
+ expect.screenshot('annotations_all').to.be.capture(function (page) {
+ page.click('.annotationView', 3000);
+ }, done);
+ });
+
+ it("should show no annotations message when no annotations for site", function (done) {
+ expect.screenshot('annotations_none').to.be.capture(function (page) {
+ page.load(page.getCurrentUrl().replace(/idSite=[^&]*/, "idSite=3") + "&columns=nb_visits");
+ page.click('.annotationView', 3000);
+ }, done);
+ });
+
+ it("should show add annotation form when create annotation clicked", function (done) {
+ expect.screenshot('new_annotation_form').to.be.capture(function (page) {
+ page.click('.add-annotation');
+ page.click('.annotation-period-edit>a');
+ page.evaluate(function () {
+ $('.datepicker').datepicker("setDate", new Date(2012,0,02) );
+ $(".ui-datepicker-current-day").trigger("click"); // this triggers onSelect event which sets .annotation-period-edit>a
+ });
+ }, done);
+ });
+
+ it("should add new annotation when create annotation submitted", function (done) {
+ expect.screenshot('new_annotation_submit').to.be.capture(function (page) {
+ page.sendKeys('.new-annotation-edit', 'new annotation');
+ page.click('.annotation-period-edit>a');
+ page.evaluate(function () {
+ $('.ui-datepicker-calendar td a:contains(15)').click();
+ });
+ page.click('.annotation-list-range');
+ page.click('input.new-annotation-save', 3000);
+ }, done);
+ });
+
+ it("should star annotation when star image clicked", function (done) {
+ expect.screenshot('annotation_starred').to.be.capture(function (page) {
+ page.click('.annotation-star');
+ }, done);
+ });
+
+ it("should show edit annotation form", function (done) {
+ expect.screenshot('annotation_edit_form').to.be.capture(function (page) {
+ page.click('.edit-annotation');
+ }, done);
+ });
+
+ it("should edit annotation when edit form submitted", function (done) {
+ expect.screenshot('annotation_edit_submit').to.be.capture(function (page) {
+ page.sendKeys('.annotation-edit', 'edited annotation');
+ page.click('.annotation-period-edit>a');
+ page.evaluate(function () {
+ $('.ui-datepicker-calendar td a:contains(16)').click();
+ });
+ page.click('.annotation-list-range');
+ page.click('input.annotation-save', 3000);
+ }, done);
+ });
+
+ it("should delete annotation when delete link clicked", function (done) {
+ expect.screenshot('annotation_delete').to.be.capture(function (page) {
+ page.click('.edit-annotation');
+ page.click('.delete-annotation');
+ }, done);
+ });
+}); \ No newline at end of file
diff --git a/tests/UI/specs/GoalsTable_spec.js b/tests/UI/specs/GoalsTable_spec.js
new file mode 100644
index 0000000000..d74b036367
--- /dev/null
+++ b/tests/UI/specs/GoalsTable_spec.js
@@ -0,0 +1,56 @@
+/*!
+ * Piwik - free/libre analytics platform
+ *
+ * GoalsTable screenshot tests.
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+describe("GoalsTable", function () {
+ this.timeout(0);
+
+ var url = "?module=Widgetize&action=iframe&moduleToWidgetize=Referrers&idSite=1&period=year&date=2012-08-09&"
+ + "actionToWidgetize=getKeywords&viewDataTable=table&filter_limit=5&isFooterExpandedInDashboard=1";
+
+ it("should load when the goals icon is clicked", function (done) {
+ expect.screenshot('initial').to.be.capture(function (page) {
+ page.load(url);
+ page.click('.tableIconsGroup a[data-footer-icon-id=tableGoals]');
+ }, done);
+ });
+
+ it("should show columns for all goals when idGoal is 0", function (done) {
+ expect.screenshot('goals_table_full').to.be.capture(function (page) {
+ var url = page.getCurrentUrl().replace(/viewDataTable=[^&]*/, "viewDataTable=tableGoals") + "&idGoal=0";
+ page.load(url);
+ }, done);
+ });
+
+ it("should show columns for a single goal when idGoal is 1", function (done) {
+ expect.screenshot('goals_table_single').to.be.capture(function (page) {
+ page.load(page.getCurrentUrl().replace(/idGoal=[^&]*/, "idGoal=1"));
+ }, done);
+ });
+
+ it("should show an ecommerce view when idGoal is ecommerceOrder", function (done) {
+ expect.screenshot('goals_table_ecommerce').to.be.capture(function (page) {
+ page.load(page.getCurrentUrl().replace(/idGoal=[^&]*/, "idGoal=ecommerceOrder"));
+ }, done);
+ });
+
+ it("should show a special view when idGoal is ecommerceOrder and viewDataTable is ecommerceOrder", function (done) {
+ expect.screenshot('goals_table_ecommerce_view').to.be.capture(function (page) {
+ var url = page.getCurrentUrl().replace(/moduleToWidgetize=[^&]*/, "moduleToWidgetize=Goals")
+ .replace(/actionToWidgetize=[^&]*/, "actionToWidgetize=getItemsSku")
+ .replace(/viewDataTable=[^&]*/, "viewDataTable=ecommerceOrder");
+ page.load(url);
+ }, done);
+ });
+
+ it("should show abandoned carts data when the abandoned carts link is clicked", function (done) {
+ expect.screenshot('goals_table_abandoned_carts').to.be.capture(function (page) {
+ page.click('.tableIconsGroup a[data-footer-icon-id=ecommerceAbandonedCart]');
+ }, done);
+ });
+}); \ No newline at end of file
diff --git a/tests/UI/specs/Installation_spec.js b/tests/UI/specs/Installation_spec.js
new file mode 100644
index 0000000000..3f7bbbf387
--- /dev/null
+++ b/tests/UI/specs/Installation_spec.js
@@ -0,0 +1,136 @@
+/*!
+ * Piwik - free/libre analytics platform
+ *
+ * Installation screenshot tests.
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+var fs = require('fs');
+
+describe("Installation", function () {
+ this.timeout(0);
+
+ this.fixture = null;
+
+ before(function () {
+ testEnvironment.testUseRegularAuth = 1;
+ testEnvironment.configFileLocal = path.join(PIWIK_INCLUDE_PATH, "/tmp/test.config.ini.php");
+ testEnvironment.dontUseTestConfig = true;
+ testEnvironment.tablesPrefix = 'piwik_';
+ testEnvironment.save();
+
+ if (fs.exists(testEnvironment.configFileLocal)) {
+ fs.remove(testEnvironment.configFileLocal);
+ }
+ });
+
+ after(function () {
+ delete testEnvironment.configFileLocal;
+ delete testEnvironment.dontUseTestConfig;
+ delete testEnvironment.tablesPrefix;
+ delete testEnvironment.testUseRegularAuth;
+ testEnvironment.save();
+ });
+
+ it("should display an error message when trying to access a resource w/o a config.ini.php file", function (done) {
+ expect.screenshot("access_no_config").to.be.capture(function (page) {
+ page.load("?module=CoreHome&action=index&ignoreClearAllViewDataTableParameters=1");
+ }, done);
+ });
+
+ it("should start the installation process when the index is visited w/o a config.ini.php file", function (done) {
+ expect.screenshot("start").to.be.capture(function (page) {
+ page.load("?ignoreClearAllViewDataTableParameters=1");
+ }, done);
+ });
+
+ it("should display the system check page when next is clicked on the first page", function (done) {
+ expect.screenshot("system_check").to.be.capture(function (page) {
+ page.click('.submit');
+ }, done);
+ });
+
+ it("should display the database setup page when next is clicked on the system check page", function (done) {
+ expect.screenshot("db_setup").to.be.capture(function (page) {
+ page.click('.submit');
+ }, done);
+ });
+
+ it("should fail when the next button is clicked and no database info is entered in the form", function (done) {
+ expect.screenshot("db_setup_fail").to.be.capture(function (page) {
+ page.click('.submit');
+ }, done);
+ });
+
+ it("should display the tables created page when next is clicked on the db setup page w/ correct info entered in the form", function (done) {
+ expect.screenshot("db_created").to.be.capture(function (page) {
+ var dbInfo = testEnvironment.readDbInfoFromConfig();
+ var username = dbInfo.username;
+ var password = dbInfo.password;
+
+ page.sendKeys('input[name=username]', username);
+
+ if (password) {
+ page.sendKeys('input[name=password]', password);
+ }
+
+ page.sendKeys('input[name=dbname]', 'newdb');
+ page.click('.submit');
+ }, done);
+ });
+
+ it("should display the superuser configuration page when next is clicked on the tables created page", function (done) {
+ expect.screenshot("superuser").to.be.capture(function (page) {
+ page.click('.submit');
+ }, done);
+ });
+
+ it("should fail when incorrect information is entered in the superuser configuration page", function (done) {
+ expect.screenshot("superuser_fail").to.be.capture(function (page) {
+ page.click('.submit');
+ }, done);
+ });
+
+ it("should display the setup a website page when next is clicked on the filled out superuser config page", function (done) {
+ expect.screenshot("setup_website").to.be.capture(function (page) {
+ page.sendKeys('input[name=login]', 'thesuperuser');
+ page.sendKeys('input[name=password]', 'thepassword');
+ page.sendKeys('input[name=password_bis]', 'thepassword');
+ page.sendKeys('input[name=email]', 'hello@piwik.org');
+ page.click('.submit');
+ page.wait(3000);
+ }, done);
+ });
+
+ it("should should fail when incorrect information is entered in the setup a website page", function (done) {
+ expect.screenshot("setup_website_fail").to.be.capture(function (page) {
+ page.click('.submit');
+ }, done);
+ });
+
+ it("should display the javascript tracking page when correct information is entered in the setup website page and next is clicked", function (done) {
+ expect.screenshot("js_tracking").to.be.capture(function (page) {
+ page.sendKeys('input[name=siteName]', 'Serenity');
+ page.sendKeys('input[name=url]', 'serenity.com');
+ page.evaluate(function () {
+ $('select[name=timezone]').val('Europe/Paris');
+ $('select[name=ecommerce]').val('1');
+ });
+ page.click('.submit');
+ page.wait(3000);
+ }, done);
+ });
+
+ it("should display the congratulations page when next is clicked on the javascript tracking page", function (done) {
+ expect.screenshot("congrats").to.be.capture(function (page) {
+ page.click('.submit');
+ }, done);
+ });
+
+ it("should continue to piwik after submitting on the privacy settings form in the congrats page", function (done) {
+ expect.screenshot('login_form', 'Login').to.be.capture(function (page) {
+ page.click('.submit');
+ }, done);
+ });
+}); \ No newline at end of file
diff --git a/tests/UI/specs/Login_spec.js b/tests/UI/specs/Login_spec.js
new file mode 100644
index 0000000000..bb8372e601
--- /dev/null
+++ b/tests/UI/specs/Login_spec.js
@@ -0,0 +1,98 @@
+/*!
+ * Piwik - free/libre analytics platform
+ *
+ * login & password reset screenshot tests.
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+describe("Login", function () {
+ this.timeout(0);
+
+ var md5Pass = "0adcc0d741277f74c64c8abab7330d1c", // md5("smarty-pants")
+ formlessLoginUrl = "?module=Login&action=logme&login=oliverqueen&password=" + md5Pass;
+
+ before(function () {
+ testEnvironment.testUseRegularAuth = 1;
+ testEnvironment.queryParamOverride = {date: "2012-01-01", period: "year"};
+ testEnvironment.save();
+ });
+
+ after(function () {
+ testEnvironment.testUseRegularAuth = 0;
+ delete testEnvironment.queryParamOverride;
+ testEnvironment.save();
+ });
+
+ it("should load correctly", function (done) {
+ expect.screenshot("login_form").to.be.capture(function (page) {
+ page.load("");
+ }, done);
+ });
+
+ it("should fail when incorrect credentials are supplied", function (done) {
+ expect.screenshot("login_fail").to.be.capture(function (page) {
+ page.sendKeys('#login_form_login', 'superUserLogin');
+ page.sendKeys('#login_form_password', 'wrongpassword');
+ page.click('#login_form_submit');
+ }, done);
+ });
+
+ it("should redirect to Piwik when correct credentials are supplied", function (done) {
+ expect.current_page.contains("#dashboard", function (page) {
+ page.sendKeys("#login_form_login", "superUserLogin");
+ page.sendKeys("#login_form_password", "superUserPass");
+ page.click("#login_form_submit");
+ }, done);
+ });
+
+ it("should redirect to login when logout link clicked", function (done) {
+ expect.screenshot("login_form").to.be.capture("logout_form", function (page) {
+ page.click("#topBars span.title:contains(superUserLogin)");
+ page.wait(250);
+ page.click("#topBars a:contains(Sign out)");
+ }, done);
+ });
+
+ it("should display password reset form when forgot password link clicked", function (done) {
+ expect.screenshot("forgot_password").to.be.capture(function (page) {
+ page.reload();
+ page.click("a#login_form_nav");
+ }, done);
+ });
+
+ it("should send email when password reset form submitted", function (done) {
+ expect.screenshot("password_reset").to.be.capture(function (page) {
+ page.sendKeys("#reset_form_login", "superUserLogin");
+ page.sendKeys("#reset_form_password", "superUserPass2");
+ page.sendKeys("#reset_form_password_bis", "superUserPass2");
+ page.click("#reset_form_submit", 3000);
+ }, done);
+ });
+
+ it("should reset password when password reset link is clicked", function (done) {
+ expect.screenshot("password_reset_complete").to.be.capture(function (page) {
+ var expectedMailOutputFile = PIWIK_INCLUDE_PATH + '/tmp/Login.resetPassword.mail.json',
+ mailSent = JSON.parse(require("fs").read(expectedMailOutputFile)),
+ resetUrl = mailSent.contents.match(/http:\/\/.*/)[0];
+
+ page.load(resetUrl);
+ }, done);
+ });
+
+ it("should login successfully when new credentials used", function (done) {
+ expect.page("").contains("#dashboard", function (page) {
+ page.sendKeys("#login_form_login", "superUserLogin");
+ page.sendKeys("#login_form_password", "superUserPass2");
+ page.click("#login_form_submit");
+ }, done);
+ });
+
+ it("should login successfully when formless login used", function (done) {
+ expect.page("").contains('#dashboard', 'formless_login', function (page) {
+ page.click("#topBars a:contains(Sign out)");
+ page.load(formlessLoginUrl);
+ }, done);
+ });
+}); \ No newline at end of file
diff --git a/tests/UI/specs/Menus_spec.js b/tests/UI/specs/Menus_spec.js
new file mode 100644
index 0000000000..45c9efafb0
--- /dev/null
+++ b/tests/UI/specs/Menus_spec.js
@@ -0,0 +1,48 @@
+/*!
+ * Piwik - free/libre analytics platform
+ *
+ * Screenshot tests for main, top and admin menus.
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+describe("Menus", function () {
+ this.timeout(0);
+
+ var generalParams = 'idSite=1&period=year&date=2012-08-09',
+ urlBase = 'module=CoreHome&action=index&' + generalParams
+ ;
+
+ // main menu tests
+ it('should load the main reporting menu correctly', function (done) {
+ expect.screenshot('mainmenu_loaded').to.be.captureSelector('.Menu--dashboard,.nav_sep', function (page) {
+ page.load("?" + urlBase + "#" + generalParams + "&module=Actions&action=menuGetPageUrls");
+ }, done);
+ });
+
+ it('should change the menu when a upper menu item is clicked in the main menu', function (done) {
+ expect.screenshot('mainmenu_upper_clicked').to.be.captureSelector('.Menu--dashboard,.nav_sep', function (page) {
+ page.click('#VisitsSummary>a');
+ }, done);
+ });
+
+ it('should change the menu when a lower menu item is clicked in the main menu', function (done) {
+ expect.screenshot('mainmenu_lower_clicked').to.be.captureSelector('.Menu--dashboard,.nav_sep', function (page) {
+ page.click('#Live_indexVisitorLog>a');
+ }, done);
+ });
+
+ // admin menu tests
+ it('should load the admin reporting menu correctly', function (done) {
+ expect.screenshot('admin_loaded').to.be.captureSelector('.Menu--admin', function (page) {
+ page.load("?" + generalParams + "&module=UsersManager&action=userSettings");
+ }, done);
+ });
+
+ it('should change the admin page correctly when an admin menu item is clicked', function (done) {
+ expect.screenshot('admin_changed').to.be.captureSelector('.Menu--admin', function (page) {
+ page.click('.Menu--admin a:contains(Websites)');
+ }, done);
+ });
+}); \ No newline at end of file
diff --git a/tests/UI/specs/Overlay_spec.js b/tests/UI/specs/Overlay_spec.js
new file mode 100644
index 0000000000..f38e747474
--- /dev/null
+++ b/tests/UI/specs/Overlay_spec.js
@@ -0,0 +1,97 @@
+/*!
+ * Piwik - free/libre analytics platform
+ *
+ * Overlay screenshot tests.
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+// TODO: should be stored in Overlay plugin
+describe("Overlay", function () {
+ this.timeout(0);
+
+ var url = null;
+
+ before(function (done) {
+ url = "?module=Overlay&period=year&date=today&idSite=3#l=" + encodeURIComponent(testEnvironment.overlayUrl).replace(/[%]/g, "$");
+
+ testEnvironment.callApi("SitesManager.addSiteAliasUrls", {idSite: 3, urls: [config.piwikUrl]}, done);
+ });
+
+ after(function (done) {
+ testEnvironment.callApi("SitesManager.setSiteAliasUrls", {idSite: 3, urls: []}, done);
+ });
+
+ it("should load correctly", function (done) {
+ expect.screenshot("loaded").to.be.capture(function (page) {
+ page.load(url);
+ }, done);
+ });
+
+ it("should show clicks when hover over link in iframe", function (done) {
+ expect.screenshot("page_link_clicks").to.be.capture(function (page) {
+ var pos = page.webpage.evaluate(function () {
+ var iframe = $('iframe'),
+ innerOffset = $('.btn.btn-lg', iframe.contents()).offset();
+ return {
+ x: iframe.offset().left + innerOffset.left,
+ y: iframe.offset().top + innerOffset.top
+ };
+ });
+ page.sendMouseEvent('mousemove', pos);
+ }, done);
+ });
+
+ it("should show stats for new links when dropdown opened", function (done) {
+ expect.screenshot("page_new_links").to.be.capture(function (page) {
+ var pos = page.webpage.evaluate(function () {
+ var iframe = $('iframe'),
+ innerOffset = $('.dropdown-toggle', iframe.contents()).offset();
+ return {
+ x: iframe.offset().left + innerOffset.left + 32, // position is incorrect for some reason w/o adding pixels
+ y: iframe.offset().top + innerOffset.top
+ };
+ });
+ page.sendMouseEvent('click', pos, 2000);
+ }, done);
+ });
+
+ it("should change page when clicking on internal iframe link", function (done) {
+ expect.screenshot("page_change").to.be.capture(function (page) {
+ var pos = page.webpage.evaluate(function () {
+ var iframe = $('iframe'),
+ innerOffset = $('ul.nav>li:nth-child(2)>a', iframe.contents()).offset();
+ return {
+ x: iframe.offset().left + innerOffset.left + 32, // position is incorrect for some reason w/o adding pixels
+ y: iframe.offset().top + innerOffset.top
+ };
+ });
+ page.sendMouseEvent('click', pos);
+ }, done);
+ });
+
+ it("should change date range when period changed", function (done) {
+ expect.screenshot("period_change").to.be.capture(function (page) {
+ page.evaluate(function () {
+ $('#Overlay_DateRangeSelect').val('day;yesterday').trigger('change');
+ });
+ }, done);
+ });
+
+ it("should open row evolution popup when row evolution link clicked", function (done) {
+ expect.screenshot("row_evolution").to.be.capture(function (page) {
+ page.click('#Overlay_RowEvolution');
+ page.evaluate(function () {
+ $('.jqplot-xaxis').hide(); // xaxis will change every day so hide it
+ });
+ }, done);
+ });
+
+ it("should open transitions popup when transitions link clicked", function (done) {
+ expect.screenshot("transitions").to.be.capture(function (page) {
+ page.click('button.ui-dialog-titlebar-close');
+ page.click('#Overlay_Transitions');
+ }, done);
+ });
+}); \ No newline at end of file
diff --git a/tests/UI/specs/PeriodSelector_spec.js b/tests/UI/specs/PeriodSelector_spec.js
new file mode 100644
index 0000000000..c070f4beb5
--- /dev/null
+++ b/tests/UI/specs/PeriodSelector_spec.js
@@ -0,0 +1,89 @@
+/*!
+ * Piwik - free/libre analytics platform
+ *
+ * Period selector screenshot tests.
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+describe("PeriodSelector", function () {
+ this.timeout(0);
+
+ var url = "?module=CoreHome&action=index&idSite=1&period=day&date=2012-01-01";
+
+ it("should load correctly", function (done) {
+ expect.screenshot("loaded").to.be.captureSelector('#periodString', function (page) {
+ page.load(url);
+
+ // disable broadcast.propagateNewPage & remove loading gif
+ page.evaluate(function () {
+ broadcast.propagateNewPage = function () {};
+ $('#ajaxLoadingCalendar').remove();
+ });
+ }, done);
+ });
+
+ it("should expand when clicked", function (done) {
+ expect.screenshot("expanded").to.be.captureSelector('#periodString', function (page) {
+ page.click('.periodSelector');
+ }, done);
+ });
+
+ it("should select a date when a date is clicked in day-period mode", function (done) {
+ expect.screenshot("day_selected").to.be.captureSelector('#periodString', function (page) {
+ page.click('.period-date .ui-datepicker-calendar a:contains(12)');
+ }, done);
+ });
+
+ it("should change the month displayed when a month is selected in the month dropdown", function (done) {
+ expect.screenshot("month_changed").to.be.captureSelector('#periodString', function (page) {
+ page.evaluate(function () {
+ $('.ui-datepicker-month').val(1).trigger('change');
+ });
+ }, done);
+ });
+
+ it("should change the year displayed when a year is selected in the year dropdown", function (done) {
+ expect.screenshot("year_changed").to.be.captureSelector('#periodString', function (page) {
+ page.evaluate(function () {
+ $('.ui-datepicker-year').val(2013).trigger('change');
+ });
+ }, done);
+ });
+
+ it("should change the date when a date is clicked in week-period mode", function (done) {
+ expect.screenshot("week_selected").to.be.captureSelector('#periodString', function (page) {
+ page.click('label[for=period_id_week]');
+ page.click('.period-date .ui-datepicker-calendar a:contains(13)');
+ }, done);
+ });
+
+ it("should change the date when a date is clicked in month-period mode", function (done) {
+ expect.screenshot("month_selected").to.be.captureSelector('#periodString', function (page) {
+ page.click('label[for=period_id_month]');
+ page.click('.period-date .ui-datepicker-calendar a:contains(14)');
+ }, done);
+ });
+
+ it("should change the date when a date is clicked in year-period mode", function (done) {
+ expect.screenshot("year_selected").to.be.captureSelector('#periodString', function (page) {
+ page.click('label[for=period_id_year]');
+ page.click('.period-date .ui-datepicker-calendar a:contains(15)');
+ }, done);
+ });
+
+ it("should display the range picker when the range radio button is clicked", function (done) {
+ expect.screenshot("range_picker_displayed").to.be.captureSelector('#periodString', function (page) {
+ page.click('label[for=period_id_range]');
+ }, done);
+ });
+
+ it("should change from & to dates when range picker calendar dates are clicked", function (done) {
+ expect.screenshot("date_range_selected").to.be.captureSelector('#periodString', function (page) {
+ page.click('#calendarFrom .ui-datepicker-calendar a:contains(10)');
+ page.click('#calendarTo .ui-datepicker-calendar a:contains(18)');
+ page.mouseMove('#calendarRangeApply');
+ }, done);
+ });
+}); \ No newline at end of file
diff --git a/tests/UI/specs/PieGraph_spec.js b/tests/UI/specs/PieGraph_spec.js
new file mode 100644
index 0000000000..7c48ce2663
--- /dev/null
+++ b/tests/UI/specs/PieGraph_spec.js
@@ -0,0 +1,39 @@
+/*!
+ * Piwik - free/libre analytics platform
+ *
+ * Pie graph screenshot tests.
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+describe("PieGraph", function () {
+ this.timeout(0);
+
+ var url = "?module=Widgetize&action=iframe&moduleToWidgetize=Referrers&idSite=1&period=year&date=2012-08-09&"
+ + "actionToWidgetize=getKeywords&viewDataTable=graphPie&isFooterExpandedInDashboard=1";
+
+ it("should load correctly", function (done) {
+ expect.screenshot("load").to.be.capture(function (page) {
+ page.load(url);
+ }, done);
+ });
+
+ it("should show tooltip on hover", function (done) {
+ expect.screenshot("pie_segment_tooltip").to.be.capture(function (page) {
+ page.mouseMove('.piwik-graph');
+ }, done);
+ });
+
+ it("should display the metric picker on hover of metric picker icon", function (done) {
+ expect.screenshot('metric_picker_shown').to.be.capture(function (page) {
+ page.mouseMove('.jqplot-seriespicker');
+ }, done);
+ });
+
+ it("should change displayed metric when another metric picked", function (done) {
+ expect.screenshot('other_metric').to.be.capture(function (page) {
+ page.click('.jqplot-seriespicker-popover input:not(:checked)');
+ }, done);
+ });
+}); \ No newline at end of file
diff --git a/tests/UI/specs/PivotByDimension_spec.js b/tests/UI/specs/PivotByDimension_spec.js
new file mode 100644
index 0000000000..f1899f3485
--- /dev/null
+++ b/tests/UI/specs/PivotByDimension_spec.js
@@ -0,0 +1,40 @@
+/*!
+ * Piwik - free/libre analytics platform
+ *
+ * PivotByDimension UI tests
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+describe("PivotByDimension", function () {
+ this.timeout(0);
+
+ var eventsUrl = "?module=CoreHome&action=index&idSite=1&period=year&date=2012-08-09#/idSite=1&period=year&date=2012-08-09&module=Events&action=index",
+ actionsUrl = "?module=CoreHome&action=index&idSite=1&period=year&date=2012-08-09#/idSite=1&period=year&date=2012-08-09&module=Actions&action=menuGetPageUrls",
+ cvarsUrl = "?module=CoreHome&action=index&idSite=1&period=year&date=2012-08-09#/idSite=1&period=year&date=2012-08-09&module=CustomVariables&action=menuGetCustomVariables"
+ ;
+
+ it("should pivot a report correctly when the pivot cog option is selected", function (done) {
+ expect.screenshot('pivoted').to.be.captureSelector('.dataTable,.expandDataTableFooterDrawer', function (page) {
+ page.load(eventsUrl);
+ page.click('.dimension:contains(Event Names)');
+ page.click('.expandDataTableFooterDrawer');
+ page.mouseMove('.tableConfiguration');
+ page.click('.dataTablePivotBySubtable');
+ }, done);
+ });
+
+ it("should not display the pivot option on actions reports", function (done) {
+ expect.page(actionsUrl).not.contains('.dataTablePivotBySubtable', function () {}, done);
+ });
+
+ it("should display the pivot option on reports that set a custom columns_to_display", function (done) {
+ expect.screenshot('pivoted_columns_report').to.be.captureSelector('.dataTable,.expandDataTableFooterDrawer', function (page) {
+ page.load(cvarsUrl);
+ page.click('.expandDataTableFooterDrawer');
+ page.mouseMove('.tableConfiguration');
+ page.click('.dataTablePivotBySubtable');
+ }, done);
+ });
+}); \ No newline at end of file
diff --git a/tests/UI/specs/RowEvolution_spec.js b/tests/UI/specs/RowEvolution_spec.js
new file mode 100644
index 0000000000..9214ee69b6
--- /dev/null
+++ b/tests/UI/specs/RowEvolution_spec.js
@@ -0,0 +1,65 @@
+/*!
+ * Piwik - free/libre analytics platform
+ *
+ * row evolution screenshot tests
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+describe("RowEvolution", function () {
+ this.timeout(0);
+
+ var viewDataTableUrl = "?module=Widgetize&action=iframe&moduleToWidgetize=Referrers&idSite=1&period=week&date=2012-02-09&"
+ + "actionToWidgetize=getKeywords&viewDataTable=table&filter_limit=5";
+
+ var ecommerceItemReportWidgetized = "?module=Widgetize&action=iframe&moduleToWidgetize=Goals&actionToWidgetize=getItemsSku&idGoal=ecommerceAbandonedCart"
+ + "&idSite=1&period=year&date=2012-02-09&viewDataTable=ecommerceAbandonedCart&filter_limit=-1";
+
+ it('should load when icon clicked in ViewDataTable', function (done) {
+ expect.screenshot('row_evolution').to.be.captureSelector('.ui-dialog', function (page) {
+ page.load(viewDataTableUrl);
+ page.mouseMove('tbody tr:first-child');
+ page.mouseMove('a.actionRowEvolution:visible'); // necessary to get popover to display
+ page.click('a.actionRowEvolution:visible');
+ }, done);
+ });
+
+ it('should change the metric shown when a metric sparkline row is clicked', function (done) {
+ expect.screenshot('row_evolution_other_metric').to.be.captureSelector('.ui-dialog', function (page) {
+ page.click('table.metrics tr[data-i=1]');
+ }, done);
+ });
+
+ it('should show two serieses when a metric sparkline row is shift+clicked', function (done) {
+ expect.screenshot('row_evolution_multiple_series').to.be.captureSelector('.ui-dialog', function (page) {
+ page.click('table.metrics tr[data-i=2]', ['shift']);
+ }, done);
+ });
+
+ it('should load multi-row evolution correctly', function (done) {
+ expect.screenshot('multirow_evolution').to.be.captureSelector('.ui-dialog', function (page) {
+ page.click('a.rowevolution-startmulti');
+ page.mouseMove('tbody tr:nth-child(2)');
+ page.mouseMove('a.actionRowEvolution:visible');
+ page.click('a.actionRowEvolution:visible');
+ }, done);
+ });
+
+ it('should display a different row evolution metric when the metric selection is changed', function (done) {
+ expect.screenshot('multirow_evolution_other_metric').to.be.captureSelector('.ui-dialog', function (page) {
+ page.evaluate(function () {
+ $('select.multirowevoltion-metric').val($('select.multirowevoltion-metric option:nth-child(3)').val()).change();
+ });
+ }, done);
+ });
+
+ it('should display row evolution for an ecommerce item report correctly', function (done) {
+ expect.screenshot('row_evolution_ecommerce_item').to.be.captureSelector('.ui-dialog', function (page) {
+ page.load(ecommerceItemReportWidgetized);
+ page.mouseMove('tbody tr:first-child');
+ page.mouseMove('a.actionRowEvolution:visible'); // necessary to get popover to display
+ page.click('a.actionRowEvolution:visible');
+ }, done);
+ });
+}); \ No newline at end of file
diff --git a/tests/UI/specs/SegmentSelectorEditor_spec.js b/tests/UI/specs/SegmentSelectorEditor_spec.js
new file mode 100644
index 0000000000..7552977813
--- /dev/null
+++ b/tests/UI/specs/SegmentSelectorEditor_spec.js
@@ -0,0 +1,187 @@
+/*!
+ * Piwik - free/libre analytics platform
+ *
+ * ViewDataTable screenshot tests.
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+describe("SegmentSelectorEditorTest", function () {
+ var selectorsToCapture = ".segmentEditorPanel,.segmentEditorPanel .dropdown-body,.segment-element";
+
+ this.timeout(0);
+
+ var url = "?module=CoreHome&action=index&idSite=1&period=year&date=2012-08-09";
+
+ it("should load correctly", function (done) {
+ expect.screenshot("0_initial").to.be.captureSelector(selectorsToCapture, function (page) {
+ page.load(url);
+ }, done);
+ });
+
+ it("should open selector when control clicked", function (done) {
+ expect.screenshot("1_selector_open").to.be.captureSelector(selectorsToCapture, function (page) {
+ page.click('.segmentationContainer');
+ }, done);
+ });
+
+ it("should open segment editor when edit link clicked for existing segment", function (done) {
+ expect.screenshot("2_segment_editor_update").to.be.captureSelector(selectorsToCapture, function (page) {
+ page.click('.segmentList .editSegment');
+ }, done);
+ });
+
+ it("should start editing segment name when segment name edit link clicked", function (done) {
+ expect.screenshot("3_segment_editor_edit_name").to.be.captureSelector(selectorsToCapture, function (page) {
+ page.click('.segmentEditorPanel .editSegmentName');
+ }, done);
+ });
+
+ it("should expand segment dimension category when category name clicked in segment editor", function (done) {
+ expect.screenshot("4_segment_editor_expanded_dimensions").to.be.captureSelector(selectorsToCapture, function (page) {
+ page.click('.segmentEditorPanel .metric_category:contains(Actions)');
+ }, done);
+ });
+
+ it("should search segment dimensions when text entered in dimension search input", function (done) {
+ expect.screenshot("5_segment_editor_search_dimensions").to.be.captureSelector(selectorsToCapture, function (page) {
+ page.sendKeys('.segmentEditorPanel .segmentSearch', 'page title');
+ }, done);
+ });
+
+ it("should change segment when another available segment clicked in segment editor's available segments dropdown", function (done) {
+ expect.screenshot("6_segment_editor_different").to.be.captureSelector(selectorsToCapture, function (page) {
+ page.click('.available_segments a.dropList');
+ page.click('li.ui-menu-item a:contains(Add new segment)');
+ }, done);
+ });
+
+ it("should close the segment editor when the close link is clicked", function (done) {
+ expect.screenshot("7_segment_editor_closed").to.be.captureSelector(selectorsToCapture, function (page) {
+ page.click('.segmentEditorPanel .segment-footer .close');
+ }, done);
+ });
+
+ it("should open blank segment editor when create new segment link is clicked", function (done) {
+ expect.screenshot("8_segment_editor_create").to.be.captureSelector(selectorsToCapture, function (page) {
+ page.click('.segmentationContainer');
+ page.click('.add_new_segment');
+ }, done);
+ });
+
+ it("should add new segment expression when segment dimension drag dropped", function (done) {
+ expect.screenshot("dimension_drag_drop").to.be.captureSelector(selectorsToCapture, function (page) {
+ page.click('.segmentEditorPanel .metric_category:contains(Actions)');
+ page.dragDrop('.segmentEditorPanel li[data-metric=entryPageUrl]', '.segmentEditorPanel .ui-droppable');
+ }, done);
+ });
+
+ // phantomjs won't take screenshots of dropdown windows, so skip this test
+ it.skip("should show suggested segment values when a segment value input is focused", function (done) {
+ expect.screenshot("suggested_values").to.be.captureSelector(selectorsToCapture, function (page) {
+ page.click('.segmentEditorPanel .ui-autocomplete-input');
+ }, done);
+ });
+
+ it("should add an OR condition when a segment dimension is dragged to the OR placeholder section", function (done) {
+ expect.screenshot("drag_or_condition").to.be.captureSelector(selectorsToCapture, function (page) {
+ page.dragDrop('.segmentEditorPanel li[data-metric=entryPageTitle]', '.segmentEditorPanel .segment-add-or .ui-droppable');
+ }, done);
+ });
+
+ it("should add an AND condition when a segment dimension is dragged to the AND placeholder section", function (done) {
+ expect.screenshot("drag_and_condition").to.be.captureSelector(selectorsToCapture, function (page) {
+ page.dragDrop('.segmentEditorPanel li[data-metric=pageTitle]', '.segmentEditorPanel .segment-add-row .ui-droppable');
+ }, done);
+ });
+
+ it("should save a new segment and add it to the segment list when the form is filled out and the save button is clicked", function (done) {
+ expect.screenshot("saved").to.be.captureSelector(selectorsToCapture, function (page) {
+ page.evaluate(function () {
+ $('.metricMatchBlock>select').each(function () {
+ $(this).val('==');
+ });
+
+ $('.metricValueBlock>input').each(function (index) {
+ $(this).val('value ' + index);
+ });
+ });
+
+ page.sendKeys('input.edit_segment_name', 'new segment');
+ page.click('.segmentEditorPanel .metric_category:contains(Actions)'); // click somewhere else to save new name
+
+ page.click('button.saveAndApply');
+
+ page.click('.segmentationContainer');
+ }, done);
+ });
+
+ it("should show the new segment after page reload", function (done) {
+ expect.screenshot("saved").to.be.captureSelector("saved_reload", selectorsToCapture, function (page) {
+ page.reload();
+ page.click('.segmentationContainer');
+ }, done);
+ });
+
+ it("should correctly load the new segment's details when the new segment is edited", function (done) {
+ expect.screenshot("saved_details").to.be.captureSelector(selectorsToCapture, function (page) {
+ page.click('.segmentList li[data-idsegment=4] .editSegment');
+ }, done);
+ });
+
+ it("should correctly update the segment when its details are changed and saved", function (done) {
+ expect.screenshot("updated").to.be.captureSelector(selectorsToCapture, function (page) {
+ page.click('.segmentEditorPanel .editSegmentName');
+ page.evaluate(function () {
+ $('input.edit_segment_name').val('');
+ });
+ page.sendKeys('input.edit_segment_name', 'edited segment');
+ page.click('.segmentEditorPanel .metric_category:contains(Actions)'); // click somewhere else to save new name
+
+ page.evaluate(function () {
+ $('.metricMatchBlock>select').each(function () {
+ $(this).val('!=');
+ });
+
+ $('.metricValueBlock>input').each(function (index) {
+ $(this).val('new value ' + index);
+ });
+ });
+
+ page.click('button.saveAndApply');
+
+ page.click('.segmentationContainer');
+ }, done);
+ });
+
+ it("should show the updated segment after page reload", function (done) {
+ expect.screenshot("updated").to.be.captureSelector("updated_reload", selectorsToCapture, function (page) {
+ page.reload();
+ page.click('.segmentationContainer');
+ }, done);
+ });
+
+ it("should correctly load the updated segment's details when the updated segment is edited", function (done) {
+ expect.screenshot("updated_details").to.be.captureSelector(selectorsToCapture, function (page) {
+ page.click('.segmentList li[data-idsegment=4] .editSegment');
+ }, done);
+ });
+
+ it("should correctly remove the segment when the delete link is clicked", function (done) {
+ expect.screenshot('deleted').to.be.captureSelector(selectorsToCapture, function (page) {
+ page.click('.segmentList li[data-idsegment=4] .editSegment');
+ page.click('.segmentEditorPanel a.delete');
+ page.click('.ui-dialog button>span:contains(Yes):visible');
+
+ page.click('.segmentationContainer');
+ }, done);
+ });
+
+ it("should not show the deleted segment after page reload", function (done) {
+ expect.screenshot('deleted').to.be.captureSelector('deleted_reload', selectorsToCapture, function (page) {
+ page.reload();
+ page.click('.segmentationContainer');
+ }, done);
+ });
+}); \ No newline at end of file
diff --git a/tests/UI/specs/SiteSelector_spec.js b/tests/UI/specs/SiteSelector_spec.js
new file mode 100644
index 0000000000..71ae799558
--- /dev/null
+++ b/tests/UI/specs/SiteSelector_spec.js
@@ -0,0 +1,55 @@
+/*!
+ * Piwik - free/libre analytics platform
+ *
+ * Site selector screenshot tests.
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+describe("SiteSelector", function () {
+ var selectorToCapture = '[piwik-siteselector],[piwik-siteselector] .custom_select';
+
+ this.timeout(0);
+
+ var url = "?module=UsersManager&action=userSettings&idSite=1&period=day&date=yesterday";
+
+ it("should load correctly", function (done) {
+ expect.screenshot("loaded").to.be.captureSelector(selectorToCapture, function (page) {
+ page.load(url);
+ }, done);
+ });
+
+ it("should display expanded when clicked", function (done) {
+ expect.screenshot("expanded").to.be.captureSelector(selectorToCapture, function (page) {
+ page.click('.sites_autocomplete');
+ }, done);
+ });
+
+ it("should show no results when search returns no results", function (done) {
+ expect.screenshot("search_no_results").to.be.captureSelector(selectorToCapture, function (page) {
+ page.sendKeys(".websiteSearch", "abc");
+ }, done);
+ });
+
+ it("should search when one character typed into search input", function (done) {
+ expect.screenshot("search_one_char").to.be.captureSelector(selectorToCapture, function (page) {
+ page.click('.reset');
+ page.sendKeys(".websiteSearch", "s");
+ }, done);
+ });
+
+ // Test is skipped as it randomly fails http://builds-artifacts.piwik.org/ui-tests.master/2295.1/screenshot-diffs/diffviewer.html
+ it.skip("should search again when second character typed into search input", function (done) {
+ expect.screenshot("search_two_chars").to.be.captureSelector(selectorToCapture, function (page) {
+ page.sendKeys(".websiteSearch", "st");
+ page.wait(3000);
+ }, done);
+ });
+
+ it("should change the site when a site is selected", function (done) {
+ expect.screenshot("site_selected").to.be.captureSelector(selectorToCapture, function (page) {
+ page.click(".custom_select_ul_list>li:visible");
+ }, done);
+ });
+}); \ No newline at end of file
diff --git a/tests/UI/specs/Transitions_spec.js b/tests/UI/specs/Transitions_spec.js
new file mode 100644
index 0000000000..246c4bb3da
--- /dev/null
+++ b/tests/UI/specs/Transitions_spec.js
@@ -0,0 +1,33 @@
+/*!
+ * Piwik - free/libre analytics platform
+ *
+ * transitions screenshot tests
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+describe("Transitions", function () {
+ this.timeout(0);
+
+ var generalParams = 'idSite=1&period=year&date=2012-08-09',
+ urlBase = 'module=CoreHome&action=index&' + generalParams
+ ;
+
+ it('should load the transitions popup correctly for the page titles report', function (done) {
+ expect.screenshot('transitions_popup_titles').to.be.captureSelector('.ui-dialog', function (page) {
+ page.load("?" + urlBase + "#/" + generalParams + "&module=Actions&action=menuGetPageTitles");
+
+ page.mouseMove('div.dataTable tbody tr:eq(2)');
+ page.mouseMove('a.actionTransitions:visible'); // necessary to get popover to display
+ page.click('a.actionTransitions:visible');
+ }, done);
+ });
+
+ it('should load the transitions popup correctly for the page urls report', function (done) {
+ expect.screenshot('transitions_popup_urls').to.be.captureSelector('.ui-dialog', function (page) {
+ page.load("?" + urlBase + "#/" + generalParams + "&module=Actions&action=menuGetPageUrls&"
+ + "popover=RowAction$3ATransitions$3Aurl$3Ahttp$3A$2F$2Fpiwik.net$2Fdocs$2Fmanage-websites$2F");
+ }, done);
+ });
+}); \ No newline at end of file
diff --git a/tests/UI/specs/UIIntegration_spec.js b/tests/UI/specs/UIIntegration_spec.js
new file mode 100644
index 0000000000..c1c186345b
--- /dev/null
+++ b/tests/UI/specs/UIIntegration_spec.js
@@ -0,0 +1,608 @@
+/*!
+ * Piwik - free/libre analytics platform
+ *
+ * Screenshot integration tests.
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+describe("UIIntegrationTest", function () { // TODO: Rename to Piwik?
+ this.timeout(0);
+
+ var generalParams = 'idSite=1&period=year&date=2012-08-09',
+ idSite2Params = 'idSite=2&period=year&date=2012-08-09',
+ evolutionParams = 'idSite=1&period=day&date=2012-01-31&evolution_day_last_n=30',
+ urlBase = 'module=CoreHome&action=index&' + generalParams,
+ widgetizeParams = "module=Widgetize&action=iframe",
+ segment = encodeURIComponent("browserCode==FF") // from OmniFixture
+ ;
+
+ before(function (done) {
+ testEnvironment.queryParamOverride = {
+ forceNowValue: testEnvironment.forcedNowTimestamp,
+ visitorId: testEnvironment.forcedIdVisitor,
+ realtimeWindow: 'false'
+ };
+ testEnvironment.save();
+
+ testEnvironment.callApi("SitesManager.setSiteAliasUrls", {idSite: 3, urls: []}, done);
+ });
+
+ beforeEach(function () {
+ delete testEnvironment.configOverride;
+ testEnvironment.testUseRegularAuth = 0;
+ testEnvironment.save();
+ });
+
+ after(function () {
+ delete testEnvironment.queryParamOverride;
+ testEnvironment.testUseRegularAuth = 0;
+ testEnvironment.save();
+ });
+
+ // dashboard tests
+ it("should load dashboard1 correctly", function (done) {
+ expect.screenshot("dashboard1").to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ page.load("?" + urlBase + "#" + generalParams + "&module=Dashboard&action=embeddedIndex&idDashboard=1");
+
+ page.evaluate(function () {
+ // Prevent random sizing error eg. http://builds-artifacts.piwik.org/ui-tests.master/2301.1/screenshot-diffs/diffviewer.html
+ $("[widgetid=widgetActionsgetOutlinks] .widgetContent").text('Displays different at random -> hidden');
+ });
+ }, done);
+ });
+
+ it("should load dashboard2 correctly", function (done) {
+ expect.screenshot("dashboard2").to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ page.load("?" + urlBase + "#" + generalParams + "&module=Dashboard&action=embeddedIndex&idDashboard=2");
+ }, done);
+ });
+
+ it("should load dashboard3 correctly", function (done) {
+ expect.screenshot("dashboard3").to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ page.load("?" + urlBase + "#" + generalParams + "&module=Dashboard&action=embeddedIndex&idDashboard=3");
+ }, done);
+ });
+
+ it("should load dashboard4 correctly", function (done) {
+ expect.screenshot("dashboard4").to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ page.load("?" + urlBase + "#" + generalParams + "&module=Dashboard&action=embeddedIndex&idDashboard=4");
+ }, done);
+ });
+
+ it("should display dashboard correctly on a mobile phone", function (done) {
+ expect.screenshot("dashboard5_mobile").to.be.capture(function (page) { // capture with menu
+ page.setViewportSize(480, 320);
+ page.load("?" + urlBase + "#" + generalParams + "&module=Dashboard&action=embeddedIndex&idDashboard=5");
+ }, done);
+ });
+
+ // visitors pages
+ it('should load visitors > overview page correctly', function (done) {
+ expect.screenshot("visitors_overview").to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ page.load("?" + urlBase + "#" + generalParams + "&module=VisitsSummary&action=index");
+ }, done);
+ });
+
+ it('should load visitors > visitor log page correctly', function (done) {
+ expect.screenshot("visitors_visitorlog").to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ page.load("?" + urlBase + "#" + generalParams + "&module=Live&action=indexVisitorLog");
+ }, done);
+ });
+
+ it('should load the visitors > devices page correctly', function (done) {
+ expect.screenshot("visitors_devices").to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ page.load("?" + urlBase + "#" + generalParams + "&module=DevicesDetection&action=index");
+ }, done);
+ });
+
+ it('should load visitors > locations & provider page correctly', function (done) {
+ expect.screenshot("visitors_locations_provider").to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ page.load("?" + urlBase + "#" + generalParams + "&module=UserCountry&action=index");
+ }, done);
+ });
+
+ it('should load the visitors > settings page correctly', function (done) {
+ expect.screenshot("visitors_settings").to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ page.load("?" + urlBase + "#" + generalParams + "&module=UserSettings&action=index");
+ }, done);
+ });
+
+ it('should load the visitors > times page correctly', function (done) {
+ expect.screenshot("visitors_times").to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ page.load("?" + urlBase + "#" + generalParams + "&module=VisitTime&action=index");
+ }, done);
+ });
+
+ it('should load the visitors > engagement page correctly', function (done) {
+ expect.screenshot("visitors_engagement").to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ page.load("?" + urlBase + "#" + generalParams + "&module=VisitFrequency&action=index");
+ }, done);
+ });
+
+ it('should load the visitors > custom variables page correctly', function (done) {
+ expect.screenshot('visitors_custom_vars').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ page.load("?" + urlBase + "#" + generalParams + "&module=CustomVariables&action=menuGetCustomVariables");
+ }, done);
+ });
+
+ it('should load the visitors > real-time map page correctly', function (done) {
+ expect.screenshot('visitors_realtime_map').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ page.load("?" + urlBase + "#" + idSite2Params + "&module=UserCountryMap&action=realtimeWorldMap"
+ + "&showDateTime=0&realtimeWindow=last2&changeVisitAlpha=0&enableAnimation=0&doNotRefreshVisits=1"
+ + "&removeOldVisits=0");
+ }, done);
+ });
+
+ // actions pages
+ it('should load the actions > pages page correctly', function (done) {
+ expect.screenshot('actions_pages').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ page.load("?" + urlBase + "#" + generalParams + "&module=Actions&action=menuGetPageUrls");
+ }, done);
+ });
+
+ it('should load the actions > entry pages page correctly', function (done) {
+ expect.screenshot('actions_entry_pages').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ page.load("?" + urlBase + "#" + generalParams + "&module=Actions&action=menuGetEntryPageUrls");
+ }, done);
+ });
+
+ it('should load the actions > exit pages page correctly', function (done) {
+ expect.screenshot('actions_exit_pages').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ page.load("?" + urlBase + "#" + generalParams + "&module=Actions&action=menuGetExitPageUrls");
+ }, done);
+ });
+
+ it('should load the actions > page titles page correctly', function (done) {
+ expect.screenshot('actions_page_titles').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ page.load("?" + urlBase + "#" + generalParams + "&module=Actions&action=menuGetPageTitles");
+ }, done);
+ });
+
+ it('should load the actions > site search page correctly', function (done) {
+ expect.screenshot('actions_site_search').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ page.load("?" + urlBase + "#" + generalParams + "&module=Actions&action=indexSiteSearch");
+ }, done);
+ });
+
+ it('should load the actions > outlinks page correctly', function (done) {
+ expect.screenshot('actions_outlinks').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ page.load("?" + urlBase + "#" + generalParams + "&module=Actions&action=menuGetOutlinks");
+ }, done);
+ });
+
+ it('should load the actions > downloads page correctly', function (done) {
+ expect.screenshot('actions_downloads').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ page.load("?" + urlBase + "#" + generalParams + "&module=Actions&action=menuGetDownloads");
+ }, done);
+ });
+
+ it('should load the actions > contents page correctly', function (done) {
+ expect.screenshot('actions_contents').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ page.load("?" + urlBase + "#" + generalParams + "&module=Contents&action=index&period=day&date=2012-01-01");
+ }, done);
+ });
+
+ it("should show all corresponding content pieces when clicking on a content name", function (done) {
+ expect.screenshot("actions_content_name_piece").to.be.captureSelector('.pageWrap', function (page) {
+ page.click('.dataTable .subDataTable .value:contains(ImageAd)');
+ }, done);
+ });
+
+ it("should show all tracked content pieces when clicking on the table", function (done) {
+ expect.screenshot("actions_content_piece").to.be.captureSelector('.pageWrap', function (page) {
+ page.click('.reportDimension .dimension:contains(Content Piece)');
+ }, done);
+ });
+
+ it("should show all corresponding content names when clicking on a content piece", function (done) {
+ expect.screenshot("actions_content_piece_name").to.be.captureSelector('.pageWrap', function (page) {
+ page.click('.dataTable .subDataTable .value:contains(Click NOW)');
+ }, done);
+ });
+
+ // referrers pages
+ it('should load the referrers > overview page correctly', function (done) {
+ expect.screenshot('referrers_overview').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ page.load("?" + urlBase + "#" + generalParams + "&module=Referrers&action=index");
+ }, done);
+ });
+
+ // referrers pages
+ it('should load the referrers > overview page correctly', function (done) {
+ expect.screenshot('referrers_allreferrers').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ page.load("?" + urlBase + "#" + generalParams + "&module=Referrers&action=allReferrers");
+ }, done);
+ });
+
+ it('should load the referrers > search engines & keywords page correctly', function (done) {
+ expect.screenshot('referrers_search_engines_keywords').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ page.load("?" + urlBase + "#" + generalParams + "&module=Referrers&action=getSearchEnginesAndKeywords");
+ }, done);
+ });
+
+ it('should load the referrers > websites & social page correctly', function (done) {
+ expect.screenshot('referrers_websites_social').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ page.load("?" + urlBase + "#" + generalParams + "&module=Referrers&action=indexWebsites");
+ }, done);
+ });
+
+ it('should load the referrers > campaigns page correctly', function (done) {
+ expect.screenshot('referrers_campaigns').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ page.load("?" + urlBase + "#" + generalParams + "&module=Referrers&action=menuGetCampaigns");
+ }, done);
+ });
+
+ // goals pages
+ it('should load the goals > ecommerce page correctly', function (done) {
+ expect.screenshot('goals_ecommerce').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ page.load("?" + urlBase + "#" + generalParams + "&module=Ecommerce&action=ecommerceReport&idGoal=ecommerceOrder");
+ }, done);
+ });
+
+ it('should load the goals > overview page correctly', function (done) {
+ expect.screenshot('goals_overview').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ page.load( "?" + urlBase + "#" + generalParams + "&module=Goals&action=index");
+ }, done);
+ });
+
+ it('should load the goals > management page correctly', function (done) {
+ expect.screenshot('goals_manage').to.be.captureSelector('.centerLargeDiv,.top_bar_sites_selector,.entityContainer', function (page) {
+ page.load( "?" + generalParams + "&module=Goals&action=manage");
+ page.wait(200);
+ }, done);
+ });
+
+ it('should load the goals > single goal page correctly', function (done) {
+ expect.screenshot('goals_individual_goal').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ page.load("?" + urlBase + "#" + generalParams + "&module=Goals&action=goalReport&idGoal=1");
+ }, done);
+ });
+
+ // one page w/ segment
+ it('should load the visitors > overview page correctly when a segment is specified', function (done) {
+ expect.screenshot('visitors_overview_segment').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ page.load("?" + urlBase + "#" + generalParams + "&module=VisitsSummary&action=index&segment=" + segment);
+ }, done);
+ });
+
+ // example ui pages
+ it('should load the example ui > dataTables page correctly', function (done) {
+ expect.screenshot('exampleui_dataTables').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ page.load("?" + urlBase + "#" + generalParams + "&module=ExampleUI&action=dataTables");
+ }, done);
+ });
+
+ it('should load the example ui > barGraph page correctly', function (done) {
+ expect.screenshot('exampleui_barGraph').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ page.load("?" + urlBase + "#" + generalParams + "&module=ExampleUI&action=barGraph");
+ }, done);
+ });
+
+ it('should load the example ui > pieGraph page correctly', function (done) {
+ expect.screenshot('exampleui_pieGraph').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ page.load("?" + urlBase + "#" + generalParams + "&module=ExampleUI&action=pieGraph");
+ }, done);
+ });
+
+ it('should load the example ui > tagClouds page correctly', function (done) {
+ expect.screenshot('exampleui_tagClouds').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ page.load("?" + urlBase + "#" + generalParams + "&module=ExampleUI&action=tagClouds");
+ }, done);
+ });
+
+ it('should load the example ui > sparklines page correctly', function (done) {
+ expect.screenshot('exampleui_sparklines').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ page.load("?" + urlBase + "#" + generalParams + "&module=ExampleUI&action=sparklines");
+ }, done);
+ });
+
+ it('should load the example ui > evolution graph page correctly', function (done) {
+ expect.screenshot('exampleui_evolutionGraph').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ page.load("?" + urlBase + "#" + generalParams + "&module=ExampleUI&action=evolutionGraph");
+ }, done);
+ });
+
+ it('should load the example ui > treemap page correctly', function (done) {
+ expect.screenshot('exampleui_treemap').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ page.load("?" + urlBase + "#" + generalParams + "&module=ExampleUI&action=treemap");
+ page.wait(2000);
+ }, done);
+ });
+
+ // widgetize
+ it('should load the widgetized visitor log correctly', function (done) {
+ expect.screenshot('widgetize_visitor_log').to.be.capture(function (page) {
+ page.load("?" + widgetizeParams + "&" + generalParams + "&moduleToWidgetize=Live&actionToWidgetize=getVisitorLog");
+ page.evaluate(function () {
+ $('.expandDataTableFooterDrawer').click();
+ });
+ }, done);
+ });
+
+ it('should load the widgetized all websites dashboard correctly', function (done) {
+ expect.screenshot('widgetize_allwebsites').to.be.capture(function (page) {
+ page.load("?" + widgetizeParams + "&" + generalParams + "&moduleToWidgetize=MultiSites&actionToWidgetize=standalone");
+ }, done);
+ });
+
+ it('should widgetize the ecommerce log correctly', function (done) {
+ expect.screenshot('widgetize_ecommercelog').to.be.capture(function (page) {
+ page.load("?" + widgetizeParams + "&" + generalParams + "&moduleToWidgetize=Ecommerce&actionToWidgetize=getEcommerceLog&filter_limit=-1");
+ }, done);
+ });
+
+ it('should load the ecommerce overview page', function (done) {
+ expect.screenshot('ecommerce_overview').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ page.load("?" + urlBase + "#" + generalParams + "&module=Ecommerce&action=ecommerceReport&idGoal=ecommerceOrder");
+ }, done);
+ });
+
+ it('should load the ecommerce log page', function (done) {
+ expect.screenshot('ecommerce_log').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ page.load("?" + urlBase + "#" + generalParams + "&module=Ecommerce&action=ecommerceLogReport");
+ }, done);
+ });
+
+ it('should load the ecommerce products page', function (done) {
+ expect.screenshot('ecommerce_products').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ page.load("?" + urlBase + "#" + generalParams + "&module=Ecommerce&action=products&idGoal=ecommerceOrder");
+ }, done);
+ });
+
+ it('should load the ecommerce sales page', function (done) {
+ expect.screenshot('ecommerce_sales').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ page.load("?" + urlBase + "#" + generalParams + "&module=Ecommerce&action=sales&idGoal=ecommerceOrder");
+ }, done);
+ });
+
+ // Admin user settings (plugins not displayed)
+ it('should load the Manage > Websites admin page correctly', function (done) {
+ expect.screenshot('admin_manage_websites').to.be.captureSelector('#content', function (page) {
+ page.load("?" + generalParams + "&module=SitesManager&action=index");
+ page.evaluate(function () {
+ $('.ui-inline-help:contains(UTC time is)').hide();
+ });
+ }, done);
+ });
+
+ it('should load the Manage > Users admin page correctly', function (done) {
+ expect.screenshot('admin_manage_users').to.be.captureSelector('#content', function (page) {
+ page.load("?" + generalParams + "&module=UsersManager&action=index");
+
+ // remove token auth which can be random
+ page.evaluate(function () {
+ $('td#token_auth').each(function () {
+ $(this).text('');
+ });
+ $('td#last_seen').each(function () {
+ $(this).text( '' )
+ });
+ });
+ }, done);
+ });
+
+ it('should load the user settings admin page correctly', function (done) {
+ expect.screenshot('admin_user_settings').to.be.captureSelector('#content', function (page) {
+ page.load("?" + generalParams + "&module=UsersManager&action=userSettings");
+ }, done);
+ });
+
+ it('should load the Manage > Tracking Code admin page correctly', function (done) {
+ expect.screenshot('admin_manage_tracking_code').to.be.captureSelector('#content', function (page) {
+ page.load("?" + generalParams + "&module=CoreAdminHome&action=trackingCodeGenerator");
+ }, done);
+ });
+
+ it('should load the Settings > General Settings admin page correctly', function (done) {
+ expect.screenshot('admin_settings_general').to.be.captureSelector('#content', function (page) {
+ page.load("?" + generalParams + "&module=CoreAdminHome&action=generalSettings");
+ }, done);
+ });
+
+ it('should load the Settings > Privacy admin page correctly', function (done) {
+ expect.screenshot('admin_privacy_settings').to.be.captureSelector('#content,.ui-inline-help', function (page) {
+ page.load("?" + generalParams + "&module=PrivacyManager&action=privacySettings");
+ }, done);
+ });
+
+ it('should load the Privacy Opt out iframe correctly', function (done) {
+ expect.screenshot('admin_privacy_optout_iframe').to.be.capture(function (page) {
+ page.load("?module=CoreAdminHome&action=optOut&language=de");
+ }, done);
+ });
+
+ it('should load the Settings > Mobile Messaging admin page correctly', function (done) {
+ expect.screenshot('admin_settings_mobilemessaging').to.be.captureSelector('#content', function (page) {
+ page.load("?" + generalParams + "&module=MobileMessaging&action=index");
+ }, done);
+ });
+
+ it('should load the Settings > Mobile Messaging user page correctly', function (done) {
+ expect.screenshot('user_settings_mobilemessaging').to.be.captureSelector('#content', function (page) {
+ page.load("?" + generalParams + "&module=MobileMessaging&action=userSettings");
+ }, done);
+ });
+
+ it('should load the themes admin page correctly', function (done) {
+ expect.screenshot('admin_themes').to.be.captureSelector('#content', function (page) {
+ page.load("?" + generalParams + "&module=CorePluginsAdmin&action=themes");
+ }, done);
+ });
+
+ it('should load the plugins admin page correctly', function (done) {
+ expect.screenshot('admin_plugins').to.be.captureSelector('#content', function (page) {
+ page.load("?" + generalParams + "&module=CorePluginsAdmin&action=plugins");
+ }, done);
+ });
+
+ it('should load the plugin settings admin page correctly', function (done) {
+ expect.screenshot('admin_plugin_settings').to.be.captureSelector('#content', function (page) {
+ page.load("?" + generalParams + "&module=CoreAdminHome&action=adminPluginSettings");
+ }, done);
+ });
+
+ it('should load the plugin settings user page correctly', function (done) {
+ expect.screenshot('user_plugin_settings').to.be.captureSelector('#content', function (page) {
+ page.load("?" + generalParams + "&module=CoreAdminHome&action=userPluginSettings");
+ }, done);
+ });
+
+ it('should load the Settings > Visitor Generator admin page correctly', function (done) {
+ expect.screenshot('admin_visitor_generator').to.be.captureSelector('#content', function (page) {
+ page.load("?" + generalParams + "&module=VisitorGenerator&action=index");
+
+ page.evaluate(function () {
+ var $p = $('#content p:eq(1)');
+ $p.text($p.text().replace(/\(change .*\)/g, ''));
+ });
+ }, done);
+ });
+
+ // Notifications
+ it('should load the notifications page correctly', function (done) {
+ expect.screenshot('notifications').to.be.capture(function (page) {
+ page.load("?" + generalParams + "&module=ExampleUI&action=notifications&idSite=1&period=day&date=yesterday");
+ page.evaluate(function () {
+ $('#header').hide();
+ });
+ }, done);
+ });
+
+ // Fatal error safemode
+ it('should load the safemode fatal error page correctly', function (done) {
+ var message = "Call%20to%20undefined%20function%20Piwik%5CPlugins%5CFoobar%5CPiwik_Translate()",
+ file = "%2Fhome%2Fvagrant%2Fwww%2Fpiwik%2Fplugins%2FFoobar%2FFoobar.php%20line%205",
+ line = 58;
+
+ expect.screenshot('fatal_error_safemode').to.be.capture(function (page) {
+ page.load("?" + generalParams + "&module=CorePluginsAdmin&action=safemode&idSite=1&period=day&date=yesterday&activated"
+ + "&error_message=" + message + "&error_file=" + file + "&error_line=" + line + "&tests_hide_piwik_version=1");
+ }, done);
+ });
+
+ // DB error message
+ it('should fail correctly when db information in config is incorrect', function (done) {
+ testEnvironment.configOverride = {
+ database: {
+ host: '127.50.50.50',
+ username: 'slkdfjsdlkfj',
+ password: 'slkdfjsldkfj',
+ dbname: 'abcdefg',
+ tables_prefix: 'gfedcba'
+ }
+ };
+ testEnvironment.save();
+
+ expect.screenshot('db_connect_error').to.be.capture(function (page) {
+ page.load("");
+ }, done);
+ });
+
+ // CustomAlerts plugin TODO: move to CustomAlerts plugin
+ it('should load the custom alerts list correctly', function (done) {
+ expect.screenshot('customalerts_list').to.be.capture(function (page) {
+ page.load("?" + generalParams + "&module=CustomAlerts&action=index&idSite=1&period=day&date=yesterday&tests_hide_piwik_version=1");
+ }, done);
+ });
+
+ it('should load the triggered custom alerts list correctly', function (done) {
+ expect.screenshot('customalerts_list_triggered').to.be.capture(function (page) {
+ page.load("?" + generalParams + "&module=CustomAlerts&action=historyTriggeredAlerts&idSite=1&period=day&date=yesterday&tests_hide_piwik_version=1");
+ }, done);
+ });
+
+ // top bar pages
+ it('should load the all websites dashboard correctly', function (done) {
+ expect.screenshot('all_websites').to.be.captureSelector('.pageWrap,.expandDataTableFooterDrawer', function (page) {
+ page.load("?" + generalParams + "&module=MultiSites&action=index");
+ }, done);
+ });
+
+ it('should load the widgets listing page correctly', function (done) {
+ expect.screenshot('widgets_listing').to.be.captureSelector('#content', function (page) {
+ page.load("?" + generalParams + "&module=Widgetize&action=index");
+ page.mouseMove('.widgetpreview-categorylist>li:contains(Visits Summary)');
+ page.mouseMove('li[uniqueid=widgetVisitsSummarygetEvolutionGraphcolumnsArray]');
+ }, done);top
+ });
+
+ it('should load the API listing page correctly', function (done) {
+ expect.screenshot('api_listing').to.be.captureSelector('#content', function (page) {
+ page.load("?" + generalParams + "&module=API&action=listAllAPI");
+ page.evaluate(function () { // remove token_auth since it can change on each test run
+ $('span#token_auth>strong').text('dummytokenauth');
+ });
+ }, done);
+ });
+
+ it('should load the email reports page correctly', function (done) {
+ expect.screenshot('email_reports').to.be.capture(function (page) {
+ page.load("?" + generalParams + "&module=ScheduledReports&action=index");
+ page.evaluate(function () {
+ $('#header').hide();
+ });
+ }, done);
+ });
+
+ it('should load the feedback form when the feedback form link is clicked', function (done) {
+ expect.screenshot('feedback_form').to.be.capture(function (page) {
+
+ page.load("?" + generalParams + "&module=Feedback&action=index");
+
+ page.evaluate(function () {
+ $('h2 span').each(function () {
+ if ($(this).text().indexOf("Piwik") !== -1) {
+ var replace = $(this).text().replace(/Piwik\s*\d+\.\d+(\.\d+)?([\-a-z]*\d+)?/g, 'Piwik');
+ $(this).text(replace);
+ }
+ });
+
+ $('#header').hide();
+ });
+ }, done);
+ });
+
+ // date range clicked
+ it('should reload to the correct date when a date range is selected in the period selector', function (done) {
+ expect.screenshot('period_select_date_range_click').to.be.capture(function (page) {
+ page.load("?" + urlBase + "#" + generalParams + "&module=VisitTime&action=index");
+ page.evaluate(function () {
+ $(document).ready(function () {
+ $('#date').click();
+ $('#period_id_range').click();
+ $('#inputCalendarFrom').val('2012-08-02');
+ $('#inputCalendarTo').val('2012-08-12');
+ setTimeout(function () {$('#calendarRangeApply').click();}, 500);
+ });
+ });
+ }, done);
+ });
+
+ // visitor profile popup
+ it('should load the visitor profile popup correctly', function (done) {
+ expect.screenshot('visitor_profile_popup').to.be.capture(function (page) {
+ page.load("?" + widgetizeParams + "&" + idSite2Params + "&moduleToWidgetize=Live&actionToWidgetize=getVisitorProfilePopup"
+ + "&enableAnimation=0");
+
+ page.evaluate(function () {
+ $(document).ready(function () {
+ $('.visitor-profile-show-map').click();
+ });
+ });
+
+ page.wait(1000);
+ }, done);
+ });
+
+ // opt out page
+ it('should load the opt out page correctly', function (done) {
+ expect.screenshot('opt_out').to.be.capture(function (page) {
+ testEnvironment.testUseRegularAuth = 1;
+ testEnvironment.save();
+
+ page.load("?module=CoreAdminHome&action=optOut&language=en");
+ }, done);
+ });
+}); \ No newline at end of file
diff --git a/tests/UI/specs/Updater_spec.js b/tests/UI/specs/Updater_spec.js
new file mode 100644
index 0000000000..0ddc8b67cb
--- /dev/null
+++ b/tests/UI/specs/Updater_spec.js
@@ -0,0 +1,37 @@
+/*!
+ * Piwik - free/libre analytics platform
+ *
+ * Installation screenshot tests.
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+describe("Updater", function () {
+ this.timeout(0);
+
+ this.fixture = "Piwik\\Tests\\Fixtures\\UpdaterTestFixture";
+
+ before(function () {
+ testEnvironment.tablesPrefix = 'piwik_';
+ testEnvironment.save();
+ });
+
+ it("should start the updater when an old version of Piwik is detected in the DB", function (done) {
+ expect.screenshot("main").to.be.capture(function (page) {
+ page.load("");
+ page.evaluate(function () {
+ $('p').each(function () {
+ var replace = $(this).html().replace(/(?!1\.0)\d+\.\d+(\.\d+)?([\-a-z]*\d+)?/g, '');
+ $(this).html(replace);
+ });
+ });
+ }, done);
+ });
+
+ it("should show the donation form when the update process is complete", function (done) {
+ expect.screenshot("updated").to.be.capture(function (page) {
+ page.click('.submit');
+ }, done);
+ });
+}); \ No newline at end of file
diff --git a/tests/UI/specs/ViewDataTable_spec.js b/tests/UI/specs/ViewDataTable_spec.js
new file mode 100644
index 0000000000..7a584e7c97
--- /dev/null
+++ b/tests/UI/specs/ViewDataTable_spec.js
@@ -0,0 +1,143 @@
+/*!
+ * Piwik - free/libre analytics platform
+ *
+ * ViewDataTable screenshot tests.
+ *
+ * @link http://piwik.org
+ * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
+ */
+
+describe("ViewDataTableTest", function () { // TODO: should remove Test suffix from images instead of naming suites ...Test
+ this.timeout(0);
+
+ // TODO: rename screenshot files, remove numbers
+ var url = "?module=Widgetize&action=iframe&moduleToWidgetize=Referrers&idSite=1&period=year&date=2012-08-09&"
+ + "actionToWidgetize=getKeywords&viewDataTable=table&filter_limit=5&isFooterExpandedInDashboard=1";
+
+ it("should load correctly", function (done) {
+ expect.screenshot("0_initial").to.be.capture(function (page) {
+ page.load(url);
+ }, done);
+ });
+
+ it("should load all columns when all columns clicked", function (done) {
+ expect.screenshot("1_all_columns").to.be.capture(function (page) {
+ page.click('.tableIcon[data-footer-icon-id=tableAllColumns]');
+ }, done);
+ });
+
+ it("should sort a column in descending order when column clicked initially", function (done) {
+ expect.screenshot("2_column_sorted_desc").to.be.capture(function (page) {
+ page.click('th#avg_time_on_site');
+ }, done);
+ });
+
+ it("should sort a column in ascending order when column clicked second time", function (done) {
+ expect.screenshot("3_column_sorted_asc").to.be.capture(function (page) {
+ page.click('th#avg_time_on_site');
+ }, done);
+ });
+
+ it("should exclude low population rows when low population clicked", function (done) {
+ expect.screenshot("4_exclude_low_population").to.be.capture(function (page) {
+ page.mouseMove('.tableConfiguration');
+ page.click('.dataTableExcludeLowPopulation');
+ }, done);
+ });
+
+ it("should load goals table when goals footer icon clicked", function (done) {
+ expect.screenshot("5_goals").to.be.capture(function (page) {
+ page.click('.tableIcon[data-footer-icon-id=tableGoals]');
+ }, done);
+ });
+
+ it("should load bar graph when bar graph footer icon clicked", function (done) {
+ expect.screenshot('6_bar_graph').to.be.capture(function (page) {
+ page.mouseMove('.tableIconsGroup:nth-child(2)');
+ page.click('.tableIcon[data-footer-icon-id=graphVerticalBar]');
+ }, done);
+ });
+
+ it("should load pie graph when pie graph footer icon clicked", function (done) {
+ expect.screenshot('7_pie_graph').to.be.capture(function (page) {
+ page.mouseMove('.tableIconsGroup:nth-child(2)');
+ page.click('.tableIcon[data-footer-icon-id=graphPie]');
+ }, done);
+ });
+
+ it("should load a tag cloud when tag cloud footer icon clicked", function (done) {
+ expect.screenshot('8_tag_cloud').to.be.capture(function (page) {
+ page.mouseMove('.tableIconsGroup:nth-child(2)');
+ page.click('.tableIcon[data-footer-icon-id=cloud]');
+ }, done);
+ });
+
+ it("should load normal table when normal table footer icon clicked", function (done) {
+ expect.screenshot('9_normal_table').to.be.capture(function (page) {
+ page.click('.tableIcon[data-footer-icon-id=table]');
+ }, done);
+ });
+
+ it("should change the number of rows when new limit selected", function (done) {
+ expect.screenshot('10_change_limit').to.be.capture(function (page) {
+ page.click('.limitSelection');
+ page.click('.limitSelection ul li[value=10]');
+ }, done);
+ });
+
+ it("should flatten the table when the flatten link is clicked", function (done) {
+ expect.screenshot('11_flattened').to.be.capture(function (page) {
+ page.mouseMove('.tableConfiguration');
+ page.click('.dataTableFlatten');
+ }, done);
+ });
+
+ it("should show aggregate rows when the aggregate rows option is clicked", function (done) {
+ expect.screenshot('12_aggregate_shown').to.be.capture(function (page) {
+ page.mouseMove('.tableConfiguration');
+ page.click('.dataTableIncludeAggregateRows');
+ }, done);
+ });
+
+ it("should make the report hierarchical when the flatten link is clicked again", function (done) {
+ expect.screenshot('13_make_hierarchical').to.be.capture(function (page) {
+ page.mouseMove('.tableConfiguration');
+ page.click('.dataTableFlatten');
+ }, done);
+ });
+
+ it("should show the visits percent when hovering over a column", function (done) {
+ expect.screenshot('14_visits_percent').to.be.capture(function (page) {
+ page.mouseMove('td.column');
+ }, done);
+ });
+
+ it("should load subtables correctly when row clicked", function (done) {
+ expect.screenshot('subtables_loaded').to.be.capture(function (page) {
+ page.click('tr.subDataTable:first');
+ page.click('tr.subDataTable:eq(2)');
+ }, done);
+ });
+
+ it("should search the table when a search string is entered and the search button clicked", function (done) {
+ expect.screenshot('15_search').to.be.capture(function (page) {
+ page.sendKeys('.dataTableSearchPattern>input[type=text]', 'term');
+ page.click('.dataTableSearchPattern>input[type=submit]');
+ }, done);
+ });
+
+ it("should display the export options when clicking the export icon", function (done) {
+ expect.screenshot('export_options').to.be.capture(function (page) {
+ page.click('.exportToFormatIcons', 2000);
+ }, done);
+ });
+
+ it("should display a related report when related report link is clicked", function (done) {
+ expect.screenshot('related_report_click').to.be.capture(function (page) {
+ var newReportUrl = url.replace("=Referrers", "=UserSettings").replace("=getKeywords", "=getOS");
+
+ page.load(newReportUrl);
+ page.click('.datatableRelatedReports li>span:visible');
+ }, done);
+ });
+}); \ No newline at end of file
diff --git a/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_0_initial.png b/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_0_initial.png
deleted file mode 100644
index aaf0f12fdd..0000000000
--- a/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_0_initial.png
+++ /dev/null
Binary files differ
diff --git a/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_10_change_limit.png b/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_10_change_limit.png
deleted file mode 100644
index 891f8b0a6c..0000000000
--- a/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_10_change_limit.png
+++ /dev/null
Binary files differ
diff --git a/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_11_flattened.png b/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_11_flattened.png
deleted file mode 100644
index 076654dfcc..0000000000
--- a/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_11_flattened.png
+++ /dev/null
Binary files differ
diff --git a/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_12_aggregate_shown.png b/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_12_aggregate_shown.png
deleted file mode 100644
index db6caebadb..0000000000
--- a/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_12_aggregate_shown.png
+++ /dev/null
Binary files differ
diff --git a/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_13_make_hierarchical.png b/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_13_make_hierarchical.png
deleted file mode 100644
index 891f8b0a6c..0000000000
--- a/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_13_make_hierarchical.png
+++ /dev/null
Binary files differ
diff --git a/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_14_visits_percent.png b/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_14_visits_percent.png
deleted file mode 100644
index 8674bfbe32..0000000000
--- a/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_14_visits_percent.png
+++ /dev/null
Binary files differ
diff --git a/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_15_search.png b/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_15_search.png
deleted file mode 100644
index 8a2f4feca1..0000000000
--- a/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_15_search.png
+++ /dev/null
Binary files differ
diff --git a/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_1_all_columns.png b/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_1_all_columns.png
deleted file mode 100644
index 35c67ed7a3..0000000000
--- a/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_1_all_columns.png
+++ /dev/null
Binary files differ
diff --git a/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_2_column_sorted_desc.png b/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_2_column_sorted_desc.png
deleted file mode 100644
index 7d303c01ce..0000000000
--- a/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_2_column_sorted_desc.png
+++ /dev/null
Binary files differ
diff --git a/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_3_column_sorted_asc.png b/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_3_column_sorted_asc.png
deleted file mode 100644
index f11870080a..0000000000
--- a/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_3_column_sorted_asc.png
+++ /dev/null
Binary files differ
diff --git a/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_4_exclude_low_population.png b/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_4_exclude_low_population.png
deleted file mode 100644
index 82370b1f4d..0000000000
--- a/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_4_exclude_low_population.png
+++ /dev/null
Binary files differ
diff --git a/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_5_goals.png b/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_5_goals.png
deleted file mode 100644
index daa53ad156..0000000000
--- a/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_5_goals.png
+++ /dev/null
Binary files differ
diff --git a/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_6_bar_graph.png b/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_6_bar_graph.png
deleted file mode 100644
index 64aa2330a8..0000000000
--- a/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_6_bar_graph.png
+++ /dev/null
Binary files differ
diff --git a/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_7_pie_graph.png b/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_7_pie_graph.png
deleted file mode 100644
index 828621d5b6..0000000000
--- a/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_7_pie_graph.png
+++ /dev/null
Binary files differ
diff --git a/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_8_tag_cloud.png b/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_8_tag_cloud.png
deleted file mode 100644
index 4f12618a1b..0000000000
--- a/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_8_tag_cloud.png
+++ /dev/null
Binary files differ
diff --git a/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_9_normal_table.png b/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_9_normal_table.png
deleted file mode 100644
index 6dfe56ba90..0000000000
--- a/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_9_normal_table.png
+++ /dev/null
Binary files differ
diff --git a/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_export_options.png b/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_export_options.png
deleted file mode 100644
index 1379a4f24b..0000000000
--- a/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_export_options.png
+++ /dev/null
Binary files differ
diff --git a/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_related_report_click.png b/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_related_report_click.png
deleted file mode 100644
index 654b8497c3..0000000000
--- a/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_related_report_click.png
+++ /dev/null
Binary files differ
diff --git a/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_subtables_loaded.png b/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_subtables_loaded.png
deleted file mode 100644
index 6853b804e8..0000000000
--- a/tests/lib/screenshot-testing/processed-ui-screenshots/ViewDataTableTest_subtables_loaded.png
+++ /dev/null
Binary files differ
diff --git a/tests/lib/screenshot-testing/run-tests.js b/tests/lib/screenshot-testing/run-tests.js
index fd313ee4f0..86f4c7ef55 100644
--- a/tests/lib/screenshot-testing/run-tests.js
+++ b/tests/lib/screenshot-testing/run-tests.js
@@ -8,7 +8,20 @@
*/
// required modules
-var config = require("./config");
+var config = require("./../../UI/config.dist");
+try {
+ var localConfig = require("./../../UI/config");
+} catch (e) {
+ localConfig = null;
+}
+
+if (localConfig) {
+ for (var prop in localConfig) {
+ if (localConfig.hasOwnProperty(prop)) {
+ config[prop] = localConfig[prop];
+ }
+ }
+}
// assume the URI points to a folder and make sure Piwik won't cut off the last path segment
if (config.phpServer.REQUEST_URI.slice(-1) != '/') {
diff --git a/tests/lib/screenshot-testing/support/app.js b/tests/lib/screenshot-testing/support/app.js
index 0de86e1da3..29a7943190 100644
--- a/tests/lib/screenshot-testing/support/app.js
+++ b/tests/lib/screenshot-testing/support/app.js
@@ -42,7 +42,7 @@ var isCorePlugin = function (pathToPlugin) {
var Application = function () {
this.runner = null;
- var diffviewerDir = path.join(PIWIK_INCLUDE_PATH, 'tests/PHPUnit/UI', config.screenshotDiffDir);
+ var diffviewerDir = path.join(PIWIK_INCLUDE_PATH, 'tests/UI', config.screenshotDiffDir);
this.diffViewerGenerator = new DiffViewerGenerator(diffviewerDir);
};
@@ -79,7 +79,7 @@ Application.prototype.init = function () {
var suite = oldDescribe.apply(null, arguments);
suite.baseDirectory = app.currentModulePath.match(/\/plugins\//) ? path.dirname(app.currentModulePath) : uiTestsDir;
if (options['assume-artifacts']) {
- suite.diffDir = path.join(PIWIK_INCLUDE_PATH, 'tests/PHPUnit/UI', config.screenshotDiffDir);
+ suite.diffDir = path.join(PIWIK_INCLUDE_PATH, 'tests/UI', config.screenshotDiffDir);
} else {
suite.diffDir = path.join(suite.baseDirectory, config.screenshotDiffDir);
}
@@ -210,7 +210,7 @@ Application.prototype.doRunTests = function () {
var symlinks = ['libs', 'plugins', 'tests', 'piwik.js'];
symlinks.forEach(function (item) {
- var file = path.join(uiTestsDir, '..', 'proxy', item);
+ var file = path.join(uiTestsDir, '..', 'PHPUnit', 'proxy', item);
if (fs.exists(file)) {
fs.remove(file);
}
diff --git a/tests/lib/screenshot-testing/support/diff-viewer.js b/tests/lib/screenshot-testing/support/diff-viewer.js
index f68eddf8d1..7910887fdd 100644
--- a/tests/lib/screenshot-testing/support/diff-viewer.js
+++ b/tests/lib/screenshot-testing/support/diff-viewer.js
@@ -17,11 +17,11 @@ var DiffViewerGenerator = function (diffDir) {
};
DiffViewerGenerator.prototype.getDiffPath = function (testInfo) {
- var baseDir = path.join(PIWIK_INCLUDE_PATH, 'tests/PHPUnit/UI');
+ var baseDir = path.join(PIWIK_INCLUDE_PATH, 'tests/UI');
return path.resolve(path.join(baseDir, config.screenshotDiffDir, testInfo.name + '.png'));
};
-// TODO: diff output path shouldn't be stored in piwik-ui-tests repo
+// TODO: diff output path shouldn't be stored in piwik repo
DiffViewerGenerator.prototype.getUrlForPath = function (path) {
return fs.relpath(path, this.diffDir);
};
diff --git a/tests/lib/screenshot-testing/support/globals.js b/tests/lib/screenshot-testing/support/globals.js
index 8b7fe944f8..dbbed49c0a 100644
--- a/tests/lib/screenshot-testing/support/globals.js
+++ b/tests/lib/screenshot-testing/support/globals.js
@@ -13,7 +13,7 @@ var __dirname = phantom.libraryPath;
var PIWIK_INCLUDE_PATH = path.join(__dirname, '..', '..', '..');
-var uiTestsDir = path.join(PIWIK_INCLUDE_PATH, 'tests', 'PHPUnit', 'UI')
+var uiTestsDir = path.join(PIWIK_INCLUDE_PATH, 'tests', 'UI')
var testsLibDir = path.join(__dirname, "..", "..", "lib");
diff --git a/tests/lib/screenshot-testing/support/page-renderer.js b/tests/lib/screenshot-testing/support/page-renderer.js
index e615c80777..4f66a728f2 100644
--- a/tests/lib/screenshot-testing/support/page-renderer.js
+++ b/tests/lib/screenshot-testing/support/page-renderer.js
@@ -175,7 +175,9 @@ PageRenderer.prototype._load = function (url, callback) {
this.webpage.open(url, function (status) {
this.evaluate(function () {
var $ = window.jQuery;
- $('html').addClass('uiTest');
+ if ($) {
+ $('html').addClass('uiTest');
+ }
});
if (callback) {
diff --git a/tests/resources/OmniFixture-dump.sql.gz b/tests/resources/OmniFixture-dump.sql.gz
index c128a06767..c8e5e1c72b 100644
--- a/tests/resources/OmniFixture-dump.sql.gz
+++ b/tests/resources/OmniFixture-dump.sql.gz
Binary files differ
diff --git a/tests/travis/initiate_ui_tests.sh b/tests/travis/initiate_ui_tests.sh
deleted file mode 100755
index 9dfd307701..0000000000
--- a/tests/travis/initiate_ui_tests.sh
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/bin/bash
-
-# initiate UI tests before starting system tests for php 5.5
-if [ "$TEST_SUITE" != "SystemTests" ] || [[ "$TRAVIS_PHP_VERSION" != 5\.6* ]]; then
- echo "Not initiating UI tests (\$TEST_SUITE = $TEST_SUITE, \$TRAVIS_PHP_VERSION = $TRAVIS_PHP_VERSION)."
- exit
-fi
-
-if [ "$PIWIK_AUTOMATION" = "" ]; then
- echo "Automation details are not present, skipping UI tests."
- exit
-fi
-
-COMMIT_MESSAGE=$(git log "$TRAVIS_COMMIT" -1 --pretty=%B)
-
-cd tests/PHPUnit/UI
-
-UI_BRANCH="master"
-git checkout $UI_BRANCH -q
-git pull --rebase origin $UI_BRANCH -q
-
-echo "$TRAVIS_COMMIT
-$TRAVIS_BRANCH" > piwik_commit.txt
-
-git add ./piwik_commit.txt
-git commit -m "Travis: Initiating build for commit '$TRAVIS_COMMIT' on branch '$TRAVIS_BRANCH': $COMMIT_MESSAGE"
-git remote set-url origin "https://piwik-auto-commit-bot:$PIWIK_AUTOMATION@github.com/piwik/piwik-ui-tests.git"
-
-if ! git push origin $UI_BRANCH 2> /dev/null; then
- echo "Failed to push!"
- exit 1
-fi
diff --git a/tests/travis/travis.sh b/tests/travis/travis.sh
index 383a0e3a2d..239013bb54 100755
--- a/tests/travis/travis.sh
+++ b/tests/travis/travis.sh
@@ -43,7 +43,7 @@ then
echo ""
echo "http://builds-artifacts.piwik.org/$artifacts_folder/$TRAVIS_JOB_NUMBER/screenshot-diffs/diffviewer.html"
echo ""
- echo "If the new screenshots are valid, then you can copy them over to tests/PHPUnit/UI/expected-ui-screenshots/."
+ echo "If the new screenshots are valid, then you can copy them over to tests/UI/expected-ui-screenshots/."
echo ""
if [ -n "$PLUGIN_NAME" ]
diff --git a/tests/travis/upload_artifacts.sh b/tests/travis/upload_artifacts.sh
index f7061b16a5..20782dcab5 100755
--- a/tests/travis/upload_artifacts.sh
+++ b/tests/travis/upload_artifacts.sh
@@ -41,7 +41,7 @@ else
cd "./plugins/$PLUGIN_NAME/tests/UI"
fi
else
- cd ./tests/PHPUnit/UI
+ cd ./tests/UI
fi
# upload processed tarball
@@ -49,7 +49,7 @@ else
curl -X POST --data-binary @processed-ui-screenshots.tar.bz2 "$url_base&artifact_name=processed-ui-screenshots"
# upload diff tarball if it exists
- cd $base_dir/tests/PHPUnit/UI
+ cd $base_dir/tests/UI
if [ -d "./screenshot-diffs" ];
then
echo "Uploading artifcats..."