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 Aubry <mattab@users.noreply.github.com>2017-05-15 08:11:25 +0300
committerGitHub <noreply@github.com>2017-05-15 08:11:25 +0300
commit724119543029ba7af449d06be5b2c8f448346f70 (patch)
treed6825a4edd4d2c1baafadc3be2c883cd829d3838
parent41e37ae7cb965bf152ee9bd60745f454a356f769 (diff)
parent33d0ae183bab830be51d62eaea2d981f050a08b6 (diff)
Merge pull request #11699 from piwik/3.x-dev3.0.4-rc1
Release Piwik 3.0.4-rc1
-rw-r--r--.gitmodules5
-rw-r--r--CHANGELOG.md1
-rw-r--r--core/Application/Kernel/PluginList.php75
-rw-r--r--core/DataAccess/LogQueryBuilder/JoinGenerator.php32
-rw-r--r--core/Db/Adapter/Mysqli.php11
-rw-r--r--core/Db/Adapter/Pdo/Mysql.php11
-rw-r--r--core/Plugin/Manager.php70
-rw-r--r--core/Plugin/MetadataLoader.php15
-rw-r--r--core/Version.php2
-rw-r--r--core/ViewDataTable/Config.php10
-rw-r--r--lang/fi.json10
-rw-r--r--lang/ko.json4
-rw-r--r--lang/nl.json2
-rw-r--r--lang/sr.json16
-rw-r--r--lang/zh-cn.json105
-rw-r--r--plugins/API/lang/sr.json1
-rw-r--r--plugins/API/lang/zh-cn.json7
-rw-r--r--plugins/Actions/lang/sr.json4
-rw-r--r--plugins/Actions/lang/zh-cn.json13
m---------plugins/AnonymousPiwikUsageMeasurement0
m---------plugins/Bandwidth0
-rw-r--r--plugins/Contents/lang/sr.json2
-rw-r--r--plugins/Contents/lang/zh-cn.json2
-rw-r--r--plugins/CoreAdminHome/lang/cs.json1
-rw-r--r--plugins/CoreAdminHome/lang/es.json1
-rw-r--r--plugins/CoreAdminHome/lang/fi.json5
-rw-r--r--plugins/CoreAdminHome/lang/fr.json1
-rw-r--r--plugins/CoreAdminHome/lang/ja.json1
-rw-r--r--plugins/CoreAdminHome/lang/nl.json4
-rw-r--r--plugins/CoreAdminHome/lang/sr.json5
-rw-r--r--plugins/CoreAdminHome/lang/zh-cn.json11
-rw-r--r--plugins/CoreHome/SystemSummary/Item.php94
-rw-r--r--plugins/CoreHome/Widgets/GetSystemSummary.php79
-rw-r--r--plugins/CoreHome/lang/fi.json8
-rw-r--r--plugins/CoreHome/lang/ja.json2
-rw-r--r--plugins/CoreHome/lang/sr.json7
-rw-r--r--plugins/CoreHome/lang/zh-cn.json23
-rw-r--r--plugins/CoreHome/templates/_dataTable.twig2
-rw-r--r--plugins/CoreHome/templates/getSystemSummary.twig48
-rw-r--r--plugins/CorePluginsAdmin/Commands/ListPlugins.php10
-rw-r--r--plugins/CorePluginsAdmin/CorePluginsAdmin.php9
-rw-r--r--plugins/CorePluginsAdmin/lang/cs.json2
-rw-r--r--plugins/CorePluginsAdmin/lang/de.json1
-rw-r--r--plugins/CorePluginsAdmin/lang/el.json4
-rw-r--r--plugins/CorePluginsAdmin/lang/en.json2
-rw-r--r--plugins/CorePluginsAdmin/lang/es.json2
-rw-r--r--plugins/CorePluginsAdmin/lang/fr.json1
-rw-r--r--plugins/CorePluginsAdmin/lang/it.json1
-rw-r--r--plugins/CorePluginsAdmin/lang/ja.json2
-rw-r--r--plugins/CorePluginsAdmin/lang/nb.json1
-rw-r--r--plugins/CorePluginsAdmin/lang/nl.json1
-rw-r--r--plugins/CorePluginsAdmin/lang/ru.json1
-rw-r--r--plugins/CorePluginsAdmin/lang/sq.json4
-rw-r--r--plugins/CorePluginsAdmin/lang/sr.json8
-rw-r--r--plugins/CorePluginsAdmin/lang/uk.json1
-rw-r--r--plugins/CorePluginsAdmin/lang/zh-tw.json4
-rw-r--r--plugins/CoreUpdater/lang/cs.json3
-rw-r--r--plugins/CoreUpdater/lang/de.json3
-rw-r--r--plugins/CoreUpdater/lang/es.json3
-rw-r--r--plugins/CoreUpdater/lang/ja.json3
-rw-r--r--plugins/CoreUpdater/lang/sr.json7
m---------plugins/CustomAlerts0
m---------plugins/CustomDimensions0
-rw-r--r--plugins/CustomPiwikJs/lang/cs.json1
-rw-r--r--plugins/CustomPiwikJs/lang/de.json1
-rw-r--r--plugins/CustomPiwikJs/lang/es.json1
-rw-r--r--plugins/CustomPiwikJs/lang/ja.json1
-rw-r--r--plugins/CustomPiwikJs/lang/sr.json1
-rw-r--r--plugins/CustomVariables/lang/zh-cn.json5
-rw-r--r--plugins/Dashboard/lang/nl.json10
-rw-r--r--plugins/DevicePlugins/lang/zh-cn.json2
-rw-r--r--plugins/DevicesDetection/tests/System/expected/test___DevicesDetection.getBrand_day.xml2
-rw-r--r--plugins/Diagnostics/lang/zh-cn.json7
-rw-r--r--plugins/Ecommerce/lang/sr.json7
-rw-r--r--plugins/Ecommerce/lang/zh-cn.json9
-rw-r--r--plugins/Feedback/lang/de.json2
-rw-r--r--plugins/Feedback/lang/ja.json2
-rw-r--r--plugins/ImageGraph/lang/zh-cn.json3
-rw-r--r--plugins/Installation/lang/cs.json1
-rw-r--r--plugins/Installation/lang/de.json1
-rw-r--r--plugins/Installation/lang/es.json1
-rw-r--r--plugins/Installation/lang/ja.json5
-rw-r--r--plugins/Installation/lang/sr.json1
-rw-r--r--plugins/Installation/lang/zh-cn.json12
-rw-r--r--plugins/Live/templates/getVisitorProfilePopup.twig2
m---------plugins/LogViewer0
m---------plugins/LoginHttpAuth0
m---------plugins/MarketingCampaignsReporting0
-rw-r--r--plugins/Marketplace/lang/cs.json1
-rw-r--r--plugins/Marketplace/lang/es.json1
-rw-r--r--plugins/Marketplace/lang/sr.json64
-rw-r--r--plugins/MobileMessaging/lang/cs.json3
-rw-r--r--plugins/MobileMessaging/lang/sr.json4
m---------plugins/Morpheus/icons0
-rw-r--r--plugins/Overlay/stylesheets/overlay.css4
-rw-r--r--plugins/Overlay/templates/index.twig2
-rw-r--r--plugins/PrivacyManager/lang/sr.json1
-rw-r--r--plugins/ProfessionalServices/ProfessionalServices.php51
-rw-r--r--plugins/ProfessionalServices/templates/promoHeatmaps.twig3
-rw-r--r--plugins/ProfessionalServices/templates/promoSessionRecordings.twig3
m---------plugins/QueuedTracking0
-rw-r--r--plugins/Referrers/lang/sr.json1
-rw-r--r--plugins/SEO/lang/bg.json1
-rw-r--r--plugins/SEO/lang/ca.json1
-rw-r--r--plugins/SEO/lang/cs.json1
-rw-r--r--plugins/SEO/lang/da.json1
-rw-r--r--plugins/SEO/lang/de.json1
-rw-r--r--plugins/SEO/lang/el.json1
-rw-r--r--plugins/SEO/lang/es.json1
-rw-r--r--plugins/SEO/lang/et.json1
-rw-r--r--plugins/SEO/lang/fa.json1
-rw-r--r--plugins/SEO/lang/fi.json1
-rw-r--r--plugins/SEO/lang/fr.json1
-rw-r--r--plugins/SEO/lang/hi.json1
-rw-r--r--plugins/SEO/lang/id.json1
-rw-r--r--plugins/SEO/lang/it.json1
-rw-r--r--plugins/SEO/lang/ja.json1
-rw-r--r--plugins/SEO/lang/ko.json1
-rw-r--r--plugins/SEO/lang/nb.json1
-rw-r--r--plugins/SEO/lang/nl.json1
-rw-r--r--plugins/SEO/lang/pt-br.json1
-rw-r--r--plugins/SEO/lang/ro.json1
-rw-r--r--plugins/SEO/lang/ru.json1
-rw-r--r--plugins/SEO/lang/sl.json1
-rw-r--r--plugins/SEO/lang/sq.json1
-rw-r--r--plugins/SEO/lang/sr.json1
-rw-r--r--plugins/SEO/lang/sv.json1
-rw-r--r--plugins/SEO/lang/tl.json1
-rw-r--r--plugins/SEO/lang/uk.json1
-rw-r--r--plugins/SEO/lang/vi.json1
-rw-r--r--plugins/SEO/lang/zh-cn.json1
-rw-r--r--plugins/SEO/lang/zh-tw.json1
-rw-r--r--plugins/ScheduledReports/lang/el.json2
-rw-r--r--plugins/ScheduledReports/lang/sr.json1
-rw-r--r--plugins/ScheduledReports/lang/zh-cn.json5
m---------plugins/SecurityInfo0
-rw-r--r--plugins/SegmentEditor/SegmentEditor.php13
-rw-r--r--plugins/SitesManager/Controller.php13
-rw-r--r--plugins/SitesManager/SitesManager.php22
-rw-r--r--plugins/SitesManager/lang/cs.json6
-rw-r--r--plugins/SitesManager/lang/de.json3
-rw-r--r--plugins/SitesManager/lang/en.json3
-rw-r--r--plugins/SitesManager/lang/es.json6
-rw-r--r--plugins/SitesManager/lang/fr.json5
-rw-r--r--plugins/SitesManager/lang/sr.json7
-rw-r--r--plugins/SitesManager/lang/zh-cn.json13
-rw-r--r--plugins/SitesManager/templates/siteWithoutData.twig5
m---------plugins/TasksTimetable0
-rw-r--r--plugins/Transitions/lang/zh-cn.json3
m---------plugins/TreemapVisualization0
-rw-r--r--plugins/UserCountry/lang/zh-cn.json21
-rw-r--r--plugins/UserCountryMap/lang/zh-cn.json5
-rw-r--r--plugins/UserId/lang/zh-cn.json4
-rw-r--r--plugins/UserLanguage/lang/zh-cn.json3
-rw-r--r--plugins/UsersManager/UsersManager.php15
-rw-r--r--plugins/UsersManager/angularjs/manage-user-access/manage-user-access.controller.js1
-rw-r--r--plugins/UsersManager/lang/ko.json4
-rw-r--r--plugins/UsersManager/lang/sr.json9
-rw-r--r--plugins/VisitFrequency/lang/zh-cn.json3
m---------plugins/VisitorGenerator0
-rw-r--r--plugins/Widgetize/lang/zh-cn.json3
-rw-r--r--tests/PHPUnit/Framework/TestingEnvironmentManipulator.php20
-rw-r--r--tests/PHPUnit/Framework/TestingEnvironmentVariables.php1
-rw-r--r--tests/PHPUnit/Integration/Application/Kernel/PluginListTest.php113
-rw-r--r--tests/PHPUnit/Integration/DbTest.php15
-rw-r--r--tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getBrand_month.xml4
-rw-r--r--tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__DevicesDetection.getBrand_day.xml4
-rw-r--r--tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_and_graph__ScheduledReports.generateReport_month.original.html2
-rw-r--r--tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_month.original.html2
-rw-r--r--tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_pdf_tables_only__ScheduledReports.generateReport_month.original.pdfbin552454 -> 552307 bytes
-rw-r--r--tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_and_graph__ScheduledReports.generateReport_week.original.html2
-rw-r--r--tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_only__ScheduledReports.generateReport_week.original.html2
-rw-r--r--tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_pdf_tables_only__ScheduledReports.generateReport_week.original.pdfbin568941 -> 568847 bytes
-rw-r--r--tests/PHPUnit/Unit/DataAccess/LogQueryBuilder/JoinGeneratorTest.php51
-rw-r--r--tests/UI/expected-screenshots/Dashboard_loaded_token_auth.png4
-rw-r--r--tests/UI/expected-screenshots/Dashboard_removed.png4
-rw-r--r--tests/UI/expected-screenshots/EmptySite_emptySiteDashboard.png4
-rw-r--r--tests/UI/expected-screenshots/EmptySite_emptySiteDashboard_ignored.png3
-rw-r--r--tests/UI/expected-screenshots/Overlay_loaded.png4
-rw-r--r--tests/UI/expected-screenshots/Overlay_loaded_with_segment.png4
-rw-r--r--tests/UI/expected-screenshots/Overlay_page_change.png4
-rw-r--r--tests/UI/expected-screenshots/Overlay_page_link_clicks.png4
-rw-r--r--tests/UI/expected-screenshots/Overlay_period_change.png4
-rw-r--r--tests/UI/expected-screenshots/Overlay_row_evolution.png4
-rw-r--r--tests/UI/expected-screenshots/Overlay_transitions.png4
-rw-r--r--tests/UI/expected-screenshots/Theme_home.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_admin_plugins.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_api_listing.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_dashboard1.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_dashboard2.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_fatal_error_safemode.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_segmented_visitorlog.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_visitor_profile_popup.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_visitors_devices.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_visitors_software.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_widgetize_visitor_log.png4
-rw-r--r--tests/UI/expected-screenshots/ViewDataTableTest_related_report_click.png4
-rw-r--r--tests/UI/specs/EmptySite_spec.js7
-rw-r--r--tests/resources/screenshot-override/override.css1
199 files changed, 1189 insertions, 309 deletions
diff --git a/.gitmodules b/.gitmodules
index a86f9ffe7f..c5eaa0f847 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -50,7 +50,10 @@
path = plugins/LoginLdap
url = https://github.com/piwik/plugin-LoginLdap.git
branch = master
-
+[submodule "plugins/MarketingCampaignsReporting"]
+ path = plugins/MarketingCampaignsReporting
+ url = https://github.com/piwik/plugin-MarketingCampaignsReporting.git
+ branch = master
# Add new Plugin submodule above this line ^^
#
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2048c4b838..ce9011186d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,6 +8,7 @@ The Product Changelog at **[piwik.org/changelog](http://piwik.org/changelog)** l
### New APIs
* A new event `Db.getActionReferenceColumnsByTable` has been added in case a plugin defines a custom log table which references data to the log_action table
+* The event `System.addSystemSummaryItems` and `System.filterSystemSummaryItems` have been added so plugins can add items and filter items of the system summary widget
* A new JavaScript tracker method `getPiwikUrl` has been added to retrieve the URL of where the Piwik instance is located
* A new JavaScript tracker method `getCurrentUrl` has been added to retrieve the current URL of the website.
* A new JavaScript tracker method `getNumTrackedPageViews` has been added to retrieve the number of tracked page views within the currently loaded page or web application.
diff --git a/core/Application/Kernel/PluginList.php b/core/Application/Kernel/PluginList.php
index 5d263a6ea3..70abc543d5 100644
--- a/core/Application/Kernel/PluginList.php
+++ b/core/Application/Kernel/PluginList.php
@@ -8,6 +8,8 @@
namespace Piwik\Application\Kernel;
+use Piwik\Plugin\MetadataLoader;
+
/**
* Lists the currently activated plugins. Used when setting up Piwik's environment before
* initializing the DI container.
@@ -88,7 +90,8 @@ class PluginList
}
/**
- * Sorts an array of plugins in the order they should be loaded.
+ * Sorts an array of plugins in the order they should be loaded. We cannot use DI here as DI is not initialized
+ * at this stage.
*
* @params string[] $plugins
* @return \string[]
@@ -111,10 +114,78 @@ class PluginList
$otherPluginsToLoadAfterDefaultPlugins = array_diff($plugins, $defaultPluginsLoadedFirst);
// sort by name to have a predictable order for those extra plugins
- sort($otherPluginsToLoadAfterDefaultPlugins);
+ natcasesort($otherPluginsToLoadAfterDefaultPlugins);
$sorted = array_merge($defaultPluginsLoadedFirst, $otherPluginsToLoadAfterDefaultPlugins);
return $sorted;
}
+
+ /**
+ * Sorts an array of plugins in the order they should be saved in config.ini.php. This basically influences
+ * the order of the plugin config.php and which config will be loaded first. We want to make sure to require the
+ * config or a required plugin first before loading the plugin that requires it.
+ *
+ * We do not sort using this logic on each request since it is much slower than `sortPlugins()`. The order
+ * of plugins in config.ini.php is only important for the ContainerFactory. During a regular request it is otherwise
+ * fine to load the plugins in the order of `sortPlugins()` since we will make sure that required plugins will be
+ * loaded first in plugin manager.
+ *
+ * @param string[] $plugins
+ * @param array[] $pluginJsonCache For internal testing only
+ * @return \string[]
+ */
+ public function sortPluginsAndRespectDependencies(array $plugins, $pluginJsonCache = array())
+ {
+ $global = $this->getPluginsBundledWithPiwik();
+
+ if (empty($global)) {
+ return $plugins;
+ }
+
+ // we need to make sure a possibly disabled plugin will be still loaded before any 3rd party plugin
+ $global = array_merge($global, $this->corePluginsDisabledByDefault);
+
+ $global = array_values($global);
+ $plugins = array_values($plugins);
+
+ $defaultPluginsLoadedFirst = array_intersect($global, $plugins);
+
+ $otherPluginsToLoadAfterDefaultPlugins = array_diff($plugins, $defaultPluginsLoadedFirst);
+
+ // we still want to sort alphabetically by default
+ natcasesort($otherPluginsToLoadAfterDefaultPlugins);
+
+ $sorted = array();
+ foreach ($otherPluginsToLoadAfterDefaultPlugins as $pluginName) {
+ $sorted = $this->sortRequiredPlugin($pluginName, $pluginJsonCache, $otherPluginsToLoadAfterDefaultPlugins, $sorted);
+ }
+
+ $sorted = array_merge($defaultPluginsLoadedFirst, $sorted);
+
+ return $sorted;
+ }
+
+ private function sortRequiredPlugin($pluginName, &$pluginJsonCache, $toBeSorted, $sorted)
+ {
+ if (!isset($pluginJsonCache[$pluginName])) {
+ $loader = new MetadataLoader($pluginName);
+ $pluginJsonCache[$pluginName] = $loader->loadPluginInfoJson();
+ }
+
+ if (!empty($pluginJsonCache[$pluginName]['require'])) {
+ $dependencies = $pluginJsonCache[$pluginName]['require'];
+ foreach ($dependencies as $possiblePluginName => $key) {
+ if (in_array($possiblePluginName, $toBeSorted, true) && !in_array($possiblePluginName, $sorted, true)) {
+ $sorted = $this->sortRequiredPlugin($possiblePluginName, $pluginJsonCache, $toBeSorted, $sorted);
+ }
+ }
+ }
+
+ if (!in_array($pluginName, $sorted, true)) {
+ $sorted[] = $pluginName;
+ }
+
+ return $sorted;
+ }
}
diff --git a/core/DataAccess/LogQueryBuilder/JoinGenerator.php b/core/DataAccess/LogQueryBuilder/JoinGenerator.php
index 0324bff9b5..a7f8b5499f 100644
--- a/core/DataAccess/LogQueryBuilder/JoinGenerator.php
+++ b/core/DataAccess/LogQueryBuilder/JoinGenerator.php
@@ -62,6 +62,38 @@ class JoinGenerator
}
}
}
+
+ foreach ($this->tables as $index => $table) {
+ if (is_array($table)) {
+ if (!isset($table['tableAlias'])) {
+ $tableName = $table['table'];
+ $numTables = count($this->tables);
+ for ($j = $index + 1; $j < $numTables; $j++) {
+ if (!isset($this->tables[$j])) {
+ continue;
+ }
+
+ $tableOther = $this->tables[$j];
+ if (is_string($tableOther) && $tableOther === $tableName) {
+ unset($this->tables[$j]);
+ }
+ }
+ }
+ } elseif (is_string($table)) {
+ $numTables = count($this->tables);
+
+ for ($j = $index + 1; $j < $numTables; $j++) {
+ if (isset($this->tables[$j]) && is_array($this->tables[$j]) && !isset($this->tables[$j]['tableAlias'])) {
+ $tableOther = $this->tables[$j];
+ if ($table === $tableOther['table']) {
+ $message = sprintf('Please reorganize the joined tables as the table %s in %s cannot be joined correctly. We recommend to join tables with arrays first. %s', $table, json_encode($this->tables), json_encode(debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 10)));
+ throw new Exception($message);
+ }
+ }
+
+ }
+ }
+ }
}
/**
diff --git a/core/Db/Adapter/Mysqli.php b/core/Db/Adapter/Mysqli.php
index c06c8440d8..396ab60343 100644
--- a/core/Db/Adapter/Mysqli.php
+++ b/core/Db/Adapter/Mysqli.php
@@ -95,6 +95,17 @@ class Mysqli extends Zend_Db_Adapter_Mysqli implements AdapterInterface
}
/**
+ * Return number of affected rows in last query
+ *
+ * @param mixed $queryResult Result from query()
+ * @return int
+ */
+ public function rowCount($queryResult)
+ {
+ return mysqli_affected_rows($this->_connection);
+ }
+
+ /**
* Returns true if this adapter's required extensions are enabled
*
* @return bool
diff --git a/core/Db/Adapter/Pdo/Mysql.php b/core/Db/Adapter/Pdo/Mysql.php
index 9e26fb7a2b..360e6a57e8 100644
--- a/core/Db/Adapter/Pdo/Mysql.php
+++ b/core/Db/Adapter/Pdo/Mysql.php
@@ -194,6 +194,17 @@ class Mysql extends Zend_Db_Adapter_Pdo_Mysql implements AdapterInterface
}
/**
+ * Return number of affected rows in last query
+ *
+ * @param mixed $queryResult Result from query()
+ * @return int
+ */
+ public function rowCount($queryResult)
+ {
+ return $queryResult->rowCount();
+ }
+
+ /**
* Retrieve client version in PHP style
*
* @return string
diff --git a/core/Plugin/Manager.php b/core/Plugin/Manager.php
index 72b9b9052a..ee4f658b88 100644
--- a/core/Plugin/Manager.php
+++ b/core/Plugin/Manager.php
@@ -15,7 +15,6 @@ use Piwik\Columns\Dimension;
use Piwik\Config;
use Piwik\Config as PiwikConfig;
use Piwik\Container\StaticContainer;
-use Piwik\Db;
use Piwik\EventDispatcher;
use Piwik\Exception\PluginDeactivatedException;
use Piwik\Filesystem;
@@ -26,10 +25,8 @@ use Piwik\Plugin;
use Piwik\Plugin\Dimension\ActionDimension;
use Piwik\Plugin\Dimension\ConversionDimension;
use Piwik\Plugin\Dimension\VisitDimension;
-use Piwik\Session;
use Piwik\Settings\Storage as SettingsStorage;
use Piwik\Theme;
-use Piwik\Tracker;
use Piwik\Translation\Translator;
use Piwik\Updater;
@@ -206,7 +203,7 @@ class Manager
*/
private function updatePluginsConfig($pluginsToLoad)
{
- $pluginsToLoad = $this->pluginList->sortPlugins($pluginsToLoad);
+ $pluginsToLoad = $this->pluginList->sortPluginsAndRespectDependencies($pluginsToLoad);
$section = PiwikConfig::getInstance()->Plugins;
$section['Plugins'] = $pluginsToLoad;
PiwikConfig::getInstance()->Plugins = $section;
@@ -838,37 +835,56 @@ class Manager
{
$pluginsToPostPendingEventsTo = array();
foreach ($this->pluginsToLoad as $pluginName) {
- if (!$this->isPluginLoaded($pluginName)
- && !$this->isPluginThirdPartyAndBogus($pluginName)
- ) {
- $newPlugin = $this->loadPlugin($pluginName);
- if ($newPlugin === null) {
- continue;
- }
+ $pluginsToPostPendingEventsTo = $this->reloadActivatedPlugin($pluginName, $pluginsToPostPendingEventsTo);
+ }
- if ($newPlugin->hasMissingDependencies()) {
- $this->deactivatePlugin($pluginName);
+ // post pending events after all plugins are successfully loaded
+ foreach ($pluginsToPostPendingEventsTo as $plugin) {
+ EventDispatcher::getInstance()->postPendingEventsTo($plugin);
+ }
+ }
- // at this state we do not know yet whether current user has super user access. We do not even know
- // if someone is actually logged in.
- $message = Piwik::translate('CorePluginsAdmin_WeDeactivatedThePluginAsItHasMissingDependencies', array($pluginName, $newPlugin->getMissingDependenciesAsString()));
- $message .= ' ';
- $message .= Piwik::translate('General_PleaseContactYourPiwikAdministrator');
+ private function reloadActivatedPlugin($pluginName, $pluginsToPostPendingEventsTo)
+ {
+ if ($this->isPluginLoaded($pluginName) || $this->isPluginThirdPartyAndBogus($pluginName)) {
+ return $pluginsToPostPendingEventsTo;
+ }
- $notification = new Notification($message);
- $notification->context = Notification::CONTEXT_ERROR;
- Notification\Manager::notify('PluginManager_PluginDeactivated', $notification);
- continue;
- }
+ $newPlugin = $this->loadPlugin($pluginName);
- $pluginsToPostPendingEventsTo[] = $newPlugin;
+ if ($newPlugin === null) {
+ return $pluginsToPostPendingEventsTo;
+ }
+
+ $requirements = $newPlugin->getMissingDependencies();
+
+ if (!empty($requirements)) {
+ foreach ($requirements as $requirement) {
+ $possiblePluginName = $requirement['requirement'];
+ if (in_array($possiblePluginName, $this->pluginsToLoad, $strict = true)) {
+ $pluginsToPostPendingEventsTo = $this->reloadActivatedPlugin($possiblePluginName, $pluginsToPostPendingEventsTo);
+ }
}
}
- // post pending events after all plugins are successfully loaded
- foreach ($pluginsToPostPendingEventsTo as $plugin) {
- EventDispatcher::getInstance()->postPendingEventsTo($plugin);
+ if ($newPlugin->hasMissingDependencies()) {
+ $this->unloadPluginFromMemory($pluginName);
+
+ // at this state we do not know yet whether current user has super user access. We do not even know
+ // if someone is actually logged in.
+ $message = Piwik::translate('CorePluginsAdmin_WeCouldNotLoadThePluginAsItHasMissingDependencies', array($pluginName, $newPlugin->getMissingDependenciesAsString()));
+ $message .= ' ';
+ $message .= Piwik::translate('General_PleaseContactYourPiwikAdministrator');
+
+ $notification = new Notification($message);
+ $notification->context = Notification::CONTEXT_ERROR;
+ Notification\Manager::notify('PluginManager_PluginUnloaded', $notification);
+ return $pluginsToPostPendingEventsTo;
}
+
+ $pluginsToPostPendingEventsTo[] = $newPlugin;
+
+ return $pluginsToPostPendingEventsTo;
}
public function getIgnoredBogusPlugins()
diff --git a/core/Plugin/MetadataLoader.php b/core/Plugin/MetadataLoader.php
index bde849ff7e..b3d552cf80 100644
--- a/core/Plugin/MetadataLoader.php
+++ b/core/Plugin/MetadataLoader.php
@@ -11,6 +11,7 @@ namespace Piwik\Plugin;
use Exception;
use Piwik\Piwik;
use Piwik\Version;
+use Piwik\Plugin;
/**
* @see core/Version.php
@@ -90,12 +91,22 @@ class MetadataLoader
);
}
- private function loadPluginInfoJson()
+ /**
+ * It is important that this method works without using anything from DI
+ * @return array|mixed
+ */
+ public function loadPluginInfoJson()
{
- $path = $this->getPathToPluginFolder() . '/' . self::PLUGIN_JSON_FILENAME;
+ $path = $this->getPathToPluginJson();
return $this->loadJsonMetadata($path);
}
+ public function getPathToPluginJson()
+ {
+ $path = $this->getPathToPluginFolder() . '/' . self::PLUGIN_JSON_FILENAME;
+ return $path;
+ }
+
private function loadJsonMetadata($path)
{
if (!file_exists($path)) {
diff --git a/core/Version.php b/core/Version.php
index 6c175843e0..e424ffe26c 100644
--- a/core/Version.php
+++ b/core/Version.php
@@ -20,7 +20,7 @@ final class Version
* The current Piwik version.
* @var string
*/
- const VERSION = '3.0.4-b3';
+ const VERSION = '3.0.4-rc1';
public function isStableVersion($version)
{
diff --git a/core/ViewDataTable/Config.php b/core/ViewDataTable/Config.php
index 0eb99aa9f5..77331390be 100644
--- a/core/ViewDataTable/Config.php
+++ b/core/ViewDataTable/Config.php
@@ -463,6 +463,16 @@ class Config
public $export_limit = '';
/**
+ * Message to show if not data is available for the report
+ * Defaults to `CoreHome_ThereIsNoDataForThisReport` if not set
+ *
+ * Attention: Message will be printed raw. Don't forget to escape where needed!
+ *
+ * @var string
+ */
+ public $no_data_message = '';
+
+ /**
* @ignore
*/
public $report_id = '';
diff --git a/lang/fi.json b/lang/fi.json
index 9d089a9c50..9ecc4ffe0c 100644
--- a/lang/fi.json
+++ b/lang/fi.json
@@ -68,6 +68,7 @@
"ColumnPageBounceRateDocumentation": "% käynneistä jotka alkoivat tällä sivulla ja päättyivät heti.",
"ColumnPageviews": "Sivukatseluita",
"ColumnPageviewsDocumentation": "Käyntien määrä tällä sivulla.",
+ "ColumnPercentageVisits": "%% käyntiä",
"ColumnRevenue": "Tulot",
"ColumnSumVisitLength": "Kaikkien kävijöiden aika yhteensä (sekunteja)",
"ColumnTotalPageviews": "Sivulatauksia yhteensä",
@@ -156,6 +157,10 @@
"ExceptionLanguageFileNotFound": "Kieltä %s ei löydy",
"ExceptionMethodNotFound": "Metodia '%1$s' ei ole olemassa tai ei ole saatavilla moduulissa '%2$s'.",
"ExceptionMissingFile": "Puuttuva tiedosto: %s",
+ "ExceptionUnexpectedFilePleaseDelete": "Poista nämä tiedostot ehkäistäksesi virheitä.",
+ "ExceptionUnexpectedDirectoryPleaseDelete": "Poista nämä hakemistot ehkäistäksesi virheitä.",
+ "ExceptionFileToDelete": "Poistettava tiedosto: %s",
+ "ExceptionDirectoryToDelete": "Poistettava hakemisto: %s",
"ExceptionNonceMismatch": "Turvallisuustarkisteen varmistaminen epäonnistui.",
"ExceptionPrivilege": "Et voi käyttää resurssia, sillä tarvitset pääsyn %s.",
"ExceptionPrivilegeAccessWebsite": "Et voi käyttää tätä resurssia, sillä siihen vaaditaan %s pääsy sivulle %d.",
@@ -177,6 +182,7 @@
"Forums": "Foorumit",
"FromReferrer": "mistä",
"GeneralInformation": "Yleistä tietoa",
+ "GeneralSettings": "Yleiset asetukset",
"GetStarted": "Aloita",
"GiveUsYourFeedback": "Anna palautetta!",
"Goal": "Tavoite",
@@ -261,6 +267,8 @@
"OperationIsNot": "Ei ole",
"OperationLessThan": "Pienempi kuin",
"OperationNotEquals": "Ei täsmää",
+ "OperationStartsWith": "Alkaa",
+ "OperationEndsWith": "Päättyy",
"OptionalSmtpPort": "Valinnainen. Oletus 25 salaamattomalle ja TLS:lle ja 465 SSL:lle.",
"Options": "Asetukset",
"Or": "tai",
@@ -280,6 +288,7 @@
"Piechart": "Ympyräkaavio",
"PiwikXIsAvailablePleaseNotifyPiwikAdmin": "%1$s on saatavissa. Ole hyvä ja ilmoita %2$sPiwik ylläpitäjälle%3$s.",
"PiwikXIsAvailablePleaseUpdateNow": "Piwik %1$s on saatavilla. %2$s Päivitä nyt!%3$s (katso %4$s muutokset%5$s).",
+ "PleaseContactYourPiwikAdministrator": "Ota yhteyttä Piwik-ylläpitääjäsi.",
"PleaseSpecifyValue": "Ole hyvä ja anna arvo kentälle '%s'.",
"PleaseUpdatePiwik": "Ole hyvä ja päivitä Piwik",
"Plugin": "Lisäosa",
@@ -384,6 +393,7 @@
"Warning": "Varoitus",
"Warnings": "Varoitukset",
"WarningPhpVersionXIsTooOld": "Käyttämäsi PHP versio %s on ohittanut EOL (End of Life) ajankohdan. Suosittelemme vakavasti ohjelmiston päivittämistä uudempaan versioon, sillä käyttämäsi versio voi altistaa sivuston tietoturva-aukoille ja virheille, jotka ovat korjattu PHP:n uudemmissa versioissa.",
+ "YouMustUpgradePhpVersionToReceiveLatestPiwik": "Sinun täytyy päivittää PHP-versiosi saadaksesi uusimmat Piwik-päivitykset.",
"WarningFileIntegrityNoManifest": "Tiedostojen eheystarkistusta ei voida suorittaa, tiedosto manifest.inc.php puuttuu",
"WarningFileIntegrityNoManifestDeployingFromGit": "Jos olet ottanut Piwikin käyttöön Git-järjestelmän kautta, tämä viesti on normaali.",
"WarningFileIntegrityNoMd5file": "Tiedostojen eheystarkistusta ei voi suorittaa, funktio md5_file() puuttuu.",
diff --git a/lang/ko.json b/lang/ko.json
index e6ee316cf6..3f8941fd60 100644
--- a/lang/ko.json
+++ b/lang/ko.json
@@ -152,6 +152,7 @@
"ExceptionLanguageFileNotFound": "'%s' 언어 파일을 찾을 수 없습니다",
"ExceptionMethodNotFound": "메서드 '%1$s'는 존재하지 않거나 모듈 '%2$s'에서 사용할 수 없습니다.",
"ExceptionMissingFile": "누락된 파일: %s",
+ "ExceptionUnexpectedDirectoryPleaseDelete": "오류 방지를 위해 이들 폴더를 삭제해주세요.",
"ExceptionFileToDelete": "삭제할 파일: %s",
"ExceptionDirectoryToDelete": "삭제할 디렉토리: %s",
"ExceptionNonceMismatch": "이 양식의 보안 토큰을 검증 할 수 없습니다.",
@@ -278,6 +279,7 @@
"Price": "가격",
"ProductConversionRate": "제품 전환율",
"ProductRevenue": "제품 수익",
+ "Measurable": "측정가능한",
"Measurables": "측정가능한 것",
"PurchasedProducts": "구입한 제품",
"Quantity": "수량",
@@ -308,6 +310,7 @@
"Save": "저장",
"SaveImageOnYourComputer": "이미지를 저장하려면 이미지를 오른쪽으로 클릭하여 \"다른 이름으로 그림 저장...\"을 선택합니다",
"Search": "검색",
+ "Clear": "비우기",
"SearchNoResults": "결과 없음",
"SeeAll": "다 보기",
"SeeTheOfficialDocumentationForMoreInformation": "자세한 내용은 %1$s 공식 문서 %2$s를 참조하세요.",
@@ -364,6 +367,7 @@
"VisitType": "방문 타입",
"VisitTypeExample": "예를 들어, 이전 방문에서 무언가를 구입한 방문자를 포함한 모든 리피터를 선택하기 위한 API 요청 %s를 포함합니다.",
"Warning": "경고",
+ "Warnings": "경고",
"WarningPhpVersionXIsTooOld": "현재 사용하고 있는 PHP 버전 %s은 지원이 끝났습니다(End of Life, EOL). 최근에 업그레이드 된 PHP 버전에서 해결한 보안 문제나 버그 등이 사용하고 계신 버전에서 남아 있을 수 있으니 업그레이드 하시길 강력히 권장합니다.",
"WarningFileIntegrityNoManifest": "manifest.inc.php가 없기 때문에, 파일의 무결성 검사를 수행할 수 없습니다.",
"WarningFileIntegrityNoManifestDeployingFromGit": "만약 Git으로부터 Piwik를 사용하고 있다면, 이 메세지는 정상입니다.",
diff --git a/lang/nl.json b/lang/nl.json
index a2154105dd..fac8b3447c 100644
--- a/lang/nl.json
+++ b/lang/nl.json
@@ -509,7 +509,7 @@
"YouAreOffline": "Sorry, u bent momenteel offline"
},
"RowEvolution": {
- "AvailableMetrics": "Beschikbare gegevens",
+ "AvailableMetrics": "Beschikbare statistieken",
"CompareDocumentation": "Klik op de onderstaande link en open een popup voor een volgende rij uit dezelfde tabel om meerdere gegevens te vergelijken.<br\/>Gebruik shift-click om de rij voor vergelijking te markeren zonder deze popup te openen.",
"CompareRows": "Records vergelijken",
"ComparingRecords": "Bezig met %s rijen te vergelijken",
diff --git a/lang/sr.json b/lang/sr.json
index 29f60d6d7e..378d0ad139 100644
--- a/lang/sr.json
+++ b/lang/sr.json
@@ -62,12 +62,15 @@
"ColumnNbActions": "Akcije",
"ColumnNbActionsDocumentation": "Broj akcija odrađenih od strane Vaših posetilaca. Akcije mogu biti pregledi strana, skidanje materijala sa sajta ili linkovi van sajta.",
"ColumnNbUniqVisitors": "Jedinstveni posetioci",
+ "ColumnNbUniqVisitorsDocumentation": "Broj jedinstvenih posetilaca koji dolaze na vaš sajt. Svaki korisnik se računa jednom, čak i ako poseti sajt više puta dnevno.",
"ColumnNbUsers": "Korisnici",
"ColumnNbUsersDocumentation": "Broj korisnika koji su prijavljeni na vaš sajt. U pitanju je broj jedinstvenih aktivnih korisnika koji imaju postavljen korisnički ID (kroz Tracking code funkciju 'setUserId').",
"ColumnNbVisits": "Posete",
+ "ColumnNbVisitsDocumentation": "Ako posetioc dođe na vaš sajt po prvi put ili ako poseti stranu nakon više od 30 minuta od poslednjeg pregleda, onda se njegova poseta računa kao nova poseta.",
"ColumnPageBounceRateDocumentation": "Procenat poseta koje su počele na ovoj stranici i odmah napustile sajt.",
"ColumnPageviews": "Pregledane stranice",
"ColumnPageviewsDocumentation": "Koliko puta je ova stranica posećena.",
+ "ColumnPercentageVisits": "%% Posete",
"ColumnRevenue": "Prihod",
"ColumnSumVisitLength": "Ukupno vreme provedeno od strane posetilaca (u sekundama)",
"ColumnTotalPageviews": "Ukupan broj pregleda stranica",
@@ -158,6 +161,12 @@
"ExceptionLanguageFileNotFound": "Datoteka sa jezikom '%s' nije nađena.",
"ExceptionMethodNotFound": "Metod '%1$s' ne postoji ili nije na raspolaganju u modulu '%2$s'.",
"ExceptionMissingFile": "Nedostajuća datoteka: %s",
+ "ExceptionUnexpectedFile": "Pronađeni su fajlovi koji ne bi trebalo da budu tu.",
+ "ExceptionUnexpectedFilePleaseDelete": "Molimo vas da obrišete ove fajlove kako ne bi došlo do grešaka.",
+ "ExceptionUnexpectedDirectory": "Pronađeni su folderi koji ne bi trebalo da budu tu.",
+ "ExceptionUnexpectedDirectoryPleaseDelete": "Molimo vas da obrišete ove foldere kako ne bi došlo do grešaka.",
+ "ExceptionFileToDelete": "Fajl za brisanje: %s",
+ "ExceptionDirectoryToDelete": "Folder za brisanje: %s",
"ExceptionNonceMismatch": "Nije moguće proveriti sigurnosni token na ovoj formi.",
"ExceptionPrivilege": "Ne možete pristupiti resursu pošto to zahteva %s.",
"ExceptionPrivilegeAccessWebsite": "Ne možete pristupiti resursu pošto to zahteva %s za sajt id = %d.",
@@ -174,6 +183,9 @@
"ExportAsImage": "Snimi kao sliku",
"ExportThisReport": "Snimi ove podatke u neki drugi oblik",
"Faq": "Pitanja i odgovori",
+ "FileIntegrityWarning": "Provera integriteta datoteka je neuspešna i prijavljene su greške. Trebalo bi da ispravite problem te da osvežite ovu stranicu sve dok ne prestane da prikazuje greške.",
+ "FileIntegrityWarningReupload": "Ove greške su možda nastale usled problema prilikom postavljanja Piwik datoteka.",
+ "FileIntegrityWarningReuploadBis": "Pokušajte ponovo da prenesete sve Piwik datoteke na server u binarnom modu.",
"First": "Prva",
"Flatten": "Ravno",
"ForExampleShort": "npr.",
@@ -229,6 +241,7 @@
"MultiSitesSummary": "Svi sajtovi",
"Name": "Ime",
"NbActions": "Broj akcija",
+ "NbInteractions": "Broj interakcija",
"NbSearches": "Broj pretraga",
"NeedMoreHelp": "Da li vam je potrebna pomoć?",
"Never": "Nikad",
@@ -284,6 +297,7 @@
"Password": "Lozinka",
"Period": "Period",
"Piechart": "Grafikon",
+ "PiwikIsACollaborativeProjectYouCanContributeAndDonateNextRelease": "%1$sPiwik%2$s je saradnički projekat %7$sPiwik tim%8$s članova kao i mnogih drugih učesnika širom sveta. <br\/> Ukoliko ste Piwik fan, možete da pomognete: pogledajte %3$sKako da učestvujete u Piwik-u%4$s, ili %5$sizvršite donaciju%6$s kako biste pomogli razvoju sledećeg Piwik izdanja!",
"PiwikXIsAvailablePleaseNotifyPiwikAdmin": "%1$s je izašao. Obavestite %2$sPiwik administratora%3$s.",
"PiwikXIsAvailablePleaseUpdateNow": "Objavljen je Piwik %1$s. %2$s Molimo Vas da izvršite nadogradnju!%3$s (pogledajte %4$spromene%5$s).",
"PleaseContactYourPiwikAdministrator": "Molimo vas da kontaktirate vašeg Piwik administratora.",
@@ -356,6 +370,8 @@
"TimeAgo": "pre %s",
"TimeFormat": "Format vremena",
"TimeOnPage": "Vreme na strani",
+ "ToDeleteAllDirectoriesRunThisCommand": "Ukoliko želite da obrišete sve ove direktorijume odjednom, možete pokrenuti sledeću komandu:",
+ "ToDeleteAllFilesRunThisCommand": "Ukoliko želite da obrišete sve ove fajlove odjednom, možete pokrenuti sledeću komandu:",
"Total": "Ukupno",
"TotalRatioTooltip": "Ovo je %1$s od %2$s %3$s.",
"TotalRevenue": "Ukupan prihod",
diff --git a/lang/zh-cn.json b/lang/zh-cn.json
index 3b2822a77d..efac3557c2 100644
--- a/lang/zh-cn.json
+++ b/lang/zh-cn.json
@@ -4,17 +4,17 @@
"24HourClock": "24 小时制式",
"AbandonedCarts": "丢弃的购物车",
"AboutPiwikX": "关于 Piwik %s",
- "Action": "操作",
+ "Action": "行为",
"Actions": "页面分析",
"Add": "增加",
"AfterEntry": "进入这里之后",
"All": "所有",
- "AllowPiwikArchivingToTriggerBrowser": "归档在浏览器中查看时报告",
+ "AllowPiwikArchivingToTriggerBrowser": "在浏览器中查看报告时进行归档",
"AllWebsitesDashboard": "所有网站报表",
"And": "和",
"API": "API",
- "Apply": "同意",
- "ArchivingInlineHelp": "对于中高流量的网站,建议禁用Piwik浏览器触发处理。最好是设置定时任务(Cron job),每小时处理一次Piwik报表。",
+ "Apply": "应用",
+ "ArchivingInlineHelp": "对于中高流量的网站,建议禁用Piwik浏览器触发归档。最好是设置定时任务,每小时处理一次Piwik报表。",
"ArchivingTriggerDescription": "适合大型的Piwik安装,需要%1$s设置定时任务(Cron job) %2$s来自动处理报表。",
"AuthenticationMethodSmtp": "SMTP 验证方法",
"AverageOrderValue": "平均订单额",
@@ -22,25 +22,24 @@
"AverageQuantity": "平均数量",
"BackToPiwik": "返回 Piwik",
"Broken": "出错",
- "BrokenDownReportDocumentation": "下面的图形中包含多个报表,点击访客报表中的数据将会显示图形。",
+ "BrokenDownReportDocumentation": "下面的图形中包含多个报表,点击访客报表中的数据将会显示图形。还可以通过点击报表进行放大。",
"Cancel": "取消",
"CannotUnzipFile": "不能解压缩文件%1$s: %2$s",
"ChangePassword": "修改密码",
- "ChangeTagCloudView": "提示: 您可以通过报表下方的控制按钮,用不同于标签云的其它格式显示报表。",
- "ChooseDate": "选择日期,当前默认的日期为:%s",
+ "ChooseDate": "选择日期,当前选择的日期为:%s",
"ChooseLanguage": "选择语言",
"ChoosePeriod": "选择时间段",
"ClickHere": "点击查看更多信息",
"ClickToChangePeriod": "点击更改时间段",
"Close": "关闭",
- "ClickToSearch": "点击选择",
+ "ClickToSearch": "点击进行搜索",
"ColumnActionsPerVisit": "平均活动次数",
- "ColumnActionsPerVisitDocumentation": "平均活动次数 (查看页面、站内搜索、下载或离站链接)。",
+ "ColumnActionsPerVisitDocumentation": "访问期间的平均活动次数 (包括查看页面、站内搜索、下载或离站链接)。",
"ColumnAverageGenerationTime": "平均生成时间",
- "ColumnAverageGenerationTimeDocumentation": "生成页面的评价时间。这个指标显示服务器生成页面,加上访客接收服务器响应的时间。'平均生成时间'越低,访客访问速度越快!",
+ "ColumnAverageGenerationTimeDocumentation": "生成页面的平均时间。这个指标显示服务器生成页面,加上访客接收服务器响应的时间。'平均生成时间'越低,访客访问速度越快!",
"ColumnAverageTimeOnPage": "平均停留时间",
"ColumnAverageTimeOnPageDocumentation": "访客在这个页面上的平均停留时间,不是整个网站)。",
- "ColumnAvgTimeOnSite": "平均停留时间",
+ "ColumnAvgTimeOnSite": "网站平均停留时间",
"ColumnAvgTimeOnSiteDocumentation": "平均停留时间。",
"ColumnBounceRate": "跳出率",
"ColumnBounceRateDocumentation": "只查看单个页面的百分比,即访客直接从入口页面离开网站。",
@@ -49,7 +48,7 @@
"ColumnConversionRate": "转化率",
"ColumnConversionRateDocumentation": "触发目标转化的百分比。",
"ColumnDestinationPage": "结果页面",
- "ColumnEntrances": "进入次数",
+ "ColumnEntrances": "进入",
"ColumnEntrancesDocumentation": "从这个页面开始的访问次数。",
"ColumnExitRate": "退出率",
"ColumnExitRateDocumentation": "查看该页面后离开网站的百分比。",
@@ -59,13 +58,13 @@
"ColumnKeyword": "关键词",
"ColumnLabel": "标签",
"ColumnMaxActions": "单次访问的最大活动量",
- "ColumnNbActions": "活动次数",
+ "ColumnNbActions": "活动",
"ColumnNbActionsDocumentation": "访客执行的活动次数。活动包括查看页面、站内搜索、下载或者离站链接。",
"ColumnNbUniqVisitors": "访客数",
"ColumnNbUniqVisitorsDocumentation": "网站独立访客数量。即使一天之内多次访问网站也只会被统计一次",
"ColumnNbUsers": "用户管理",
"ColumnNbUsersDocumentation": "登录你的网站的用户数量。它是具有用户ID组唯一活跃用户的数量(通过追踪码函数'setUserId')。",
- "ColumnNbVisits": "访问次数",
+ "ColumnNbVisits": "访问",
"ColumnNbVisitsDocumentation": "访客第一次访问你的网站或者距离上次访问时间超过30分钟,会被统计为新的访问。",
"ColumnPageBounceRateDocumentation": "以该页为起始页后马上离开的百分比。",
"ColumnPageviews": "浏览次数",
@@ -85,7 +84,7 @@
"ColumnVisitsWithConversions": "访问转化",
"ConfigFileIsNotWritable": "Piwik 配置文件 %1$s 无法写入,无法保存部分修改。%2$s 请修改配置文件的权限为可写。",
"Continue": "继续",
- "ContinueToPiwik": "继续 Piwik",
+ "ContinueToPiwik": "继续使用Piwik",
"CurrentlyUsingUnsecureHttp": "目前您正在使用Piwik在不安全的HTTP,这是有风险的。我们建议您设置Piwik使用SSL(HTTPS)以提高安全性。",
"CreatedByUser": "版权所有 %s",
"CurrentMonth": "本月",
@@ -115,7 +114,7 @@
"Desktop": "桌面",
"Details": "详情",
"Discount": "折扣",
- "DisplaySimpleTable": "显示简易表格",
+ "DisplaySimpleTable": "显示简单报表",
"DisplayTableWithGoalMetrics": "显示目标报表",
"DisplayTableWithMoreMetrics": "显示详细报表",
"Documentation": "文档",
@@ -125,13 +124,13 @@
"DownloadFail_FileExists": "文件 %s 已存在!",
"DownloadFail_FileExistsContinue": "尝试继续下载 %s, 但是已有完整的文件!",
"DownloadFail_HttpRequestFail": "无法下载文件!您下载文件的网站有问题,请稍后重试或自己获得文件。",
- "DownloadFullVersion": "%1$s下载%2$s完整版本!来吧 %3$s",
+ "DownloadFullVersion": "%1$s下载%2$s完整版本!下载%3$s",
"DownloadPleaseRemoveExisting": "如果要替换,请删除已有文件。",
- "Downloads": "下载次数",
+ "Downloads": "下载",
"EcommerceOrders": "订单",
"EcommerceVisitStatusDesc": "访问结束时的电子商务状态",
"EcommerceVisitStatusEg": "例如,要选择所有下订单的访问,API 请求要包含 %s",
- "Edit": "修改",
+ "Edit": "编辑",
"EncryptedSmtpTransport": "输入您的SMTP服务器需要的传输层加密方式",
"Error": "错误",
"Errors": "错误",
@@ -140,9 +139,9 @@
"EvolutionSummaryGeneric": "%1$s 在 %2$s 对比 %3$s 在 %4$s。趋势: %5$s",
"ExceptionContactSupportGeneric": "如果您仍然有这个问题,请%1$s联系您的Piwik管理员%2$s寻求援助。",
"ExceptionCheckUserHasSuperUserAccessOrIsTheUser": "用户必须是超级用户或是'%s' 自己。",
- "ExceptionConfigurationFileNotFound": "配置文件 {%s} 找不到。",
- "ExceptionConfigurationFileExistsButNotReadable": "设置文件 %s 不能被 Piwik 读取,请检查文件权限。",
- "ExceptionConfigurationFilePleaseCheckReadableByUser": "请检查用户”%2$s“具有读写 %1$s 的权限。",
+ "ExceptionConfigurationFileNotFound": "配置文件 {%s} 找不到或者不可读。",
+ "ExceptionConfigurationFileExistsButNotReadable": "配置文件%s不能被 Piwik 读取,请检查文件权限。",
+ "ExceptionConfigurationFilePleaseCheckReadableByUser": "请检查用户”%2$s“具有读%1$s 的权限。",
"ExceptionDatabaseVersion": "您的 %1$s 版本为 %2$s ,但 Piwik 需求至少要 %3$s。",
"ExceptionDatabaseVersionNewerThanCodebase": "您的Piwik代码库运行旧版本%1$s,但是我们检测到您的Piwik数据库已经升级到新的版本%2$s。",
"ExceptionDatabaseVersionNewerThanCodebaseWait": "也许你的Piwik管理员正在完成升级过程。请在几分钟后再试一次。",
@@ -157,13 +156,13 @@
"ExceptionInvalidRendererFormat": "'%1$s' 是不合法的。尝试以下任一来取代: %2$s 。",
"ExceptionInvalidReportRendererFormat": "报表格式 %1$s 无效,尝试以下内容 %2$s",
"ExceptionInvalidStaticGraphType": "统计图形格式 '%1$s' 不正确,请用下面的代替: %2$s。",
- "ExceptionInvalidToken": "符号不正确。",
+ "ExceptionInvalidToken": "口令无效。",
"ExceptionLanguageFileNotFound": "没有语言文件 '%s'。",
"ExceptionMethodNotFound": "'%1$s' 不存在或不适用于模块 '%2$s' 里。",
"ExceptionMissingFile": "缺少文件: %s",
- "ExceptionUnexpectedFile": "文件被发现于你的Piwik,但是不是我们所期望的。",
+ "ExceptionUnexpectedFile": "发现你的Piwik文件,但是不是我们所期望的。",
"ExceptionUnexpectedFilePleaseDelete": "请删除这些文件以防止错误发生。",
- "ExceptionUnexpectedDirectory": "目录被发现于你的Piwik,但是不是我们所期望的。",
+ "ExceptionUnexpectedDirectory": "发现你的Piwik中目录,但是不是我们所期望的。",
"ExceptionUnexpectedDirectoryPleaseDelete": "请删除这些目录以防止错误发生。",
"ExceptionFileToDelete": "需要删除的文件:%s",
"ExceptionDirectoryToDelete": "需要删除的目录:%s",
@@ -173,7 +172,7 @@
"ExceptionPrivilegeAtLeastOneWebsite": "您无法存取这个资源,必须至少要一个网站的 %s 权限。",
"ExceptionUnableToStartSession": "无法启动会话",
"ExceptionUndeletableFile": "无法刪除 %s",
- "ExceptionUnreadableFileDisabledMethod": "配置文件 {%1$s} 无法读取。您的主机空间可能禁用 %2$s。",
+ "ExceptionUnreadableFileDisabledMethod": "配置文件 {%1$s} 无法读取。您的主机可能禁用 %2$s。",
"ExceptionReportNotFound": "请求的报告不存在。",
"ExceptionWidgetNotFound": "所请求的插件不存在。",
"ExceptionReportNotEnabled": "请求的报告未启用。这通常意味着要么定义报表停用或您没有足够的权限来访问此报告的插件。",
@@ -203,7 +202,7 @@
"HelpTranslatePiwik": "也许你想%1$s帮助我们改进Piwik翻译%2$s?",
"Hide": "隐藏",
"HoursMinutes": "%1$s 小时 %2$s 分",
- "Id": "序号",
+ "Id": "Id",
"IfArchivingIsFastYouCanSetupCronRunMoreOften": "如果在当前配置下处理速度很快,您可以设置让自动脚本更频繁执行。",
"InfoFor": "%s的资料",
"Installed": "已经安装",
@@ -219,7 +218,7 @@
"Loading": "载入中...",
"LoadingData": "数据载入中...",
"LoadingPopover": "载入 %s...",
- "LoadingPopoverFor": "载入%s为",
+ "LoadingPopoverFor": "载入%s",
"Locale": "zh_CN.UTF-8",
"Logout": "退出",
"MainMetrics": "主要指标",
@@ -231,7 +230,7 @@
"MetricsToPlot": "图形指标",
"MetricToPlot": "图形指标",
"MinutesSeconds": "%1$s 分 %2$s 秒",
- "Mobile": "移动",
+ "Mobile": "Mobile",
"Monthly": "每月",
"MonthlyReport": "每月",
"MonthlyReports": "月报",
@@ -239,10 +238,10 @@
"MoreDetails": "详情",
"MoreLowerCase": "更多",
"MultiSitesSummary": "所有网站",
- "Name": "网站名称",
+ "Name": "名称",
"NbActions": "活动次数",
- "NbInteractions": "互动次数",
- "NbSearches": "搜索次数",
+ "NbInteractions": "交互次数",
+ "NbSearches": "内部搜索次数",
"NeedMoreHelp": "需要更多帮助?",
"Never": "从不",
"NewReportsWillBeProcessedByCron": "当 Piwik 不是通过浏览器触发处理时,新的报表将通过 crontab 处理。",
@@ -256,7 +255,7 @@
"NotDefined": "%s 未定义",
"Note": "注意",
"NotInstalled": "未安装",
- "NotRecommended": "(不推荐)",
+ "NotRecommended": "不推荐",
"NotValid": "%s 无效",
"NumberOfVisits": "访问次数",
"NUsers": "%s 名用户",
@@ -301,18 +300,18 @@
"PiwikXIsAvailablePleaseNotifyPiwikAdmin": "%1$s可用。请通知%2$sPiwik管理员%3$s。",
"PiwikXIsAvailablePleaseUpdateNow": "Piwik %1$s 已经发布。 %2$s 请立即更新!%3$s (查看 %4$s 与%5$s 的差异)。",
"PleaseContactYourPiwikAdministrator": "请联系您的 Piwik 管理员",
- "PleaseSpecifyValue": "请为 '%s' 选择一个指标。",
+ "PleaseSpecifyValue": "请为 '%s' 选择一个值。",
"PleaseUpdatePiwik": "请更新 Piwik",
"Plugin": "插件",
"Plugins": "插件",
- "PoweredBy": "由",
+ "PoweredBy": "由支持",
"Previous": "上一页",
"PreviousDays": "前 %s 天 (不包括今天)",
"PreviousDaysShort": "前 %s 天",
"Price": "价格",
"ProductConversionRate": "产品转化率",
"ProductRevenue": "产品收入",
- "Measurable": "测",
+ "Measurable": "衡量标准",
"Measurables": "衡量标准",
"PurchasedProducts": "已购买产品",
"Quantity": "数量",
@@ -321,7 +320,7 @@
"Recommended": "推荐",
"RecordsToPlot": "用于制表的记录",
"Refresh": "刷新",
- "RefreshPage": "刷新",
+ "RefreshPage": "刷新页面",
"RelatedReport": "相关报表",
"RelatedReports": "相关报表",
"Remove": "删除",
@@ -329,7 +328,7 @@
"ReportGeneratedFrom": "报表数据的时间段是 %s",
"ReportRatioTooltip": "'%1$s' 代表 %2$s of %3$s %4$s和 %5$s.",
"Reports": "报表",
- "ReportsContainingTodayWillBeProcessedAtMostEvery": "归档最多每X秒报告",
+ "ReportsContainingTodayWillBeProcessedAtMostEvery": "最多每X秒进行归档报告",
"RearchiveTimeIntervalOnlyForTodayReports": "这只会影响今天的报告(或任何其他日期范围包括今天)",
"ReportsWillBeProcessedAtMostEveryHour": "因此,报表最多每隔一小时处理一次。",
"RequestTimedOut": "%s 资料请求超时。请再试一次。",
@@ -350,7 +349,7 @@
"SeeThisFaq": "请参阅 %1$s这条帮助%2$s。",
"Segment": "分割",
"SelectYesIfYouWantToSendEmailsViaServer": "如果您想通过邮件服务器来发送电子邮件,而不是 mail 函数的话请选择 \"是\"",
- "Settings": "管理设置",
+ "Settings": "设置",
"Shipping": "运费",
"Show": "显示",
"SingleWebsitesDashboard": "单个网站报表",
@@ -376,7 +375,7 @@
"TotalRatioTooltip": "This is %1$s of all %2$s %3$s.",
"TotalRevenue": "订单总额",
"TotalVisitsPageviewsActionsRevenue": "(总访问量: %1$s 访问者, %2$s 浏览量, %3$s 活动者, %4$s 收入)",
- "TrackingScopeAction": "行动",
+ "TrackingScopeAction": "活动",
"TrackingScopePage": "页面",
"TrackingScopeVisit": "访问者",
"TransitionsRowActionTooltip": "查看访客浏览这个页面之前和之后的活动",
@@ -433,12 +432,12 @@
"Yes": "是",
"YouAreCurrentlyUsing": "您正在使用 Piwik %s.",
"YouAreViewingDemoShortMessage": "您正在查看Piwik的演示",
- "YouMustBeLoggedIn": "您必须登录才能存取这个功能。",
+ "YouMustBeLoggedIn": "您必须登录才能使用这个功能。",
"YourChangesHaveBeenSaved": "修改已保存。"
},
"Mobile": {
"AboutPiwikMobile": "关于 Piwik 移动版",
- "AccessUrlLabel": "Piwik 存取网址",
+ "AccessUrlLabel": "Piwik 访问网址",
"Account": "账户",
"Accounts": "账号",
"AddAccount": "增加账号",
@@ -446,7 +445,7 @@
"Advanced": "高级",
"AnonymousAccess": "匿名访问",
"AnonymousTracking": "匿名跟踪",
- "AskForAnonymousTrackingPermission": "启用后,Piwik 移动会发送匿名使用数据到 piwik.org,这些数据用于帮助 Piwik 移动开发者更好了解软件的使用情况。发送的数据包括: 点击的菜单和设置,操作系统名称和版本,Piwik 移动中显示的错误信息。我们不会跟踪您的任何分析数据,匿名数据永远不会公开。您可以在任何适合到管理设置中 禁用\/启用 匿名跟踪。",
+ "AskForAnonymousTrackingPermission": "启用后,Piwik Mobile会发送匿名使用者的数据到 piwik.org,这些数据用于帮助Piwik Mobile开发者更好了解软件的使用情况。发送的数据包括: 点击的菜单和设置,操作系统名称和版本,Piwik Mobile中的错误信息。我们不会跟踪您的任何分析数据,匿名数据永远不会公开。您可以在任何时候到管理设置中禁用\/启用 匿名跟踪。",
"ChooseHttpTimeout": "请选择HTTP超时值",
"ChooseMetric": "选择指标",
"ChooseReport": "选择报表",
@@ -465,8 +464,8 @@
"IncompatiblePiwikVersion": "您使用的 Piwik 版本与 Piwik Mobile 2 不兼容。请更新 Piwik 后重试或者安装 Piwik Mobile 1。",
"LastUpdated": "最后升级: %s",
"LoadingReport": "载入%s",
- "LoginCredentials": "帐号",
- "LoginToPiwikToChangeSettings": "登录您的 Piwik 服务器创建和更新网站、用户,或者修改常用设置,例如\"默认加载的报表\"",
+ "LoginCredentials": "授权",
+ "LoginToPiwikToChangeSettings": "登录您的 Piwik 服务器创建和更新网站、用户,或者修改通用设置,例如\"默认加载的报表\"",
"LoginUseHttps": "使用https",
"MultiChartLabel": "显示图形",
"NavigationBack": "后退",
@@ -483,22 +482,22 @@
"NoWebsiteFound": "没有找到网站",
"NoWebsitesShort": "没有网站",
"PullDownToRefresh": "向下拉可以更新...",
- "PossibleSslError": "可能的SSL证书错误",
- "PossibleSslErrorExplanation": "出现错误,可能是由一个无效或自签名证书造成的:“%s”。忽略SSL验证时登录可能会为你工作,但它的安全性较低。你可以在设置随时更改SSL验证。",
+ "PossibleSslError": "可能是SSL证书错误",
+ "PossibleSslErrorExplanation": "出现错误,可能是由一个无效或自签名证书造成的:“%s”。忽略SSL验证时可以正常登录,但它的安全性较低。你可以在设置随时更改SSL验证。",
"IgnoreSslError": "忽略SSL错误",
"RatingDontRemindMe": "不要记住我",
"RatingNotNow": "不是现在",
- "RatingNow": "好的,我会马上给它好评",
- "RatingPleaseRateUs": "Piwik 移动应用是免费软件,感谢您能花一分钟到 %1$s 评价这个应用。如有新功能建议或者bug报告,请联系 %2$s",
+ "RatingNow": "好的,我会马上给它评价",
+ "RatingPleaseRateUs": "Piwik Mobile是免费软件,感谢您能花一分钟到 %1$s 评价这个应用。如有新功能建议或者bug报告,请联系 %2$s",
"ReleaseToRefresh": "放开以更新...",
"Reloading": "重新加载中...",
"RequestTimedOutShort": "网络超时错误",
- "RestrictedCompatibility": "有限兼容",
+ "RestrictedCompatibility": "受限兼容",
"RestrictedCompatibilityExplanation": "Piwik Mobile 2 还不完全兼容您正在使用的 Piwik 版本 %s,也许会有些错误。我们建议您更新 Piwik 为最新版本,或者使用 Piwik Mobile 1。",
- "SaveSuccessError": "请确认设置",
+ "SaveSuccessError": "Piwik URL或者用户名和密码错误。",
"SearchWebsite": "搜索站点",
"ShowAll": "显示全部",
- "ShowLess": "更少显示",
+ "ShowLess": "显示更少",
"StaticGraph": "图标总览",
"TopVisitedWebsites": "最常访问的网站",
"TryIt": "试一试!",
@@ -516,7 +515,7 @@
"Documentation": "点击指标显示趋势图,按住 Shift 键点击可同时显示多个指标。",
"MetricBetweenText": "在%1$s和%2$s之间",
"MetricChangeText": "%s",
- "MetricMinMax": "在段时期介入%1$s 、 %2$s或 %3$s不等。",
+ "MetricMinMax": "在 %2$s或 %3$s这段时间范围内的排名%1$s 。",
"MetricsFor": "%s 的指标",
"MultiRowEvolutionTitle": "多个记录的趋势图",
"PickAnotherRow": "选择另外一行比较",
diff --git a/plugins/API/lang/sr.json b/plugins/API/lang/sr.json
index bd0347f768..55b45e96dc 100644
--- a/plugins/API/lang/sr.json
+++ b/plugins/API/lang/sr.json
@@ -1,5 +1,6 @@
{
"API": {
+ "ChangeTokenHint": "Ukoliko želite da promenite ovaj token, molimo vas da to učinite na %1$sstranici sa ličnim podešavanjima%2$s.",
"GenerateVisits": "Ukoliko nema podataka za danas, onda ih prvo generišite pomoću dodatka %1$s. Aktivirajte dodatak %2$s a onda kliknite na 'Generator posetilaca' na stranici za Piwik administraciju.",
"KeepTokenSecret": "token_auth je poverljivi podatak poput vašeg korisničkog imena i lozinke, stoga ga %1$s nemojte nikome pokazivati%2$s!",
"LoadedAPIs": "Uspešno učitano API-ja: %s",
diff --git a/plugins/API/lang/zh-cn.json b/plugins/API/lang/zh-cn.json
index f76730d65c..d30c86ce41 100644
--- a/plugins/API/lang/zh-cn.json
+++ b/plugins/API/lang/zh-cn.json
@@ -1,14 +1,15 @@
{
"API": {
+ "ChangeTokenHint": "如果你想改变这个标记,请到你的%1$s个人设置页面%2$s。",
"GenerateVisits": "如果您今天还沒有任何资料,可以先用 %1$s 插件来产生一些数据。您可以启用 %2$s 插件,然后点击在 Piwik 管理菜单下的'生成访客'选项。",
"KeepTokenSecret": "授权号 token_auth 与您的帐号和密码一样重要,%1$s请不要公开%2$s!",
"LoadedAPIs": "已成功载入 %s 个 APIs",
"MoreInformation": "了解更多关于 Piwik APIs 的资讯,请访问 %1$sPiwik API 介绍%2$s 和 %3$s Piwik API 参考资料%4$s。",
- "PluginDescription": "在Piwik所有数据,可通过简单的API。这个插件是Web服务的切入点,那你可以打电话得到XML,JSON,PHP,CSV,等你的Web Analytics数据",
+ "PluginDescription": "Piwik中的所有数据,都可通过简单的API接口获取。这个插件是Web服务的切入点,那你可以通过调用获取你想要的网站分析的数据,比如XML,JSON,PHP,CSV等。",
"ReportingApiReference": "报告API参考",
- "TopLinkTooltip": "通过一个简单的 API,让您可以以 xml, json, 及其它格式取得网站统计数据。",
+ "TopLinkTooltip": "通过一个简单的 API,让您可以以 xml, json及其它格式取得网站分析的数据。",
"UserAuthentication": "身份验证",
- "UsingTokenAuth": "如果您想在代码、定时任务中 %1$s 请求资料,%2$s 要在 API 调用需要认证的网址时增加参数 %3$s。",
+ "UsingTokenAuth": "如果您想在代码、定时任务中 %1$s 请求数据,%2$s 要在 API 调用需要认证的网址时增加参数 %3$s。",
"Glossary": "词汇表",
"LearnAboutCommonlyUsedTerms": "了解Piwik Analytics常用的术语:%1$s and %2$s。"
}
diff --git a/plugins/Actions/lang/sr.json b/plugins/Actions/lang/sr.json
index a342a042db..47125b8405 100644
--- a/plugins/Actions/lang/sr.json
+++ b/plugins/Actions/lang/sr.json
@@ -18,6 +18,7 @@
"ColumnSearchCategory": "Kategorija pretrage",
"ColumnSearches": "Pretrage",
"ColumnSearchesDocumentation": "Broj poseta koje su rezultirale traženjem ove ključne reči.",
+ "ColumnSearchExits": "%% Pretraga postoji",
"ColumnSearchExitsDocumentation": "Procenat poseta koje su napustile sajt nakom traženja ove ključne reči.",
"ColumnSearchResultsCount": "Broj rezultata pretrage",
"ColumnSiteSearchKeywords": "Jedinstvene ključne reči",
@@ -26,9 +27,12 @@
"ColumnUniqueDownloads": "Jedinstvenih preuzimanja",
"ColumnUniqueOutlinks": "Jedinstveni izlazni linkovi",
"ColumnIdPageview": "ID prikaza stranice",
+ "ColumnInteractionPosition": "Pozicija interakcije",
"DownloadsReportDocumentation": "U ovom izveštaju možete videti koje su fajlove posetioci kliknuli. %s Ono što Piwik računa kao download jeste klik na link za skidanje fajla. Bilo da je fajl skinut ili ne, to nije poznato Piwik-u.",
+ "EntryPagesReportDocumentation": "Ovaj izveštaj sadrži informacije o ulaznim stranicama koje su korišćene tokom određenog perioda. Ulazna stranica je prva stranica koju posetilac vidi tokom svoje posete. %s Ulazni linkovi su prikazani kao stablo foldera.",
"EntryPageTitles": "Naslovi ulaznih stranica",
"EntryPageTitlesReportDocumentation": "Ovaj izveštaj sadrži informacije o naslovima ulaznih stranica koje su korišćene tokom određenog perioda.",
+ "ExitPagesReportDocumentation": "Ovaj izveštaj sadrži informacije o izlaznim stranicama koje su se desile tokom određenog perioda. Izlazna stranica je poslednja stranica koju posetilac vidi tokom svoje posete. %s Izlazni linkovi su prikazani kao stablo foldera.",
"ExitPageTitles": "Naslovi izlaznih stranica",
"ExitPageTitlesReportDocumentation": "Ovaj izveštaj sadrži informacije o naslovima izlaznih stranica koje su se desile tokom određenog perioda.",
"LearnMoreAboutSiteSearchLink": "Naučite više o tome kako možete da pratite kako vaši posetioci koriste polje za pretragu.",
diff --git a/plugins/Actions/lang/zh-cn.json b/plugins/Actions/lang/zh-cn.json
index 86e375acdc..ff2166c0f4 100644
--- a/plugins/Actions/lang/zh-cn.json
+++ b/plugins/Actions/lang/zh-cn.json
@@ -8,26 +8,31 @@
"ColumnDownloadURL": "下载的网址",
"ColumnEntryPageTitle": "入口页面标题",
"ColumnEntryPageURL": "入口页面网址",
- "ColumnExitPageTitle": "出口页面标题",
- "ColumnExitPageURL": "出口页面网址",
+ "ColumnExitPageTitle": "跳出页面标题",
+ "ColumnExitPageURL": "跳出页面网址",
"ColumnNoResultKeyword": "没有找到搜索结果的关键词",
"ColumnPageName": "页面标题",
"ColumnPagesPerSearch": "搜索结果页",
"ColumnPagesPerSearchDocumentation": "访客在您的网站上搜索,有时会点击 \"下一页\" 来查看更多结果。这里表示的是访客平均查看该关键词的搜索结果的页数。",
"ColumnPageURL": "页面网址",
"ColumnSearchCategory": "搜索类别",
- "ColumnSearches": "搜索次数",
+ "ColumnSearches": "搜索",
"ColumnSearchesDocumentation": "使用站内搜索来查找这个关键词的次数。",
+ "ColumnSearchExits": "%%搜索跳出",
"ColumnSearchExitsDocumentation": "使用站内搜索查找这个关键词之后的访问量所占的百分比。",
"ColumnSearchResultsCount": "搜索结果数",
- "ColumnSiteSearchKeywords": "关键词数量",
+ "ColumnSiteSearchKeywords": "唯一关键词",
"ColumnUniqueClicks": "唯一点击数",
"ColumnUniqueClicksDocumentation": "链接的点击次数。如果在一次访问期间被点击多次,仅计算一次",
"ColumnUniqueDownloads": "唯一下载次数",
"ColumnUniqueOutlinks": "唯一离站链接数量",
+ "ColumnIdPageview": "PV ID",
+ "ColumnInteractionPosition": "交互位置",
"DownloadsReportDocumentation": "在这份报表中,您可以看到用户下载了那些文件。%s Piwik计算的是下载链接的点击数量,至于文件是否下载完成 Piwik 无法知道。",
+ "EntryPagesReportDocumentation": "本报表包含指定区间的入口页面的信息。入口页面是指用户访问的第一个页面。%s入口页的URL作为一个目录结构显示。",
"EntryPageTitles": "入口页面标题",
"EntryPageTitlesReportDocumentation": "本报表包含指定时间段内各入口页面的标题。",
+ "ExitPagesReportDocumentation": "本报表包含指定区间的跳出页面的信息。进入页面是指用户访问的最后一个页面。%s跳出页面的URL作为一个目录结构显示。",
"ExitPageTitles": "出口页面标题",
"ExitPageTitlesReportDocumentation": "本报表包含指定时间段内各出口页面的标题。",
"LearnMoreAboutSiteSearchLink": "了解更多关于跟踪访客如何使用您的搜索引擎的信息。",
diff --git a/plugins/AnonymousPiwikUsageMeasurement b/plugins/AnonymousPiwikUsageMeasurement
-Subproject 5fe61c91a04524506b73dad0fae9aacff55a47a
+Subproject fbe7cba991289c3670976fb18094c7949179d78
diff --git a/plugins/Bandwidth b/plugins/Bandwidth
-Subproject f2d852e7e8770c06ce66839517d4c3423c8c656
+Subproject 395189a4d93e19738bb60c33b2437552fd9e757
diff --git a/plugins/Contents/lang/sr.json b/plugins/Contents/lang/sr.json
index 69d8107dce..9801e4e651 100644
--- a/plugins/Contents/lang/sr.json
+++ b/plugins/Contents/lang/sr.json
@@ -2,6 +2,8 @@
"Contents": {
"PluginDescription": "Praćenje sadržaja i banera vam omogućuje merenje performansi (prikaza, klikova, CTR) bilo kog dela sadržaja vaših stranica (reklama, slika itd.).",
"Impressions": "Prikazi",
+ "ContentInteraction": "Interakcija sa sadržajem",
+ "ContentInteractions": "Interakcije sa sadržajem",
"InteractionRate": "Odnos interakcija",
"ContentName": "Naziv sadržaja",
"ContentPiece": "Sadržaj",
diff --git a/plugins/Contents/lang/zh-cn.json b/plugins/Contents/lang/zh-cn.json
index e0698c0eb5..9ed12a2719 100644
--- a/plugins/Contents/lang/zh-cn.json
+++ b/plugins/Contents/lang/zh-cn.json
@@ -2,6 +2,8 @@
"Contents": {
"PluginDescription": "内容和横幅跟踪,您可以衡量您的网页上任何一部分内容(横幅广告,图像,任何项目)的性能(浏览次数,点击次数,点击率)。",
"Impressions": "印象",
+ "ContentInteraction": "内容交互",
+ "ContentInteractions": "内容交互",
"InteractionRate": "互动率",
"ContentName": "内容名称",
"ContentPiece": "内容块",
diff --git a/plugins/CoreAdminHome/lang/cs.json b/plugins/CoreAdminHome/lang/cs.json
index 6a696ad981..960d78745c 100644
--- a/plugins/CoreAdminHome/lang/cs.json
+++ b/plugins/CoreAdminHome/lang/cs.json
@@ -45,6 +45,7 @@
"JSTracking_TrackNoScript": "Sledovat uživatele se zakázaným javascriptem",
"JSTracking_VisitorCustomVars": "Sledovat vlastní proměnné pro tohoto návštěvníka",
"JSTracking_VisitorCustomVarsDesc": "Například se jménem \"Typ\" a hodnotou \"zákazník\".",
+ "JSTracking_EndNote": "Poznámka: Přizpůsobený sledovací kód můžete vytvořit v administrační sekci %1$sSledovací kód%2$s.",
"JSTrackingIntro1": "Návštěvníky vašich stránek můžete sledovat mnoha způsoby. Doporučená metoda je pomocí javascriptu. Aby to bylo možné, každá z vašich stránek musí mít javascriptový kód, který můžete vygenerovat zde,",
"JSTrackingIntro2": "Až budete mít sledovací javascriptový kód, vložte ho do všech stránek, které mají být Piwikem sledovány.",
"JSTrackingIntro3b": "Ve většině případů webových stránek, blogů, CMS, atd. můžete použít již připravený zásuvný modul, který zařídí technické detaily za vás. (Podívejte se na náš %1$sseznam integračních zásuvných modulů Piwiku%2$s.) Pokud zásuvný modul neexistuje, můžete upravit šablony vašich webových stránek přidat tento kód do tagu &lt;\/head&gt;, který je často definován v 'header.php', 'header.tpl' nebo podobném souboru s šablonou.",
diff --git a/plugins/CoreAdminHome/lang/es.json b/plugins/CoreAdminHome/lang/es.json
index 39b26bec86..d73a3fc786 100644
--- a/plugins/CoreAdminHome/lang/es.json
+++ b/plugins/CoreAdminHome/lang/es.json
@@ -45,6 +45,7 @@
"JSTracking_TrackNoScript": "Rastrear usuarios que tengan JavaScript deshabilitado",
"JSTracking_VisitorCustomVars": "Rastrear variables personalizadas para este visitante",
"JSTracking_VisitorCustomVarsDesc": "Por ejemplo, con el nombre de variable \"Tipo\" y el valor \"Cliente\".",
+ "JSTracking_EndNote": "Nota: Puedes generar un código de seguimiento personalizado en la sección %1$sCódigo de seguimiento%2$s",
"JSTrackingIntro1": "Puedes rastrear visitantes hacia su sitio de internet en muchas formas distintas. La forma recomendada de hacerlo es con JavaScript. Para usar este método solo debe asegurarse de que cada página de su sitio de internet tenga algún código JavaScript, el cual puede generar aquí.",
"JSTrackingIntro2": "Una vez que tenga el código de rastreo JavaScript para su sitio de internet, cópielo y péguelo en todas las páginas que desee rastrear con Piwik.",
"JSTrackingIntro3b": "En la mayoría de sitios web, blogs, CMS, etc. puedes usar algún plugin predefinido que te ayude con los detalles técnicos. (Ver nuestra %1$slista de plugins usados para integrar Piwik%2$s.) Si no hubiera ningún plugin para tal efecto, siempre puedes editar las plantillas de tu sitio web y añadir este código antes de la etiqueta &lt;\/head&gt; que, normalmente, suele estar definida en el 'header.php', en el 'header.tpl' o una plantilla similar.",
diff --git a/plugins/CoreAdminHome/lang/fi.json b/plugins/CoreAdminHome/lang/fi.json
index e5b9cc57b3..fc4c07c963 100644
--- a/plugins/CoreAdminHome/lang/fi.json
+++ b/plugins/CoreAdminHome/lang/fi.json
@@ -3,6 +3,7 @@
"Administration": "Ylläpito",
"ArchivingSettings": "Arkistointiasetukset",
"BrandingSettings": "Käyttöliittymän muokkaaminen",
+ "ReleaseChannel": "Julkaisukanava",
"ClickHereToOptIn": "Klikkaa tästä, jos haluat mukaan seurantaan.",
"ClickHereToOptOut": "Klikkaa tästä poistuaksesi seurannasta.",
"CustomLogoFeedbackInfo": "Jos haluat muokata Piwikin logoa, voit myös piilottaa %1$s linkin ylävalikosta. Piilottaminen tapahtuu poistamalla Palaute-lisäosa %2$s Hallitse lisäosia %3$s -sivulta.",
@@ -50,6 +51,7 @@
"LogoUploadHelp": "Lähetä tiedosto formaatissa %1$s ja %2$s pikselin vähimmäiskorkeudella.",
"MenuDiagnostic": "Vianmääritys",
"MenuGeneralSettings": "Yleiset asetukset",
+ "MenuSystem": "Järjestelmä",
"MenuDevelopment": "Kehitys",
"OptOutComplete": "Olet poistanut itsesi seurannasta; käyntejä tälle sivulle ei seurata.",
"OptOutCompleteBis": "Huomioi, että jos poistat evästeet, poistat tämän sivun asettaman evästeen, vaihdat tietokonetta tai selainta, sinun täytyy suorittaa tämä uudelleen.",
@@ -59,8 +61,11 @@
"PiwikIsInstalledAt": "Piwik on asennettu kohteeseen",
"PluginSettingChangeNotAllowed": "Arvojen muuttaminen \"%1$s\" liitännäisessä \"%2$s\" -asetuksissa ei ole sallittua",
"PluginSettingReadNotAllowed": "Et voi lukea asetusta \"%1$s\" lisäosasta \"%2$s\"",
+ "PluginSettings": "Lisäosan asetukset",
"PluginSettingsIntro": "Täällä voit muuttaa kolmannen osapuolen liitännäisten asetuksia:",
"PluginSettingsValueNotAllowed": "Arvo kentälle \"%1$s\" liitännäisessä \"%2$s\" ei ole sallittu",
+ "PluginSettingsSaveSuccess": "Lisäosan asetukset päivitetty.",
+ "SettingsSaveSuccess": "Asetukset päivitetty.",
"SendPluginUpdateCommunication": "Lähetä sähköpostia, kun lisäosiin on saatavissa päivityksiä",
"SendPluginUpdateCommunicationHelp": "Pääkäyttäjät saavat sähköpostia kun lisäosasta on saatavilla uusi versio.",
"StableReleases": "Jos Piwik on tärkeä osa liiketointasi, suosittelemme päivittämistä uusimpaan versioon. Jos käytt uusinta beta-versiota ja löydät bugin tai sinulla on ehdotus, %1$slue tämä%2$s.",
diff --git a/plugins/CoreAdminHome/lang/fr.json b/plugins/CoreAdminHome/lang/fr.json
index 63f6eeec9b..f0e8153029 100644
--- a/plugins/CoreAdminHome/lang/fr.json
+++ b/plugins/CoreAdminHome/lang/fr.json
@@ -45,6 +45,7 @@
"JSTracking_TrackNoScript": "Suivre les utilisateurs qui n'ont pas activé JavaScript",
"JSTracking_VisitorCustomVars": "Effectuer le suivi des variables personnalisées pour ce visiteur",
"JSTracking_VisitorCustomVarsDesc": "Par exemple, avec une variable nommée \"type\" et la valeur \"client\".",
+ "JSTracking_EndNote": "Note : vous pouvez générer un code de suivit personnalisé dans la section d'administration %1$sCode de suivit%2$s.",
"JSTrackingIntro1": "Vous pouvez suivre les visiteurs de votre site web de manières variées. La manière recommandée est celle via JavaScript. Pour utiliser cette méthode assurez vous simplement que chaque page web du site a un certain code JavaScript que vous pouvez générer ici.",
"JSTrackingIntro2": "Une fois que vous avez le code de suivi JavaScript pour votre site web, copiez-collez le sur toutes les pages dont vous voulez effectuer le suivi avec Piwik.",
"JSTrackingIntro3b": "Sur la plupart des sites web, blogs, CMS etc., vous pouvez utiliser un composant existant qui va gérer les aspects techniques pour vous. (Voir notre %1$slist de composants utilisés pour intégrer Piwik%2$s.) Si aucun composant n'existe vous pouvez modifier le modèle de votre site web et ajouter ce code avant le tag &lt;\/head&gt; qui est souvent définit dans 'header.php', 'header.tpl' ou un fichier similaire de modèle.",
diff --git a/plugins/CoreAdminHome/lang/ja.json b/plugins/CoreAdminHome/lang/ja.json
index 7384d0ba37..a2a6134794 100644
--- a/plugins/CoreAdminHome/lang/ja.json
+++ b/plugins/CoreAdminHome/lang/ja.json
@@ -45,6 +45,7 @@
"JSTracking_TrackNoScript": "JavaScriptを無効にしてユーザーを追跡する",
"JSTracking_VisitorCustomVars": "この訪問者のためのカスタム変数を追跡します。",
"JSTracking_VisitorCustomVarsDesc": "たとえば、変数名\"Type\"で、値が\"Customer\"の場合、",
+ "JSTracking_EndNote": "注:カスタマイズしたトラッキングコードは、%1$sトラッキングコード%2$s管理セクションで生成できます。",
"JSTrackingIntro1": "様々な方法で訪問者を追跡できますが、JavaScriptでトラックすることが推奨されています。そのためには、各々のウェブページにここで生成されたJavaScriptコードを埋め込みます。",
"JSTrackingIntro2": "ウェブサイトのためのJavaScriptのトラッキングコードをコピーして、追跡したいすべてのページにペーストします。",
"JSTrackingIntro3b": "ほとんどのウェブサイト、ブログ、CMS などでは、あらかじめ作られたプラグインを使って技術的な仕事をすることができます。 プラグインが存在しない場合は、ウェブサイトのテンプレートを編集し、このコードを 'header.php' 、'header.tpl' などのテンプレートファイルで定義されている &lt;\/head&gt; タグに追加することができます( %1$s Piwik の統合に使用されるプラグインのリスト%2$s を参照 ) 。",
diff --git a/plugins/CoreAdminHome/lang/nl.json b/plugins/CoreAdminHome/lang/nl.json
index 6b26810631..903c76affb 100644
--- a/plugins/CoreAdminHome/lang/nl.json
+++ b/plugins/CoreAdminHome/lang/nl.json
@@ -9,7 +9,7 @@
"ClickHereToOptOut": "Klik hier om u af te melden.",
"CustomLogoFeedbackInfo": "Als u het Piwik logo bijwerkt, heeft u wellicht ook interesse om de %1$s link te verbergen in het menu bovenaan. Om dit te doen, kunt u de feedback plugin uitschakelen in de pagina van de %2$sManage Plugins%3$s.",
"CustomLogoHelpText": "U kunt het Piwik logo aanpassen dat wordt weergegeven in de gebruikersinterface en in de e-mail rapportages.",
- "DevelopmentProcess": "Hoewel ons %1$s ontwikkel process %2$s duizenden automatisch tests omvat, spelen Beta testers een belangrijke rol in het \"No bug beleid\" in Piwik.",
+ "DevelopmentProcess": "Hoewel ons %1$sontwikkelingsproces%2$s bestaat uit duizenden geautomatiseerde testen, spelen Beta Testers een belangrijke rol in het bereiken van de \"No bug beleid\" in Piwik.",
"EmailServerSettings": "E-mail server instellingen",
"ForBetaTestersOnly": "Alleen voor beta testers",
"ImageTracking": "Afbeelding tracking",
@@ -46,7 +46,7 @@
"JSTracking_VisitorCustomVarsDesc": "Bijvoorbeeld met variabele naam \"Type\" en waarde \"Klant\"",
"JSTrackingIntro1": "Je kunt bezoekers volgen op verschillende manieren. De aanbevolen manier is via JavaScript. Om van deze methode gebruik te maken, moet elke pagina van je website de JavaScript code bevatten, die je hier kan genereren.",
"JSTrackingIntro2": "Wanneer je de JavaScript code voor je website hebt, kopieer en plak de code naar alle pagina's die je wilt volgen met Piwik",
- "JSTrackingIntro3b": "In de meeste websites, blogs, CMS-en, etc kan je een plugin gebruiken die de technische integratie van Piwik uit handen nemen. (Zie daarvoor onze %1$slist van plugins om Piwik%2$s om te integreren.) In sommige gevallen bestaat er (nog) geen plugin. De Piwik code kan dan door het bewerken van je website template in de &lt;\/head&gt; tag, welke vaak in de 'header.php', 'header.tpl'of een soortgelijke bestandsnaam staat, toegevoegd worden.",
+ "JSTrackingIntro3b": "In de meeste websites, blogs, CMS-en, etc kan je een plugin gebruiken die de technische integratie van Piwik uit handen nemen. (Zie daarvoor onze %1$slijst van plugins om Piwik te integreren%2$s.) In sommige gevallen bestaat er (nog) geen plugin. De Piwik code kan dan door het bewerken van je website template in de &lt;\/head&gt; tag, welke vaak in de 'header.php', 'header.tpl'of een soortgelijke bestandsnaam staat, toegevoegd worden.",
"JSTrackingIntro4": "Indien je geen gebruik wilt maken van JavaScript om gebruikers te volgen, %1$skun je een afbeelding tracking link hieronder genereren.%2$s",
"JSTrackingIntro5": "Indien je meer wilt bijhouden dan paginaweergaves, lees dan de %1$sPiwik Javascript Tracking documentatie%2$s voor de lijst van beschikbare functies. Via deze functies kun je doelen, eigen variabelen, ecommerce bestellingen, afgebroken bestellingen en meer.",
"LogoNotWriteableInstruction": "Om je eigen logo te gebruiken in plaats van het standaard Piwik logo, zijn er schrijf rechten nodig tot de volgende bestandmap: %1$s Piwik heeft schrijfrechten nodig voor de jouw logo's opgeslagen in de bestanden %2$s",
diff --git a/plugins/CoreAdminHome/lang/sr.json b/plugins/CoreAdminHome/lang/sr.json
index 4bec0c48dd..4ae567ed13 100644
--- a/plugins/CoreAdminHome/lang/sr.json
+++ b/plugins/CoreAdminHome/lang/sr.json
@@ -26,9 +26,11 @@
"JSTracking_CampaignNameParam": "Parametar naziva kampanje",
"JSTracking_CodeNoteBeforeClosingHead": "Postarajte se da se ovaj kod nalazi na svakoj stranici vašeg sajta. Predlažemo da ga ubacite neposredno pre zatvarajućeg %1$s taga.",
"JSTracking_CustomCampaignQueryParam": "Korišćenje korisnički definisanih parametara za nazive i ključne reči kampanje",
+ "JSTracking_CrossDomain": "Identifikatori posetilaca se smeštaju u kolačiće kojima mogu da pristupe samo stranice sa istog domena. Ako omogućite povezivanje između domena, možete da pratite akcije i preglede stranica određenog posetioca tokom jedne posete čak iako on gleda strane na različitim domenima. Kadgod posetioc klikne na neki od aliasa URL-ova vaših sajtova, biće dodat parametar pk_vid u kojem će se nalaziti identifikator tog posetioca.",
"JSTracking_CustomCampaignQueryParamDesc": "%1$sPiwik će automatski prepoznati Google Analytics parametre.%2$s",
"JSTracking_DisableCookies": "Isključi sve kolačiće koji služe za praćenje",
"JSTracking_DisableCookiesDesc": "Isključuje sve kolačiće koji se koriste za praćenje. Postojeći Piwik kolačići će biti obrisani pri sledećem prikazu stranice.",
+ "JSTracking_EnableCrossDomainLinking": "Omogućuje povezivanje između domena",
"JSTracking_EnableDoNotTrack": "Omogući prepoznavanje DoNotTrack sa klijentske strane",
"JSTracking_EnableDoNotTrack_AlreadyEnabled": "DoNotTrack podrška za serverske strane je uključena tako da ova opcija neće imati efekta.",
"JSTracking_EnableDoNotTrackDesc": "Zahtevi za praćenjem neće biti slati ako posetilac ne želi da bude praćen.",
@@ -40,10 +42,13 @@
"JSTracking_MergeSubdomainsDesc": "Ukoliko jedan posetilac poseti i %1$s i %2$s, to će biti računato kao jedinstveni posetilac.",
"JSTracking_PageCustomVars": "Praćenje korisnički definisane promenljive za svaki prikaz stranice",
"JSTracking_PageCustomVarsDesc": "Na primer, sa promenljivom pod nazivom \"Kategorija\" i vrednošću \"Dokumenti\".",
+ "JSTracking_TrackNoScript": "Praćenje korisnika sa isključenim javaskriptom",
"JSTracking_VisitorCustomVars": "Praćenje korisnički definisanih promenljivih za ovog korisnika",
"JSTracking_VisitorCustomVarsDesc": "Na primer, pomoću promenljive sa nazivom \"Tip\" i vrednošću \"Korisnik\".",
+ "JSTracking_EndNote": "Pažnja: možete generisati sopstveni kod za praćenje u odeljku %1$sKod za praćenje%2$s.",
"JSTrackingIntro1": "Posetioce možete pratiti na više načina. Preporučen način je preko JavaScript-a. Da biste mogli da koristite ovaj metod, morate na svaku stranicu vašeg sajta da postavite JavaScript kod koji možete ovde da generišete.",
"JSTrackingIntro2": "Kada budete imali spreman JavaScript kod za praćenje, ubacite ga na sve stranice sajta koje želite da pratite sa Piwik-om.",
+ "JSTrackingIntro3b": "Na većini sajtova, blogova i CMS-ova možete da koristite već postojeći dodatak koji će da uradi tehnički deo posla umesto vas (pogledajte našu %1$slistu dodataka za Piwik intergaciju%2$s). Ukoliko ne nađete odgovarajući dodatak, možete da izmenite šablon sajta i da dodate kod u &lt;\/head&gt; tag koji se obično nalazi u 'header.php', 'header.tpl' ili nekom sličnom fajlu šablona.",
"JSTrackingIntro4": "Ukoliko ne želite da koristite JavaScript za praćenje posetilaca, %1$sgenerišite link za praćenje preko slike pomoću ovog linka%2$s.",
"JSTrackingIntro5": "Ukoliko želite da pratite više od prikaza stranica, pogledajte %1$sPiwik dokumentaciju za JavaScript praćenje%2$s za sve raspoložive funkcije. Pomoću tih funkcija možete pratiti ciljeve, korisnički definisane promenljive, elektronske porudžbine, napuštene korpe i još puno toga.",
"LogoNotWriteableInstruction": "Ukoliko želite da koristite sopstveni logotip umesto Piwik logotipa, dodelite pravila upisivanja sledećem direktorijumu: %1$s Piwik-u je potrebna dozvola upisivanja za vaše logotipe koji se nalaze u datotekama %2$s.",
diff --git a/plugins/CoreAdminHome/lang/zh-cn.json b/plugins/CoreAdminHome/lang/zh-cn.json
index 1b8ce41f80..6f0876ece1 100644
--- a/plugins/CoreAdminHome/lang/zh-cn.json
+++ b/plugins/CoreAdminHome/lang/zh-cn.json
@@ -14,7 +14,7 @@
"ForBetaTestersOnly": "仅供测试",
"ImageTracking": "图片跟踪",
"ImageTrackingIntro1": "当访客禁用 JavaScript 或者无法使用 JavaScript 时,您也可以使用图片跟踪链接来统计访客。",
- "ImageTrackingIntro2": "在下面生成链接,复制并粘贴生成的 HTML。如果这是作为 JavaScript 的备用跟踪,可以放在 %1$s 标签中。",
+ "ImageTrackingIntro2": "在下面的链接生成,在页面中复制并粘贴生成的 HTML。如果这是作为 JavaScript 的跟踪反馈,可以放在 %1$s 标签中。",
"ImageTrackingIntro3": "图片跟踪链接可用的详细的选项列表,见 %1$s跟踪 API 文档%2$s。",
"ImageTrackingLink": "图片跟踪链接",
"ImportingServerLogs": "导入服务器日志",
@@ -26,9 +26,11 @@
"JSTracking_CampaignNameParam": "广告名称参数",
"JSTracking_CodeNoteBeforeClosingHead": "请保证此代码在您的每一个页面上。我们建议您马上粘贴这些代码在这些标签之前:%1$s。",
"JSTracking_CustomCampaignQueryParam": "广告名称和关键词使用自定义搜索参数名",
+ "JSTracking_CrossDomain": "默认情况下,访问者ID是存储在浏览器中的第一方cookie用来标识唯一使用的,并且尽可以被同域名的页面访问。允许跨域链接将允许跨域的情况也可以跟踪到同一访问者的行为和PV情况。当用户点击了你网站的任何一个链接,都会给访问者ID添加一个URL参数pk_vid。",
"JSTracking_CustomCampaignQueryParamDesc": "提示: %1$sPiwik 会自动检测 Google 分析参数。%2$s",
"JSTracking_DisableCookies": "禁用所有跟踪cookie",
"JSTracking_DisableCookiesDesc": "禁用所有第一次访问的Cookie。本网站现有的Piwik cookes将会在下次页面访问时全部删除。",
+ "JSTracking_EnableCrossDomainLinking": "允许跨域链接",
"JSTracking_EnableDoNotTrack": "启用访客 DoNotTrack 检测",
"JSTracking_EnableDoNotTrack_AlreadyEnabled": "提示: 服务器端的 DoNotTrack 支持已启用,这个选项无效。",
"JSTracking_EnableDoNotTrackDesc": "如果访客不愿意被统计,将不会发送统计请求。",
@@ -40,10 +42,13 @@
"JSTracking_MergeSubdomainsDesc": "如果一个访客访问 %1$s 和 %2$s, 统计为同一访客。",
"JSTracking_PageCustomVars": "每次查看页面都跟踪自定义变量",
"JSTracking_PageCustomVarsDesc": "例如, 带变量名 \"Category\" 及值 \"White Papers\".",
+ "JSTracking_TrackNoScript": "禁止JavaScript跟踪用户",
"JSTracking_VisitorCustomVars": "跟踪访客自定义变量",
"JSTracking_VisitorCustomVarsDesc": "例如, 变量名 \"Type\" 及内容 \"Customer\".",
+ "JSTracking_EndNote": "提示:你可以在管理模块的%1$s跟踪代码%2$s里生成自定义跟踪代码。",
"JSTrackingIntro1": "您可以用多种方式统计网站访问,推荐使用 JavaScript。要使用这种方式,需要在网站的每个页面添加一些 JavaScript 代码。在这里可以生成代码。",
"JSTrackingIntro2": "有了网站的 JavaScript 跟踪代码,您就可以复制并粘贴到所有需要 Piwik 统计的页面上。",
+ "JSTrackingIntro3b": "多数网站,例如博客、内容管理网站等,您可以使用已有的插件。(见 %1$s用于集成 Piwik 的插件列表%2$s) 如果没有插件,您可以修改网站模板,把这段代码加入到'header.php', 'header.tpl' 或者类似的模板文件。",
"JSTrackingIntro4": "如果您不想用 JavaScript 来跟踪访客,%1$s在下面生成图片跟踪链接%2$s。",
"JSTrackingIntro5": "如果除了统计访问次数,请在 %1$sPiwik Javascript 跟踪文档%2$s 中查看更多的功能列表。通过这些功能,您可以跟踪目标、自定义变量、订单、丢弃的购物车等。",
"LogoNotWriteableInstruction": "要使用您的自定义logo替代默认Piwik logo,您需要此目录的权限:%1$s。Piwik需要%2$s的写入权限以便将您的logo存入。",
@@ -54,7 +59,9 @@
"LogoUploadHelp": "请上传 %1$s 格式的文件,最小高度 %2$s 点。",
"MenuDiagnostic": "检测",
"MenuGeneralSettings": "一般设置",
+ "MenuSystem": "系统",
"MenuDevelopment": "展开",
+ "MenuMeasurables": "衡量标准",
"OptOutComplete": "主动退出 成功; 网站分析工具将不会统计您对这个网站的访问。",
"OptOutCompleteBis": "如果您清空了cookies、删除了主动退出cookie、或者更换了电脑或者浏览器,您需要重新执行主动退出的操作。",
"OptOutDntFound": "您的访问没有被记录,因为您的浏览器设置了“请勿跟踪”。这是您的浏览器的设置,您可以关闭“请勿跟踪”设置,以便于正确记录访问数量。",
@@ -69,6 +76,8 @@
"PluginSettingsIntro": "这里,你可以更改下列第三方插件的配置:",
"PluginSettingsValueNotAllowed": "插件\"%1$s\"中的域\"%2$s\"的值是不被允许的",
"PluginSettingsSaveFailed": "保存插件设置失败",
+ "PluginSettingsSaveSuccess": "插件设置更新。",
+ "SettingsSaveSuccess": "设置更新。",
"SendPluginUpdateCommunication": "有新的插件更新时给我发送邮件",
"SendPluginUpdateCommunicationHelp": "插件有新版本时将会给超级管理员发送邮件",
"StableReleases": "如果Piwik对您的业务很重要,我们建议您使用最新的稳定版。如果使用最新测试版,发现了问题或有建议,请%1$s看这里%2$s。",
diff --git a/plugins/CoreHome/SystemSummary/Item.php b/plugins/CoreHome/SystemSummary/Item.php
new file mode 100644
index 0000000000..7664b84124
--- /dev/null
+++ b/plugins/CoreHome/SystemSummary/Item.php
@@ -0,0 +1,94 @@
+<?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\CoreHome\SystemSummary;
+
+/**
+ * This class can be used to add a new entry / item to the system summary widget.
+ *
+ * @api
+ */
+class Item
+{
+ private $key;
+ private $label;
+ private $value;
+ private $urlParams;
+ private $icon;
+ private $order;
+
+ /**
+ * Item constructor.
+ * @param string $key The key or ID for this item. The entry in the widget will have this class so it is possible
+ * to style it individually and other plugins can use this key to for example remove this item
+ * from the list of system summary items.
+ * @param string $label The label that will be displayed for this item. The label may already include the value such as "5 segments"
+ * @param string|null $value Optional label. If given, the value will be displayed after the label separated by a colon, eg: "Segments: 5"
+ * @param array|null $urlParams Optional URL to make the item clickable. Accepts an array of URL parameters that need to be modfified.
+ * @param string $icon Optional icon css class, eg "icon-user".
+ * @param int $order Optional sort order. The lower the value, the higher up the entry will be shown
+ */
+ public function __construct($key, $label, $value = null, $urlParams = null, $icon = '', $order = 99)
+ {
+ $this->key = $key;
+ $this->label = $label;
+ $this->value = $value;
+ $this->urlParams = $urlParams;
+ $this->icon = $icon;
+ $this->order = $order;
+ }
+
+ /**
+ * @return string
+ */
+ public function getKey()
+ {
+ return $this->key;
+ }
+
+ /**
+ * @return string
+ */
+ public function getLabel()
+ {
+ return $this->label;
+ }
+
+ /**
+ * @return mixed
+ */
+ public function getValue()
+ {
+ return $this->value;
+ }
+
+ /**
+ * @return array|null
+ */
+ public function getUrlParams()
+ {
+ return $this->urlParams;
+ }
+
+ /**
+ * @return string
+ */
+ public function getIcon()
+ {
+ return $this->icon;
+ }
+
+ /**
+ * @return int
+ */
+ public function getOrder()
+ {
+ return $this->order;
+ }
+
+}
diff --git a/plugins/CoreHome/Widgets/GetSystemSummary.php b/plugins/CoreHome/Widgets/GetSystemSummary.php
index f68ce36d4f..a90d7b0586 100644
--- a/plugins/CoreHome/Widgets/GetSystemSummary.php
+++ b/plugins/CoreHome/Widgets/GetSystemSummary.php
@@ -12,11 +12,11 @@ use Piwik\API\Request;
use Piwik\Db;
use Piwik\Piwik;
use Piwik\Plugin;
+use Piwik\Plugins\CoreHome\SystemSummary\Item;
use Piwik\Plugins\SegmentEditor\Services\StoredSegmentService;
use Piwik\Version;
use Piwik\Widget\Widget;
use Piwik\Widget\WidgetConfig;
-use Piwik\View;
class GetSystemSummary extends Widget
{
@@ -46,39 +46,70 @@ class GetSystemSummary extends Widget
public function render()
{
- $userLogins = Request::processRequest('UsersManager.getUsersLogin', array('filter_limit' => '-1'));
- $websites = Request::processRequest('SitesManager.getAllSites', array('filter_limit' => '-1'));
+ $mysqlVersion = $this->getMySqlVersion();
- $numUsers = count($userLogins);
- if (in_array('anonymous', $userLogins)) {
- $numUsers--;
- }
+ $systemSummary = array();
+
+ /**
+ * Triggered to add system summary items that are shown in the System Summary widget.
+ *
+ * **Example**
+ *
+ * public function addSystemSummaryItem(&$systemSummary)
+ * {
+ * $numUsers = 5;
+ * $systemSummary[] = new SystemSummary\Item($key = 'users', Piwik::translate('General_NUsers', $numUsers), $value = null, array('module' => 'UsersManager', 'action' => 'index'), $icon = 'icon-user');
+ * }
+ *
+ * @param Item[] &$systemSummary An array containing system summary items.
+ */
+ Piwik::postEvent('System.addSystemSummaryItems', array(&$systemSummary));
+
+ $systemSummary[] = new Item($key = 'piwik-version', Piwik::translate('CoreHome_SystemSummaryPiwikVersion'), Version::VERSION, $url = null, $icon = '', $order = 21);
+ $systemSummary[] = new Item($key = 'php-version', Piwik::translate('CoreHome_SystemSummaryMysqlVersion'), $mysqlVersion, $url = null, $icon = '', $order = 22);
+ $systemSummary[] = new Item($key = 'mysql-version', Piwik::translate('CoreHome_SystemSummaryPhpVersion'), phpversion(), $url = null, $icon = '', $order = 23);
+
+ $systemSummary = array_filter($systemSummary);
+ usort($systemSummary, function ($itemA, $itemB) {
+ if ($itemA->getOrder() == $itemB->getOrder()) {
+ return 0;
+ }
+ if ($itemA->getOrder() > $itemB->getOrder()) {
+ return 1;
+ }
+ return -1;
+ });
+
+ /**
+ * Triggered to filter system summary items that are shown in the System Summary widget. A plugin might also
+ * sort the system summary items differently.
+ *
+ * **Example**
+ *
+ * public function filterSystemSummaryItems(&$systemSummary)
+ * {
+ * foreach ($systemSummaryItems as $index => $item) {
+ * if ($item && $item->getKey() === 'users') {
+ * $systemSummaryItems[$index] = null;
+ * }
+ * }
+ * }
+ *
+ * @param Item[] &$systemSummary An array containing system summary items.
+ */
+ Piwik::postEvent('System.filterSystemSummaryItems', array(&$systemSummary));
+
+ $systemSummary = array_filter($systemSummary);
return $this->renderTemplate('getSystemSummary', array(
- 'numWebsites' => count($websites),
- 'numUsers' => $numUsers,
- 'numSegments' => $this->getNumSegments(),
- 'numPlugins' => $this->getNumActivatedPlugins(),
- 'piwikVersion' => Version::VERSION,
- 'mySqlVersion' => $this->getMySqlVersion(),
- 'phpVersion' => phpversion()
+ 'items' => $systemSummary
));
}
- private function getNumSegments()
- {
- $segments = $this->storedSegmentService->getAllSegmentsAndIgnoreVisibility();
- return count($segments);
- }
-
private function getMySqlVersion()
{
$db = Db::get();
return $db->getServerVersion();
}
- private function getNumActivatedPlugins()
- {
- return $this->pluginManager->getNumberOfActivatedPluginsExcludingAlwaysActivated();
- }
} \ No newline at end of file
diff --git a/plugins/CoreHome/lang/fi.json b/plugins/CoreHome/lang/fi.json
index 09f0c2d4d6..9095afeda8 100644
--- a/plugins/CoreHome/lang/fi.json
+++ b/plugins/CoreHome/lang/fi.json
@@ -4,7 +4,9 @@
"CheckForUpdates": "Tarkista päivitykset",
"CheckPiwikOut": "Tutustu Piwikiin!",
"ClickToEditX": "Muokkaa %s klikkaamalla",
+ "CloseSearch": "Sulje haku",
"CloseWidgetDirections": "Voit sulkea tämän widget-käyttöliittymän klikkaamalla \"X\"-ikonia käyttöliittymän yläreunassa.",
+ "ChooseX": "Valitse %1$s",
"DataForThisReportHasBeenPurged": "Tämän raportin data on yli %s kuukautta vanhaa ja on poistettu.",
"DataTableExcludeAggregateRows": "Yhdistetyt rivit ovat näkyvillä %s Piilota",
"DataTableIncludeAggregateRows": "Yhdistetyt rivit on piilotettu %s Näytä",
@@ -46,8 +48,14 @@
"YouAreUsingTheLatestVersion": "Käytössäsi on uusin versio Piwikistä!",
"ClickRowToExpandOrContract": "Klikkaa tätä riviä avataksesi tai sulkeaksesi alataulukon.",
"UndoPivotBySubtable": "Tämä raportti on käännetty %s:llä. Kumoa kääntö",
+ "NoSuchPage": "Tätä sivua ei ole olemassa",
"PivotBySubtable": "Tämä raportti ei ole käännetty %1$s:n mukaan. Käännetty %2$s:llä.",
+ "SystemSummaryNWebsites": "%d verkkosivustoa",
+ "SystemSummaryNSegments": "%d segmenttiä",
"SystemSummaryNActivatedPlugins": "%d lisäosaa käytössä",
+ "SystemSummaryPiwikVersion": "Piwik-versio",
+ "SystemSummaryMysqlVersion": "MySQL-versio",
+ "SystemSummaryPhpVersion": "PHP-versio",
"QuickAccessTitle": "Hae %s:llä. Käytä nuolia navigointiin. Oikotie: haku aukeaa painamalla f-näppäintä.",
"MenuEntries": "Valikon sisältö",
"Segments": "Segmentit",
diff --git a/plugins/CoreHome/lang/ja.json b/plugins/CoreHome/lang/ja.json
index c3fb0d4ab2..cdc7506921 100644
--- a/plugins/CoreHome/lang/ja.json
+++ b/plugins/CoreHome/lang/ja.json
@@ -1,6 +1,7 @@
{
"CoreHome": {
"CategoryNoData": "このカテゴリにデータはありません。 \"すべての母集団(統計の対象とする集団)を含める\" を試してみてください。",
+ "ChangeVisualization": "ビジュアルの変更",
"CheckForUpdates": "アップデートの確認",
"CheckPiwikOut": "Piwik をチェック!",
"ClickToEditX": "クリックして %s を編集",
@@ -15,6 +16,7 @@
"Default": "デフォルト",
"DonateCall1": "Piwik を使用するのに費用はかかりません。しかし、 Piwik の制作に費用がかかっていないと言う意味ではありません",
"DonateCall2": "Piwik が成長し、成功するには、あなたの継続的なサポートが必要です",
+ "DonateCall3": "Piwikがビジネスや努力に重大な付加価値を感じる場合は、%3$sプレミアム機能を購入%4$sまたは%1$s寄付する%2$sことをご検討ください。 すべての寄付金が助けになるでしょう。",
"DonateFormInstructions": "スライダで寄付する金額を選択して寄付するをクリック",
"ExcludeRowsWithLowPopulation": "全ての行を表示 %s 少ない数の行を除く",
"ExternalHelp": "ヘルプ(新しいタブで開きます)",
diff --git a/plugins/CoreHome/lang/sr.json b/plugins/CoreHome/lang/sr.json
index fd620f3956..1d7492fd6c 100644
--- a/plugins/CoreHome/lang/sr.json
+++ b/plugins/CoreHome/lang/sr.json
@@ -5,8 +5,10 @@
"CheckForUpdates": "Proveri da li se pojavila nova verzija",
"CheckPiwikOut": "Proverite!",
"ClickToEditX": "Kliknite kako biste izmenili %s",
+ "ClickToSeeFullInformation": "Kliknite ovde za više informacija",
"CloseSearch": "Zatvori pretragu",
"CloseWidgetDirections": "Možete zatvoriti ovaj vidžet tako što ćete kliknuti na sličicu 'X' na vrhu.",
+ "ChooseX": "Izaberite %1$s",
"DataForThisReportHasBeenPurged": "Podaci za ovaj izveštaj su više od %s meseci stari te su obrisani.",
"DataTableExcludeAggregateRows": "Zbirni redovi su prikazani %s Sakrij ih",
"DataTableIncludeAggregateRows": "Zbirni redovi su sakriveni %s Prikaži ih",
@@ -14,6 +16,7 @@
"Default": "podrazumevano",
"DonateCall1": "Piwik vas nikada neće ništa koštati ali to ne znači da nas Piwik ništa ne košta dok ga pravimo.",
"DonateCall2": "Piwiku je potrebna vaša stalna podrška kako bi rastao i napredovao.",
+ "DonateCall3": "Ukoliko imate osećaj da je Piwik u znatnoj meri dodao vrednost vašem biznisu, %1$smolimo vas da razmislite o donaciji%2$s ili %3$snaručivanju premium usluga%4$s. Svaki dinar je od pomoći.",
"DonateFormInstructions": "Kliknite na klizač kako biste odabrali iznos pa onda kliknite na \"subscribe\"",
"ExcludeRowsWithLowPopulation": "Svi redovi su prikazani %s Sakrij slabu populaciju",
"ExternalHelp": "Pomoć (otvara se u novom tabu)",
@@ -62,7 +65,9 @@
"QuickAccessTitle": "Pretraga za %s. Koristite tastere sa strelicama kako biste se kretali kroz rezultate pretrage. Prečica: pritisnite 'f' za pretragu.",
"MenuEntries": "Stavke menija",
"Segments": "Segmenti",
+ "OneClickUpdateNotPossibleAsMultiServerEnvironment": "Nadogradnja jednim klikom nije moguća zato što koristite Piwik na više servera. Molimo vas da preuzmete poslednju verziju sa %1$s kako biste nastavili.",
"AdblockIsMaybeUsed": "Ukoliko koristite bloker reklama, molimo vas da ga isključite na ovom sajtu kako biste bili sigurni da Piwik radi bez ikakvih problema.",
- "ChangeCurrentWebsite": "Izaberite sajt, trenutno izabrani sajt je %s"
+ "ChangeCurrentWebsite": "Izaberite sajt, trenutno izabrani sajt je %s",
+ "LeadingAnalyticsPlatformRespectsYourPrivacy": "Vodeća otvorena analitička platforma koja poštuje vašu privatnost."
}
} \ No newline at end of file
diff --git a/plugins/CoreHome/lang/zh-cn.json b/plugins/CoreHome/lang/zh-cn.json
index 6cf13a4a4d..39e812881a 100644
--- a/plugins/CoreHome/lang/zh-cn.json
+++ b/plugins/CoreHome/lang/zh-cn.json
@@ -1,21 +1,27 @@
{
"CoreHome": {
"CategoryNoData": "该分类没有数据! 请试试 \"包含所有数据\"!",
+ "ChangeVisualization": "转换可视化",
"CheckForUpdates": "检查更新",
"CheckPiwikOut": "访问 Piwik",
"ClickToEditX": "点击编辑 %s",
+ "ClickToSeeFullInformation": "点击查看完整信息",
+ "CloseSearch": "关闭搜索",
"CloseWidgetDirections": "点击右上角的 'X' 图标可关闭这个小窗口",
+ "ChooseX": "选择 %1$s",
"DataForThisReportHasBeenPurged": "本报表数据超过 %s 个月已被清空。",
"DataTableExcludeAggregateRows": "汇总行已显示 %s 隐藏汇总",
"DataTableIncludeAggregateRows": "汇总行已隐藏 %s 显示汇总",
+ "DataTableHowToSearch": "按回车或者点击搜索图标进行搜索",
"Default": "默认",
"DonateCall1": "Piwik 对您来说可以免费使用,但对我们来说并非零成本。",
"DonateCall2": "Piwik 的茁壮成长离不开您的支持。",
+ "DonateCall3": "如果你觉得Piwik对你的商业有价值的话,%1$s请考虑资助%2$s 或者 %3$s购买会员%4$s。任何一分都会有帮助。",
"DonateFormInstructions": "点击下面的滑动条设定金额,然后点 Subscribe 按钮捐款",
"ExcludeRowsWithLowPopulation": "显示了所有的数据 %s 不显示低密度数据",
"ExternalHelp": "帮助(在新标签页打开)",
"FlattenDataTable": "本报表已分级显示 %s 改为不分级显示",
- "HowMuchIsPiwikWorth": "您觉得 Piwik 值多少?",
+ "HowMuchIsPiwikWorth": "对于您来说Piwik的价值?",
"IncludeRowsWithLowPopulation": "没有显示低密度数据 %s 显示所有数据",
"InjectedHostEmailBody": "您好,我今天访问 Piwik 时遇到未知主机名的警告。",
"InjectedHostEmailSubject": "访问 Piwik 的主机名未知: %s",
@@ -26,7 +32,8 @@
"MainNavigation": "主导航",
"MakeOneTimeDonation": "一次性捐款",
"Menu": "菜单",
- "NoPrivilegesAskPiwikAdmin": "您当前登录用户是 '%1$s' 但是没有 Piwik 权限。%2$s 联系 Piwik 管理员 (点击发送邮件)%3$s 获得 '查看' 权限。",
+ "NoPrivilegesAskPiwikAdmin": "您当前登录用户是'%1$s' ,但是没有任何Piwik权限。%2$s 联系 Piwik 管理员 (点击发送邮件)%3$s 获得 '查看' 权限。",
+ "OnlyForSuperUserAccess": "这个小工具仅仅显示在有超级用户权限的面板里。",
"PageOf": "%1$s,总共 %2$s",
"PeriodRange": "时间段",
"ReportGeneratedOn": "本报表生成时间 %s",
@@ -46,11 +53,21 @@
"YouAreUsingTheLatestVersion": "您正在使用最新版的 Piwik!",
"ClickRowToExpandOrContract": "点击这行可以扩展或压缩小工作台。",
"UndoPivotBySubtable": "这个报表被 pivot 了 %s 撤销 Pivot",
+ "NoSuchPage": "页面不存在。",
"PivotBySubtable": "这个报表尚未 pivot %1$s 以 %2$s 的身份 pivot",
+ "SystemSummaryWidget": "系统概要",
+ "SystemSummaryNWebsites": "%d网站",
+ "SystemSummaryNSegments": "%d段",
+ "SystemSummaryNActivatedPlugins": "%d激活的插件",
+ "SystemSummaryPiwikVersion": "Piwik版本",
+ "SystemSummaryMysqlVersion": "MySQL版本",
+ "SystemSummaryPhpVersion": "PHP版本",
"QuickAccessTitle": "搜索 %s,使用上下键在搜索结果中导航。快捷键:按“F”进行搜索。",
"MenuEntries": "菜单项",
"Segments": "段",
+ "OneClickUpdateNotPossibleAsMultiServerEnvironment": "由于你在多个服务器上部署Piwik,所以一键升级不可用。请直接从%1$s下周最新版本。",
"AdblockIsMaybeUsed": "如果您使用的是广告拦截,请禁用此网站,以确保Piwik工作没有任何问题。",
- "ChangeCurrentWebsite": "选择一个网站,当前选择的网站: %s"
+ "ChangeCurrentWebsite": "选择一个网站,当前选择的网站: %s",
+ "LeadingAnalyticsPlatformRespectsYourPrivacy": "领先的开源分析平台尊重你的隐私。"
}
} \ No newline at end of file
diff --git a/plugins/CoreHome/templates/_dataTable.twig b/plugins/CoreHome/templates/_dataTable.twig
index b43337a906..b5635d9921 100644
--- a/plugins/CoreHome/templates/_dataTable.twig
+++ b/plugins/CoreHome/templates/_dataTable.twig
@@ -53,6 +53,8 @@
<div class="pk-emptyDataTable">
{% if showReportDataWasPurgedMessage is defined and showReportDataWasPurgedMessage %}
{{ 'CoreHome_DataForThisReportHasBeenPurged'|translate(deleteReportsOlderThan) }}
+ {% elseif properties.no_data_message %}
+ {{ properties.no_data_message|raw }}
{% else %}
{{ 'CoreHome_ThereIsNoDataForThisReport'|translate }}
{% endif %}
diff --git a/plugins/CoreHome/templates/getSystemSummary.twig b/plugins/CoreHome/templates/getSystemSummary.twig
index 264162c180..aeaa07caed 100644
--- a/plugins/CoreHome/templates/getSystemSummary.twig
+++ b/plugins/CoreHome/templates/getSystemSummary.twig
@@ -1,28 +1,26 @@
<div class="widgetBody systemSummary">
- <div>
- <span class="icon icon-user"></span>
- <a href="{{ linkTo({'module': 'UsersManager', 'action': 'index'}) }}">{{ 'General_NUsers'|translate(numUsers) }}</a>
- </div>
- <div>
- <span><span class="icon icon-segment"></span> {{ 'CoreHome_SystemSummaryNSegments'|translate(numSegments) }}</span>
- </div>
- <div>
- <a href="{{ linkTo({'module': 'SitesManager', 'action': 'index'}) }}">{{ 'CoreHome_SystemSummaryNWebsites'|translate(numWebsites) }}</a>
- </div>
- <div>
- <a href="{{ linkTo({'module': 'CorePluginsAdmin', 'action': 'plugins'}) }}">{{ 'CoreHome_SystemSummaryNActivatedPlugins'|translate(numPlugins) }}</a>
- </div>
- <div>
- <span>{{ 'CoreHome_SystemSummaryPiwikVersion'|translate }}:</span>
- <span class="piwik-version">{{ piwikVersion }}</span>
- </div>
- <div>
- <span>{{ 'CoreHome_SystemSummaryMysqlVersion'|translate }}:</span>
- <span>{{ mySqlVersion }}</span>
- </div>
- <div>
- <span>{{ 'CoreHome_SystemSummaryPhpVersion'|translate }}:</span>
- <span>{{ phpVersion }}</span>
- </div>
+ {% for item in items %}
+ {% if item is not empty %}
+ <div class="systemSummaryItem {% if item.getKey %}{{ item.getKey }}{% endif %}">
+ {% if item.getIcon %}<span class="icon {{ item.getIcon }}"></span>{% endif %}
+
+ {% if item.getUrlParams -%}
+ <a href="{{ linkTo(item.getUrlParams) }}" class="itemLabel">
+ {% else -%}
+ <span class="itemLabel">
+ {% endif -%}
+
+ {{ item.getLabel }}{% if item.getValue %}:{% endif %}
+
+ {%- if item.getUrlParams %}
+ </a>
+ {%- else %}
+ </span>
+ {%- endif %}
+
+ {% if item.getValue %}<span class="itemValue">{{ item.getValue }}</span>{% endif %}
+ </div>
+ {% endif %}
+ {% endfor %}
<br />
</div> \ No newline at end of file
diff --git a/plugins/CorePluginsAdmin/Commands/ListPlugins.php b/plugins/CorePluginsAdmin/Commands/ListPlugins.php
index 0fc132e589..aefbe126ed 100644
--- a/plugins/CorePluginsAdmin/Commands/ListPlugins.php
+++ b/plugins/CorePluginsAdmin/Commands/ListPlugins.php
@@ -12,6 +12,7 @@ use Piwik\Plugin\ConsoleCommand;
use Piwik\Plugin\Manager;
use Symfony\Component\Console\Helper\Table;
use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
/**
@@ -23,6 +24,7 @@ class ListPlugins extends ConsoleCommand
{
$this->setName('plugin:list');
$this->setDescription('List installed plugins.');
+ $this->addOption('filter-plugin', null, InputOption::VALUE_OPTIONAL, 'If given, prints only plugins that contain this term.');
}
protected function execute(InputInterface $input, OutputInterface $output)
@@ -31,6 +33,14 @@ class ListPlugins extends ConsoleCommand
$plugins = $pluginManager->getInstalledPluginsName();
+ $pluginFilter = $input->getOption('filter-plugin');
+
+ if (!empty($pluginFilter)) {
+ $plugins = array_filter($plugins, function ($pluginName) use ($pluginFilter) {
+ return strpos($pluginName, $pluginFilter) !== false;
+ });
+ }
+
$plugins = array_map(function ($plugin) use ($pluginManager) {
return array(
'<info>' . $plugin . '</info>',
diff --git a/plugins/CorePluginsAdmin/CorePluginsAdmin.php b/plugins/CorePluginsAdmin/CorePluginsAdmin.php
index d1c0a3fee1..8008fe529c 100644
--- a/plugins/CorePluginsAdmin/CorePluginsAdmin.php
+++ b/plugins/CorePluginsAdmin/CorePluginsAdmin.php
@@ -9,7 +9,9 @@
namespace Piwik\Plugins\CorePluginsAdmin;
use Piwik\Config;
+use Piwik\Piwik;
use Piwik\Plugin;
+use Piwik\Plugins\CoreHome\SystemSummary;
class CorePluginsAdmin extends Plugin
{
@@ -21,10 +23,17 @@ class CorePluginsAdmin extends Plugin
return array(
'AssetManager.getJavaScriptFiles' => 'getJsFiles',
'AssetManager.getStylesheetFiles' => 'getStylesheetFiles',
+ 'System.addSystemSummaryItems' => 'addSystemSummaryItems',
'Translate.getClientSideTranslationKeys' => 'getClientSideTranslationKeys'
);
}
+ public function addSystemSummaryItems(&$systemSummary)
+ {
+ $numPlugins = Plugin\Manager::getInstance()->getNumberOfActivatedPluginsExcludingAlwaysActivated();
+ $systemSummary[] = new SystemSummary\Item($key = 'plugins', Piwik::translate('CoreHome_SystemSummaryNActivatedPlugins', $numPlugins), $value = null, $url = array('module' => 'CorePluginsAdmin', 'action' => 'plugins'), $icon = '', $order = 11);
+ }
+
public function getStylesheetFiles(&$stylesheets)
{
$stylesheets[] = "plugins/CorePluginsAdmin/stylesheets/plugins_admin.less";
diff --git a/plugins/CorePluginsAdmin/lang/cs.json b/plugins/CorePluginsAdmin/lang/cs.json
index 3db91db438..abc2dfff87 100644
--- a/plugins/CorePluginsAdmin/lang/cs.json
+++ b/plugins/CorePluginsAdmin/lang/cs.json
@@ -37,6 +37,7 @@
"NoPluginSettings": "Žádná nastavení zásuvného modulu, která by bylo možné nastavit",
"Origin": "Původ",
"OriginCore": "Jádro",
+ "OriginOfficial": "Oficiální",
"OriginThirdParty": "Třetí strana",
"PluginHomepage": "Domovská stránka zásuvného modulu",
"PluginNotCompatibleWith": "%1$s zásuvný modul není kompatibilní s %2$s",
@@ -50,7 +51,6 @@
"Status": "Stav",
"SuccessfullyActicated": "Úspěšně jste aktivovali <strong>%s<\/strong>.",
"TeaserExtendPiwik": "Rozšiřte Piwik s použitím zásuvných modulů a šablon",
- "TeaserExtendPiwikByPlugin": "Rozšiřte Piwik %1$sinstalací nového zásuvného modulu%2$s.",
"TeaserExtendPiwikByTheme": "Užijte si nový vzhled po %1$sinstalaci nového vzhledu%2$s.",
"InstallingNewPluginViaMarketplaceOrUpload": "Můžete zásuvný modul nainstalovat automaticky z obchodu, %1$snebo ho nahrát%2$s ve formátu .zip.",
"Theme": "Šablona",
diff --git a/plugins/CorePluginsAdmin/lang/de.json b/plugins/CorePluginsAdmin/lang/de.json
index a1e0c9c9d5..50a5ba1423 100644
--- a/plugins/CorePluginsAdmin/lang/de.json
+++ b/plugins/CorePluginsAdmin/lang/de.json
@@ -51,7 +51,6 @@
"Status": "Status",
"SuccessfullyActicated": "Sie haben <strong>%s<\/strong> erfolgreich aktiviert.",
"TeaserExtendPiwik": "Erweitere Piwik mit Plugins und Themes",
- "TeaserExtendPiwikByPlugin": "Erweitern Sie Piwik durch die %1$sInstallation eines neuen Plugins%2$s.",
"TeaserExtendPiwikByTheme": "Wechseln Sie das Erscheinungsbild durch die %1$sInstallation eines neuen Themes%2$s.",
"InstallingNewPluginViaMarketplaceOrUpload": "Sie können Plugins aus dem Marketplace automatisiert installieren oder ein Plugin im .zip Format %1$shochladen%2$s.",
"Theme": "Theme",
diff --git a/plugins/CorePluginsAdmin/lang/el.json b/plugins/CorePluginsAdmin/lang/el.json
index 84d4792a2f..66ad0bc678 100644
--- a/plugins/CorePluginsAdmin/lang/el.json
+++ b/plugins/CorePluginsAdmin/lang/el.json
@@ -41,6 +41,8 @@
"OriginThirdParty": "Από τρίτες πηγές",
"PluginHomepage": "Ιστοσελίδα πρόσθετου",
"PluginNotCompatibleWith": "Το πρόσθετο %1$s δεν είναι συμβατό με το %2$s.",
+ "PluginNotFound": "Το πρόσθετο %1$s δε βρέθηκε στο σύστημα αρχείων.",
+ "PluginNotFoundAlternative": "Αν χρησιμοποιείτε το πρόσθετο αυτό, δοκιμάστε να το ξανανεβάσετε ή να το εγκαταστήσετε πάλι από την αγορά. Αν δεν το χρησιμοποιείτε, κάντε κλικ στο Απεγκατάσταση για να το αφαιρέσετε από τη λίστα.",
"PluginNotWorkingAlternative": "Αν χρησιμοποιείτε αυτό το πρόσθετο, ενδέχεται να βρείτε νεότερη έκδοση στην Αγορά. Αν όχι, μπορείτε να το απεγκαταστήσετε.",
"PluginRequirement": "Το %1$s απαιτεί το %2$s.",
"PluginsManagement": "Διαχείριση προσθέτων",
@@ -51,7 +53,7 @@
"Status": "Κατάσταση",
"SuccessfullyActicated": "Ενεργοποιήσατε με επιτυχία το <strong>%s<\/strong>.",
"TeaserExtendPiwik": "Επέκταση του Piwik με Πρόσθετα και Θέματα",
- "TeaserExtendPiwikByPlugin": "Επέκταση του Piwik με %1$sεγκατάσταση νέου πρόσθετου%2$s.",
+ "TeaserExtendPiwikByPlugin": "Επεκτείνετε το Piwik με %1$sεγκατάσταση πρόσθετων από την Αγορά%2$s ή %3$sμε ανέβασμα ενός πρόσθετου σε μορφή .zip%4$s.",
"TeaserExtendPiwikByTheme": "Χαρείτε μια άλλη όψη και αίσθηση %1$sεγκαθιστώντας ένα νέο θέμα%2$s.",
"InstallingNewPluginViaMarketplaceOrUpload": "Μπορείτε να εγκαθιστάτε αυτόματα πρόσθετα από την Αγορά ή %1$sνα ανεβάσετε ένα πρόσθετο%2$s σε μορφή .zip.",
"Theme": "Θεματική παραλλαγή",
diff --git a/plugins/CorePluginsAdmin/lang/en.json b/plugins/CorePluginsAdmin/lang/en.json
index 0da98b6179..40ed22c076 100644
--- a/plugins/CorePluginsAdmin/lang/en.json
+++ b/plugins/CorePluginsAdmin/lang/en.json
@@ -63,7 +63,7 @@
"UninstallConfirm": "You are about to uninstall a plugin %s. The plugin will be completely removed from your platform and it won't be recoverable. Are you sure you want to do this?",
"Version": "Version",
"ViewAllMarketplacePlugins": "View all Marketplace plugins",
- "WeDeactivatedThePluginAsItHasMissingDependencies": "We disabled the plugin %s as it has missing dependencies:",
+ "WeCouldNotLoadThePluginAsItHasMissingDependencies": "The plugin %1$s could not be loaded as it has missing dependencies: %2$s",
"Websites": "Websites"
}
}
diff --git a/plugins/CorePluginsAdmin/lang/es.json b/plugins/CorePluginsAdmin/lang/es.json
index 94591e432f..c2b5afa58e 100644
--- a/plugins/CorePluginsAdmin/lang/es.json
+++ b/plugins/CorePluginsAdmin/lang/es.json
@@ -37,6 +37,7 @@
"NoPluginSettings": "No hay ajustes para este complemento que puedan ser configurados",
"Origin": "Origen",
"OriginCore": "Core",
+ "OriginOfficial": "Oficial",
"OriginThirdParty": "De terceros",
"PluginHomepage": "Página de internet del complemento",
"PluginNotCompatibleWith": "%1$s complemento no es compatible con %2$s.",
@@ -50,7 +51,6 @@
"Status": "Estado",
"SuccessfullyActicated": "<strong>%s<\/strong> ha sido activado con éxito.",
"TeaserExtendPiwik": "Amplíe Piwik con complementos y temas",
- "TeaserExtendPiwikByPlugin": "Amplíe Piwik %1$sinstalando un nuevo complemento%2$s.",
"TeaserExtendPiwikByTheme": "Disfrute de otra apariencia y estilo %1$sinstalado un nuevo tema%2$s.",
"InstallingNewPluginViaMarketplaceOrUpload": "Puede automáticamente instalar complementos desde el \"Marketplace\" o %1$ssubir un complemento%2$s in formato .zip.",
"Theme": "Tema",
diff --git a/plugins/CorePluginsAdmin/lang/fr.json b/plugins/CorePluginsAdmin/lang/fr.json
index c0957b7bbb..97904918e4 100644
--- a/plugins/CorePluginsAdmin/lang/fr.json
+++ b/plugins/CorePluginsAdmin/lang/fr.json
@@ -51,7 +51,6 @@
"Status": "État",
"SuccessfullyActicated": "Vous avez activé avec succès <strong>%s<\/strong>.",
"TeaserExtendPiwik": "Etendre Piwik avec des composants additionnels et des thèmes",
- "TeaserExtendPiwikByPlugin": "Etendre Piwik en %1$sinstallant un nouveau composant additionnel%2$s.",
"TeaserExtendPiwikByTheme": "Profitez d'une nouvelle charte graphique en %1$sinstallant un nouveau thème%2$s.",
"InstallingNewPluginViaMarketplaceOrUpload": "Vous pouvez installer automatiquement un plugin à partir du Marketplace ou %1$supload a plugin%2$s au format .zip.",
"Theme": "Thème",
diff --git a/plugins/CorePluginsAdmin/lang/it.json b/plugins/CorePluginsAdmin/lang/it.json
index 4cac39ae3b..5af9808204 100644
--- a/plugins/CorePluginsAdmin/lang/it.json
+++ b/plugins/CorePluginsAdmin/lang/it.json
@@ -50,7 +50,6 @@
"Status": "Stato",
"SuccessfullyActicated": "Hai attivato con successo <strong>%s<\/strong>.",
"TeaserExtendPiwik": "Amplia Piwik con Plugin e Temi",
- "TeaserExtendPiwikByPlugin": "Estendi Piwik %1$sinstallando un nuovo plugin%2$s.",
"TeaserExtendPiwikByTheme": "Prova un altro aspetto & atmosfera %1$sinstallando un nuovo tema%2$s.",
"InstallingNewPluginViaMarketplaceOrUpload": "Puoi installare automaticamente dei plugins dal Market o %1$scaricare un plugin%2$s in formato .zip.",
"Theme": "Tema",
diff --git a/plugins/CorePluginsAdmin/lang/ja.json b/plugins/CorePluginsAdmin/lang/ja.json
index fb81e808c9..e6cc09cc03 100644
--- a/plugins/CorePluginsAdmin/lang/ja.json
+++ b/plugins/CorePluginsAdmin/lang/ja.json
@@ -37,6 +37,7 @@
"NoPluginSettings": "設定可能なプラグイン設定がありません",
"Origin": "開発元",
"OriginCore": "コア",
+ "OriginOfficial": "公式",
"OriginThirdParty": "サードパーティ",
"PluginHomepage": "プラグインのホームページ",
"PluginNotCompatibleWith": "%1$s plugin is not compatible with %2$s.",
@@ -50,7 +51,6 @@
"Status": "状態",
"SuccessfullyActicated": "<strong> %s <\/strong> の有効化に成功しました。",
"TeaserExtendPiwik": "Piwik のプラグインとテーマを拡張",
- "TeaserExtendPiwikByPlugin": "%1$s新しいプラグインをインストール%2$s してPiwikを拡張します。",
"TeaserExtendPiwikByTheme": "%1$s新しいテーマをインストール%2$s し、別の外観と雰囲気をお楽しみください。",
"InstallingNewPluginViaMarketplaceOrUpload": "自動的にマーケットプレイスからプラグインをインストールまたは.zip形式のプラグイン %1$s を %2$s アップロードすることができます。",
"Theme": "テーマ",
diff --git a/plugins/CorePluginsAdmin/lang/nb.json b/plugins/CorePluginsAdmin/lang/nb.json
index 4074c8598a..26c1cd63f6 100644
--- a/plugins/CorePluginsAdmin/lang/nb.json
+++ b/plugins/CorePluginsAdmin/lang/nb.json
@@ -45,7 +45,6 @@
"Status": "Status",
"SuccessfullyActicated": "Du har aktivert <strong>%s<\/strong>.",
"TeaserExtendPiwik": "Utvid Piwik med utvidelser og temaer",
- "TeaserExtendPiwikByPlugin": "Utvid Piwik ved å %1$sinstallere en ny utvidelse%2$s.",
"TeaserExtendPiwikByTheme": "Prøv et nytt utseende ved å %1$sinstallere et nytt tema%2$s.",
"InstallingNewPluginViaMarketplaceOrUpload": "Du kan installere utvidelser fra markedsplassen automatisk eller %1$slaste opp en utvidelse%2$s i .zip-format.",
"Theme": "Tema",
diff --git a/plugins/CorePluginsAdmin/lang/nl.json b/plugins/CorePluginsAdmin/lang/nl.json
index 6e2bdafa8d..24250dc591 100644
--- a/plugins/CorePluginsAdmin/lang/nl.json
+++ b/plugins/CorePluginsAdmin/lang/nl.json
@@ -50,7 +50,6 @@
"Status": "Status",
"SuccessfullyActicated": "U hebt <strong>%s<\/strong> succesvol geactiveerd.",
"TeaserExtendPiwik": "Breidt Piwik uit met plugins en thema's",
- "TeaserExtendPiwikByPlugin": "Breid Piwik uit door een nieuwe plugin %2$s te installeren%1$s.",
"TeaserExtendPiwikByTheme": "Geniet van een andere look & feel door %1$shet installeren van een nieuw thema%2$s.",
"InstallingNewPluginViaMarketplaceOrUpload": "Je kunt automatisch plugins installeren van de Martkplaats, of een %1$splugin uploaden%2$s in een .zip bestand.",
"Theme": "Thema",
diff --git a/plugins/CorePluginsAdmin/lang/ru.json b/plugins/CorePluginsAdmin/lang/ru.json
index 0a9f67844c..ff56dd8a3b 100644
--- a/plugins/CorePluginsAdmin/lang/ru.json
+++ b/plugins/CorePluginsAdmin/lang/ru.json
@@ -50,7 +50,6 @@
"Status": "Статус",
"SuccessfullyActicated": "Вы успешно активировали <strong>%s<\/strong>.",
"TeaserExtendPiwik": "Улучшение Piwik с помощью Плагинов и Тем",
- "TeaserExtendPiwikByPlugin": "Расширьте Piwik %1$sустановив новый плагин%2$s.",
"TeaserExtendPiwikByTheme": "Насладитесь другим внешним видом %1$sустановив новую тему%2$s.",
"InstallingNewPluginViaMarketplaceOrUpload": "Вы автоматически можете установить плагины из Marketplace или %1$sзагрузить плагин%2$s в формате zip.",
"Theme": "Тема",
diff --git a/plugins/CorePluginsAdmin/lang/sq.json b/plugins/CorePluginsAdmin/lang/sq.json
index 375bac5796..afc3b8eb05 100644
--- a/plugins/CorePluginsAdmin/lang/sq.json
+++ b/plugins/CorePluginsAdmin/lang/sq.json
@@ -41,6 +41,8 @@
"OriginThirdParty": "Prej palësh të treta",
"PluginHomepage": "Faqe Hyrëse e Shtojcës",
"PluginNotCompatibleWith": "Shtojca %1$s s’është e përputhshme me %2$s.",
+ "PluginNotFound": "Shtojca %1$s s’u gjet në sistemin e kartelave.",
+ "PluginNotFoundAlternative": "Nëse e keni përdorur këtë shtojcë, provoni ta ringarkoni ose riinstaloni prej Marketplace-it. Nëse jo, klikoni çinstalojeni që të hiqet prej listës.",
"PluginNotWorkingAlternative": "Nëse e përdorni këtë shtojcë, ndoshta mund të gjeni një version më të ri te Marketplace-i. Nëse jo, mund të donit ta çinstaloni.",
"PluginRequirement": "%1$s lyp %2$s.",
"PluginsManagement": "Administrim Shtojcash",
@@ -51,7 +53,7 @@
"Status": "Gjendje",
"SuccessfullyActicated": "E aktivizuat me sukses <strong>%s<\/strong>.",
"TeaserExtendPiwik": "Zgjerojeni Piwik-un me Shtojca dhe Tema",
- "TeaserExtendPiwikByPlugin": "Zgjerojeni Piwik-un përmes %1$sinstalimit të një shtojce të re%2$s.",
+ "TeaserExtendPiwikByPlugin": "Zgjerojeni Piwik-un duke %1$sinstaluar shtojca prej Marketplace-it%2$s ose %3$sduke ngarkuar një shtojcë në formatin .zip%4$s.",
"TeaserExtendPiwikByTheme": "Shijoni pamje & ndjesi të reja përmes %1$sinstalimit të një teme të re%2$s.",
"InstallingNewPluginViaMarketplaceOrUpload": "Shtojca mund të instaloni vetvetiu që prej Marketplace-it ose %1$sta ngarkoni një shtojcë%2$s në formatin .zip.",
"Theme": "Temë",
diff --git a/plugins/CorePluginsAdmin/lang/sr.json b/plugins/CorePluginsAdmin/lang/sr.json
index 770600a0d5..7f9476d000 100644
--- a/plugins/CorePluginsAdmin/lang/sr.json
+++ b/plugins/CorePluginsAdmin/lang/sr.json
@@ -5,6 +5,7 @@
"Activated": "Aktivirano",
"Active": "Aktivno",
"Activity": "Aktivnost",
+ "AlwaysActivatedPluginsList": "Sledeći dodaci su uvek aktivni i ne mogu da se isključe: %s",
"AuthorHomepage": "Autorov sajt",
"Changelog": "Dnevnik promena",
"ChangeSettingsPossible": "Možete izmeniti %1$spodešavanja%2$s za ovaj dodatak.",
@@ -36,16 +37,20 @@
"NoPluginSettings": "Ne postoje podešavanja ovog dodatka",
"Origin": "Izvor",
"OriginCore": "Srž",
+ "OriginOfficial": "Zvanični",
"OriginThirdParty": "Treća strana",
"PluginHomepage": "Sajt dodatka",
"PluginNotCompatibleWith": "%1$s dodatak nije kompatibilan sa %2$s.",
"PluginNotWorkingAlternative": "Ukoliko ste koristili ovaj dodatak, novu verziju možda možete naći na Marketu. Ukoliko niste, možda želite da ga deinstalirate.",
"PluginRequirement": "%1$s zahteva %2$s.",
"PluginsManagement": "Upravljanje dodacima",
+ "NotDownloadable": "Nije moguće preuzeti",
+ "PluginNotDownloadable": "Ovaj dodatak nije moguće preuzeti",
+ "PluginNotDownloadablePaidReason": "Mogući razlozi su istekla ili prekoračena licenca.",
+ "PluginActivated": "Dodatak je aktiviran",
"Status": "Status",
"SuccessfullyActicated": "Uspešno ste aktivirali <strong>%s<\/strong>.",
"TeaserExtendPiwik": "Proširite Piwik dodacima i temama",
- "TeaserExtendPiwikByPlugin": "Proširite Piwik %1$sinstaliranjem novog dodatka%2$s.",
"TeaserExtendPiwikByTheme": "Uživajte u novom izgledu %1$sinstaliranjem nove teme%2$s.",
"InstallingNewPluginViaMarketplaceOrUpload": "Možete automatski instalirati dodatak sa Marketa ili ga možete %1$saploudovati%2$s u ZIP formatu.",
"Theme": "Tema",
@@ -55,6 +60,7 @@
"UninstallConfirm": "Ukoliko deinstalirate dodatak %s, on će biti uklonjen sa vaše platforme i više neće biti moguće vratiti ga. Da li ste sigurni da želite to da uradite?",
"Version": "Verzija",
"ViewAllMarketplacePlugins": "Prikaži sve dodatke sa Marketa",
+ "WeDeactivatedThePluginAsItHasMissingDependencies": "Dodatak %s je isključen zato što mu nedostaju zavisnosti:",
"Websites": "Sajtovi"
}
} \ No newline at end of file
diff --git a/plugins/CorePluginsAdmin/lang/uk.json b/plugins/CorePluginsAdmin/lang/uk.json
index 54eba187a5..24fa024d2b 100644
--- a/plugins/CorePluginsAdmin/lang/uk.json
+++ b/plugins/CorePluginsAdmin/lang/uk.json
@@ -50,7 +50,6 @@
"Status": "Статус",
"SuccessfullyActicated": "Ви успішно активували <strong>%s<\/strong>.",
"TeaserExtendPiwik": "Поліпшення Piwik за допомогою Плагінів і Тим",
- "TeaserExtendPiwikByPlugin": "Piwik продовжує %1$sвстановлювати новий плагін%2$s .",
"TeaserExtendPiwikByTheme": "Насолоджуйтесь інший видом та відчувайте себе по-новому зі %1$sвстановленням нової теми%2$s.",
"InstallingNewPluginViaMarketplaceOrUpload": "Ви автоматично можете встановити плагіни з Маркету або %1$sзавантажити плагін%2$s в форматі zip.",
"Theme": "Тема",
diff --git a/plugins/CorePluginsAdmin/lang/zh-tw.json b/plugins/CorePluginsAdmin/lang/zh-tw.json
index 6b475ed777..ed9a73b1a8 100644
--- a/plugins/CorePluginsAdmin/lang/zh-tw.json
+++ b/plugins/CorePluginsAdmin/lang/zh-tw.json
@@ -41,6 +41,8 @@
"OriginThirdParty": "第三方",
"PluginHomepage": "外掛首頁",
"PluginNotCompatibleWith": "%1$s 個外掛和 %2$s 不相容。",
+ "PluginNotFound": "無法在伺服器檔案中找到外掛 %1$s。",
+ "PluginNotFoundAlternative": "如果你曾經使用過這個外掛,試著重新上傳或從市集中重新安裝。如果沒用過,點擊移除就能從列表中刪除。",
"PluginNotWorkingAlternative": "如果你有在使用此外掛,或許可以在市集中發現新版本。如果沒有,可能要移除它。",
"PluginRequirement": "%1$s 需要 %2$s。",
"PluginsManagement": "外掛管理",
@@ -51,7 +53,7 @@
"Status": "狀態",
"SuccessfullyActicated": "你已成功啟用 <strong>%s<\/strong>。",
"TeaserExtendPiwik": "用外掛和主題來擴充 Piwik",
- "TeaserExtendPiwikByPlugin": "%1$s安裝新外掛%2$s來擴展 Piwik。",
+ "TeaserExtendPiwikByPlugin": "%1$s從市集安裝新外掛%2$s來擴展 Piwik,或是%3$s上傳 .zip 格式的外掛%4$s。",
"TeaserExtendPiwikByTheme": "%1$s安裝新主題%2$s享受不同的視覺體驗。",
"InstallingNewPluginViaMarketplaceOrUpload": "你可以從市集中安裝外掛或是直接%1$s上傳 .zip 格式%2$s的外掛。",
"Theme": "主題",
diff --git a/plugins/CoreUpdater/lang/cs.json b/plugins/CoreUpdater/lang/cs.json
index b0ada7bdf4..e4f144dcb0 100644
--- a/plugins/CoreUpdater/lang/cs.json
+++ b/plugins/CoreUpdater/lang/cs.json
@@ -77,6 +77,7 @@
"YouCanUpgradeAutomaticallyOrDownloadPackage": "Můžete aktualizovat na verzi %s automaticky, nebo si stáhněte balíček a nainstalujte jej manuálně:",
"YouMustDownloadPackageOrFixPermissions": "Piwik nemůže přepsat Vaši stávající instalaci. Můžete buď opravit oprávnění k adresářům\/souborům, nebo stáhnout balíček a nainstalovat verzi %s ručně",
"YourDatabaseIsOutOfDate": "Vaše databáze Piwiku je zastaralá a musí být aktualizována, než budete pokračovat.",
- "ViewVersionChangelog": "Zobrazit protokol změn této verze:"
+ "ViewVersionChangelog": "Zobrazit protokol změn této verze:",
+ "ReceiveEmailBecauseIsSuperUser": "Tento e-mail dostáváte, protože jste super uživatel Piwiku na: %s"
}
} \ No newline at end of file
diff --git a/plugins/CoreUpdater/lang/de.json b/plugins/CoreUpdater/lang/de.json
index 7dec2653a3..f02471ea36 100644
--- a/plugins/CoreUpdater/lang/de.json
+++ b/plugins/CoreUpdater/lang/de.json
@@ -77,6 +77,7 @@
"YouCanUpgradeAutomaticallyOrDownloadPackage": "Die Aktualisierung auf Version %s kann automatisch ausgeführt werden. Oder Sie laden das Paket herunter und installieren es manuell:",
"YouMustDownloadPackageOrFixPermissions": "Piwik kann Ihre aktuelle Installation nicht überschreiben. Sie müssen entweder die Ordner-\/Dateiberechtigungen anpassen oder das Paket herunterladen und die Version %s manuell installieren.",
"YourDatabaseIsOutOfDate": "Ihre Piwik-Datenbank ist nicht mehr aktuell und muss aktualisiert werden, bevor Sie weiter arbeiten können.",
- "ViewVersionChangelog": "Änderungen in dieser Version ansehen:"
+ "ViewVersionChangelog": "Änderungen in dieser Version ansehen:",
+ "ReceiveEmailBecauseIsSuperUser": "Sie erhalten diese E-Mail, weil Sie ein Super User folgender Piwik Installation sind: %s"
}
} \ No newline at end of file
diff --git a/plugins/CoreUpdater/lang/es.json b/plugins/CoreUpdater/lang/es.json
index bd7472216c..83dbcb37b0 100644
--- a/plugins/CoreUpdater/lang/es.json
+++ b/plugins/CoreUpdater/lang/es.json
@@ -77,6 +77,7 @@
"YouCanUpgradeAutomaticallyOrDownloadPackage": "Puede actualizar automáticamente a la versión %s o descargar el paquete e instalarlo manualmente:",
"YouMustDownloadPackageOrFixPermissions": "Piwik no puede sobreescribir la actual instalación. Puede arreglar los permisos de los directorios\/archivos, o descargar el paquete e instalar la versión %s manualmente:",
"YourDatabaseIsOutOfDate": "Su base de datos de Piwik está obsoleta, y debe ser actualizada antes de poder continuar.",
- "ViewVersionChangelog": "Ver la lista de cambios para esta versión:"
+ "ViewVersionChangelog": "Ver la lista de cambios para esta versión:",
+ "ReceiveEmailBecauseIsSuperUser": "Recibes este email poruqe eres un Super Usuario del sistema que está en: %s"
}
} \ No newline at end of file
diff --git a/plugins/CoreUpdater/lang/ja.json b/plugins/CoreUpdater/lang/ja.json
index 33b5b0564d..7825ec1c70 100644
--- a/plugins/CoreUpdater/lang/ja.json
+++ b/plugins/CoreUpdater/lang/ja.json
@@ -77,6 +77,7 @@
"YouCanUpgradeAutomaticallyOrDownloadPackage": "自動的にバージョン %s にアップデートするか、パッケージをダウンロードして手作業でインストールすることができます:",
"YouMustDownloadPackageOrFixPermissions": "Piwik が現在のインストールに上書きすることができません。 ディレクトリ/ファイルのパーミッションを修正するか、パッケージをダウンロードして手作業でバージョン %s をインストールすることができます:",
"YourDatabaseIsOutOfDate": "Piwik データベースが古いため、継続する前にアップグレードが必要です。",
- "ViewVersionChangelog": "このバージョンでの変更履歴を表示するには:"
+ "ViewVersionChangelog": "このバージョンでの変更履歴を表示するには:",
+ "ReceiveEmailBecauseIsSuperUser": "この電子メールは、あなたがPiwikのスーパーユーザーであるために受け取りました:%s"
}
} \ No newline at end of file
diff --git a/plugins/CoreUpdater/lang/sr.json b/plugins/CoreUpdater/lang/sr.json
index f3593dd69d..cadab83e57 100644
--- a/plugins/CoreUpdater/lang/sr.json
+++ b/plugins/CoreUpdater/lang/sr.json
@@ -31,8 +31,11 @@
"Latest2XStableRelease": "Poslednja stabilna 2.X verzija",
"Latest2XBetaRelease": "Poslednja beta 2.X verzija",
"LtsSupportVersion": "Verzija sa dugoročnom podrškom (LTS)",
+ "ListOfSqlQueriesFYI": "Ovo su SQL upiti koji će biti izvršeni tokom nadogradnje vaše baze na Piwik %s",
"MajorUpdateWarning1": "Ovo je bitna nadogradnja! Trajaće duže nego inače.",
"MajorUpdateWarning2": "Sledeći predlog je naročito važan kod dugih instalacija.",
+ "NeedHelpUpgrading": "Da li vam je potrebna pomoć oko nadogradnje?",
+ "NeedHelpUpgradingText": "Ukoliko vam je potrebna pomoć oko nadogradnje, tvorci Piwik-a su tu kako bi vam pomogli i dostavili vam instrukcije, svoja iskustva i podršku. %1$sKontaktirajte Piwik eksperte kako biste bezbedno počeli sa nadogradnjom.%2$s",
"NoteForLargePiwikInstances": "Važna napomena za velike Piwik instalacije",
"NotificationClickToUpdatePlugins": "Kliknite ovde kako biste nadogradili dodatke:",
"NotificationClickToUpdateThemes": "Kliknite ovde kako biste ažurirali vaše teme:",
@@ -58,6 +61,7 @@
"ThankYouUpdatePiwik": "Hvala vam što koristite Piwik i što ga držite uvek ažurnim!",
"PostUpdateMessage": "Piwik će uvek biti besplatan za preuzimanje i korišćenje ali on zahteva vašu neprestanu podršku kako bi rastao i razvijao se.",
"PostUpdateSupport": "Ukoliko vam je potrebna pomoć oko korišćenja Piwik-a, možete je dobiti od njegovih tvoraca:",
+ "ServicesSupport": "Usluge i podrška",
"CloudHosting": "Hosting u oblacima",
"Updating": "Ažuriranje",
"UpdateUsingHttpsFailed": "Preuzimanje poslednje verzije Piwik-a preko HTTPS-a nije uspelo zbog sledeće greške:",
@@ -73,6 +77,7 @@
"YouCanUpgradeAutomaticallyOrDownloadPackage": "Možete izvršiti automatsku nadogradnju na verziju %s ili preuzeti poslednju verziju Piwik-a i izvršiti ručnu nadogradnju",
"YouMustDownloadPackageOrFixPermissions": "Piwik nije u stanju da prebriše trenutnu instalaciju. Možete ili da popravite dozvole nad datotekama i direktorijumima ili da preuzmete paket sa Interneta i instalirate verziju %s ručno:",
"YourDatabaseIsOutOfDate": "Piwik baza podataka je zastarela i mora biti nadograđena pre nego što nastavite.",
- "ViewVersionChangelog": "Prikaži zapis promena za ovu verziju:"
+ "ViewVersionChangelog": "Prikaži zapis promena za ovu verziju:",
+ "ReceiveEmailBecauseIsSuperUser": "Dobili ste ovaj mejl zato što ste superkorisnik Piwik-a na %s"
}
} \ No newline at end of file
diff --git a/plugins/CustomAlerts b/plugins/CustomAlerts
-Subproject 4ff23fa2d64d9e9dfc7d7f74f96ecc29881f97c
+Subproject 6fd36a5531331e94cfef770641b8ee4d76fdebb
diff --git a/plugins/CustomDimensions b/plugins/CustomDimensions
-Subproject 25f77f15039c714b6f7a73ec2bf2a06da9034ee
+Subproject 1106815d3bd9e1cd562d8863d15c040dbd363ba
diff --git a/plugins/CustomPiwikJs/lang/cs.json b/plugins/CustomPiwikJs/lang/cs.json
index f793e430fa..92f90ce814 100644
--- a/plugins/CustomPiwikJs/lang/cs.json
+++ b/plugins/CustomPiwikJs/lang/cs.json
@@ -1,5 +1,6 @@
{
"CustomPiwikJs": {
+ "PluginDescription": "Umožňuje libovolnému zásuvnému modulu rozšířit javascriptový sledovací soubor (piwik.js) o nové funkce a měření webových stránek.",
"DiagnosticPiwikJsWritable": "Zapisovatelný JavaScript záznam (\"\/piwik.js\")",
"DiagnosticPiwikJsNotWritable": "Piwik JavaScript záznam \"\/piwik.js\" není zapisovatelný, což znamená, že ostatní zásuvné moduly nemohou tento JavaScript záznam rozšiřovat. V budoucnosti mohou být z tohoto důvodu omezeny i další hlavní služby.",
"DiagnosticPiwikJsMakeWritable": "Doporučujeme povolit zápis do Piwik.js například pomocí příkazu: %s"
diff --git a/plugins/CustomPiwikJs/lang/de.json b/plugins/CustomPiwikJs/lang/de.json
index ca08615a4c..6fe70ab2a7 100644
--- a/plugins/CustomPiwikJs/lang/de.json
+++ b/plugins/CustomPiwikJs/lang/de.json
@@ -1,5 +1,6 @@
{
"CustomPiwikJs": {
+ "PluginDescription": "Ermöglicht es jedem Plugin, die Piwik-JavaScript-Tracking-Datei (piwik.js) zu erweitern und neue Funktionalitäts- und Website-Messfunktionen hinzuzufügen.",
"DiagnosticPiwikJsWritable": "Schreibbarer JavaScript-Tracker (\"\/piwik.js\")",
"DiagnosticPiwikJsNotWritable": "Die Piwik-JavaScript-Tracker-Datei \"\/piwik.js\" ist nicht beschreibbar, das bedeutet, dass andere Plugins den JavaScript-Tracker nicht benutzen können. In Zukunft werden sogar einige Kernfunktionen nicht wie erwartet funktionieren.",
"DiagnosticPiwikJsMakeWritable": "Wir empfehlen, piwik.js beschreibbar zu machen, indem Sie folgenden Befehl ausführen: %s"
diff --git a/plugins/CustomPiwikJs/lang/es.json b/plugins/CustomPiwikJs/lang/es.json
index 89f6ed78cc..9c4596e7d1 100644
--- a/plugins/CustomPiwikJs/lang/es.json
+++ b/plugins/CustomPiwikJs/lang/es.json
@@ -1,5 +1,6 @@
{
"CustomPiwikJs": {
+ "PluginDescription": "Permite a cualquier plugin extender el fichero de seguimiento por javascript (piwik.js) y añadir nuevas funcionalidades y capacidades de medida del sitio web",
"DiagnosticPiwikJsWritable": "Archivo de seguimiento Javascript modificable (\"\/piwik.js\")",
"DiagnosticPiwikJsNotWritable": "El archivo de seguimiento JavaScript de Piwik \"\/piwik.js\" no se puede modificar lo que significa que otros complementos no pueden mejorarlo. En el futuro, incluso algunas de las características básicas podrían no funcionar como se espera.",
"DiagnosticPiwikJsMakeWritable": "Recomendamos Piwik.js modificable mediante la ejecución de este comando: %s"
diff --git a/plugins/CustomPiwikJs/lang/ja.json b/plugins/CustomPiwikJs/lang/ja.json
index 3c74a6b010..16de3f09e5 100644
--- a/plugins/CustomPiwikJs/lang/ja.json
+++ b/plugins/CustomPiwikJs/lang/ja.json
@@ -1,5 +1,6 @@
{
"CustomPiwikJs": {
+ "PluginDescription": "任意のプラグインがPiwik JavaScriptトラッキングファイル ( piwik.js ) を拡張し、新しい機能とウェブサイトの測定機能を追加できるようにします。",
"DiagnosticPiwikJsWritable": "書き込み可能なJavaScript トラッカー ( \"\/piwik.js\" )",
"DiagnosticPiwikJsNotWritable": "Piwik JavaScript トラッカーファイル \"\/piwik.js\" は書き込み可能ではありません。これは、他のプラグインがJavaScript トラッカーを拡張できないことを意味します。将来的には、一部のコア機能も期待どおりに機能しない可能性があります。",
"DiagnosticPiwikJsMakeWritable": "次のコマンドを実行して書き込み可能な Piwik.js を使用することをお勧めします:%s"
diff --git a/plugins/CustomPiwikJs/lang/sr.json b/plugins/CustomPiwikJs/lang/sr.json
index f4e68204c4..c5963a848c 100644
--- a/plugins/CustomPiwikJs/lang/sr.json
+++ b/plugins/CustomPiwikJs/lang/sr.json
@@ -1,5 +1,6 @@
{
"CustomPiwikJs": {
+ "PluginDescription": "Omogućuje bilo kom Piwik dodatku da proširi Piwik JavaScript datoteku za praćenje (piwik.js) i doda nove funkcionalnosti i mogućnosti za praćenje sajtova.",
"DiagnosticPiwikJsWritable": "JavaScript treker u koji je moguće pisati (\"\/piwik.js\")",
"DiagnosticPiwikJsNotWritable": "U Piwik JavaScript treker datoteku \"\/piwik.js\" nije moguće pisati što znači da ostali dodaci ne mogu da prošire JavaScript treker. U budućnosti možda čak ni neke bazične funkcije neće raditi kako se očekuje.",
"DiagnosticPiwikJsMakeWritable": "Predlažemo da omogućite pisanje u piwik.js sledećom komandom: %s"
diff --git a/plugins/CustomVariables/lang/zh-cn.json b/plugins/CustomVariables/lang/zh-cn.json
index ac4291ebd1..0124ed49a3 100644
--- a/plugins/CustomVariables/lang/zh-cn.json
+++ b/plugins/CustomVariables/lang/zh-cn.json
@@ -5,11 +5,12 @@
"CustomVariables": "自定义变量",
"CustomVariablesReportDocumentation": "本报表包含您的自定义变量的资料,点击变量名查看数据。%1$s 关于自定义变量的详情,请阅读 %2$spiwik.org 上的自定义变量文档%3$s",
"PluginDescription": "您可以使用JavaScript API对游客或他们的任何行动分配对应的自定义变量是(名字,值)。这样Piwik将报告有多少人访问,页面转换为每个自定义名称和值。您可以在访问者日志里查看每个用户和行动的详细自定义变量。<br\/>需要使用<a href=\"http:\/\/piwik.org\/docs\/ecommerce-analytics\/\">电子商务分析<\/a>功能!",
- "ScopePage": "访问页面",
+ "ScopePage": "页面范围",
"ScopeVisit": "访问范围",
+ "ManageDescription": "这个总览显示了所有的自定义变量位置和它们在各个站点 '%s'的使用方法。各个位置的变量名字按总的使用频率进行排序。",
"ScopeX": "范围 %s",
"Index": "主页",
- "Usages": "用途",
+ "Usages": "用法",
"Unused": "未使用",
"CreateNewSlot": "增加可用自定义变量的数量",
"UsageDetails": "本站建立开始共计有%1$s访问记录和%2$s 笔互动记录。",
diff --git a/plugins/Dashboard/lang/nl.json b/plugins/Dashboard/lang/nl.json
index fc550433ac..dadfeb8127 100644
--- a/plugins/Dashboard/lang/nl.json
+++ b/plugins/Dashboard/lang/nl.json
@@ -7,7 +7,7 @@
"CreateNewDashboard": "Nieuw dashboard aanmaken",
"Dashboard": "Dashboard",
"DashboardCopied": "Huidig dashbord succesvol gekopieerd naar geslecteerde gebruiker.",
- "DashboardEmptyNotification": "Uw dashboard bevat geen widgets. Start met het toevoegen van nieuwe widgets of reset het dashboard naar de standaard widget selectie.",
+ "DashboardEmptyNotification": "Je dashboard bevat geen widgets. Start met het toevoegen van nieuwe widgets of reset het dashboard naar de standaard widget selectie.",
"DashboardName": "Naam dashboard:",
"DashboardOf": "Dashboard van %s",
"DefaultDashboard": "Standaard dashboard - Gebruik standaard widgets in een standaard layout",
@@ -17,18 +17,18 @@
"ManageDashboard": "Dashboard beheren",
"Maximise": "Maximaliseren",
"Minimise": "Minimaliseren",
- "NotUndo": "U kunt deze verwijdering niet meer ongedaan maken.",
+ "NotUndo": "Je kunt deze verwijdering niet meer ongedaan maken.",
"PluginDescription": "Je Web Analytics Dashboard. Pas je dashboard aan door nieuwe widgets toe te voegen, sleep ze in het rond, en wijzig de dashboard kolom weergave. Elke gebruiker kan zijn eigen aangepaste dashboard beheren.",
"RemoveDashboard": "Verwijder dashboard",
- "RemoveDashboardConfirm": "Weet u zeker dat u het dashboard \"%s\" wilt verwijderen?",
+ "RemoveDashboardConfirm": "Weet je zeker dat je het dashboard \"%s\" wilt verwijderen?",
"RemoveDefaultDashboardNotPossible": "Het standaard dashboard kan niet verwijderd worden",
"RenameDashboard": "Hernoem dashboard",
"ResetDashboard": "Reset dashboard",
"ResetDashboardConfirm": "Wilt u echt uw dashboard lay-out terug te zetten naar de standaard Widgets selectie?",
- "SelectDashboardLayout": "Selecteer uw nieuwe dashboard lay-out",
+ "SelectDashboardLayout": "Selecteer je nieuwe dashboard lay-out",
"SelectWidget": "Selecteer een widget om toe te voegen aan het dashboard",
"SetAsDefaultWidgets": "Stel in als standaardselectie widgets",
- "SetAsDefaultWidgetsConfirm": "Weet u zeker dat u de huidige selectie van de widgets en dashboard layout wilt toepassen als de nieuwe standaard dashboard template?",
+ "SetAsDefaultWidgetsConfirm": "Weet je zeker dat je de huidige selectie van widgets en dashboard lay-out wilt toepassen als de nieuwe standaard dashboard template?",
"SetAsDefaultWidgetsConfirmHelp": "Deze selectie van widgets en dashboard layout zal gebruikt worden om nieuwe dashboards te maken voor nieuwe gebruikers of als de \"%s\" functie wordt gebruikt.",
"TopLinkTooltip": "Bekijk web anlyse rapporten voor %s.",
"WidgetNotFound": "Widget niet gevonden",
diff --git a/plugins/DevicePlugins/lang/zh-cn.json b/plugins/DevicePlugins/lang/zh-cn.json
index 8d5c0a3234..67f62d32b7 100644
--- a/plugins/DevicePlugins/lang/zh-cn.json
+++ b/plugins/DevicePlugins/lang/zh-cn.json
@@ -2,6 +2,8 @@
"DevicePlugins": {
"BrowserWithNoPluginsEnabled": "%1$s 没有启用插件",
"BrowserWithPluginsEnabled": "%1$s 启用插件%2$s",
+ "PluginDescription": "报告访客浏览器支持的插件列表。",
+ "PluginDetectionDoesNotWorkInIE": "注意: 插件检查无法在 Internet Explorer 11 之前的版本运行。这个报表仅提供非 IE 浏览器或者IE的新版本。",
"WidgetPlugins": "浏览器插件清单",
"WidgetPluginsDocumentation": "本报表显示访客使用的浏览器插件,这可能对如何发布您的内容很重要。"
}
diff --git a/plugins/DevicesDetection/tests/System/expected/test___DevicesDetection.getBrand_day.xml b/plugins/DevicesDetection/tests/System/expected/test___DevicesDetection.getBrand_day.xml
index 6f23cb8eb7..de19b588f6 100644
--- a/plugins/DevicesDetection/tests/System/expected/test___DevicesDetection.getBrand_day.xml
+++ b/plugins/DevicesDetection/tests/System/expected/test___DevicesDetection.getBrand_day.xml
@@ -39,7 +39,7 @@
</goals>
<nb_conversions>3</nb_conversions>
<revenue>62.26</revenue>
- <logo>plugins/Morpheus/icons/dist/brand/Unknown.png</logo>
+ <logo>plugins/Morpheus/icons/dist/brand/unk.png</logo>
<segment>deviceBrand==Unknown</segment>
</row>
<row>
diff --git a/plugins/Diagnostics/lang/zh-cn.json b/plugins/Diagnostics/lang/zh-cn.json
new file mode 100644
index 0000000000..38bb792562
--- /dev/null
+++ b/plugins/Diagnostics/lang/zh-cn.json
@@ -0,0 +1,7 @@
+{
+ "Diagnostics": {
+ "ConfigFileTitle": "配置文件",
+ "HideUnchanged": "如果只想看改变的值可以%1$s,隐藏所有为改变的值%2$s。",
+ "Sections": "部分"
+ }
+} \ No newline at end of file
diff --git a/plugins/Ecommerce/lang/sr.json b/plugins/Ecommerce/lang/sr.json
index 2902edcaa3..2c23f7e986 100644
--- a/plugins/Ecommerce/lang/sr.json
+++ b/plugins/Ecommerce/lang/sr.json
@@ -3,6 +3,11 @@
"PluginDescription": "Pomoću E-commerce možete da pratite kada posetilac dodaje proizvode u korpu i kada se obavi kupovina. Proizvode i kategorije proizvoda možete da pratite i u napuštenim korpama.",
"Sales": "Prodaja",
"SalesBy": "Prodaja po %s",
- "SalesAdjective": "Prodaja %s"
+ "SalesAdjective": "Prodaja %s",
+ "LifeTimeValue": "Ukupna vrednost elektronskih porudžbina",
+ "LifeTimeValueDescription": "Ukupan prihod od elektronskih porudžbina ovog korisnika kroz sve posete: suma prihoda svih porudžbina za identifikator posetioca %s.",
+ "VisitorProfileLTV": "Generisao je ukupan prihod od %1$s.",
+ "VisitorProfileItemsAndOrders": "Poručio je %1$s predmeta u %2$s elektronskih porudžbina.",
+ "VisitorProfileAbandonedCartSummary": "Otkazao je %1$s korpi sa ukupno %2$s predmeta u ukupnoj vrednosti od %3$s."
}
} \ No newline at end of file
diff --git a/plugins/Ecommerce/lang/zh-cn.json b/plugins/Ecommerce/lang/zh-cn.json
new file mode 100644
index 0000000000..de22d029fa
--- /dev/null
+++ b/plugins/Ecommerce/lang/zh-cn.json
@@ -0,0 +1,9 @@
+{
+ "Ecommerce": {
+ "Sales": "销售",
+ "SalesBy": "由%s销售",
+ "SalesAdjective": "销售%s",
+ "LifeTimeValue": "商业生命周期",
+ "VisitorProfileLTV": "生成一个生命周期值%1$s"
+ }
+} \ No newline at end of file
diff --git a/plugins/Feedback/lang/de.json b/plugins/Feedback/lang/de.json
index 4e815199e5..4afa1defd4 100644
--- a/plugins/Feedback/lang/de.json
+++ b/plugins/Feedback/lang/de.json
@@ -18,7 +18,7 @@
"ViewAnswersToFAQ": "Antworten zu %1$sFrequently Asked Questions%2$s ansehen",
"ViewUserGuides": "Lernen Sie mithilfe unseres %1$sBenutzerhandbuches%2$s, wie Sie Piwik konfigurieren können und wie Sie effektiv Ihre Daten analysieren.",
"CommunityHelp": "Hilfe aus der Community",
- "ProfessionalHelp": "Profesionelle Hilfe",
+ "ProfessionalHelp": "Professionelle Hilfe",
"ProfessionalServicesIntro": "Unser weltweites Netzwerk von professionellen Beratern für Piwik unterstützt Kunden die Piwik auf ihrer eigenen Infrastruktur betreiben wollen.",
"ProfessionalServicesOfferIntro": "Von welchen Diensten können Sie profitieren?",
"ProfessionalServicesReviewPiwikSetup": "Eine Überprüfung Ihrer Piwik-Installation",
diff --git a/plugins/Feedback/lang/ja.json b/plugins/Feedback/lang/ja.json
index e54843584d..9f2db00f65 100644
--- a/plugins/Feedback/lang/ja.json
+++ b/plugins/Feedback/lang/ja.json
@@ -19,7 +19,9 @@
"ViewUserGuides": "Piwik の設定方法と、効果的なデータ分析方法は、%1$s user guides %2$s をご確認ください。",
"CommunityHelp": "コミュニティヘルプ",
"ProfessionalHelp": "プロフェッショナルヘルプ",
+ "ProfessionalServicesIntro": "世界的なネットワークである我々 Piwik のプロコンサルタントは、独自のインフラストラクチャで Piwik をホストするクライアントをサポートします。",
"ProfessionalServicesOfferIntro": "どのようなサービスを利用できますか?",
+ "ProfessionalServicesReviewPiwikSetup": "Piwik セットアップのレビュー",
"ProfessionalServicesOptimizationMaintenance": "Piwik 最適化および保守サービス",
"ProfessionalServicesPhoneEmailSupport": "電話とメールのサポート",
"ProfessionalServicesTraining": "ユーザー、テクニカル、開発者のトレーニング",
diff --git a/plugins/ImageGraph/lang/zh-cn.json b/plugins/ImageGraph/lang/zh-cn.json
index c339cfb3a9..e9f4a6c7a5 100644
--- a/plugins/ImageGraph/lang/zh-cn.json
+++ b/plugins/ImageGraph/lang/zh-cn.json
@@ -1,5 +1,6 @@
{
"ImageGraph": {
- "ColumnOrdinateMissing": "报表中没有 '%1$s' 栏,请试试 %2$s"
+ "ColumnOrdinateMissing": "报表中没有 '%1$s' 栏,请试试 %2$s",
+ "PluginDescription": "在你的数据报告中生成精美的静态PNG的图。"
}
} \ No newline at end of file
diff --git a/plugins/Installation/lang/cs.json b/plugins/Installation/lang/cs.json
index 48170a6584..1d7fd57e1f 100644
--- a/plugins/Installation/lang/cs.json
+++ b/plugins/Installation/lang/cs.json
@@ -84,6 +84,7 @@
"SystemCheckGlobHelp": "Tato vestavěná funkce byla na vašem hostiteli zakázaná. Piwik se pokusí tuto funkci emulovat, ale můžete zaznamenat další bezpečnostní omezení. Toto bude mít vliv na funčnost",
"SystemCheckGzcompressHelp": "Musíte povolit rozšíření zlib a funkci gzcompress.",
"SystemCheckGzuncompressHelp": "Musíte povolit rozšíření zlib a funkci gzuncompress.",
+ "SystemCheckHashHelp": "Je nutné, aby jste znovu nakonfigurovali a sestavili PHP s povolenou podporou hash(), vynecháním volby --disable-hash.",
"SystemCheckIconvHelp": "Musíte nakonfigurovat a překompilovat PHP s podporou pro \"icont\", --with-iconv",
"SystemCheckJsonHelp": "Piwik pro čtení a zápis JSON dat potřebuje rozšíření php5-json.",
"SystemCheckMailHelp": "Bez funkce mail(), nebudou odeslány zprávy s odezvou, nebo při zapomenutém heslu",
diff --git a/plugins/Installation/lang/de.json b/plugins/Installation/lang/de.json
index 56a7b2a8a9..c379966161 100644
--- a/plugins/Installation/lang/de.json
+++ b/plugins/Installation/lang/de.json
@@ -84,6 +84,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.",
+ "SystemCheckHashHelp": "Sie müssen PHP mit der hash() Funktionalität kompilieren, indem Sie die Option --disable-hash entfernen.",
"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.",
diff --git a/plugins/Installation/lang/es.json b/plugins/Installation/lang/es.json
index 419de82838..b3569f2875 100644
--- a/plugins/Installation/lang/es.json
+++ b/plugins/Installation/lang/es.json
@@ -84,6 +84,7 @@
"SystemCheckGlobHelp": "Esta función integrada se ha desactivado en su host. Piwik intentará emular esta función, pero puede encontrarse con restricciones de seguridad. La funcionalidad puede verse afectada.",
"SystemCheckGzcompressHelp": "Es necesario habilitar la extensión zlib y la función gzcompress.",
"SystemCheckGzuncompressHelp": "Es necesario habilitar la extensión zlib y la función gzcompress.",
+ "SystemCheckHashHelp": "Necesitas configurar y recompilar PHP con soporte habilitado para \"hash()\": quitar la opción --disable-hash.",
"SystemCheckIconvHelp": "Necesita configurar y reconstruir PHP con soporte \"iconv\" habilitado, --with-iconv.",
"SystemCheckJsonHelp": "Para leer y escribir datos JSON es necesario tener la extensión php5-json.",
"SystemCheckMailHelp": "Los mensajes de Feedback y Recuperar Contraseña no se enviarán sin un correo electrónico().",
diff --git a/plugins/Installation/lang/ja.json b/plugins/Installation/lang/ja.json
index de09184247..21b881c268 100644
--- a/plugins/Installation/lang/ja.json
+++ b/plugins/Installation/lang/ja.json
@@ -37,6 +37,7 @@
"NfsFilesystemWarningSuffixAdmin": "これは、ファイルベースのセッションを利用する際、Piwik が極端に遅くなることを意味します。",
"NfsFilesystemWarningSuffixInstall": "NFS 上でファイルベースのセッションを利用すると極端に遅いので、Piwik はデータベースセッションを使用します。同時に多くのダッシュボードユーザーがいる場合、データベースサーバーへのクライアント接続の最大数を増やす必要があります。",
"NoConfigFileFound": "Piwik 設定ファイルが見つからず、Piwik ページにアクセスしようとしています。",
+ "YouMayInstallPiwikNow": "%1$s今すぐ piwik をインストール%2$sすることができます",
"IfPiwikInstalledBeforeTablesCanBeKept": "以前に Piwik をインストールして DB にいくつかのテーブルがある場合は、同じテーブルを再利用して既存のデータを保持することができます。",
"Optional": "オプション",
"Password": "パスワード",
@@ -44,6 +45,8 @@
"PasswordRepeat": "パスワード (再入力)",
"PercentDone": "%s %% 完了",
"ProfessionalServicesAdTitle": "高度な分析とサービス",
+ "ProfessionalServicesfessionalServicesAdText": "私たちの専門家ネットワークは、Piwik分析のフルパワーをあなたの組織に提供するお手伝いをします。",
+ "ProfessionalServicesfessionalDiscoverHow": "Piwik の%1$s追加製品とサービス%2$s、およびコンバージョンと収入を増やす方法について学びます。",
"PleaseFixTheFollowingErrors": "次のエラーを修正してください",
"DefaultSettings": "Piwik のデフォルトの設定",
"DefaultSettingsHelp": "Piwik の設定はデフォルトです。後で管理画面からカスタマイズすることができます。",
@@ -51,6 +54,7 @@
"RestartWebServer": "この変更を行った後、ウェブサーバーを再起動してください。",
"ReusingTables": "表の再利用",
"PiwikOrgNewsletter": "私に Piwik コミュニティの最新情報をメールで送る",
+ "ProfessionalServicesNewsletter": "Piwikの%1$sプロフェッショナルなサービスと製品%2$sに関する情報をお送りください",
"SeeBelowForMoreInfo": "詳細は、以下をご確認ください。",
"SetupWebsite": "ウェブサイトのセットアップ",
"SetupWebsiteError": "ウェブサイトを追加する際にエラーが発生しました",
@@ -80,6 +84,7 @@
"SystemCheckGlobHelp": "この組み込み関数はホストで無効化されています。 Piwik はこの関数のエミュレートを試みますが、さらなるセキュリティ制限に遭遇する場合があります。 また、機能性にも影響を与える場合があります。",
"SystemCheckGzcompressHelp": "zlib エクステンションと gzcompress() 関数を有効にする必要があります。",
"SystemCheckGzuncompressHelp": "zlib エクステンションと gzuncompress() 関数を有効にする必要があります。",
+ "SystemCheckHashHelp": "--disable-hash オプションを除外し、hash() サポートを有効にして PHP を設定して再構築する必要があります。",
"SystemCheckIconvHelp": "\"iconv\" のサポートを有効にして、PHP の再構築と設定を行う必要があります(--with-iconv)。",
"SystemCheckJsonHelp": "JSON データの読取と書込には、Piwik に php5-json の拡張モジュールが必要です。",
"SystemCheckMailHelp": "mail() 関数がない場合、フィードバックとパスワード紛失のメッセージを送信することができません。",
diff --git a/plugins/Installation/lang/sr.json b/plugins/Installation/lang/sr.json
index 9c649e0e6b..fe836b5629 100644
--- a/plugins/Installation/lang/sr.json
+++ b/plugins/Installation/lang/sr.json
@@ -84,6 +84,7 @@
"SystemCheckGlobHelp": "Ova funkcija je isključena na vašem serveru. Piwik će pokušati da je emulira ali može da naleti na neke dalja sigurnosna ograničenja. Svakako će biti uticaja na funkcionalnost.",
"SystemCheckGzcompressHelp": "Potrebno je da uključite zlib proširenje i funkciju gzcompress",
"SystemCheckGzuncompressHelp": "Potrebno je da uključite zlib proširenje i funkciju gzcompress",
+ "SystemCheckHashHelp": "Potrebno je da kompajlirate PHP sa podrškom za hash() tako što ćete isključiti opciju --disable-hash.",
"SystemCheckIconvHelp": "Potrebno je da kompajlirate PHP sa \"iconv\" podrškom, --with-iconv.",
"SystemCheckJsonHelp": "php5-json proširenje je neophodno kako bi Piwik mogao da čita i piše JSON podatke.",
"SystemCheckMailHelp": "Vaši komentari i poruke za izgubljene lozinke neće biti poslate bez mail() funkcije.",
diff --git a/plugins/Installation/lang/zh-cn.json b/plugins/Installation/lang/zh-cn.json
index dbe9371fea..4a098e8f53 100644
--- a/plugins/Installation/lang/zh-cn.json
+++ b/plugins/Installation/lang/zh-cn.json
@@ -36,11 +36,17 @@
"NfsFilesystemWarning": "您的服务器使用NFS文件系统。",
"NfsFilesystemWarningSuffixAdmin": "这意味着 Piwik 使用基于文件的会话将会非常慢。",
"NfsFilesystemWarningSuffixInstall": "在NFS上使用基于文件的会话会非常慢,所以 Piwik 将使用数据库会话。如果您有很多并发的面板用户,需要在增大客户端连接到服务器的最大数。",
+ "NoConfigFileFound": "没有找到Piwik配置文件,你正在尝试访问Piwk页面。",
+ "YouMayInstallPiwikNow": "你可以%1$s现在安装Piwik%2$s",
+ "IfPiwikInstalledBeforeTablesCanBeKept": "如果未安装Piwik之前在你的数据库中有一些表,也没关系,你可以继续使用这些表并且里面的数据也可以继续使用。",
"Optional": "非必需",
"Password": "密码",
"PasswordDoNotMatch": "密码不匹配",
"PasswordRepeat": "密码(重复)",
"PercentDone": "%s %% 已完成",
+ "ProfessionalServicesAdTitle": "高级分析和服务",
+ "ProfessionalServicesfessionalServicesAdText": "我们的专家可以帮助你的公司解锁Piwik分析更强大的功能。",
+ "ProfessionalServicesfessionalDiscoverHow": "了解Piwik%1$s附加的产品和服务%2$s,以及如何增加转换和收入。",
"PleaseFixTheFollowingErrors": "请修复以下错误",
"DefaultSettings": "默认 Piwik 设置",
"DefaultSettingsHelp": "Piwik自带的默认设置。现在,您可以自定义它们或稍后在管理介面上做。",
@@ -48,6 +54,7 @@
"RestartWebServer": "做过这个改动之后,请重新启动网络服务器。",
"ReusingTables": "重用的表",
"PiwikOrgNewsletter": "邮件通知我重大的 Piwik 社区更新",
+ "ProfessionalServicesNewsletter": "发送Piwik的%1$s专业服务和产品%2$s 信息",
"SeeBelowForMoreInfo": "更详细的信息请看下面",
"SetupWebsite": "设定一个网站",
"SetupWebsiteError": "增加此网站时出现错误",
@@ -77,6 +84,7 @@
"SystemCheckGlobHelp": "这个内置函数在您的主机上已停用。Piwik 会尝试模拟这个功能,但可能会遇到其它的安全限制,功能可能受到影响。",
"SystemCheckGzcompressHelp": "需要启用 zlib 扩展和 gzcompress 函数。",
"SystemCheckGzuncompressHelp": "需要启用 zlib 扩展和 gzuncompress 函数。",
+ "SystemCheckHashHelp": "你需要配置并重新编译PHP,支持hash(),使用excluding disable-hash选项。",
"SystemCheckIconvHelp": "您需要设定及重建 PHP, 然后启用\"iconv\"支持, --with-iconv.",
"SystemCheckJsonHelp": "Piwik 需要 php5-json 扩展来读写 JSON 数据。",
"SystemCheckMailHelp": "意见反馈及忘记密码信息若沒有 mail() 将无法寄送。",
@@ -84,7 +92,9 @@
"SystemCheckMbstringHelp": "這個mbstring扩展需要处理多字节字符的用户界面和API响应。同时请检查php.ini中的mbstring.func_overload设置为\"0\"。",
"SystemCheckMemoryLimit": "内存限制",
"SystemCheckMemoryLimitHelp": "在一个高流量的网站,数据处理过程中使用的内存可能超出当前系统的允许值!如果需要,请修改 php.ini文件中的 memory_limit 值!",
- "SystemCheckOpenURL": "开启网址",
+ "SystemCheckNoErrorsOrWarnings": "没有错误或者警告。",
+ "SystemCheckViewFullSystemCheck": "查看所有的系统检查报告。",
+ "SystemCheckOpenURL": "打开URL",
"SystemCheckOpenURLHelp": "新闻订阅、更新通知及一键更新功能需要 \"curl\" 函数,allow_url_fopen=On, 或启用 fsockopen()。",
"SystemCheckOtherExtensions": "其它扩展",
"SystemCheckOtherFunctions": "其它函数",
diff --git a/plugins/Live/templates/getVisitorProfilePopup.twig b/plugins/Live/templates/getVisitorProfilePopup.twig
index c0b3141892..a5b69e7fbd 100644
--- a/plugins/Live/templates/getVisitorProfilePopup.twig
+++ b/plugins/Live/templates/getVisitorProfilePopup.twig
@@ -148,6 +148,8 @@
<div class="visitor-profile-map" style="display:none" data-href="{{ userCountryMapUrl|default('') }}">
</div>
</div>
+
+ {{ postEvent('Template.afterVisitorProfileOverview') }}
</div>
<div class="visitor-profile-visits-info">
<div class="visitor-profile-visits-container">
diff --git a/plugins/LogViewer b/plugins/LogViewer
-Subproject a6b0da9780343ceeaae427fd5457016f71a294c
+Subproject 62204fcd9dcc88521ab818b64a8f3f59c7b837d
diff --git a/plugins/LoginHttpAuth b/plugins/LoginHttpAuth
-Subproject 81f18035aad49a8fcbd33590e7c478c3dc4ac63
+Subproject 989f9faea1e5954d886510f54b8391eaf4216f7
diff --git a/plugins/MarketingCampaignsReporting b/plugins/MarketingCampaignsReporting
new file mode 160000
+Subproject 50c520eb9608b59c2e1abea09bbe70a553c834a
diff --git a/plugins/Marketplace/lang/cs.json b/plugins/Marketplace/lang/cs.json
index c8ae76a0a2..37faa4793d 100644
--- a/plugins/Marketplace/lang/cs.json
+++ b/plugins/Marketplace/lang/cs.json
@@ -103,6 +103,7 @@
"Updated": "Aktualizováno",
"UpdatingPlugin": "Aktualizace %1$s",
"UploadZipFile": "Nahrát zip soubor",
+ "PluginUploadDisabled": "Nahrání zásuvného modulu je zakázáno v konfiguračním souboru. Pokud chcete tuto funkci povolit, upravte konfigurační soubor, nebo kontaktujte administrátora.",
"LicenseKeyExpiresSoon": "Váš licenční klíč brzy vyprší, kontaktujte prosím %1$s.",
"LicenseKeyIsExpired": "Váš licenční klíč vypršel, kontaktujte prosím %1$s.",
"MultiServerEnvironmentWarning": "Zásuvný modul nelze instalovat nebo aktualizovat přímo, protože používáte Piwik na několika serverech. Modul by byl nainstalován pouze na jednom serveru. Namísto toho modul stáhněte a ručně nainstalujte na všechny své servery.",
diff --git a/plugins/Marketplace/lang/es.json b/plugins/Marketplace/lang/es.json
index 04214e85c2..59de743029 100644
--- a/plugins/Marketplace/lang/es.json
+++ b/plugins/Marketplace/lang/es.json
@@ -103,6 +103,7 @@
"Updated": "Actualizado",
"UpdatingPlugin": "Actualizando %1$s",
"UploadZipFile": "Carga un archivo ZIP",
+ "PluginUploadDisabled": "Subir plugins está deshabilitado desde el fichero de configuración. Para habilitar esta funcionalidad, por favor, contacta con tu administrador.",
"LicenseKeyExpiresSoon": "Tu clave de licencia expira pronto, por favor, contacta con %1$s.",
"LicenseKeyIsExpired": "Tu clave de licencia ha expirado, por favor, contacta con %1$s.",
"MultiServerEnvironmentWarning": "No puedes instalar o actualizar el complemento directamente ya que estás usando Piwik en múltiples servidores y el complemento sería instalado en un solo servidor. Descarga el complemento y despliégalo manualmente en todos tu servidores.",
diff --git a/plugins/Marketplace/lang/sr.json b/plugins/Marketplace/lang/sr.json
index 3f3343e3a5..375411b82d 100644
--- a/plugins/Marketplace/lang/sr.json
+++ b/plugins/Marketplace/lang/sr.json
@@ -4,30 +4,82 @@
"ActionActivatePlugin": "Aktivacija dodatka",
"ActionActivateTheme": "Aktivacija teme",
"ActionInstall": "Instalacija",
+ "AddToCart": "Dodaj u korpu",
"AllowedUploadFormats": "Preko ove stranice možete da postavite dodatak ili temu u .zip formatu.",
"Authors": "Autori",
"BackToMarketplace": "Natrag na Market",
+ "BrowseMarketplace": "Pretraži Market",
"ByXDevelopers": "%s razvojnom timu",
+ "CannotInstall": "Ne mogu da instaliram",
+ "CannotUpdate": "Ne mogu da ažuriram",
+ "ClickToCompletePurchase": "Kliknite kako biste kompletirali porudžbinu.",
+ "CurrentNumPiwikUsers": "Trenutno registrovanih korisnika: %1$s",
+ "ConfirmRemoveLicense": "Da li ste sigurni da želite da uklonite vaš ključ? Nećete više dobijati nove verzije kupljenih dodataka.",
"Developer": "Programer",
"DevelopersLearnHowToDevelopPlugins": "Programeri: saznajte kako da proširite i prilagodite Piwik %1$spravljenjem dodataka i tema%2$s.",
"Marketplace": "Market",
+ "PaidPlugins": "Premium sadržaji",
"FeaturedPlugin": "Istaknuti dodatak",
+ "InstallingNewPluginViaMarketplaceOrUpload": "Možete automatski da instalirate %1$s sa Marketa ili možete %2$saploudovati%3$s%4$s u ZIP formatu.",
"InstallingPlugin": "Instaliranje %s",
+ "InstallPurchasedPlugins": "Instaliranje kupljenih dodataka",
"LastCommitTime": "(poslednja promena %s)",
"LastUpdated": "Poslednje ažuriranje",
+ "License": "Licenca",
+ "LicenseKey": "Ključ",
+ "LicenseKeyActivatedSuccess": "Ključ je uspešno aktiviran!",
+ "LicenseKeyDeletedSuccess": "Ključ je uspešno obrisan.",
+ "Exceeded": "Prekoračena",
+ "LicenseMissing": "Licenca nedostaje",
+ "LicenseMissingDescription": "Za sledeće dodatke nemate licencu: %1$s. %2$sDa rešite problem potrebno je da postavite novi ključ, %3$spretplatite se%4$s ili deaktivirate dodatak.",
+ "PluginLicenseMissingDescription": "Nije vam dozvoljeno da preuzmete ovaj dodatak zato što nemate licencu za njega. Da rešite problem potrebno je da ažurirate vašu licencu, pretplatite se ili deaktivirate dodatak.",
+ "LicenseExceeded": "Licenca je istekla",
+ "LicenseExceededDescription": "Licence za sledeće dodatke nisu validne zato što je premašen broj autorizovanih korisnika po licenci: %1$s. %2$sViše nećete biti u mogućnosti da preuzimate nadogradnje ovih dodataka. Kako biste rešili ovu situaciju, ili obrišite neke od korisnika ili %3$snadogradite pretplatu%4$s.",
+ "PluginLicenseExceededDescription": "Nije vam dozvoljeno da preuzmete ovaj dodatak. Licenca više ne važi zato što je premašen broj autorizovanih korisnika. Da rešite problem ili obrišite neke od korisnika ili nadogradite pretplatu.",
+ "LicenseExpired": "Licenca je istekla",
+ "LicenseExpiredDescription": "Licence za sledeće dodatke su istekle: %1$s. %2$sViše nećete biti u mogućnosti da preuzimate nadogradnje ovih dodataka. Kako biste rešili ovu situaciju, ili %3$snadogradite pretplatu%4$s ili deaktivirajte dodatak ako ga više ne koristite..",
+ "LicenseRenewsNextPaymentDate": "Obnova sledećeg datuma",
+ "UpgradeSubscription": "Nadogradnja pretplate",
+ "ViewSubscriptionsSummary": "%1$sPogledajte na koje dodatke ste pretplaćeni.%2$s",
+ "ViewSubscriptions": "Prikaz pretplata",
+ "ExceptionLinceseKeyIsExpired": "Licenca je istekla",
+ "ExceptionLinceseKeyIsNotValid": "Ključ nije validan.",
+ "LicenseKeyIsValidShort": "Ključ je validan!",
+ "RemoveLicenseKey": "Ukloni ključ",
+ "InstallAllPurchasedPlugins": "Instaliranje svih kupljenih dodataka odjednom",
+ "InstallAllPurchasedPluginsAction": "Instaliranje i aktivacija %d kupljenih dodataka",
+ "InstallThesePlugins": "Doći će do instaliranja i aktivacije sledećih dodataka:",
+ "AllPaidPluginsInstalledAndActivated": "Svi plaćeni dodaci su uspešno instalirani i aktivirani.",
+ "OnlySomePaidPluginsInstalledAndActivated": "Neki od plaćenih dodataka nisu uspešno instalirani.",
"NewVersion": "nova verzija",
"NotAllowedToBrowseMarketplacePlugins": "Možete da pretražujete spisak dodataka koje je moguće instalirati kako biste podesili ili proširili vašu Piwik platformu. Kontaktirajte vašeg administratora ukoliko želite neki od njih da vidite instaliran.",
"NotAllowedToBrowseMarketplaceThemes": "Možete da pretražujete listu tema koje mogu biti instalirane kako biste podesili izgled vaše Piwik platforme. Kontaktirajte vašeg administratora ako želite da neku od njih vidite instaliranu.",
"NoPluginsFound": "Nije nađen nijedan dodatak",
"NoThemesFound": "Nije nađena nijedna tema",
+ "NoSubscriptionsFound": "Nije nađena nijedna pretplata",
"NumDownloadsLatestVersion": "Poslednja verzija: %s preuzimanja",
+ "OverviewPluginSubscriptions": "Pregled vaših pretplata na dodatke",
+ "OverviewPluginSubscriptionsMissingLicense": "Niste uneli ključ. Ukoliko ste se pretplatili na ovaj dodatak, idite na %1$sMarket%2$s i upišite ključ.",
+ "OverviewPluginSubscriptionsAllDetails": "Kako biste videli sve detalje ili izmenili pretplatu, prijavite se na vaš nalog.",
+ "OverviewPluginSubscriptionsMissingInfo": "Moguće je da pretplata nije registrovana ukoliko npr. uplata još nije prošla. Molimo vas da pokušate ponovo kroz par sati ili kontaktirajte Piwik tim.",
+ "NoValidSubscriptionNoUpdates": "Kada pretplata istekne više nećete moći da primate nadogradnje ovog dodatka.",
+ "PluginSubscriptionsList": "Ovo je spisak pretplata povezanih sa vašim ključem.",
+ "PaidPluginsNoLicenseKeyIntro": "Ukoliko ste naručili %1$spremium dodatak koji se plaća%2$s, molimo vas da upišete primljeni ključ.",
+ "PaidPluginsWithLicenseKeyIntro": "Postavljen je validan ključ. Iz sigurnosnih razloga ključeve ne prikazujemo ovde. Ako ste izgubili ključ molimo vas da kontaktirate Piwik tim.",
+ "PaidPluginsNoLicenseKeyIntroNoSuperUserAccess": "Ukoliko ste naručili %1$spremium dodatak koji se plaća%2$s preko marketa, molimo vas da zatražite od superkorisnika da upiše ključ.",
+ "PluginDescription": "Proširite funkcionalnosti Piwik-a preko Marketa preuzimanjem dodataka i tema.",
"PluginKeywords": "Ključne reči",
"PluginUpdateAvailable": "Koristite verziju %1$s a novija verzija %2$s je na raspolaganju.",
"PluginVersionInfo": "%1$s sa %2$s",
"PluginWebsite": "Sajt sa dodacima",
+ "PriceExclTax": "%1$s %2$s plus PDV.",
+ "PriceFromPerPeriod": "Od %1$s \/ %2$s",
+ "Reviews": "Recenzije",
+ "ShownPriceIsExclTax": "Prikazana cena je bez uključenog poreza",
"Screenshots": "Snimci ekrana",
"SortByNewest": "Najnoviji",
"SortByAlpha": "Alfa",
+ "SortByLastUpdated": "Poslednje ažuriranje",
"SortByPopular": "Popularni",
"StepDownloadingPluginFromMarketplace": "Preuzmi dodatak sa Marketa",
"StepDownloadingThemeFromMarketplace": "Preuzmi temu sa Marketa",
@@ -40,10 +92,22 @@
"StepReplaceExistingTheme": "Zamena postojeće teme",
"StepThemeSuccessfullyUpdated": "Uspešno ste ažurirali temu %1$s %2$s.",
"SubscriptionType": "Tip",
+ "SubscriptionStartDate": "Početni datum",
+ "SubscriptionEndDate": "Krajnji datum",
+ "SubscriptionNextPaymentDate": "Sledeći datum za plaćanje",
+ "SubscriptionInvalid": "Pretplata ili nije validna ili je istekla",
+ "SubscriptionExpiresSoon": "Ove pretplata uskoro ističe",
"Support": "Podrška",
"TeaserExtendPiwikByUpload": "Proširite Piwik postavljanjem ZIP datoteke",
+ "LicenseExceededPossibleCause": "Licenca je prekoračena. Verovatno ima više korisnika Piwik instalacije od broja koji je dovoljen pretplatom.",
"Updated": "Ažurirano",
+ "UpdatingPlugin": "Ažuriranje %1$s",
"UploadZipFile": "Postavljanje ZIP datoteke",
+ "PluginUploadDisabled": "Postavljanje dodataka je isključeno u fajlu sa podešavanjima. Kako biste uključili ovu opciju, izmenite podešavanja ili kontaktirajte vašeg administratora.",
+ "LicenseKeyExpiresSoon": "Vaša licenca uskoro ističe, molimo vas da kontaktirate %1$s.",
+ "LicenseKeyIsExpired": "Vaša licenca je istekla, molimo vas da kontaktirate %1$s.",
+ "MultiServerEnvironmentWarning": "Ne možete direktno da instalirate ili nadogradite ovaj dodatak zato što koristite Piwik na više servera. Dodatak bi bio instaliran samo na jednom serveru. Preuzmite dodatak i ručno ga postavite na sve vaše servere.",
+ "AutoUpdateDisabledWarning": "Ne možete direktno da instalirate i nadogradite ovaj dodatak zato što je automatska nadogradnja isključena u podešavanjima. Da omogućite automatsku nadogradnju postavite %1$s u %2$s.",
"ViewRepositoryChangelog": "Prikaži promene"
}
} \ No newline at end of file
diff --git a/plugins/MobileMessaging/lang/cs.json b/plugins/MobileMessaging/lang/cs.json
index f7c6c26251..55df2d723d 100644
--- a/plugins/MobileMessaging/lang/cs.json
+++ b/plugins/MobileMessaging/lang/cs.json
@@ -13,6 +13,7 @@
"Settings_CredentialNotProvided": "Než budete moci vytvářet a spravovat telefonní čísla, musíte připojit Piwik ke svému SMS účtu výše.",
"Settings_CredentialNotProvidedByAdmin": "Než budete moci vytvářet a spravovat telefonní čísla, požádejte svého administrátora, aby připojil Piwik k SMS účtu.",
"Settings_CredentialProvided": "Váš %s SMS API účet je nastaven správně!",
+ "Settings_CredentialInvalid": "Váš %1$s účet pro SMS je nastaven, ale při získávání dostupných kreditů došlo k chybě.",
"Settings_DeleteAccountConfirm": "Opravdu chcete odstranit tento SMS účet?",
"Settings_DelegatedSmsProviderOnlyAppliesToYou": "Nastavený poskytovatel SMS bude použit pouze vámi a žádnými jinými uživateli.",
"Settings_DelegatedPhoneNumbersOnlyUsedByYou": "Nastavená telefonní čísla mohou být zobrazena a použita pouze vámi a žádnými dalšími uživateli.",
@@ -38,8 +39,10 @@
"Settings_VerificationCodeJustSent": "Právě jsme na zadané telefonní číslo odeslali SMS s kódem. Zadejte ho výše a stiskněte \"ověřit\".",
"SettingsMenu": "Mobilní zprávy",
"SMS_Content_Too_Long": "[příliš dlouhé]",
+ "Available_Credits": "Dostupné kredity: %1$s",
"TopLinkTooltip": "Nechte si webové analýzy zasílat na email nebo na svůj mobilní telefon.",
"TopMenu": "Email a SMS hlášení",
+ "UserKey": "Userkey",
"VerificationText": "Kód je %1$s. Pro ověření vašeh otelefonního čísla tento kód zkopírujte do formuláře přístupného na Piwik > %2$s > %3$s."
}
} \ No newline at end of file
diff --git a/plugins/MobileMessaging/lang/sr.json b/plugins/MobileMessaging/lang/sr.json
index 4b0b3cbaa4..2fd7316a88 100644
--- a/plugins/MobileMessaging/lang/sr.json
+++ b/plugins/MobileMessaging/lang/sr.json
@@ -13,6 +13,7 @@
"Settings_CredentialNotProvided": "Pre nego što budete u mogućnosti da upravljate brojevima telefona, molimo vas da povežete Piwik sa vašim SMS nalogom.",
"Settings_CredentialNotProvidedByAdmin": "Da biste bili u mogućnosti da kreirate i upravljate telefonskim brojevima, zamolite administratora da poveže Piwik sa SMS nalogom.",
"Settings_CredentialProvided": "Vaš %s SMS API je ispravno podešen.",
+ "Settings_CredentialInvalid": "Kreiran je vaš %1$s SMS API nalog ali je došlo do greške prilikom provere stanja kredita.",
"Settings_DeleteAccountConfirm": "Da li ste sigurni da želite da obrišete ovaj SMS nalog?",
"Settings_DelegatedSmsProviderOnlyAppliesToYou": "Izabrani SMS provajder će biti korišćen samo za vas, ne i za ostale korisnike.",
"Settings_DelegatedPhoneNumbersOnlyUsedByYou": "Izabrane brojeve telefona možete videti i koristiti samo vi, ne i ostali korisnici.",
@@ -27,6 +28,7 @@
"Settings_PhoneNumbers_Add": "Dodaj novi broj telefona",
"Settings_PhoneNumbers_CountryCode_Help": "Ukoliko ne znati kod zemlje, potražite vašu zemlju ovde.",
"Settings_PhoneNumbers_Help": "Da biste bili u mogućnosti da primate SMS izveštaje na mobilni telefon, morate da upišete broj telefona.",
+ "Settings_PhoneNumbers_HelpAdd": "Kada budete kliknuli na Dodaj, SMS sa kodom će biti poslat na mobilni. Korisnik koji bude primio kod bi onda trebalo da se prijavi na Piwik, klikne na Podešavanja pa na Mobilni. Nakon što unese kod korisnik će biti u mogućnosti da prima izveštaje na svoj mobilni telefon.",
"Settings_PleaseSignUp": "Da biste kreirali SMS izveštaje i primali poruke sa statistikama na mobilni, molimo vas da se prijavite sa SMS API-jem i da upišete svoje podatke.",
"Settings_SMSAPIAccount": "Upravljanje SMS API nalogom",
"Settings_SMSProvider": "SMS provajder",
@@ -37,8 +39,10 @@
"Settings_VerificationCodeJustSent": "Upravo je poslata SMS poruka sa kodom na ovaj broj. Molimo vas da upišete kod u polje iznad i kliknete na \"Validacija\".",
"SettingsMenu": "SMS poruke",
"SMS_Content_Too_Long": "Sadržaj poruke je predug",
+ "Available_Credits": "Raspoloživi krediti: %1$s",
"TopLinkTooltip": "Neka izveštaji i analitike stižu u vaše poštansko sanduče ili na mobilni!",
"TopMenu": "Elektronski i SMS izveštaji",
+ "UserKey": "Ključ",
"VerificationText": "Kod je %1$s. Da biste izvršili validaciju broja vašeg telefona i počeli da primate SMS izveštaje, molimo vas da kopirate ovaj kod u Piwik > %2$s > %3$s."
}
} \ No newline at end of file
diff --git a/plugins/Morpheus/icons b/plugins/Morpheus/icons
-Subproject 1b5597760791b2b305e6b9c26ca1a6b8b15ee0e
+Subproject a4a79c96561af63c626285673a464d59eeaea4f
diff --git a/plugins/Overlay/stylesheets/overlay.css b/plugins/Overlay/stylesheets/overlay.css
index 2d79764ccd..257ae31d9a 100644
--- a/plugins/Overlay/stylesheets/overlay.css
+++ b/plugins/Overlay/stylesheets/overlay.css
@@ -65,6 +65,10 @@ a#overlayTitle .icon-help {
color: #255792;
}
+.overlayMainMetrics {
+ padding-bottom: 0 !important;
+}
+
a#overlaySegmentedVisitorLog,
a#overlayFullScreen,
a#overlayRowEvolution,
diff --git a/plugins/Overlay/templates/index.twig b/plugins/Overlay/templates/index.twig
index e041f73cd4..13315dc56c 100644
--- a/plugins/Overlay/templates/index.twig
+++ b/plugins/Overlay/templates/index.twig
@@ -52,6 +52,8 @@
<a id="overlayRowEvolution">{{ 'General_RowEvolutionRowActionTooltipTitle'|translate }}</a>
<a id="overlayTransitions">{{ 'General_TransitionsRowActionTooltipTitle'|translate }}</a>
<a id="overlaySegmentedVisitorLog">{{ 'Live_RowActionTooltipTitle'|translate }}</a>
+
+ {{ postEvent('Template.afterOverlaySidebar') }}
</div>
<div id="overlayMain">
diff --git a/plugins/PrivacyManager/lang/sr.json b/plugins/PrivacyManager/lang/sr.json
index b9dce39924..216ccfa259 100644
--- a/plugins/PrivacyManager/lang/sr.json
+++ b/plugins/PrivacyManager/lang/sr.json
@@ -5,6 +5,7 @@
"AnonymizeIpExtendedHelp": "Kada korisnik poseti vaš sajt, Piwik neće koristiti punu IP adresu (poput %1$s) već će je anonimizirati (u %2$s). Anonimizacija IP adresa je jedan od zahteva koje su postavili zakoni o zaštit privatnosti u zemljama poput Nemačke.",
"AnonymizeIpMaskLengtDescription": "Izaberite koliko bajtova IP adrese treba da bude maskirano",
"AnonymizeIpMaskLength": "%1$s bajt(ova) - npr. %2$s",
+ "CannotLockSoDeleteLogActions": "Tabela log_action ne može biti očišćena. Potrebno je da MYSQL korisnik '%s' ima privilegiju LOCK TABLES.",
"ClickHereSettings": "Kliknite ovde kako biste pristupili %s podešavanjima.",
"CurrentDBSize": "Trenutna veličina baze",
"DBPurged": "Baza je očišćena",
diff --git a/plugins/ProfessionalServices/ProfessionalServices.php b/plugins/ProfessionalServices/ProfessionalServices.php
index 5dd848e61d..d11bc22b38 100644
--- a/plugins/ProfessionalServices/ProfessionalServices.php
+++ b/plugins/ProfessionalServices/ProfessionalServices.php
@@ -10,6 +10,7 @@ namespace Piwik\Plugins\ProfessionalServices;
use Piwik\Common;
use Piwik\View;
+use Piwik\Plugin;
class ProfessionalServices extends \Piwik\Plugin
{
@@ -26,6 +27,8 @@ class ProfessionalServices extends \Piwik\Plugin
'Template.endGoalEditTable' => array('function' => 'getGoalFunnelOverviewPromo', 'after' => true),
'Template.afterEventsReport' => 'getEventsPromo',
'Template.afterReferrersKeywordsReport' => 'getSearchKeywordsPerformancePromo',
+ 'Template.afterOverlaySidebar' => 'getHeatmapPromo',
+ 'Template.afterVisitorProfileOverview' => 'getSessionRecordingPromo',
);
}
@@ -48,7 +51,7 @@ class ProfessionalServices extends \Piwik\Plugin
$action = 'promoServices';
}
- if($action == 'rssPiwikPro') {
+ if ($action == 'rssPiwikPro') {
$action = 'rss';
}
}
@@ -60,10 +63,29 @@ class ProfessionalServices extends \Piwik\Plugin
return $isWidget;
}
+ public function getHeatmapPromo(&$out)
+ {
+ if (!$this->shouldShowPromoForPlugin('HeatmapSessionRecording')) {
+ return;
+ }
+
+ $view = new View('@ProfessionalServices/promoHeatmaps');
+ $out .= $view->render();
+ }
+
+ public function getSessionRecordingPromo(&$out)
+ {
+ if (!$this->shouldShowPromoForPlugin('HeatmapSessionRecording')) {
+ return;
+ }
+
+ $view = new View('@ProfessionalServices/promoSessionRecordings');
+ $out .= $view->render();
+ }
+
public function getSearchKeywordsPerformancePromo(&$out)
{
- if(\Piwik\Plugin\Manager::getInstance()->isPluginActivated('SearchEngineKeywordsPerformance')
- || $this->isRequestForDashboardWidget()) {
+ if (!$this->shouldShowPromoForPlugin('SearchEngineKeywordsPerformance')) {
return;
}
@@ -73,8 +95,7 @@ class ProfessionalServices extends \Piwik\Plugin
public function getGoalFunnelOverviewPromo(&$out)
{
- if(\Piwik\Plugin\Manager::getInstance()->isPluginActivated('Funnels')
- || $this->isRequestForDashboardWidget()) {
+ if (!$this->shouldShowPromoForPlugin('Funnels')) {
return;
}
@@ -82,11 +103,9 @@ class ProfessionalServices extends \Piwik\Plugin
$out .= $view->render();
}
-
public function getGoalOverviewPromo(&$out)
{
- if(\Piwik\Plugin\Manager::getInstance()->isPluginActivated('AbTesting')
- || $this->isRequestForDashboardWidget()) {
+ if (!$this->shouldShowPromoForPlugin('AbTesting')) {
return;
}
@@ -96,11 +115,23 @@ class ProfessionalServices extends \Piwik\Plugin
public function getEventsPromo(&$out)
{
- if($this->isRequestForDashboardWidget()) {
+ if ($this->isRequestForDashboardWidget()) {
return;
}
+
$view = new View('@ProfessionalServices/promoBelowEvents');
- $view->displayMediaAnalyticsAd = !\Piwik\Plugin\Manager::getInstance()->isPluginActivated('MediaAnalytics');
+ $view->displayMediaAnalyticsAd = !$this->isPluginActivated('MediaAnalytics');
$out .= $view->render();
}
+
+ private function shouldShowPromoForPlugin($pluginName)
+ {
+ return !$this->isPluginActivated($pluginName) && !$this->isRequestForDashboardWidget();
+ }
+
+ private function isPluginActivated($pluginName)
+ {
+ return Plugin\Manager::getInstance()->isPluginActivated($pluginName);
+ }
+
}
diff --git a/plugins/ProfessionalServices/templates/promoHeatmaps.twig b/plugins/ProfessionalServices/templates/promoHeatmaps.twig
new file mode 100644
index 0000000000..7aab5fe6c5
--- /dev/null
+++ b/plugins/ProfessionalServices/templates/promoHeatmaps.twig
@@ -0,0 +1,3 @@
+<p style="margin-top:24px;font-size:13px;" class="alert-info alert">Did you know?
+ With <a target="_blank" rel="noreferrer" href="https://piwik.org/recommends/heatmap-session-recording-learn-more/">Heatmap & Session Recording</a> you understand your visitors much better. See where your visitors click, move the mouse, scroll, type, and more.
+</p>
diff --git a/plugins/ProfessionalServices/templates/promoSessionRecordings.twig b/plugins/ProfessionalServices/templates/promoSessionRecordings.twig
new file mode 100644
index 0000000000..b43bb1af32
--- /dev/null
+++ b/plugins/ProfessionalServices/templates/promoSessionRecordings.twig
@@ -0,0 +1,3 @@
+<p style="margin-top:8px" class="alert-info alert">Did you know?
+ With <a target="_blank" rel="noreferrer" href="https://piwik.org/recommends/heatmap-session-recording-learn-more/">Heatmap & Session Recording</a> you can record all clicks, mouse movements, scrolls and form interactions of your visitors and replay them in a video to truly understand your visitors.
+</p> \ No newline at end of file
diff --git a/plugins/QueuedTracking b/plugins/QueuedTracking
-Subproject 16636060a0616040cc567c3296c43d55e779ba8
+Subproject cd13777cb6261032731cd64f32a3821ad121761
diff --git a/plugins/Referrers/lang/sr.json b/plugins/Referrers/lang/sr.json
index 7d061269eb..c6da870b58 100644
--- a/plugins/Referrers/lang/sr.json
+++ b/plugins/Referrers/lang/sr.json
@@ -10,6 +10,7 @@
"ColumnWebsite": "Sajt",
"ColumnWebsitePage": "Stranica sajta",
"DirectEntry": "Direktni ulasci",
+ "DirectEntryDocumentation": "Korisnik je ukucao adresu u svoj brauzer i došao na vaš sajt - ušao je direktno na vaš sajt.",
"Distinct": "Različite reference po tipu",
"DistinctCampaigns": "različite kampanje",
"DistinctKeywords": "različite ključne reči",
diff --git a/plugins/SEO/lang/bg.json b/plugins/SEO/lang/bg.json
index 0f51ae5923..79cd821cfe 100644
--- a/plugins/SEO/lang/bg.json
+++ b/plugins/SEO/lang/bg.json
@@ -3,7 +3,6 @@
"PluginDescription": "Този плъгин извлича и показва SEO метрики: Alexa уеб ранк, Google Pagerank, брой индексирани страници и брой обратни връзки за избраната уеб страница.",
"AlexaRank": "Alexa ранг",
"Bing_IndexedPages": "Bing индексирани страници",
- "Dmoz": "DMOZ записи",
"DomainAge": "Възраст на домейна",
"Google_IndexedPages": "Google индексирани страници",
"Rank": "Ранг",
diff --git a/plugins/SEO/lang/ca.json b/plugins/SEO/lang/ca.json
index 7683682a88..aa6c0aa4e2 100644
--- a/plugins/SEO/lang/ca.json
+++ b/plugins/SEO/lang/ca.json
@@ -2,7 +2,6 @@
"SEO": {
"AlexaRank": "Ranking Alexa",
"Bing_IndexedPages": "Pàgines indexades per Bing",
- "Dmoz": "Entrades DMOZ",
"DomainAge": "Edat del domini",
"Google_IndexedPages": "Pàgines indexades per Google",
"Rank": "Ranking",
diff --git a/plugins/SEO/lang/cs.json b/plugins/SEO/lang/cs.json
index 643d16c538..0e089e4764 100644
--- a/plugins/SEO/lang/cs.json
+++ b/plugins/SEO/lang/cs.json
@@ -3,7 +3,6 @@
"PluginDescription": "Tento plugin extrahuje a zobrazuje SEO metriky: pořadí v Alexa web, Google PageRank, počet indexovaných stránek a zpětných odkazů aktuálně vybraného webu.",
"AlexaRank": "Hodnocení Alexa",
"Bing_IndexedPages": "Stránek zaindexovaných Bingem",
- "Dmoz": "Záznamů v katalogu DMOZ",
"DomainAge": "Staří domény",
"Google_IndexedPages": "Stránek zaindexovaných Googlem",
"Rank": "Hodnocení",
diff --git a/plugins/SEO/lang/da.json b/plugins/SEO/lang/da.json
index c842dd254d..9f3deb969d 100644
--- a/plugins/SEO/lang/da.json
+++ b/plugins/SEO/lang/da.json
@@ -3,7 +3,6 @@
"PluginDescription": "Denne programtilføjelse udtrækker og viser SEO måleværdier: Alexa webranking, Google Pagerank, antallet af indexerede sider, og linker tilbage til den nuværende webside.",
"AlexaRank": "Alexa rang",
"Bing_IndexedPages": "Bing indekserede sider",
- "Dmoz": "DMOZ angivelser",
"DomainAge": "Domæne alder",
"Google_IndexedPages": "Google indekserede sider",
"Rank": "Rang",
diff --git a/plugins/SEO/lang/de.json b/plugins/SEO/lang/de.json
index eea5590325..bfafa8a5a9 100644
--- a/plugins/SEO/lang/de.json
+++ b/plugins/SEO/lang/de.json
@@ -3,7 +3,6 @@
"PluginDescription": "Dieses Plugin ermittelt SEO Metriken und zeigt diese an: Alexa Web Ranking, Google RageRank, Anzahl der indizierten Seiten sowie Backlinks der aktuell ausgewählten Website.",
"AlexaRank": "Alexa Rang",
"Bing_IndexedPages": "Bing indizierte Seiten",
- "Dmoz": "DMOZ Einträge",
"DomainAge": "Alter der Domain",
"Google_IndexedPages": "Google indizierte Seiten",
"Rank": "Rang",
diff --git a/plugins/SEO/lang/el.json b/plugins/SEO/lang/el.json
index 909aca8aa1..5666e759a9 100644
--- a/plugins/SEO/lang/el.json
+++ b/plugins/SEO/lang/el.json
@@ -3,7 +3,6 @@
"PluginDescription": "Το πρόσθετο εξάγει και εμφανίζει μετρικές SEO: ταξινόμηση ιστού από το Alexa, Google Pagerank, αριθμός σελίδων στο ευρετήριο και σύνδεσμοι του επιλεγμένου ιστοτόπου.",
"AlexaRank": "Βαθμολόγηση Alexa",
"Bing_IndexedPages": "Σελίδες σε ευρετήριο Bing",
- "Dmoz": "Εισαγωγές DMOZ",
"DomainAge": "Ηλικία Domain",
"Google_IndexedPages": "Σελίδες σε ευρετήριο Google",
"Rank": "Βαθμολόγηση",
diff --git a/plugins/SEO/lang/es.json b/plugins/SEO/lang/es.json
index ea767d4aa7..a50bba3cd3 100644
--- a/plugins/SEO/lang/es.json
+++ b/plugins/SEO/lang/es.json
@@ -3,7 +3,6 @@
"PluginDescription": "Este complemento extrae y visualiza las métricas SEO: ranking de internet Alexa, Google Pagerank, número de páginas indexadas y enlaces de retorno del sitio de internet actualmente seleccionado.",
"AlexaRank": "Ranking Alexa",
"Bing_IndexedPages": "páginas indexadas por Bing",
- "Dmoz": "Entradas DMOZ",
"DomainAge": "Edad del dominio",
"Google_IndexedPages": "Páginas indexadas por Google",
"Rank": "Rango",
diff --git a/plugins/SEO/lang/et.json b/plugins/SEO/lang/et.json
index 25d84e1b10..10b0363e3c 100644
--- a/plugins/SEO/lang/et.json
+++ b/plugins/SEO/lang/et.json
@@ -2,7 +2,6 @@
"SEO": {
"AlexaRank": "Alexa reiting",
"Bing_IndexedPages": "Bingi indekseeritud lehti",
- "Dmoz": "DMOZ sissekanded",
"DomainAge": "Domeeni vanus",
"Google_IndexedPages": "Googles indekseeritud lehed",
"Rank": "Reiting",
diff --git a/plugins/SEO/lang/fa.json b/plugins/SEO/lang/fa.json
index 43d9a5706f..e438bfd908 100644
--- a/plugins/SEO/lang/fa.json
+++ b/plugins/SEO/lang/fa.json
@@ -2,7 +2,6 @@
"SEO": {
"AlexaRank": "رتبه الکسا",
"Bing_IndexedPages": "صفحه های نمایه (ایندکس) شده در بینگ",
- "Dmoz": "ورودی های DMOZ",
"DomainAge": "سن دامنه",
"Google_IndexedPages": "صفحه های نمایه (ایندکس) شده در گوگل",
"Rank": "رنک",
diff --git a/plugins/SEO/lang/fi.json b/plugins/SEO/lang/fi.json
index 02accf4536..7673b0593d 100644
--- a/plugins/SEO/lang/fi.json
+++ b/plugins/SEO/lang/fi.json
@@ -3,7 +3,6 @@
"PluginDescription": "Tämä lisäosa hakee ja näyttää SEO-tietoja: Alexan web ranking, Googlen Pagerank, indeksoitujen sivujen lukumäärän, ja takaisin osoittavien linkkien määrän valitulle sivulle.",
"AlexaRank": "Alexa-tulos",
"Bing_IndexedPages": "Bingin indeksoidut sivut",
- "Dmoz": "DMOZ tulossivut",
"DomainAge": "Sivun ikä",
"Google_IndexedPages": "Googlen indeksoimat sivut",
"Rank": "Sijoitus",
diff --git a/plugins/SEO/lang/fr.json b/plugins/SEO/lang/fr.json
index 1c0e31279e..3b169bf89e 100644
--- a/plugins/SEO/lang/fr.json
+++ b/plugins/SEO/lang/fr.json
@@ -3,7 +3,6 @@
"PluginDescription": "Ce composant extrait et affiche les indicateurs de SEO : Alexa web ranking, Google Pagerank, le nombre de pages indexées et les rétroliens du site actuellement sélectionné.",
"AlexaRank": "Notation Alexa",
"Bing_IndexedPages": "Pages indexées sur Bing",
- "Dmoz": "Entrées DMOZ",
"DomainAge": "Âge du domaine",
"Google_IndexedPages": "Page indexées sur Google",
"Rank": "Notation",
diff --git a/plugins/SEO/lang/hi.json b/plugins/SEO/lang/hi.json
index 87fabc60f5..9101ac6bd8 100644
--- a/plugins/SEO/lang/hi.json
+++ b/plugins/SEO/lang/hi.json
@@ -3,7 +3,6 @@
"PluginDescription": "इस प्लगइन अर्क और प्रदर्शित करता है SEO मेट्रिक्स: एलेक्सा वेब रैंकिंग, गूगल पेजरेंक, क्रमाँक पृष्ठों और वर्तमान में चयनित वेबसाइट के पश्च की संख्या।",
"AlexaRank": "एलेक्सा दरजा",
"Bing_IndexedPages": "बिंग अनुक्रमित पृष्ठों",
- "Dmoz": "डीमॉज़ प्रविष्टियां",
"DomainAge": "डोमेन आयु",
"Google_IndexedPages": "गूगल पृष्ठों से अनुक्रमित",
"Rank": "श्रेणी",
diff --git a/plugins/SEO/lang/id.json b/plugins/SEO/lang/id.json
index 761690c352..59cba4e26c 100644
--- a/plugins/SEO/lang/id.json
+++ b/plugins/SEO/lang/id.json
@@ -2,7 +2,6 @@
"SEO": {
"AlexaRank": "Peringkat Alexa",
"Bing_IndexedPages": "Halaman terindeks Bing",
- "Dmoz": "Msukan DMOZ",
"DomainAge": "Umut Ranah",
"Google_IndexedPages": "Halaman terindeks Google",
"Rank": "Peringkat",
diff --git a/plugins/SEO/lang/it.json b/plugins/SEO/lang/it.json
index f3ef8e5e89..7d3b50b6db 100644
--- a/plugins/SEO/lang/it.json
+++ b/plugins/SEO/lang/it.json
@@ -3,7 +3,6 @@
"PluginDescription": "Questo plugin estrae e visualizza le metriche SEO: Alexa web ranking, Google Pagerank, numero di pagine indicizzate e i backlink del sito al momento selezionato.",
"AlexaRank": "Alexa Rank",
"Bing_IndexedPages": "Pagine indicizzate da Bing",
- "Dmoz": "Voci DMOZ",
"DomainAge": "Età del dominio",
"Google_IndexedPages": "Pagine indicizzate da Google",
"Rank": "Rank",
diff --git a/plugins/SEO/lang/ja.json b/plugins/SEO/lang/ja.json
index e4459709a2..f28ffc47fa 100644
--- a/plugins/SEO/lang/ja.json
+++ b/plugins/SEO/lang/ja.json
@@ -3,7 +3,6 @@
"PluginDescription": "このプラグインは SEO メトリクスを抽出し、表示します。: Alexa web ランキング, Google ページランク,インデックスされたページ数やバックリンクの数。",
"AlexaRank": "Alexa ランク",
"Bing_IndexedPages": "Bing インデックスページ",
- "Dmoz": "DMOZ エントリー",
"DomainAge": "ドメインエイジ",
"Google_IndexedPages": "Google インデックスページ",
"Rank": "ランク",
diff --git a/plugins/SEO/lang/ko.json b/plugins/SEO/lang/ko.json
index de4e2b2bd6..bba9b99651 100644
--- a/plugins/SEO/lang/ko.json
+++ b/plugins/SEO/lang/ko.json
@@ -3,7 +3,6 @@
"PluginDescription": "이 플러그인은 Alexa 웹 랭킹, 구글 페이지랭크, 색인된 페이지 수, 선택된 웹사이트의 백링크와 같은 SEO 측정 기준을 추출하고 보여줍니다.",
"AlexaRank": "Alexa 랭크",
"Bing_IndexedPages": "Bing에 색인된 페이지",
- "Dmoz": "DMOZ 항목",
"DomainAge": "도메인 에이지",
"Google_IndexedPages": "Google에 색인된 페이지",
"Rank": "순위",
diff --git a/plugins/SEO/lang/nb.json b/plugins/SEO/lang/nb.json
index 1848e495b3..482011527b 100644
--- a/plugins/SEO/lang/nb.json
+++ b/plugins/SEO/lang/nb.json
@@ -3,7 +3,6 @@
"PluginDescription": "Denne utvidelsen ekstraherer og viser SEO-tall: Alexa web-rangering, Google Pagerank, antall indekserte sider og tilbakelenker til det valgte nettstedet.",
"AlexaRank": "Alexa-rangering",
"Bing_IndexedPages": "Indekserte sider hos Bing",
- "Dmoz": "DMOZ-oppføringer",
"DomainAge": "Domenets alder",
"Google_IndexedPages": "Indekserte sider hos Google",
"Rank": "Rangering",
diff --git a/plugins/SEO/lang/nl.json b/plugins/SEO/lang/nl.json
index ef999bc4d7..43141d4427 100644
--- a/plugins/SEO/lang/nl.json
+++ b/plugins/SEO/lang/nl.json
@@ -3,7 +3,6 @@
"PluginDescription": "Deze plugin extraheert en toon SEO metrics: Alexa web ranking, Google pagerank, aantal geïndexeerde pagina's en links naar de huidige geselecteerde website.",
"AlexaRank": "Alexa Rank",
"Bing_IndexedPages": "Bing geindexeerde pagina's",
- "Dmoz": "DMOZ items",
"DomainAge": "Domein leeftijd",
"Google_IndexedPages": "Google geindexeerde pagina's",
"Rank": "Ranking",
diff --git a/plugins/SEO/lang/pt-br.json b/plugins/SEO/lang/pt-br.json
index 08ea01fd07..66d6b3ff72 100644
--- a/plugins/SEO/lang/pt-br.json
+++ b/plugins/SEO/lang/pt-br.json
@@ -3,7 +3,6 @@
"PluginDescription": "Este plugin extratai e exibe métricas de SEO: Alexa web ranking, Google PageRank, número de páginas indexadas e backlinks do site selecionado.",
"AlexaRank": "Rank Alexa",
"Bing_IndexedPages": "Páginas indexadas no Bing",
- "Dmoz": "Entradas DMOZ",
"DomainAge": "Idade de Domínio",
"Google_IndexedPages": "Páginas indexadas pelo Google",
"Rank": "Classificação",
diff --git a/plugins/SEO/lang/ro.json b/plugins/SEO/lang/ro.json
index b120d09e52..72a123de4e 100644
--- a/plugins/SEO/lang/ro.json
+++ b/plugins/SEO/lang/ro.json
@@ -2,7 +2,6 @@
"SEO": {
"AlexaRank": "Poziţie în Alexa",
"Bing_IndexedPages": "Pagini indexate de Bing",
- "Dmoz": "DMOZ intrari",
"DomainAge": "Vechime domeniu",
"Google_IndexedPages": "Pagini indexate de Google",
"Rank": "Poziţie",
diff --git a/plugins/SEO/lang/ru.json b/plugins/SEO/lang/ru.json
index 1383e4bac4..452532c702 100644
--- a/plugins/SEO/lang/ru.json
+++ b/plugins/SEO/lang/ru.json
@@ -3,7 +3,6 @@
"PluginDescription": "Этот плагин извлекает и отображает метрику SEO: веб-ранг Alexa, Google Pagerank, количество индексированных страниц и обратных ссылок на текущий выбранный веб-сайт.",
"AlexaRank": "Рейтинг Alexa",
"Bing_IndexedPages": "Страниц в индексе Bing",
- "Dmoz": "Записей в каталоге DMOZ",
"DomainAge": "Возраст домена",
"Google_IndexedPages": "Страниц в индексе Google",
"Rank": "Рейтинг",
diff --git a/plugins/SEO/lang/sl.json b/plugins/SEO/lang/sl.json
index dab55ee7b8..884344b05a 100644
--- a/plugins/SEO/lang/sl.json
+++ b/plugins/SEO/lang/sl.json
@@ -3,7 +3,6 @@
"PluginDescription": "Ta vtičnik izlušči in prikaže SEO metriko: Alexa web rangiranje, Google Pagerank, število indeksiranih strani in povratnih povezav za trenutno izbrane spletne strani.",
"AlexaRank": "Alexa položaj",
"Bing_IndexedPages": "Bing indeksirane strani",
- "Dmoz": "DMOZ vnosi",
"DomainAge": "Starost domene",
"Google_IndexedPages": "Google indeksirane strani",
"Rank": "Položaj",
diff --git a/plugins/SEO/lang/sq.json b/plugins/SEO/lang/sq.json
index 45e3294bdc..bda2c7ce94 100644
--- a/plugins/SEO/lang/sq.json
+++ b/plugins/SEO/lang/sq.json
@@ -3,7 +3,6 @@
"PluginDescription": "Kjo shtojcë përfton dhe shfaq vlera SEO: renditje web Alexa, Google Pagerank, numër faqesh të përfshira në tregues dhe paslidhje të sajtit të përzgjedhur në atë çast.",
"AlexaRank": "Renditje Alexa",
"Bing_IndexedPages": "Faqe të indeksuara nga Bing",
- "Dmoz": "Zëra DMOZ",
"DomainAge": "Moshë Përkatësie",
"Google_IndexedPages": "Faqe të indeksuara nga Google",
"Rank": "Renditje",
diff --git a/plugins/SEO/lang/sr.json b/plugins/SEO/lang/sr.json
index 25ea4c2abd..027c287817 100644
--- a/plugins/SEO/lang/sr.json
+++ b/plugins/SEO/lang/sr.json
@@ -3,7 +3,6 @@
"PluginDescription": "Ovaj dodatak prikuplja i prikazuje SEO metrike: Aleksa rangiranje, Gugl rangiranje, broj indeksiranih stranica i povratnih linkova za trenutno odabrani sajt.",
"AlexaRank": "Alexa rangiranje",
"Bing_IndexedPages": "Stranice koje je indeksirao Bing",
- "Dmoz": "DMOZ stavke",
"DomainAge": "Starost domena",
"Google_IndexedPages": "Stranice koje je indeksirao Google",
"Rank": "Rang",
diff --git a/plugins/SEO/lang/sv.json b/plugins/SEO/lang/sv.json
index c36569eb1e..9e3141c833 100644
--- a/plugins/SEO/lang/sv.json
+++ b/plugins/SEO/lang/sv.json
@@ -3,7 +3,6 @@
"PluginDescription": "Detta plugin framställer och visar SEO-värden: Alexa webbranking , Google Pagerank , antalet indexerade sidor och länkar för den valda webbplatsen.",
"AlexaRank": "Alexa Rank",
"Bing_IndexedPages": "Bing indexerade sidor",
- "Dmoz": "DMOZ poster",
"DomainAge": "Domänålder",
"Google_IndexedPages": "Google indexerade sidor",
"Rank": "Rank",
diff --git a/plugins/SEO/lang/tl.json b/plugins/SEO/lang/tl.json
index 197d2d1f61..411dc9a5cb 100644
--- a/plugins/SEO/lang/tl.json
+++ b/plugins/SEO/lang/tl.json
@@ -2,7 +2,6 @@
"SEO": {
"AlexaRank": "Ranggo sa Alexa",
"Bing_IndexedPages": "Mga na index na pahina ng bing",
- "Dmoz": "DMOZ entries",
"DomainAge": "Edad ng Domain",
"Google_IndexedPages": "Na index ng Google ang mga pahina",
"Rank": "Ranggo",
diff --git a/plugins/SEO/lang/uk.json b/plugins/SEO/lang/uk.json
index 04c18f9b2f..23562aafe0 100644
--- a/plugins/SEO/lang/uk.json
+++ b/plugins/SEO/lang/uk.json
@@ -3,7 +3,6 @@
"PluginDescription": "Цей плагін витягує і відображає метрики SEO: Alexa рейтинг, Google Pagerank, кількість проіндексованих сторінок і зворотних посилань в даний момент на сайт.",
"AlexaRank": "Рейтинг Alexa",
"Bing_IndexedPages": "Сторінок в індексі Bing",
- "Dmoz": "Записів в каталозі DMOZ",
"DomainAge": "Вік домену",
"Google_IndexedPages": "Сторінок в індексі Google",
"Rank": "Рейтинг",
diff --git a/plugins/SEO/lang/vi.json b/plugins/SEO/lang/vi.json
index 56b8072a16..5951bc3562 100644
--- a/plugins/SEO/lang/vi.json
+++ b/plugins/SEO/lang/vi.json
@@ -2,7 +2,6 @@
"SEO": {
"AlexaRank": "Xếp hạng Alexa",
"Bing_IndexedPages": "Các trang được lập chỉ mục Bing",
- "Dmoz": "Các mục DMOZ",
"DomainAge": "Tuổi tên miền",
"Google_IndexedPages": "Các trang được lập chỉ mục Google",
"Rank": "Xếp hạng",
diff --git a/plugins/SEO/lang/zh-cn.json b/plugins/SEO/lang/zh-cn.json
index 62ee5e0815..fa78944c4e 100644
--- a/plugins/SEO/lang/zh-cn.json
+++ b/plugins/SEO/lang/zh-cn.json
@@ -3,7 +3,6 @@
"PluginDescription": "这个插件提取和显示的搜索引擎优化指标:Alexa的网站排名,谷歌的PageRank,索引和反向当前选择的网站数。",
"AlexaRank": "Alexa 排名",
"Bing_IndexedPages": "Bing 索引页面",
- "Dmoz": "DMOZ 条目",
"DomainAge": "域名年限",
"Google_IndexedPages": "Google 索引页面",
"Rank": "排名",
diff --git a/plugins/SEO/lang/zh-tw.json b/plugins/SEO/lang/zh-tw.json
index 08e1a3a2be..9cbe9558ed 100644
--- a/plugins/SEO/lang/zh-tw.json
+++ b/plugins/SEO/lang/zh-tw.json
@@ -3,7 +3,6 @@
"PluginDescription": "此外掛提取和顯示 SEO 數據:目前網站的 Alexa 排名、Google Pagerank、收錄的頁面數量和反向連結。",
"AlexaRank": "Alexa 排名",
"Bing_IndexedPages": "Bing 收錄頁面",
- "Dmoz": "DMOZ 條目",
"DomainAge": "網域年齡",
"Google_IndexedPages": "Google 收錄頁面",
"Rank": "評級",
diff --git a/plugins/ScheduledReports/lang/el.json b/plugins/ScheduledReports/lang/el.json
index 87664faf15..36f9e5c3a4 100644
--- a/plugins/ScheduledReports/lang/el.json
+++ b/plugins/ScheduledReports/lang/el.json
@@ -30,7 +30,7 @@
"ReportFormat": "Μορφή Αναφοράς",
"ReportHour": "Αποστολή αναφοράς στις %s",
"ReportHourWithUTC": "%s ώρα UTC",
- "ReportIncludeNWebsites": "Η αναφορά θα περιλαμβάνει βασικές μετρήσεις για όλες τις ιστοσελίδες που έχουν τουλάχιστον μια επισκεψη (από τις συνολικά %s διαθέσιμες ιστοσελίδες).",
+ "ReportIncludeNWebsites": "Η αναφορά θα περιλαμβάνει βασικές μετρήσεις για όλες τις ιστοσελίδες που έχουν τουλάχιστον μια επίσκεψη (από τις συνολικά %s διαθέσιμες ιστοσελίδες).",
"ReportSent": "Η αναφορά στάλθηκε.",
"ReportsIncluded": "Συμπερίληψη στατιστικών",
"ReportType": "Αποστολή αναφοράς μέσω",
diff --git a/plugins/ScheduledReports/lang/sr.json b/plugins/ScheduledReports/lang/sr.json
index fa1aed49c6..a3fe0da785 100644
--- a/plugins/ScheduledReports/lang/sr.json
+++ b/plugins/ScheduledReports/lang/sr.json
@@ -23,6 +23,7 @@
"NoRecipients": "Nije definisan primaoc",
"Pagination": "Strana %1$s od %2$s",
"PiwikReports": "Piwik izveštaji",
+ "PleaseFindAttachedFile": "u prilogu se nalazi vaš %1$s izveštaj za %2$s.",
"SentFromX": "Poslato od strane %s.",
"PleaseFindBelow": "u nastavku je vaš %1$s izveštaj za %2$s.",
"PluginDescription": "Kreirajte sopstvene izveštaje i zakažite njihovo slanje putem elektronske pošte dnevno, nedeljno ili mesečno jednoj ili više osoba. Više različitih formata je podržano (HTML, PDF, CSV, slike).",
diff --git a/plugins/ScheduledReports/lang/zh-cn.json b/plugins/ScheduledReports/lang/zh-cn.json
index fba6412940..4d31657e09 100644
--- a/plugins/ScheduledReports/lang/zh-cn.json
+++ b/plugins/ScheduledReports/lang/zh-cn.json
@@ -1,5 +1,6 @@
{
"ScheduledReports": {
+ "AggregateReportsFormat": "显示选项",
"AggregateReportsFormat_GraphsOnly": "仅显示图形 (不显示报表)",
"AggregateReportsFormat_TablesAndGraphs": "显示报表和所有图表",
"AggregateReportsFormat_TablesOnly": "(默认) 显示报表 (图形仅显示关键指标)",
@@ -22,11 +23,13 @@
"NoRecipients": "这个报表没有收件人",
"Pagination": "第 %1$s 页,共 %2$s 页",
"PiwikReports": "Piwik 报表",
+ "PleaseFindAttachedFile": "请在附件中查找%2$s的报告%1$s。",
"SentFromX": "来自%s发送。",
"PleaseFindBelow": "下面是您的 %2$s 的 %1$s 报表。",
"PluginDescription": "创建自定义报告,并安排他们每天通过电子邮件发送,每周或每月一个或几个人。一些报告格式支持(HTML,PDF,CSV,图像)。",
"ReportFormat": "报表格式",
"ReportHour": "发送报告在 %s 点的时候",
+ "ReportHourWithUTC": "%s点UTC",
"ReportIncludeNWebsites": "本报表包括至少有一次访问(来自当前的 %s 个网站)的所有网站的主要指标。",
"ReportSent": "报表已发出",
"ReportsIncluded": "包括统计",
@@ -39,7 +42,7 @@
"SendReportTo": "报表收件人",
"SentToMe": "寄给我",
"TableOfContent": "报表列表",
- "ThereIsNoReportToManage": "%s没有报表",
+ "ThereIsNoReportToManage": "网站%s没有报表",
"TopLinkTooltip": "创建报表邮件让 Piwik 自动将统计资料发到您或者客户的邮箱中!",
"TopOfReport": "回到顶部",
"UpdateReport": "更新报表",
diff --git a/plugins/SecurityInfo b/plugins/SecurityInfo
-Subproject f5a7263d7cf4af4b5b4baf6f3e0225217a5ae87
+Subproject 542b79de9671169b3833769b6498de44fd748fb
diff --git a/plugins/SegmentEditor/SegmentEditor.php b/plugins/SegmentEditor/SegmentEditor.php
index f3ea172a54..63cee53c30 100644
--- a/plugins/SegmentEditor/SegmentEditor.php
+++ b/plugins/SegmentEditor/SegmentEditor.php
@@ -9,7 +9,9 @@
namespace Piwik\Plugins\SegmentEditor;
use Piwik\Config;
-use Piwik\Db;
+use Piwik\Container\StaticContainer;
+use Piwik\Piwik;
+use Piwik\Plugins\CoreHome\SystemSummary;
/**
*/
@@ -26,10 +28,19 @@ class SegmentEditor extends \Piwik\Plugin
'AssetManager.getJavaScriptFiles' => 'getJsFiles',
'AssetManager.getStylesheetFiles' => 'getStylesheetFiles',
'Template.nextToCalendar' => 'getSegmentEditorHtml',
+ 'System.addSystemSummaryItems' => 'addSystemSummaryItems',
'Translate.getClientSideTranslationKeys' => 'getClientSideTranslationKeys',
);
}
+ public function addSystemSummaryItems(&$systemSummary)
+ {
+ $storedSegments = StaticContainer::get('Piwik\Plugins\SegmentEditor\Services\StoredSegmentService');
+ $segments = $storedSegments->getAllSegmentsAndIgnoreVisibility();
+ $numSegments = count($segments);
+ $systemSummary[] = new SystemSummary\Item($key = 'segments', Piwik::translate('CoreHome_SystemSummaryNSegments', $numSegments), $value = null, $url = null, $icon = 'icon-segment', $order = 6);
+ }
+
function getSegmentEditorHtml(&$out)
{
$selector = new SegmentSelectorControl();
diff --git a/plugins/SitesManager/Controller.php b/plugins/SitesManager/Controller.php
index b488c39d89..91744e84b2 100644
--- a/plugins/SitesManager/Controller.php
+++ b/plugins/SitesManager/Controller.php
@@ -13,6 +13,7 @@ use Piwik\API\ResponseBuilder;
use Piwik\Common;
use Piwik\Exception\UnexpectedWebsiteFoundException;
use Piwik\Piwik;
+use Piwik\Session;
use Piwik\Settings\Measurable\MeasurableSettings;
use Piwik\SettingsPiwik;
use Piwik\Site;
@@ -130,6 +131,18 @@ class Controller extends \Piwik\Plugin\ControllerAdmin
return file_get_contents($path . $filename);
}
+ public function ignoreNoDataMessage()
+ {
+ Piwik::checkUserHasSomeViewAccess();
+
+ $session = new Session\SessionNamespace('siteWithoutData');
+ $session->ignoreMessage = true;
+ $session->setExpirationSeconds($oneHour = 60 * 60);
+
+ $url = Url::getCurrentUrlWithoutQueryString() . Url::getCurrentQueryStringWithParametersModified(array('module' => 'CoreHome', 'action' => 'index'));
+ Url::redirectToUrl($url);
+ }
+
public function siteWithoutData()
{
$javascriptGenerator = new TrackerCodeGenerator();
diff --git a/plugins/SitesManager/SitesManager.php b/plugins/SitesManager/SitesManager.php
index 514f0f426d..a588191901 100644
--- a/plugins/SitesManager/SitesManager.php
+++ b/plugins/SitesManager/SitesManager.php
@@ -8,15 +8,16 @@
*/
namespace Piwik\Plugins\SitesManager;
+use Piwik\API\Request;
use Piwik\Common;
-use Piwik\Archive\ArchiveInvalidator;
use Piwik\Container\StaticContainer;
-use Piwik\Db;
+use Piwik\Piwik;
+use Piwik\Plugins\CoreHome\SystemSummary;
use Piwik\Plugins\PrivacyManager\PrivacyManager;
-use Piwik\Measurable\Settings\Storage;
use Piwik\Settings\Storage\Backend\MeasurableSettingsTable;
use Piwik\Tracker\Cache;
use Piwik\Tracker\Model as TrackerModel;
+use Piwik\Session\SessionNamespace;
/**
*
@@ -28,7 +29,7 @@ class SitesManager extends \Piwik\Plugin
const KEEP_URL_FRAGMENT_NO = 2;
/**
- * @see Piwik\Plugin::registerEvents
+ * @see \Piwik\Plugin::registerEvents
*/
public function registerEvents()
{
@@ -38,10 +39,18 @@ class SitesManager extends \Piwik\Plugin
'Tracker.Cache.getSiteAttributes' => 'recordWebsiteDataInCache',
'Translate.getClientSideTranslationKeys' => 'getClientSideTranslationKeys',
'SitesManager.deleteSite.end' => 'onSiteDeleted',
+ 'System.addSystemSummaryItems' => 'addSystemSummaryItems',
'Request.dispatch' => 'redirectDashboardToWelcomePage',
);
}
+ public function addSystemSummaryItems(&$systemSummary)
+ {
+ $websites = Request::processRequest('SitesManager.getAllSites', array('filter_limit' => '-1'));
+ $numWebsites = count($websites);
+ $systemSummary[] = new SystemSummary\Item($key = 'websites', Piwik::translate('CoreHome_SystemSummaryNWebsites', $numWebsites), $value = null, $url = array('module' => 'SitesManager', 'action' => 'index'), $icon = '', $order = 10);
+ }
+
public function redirectDashboardToWelcomePage(&$module, &$action)
{
if ($module !== 'CoreHome' || $action !== 'index') {
@@ -61,6 +70,11 @@ class SitesManager extends \Piwik\Plugin
$trackerModel = new TrackerModel();
if ($trackerModel->isSiteEmpty($siteId)) {
+ $session = new SessionNamespace('siteWithoutData');
+ if (!empty($session->ignoreMessage)) {
+ return;
+ }
+
$module = 'SitesManager';
$action = 'siteWithoutData';
}
diff --git a/plugins/SitesManager/lang/cs.json b/plugins/SitesManager/lang/cs.json
index 49aa48194f..bce7ce8a1b 100644
--- a/plugins/SitesManager/lang/cs.json
+++ b/plugins/SitesManager/lang/cs.json
@@ -44,8 +44,12 @@
"ListOfIpsToBeExcludedOnAllWebsites": "IP adresy uvedené níže budou vynechány ze záznamu pro všechny weby.",
"ListOfQueryParametersToBeExcludedOnAllWebsites": "URL parametry uvedené níže budou vynechány z URL pro všechny www adresy",
"ListOfQueryParametersToExclude": "Vložte seznam url parametrů dotazu, každý na samostatném řádku, které mají být vyloučeny z hlášení URL. Regulární výrazy, jako třeba %s, jsou podporovány.",
+ "LogAnalytics": "Analitiky protokolu",
+ "LogAnalyticsDescription": "Pokud nelze použít javascriptovou sledovací metodu, můžete místo toho použít %1$sanalitiku protokolu%2$s jako alternativní způsob sledování vašich uživatelů.",
"MainDescription": "Vaše analýzy webu potřebují Web! Přidejte, aktualizujte, nebo vymažte je a zobrazte si JavaScriptový kód pro vložení do vaších stránek.",
"MenuManage": "Spravovat",
+ "MobileAppsAndSDKs": "Mobilní aplikace a SDK",
+ "MobileAppsAndSDKsDescription": "Nesledujete webovou stránku? Jinak můžete sledovat mobilní aplikaci, nebo akýkoliv jiný typ aplikace s použitím jednoho z našich %1$smobilních SDK%2$s.",
"NotAnEcommerceSite": "Žádná stránka obchodu",
"NotFound": "Žádné www nenalezený pro",
"NoWebsites": "Nemáte žádný Weby k administraci.",
@@ -69,7 +73,9 @@
"SiteSearchUse": "Piwik můžete použít ke sledování a hlášení toho, co návštěvníci hledají pomocí interního vyhledávače.",
"SiteWithoutDataTitle": "Zatím nebyla zaznamenána žádná data",
"SiteWithoutDataDescription": "Pro tuto stránku nebyla zatím zaznamenána žádná analytická data.",
+ "SiteWithoutDataSetupTracking": "Prosím, nastavte %1$ssledovací kód%2$s uvedený níže na vašich stránkách nebo v mobilní aplikaci, pokud jste to ješště neudělali.",
"SiteWithoutDataMessageDisappears": "Tato zpráva zmizí jakmile dojde k nahrání nějakých dat pro tento web.",
+ "SiteWithoutDataSetupGoals": "Mezitím byste možná chtěl(a) %1$snastavit nějaké cíle%2$s, nebo se něco dozvědět o %3$sfunkcích%4$s Piwiku v některém z našich %5$snávodů%6$s, nebo %7$sFAQ%8$s.",
"SuperUserAccessCan": "Uživatel se super-uživatelským přístupem může také %1$sspecifikovat globální nastavení%2$s pro nové weby.",
"Timezone": "Časová zóna",
"TrackingSiteSearch": "Sledování interního vyhledávání na stránkách",
diff --git a/plugins/SitesManager/lang/de.json b/plugins/SitesManager/lang/de.json
index 2cf854456e..39f17b1d9f 100644
--- a/plugins/SitesManager/lang/de.json
+++ b/plugins/SitesManager/lang/de.json
@@ -45,9 +45,11 @@
"ListOfQueryParametersToBeExcludedOnAllWebsites": "Die untenstehenden GET-Parameter werden von allen URLs aller Websites ignoriert.",
"ListOfQueryParametersToExclude": "Geben Sie die Liste der URL Query Parameter an, einen pro Zeile, um sie von der URL Berichtsseite auszuschliessen. Reguläre Ausdrücke so wie %s werden unterstützt.",
"LogAnalytics": "Log-Analyse",
+ "LogAnalyticsDescription": "Wenn das Tracking per Javascript nicht möglich ist, können Sie %1$sServer Log Anayltics %2$s als Alternative Method einsetzen, um die Besucher Ihrer Webseite zu analysieren.",
"MainDescription": "Ihre Webanalyse benötigt Websites! Websites können hinzugefügt, aktualisiert und gelöscht werden. Hier wird auch der JavaScript-Code gezeigt, der in Ihre Websites eingefügt werden muss.",
"MenuManage": "Verwalten",
"MobileAppsAndSDKs": "Mobile Anwendungen und SDKs",
+ "MobileAppsAndSDKsDescription": "Nicht am tracken einer Webseite? Sie können alternativ eine der %1$sverfügbaren SDKs%2$s nützen, um eine mobile App oder eine andere Art Applikation überwachen.",
"NotAnEcommerceSite": "Dies ist keine Ecommerce Seite",
"NotFound": "Keine Websites gefunden für",
"NoWebsites": "Es ist noch keine Website zum administrieren vorhanden.",
@@ -73,6 +75,7 @@
"SiteWithoutDataDescription": "Für diese Website wurden bisher noch keine Analysedaten aufgezeichnet.",
"SiteWithoutDataSetupTracking": "Bitte fügen Sie den folgenden %1$sTracking Code%2$s auf ihrer Website ein, insofern Sie dies noch nicht getan haben.",
"SiteWithoutDataMessageDisappears": "Diese Nachricht wird verschwinden sobald die ersten Daten für diese Website aufgezeichnet wurden.",
+ "SiteWithoutDataSetupGoals": "Währenddessen möchten Sie möglicherweise %1$sZiele definieren%2$s oder mehr über die %3$sFunktionen%4$s von Piwik in einem unserer %5$sAnleitungen%6$s oder %7$sFAQs%8$s erfahren.",
"SuperUserAccessCan": "Ein Nutzer mit Hauptadministrator-Berechtigung kann ebenfalls %1$sglobale Einstellungen%2$s für neue Websites vornehmen.",
"Timezone": "Zeitzone",
"TrackingSiteSearch": "Die interne Suche auswerten",
diff --git a/plugins/SitesManager/lang/en.json b/plugins/SitesManager/lang/en.json
index 1375674e1c..c4925ed7f1 100644
--- a/plugins/SitesManager/lang/en.json
+++ b/plugins/SitesManager/lang/en.json
@@ -76,6 +76,7 @@
"SiteWithoutDataSetupTracking": "Please set up the %1$stracking code%2$s below into your website or mobile app if you haven't done already.",
"SiteWithoutDataMessageDisappears": "This message will disappear as soon as some data was tracked for this website.",
"SiteWithoutDataSetupGoals": "In the meantime, maybe you would like to %1$sset up some goals%2$s or learn more about the %3$sfeatures%4$s of Piwik in one of our %5$sguides%6$s or %7$sFAQs%8$s.",
+ "SiteWithoutDataIgnoreMessage": "Don't show this message for the next hour",
"SuperUserAccessCan": "A user with Super User access can also %1$s specify global settings%2$s for new websites.",
"Timezone": "Time zone",
"TrackingSiteSearch": "Tracking Internal Site Search",
@@ -92,4 +93,4 @@
"YouCurrentlyHaveAccessToNWebsites": "You currently have access to %s websites.",
"YourCurrentIpAddressIs": "Your current IP address is %s"
}
-} \ No newline at end of file
+}
diff --git a/plugins/SitesManager/lang/es.json b/plugins/SitesManager/lang/es.json
index a3876f7c29..9872796667 100644
--- a/plugins/SitesManager/lang/es.json
+++ b/plugins/SitesManager/lang/es.json
@@ -44,8 +44,12 @@
"ListOfIpsToBeExcludedOnAllWebsites": "Las IPs a continuación quedarán excluidas de ser rastreadas en todos los sitios de internet.",
"ListOfQueryParametersToBeExcludedOnAllWebsites": "Los parámetros de consulta URL a continuación serán excluidos de las URLs de todos los sitios de internet.",
"ListOfQueryParametersToExclude": "Introduce la lista de parámetros del \"QueryString\" de la URL, uno por línea, para excluirlos de los reportes de URLs de página. Se soportan expresiones regulares como %s.",
+ "LogAnalytics": "Análisis de ficheros históricos",
+ "LogAnalyticsDescription": "Si el método de seguimiento por javascript no es factible, puedes %1$susar el análisis de los ficheros históricos del servidor%2$s",
"MainDescription": "¡Su informe de análisis necesita sitios de internet! Agregue, actualice, elimine sitios y muestre el código JavaScript a insertar en sus páginas.",
"MenuManage": "Administrar",
+ "MobileAppsAndSDKs": "Apps y SDKs para móviles",
+ "MobileAppsAndSDKsDescription": "¿No estás realizando el seguimiento de un sitio web? Usando uno de los %1$sSDKs disponibles%2$s, también puedes realizar el seguimiento de apps para móvil o, en genral, de cualquier otro tipo de aplicación.",
"NotAnEcommerceSite": "No es un sitio de comercio electrónico",
"NotFound": "Ningún sitio de internet encontrado",
"NoWebsites": "No posee ningún sitio de internet para administrar.",
@@ -69,7 +73,9 @@
"SiteSearchUse": "Puede utilizar Piwik para rastrear y obtener un informe que es lo que están buscando sus visitantes en el motor de búsqueda interno de su sitio de internet.",
"SiteWithoutDataTitle": "Aun no se han grabado datos",
"SiteWithoutDataDescription": "Aun no se han registrado datos analíticos para este sitio de internet.",
+ "SiteWithoutDataSetupTracking": "Si no lo has hecho ya, por favor, configura el %1$scódigo de seguimiento%2$s de abajo en tu sitio web o app para móvil.",
"SiteWithoutDataMessageDisappears": "Este mensaje desaparecerá tan pronto como algún dato sea rastreado en este sitio de internet.",
+ "SiteWithoutDataSetupGoals": "Mientras tanto, puede que te gustase %1$sconfigurar algunos objetivos%2$s o aprender más acerca de las %3$scapacidades%4$s del sistema leyendo alguna de nuestras %5$sguías%6$s or %7$sFAQs%8$s",
"SuperUserAccessCan": "Un usuario con acceso Super Usuario también puede %1$s especificar la configuración global%2$s para nuevos sitios web.",
"Timezone": "Zona Horaria",
"TrackingSiteSearch": "Seguimiento en el Buscador interno del sitio",
diff --git a/plugins/SitesManager/lang/fr.json b/plugins/SitesManager/lang/fr.json
index fba6d2784c..01a5d453f6 100644
--- a/plugins/SitesManager/lang/fr.json
+++ b/plugins/SitesManager/lang/fr.json
@@ -44,9 +44,12 @@
"ListOfIpsToBeExcludedOnAllWebsites": "Les adresses IP ci-dessous seront exclues des statistiques sur tous les sites web.",
"ListOfQueryParametersToBeExcludedOnAllWebsites": "Les paramètres ci-dessous seront exclus des statistiques de tous les sites web.",
"ListOfQueryParametersToExclude": "Entrez la liste de vos paramètres d'URL à exclure des rapports d'URL de page, un par ligne. Les expressions régulières comme %s sont supportées.",
+ "LogAnalytics": "Analyse des logs",
+ "LogAnalyticsDescription": "S'il n'est pas possible d'utiliser le code de suivit JavaScript, vous pouvez utiliser %1$sl'analyse des logs serveur%2$s comme solution alternative pour suivre les utilisateurs de vos sites web.",
"MainDescription": "Piwik a besoin de sites pour générer des rapports ! Ajoutez, éditez et supprimez des sites, et voyez le code JavaScript à inclure dans vos pages.",
"MenuManage": "Gérer",
"MobileAppsAndSDKs": "Applications mobiles et SDKs",
+ "MobileAppsAndSDKsDescription": "Vous ne travaillez pas sur un site web? vous pouvez aussi suivre une app mobile ou n'importe quel autre type d'application en utilisant les %1$sSDK disponibles%2$s.",
"NotAnEcommerceSite": "N'est pas un site d'e-commerce",
"NotFound": "Aucun site trouvé pour",
"NoWebsites": "Vous n'avez aucun site Internet à administrer.",
@@ -70,7 +73,9 @@
"SiteSearchUse": "Vous pouvez utiliser Piwik pour suivre et effectuer un rapport sur ce que vos visiteurs cherchent sur le moteur de recherche interne de votre site web.",
"SiteWithoutDataTitle": "Aucune donnée enregistrée pour le moment",
"SiteWithoutDataDescription": "Aucune donnée d'analyse n'a été enregistrée pour ce site pour le moment.",
+ "SiteWithoutDataSetupTracking": "Veuillez configurer le %1$scode de suivvit%2$s ci-dessous sur votre site web ou application si vous ne l'avez pas déjà fait.",
"SiteWithoutDataMessageDisappears": "Ce message disparaitra dès lors que certaines données auront été enregistrées pour ce site web.",
+ "SiteWithoutDataSetupGoals": "Pendant ce temps, vous seriez peut-être intéressé (e) à %1$sconfigurer des objectifs%2$s ou en apprendre plus à propos des %3$sfonctionnalités%4$s de Piwik en utilisant l'un de nos %5$sguides%6$s ou %7$sFAQ%8$s.",
"SuperUserAccessCan": "Un utilisateur avec un accès super utilisateur peut aussi %1$sconfigurer les paramètres globaux%2$s pour les nouveaux sites web.",
"Timezone": "Fuseau horaire",
"TrackingSiteSearch": "Suivi de la recherche interne sur le site",
diff --git a/plugins/SitesManager/lang/sr.json b/plugins/SitesManager/lang/sr.json
index 07bf1d1ffe..6c281258f1 100644
--- a/plugins/SitesManager/lang/sr.json
+++ b/plugins/SitesManager/lang/sr.json
@@ -43,8 +43,13 @@
"KeepURLFragmentsLong": "Zadrži URL fragmente prilikom praćenja",
"ListOfIpsToBeExcludedOnAllWebsites": "Sledeće IP adrese će biti izuzete iz praćenja na svim sajtovima.",
"ListOfQueryParametersToBeExcludedOnAllWebsites": "Sledeći parametri će biti izuzeti iz praćenja na svim sajtovima.",
+ "ListOfQueryParametersToExclude": "Navedite listu parametara, jedan po liniji, koje treba izuzeti iz izveštaja. Dozvoljeni su regularni izrazi poput %s.",
+ "LogAnalytics": "Analiza zapisa",
+ "LogAnalyticsDescription": "Ukoliko praćenje pomoću javaskripta nije moguće, možete %1$skoristiti analizu serverskih zapisa%2$s kao alternativnu metodu praćenja posetilaca vašeg sajta.",
"MainDescription": "Potrebni su vam sajtovi da biste mogli da pratite izveštaje. Dodajte, izmenite ili uklonite sajtove, pogledajte JavaScript kod koji je potrebno postaviti na vaše stranice.",
"MenuManage": "Upravljanje",
+ "MobileAppsAndSDKs": "Mobilne aplikacije i SDK-ovi",
+ "MobileAppsAndSDKsDescription": "Ne pratite sajt? Možete da pratite mobilnu aplikaciju ili bilo koji drugi tip aplikacije korišćenjem nekog od %1$sraspoloživih SDK-ova%2$s.",
"NotAnEcommerceSite": "Nije sajt za elektronske porudžbine",
"NotFound": "Nije nađen nijedan sajt za",
"NoWebsites": "Nemate nijedan sajt",
@@ -68,7 +73,9 @@
"SiteSearchUse": "Možete koristiti Piwik za praćenje i kreiranje izveštaja o tome šta posetioci traže na vašem sajtu koristeći polje za pretragu.",
"SiteWithoutDataTitle": "Nikakvi podaci do sad nisu zabeleženi",
"SiteWithoutDataDescription": "Još uvek nema analitičkih podataka za ova sajt.",
+ "SiteWithoutDataSetupTracking": "Molimo vas da postavite sledeći %1$skod za praćenje%2$s na vaš sajt ili mobilnu aplikaciju ukoliko to već niste učinili.",
"SiteWithoutDataMessageDisappears": "Ova poruka će nestati čim se zabeleži neki saobraćaj na sajtu.",
+ "SiteWithoutDataSetupGoals": "U međuvremenu, možda želite da %1$spostavite neke ciljeve%2$s ili da naučite više o %3$sPiwik mogućnostima%4$s u jednom od naših %5$suputstava%6$s ili %7$supitnika%8$s.",
"SuperUserAccessCan": "Korisnik sa superkorisničkim nivoom pristupa može i da %1$spostavi globalna podešavanja%2$s za nove sajtove.",
"Timezone": "Vremenska zona",
"TrackingSiteSearch": "Praćenje pretraživanja sajta",
diff --git a/plugins/SitesManager/lang/zh-cn.json b/plugins/SitesManager/lang/zh-cn.json
index ad4b26e642..1c338cf82d 100644
--- a/plugins/SitesManager/lang/zh-cn.json
+++ b/plugins/SitesManager/lang/zh-cn.json
@@ -1,6 +1,7 @@
{
"SitesManager": {
"AddSite": "增加一个新网站",
+ "AddMeasurable": "增加一个新评价指标",
"AdvancedTimezoneSupportNotFound": "在您的 PHP 找不到高级时区支持功能(PHP>=5.2 支持),您还是可以手动选择 UTC 时差。",
"AliasUrlHelp": "这是建议,但不是必须,定义一些您的访客进入此网站时可能的网址,一行一个。网站的网址別名将不会显示在 来源分析 > 网站报表里。注意 Piwik 能兼容包含及不包含 'www' 的网址。",
"ChangingYourTimezoneWillOnlyAffectDataForward": "变更时区仅会影响新的数据,不会溯及既往。",
@@ -32,6 +33,7 @@
"GlobalListExcludedQueryParameters": "全局排除的参数列表",
"GlobalListExcludedUserAgents": "要排除的用户代理的全局列表",
"GlobalListExcludedUserAgents_Desc": "如果访客的用户代理字串包含指定的字符,访问将不被 Piwik 统计。",
+ "GlobalSettings": "全局设置",
"GlobalWebsitesSettings": "全局参数",
"HelpExcludedIps": "输入IP列表,一行一个,使 Piwik 不跟踪特定IP位址。您也可以使用通配符, 例如 %1$s 或 %2$s",
"JsTrackingTagHelp": "这是要加入所有网页的 JavaScript 跟踪代码",
@@ -41,13 +43,19 @@
"KeepURLFragmentsLong": "跟踪网址时保留网址标签",
"ListOfIpsToBeExcludedOnAllWebsites": "以下的IP地址将被排除在所有网站统计外。",
"ListOfQueryParametersToBeExcludedOnAllWebsites": "以下的网址查询参数将会被所有网站忽略。",
+ "ListOfQueryParametersToExclude": "请输入URL查询参数的列表,一行一个,这些URL将被排除在页面报告之外。像%s的正则表达式也是支持的。",
+ "LogAnalytics": "日志分析",
"MainDescription": "使用网站分析报表功能,必须有网站!在这里添加、修改、删除网站,或者显示需要加入页面代码里的 Javascript 跟踪代码。",
+ "MenuManage": "管理",
+ "MobileAppsAndSDKs": "移动app和SDK",
+ "MobileAppsAndSDKsDescription": "没有跟踪的站点?你也可以使用%1$s可用的SDKs%2$s,跟踪移动app或者任何类型的应用。",
"NotAnEcommerceSite": "非商业网站",
"NotFound": "找不到网站",
"NoWebsites": "您没有任何网站可管理!",
"OnlyOneSiteAtTime": "每次只能修改一个网站,请保持或取消当前对网站 %s 的修改。",
"PiwikOffersEcommerceAnalytics": "Piwik 可以使用高级电商分析和报表,了解更多的 %1$s 电商分析%2$s。",
"PiwikWillAutomaticallyExcludeCommonSessionParameters": "Piwik 会自动排除常见的会话参数(%s)",
+ "PluginDescription": "站点管理可以让你增加一个站点或者编辑一个已有的站点。",
"SearchCategoryDesc": "Piwik 也可以统计每个站内搜索关键字的搜索分类。",
"SearchCategoryLabel": "分类参数",
"SearchCategoryParametersDesc": "输入用逗号分开的搜索参数列表来指定搜索分类。",
@@ -62,12 +70,17 @@
"ShowTrackingTag": "显示跟踪代码",
"Sites": "网站",
"SiteSearchUse": "可以用 Piwik 跟踪统计访客站内搜索的内容。",
+ "SiteWithoutDataTitle": "尚未有记录数据。",
+ "SiteWithoutDataDescription": "这个站点没有跟踪到分析数据。",
"Timezone": "时区",
"TrackingSiteSearch": "跟踪站内搜索",
"TrackingTags": "%s 的跟踪代码",
"Urls": "网址",
+ "Type": "类型",
"UTCTimeIs": "UTC 时间是 %s.",
"WebsitesManagement": "网站管理",
+ "XManagement": "管理%s",
+ "ChooseMeasurableTypeHeadline": "你想衡量什么?",
"YouCurrentlyHaveAccessToNWebsites": "您现在可以访问 %s 个网站。",
"YourCurrentIpAddressIs": "您的IP位址是 %s"
}
diff --git a/plugins/SitesManager/templates/siteWithoutData.twig b/plugins/SitesManager/templates/siteWithoutData.twig
index bf0db36a39..a767fb3c04 100644
--- a/plugins/SitesManager/templates/siteWithoutData.twig
+++ b/plugins/SitesManager/templates/siteWithoutData.twig
@@ -45,6 +45,11 @@
'<a href="https://piwik.org/features/" rel="noreferrer" target="_blank">', "</a>",
'<a href="https://piwik.org/docs/" rel="noreferrer" target="_blank">', "</a>",
'<a href="https://piwik.org/faq/" rel="noreferrer" target="_blank">', "</a>")|raw }}
+
+ <br />
+ <br />
+ <a href="{{ linkTo({module: 'SitesManager', action: 'ignoreNoDataMessage'}) }}"
+ class="btn ignoreSitesWithoutData">{{ 'SitesManager_SiteWithoutDataIgnoreMessage'|translate }}</a>
</p>
{{ trackingHelp|raw }}
diff --git a/plugins/TasksTimetable b/plugins/TasksTimetable
-Subproject 5168b3011904cfe379166ccdd1a8ab550f5c023
+Subproject eb4d9e1bb420277d980c2f87b37e0defc4b0013
diff --git a/plugins/Transitions/lang/zh-cn.json b/plugins/Transitions/lang/zh-cn.json
index a0aa96af78..d2cf543a08 100644
--- a/plugins/Transitions/lang/zh-cn.json
+++ b/plugins/Transitions/lang/zh-cn.json
@@ -4,6 +4,9 @@
"DirectEntries": "直接输入",
"ErrorBack": "返回上次的活动",
"ExitsInline": "%s 次退出",
+ "NumPageviews": "%s PV",
+ "NumDownloads": "%s 下载",
+ "NumOutlinks": "%s 外链",
"FromCampaigns": "来自广告",
"FromPreviousPages": "来自内部页面",
"FromPreviousPagesInline": "%s 次来自站内页面",
diff --git a/plugins/TreemapVisualization b/plugins/TreemapVisualization
-Subproject 5dca6c69cc1dcd002518846afe181b591485438
+Subproject 3829d21e14b82f4b36a4eb548bf7a7e65f64df1
diff --git a/plugins/UserCountry/lang/zh-cn.json b/plugins/UserCountry/lang/zh-cn.json
index 40d10f2c7f..92aa3fc4c6 100644
--- a/plugins/UserCountry/lang/zh-cn.json
+++ b/plugins/UserCountry/lang/zh-cn.json
@@ -10,13 +10,13 @@
"CannotUnzipDatFile": "无法解压缩文件%1$s中的%2$s",
"City": "城市",
"CityAndCountry": "%1$s, %2$s",
- "Continent": "世界地图",
+ "Continent": "大洲",
"Country": "国家",
"country_a1": "匿名代理",
- "country_a2": "卫星网络",
+ "country_a2": "卫星供应商",
"country_cat": "加泰罗尼亚语社区",
"country_o1": "其它国家",
- "country_ti": "中国",
+ "country_ti": "中国西藏",
"CurrentLocationIntro": "根据提供商信息,您现在的位置是",
"DefaultLocationProviderDesc1": "默认的地理位置查询以访客的浏览器猜测国家。",
"DefaultLocationProviderDesc2": "这不是很准确,所以 %1$s我们建议安装使用 %2$sGeoIP%3$s.%4$s",
@@ -38,7 +38,7 @@
"GeoIpLocationProviderDesc_Php2": "如果您的网站流量很大,这个服务速度会很慢。如果这样,您最好安装 %1$sPECL 扩展%2$s 或者 %3$s服务器模块%4$s。",
"GeoIpLocationProviderDesc_ServerBased1": "本地理位置服务商使用已经安装在 HTTP 服务器上的 GeoIP 模块。本服务商速度快也更精确,但是 %1$s只能使用一般的浏览器跟踪。%2$s",
"GeoIpLocationProviderDesc_ServerBased2": "如果您需要导入日志文件,或者需要设置 IP 地址的操作,使用 %1$sPECL GeoIP 方案 (推荐)%2$s 或者 %3$sPHP GeoIP 方案%4$s。",
- "GeoIpLocationProviderDesc_ServerBasedAnonWarn": "提示: IP 屏蔽对这个服务商的报表无效。在使用它和 IP 屏蔽前,请确认这不违反您当地的隐私保护法规。",
+ "GeoIpLocationProviderDesc_ServerBasedAnonWarn": "提示:IP 屏蔽对这个服务商的报表无效。在使用它和 IP 屏蔽前,请确认这不违反您当地的隐私保护法规。",
"GeoIpLocationProviderNotRecomnended": "地理位置的工作,但你不使用推荐的供应商之一。",
"GeoIPNoServerVars": "Piwik 没有找到 GeoIP %s 变量。",
"GeoIPPeclCustomDirNotSet": "%s PHP ini 选项没有设置。",
@@ -52,13 +52,13 @@
"getContinentDocumentation": "本报表显示访客所在的洲。",
"getCountryDocumentation": "本报表显示访客所在的国家。",
"getRegionDocumentation": "本报表显示访客所在的地区。",
- "HowToInstallApacheModule": "我如何在apache中安装GoeIP模块?",
+ "HowToInstallApacheModule": "我如何在Apache中安装GoeIP模块?",
"HowToInstallGeoIPDatabases": "我如何可以获取GeoIP数据库?",
"HowToInstallGeoIpPecl": "我如何安装GeoIP PECL扩展?",
"HowToInstallNginxModule": "我如何在Nginx下安装GeoIP模块?",
"HowToSetupGeoIP": "如何用GeoIP设置准确的位置信息",
"HowToSetupGeoIP_Step1": "%1$s下载%2$s GeoLite 城市数据库自 %3$sMaxMind%4$s。",
- "HowToSetupGeoIP_Step2": "展开文件并复制结果, %1$s 到 %2$smisc%3$s Piwik 子目录 (可以通过 FTP 或 SSH)。",
+ "HowToSetupGeoIP_Step2": "提取文件并复制结果, %1$s 到 %2$smisc%3$s Piwik 子目录 (可以通过 FTP 或 SSH)。",
"HowToSetupGeoIP_Step3": "刷新屏幕,%1$sGeoIP (PHP)%2$s 服务商现在将被 %3$s安装%4$s。请选择。",
"HowToSetupGeoIP_Step4": "成功了! 您已经成功安装 Piwik 使用 GeoIP,现在能看到访客的地区和城市,以及非常精确的国家信息。",
"HowToSetupGeoIPIntro": "您的地理位置设置不正确,这个功能很有用,否则您无法查看访客的精确和完整的位置信息。如何快速开始使用:",
@@ -66,7 +66,7 @@
"InvalidGeoIPUpdatePeriod": "GeoIP 更新时间段不正确: %1$s. 正确的值为 %2$s。",
"IPurchasedGeoIPDBs": "我购买了更多的 %1$s精确数据库自 MaxMind%2$s,需要设置自动更新。",
"ISPDatabase": "ISP 数据库",
- "IWantToDownloadFreeGeoIP": "我想下载免费的 GeoIP 数据库...",
+ "IWantToDownloadFreeGeoIP": "我想下载免费的GeoIP数据库...",
"Latitude": "纬度",
"Location": "位置",
"LocationDatabase": "位置信息数据库",
@@ -87,12 +87,15 @@
"TestIPLocatorFailed": "Piwik 尝试检查已知 IP 地址的位置 (%1$s),但您的服务器返回 %2$s。如果这个服务商配置正确,将返回 %3$s。",
"ThisUrlIsNotAValidGeoIPDB": "下载文件不是有效的 GeoIP 数据库,请重新检查网址,或者手动下载文件。",
"ToGeolocateOldVisits": "要获得以前访问的地理数据,请使用 %1$s这里%2$s的脚步。",
- "UnsupportedArchiveType": "不支持的文件类型 %1$s。",
+ "UnsupportedArchiveType": "不支持的归档类型 %1$s。",
"UpdaterHasNotBeenRun": "更新程序从未运行。",
"UpdaterIsNotScheduledToRun": "它不计划在将来运行。",
- "UpdaterScheduledForNextRun": "它计划在未来的cron核心在运行:归档命令执行。",
+ "UpdaterScheduledForNextRun": "计划在未来的cron core运行:归档命令执行。",
"UpdaterWasLastRun": "更新程序最后运行时间 %s。",
"UpdaterWillRunNext": "这是下一个计划在 %s 运行。",
"WidgetLocation": "访客位置"
+ },
+ "Intl": {
+ "Country_TI": "中国西藏"
}
} \ No newline at end of file
diff --git a/plugins/UserCountryMap/lang/zh-cn.json b/plugins/UserCountryMap/lang/zh-cn.json
index f56cba379f..ff39a730f6 100644
--- a/plugins/UserCountryMap/lang/zh-cn.json
+++ b/plugins/UserCountryMap/lang/zh-cn.json
@@ -1,5 +1,6 @@
{
"UserCountryMap": {
+ "PluginDescription": "这个插件提供了访客地图和实时地图的小工具。注意:需要激活UserCountry插件。",
"AndNOthers": "和 %s 其它",
"Cities": "城市",
"Countries": "国家",
@@ -17,6 +18,8 @@
"ShowingVisits": "最后访客地理位置",
"Unlocated": "<b>%s<\/b> %p 的访问来自 %c 无法定位地理位置。",
"VisitorMap": "访客地图",
- "WorldWide": "全世界"
+ "WorldWide": "全世界",
+ "WithUnknownRegion": "%s未知区域",
+ "WithUnknownCity": "%s未知城市"
}
} \ No newline at end of file
diff --git a/plugins/UserId/lang/zh-cn.json b/plugins/UserId/lang/zh-cn.json
index b6bdb6f51d..d9cf4b44ce 100644
--- a/plugins/UserId/lang/zh-cn.json
+++ b/plugins/UserId/lang/zh-cn.json
@@ -1,5 +1,7 @@
{
"UserId": {
- "UserReportTitle": "用户管理"
+ "UserId": "用户ID",
+ "UserReportTitle": "用户",
+ "PluginDescription": "显示用户报告"
}
} \ No newline at end of file
diff --git a/plugins/UserLanguage/lang/zh-cn.json b/plugins/UserLanguage/lang/zh-cn.json
index eb70dff1c3..74fd9df128 100644
--- a/plugins/UserLanguage/lang/zh-cn.json
+++ b/plugins/UserLanguage/lang/zh-cn.json
@@ -1,6 +1,7 @@
{
"UserLanguage": {
"BrowserLanguage": "浏览器语言",
- "LanguageCode": "语言代码"
+ "LanguageCode": "语言代码",
+ "PluginDescription": "报告访问者浏览器用的语言"
}
} \ No newline at end of file
diff --git a/plugins/UsersManager/UsersManager.php b/plugins/UsersManager/UsersManager.php
index f22d2b63ed..95620a6182 100644
--- a/plugins/UsersManager/UsersManager.php
+++ b/plugins/UsersManager/UsersManager.php
@@ -9,8 +9,10 @@
namespace Piwik\Plugins\UsersManager;
use Exception;
+use Piwik\API\Request;
use Piwik\Option;
use Piwik\Piwik;
+use Piwik\Plugins\CoreHome\SystemSummary;
use Piwik\SettingsPiwik;
/**
@@ -33,10 +35,23 @@ class UsersManager extends \Piwik\Plugin
'Tracker.Cache.getSiteAttributes' => 'recordAdminUsersInCache',
'Translate.getClientSideTranslationKeys' => 'getClientSideTranslationKeys',
'Platform.initialized' => 'onPlatformInitialized',
+ 'System.addSystemSummaryItems' => 'addSystemSummaryItems',
'CronArchive.getTokenAuth' => 'getCronArchiveTokenAuth'
);
}
+ public function addSystemSummaryItems(&$systemSummary)
+ {
+ $userLogins = Request::processRequest('UsersManager.getUsersLogin', array('filter_limit' => '-1'));
+
+ $numUsers = count($userLogins);
+ if (in_array('anonymous', $userLogins)) {
+ $numUsers--;
+ }
+
+ $systemSummary[] = new SystemSummary\Item($key = 'users', Piwik::translate('General_NUsers', $numUsers), $value = null, array('module' => 'UsersManager', 'action' => 'index'), $icon = 'icon-user', $order = 5);
+ }
+
public function onPlatformInitialized()
{
$lastSeenTimeLogger = new LastSeenTimeLogger();
diff --git a/plugins/UsersManager/angularjs/manage-user-access/manage-user-access.controller.js b/plugins/UsersManager/angularjs/manage-user-access/manage-user-access.controller.js
index 55d2f34b64..4a2a91b09f 100644
--- a/plugins/UsersManager/angularjs/manage-user-access/manage-user-access.controller.js
+++ b/plugins/UsersManager/angularjs/manage-user-access/manage-user-access.controller.js
@@ -43,6 +43,7 @@
};
this.setAccess = function (login, access) {
+ login = String(login);
login=piwik.helper.escape(piwik.helper.htmlEntities(login));
if ( $('[data-login="' + login + '"]').find("#"+access).has('.accessGranted').length ){
return;
diff --git a/plugins/UsersManager/lang/ko.json b/plugins/UsersManager/lang/ko.json
index beea3df602..7437d19729 100644
--- a/plugins/UsersManager/lang/ko.json
+++ b/plugins/UsersManager/lang/ko.json
@@ -55,6 +55,7 @@
"PrivAdmin": "관리자",
"PrivNone": "접근할 수 없음",
"PrivView": "보기",
+ "RemoveUserAccess": "%2$s의 '%1$s' 보기 권한 제거",
"ReportDateToLoadByDefault": "기본 보고서 날짜",
"ReportToLoadByDefault": "기본 보고서",
"SuperUserAccessManagement": "슈퍼 유저 권한 관리",
@@ -62,6 +63,9 @@
"SuperUserAccessManagementMainDescription": "슈퍼 유저는 가장 높은 권한을 가집니다. 그들은 모든 관리 업무를 수행할 수 있습니다. 여기에는 감시할 새로운 웹사이트 추가, 새로운 사용자 추가, 사용자 권한 변경, 플러그인 활성화 및 비활성화, 마켓플레이스에서 새로운 플러그인 설치까지 가능합니다.",
"TheLoginScreen": "로그인 화면",
"ThereAreCurrentlyNRegisteredUsers": "현재 %s명의 사용자가 등록되어 있습니다.",
+ "TokenAuth": "API 인증 토큰",
+ "TokenRegenerateLogoutWarning": "만약 토큰을 재발급받는다면 로그아웃 후 새롭게 로그인 하셔야 합니다.",
+ "TokenRegenerateTitle": "재발급",
"TypeYourPasswordAgain": "새 비밀번호를 다시 입력합니다.",
"User": "사용자",
"UsersManagement": "사용자 관리",
diff --git a/plugins/UsersManager/lang/sr.json b/plugins/UsersManager/lang/sr.json
index 94468e2f70..d65b045f92 100644
--- a/plugins/UsersManager/lang/sr.json
+++ b/plugins/UsersManager/lang/sr.json
@@ -36,6 +36,7 @@
"ExceptionNoValueForUsernameOrEmail": "Molimo vas da upišete korisničko ime ili mejl adresu.",
"ExcludeVisitsViaCookie": "Isključite vaše posete pomoću kolačića",
"ForAnonymousUsersReportDateToLoadByDefault": "Za anonimne korisnike, datum izveštaja koji podrazumevano treba prikazati je:",
+ "GiveUserAccess": "Dodeli '%1$s' %2$s pristup za %3$s.",
"GiveViewAccess": "Dodeli pristup prikaza za %1$s",
"GiveViewAccessTitle": "Dodeli postojećem korisniku pristup prikaza izveštaja za %s",
"GiveViewAccessInstructions": "Ukoliko želite da postojećem korisniku dodelite pristup prikaza za %s, upišite korisničko ime ili mejl adresu tog korisnika",
@@ -55,6 +56,7 @@
"PrivAdmin": "Administracija",
"PrivNone": "Nema pristup",
"PrivView": "Prikaz",
+ "RemoveUserAccess": "Ukloni pristup '%1$s' za %2$s.",
"ReportDateToLoadByDefault": "Datum izveštaja koji podrazumevano treba prikazati",
"ReportToLoadByDefault": "Izveštaj koji podrazumevano treba prikazati",
"SuperUserAccessManagement": "Upravljanje superkorisničkim pristupima",
@@ -62,8 +64,15 @@
"SuperUserAccessManagementMainDescription": "Superkorisnici imaju najviše privilegije. Oni mogu da obavljaju sve administrativne zadatke poput dodavanja novih sajtova, korisnika, promene privilegija korisnika, aktivacije i deaktivacije dodataka kao i instaliranja novih dodataka sa Marketa.",
"TheLoginScreen": "Stranica za prijavu",
"ThereAreCurrentlyNRegisteredUsers": "Trenutno registrovanih korisnika: %s",
+ "TokenAuth": "Token za API autentifikaciju",
+ "TokenRegenerateConfirm": "Promena tokena za API autentifikaciju će učiniti nevažećim trenutne korisničke tokene. Ukoliko je korisnik prijavljen, moraće ponovo da se prijavi. Da li ste sigurni da želite da nastavite?",
+ "TokenRegenerateConfirmSelf": "Promena tokena za API autentifikaciju će učiniti nevažećim vaš token. Moraćete ponovo da se prijavite za nastavak. Da li ste sigurni da želite da promenite vaš token za autentifikaciju?",
+ "TokenRegenerateLogoutWarning": "Kada budete regenerisali vaš token, bićete odjavljeni i moraćete da se prijavite ponovo.",
+ "TokenRegenerateTitle": "Regenerisanje",
"TypeYourPasswordAgain": "Upišite novu lozinku ponovo",
"User": "Korisnik",
+ "UserHasPermission": "%1$s trenutno ima %2$s pristup za %3$s.",
+ "UserHasNoPermission": "%1$s trenutno ima %2$s za %3$s.",
"UsersManagement": "Upravljanje korisnicima",
"UsersManagementMainDescription": "Dodavanje novih i promena postojećih korisničkih naloga, dodeljivanje privilegija.",
"WhenUsersAreNotLoggedInAndVisitPiwikTheyShouldAccess": "Kada korisnik koji nije prijavljen pokuša da otvori Piwik, trebalo bi da se otvori:",
diff --git a/plugins/VisitFrequency/lang/zh-cn.json b/plugins/VisitFrequency/lang/zh-cn.json
index a284130d1e..afa2dcbfb9 100644
--- a/plugins/VisitFrequency/lang/zh-cn.json
+++ b/plugins/VisitFrequency/lang/zh-cn.json
@@ -9,7 +9,8 @@
"ColumnNbReturningVisitsConverted": "老访客的转化次数",
"ColumnReturningVisits": "老访客的访问次数",
"ColumnSumVisitLengthReturning": "老访客总的停留时间 (秒)",
- "ColumnUniqueReturningVisitors": "独立重访客数",
+ "ColumnUniqueReturningVisitors": "独立老访客数",
+ "ColumnReturningUsers": "老访客",
"ReturningVisitDocumentation": "老访客 (相对于新访客) 指至少访问过这个网站一次的访客。",
"ReturningVisitsDocumentation": "这是老访客的总表。",
"SubmenuFrequency": "频率",
diff --git a/plugins/VisitorGenerator b/plugins/VisitorGenerator
-Subproject f24d71ae3e2d99690c1eda968c60a4a5e80af4d
+Subproject 7153a8e4e00a45b8ed190c7aa21ce368cfeb74e
diff --git a/plugins/Widgetize/lang/zh-cn.json b/plugins/Widgetize/lang/zh-cn.json
index ca918a450b..74250edb6b 100644
--- a/plugins/Widgetize/lang/zh-cn.json
+++ b/plugins/Widgetize/lang/zh-cn.json
@@ -1,6 +1,7 @@
{
"Widgetize": {
"OpenInNewWindow": "打开一个新窗口",
- "TopLinkTooltip": "小工具形式导出 Piwik 报表,将面板以 iframe 形式嵌入您的应用程序中。"
+ "PluginDescription": "在你的网站显示Piwik报告或者嵌入HTML标签中在app中显示",
+ "TopLinkTooltip": "小工具形式导出 Piwik 报表,将面板以 iframe 形式嵌入你的app中。"
}
} \ No newline at end of file
diff --git a/tests/PHPUnit/Framework/TestingEnvironmentManipulator.php b/tests/PHPUnit/Framework/TestingEnvironmentManipulator.php
index 1aa1a74de8..59bac60155 100644
--- a/tests/PHPUnit/Framework/TestingEnvironmentManipulator.php
+++ b/tests/PHPUnit/Framework/TestingEnvironmentManipulator.php
@@ -227,16 +227,15 @@ class TestingEnvironmentManipulator implements EnvironmentManipulator
private function getPluginAndRequiredPlugins($pluginName, $plugins)
{
- $pluginJsonPath = $this->makePathToPluginJson($pluginName);
+ $pluginLoader = new Plugin\MetadataLoader($pluginName);
+ $pluginJson = $pluginLoader->loadPluginInfoJson();
- if (file_exists($pluginJsonPath)) {
- $pluginJson = json_decode(trim(file_get_contents($pluginJsonPath)), true);
+ if (!empty($pluginJson['require'])) {
+ foreach ($pluginJson['require'] as $possiblePluginName => $requiredVersion) {
- if (!empty($pluginJson['require'])) {
- foreach ($pluginJson['require'] as $possiblePluginName => $requiredVersion) {
- if (file_exists($this->makePathToPluginJson($possiblePluginName))) {
- $plugins = $this->getPluginAndRequiredPlugins($possiblePluginName, $plugins);
- }
+ $pluginLoader2 = new Plugin\MetadataLoader($possiblePluginName);
+ if (file_exists($pluginLoader2->getPathToPluginJson())) {
+ $plugins = $this->getPluginAndRequiredPlugins($possiblePluginName, $plugins);
}
}
}
@@ -248,11 +247,6 @@ class TestingEnvironmentManipulator implements EnvironmentManipulator
return $plugins;
}
- private function makePathToPluginJson($pluginName)
- {
- return Plugin\Manager::getPluginsDirectory() . $pluginName . '/' . Plugin\MetadataLoader::PLUGIN_JSON_FILENAME;
- }
-
private function classExists($klass)
{
if (class_exists($klass)) {
diff --git a/tests/PHPUnit/Framework/TestingEnvironmentVariables.php b/tests/PHPUnit/Framework/TestingEnvironmentVariables.php
index 596daa82f2..ef4b34449e 100644
--- a/tests/PHPUnit/Framework/TestingEnvironmentVariables.php
+++ b/tests/PHPUnit/Framework/TestingEnvironmentVariables.php
@@ -105,6 +105,7 @@ class TestingEnvironmentVariables
$disabledPlugins = $pluginList->getCorePluginsDisabledByDefault();
$disabledPlugins[] = 'LoginHttpAuth';
$disabledPlugins[] = 'LoginLdap';
+ $disabledPlugins[] = 'MarketingCampaignsReporting';
$disabledPlugins[] = 'ExampleVisualization';
$disabledPlugins = array_diff($disabledPlugins, array(
diff --git a/tests/PHPUnit/Integration/Application/Kernel/PluginListTest.php b/tests/PHPUnit/Integration/Application/Kernel/PluginListTest.php
new file mode 100644
index 0000000000..00f873b2ee
--- /dev/null
+++ b/tests/PHPUnit/Integration/Application/Kernel/PluginListTest.php
@@ -0,0 +1,113 @@
+<?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\Application\Kernel;
+
+use Piwik\Application\Kernel\PluginList;
+use Piwik\Container\StaticContainer;
+use Piwik\Tests\Framework\TestCase\IntegrationTestCase;
+
+/**
+ * @group PluginListTest
+ * @group Core
+ */
+class PluginListTest extends IntegrationTestCase
+{
+
+ /**
+ * @var PluginList
+ */
+ private $pluginList = array();
+
+ public function setUp()
+ {
+ parent::setUp();
+ $this->pluginList = $this->makePluginList();
+ }
+
+ public function test_sortPlugins()
+ {
+ $pluginList = $this->makePluginList();
+ $sorted = $pluginList->sortPlugins(array('UsersManager', 'CoreHome', 'MyCustomPlugin', 'ExampleCommand', 'MyCustomPlugin2', 'Abcdef'));
+ $this->assertSame(array(
+ 'CoreHome', // core plugins loaded first
+ 'UsersManager',
+ 'ExampleCommand', // a "by default disabled plugin" is loaded before custom plugins
+ 'Abcdef', // then we load custom plugins
+ 'MyCustomPlugin',
+ 'MyCustomPlugin2',
+ ), $sorted);
+ }
+
+ public function test_sortPlugins_onlyCorePlugins()
+ {
+ $pluginList = $this->makePluginList();
+ $sorted = $pluginList->sortPlugins(array('UsersManager', 'CoreHome'));
+ $this->assertSame(array('CoreHome','UsersManager'), $sorted);
+ }
+
+ public function test_sortPluginsAndRespectDependencies_sortsPluginsAlphabetically()
+ {
+ $pluginList = $this->makePluginList();
+ $sorted = $pluginList->sortPluginsAndRespectDependencies(array(
+ 'UsersManager', 'MyCustomPlugin', 'ExampleCommand', 'MyCustomPlugin2', 'CoreHome', 'Abcdef'
+ ));
+ $this->assertSame(array(
+ 'CoreHome', // core plugins loaded first
+ 'UsersManager',
+ 'ExampleCommand', // a "by default disabled plugin" is loaded before custom plugins
+ 'Abcdef', // then we load custom plugins
+ 'MyCustomPlugin',
+ 'MyCustomPlugin2',
+ ), $sorted);
+ }
+
+ public function test_sortPluginsAndRespectDependencies_makesSureToListRequiredDependencyFirst()
+ {
+ $pluginJsonInfo = array(
+ 'Abcdef' => array('require' => array('MyCustomPlugin2' => '2.2.1')),
+ 'MyCustomPlugin2' => array('require' => array('CoreHome' => '4.2.1', 'MyCustomPlugin3' => '3.0.3')),
+ 'fooBar' => array('require' => array('Ast' => '1.2.1', 'MyCustomPlugin3' => '3.0.3'))
+ );
+
+ $pluginList = $this->makePluginList();
+ $sorted = $pluginList->sortPluginsAndRespectDependencies(array(
+ 'UsersManager', 'MyCustomPlugin',
+ 'ExampleCommand', 'MyCustomPlugin2', 'Ast',
+ 'Acc', 'MyCustomPlugin3', 'CoreHome', 'Abcdef', 'fooBar',
+ ), $pluginJsonInfo);
+ $this->assertSame(array(
+ 'CoreHome', // core plugins loaded first
+ 'UsersManager',
+ 'ExampleCommand', // a "by default disabled plugin" is loaded before custom plugins
+ 'MyCustomPlugin3',
+ 'MyCustomPlugin2',
+ 'Abcdef',
+ 'Acc',
+ 'Ast',
+ 'fooBar',
+ 'MyCustomPlugin',
+ ), $sorted);
+ }
+
+ public function test_sortPluginsAndRespectDependencies_onlyCorePlugins()
+ {
+ $pluginList = $this->makePluginList();
+ $sorted = $pluginList->sortPluginsAndRespectDependencies(array('UsersManager', 'CoreHome'));
+ $this->assertSame(array('CoreHome','UsersManager'), $sorted);
+ }
+
+ private function makePluginList()
+ {
+ $globalSettingsProvider = StaticContainer::get('Piwik\Application\Kernel\GlobalSettingsProvider');
+ $section = $globalSettingsProvider->getSection('Plugins');
+ // $section['Plugins'] = $pluginsToLoad;
+ $globalSettingsProvider->setSection('Plugins', $section);
+ return new PluginList($globalSettingsProvider);
+ }
+
+}
diff --git a/tests/PHPUnit/Integration/DbTest.php b/tests/PHPUnit/Integration/DbTest.php
index e30de8a062..0ca35122b5 100644
--- a/tests/PHPUnit/Integration/DbTest.php
+++ b/tests/PHPUnit/Integration/DbTest.php
@@ -85,6 +85,21 @@ class DbTest extends IntegrationTestCase
Db::destroyDatabaseObject();
}
+ /**
+ * @dataProvider getDbAdapter
+ */
+ public function test_getRowCount($adapter, $expectedClass)
+ {
+ Db::destroyDatabaseObject();
+ Config::getInstance()->database['adapter'] = $adapter;
+ $db = Db::get();
+ // make sure test is useful and setting adapter works
+ $this->assertInstanceOf($expectedClass, $db);
+
+ $result = $db->query('select 21');
+ $this->assertEquals(1, $db->rowCount($result));
+ }
+
public function getDbAdapter()
{
return array(
diff --git a/tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getBrand_month.xml b/tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getBrand_month.xml
index 2d1a7bd095..89aca6e48f 100644
--- a/tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getBrand_month.xml
+++ b/tests/PHPUnit/System/expected/test_ImportLogs__DevicesDetection.getBrand_month.xml
@@ -19,7 +19,7 @@
<sum_daily_nb_uniq_visitors>33</sum_daily_nb_uniq_visitors>
<sum_daily_nb_users>2</sum_daily_nb_users>
<nb_visits_converted>0</nb_visits_converted>
- <logo>plugins/Morpheus/icons/dist/brand/Unknown.png</logo>
+ <logo>plugins/Morpheus/icons/dist/brand/unk.png</logo>
<segment>deviceBrand==Unknown</segment>
</row>
<row>
@@ -85,4 +85,4 @@
<logo>plugins/Morpheus/icons/dist/brand/Samsung.png</logo>
<segment>deviceBrand==Samsung</segment>
</row>
-</result> \ No newline at end of file
+</result>
diff --git a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__DevicesDetection.getBrand_day.xml b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__DevicesDetection.getBrand_day.xml
index e498a16332..bef5da30d5 100644
--- a/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__DevicesDetection.getBrand_day.xml
+++ b/tests/PHPUnit/System/expected/test_OneVisitorTwoVisits_withCookieSupport__DevicesDetection.getBrand_day.xml
@@ -23,7 +23,7 @@
</goals>
<nb_conversions>2</nb_conversions>
<revenue>43</revenue>
- <logo>plugins/Morpheus/icons/dist/brand/Unknown.png</logo>
+ <logo>plugins/Morpheus/icons/dist/brand/unk.png</logo>
<segment>deviceBrand==Unknown</segment>
</row>
-</result> \ No newline at end of file
+</result>
diff --git a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_and_graph__ScheduledReports.generateReport_month.original.html b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_and_graph__ScheduledReports.generateReport_month.original.html
index f94bb1df2f..c08c9b38e3 100644
--- a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_and_graph__ScheduledReports.generateReport_month.original.html
+++ b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_html_tables_and_graph__ScheduledReports.generateReport_month.original.html
@@ -762,7 +762,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/brand/Unknown.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/brand/unk.png'>
&nbsp;
Unknown </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
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 13af6755f2..4129e19606 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
@@ -727,7 +727,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/brand/Unknown.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/brand/unk.png'>
&nbsp;
Unknown </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
diff --git a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_pdf_tables_only__ScheduledReports.generateReport_month.original.pdf b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_pdf_tables_only__ScheduledReports.generateReport_month.original.pdf
index b1c7db1191..f1a9297d72 100644
--- a/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_pdf_tables_only__ScheduledReports.generateReport_month.original.pdf
+++ b/tests/PHPUnit/System/expected/test_TwoVisitors_twoWebsites_differentDays_scheduled_report_in_pdf_tables_only__ScheduledReports.generateReport_month.original.pdf
Binary files differ
diff --git a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_and_graph__ScheduledReports.generateReport_week.original.html b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_and_graph__ScheduledReports.generateReport_week.original.html
index 91b68caf4f..7af97958ce 100644
--- a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_and_graph__ScheduledReports.generateReport_week.original.html
+++ b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_html_tables_and_graph__ScheduledReports.generateReport_week.original.html
@@ -905,7 +905,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/brand/Unknown.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/brand/unk.png'>
&nbsp;
Unknown </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
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 84bff31348..ab685ce1f2 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
@@ -863,7 +863,7 @@
<tr style=";">
<td style="padding:17px 15px;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
- <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/brand/Unknown.png'>
+ <img height="16px" src='http://example.com/piwik/tests/PHPUnit/proxy/plugins/Morpheus/icons/dist/brand/unk.png'>
&nbsp;
Unknown </td>
<td style="padding:17px 15px; text-align:right;;border-bottom:1px solid rgb(231,231,231);font-size: 15px;padding:17px 15px;color:#0d0d0d;font-family:-apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Oxygen-Sans, Cantarell, &#039;Helvetica Neue&#039;, sans-serif;">
diff --git a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_pdf_tables_only__ScheduledReports.generateReport_week.original.pdf b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_pdf_tables_only__ScheduledReports.generateReport_week.original.pdf
index 71bbf00529..909cc51c36 100644
--- a/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_pdf_tables_only__ScheduledReports.generateReport_week.original.pdf
+++ b/tests/PHPUnit/System/expected/test_ecommerceOrderWithItems_scheduled_report_in_pdf_tables_only__ScheduledReports.generateReport_week.original.pdf
Binary files differ
diff --git a/tests/PHPUnit/Unit/DataAccess/LogQueryBuilder/JoinGeneratorTest.php b/tests/PHPUnit/Unit/DataAccess/LogQueryBuilder/JoinGeneratorTest.php
index 746f2e45ff..8e1ead3aec 100644
--- a/tests/PHPUnit/Unit/DataAccess/LogQueryBuilder/JoinGeneratorTest.php
+++ b/tests/PHPUnit/Unit/DataAccess/LogQueryBuilder/JoinGeneratorTest.php
@@ -102,6 +102,57 @@ class JoinGeneratorTest extends \PHPUnit_Framework_TestCase
$this->assertEquals($expected, $generator->getJoinString());
}
+ public function test_generate_getJoinString_manuallyJoinedAlreadyWithCustomConditionInArray()
+ {
+ $generator = $this->generate(array(
+ 'log_visit',
+ array('table' => 'log_conversion', 'joinOn' => 'log_visit.idvisit2 = log_conversion.idvisit2'),
+ 'log_conversion'
+ ));
+
+ $expected = 'log_visit AS log_visit ';
+ $expected .= 'LEFT JOIN log_conversion AS log_conversion ON log_visit.idvisit2 = log_conversion.idvisit2';
+ $this->assertEquals($expected, $generator->getJoinString());
+ }
+
+ public function test_generate_getJoinString_manuallyJoinedAlreadyWithCustomConditionInArrayAndFurtherTablesAfterwards()
+ {
+ $generator = $this->generate(array(
+ 'log_visit',
+ array('table' => 'log_conversion', 'joinOn' => 'log_visit.idvisit2 = log_conversion.idvisit2'),
+ 'log_conversion',
+ 'log_link_visit_action'
+ ));
+
+ $expected = 'log_visit AS log_visit ';
+ $expected .= 'LEFT JOIN log_conversion AS log_conversion ON log_visit.idvisit2 = log_conversion.idvisit2 ';
+ $expected .= 'LEFT JOIN log_link_visit_action AS log_link_visit_action ON log_link_visit_action.idvisit = log_visit.idvisit';
+ $this->assertEquals($expected, $generator->getJoinString());
+ }
+
+ /**
+ * @expectedException \Exception
+ * @expectedExceptionMessage Please reorganize the joined tables as the table log_conversion in {"0":"log_visit","1":"log_conversion","2":"log_link_visit_action","3":{"table":"log_conversion","joinOn":"log_link_visit_action.idvisit2 = log_conversion.idvisit2"}} cannot be joined correctly.
+ */
+ public function test_generate_getJoinString_manuallyJoinedAlreadyWithCustomConditionInArrayInverted()
+ {
+ $generator = $this->generate(array(
+ 'log_visit',
+ 'log_conversion',
+ 'log_link_visit_action',
+ array('table' => 'log_conversion', 'joinOn' => 'log_link_visit_action.idvisit2 = log_conversion.idvisit2'),
+ ));
+
+ $expected = 'log_visit AS log_visit ';
+ $expected .= 'LEFT JOIN log_conversion AS log_conversion ON log_visit.idvisit2 = log_conversion.idvisit2 ';
+ $expected .= 'LEFT JOIN log_link_visit_action AS log_link_visit_action ON log_link_visit_action.idvisit = log_visit.idvisit ';
+ $expected .= 'LEFT JOIN log_conversion AS log_conversion ON log_conversion.idvisit = log_visit.idvisit ';
+
+ $expected .= 'LEFT JOIN log_conversion AS log_conversion ON log_visit.idvisit2 = log_conversion.idvisit2 ';
+ $expected .= 'LEFT JOIN log_link_visit_action AS log_link_visit_action ON log_link_visit_action.idvisit = log_visit.idvisit';
+ $this->assertEquals($expected, $generator->getJoinString());
+ }
+
public function test_generate_getJoinString_manuallyJoinedAlreadyPlusCustomJoinButAlsoLeft()
{
$generator = $this->generate(array(
diff --git a/tests/UI/expected-screenshots/Dashboard_loaded_token_auth.png b/tests/UI/expected-screenshots/Dashboard_loaded_token_auth.png
index 4a06725782..ff309ef54d 100644
--- a/tests/UI/expected-screenshots/Dashboard_loaded_token_auth.png
+++ b/tests/UI/expected-screenshots/Dashboard_loaded_token_auth.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:09fb2cbf638ca3671a6382a11eeb292af94d77c1479de082c37b2efaa7034700
-size 538187
+oid sha256:62ffe7dcbec7a3ead69c8e0207626fce141e4b11c08a893a4b776a420f7bc871
+size 538373
diff --git a/tests/UI/expected-screenshots/Dashboard_removed.png b/tests/UI/expected-screenshots/Dashboard_removed.png
index 95eb9f0c59..361fb00ce1 100644
--- a/tests/UI/expected-screenshots/Dashboard_removed.png
+++ b/tests/UI/expected-screenshots/Dashboard_removed.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:4881ee29c12b8c00a463d1bcc4d84d422b64bed3c651bb6165ac7db9e4db221b
-size 537830
+oid sha256:6895c2be1eda5182ad1af3399e3568ed1c18232fd128782da34e77a375b4f562
+size 537986
diff --git a/tests/UI/expected-screenshots/EmptySite_emptySiteDashboard.png b/tests/UI/expected-screenshots/EmptySite_emptySiteDashboard.png
index 6433c2ab72..25a957f584 100644
--- a/tests/UI/expected-screenshots/EmptySite_emptySiteDashboard.png
+++ b/tests/UI/expected-screenshots/EmptySite_emptySiteDashboard.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:e2c131f981a3d5ac09c7f035a3f855bc35f4e7ec9bf3083c475df5a770ce90f5
-size 217051
+oid sha256:0723f3a7503a471b5432f8b72f0b9fd3f5ceef2ff9e5b3f87175ac2150465ed3
+size 222863
diff --git a/tests/UI/expected-screenshots/EmptySite_emptySiteDashboard_ignored.png b/tests/UI/expected-screenshots/EmptySite_emptySiteDashboard_ignored.png
new file mode 100644
index 0000000000..4977052015
--- /dev/null
+++ b/tests/UI/expected-screenshots/EmptySite_emptySiteDashboard_ignored.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c8b3052ed220a9ae9e545542b63266be0dd46d5a8b1038c41a64f9a5b2006dff
+size 285366
diff --git a/tests/UI/expected-screenshots/Overlay_loaded.png b/tests/UI/expected-screenshots/Overlay_loaded.png
index 6f5837aa20..473a526a9b 100644
--- a/tests/UI/expected-screenshots/Overlay_loaded.png
+++ b/tests/UI/expected-screenshots/Overlay_loaded.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:01267d7eb51db12514bf4ea313498fba0aebb7764597044a9e6c67363fc25ada
-size 91622
+oid sha256:e17420367fed1385bb47456181dfbf3769a7967fa7352172b1afc321d934dda7
+size 107726
diff --git a/tests/UI/expected-screenshots/Overlay_loaded_with_segment.png b/tests/UI/expected-screenshots/Overlay_loaded_with_segment.png
index ec9066dd15..1cb242fc95 100644
--- a/tests/UI/expected-screenshots/Overlay_loaded_with_segment.png
+++ b/tests/UI/expected-screenshots/Overlay_loaded_with_segment.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:cb5ed8775d89fad7ee87d8e3dc46bf64b4f78a91c734943a4715342ea75f08eb
-size 88700
+oid sha256:adde7eba47ec565391c12e549cb08166ca0da20199f08bc00d912efb1cbf4081
+size 105001
diff --git a/tests/UI/expected-screenshots/Overlay_page_change.png b/tests/UI/expected-screenshots/Overlay_page_change.png
index b42a1e339c..21ec24ce0c 100644
--- a/tests/UI/expected-screenshots/Overlay_page_change.png
+++ b/tests/UI/expected-screenshots/Overlay_page_change.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:8234317965f6d09a2995ee1d84c61952a4c308f5211287771ee67a6da5436eee
-size 198545
+oid sha256:976b961f96068ff2aca8fefd992782cd58a1a125ff1e34b624022c94d18a7157
+size 214351
diff --git a/tests/UI/expected-screenshots/Overlay_page_link_clicks.png b/tests/UI/expected-screenshots/Overlay_page_link_clicks.png
index f262228d4f..69355f13ff 100644
--- a/tests/UI/expected-screenshots/Overlay_page_link_clicks.png
+++ b/tests/UI/expected-screenshots/Overlay_page_link_clicks.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:153c38995cc0214ddaa366492239d36173f45b430eb6a202691b7b7d0f7f157a
-size 98305
+oid sha256:b0ba26ee0331e7ff22f64e0a1b648569c82dc0eb423236751d81ec71a88a5f75
+size 114248
diff --git a/tests/UI/expected-screenshots/Overlay_period_change.png b/tests/UI/expected-screenshots/Overlay_period_change.png
index 24ecd1ca56..dc37737743 100644
--- a/tests/UI/expected-screenshots/Overlay_period_change.png
+++ b/tests/UI/expected-screenshots/Overlay_period_change.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:edd8fdc92e3c8faf0393abed25c21008dca5411077142ecb5e0727055af8b291
-size 200835
+oid sha256:8e327c3ded16cfa9670b7ec4f533fdb0c071112aa6a655e64873aa67d5191f2b
+size 215961
diff --git a/tests/UI/expected-screenshots/Overlay_row_evolution.png b/tests/UI/expected-screenshots/Overlay_row_evolution.png
index ec63a52016..8703fdc9fa 100644
--- a/tests/UI/expected-screenshots/Overlay_row_evolution.png
+++ b/tests/UI/expected-screenshots/Overlay_row_evolution.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:682c2f7a7ffb8d0ae934986bbce1d8d31ca0c139d7c454bea17fda4cc3d47865
-size 98902
+oid sha256:9e1601ef3021dd0dc7599aa7a414c23d22eb69a64fdb34acd624815f5814d9ca
+size 111440
diff --git a/tests/UI/expected-screenshots/Overlay_transitions.png b/tests/UI/expected-screenshots/Overlay_transitions.png
index 5500e75c65..5c64ad8d3b 100644
--- a/tests/UI/expected-screenshots/Overlay_transitions.png
+++ b/tests/UI/expected-screenshots/Overlay_transitions.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:ebe70f43294f767b92a19dcc72e5be1e97c493f95ade11e775a762fc4f0718b4
-size 119995
+oid sha256:0504da4859be09381341936dee9d2d7c9846ea71d58eb3e33784783eaacb88ac
+size 131445
diff --git a/tests/UI/expected-screenshots/Theme_home.png b/tests/UI/expected-screenshots/Theme_home.png
index 3f7a34e7df..a21b21832b 100644
--- a/tests/UI/expected-screenshots/Theme_home.png
+++ b/tests/UI/expected-screenshots/Theme_home.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:64694774ceca23ba7d665b1991e4c3af953729330b16615e2b1b6cccd761ec62
-size 536680
+oid sha256:24cdccb593c6ba67d2cc860c4158b5aedc330a0f7ac2c217b504d5102f12152a
+size 536808
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_admin_plugins.png b/tests/UI/expected-screenshots/UIIntegrationTest_admin_plugins.png
index 27f9d770e1..8636a11726 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_admin_plugins.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_admin_plugins.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:e7fec3803c8cffdc013bfff529662092c3d14519c188342c19a165da15e01620
-size 976409
+oid sha256:05739f4983fadd53b2ef2ccb19fd63ac926a797dbba00a0c1ea4947adcdfcbdd
+size 998448
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_api_listing.png b/tests/UI/expected-screenshots/UIIntegrationTest_api_listing.png
index df77d61967..9e9d5b9223 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_api_listing.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_api_listing.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:64daa79a981cc4fa26baa2b88a4883bcc23a28e291bfaa14855b1c075a0888e6
-size 4233315
+oid sha256:1978495aeb6ec013d3d192368d2ba129193da25aa4f0d1c0b7aa0f17c6e47ff0
+size 4355323
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_dashboard1.png b/tests/UI/expected-screenshots/UIIntegrationTest_dashboard1.png
index e7c292c532..fcc21e542a 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_dashboard1.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_dashboard1.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:35f8e97101e79b367c1714510be3773a6282e89de071f6c46f60a765169e479f
-size 488137
+oid sha256:e031150dc2301b35ef6152bad026b8e46de58268560c8c73127c7f0ef87c2884
+size 488287
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_dashboard2.png b/tests/UI/expected-screenshots/UIIntegrationTest_dashboard2.png
index 1bbe405b57..b0e4bc66d1 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_dashboard2.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_dashboard2.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:eabdaf4e0384eb39b23b73f9bf9e7ad6c6424726260a5197ea4f78a0088952b4
-size 1441407
+oid sha256:c40d0c035178428f43c16012a48aba6b9c212228a523c83d862192508d100df3
+size 1441332
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_fatal_error_safemode.png b/tests/UI/expected-screenshots/UIIntegrationTest_fatal_error_safemode.png
index 98ed0d33c2..0fc34b7348 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_fatal_error_safemode.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_fatal_error_safemode.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:ce4997e90ad02cac0b258440b26181a3dab713c9fbabfab71156d37c1ac69d3b
-size 196162
+oid sha256:0928197e1ce7e33e4080043a11add57af4ef0d597d394e0b2370ef6d68cf5896
+size 202320
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_segmented_visitorlog.png b/tests/UI/expected-screenshots/UIIntegrationTest_segmented_visitorlog.png
index 1987d000a5..8d1a585afa 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_segmented_visitorlog.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_segmented_visitorlog.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:8553fea53c171e73d6eb19d5b815f0b25c7fc170b5d66c5e9d21df3bc17e26a9
-size 794032
+oid sha256:da0c046486ba3267e744047e9e8ca98d9a452f8ac6dc1214f1478e0ee6052315
+size 794021
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_visitor_profile_popup.png b/tests/UI/expected-screenshots/UIIntegrationTest_visitor_profile_popup.png
index 0ed1242d77..188bcf0d0d 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_visitor_profile_popup.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_visitor_profile_popup.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:e7d312b0af70a079517a677fba00abf962c4e21ff14e334e13ddb02fccef6f46
-size 228875
+oid sha256:b167ae0aa509eed89f1b9fa1104573d808ec0775338bd8e778c9382a5764f36d
+size 243601
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_devices.png b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_devices.png
index fb7836055a..8db5369088 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_devices.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_devices.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:e63248f8321005905b35329822a739873a5722d639190acbfc5e6855a0bc6377
-size 93680
+oid sha256:d3ea993fb905140ec9e37c9c8668469415ef0a8c876ffd3f2d01ee52e1f579c8
+size 93832
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_software.png b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_software.png
index ead2ba7ffd..c68ac73bc7 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_visitors_software.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_visitors_software.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:b101a48862ea5eae3db93d279b51ac67ae5c7e15fb6a9a822a4a988e41d2be6c
-size 160676
+oid sha256:544f3d346718775490b8203f26102e8c49ae9ff2189ac73cdd3ab68e136dcef1
+size 160643
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_visitor_log.png b/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_visitor_log.png
index 395b8dd15b..aff97fe1f0 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_visitor_log.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_widgetize_visitor_log.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:c34486e4ef8423a4b1f7607d57b70e6d8116c254a6de5c5d938fffef63b4ff9e
-size 627836
+oid sha256:216cb48f4299ef58d9c9c2995ce1cbdbda9d2089811b0d96e9aa90eb09a04236
+size 627627
diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_related_report_click.png b/tests/UI/expected-screenshots/ViewDataTableTest_related_report_click.png
index 4954de117c..8eeb243a0e 100644
--- a/tests/UI/expected-screenshots/ViewDataTableTest_related_report_click.png
+++ b/tests/UI/expected-screenshots/ViewDataTableTest_related_report_click.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:a1d439e3735718dee9677a43e8fa1c8fa2783c18b0e53062fb2469374d72a735
-size 38749
+oid sha256:03e6dced21f3097b4da767b4c148f25bd2f95a6f4a0470845b655700d8c0e437
+size 38735
diff --git a/tests/UI/specs/EmptySite_spec.js b/tests/UI/specs/EmptySite_spec.js
index 31b8524d6f..b4978ebd20 100644
--- a/tests/UI/specs/EmptySite_spec.js
+++ b/tests/UI/specs/EmptySite_spec.js
@@ -19,4 +19,11 @@ describe("EmptySite", function () {
page.load(urlToTest);
}, done);
});
+
+ it('should be possible to ignore this screen for one hour', function (done) {
+ expect.screenshot('emptySiteDashboard_ignored').to.be.captureSelector('.page', function (page) {
+ page.click('.ignoreSitesWithoutData');
+ page.wait(1000)
+ }, done);
+ });
});
diff --git a/tests/resources/screenshot-override/override.css b/tests/resources/screenshot-override/override.css
index a38e0ed84d..bda7f2a260 100644
--- a/tests/resources/screenshot-override/override.css
+++ b/tests/resources/screenshot-override/override.css
@@ -10,6 +10,7 @@
display:none;
}
+.piwik-version .itemValue,
span.piwik-version,
span.plugin-version {
visibility:hidden;