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-03-27 13:45:15 +0300
committerGitHub <noreply@github.com>2017-03-27 13:45:15 +0300
commitb78a1043d54e016c740b0553d413f17ac32c548a (patch)
tree00f3f362fb5c3bfdf50c5229379ed9a83f951359
parent7a8689e9c858d64a2dbdb200d6a23bfaaddc49fb (diff)
parentb1cd038eb7f759f3e4cea2d110b6b4721aee9e35 (diff)
Merge pull request #11533 from piwik/3.x-dev3.0.3-b1
Release Piwik 3.0.3-b1
-rw-r--r--CHANGELOG.md8
-rw-r--r--config/global.ini.php5
-rw-r--r--core/Common.php49
-rw-r--r--core/CronArchive.php2
-rw-r--r--core/FileIntegrity.php4
-rw-r--r--core/Plugin/ControllerAdmin.php20
-rw-r--r--core/Plugin/Manager.php2
-rw-r--r--core/Version.php2
-rw-r--r--lang/de.json4
-rw-r--r--lang/es.json8
-rw-r--r--lang/fi.json11
-rw-r--r--lang/fr.json4
-rw-r--r--lang/pl.json25
-rw-r--r--plugins/API/Controller.php4
-rw-r--r--plugins/Actions/lang/fi.json2
-rw-r--r--plugins/Actions/lang/it.json2
-rw-r--r--plugins/CoreAdminHome/lang/fi.json1
-rw-r--r--plugins/CoreAdminHome/lang/it.json2
-rw-r--r--plugins/CoreHome/angularjs/quick-access/quick-access.directive.js3
-rw-r--r--plugins/CoreHome/angularjs/siteselector/siteselector.controller.js3
-rw-r--r--plugins/CoreHome/javascripts/broadcast.js14
-rw-r--r--plugins/CoreHome/javascripts/calendar.js3
-rw-r--r--plugins/CoreHome/javascripts/uiControl.js13
-rw-r--r--plugins/CoreHome/javascripts/zen-mode.js3
-rw-r--r--plugins/CoreHome/lang/es.json2
-rw-r--r--plugins/CoreHome/lang/fi.json1
-rw-r--r--plugins/CoreHome/lang/it.json4
-rwxr-xr-xplugins/CoreHome/templates/_donate.twig2
-rw-r--r--plugins/CorePluginsAdmin/Controller.php14
-rw-r--r--plugins/CorePluginsAdmin/CorePluginsAdmin.php5
-rw-r--r--plugins/CorePluginsAdmin/angularjs/form-field/form-field.directive.html2
-rw-r--r--plugins/CorePluginsAdmin/angularjs/form-field/form-field.directive.js27
-rw-r--r--plugins/CorePluginsAdmin/angularjs/plugins/plugin-filter.directive.js3
-rw-r--r--plugins/CorePluginsAdmin/lang/en.json1
-rw-r--r--plugins/CorePluginsAdmin/lang/fi.json9
-rw-r--r--plugins/CorePluginsAdmin/templates/macros.twig5
m---------plugins/CustomAlerts0
m---------plugins/CustomDimensions0
-rw-r--r--plugins/Dashboard/lang/es.json24
-rw-r--r--plugins/Dashboard/lang/pl.json61
-rw-r--r--plugins/DevicesDetection/lang/fi.json1
-rw-r--r--plugins/Diagnostics/Diagnostic/PhpFunctionsCheck.php2
-rw-r--r--plugins/Ecommerce/lang/es.json7
-rw-r--r--plugins/Ecommerce/lang/it.json7
-rw-r--r--plugins/Events/lang/es.json2
-rw-r--r--plugins/Feedback/lang/es.json8
-rw-r--r--plugins/Feedback/templates/index.twig1
-rw-r--r--plugins/Goals/angularjs/manage-goals/manage-goals.controller.js7
-rw-r--r--plugins/Goals/lang/es.json10
-rw-r--r--plugins/Goals/lang/fi.json3
-rw-r--r--plugins/ImageGraph/lang/es.json2
-rw-r--r--plugins/Insights/lang/es.json2
-rw-r--r--plugins/Installation/lang/en.json3
-rw-r--r--plugins/Installation/lang/es.json8
-rw-r--r--plugins/Installation/lang/fi.json2
-rw-r--r--plugins/Live/lang/es.json8
-rw-r--r--plugins/Live/lang/fi.json4
-rw-r--r--plugins/Login/lang/fi.json3
-rw-r--r--plugins/Marketplace/API.php2
-rw-r--r--plugins/Marketplace/Controller.php17
-rw-r--r--plugins/Marketplace/lang/en.json1
-rw-r--r--plugins/Marketplace/lang/es.json58
-rw-r--r--plugins/Marketplace/lang/fi.json6
-rw-r--r--plugins/Marketplace/templates/licenseform.twig4
-rw-r--r--plugins/Marketplace/templates/overview.twig7
-rw-r--r--plugins/MobileMessaging/lang/de.json1
-rw-r--r--plugins/MobileMessaging/lang/el.json1
-rw-r--r--plugins/MobileMessaging/lang/es.json10
-rw-r--r--plugins/MobileMessaging/lang/fi.json4
-rw-r--r--plugins/MobileMessaging/lang/fr.json1
-rw-r--r--plugins/MobileMessaging/lang/it.json4
-rw-r--r--plugins/MobileMessaging/lang/sq.json1
-rw-r--r--plugins/MobileMessaging/lang/zh-tw.json1
-rw-r--r--plugins/Morpheus/templates/admin.twig2
-rw-r--r--plugins/Morpheus/templates/dashboard.twig2
-rwxr-xr-xplugins/MultiSites/API.php2
-rw-r--r--plugins/Overlay/client/client.css7
-rw-r--r--plugins/Overlay/client/followingpages.js24
-rw-r--r--plugins/Overlay/lang/es.json4
-rw-r--r--plugins/Overlay/templates/startOverlaySession.twig13
-rw-r--r--plugins/PrivacyManager/lang/es.json10
-rw-r--r--plugins/PrivacyManager/lang/fi.json8
-rw-r--r--plugins/ProfessionalServices/ProfessionalServices.php40
-rw-r--r--plugins/ProfessionalServices/Promo.php53
-rw-r--r--plugins/ProfessionalServices/templates/promoBelowEvents.twig7
-rw-r--r--plugins/ProfessionalServices/templates/promoExperiments.twig3
-rw-r--r--plugins/ProfessionalServices/templates/promoFunnel.twig5
-rw-r--r--plugins/ProfessionalServices/templates/promoSearchKeywords.twig6
-rw-r--r--plugins/Referrers/Reports/GetKeywords.php16
-rw-r--r--plugins/Referrers/lang/fi.json2
-rw-r--r--plugins/ScheduledReports/lang/el.json2
-rw-r--r--plugins/ScheduledReports/lang/it.json1
-rw-r--r--plugins/SegmentEditor/javascripts/Segmentation.js11
-rw-r--r--plugins/SegmentEditor/lang/es.json4
-rw-r--r--plugins/SegmentEditor/lang/fi.json2
-rw-r--r--plugins/SitesManager/angularjs/sites-manager/sites-manager.controller.js7
-rw-r--r--plugins/SitesManager/lang/fi.json2
-rw-r--r--plugins/SitesManager/lang/fr.json2
-rw-r--r--plugins/TestRunner/Commands/TestsRunUI.php4
-rw-r--r--plugins/UserCountry/Diagnostic/GeolocationDiagnostic.php2
-rw-r--r--plugins/UserCountry/lang/fr.json2
-rw-r--r--plugins/UserCountryMap/lang/es.json2
-rw-r--r--plugins/UserLanguage/lang/fi.json2
-rw-r--r--plugins/UsersManager/angularjs/manage-users/manage-users.controller.js11
-rw-r--r--plugins/UsersManager/lang/es.json16
-rw-r--r--plugins/UsersManager/lang/fi.json1
-rw-r--r--plugins/UsersManager/lang/it.json5
-rw-r--r--plugins/VisitsSummary/lang/es.json2
-rw-r--r--tests/UI/expected-screenshots/BarGraph_load.png4
-rw-r--r--tests/UI/expected-screenshots/BarGraph_metric_picker_shown.png4
-rw-r--r--tests/UI/expected-screenshots/BarGraph_other_metric.png4
-rw-r--r--tests/UI/expected-screenshots/GoalsTable_goals_table_ecommerce.png4
-rw-r--r--tests/UI/expected-screenshots/GoalsTable_goals_table_full.png4
-rw-r--r--tests/UI/expected-screenshots/GoalsTable_goals_table_single.png4
-rw-r--r--tests/UI/expected-screenshots/GoalsTable_initial.png4
-rw-r--r--tests/UI/expected-screenshots/Installation_system_check.png4
-rw-r--r--tests/UI/expected-screenshots/MeasurableManager_add_measurable_view.png4
-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_transitions.png4
-rw-r--r--tests/UI/expected-screenshots/PieGraph_load.png4
-rw-r--r--tests/UI/expected-screenshots/PieGraph_metric_picker_shown.png4
-rw-r--r--tests/UI/expected-screenshots/PieGraph_other_metric.png4
-rw-r--r--tests/UI/expected-screenshots/PieGraph_pie_segment_tooltip.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_admin_diagnostics_configfile.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_admin_plugins.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_admin_settings_general.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_admin_themes.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_fatal_error_safemode.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_feedback_form.png4
-rw-r--r--tests/UI/expected-screenshots/UIIntegrationTest_referrers_search_engines_keywords.png4
-rw-r--r--tests/UI/expected-screenshots/ViewDataTableTest_0_initial.png4
-rw-r--r--tests/UI/expected-screenshots/ViewDataTableTest_10_change_limit.png4
-rw-r--r--tests/UI/expected-screenshots/ViewDataTableTest_11_flattened.png4
-rw-r--r--tests/UI/expected-screenshots/ViewDataTableTest_12_aggregate_shown.png4
-rw-r--r--tests/UI/expected-screenshots/ViewDataTableTest_13_make_hierarchical.png4
-rw-r--r--tests/UI/expected-screenshots/ViewDataTableTest_14_visits_percent.png4
-rw-r--r--tests/UI/expected-screenshots/ViewDataTableTest_15_search.png4
-rw-r--r--tests/UI/expected-screenshots/ViewDataTableTest_1_all_columns.png4
-rw-r--r--tests/UI/expected-screenshots/ViewDataTableTest_2_column_sorted_desc.png4
-rw-r--r--tests/UI/expected-screenshots/ViewDataTableTest_3_column_sorted_asc.png4
-rw-r--r--tests/UI/expected-screenshots/ViewDataTableTest_5_goals.png4
-rw-r--r--tests/UI/expected-screenshots/ViewDataTableTest_6_bar_graph.png4
-rw-r--r--tests/UI/expected-screenshots/ViewDataTableTest_7_pie_graph.png4
-rw-r--r--tests/UI/expected-screenshots/ViewDataTableTest_8_tag_cloud.png4
-rw-r--r--tests/UI/expected-screenshots/ViewDataTableTest_9_normal_table.png4
-rw-r--r--tests/UI/expected-screenshots/ViewDataTableTest_export_options.png4
-rw-r--r--tests/UI/expected-screenshots/ViewDataTableTest_limit_selector_open.png4
-rw-r--r--tests/UI/expected-screenshots/ViewDataTableTest_subtables_loaded.png4
-rw-r--r--tests/UI/specs/Dashboard_spec.js1
-rw-r--r--tests/lib/screenshot-testing/support/page-renderer.js65
154 files changed, 745 insertions, 331 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index ab9e6c198b..7a0c7a7ba4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,14 @@ This is the Developer Changelog for Piwik platform developers. All changes in ou
The Product Changelog at **[piwik.org/changelog](http://piwik.org/changelog)** lets you see more details about any Piwik release, such as the list of new guides and FAQs, security fixes, and links to all closed issues.
+## Piwik 3.0.3
+
+### Breaking Changes
+* New config setting `enable_plugin_upload` lets you enable uploading and installing a Piwik plugin ZIP file by a Super User. This used to be enabled by default, but it is now disabled by default now for security reasons.
+
+### New APIs
+* A new event `Controller.triggerAdminNotifications` has been added to let plugins know when they are supposed to trigger notifications in the admin.
+
## Piwik 3.0.2
### New Features
diff --git a/config/global.ini.php b/config/global.ini.php
index af3eb6f7b8..d12f73c1c0 100644
--- a/config/global.ini.php
+++ b/config/global.ini.php
@@ -539,6 +539,11 @@ enable_load_data_infile = 1
; - links to Uninstall themes will be disabled (but user can still enable/disable themes)
enable_plugins_admin = 1
+; By setting this option to 1, it will be possible for Super Users to upload Piwik plugin ZIP archives directly in Piwik Administration.
+; Enabling this opens a remote code execution vulnerability where
+; an attacker who gained Super User access could execute custom PHP code in a Piwik plugin.
+enable_plugin_upload = 0
+
; By setting this option to 0, you can prevent Super User from editing the Geolocation settings.
enable_geolocation_admin = 1
diff --git a/core/Common.php b/core/Common.php
index c332e682f2..1616e56505 100644
--- a/core/Common.php
+++ b/core/Common.php
@@ -504,17 +504,54 @@ class Common
*/
/**
+ * Generates a random integer
+ *
+ * @param int $min
+ * @param null|int $max Defaults to max int value
+ * @return int|null
+ */
+ public static function getRandomInt($min = 0, $max = null)
+ {
+ $rand = null;
+
+ if (function_exists('random_int')) {
+ try {
+ if (!isset($max)) {
+ $max = PHP_INT_MAX;
+ }
+ $rand = random_int($min, $max);
+ } catch (Exception $e) {
+ // If none of the crypto sources are available, an Exception will be thrown.
+ $rand = null;
+ }
+ }
+
+ if (!isset($rand)) {
+ if (function_exists('mt_rand')) {
+ if (!isset($max)) {
+ $max = mt_getrandmax();
+ }
+ $rand = mt_rand($min, $max);
+ } else {
+ if (!isset($max)) {
+ $max = getrandmax();
+ }
+
+ $rand = rand($min, $max);
+ }
+ }
+
+ return $rand;
+ }
+
+ /**
* Returns a 32 characters long uniq ID
*
* @return string 32 chars
*/
public static function generateUniqId()
{
- if (function_exists('mt_rand')) {
- $rand = mt_rand();
- } else {
- $rand = rand();
- }
+ $rand = self::getRandomInt();
return md5(uniqid($rand, true));
}
@@ -558,7 +595,7 @@ class Common
$str = '';
for ($i = 0; $i < $length; $i++) {
- $rand_key = mt_rand(0, strlen($chars) - 1);
+ $rand_key = self::getRandomInt(0, strlen($chars) - 1);
$str .= substr($chars, $rand_key, 1);
}
diff --git a/core/CronArchive.php b/core/CronArchive.php
index cc8a1de71c..d9ed8c6311 100644
--- a/core/CronArchive.php
+++ b/core/CronArchive.php
@@ -1017,7 +1017,7 @@ class CronArchive
private function checkResponse($response, $url)
{
if (empty($response)
- || stripos($response, 'error')
+ || stripos($response, 'error') !== false
) {
return $this->logNetworkError($url, $response);
}
diff --git a/core/FileIntegrity.php b/core/FileIntegrity.php
index 8e91730d61..c7b1222244 100644
--- a/core/FileIntegrity.php
+++ b/core/FileIntegrity.php
@@ -70,10 +70,12 @@ class FileIntegrity
'config/manifest.inc.php',
'misc/*.dat',
'misc/*.dat.gz',
+ 'misc/*.bin',
'misc/user/*png',
'misc/package',
'misc/package/WebAppGallery/*.xml',
'misc/package/WebAppGallery/install.sql',
+ 'plugins/ImageGraph/fonts/unifont.ttf',
'vendor/autoload.php',
'vendor/composer/autoload_real.php',
'tmp/*',
@@ -308,7 +310,7 @@ class FileIntegrity
{
$expected = self::getFilesNotInManifestButExpectedAnyway();
foreach ($expected as $expectedPattern) {
- if (fnmatch($expectedPattern, $file)) {
+ if (fnmatch($expectedPattern, $file, defined('FNM_CASEFOLD') ? FNM_CASEFOLD : 0)) {
return true;
}
}
diff --git a/core/Plugin/ControllerAdmin.php b/core/Plugin/ControllerAdmin.php
index 7e6c679ddf..79ce898630 100644
--- a/core/Plugin/ControllerAdmin.php
+++ b/core/Plugin/ControllerAdmin.php
@@ -325,6 +325,26 @@ abstract class ControllerAdmin extends Controller
self::notifyWhenDebugOnDemandIsEnabled('debug');
self::notifyWhenDebugOnDemandIsEnabled('debug_on_demand');
+ /**
+ * Posted when rendering an admin page and notifications about any warnings or errors should be triggered.
+ * You can use it for example when you have a plugin that needs to be configured in order to work and the
+ * plugin has not been configured yet. It can be also used to cancel / remove other notifications by calling
+ * eg `Notification\Manager::cancel($notificationId)`.
+ *
+ * **Example**
+ *
+ * public function onTriggerAdminNotifications(Piwik\Widget\WidgetsList $list)
+ * {
+ * if ($pluginFooIsNotConfigured) {
+ * $notification = new Notification('The plugin foo has not been configured yet');
+ * $notification->context = Notification::CONTEXT_WARNING;
+ * Notification\Manager::notify('fooNotConfigured', $notification);
+ * }
+ * }
+ *
+ */
+ Piwik::postEvent('Controller.triggerAdminNotifications');
+
$view->adminMenu = MenuAdmin::getInstance()->getMenu();
$notifications = $view->notifications;
diff --git a/core/Plugin/Manager.php b/core/Plugin/Manager.php
index b1e97f7f8b..72b9b9052a 100644
--- a/core/Plugin/Manager.php
+++ b/core/Plugin/Manager.php
@@ -502,7 +502,7 @@ class Manager
Piwik::postEvent('PluginManager.pluginActivated', array($pluginName));
}
- protected function isPluginInFilesystem($pluginName)
+ public function isPluginInFilesystem($pluginName)
{
$existingPlugins = $this->readPluginsDirectory();
$isPluginInFilesystem = array_search($pluginName, $existingPlugins) !== false;
diff --git a/core/Version.php b/core/Version.php
index 3fca643578..aa17cb944c 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.2';
+ const VERSION = '3.0.3-b1';
public function isStableVersion($version)
{
diff --git a/lang/de.json b/lang/de.json
index 90d474b60d..96b39a86d8 100644
--- a/lang/de.json
+++ b/lang/de.json
@@ -513,13 +513,13 @@
"CompareDocumentation": "Klicken Sie auf den Link unten und öffnen Sie dieses Popup für eine andere Zeile aus der selben Tabelle, um mehrere Einträge zu vergleichen.<br \/>Verwenden Sie Shift-Klick, um die Zeile für den Vergleich zu markieren, ohne dieses Popup zu öffnen.",
"CompareRows": "Vergleiche Einträge",
"ComparingRecords": "Vergleiche %s Zeilen",
- "Documentation": "Klicken Sie auf die Metriken, um sie im großen Entwicklungs-Graphen zu sehen. Verwenden Sie Shift-Klick, um mehrere Metriken gleichzeitig zu sehen.",
+ "Documentation": "Klicken Sie auf die Metriken, um sie in der großen Entwicklungsgrafik zu sehen. Verwenden Sie Shift-Klick, um mehrere Metriken gleichzeitig zu sehen.",
"MetricBetweenText": "zwischen %1$s und %2$s",
"MetricChangeText": "%s in diesem Zeitraum",
"MetricMinMax": "%1$s bewegte sich während dem Zeitraum zwischen %2$s und %3$s",
"MetricsFor": "Metriken für %s",
"MultiRowEvolutionTitle": "Entwicklung von mehreren Zeilen",
- "PickAnotherRow": "Wählen Sie eine andere Zeile zum vergleichen",
+ "PickAnotherRow": "Wählen Sie eine andere Zeile zum Vergleichen",
"PickARow": "Wählen Sie eine Zeile zum Vergleichen"
}
} \ No newline at end of file
diff --git a/lang/es.json b/lang/es.json
index cb4d945b50..9dfb875331 100644
--- a/lang/es.json
+++ b/lang/es.json
@@ -175,9 +175,9 @@
"ExceptionUndeletableFile": "No se puede borrar %s",
"ExceptionUnreadableFileDisabledMethod": "El archivo de configuración {%1$s} no se pudo leer. Su host puede estar deshabilitado %2$s.",
"ExceptionReportNotFound": "El informe solicitado no existe.",
- "ExceptionWidgetNotFound": "El reproductor solicitado no existe.",
+ "ExceptionWidgetNotFound": "El módulo solicitado no existe.",
"ExceptionReportNotEnabled": "El informe solicitado no está disponible. Esto significa usualmente que el complemento que confecciona el informe está desactivado o no posee los suficientes permisos para acceder a este informe.",
- "ExceptionWidgetNotEnabled": "El reproductor solicitado no está habilitado. Esto se debe o a que el complemento que define el reproducto está desactivado o no posee suficientes atributos para accder al mismo.",
+ "ExceptionWidgetNotEnabled": "El módulo solicitado no está habilitado. Esto se debe a que el complemento que define el módulo está desactivado o a que Vd. no posee suficientes permisos para acceder al mismo.",
"ExpandDataTableFooter": "Cambiar la visualización o modificar el informe",
"Export": "Exportar",
"ExportAsImage": "Exportar como imagen",
@@ -423,8 +423,8 @@
"WeeklyReport": "semanal",
"WeeklyReports": "Informes semanales",
"WellDone": "¡Bien hecho!",
- "Widgets": "Reproductores",
- "Widget": "Reproductor",
+ "Widgets": "Módulos",
+ "Widget": "Módulo",
"XComparedToY": "%1$s comparado con %2$s",
"XFromY": "%1$s desde %2$s",
"YearlyReport": "anual",
diff --git a/lang/fi.json b/lang/fi.json
index 2ba81324e9..9d089a9c50 100644
--- a/lang/fi.json
+++ b/lang/fi.json
@@ -9,11 +9,12 @@
"Add": "Lisää",
"AfterEntry": "saapumisen jälkeen",
"All": "Kaikki",
+ "AllowPiwikArchivingToTriggerBrowser": "Arkistoi raportit selaimella katsottaessa",
"AllWebsitesDashboard": "Kaikkien verkkosivujen työpöytä",
"And": "ja",
"API": "API",
"Apply": "Käytä",
- "ArchivingInlineHelp": "Keskikokoisilla ja vilkkailla sivulla on suositeltavaa kieltää arkistointi selaimesta. Parempi vaihtoehto on käyttää cron-työtä arkistointiin joka tunti.",
+ "ArchivingInlineHelp": "Keskikokoisilla ja vilkkailla sivulla on suositeltavaa estää arkistointi selaimesta. Parempi vaihtoehto on käyttää cron-työtä arkistointiin joka tunti.",
"ArchivingTriggerDescription": "Suositeltavaa suuremmissa Piwik-asennuksissa. Sinun täytyy %1$sasentaa cron-työ%2$s, jotta raportit käsitellään oikein.",
"AuthenticationMethodSmtp": "SMTP:n autentikointimenetelmä",
"AverageOrderValue": "Oston keskimääräinen arvo",
@@ -96,7 +97,8 @@
"DataForThisTagCloudHasBeenPurged": "Tämän tagipilven tiedot ovat yli %s kuukautta vanhoja ja ne on poistettu.",
"Date": "Päiväys",
"DateRange": "Aikaväli:",
- "DateRangeFrom": "Alkaen",
+ "DateRangeFrom": "Mistä",
+ "DateRangeFromTo": "%1$s - %2$s",
"DateRangeInPeriodList": "päiväysalue",
"DateRangeTo": "Mihin",
"DaysHours": "%1$s päivää %2$s tuntia",
@@ -129,6 +131,7 @@
"Edit": "Muokkaa",
"EncryptedSmtpTransport": "Valitse SMTP-palvelimen vaatima salaus.",
"Error": "Virhe",
+ "Errors": "Virheet",
"ErrorRequest": "Hups, ongelma pyyntöäsi käsitellessä. Palvelimella on voinut olla tilapäinen ongelma tai ehkä pyytämäsi raportti sisälsi liikaa tietoa. Ole hyvä ja yritä uudelleen. Jos ongelma jatkuu, ole hyvä ja %1$sota yhteyttä Piwik ylläpitäjääsi%2$s avun saamiseksi.",
"EvolutionOverPeriod": "Muutos aikajaksolla",
"EvolutionSummaryGeneric": "%1$s %2$s:ssa verrattuna %3$s %4$s:ssa. Evoluutio: %5$s",
@@ -162,7 +165,7 @@
"ExceptionUnreadableFileDisabledMethod": "Asetustiedostoa {%1$s} ei voi lukea. %2$s saattaa olla poistettuna käytöstä.",
"ExceptionReportNotFound": "Pyydettyä raporttia ei ole olemassa.",
"ExceptionWidgetNotFound": "Pyydettyä vimpainta ei ole olemassa.",
- "ExceptionReportNotEnabled": "Pyydettyä raporttia ei ole otettu käyttöön. Tämä tarkoittaa yleensä joko, että raportin tarjoava laajennus on poistettu käytöstä tai sinulla ei ole tarpeeksi käyttöoikeuksia tähän raporttiin.",
+ "ExceptionReportNotEnabled": "Pyydettyä raporttia ei ole otettu käyttöön. Tämä johtuu useimmiten siitä, että raportin tarjoava laajennus on poistettu käytöstä, tai sinulla ei ole tarpeeksi käyttöoikeuksia tähän raporttiin.",
"ExpandDataTableFooter": "Vaihda visualisointia tai määrittele raportti",
"Export": "Vie",
"ExportAsImage": "Tallenna kuvaksi",
@@ -379,6 +382,7 @@
"VisitType": "Käyntityyppi",
"VisitTypeExample": "Voit esimerkiksi valita kaikki kävijät jotka palasivat sivulle ja ostivat edellisellä käynnillä. Esimerkki pyynnöstä on %s",
"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.",
"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.",
@@ -480,6 +484,7 @@
"CompareRows": "Vertaile tietoja",
"ComparingRecords": "Vertaillaan %s riviä",
"Documentation": "Klikkaa metriikkaa jonka haluat nähdä isossa seurantakuvaajassa. Shift+hiiren klikkaus merkkaa useita metriikoita yhdellä kertaa.",
+ "MetricBetweenText": "%1$s - %2$s",
"MetricChangeText": "%s ajanjaksolla",
"MetricMinMax": "%1$s vaihteli %2$s ja %3$s välillä ajanjakson aikana",
"MetricsFor": "Metriikka %s",
diff --git a/lang/fr.json b/lang/fr.json
index 4473c6e9d2..82d446bae7 100644
--- a/lang/fr.json
+++ b/lang/fr.json
@@ -124,7 +124,7 @@
"Download": "Télécharger",
"DownloadFail_FileExists": "Le fichier %s existe déjà!",
"DownloadFail_FileExistsContinue": "Téléchargement partiel en cours pour %s, mais un téléchargement terminé existe déjà!",
- "DownloadFail_HttpRequestFail": "Impossible de télécharger le fichier! Le fichier n'est peut être plus disponible, ou le site web à un petit problème. Veuillez réessayer plus tard, ou télécharger le fichier manuellement.",
+ "DownloadFail_HttpRequestFail": "Impossible de télécharger le fichier! Le fichier n'est peut-être plus disponible, ou le site web à un petit problème. Veuillez réessayer plus tard ou télécharger le fichier manuellement.",
"DownloadFullVersion": "%1$sTéléchargez%2$s la version complète! Rendez vous sur %3$s",
"DownloadPleaseRemoveExisting": "Si vous voulez le remplacer, commencer par supprimer le fichier existant.",
"Downloads": "Téléchargements",
@@ -135,7 +135,7 @@
"EncryptedSmtpTransport": "Entrez la couche de chiffrement requise par votre serveur SMTP.",
"Error": "Erreur",
"Errors": "Erreurs",
- "ErrorRequest": "Oups... Il y a eu un problème pendant le traitement de la requête. Peut être que le serveur a eu un soucis temporaire, ou peut être que vous avez demandé un rapport avec trop de données. Veuillez réssayer. Si cette erreur se répète veuillez %1$scontacter votre administrateur Piwik%2$s pour obtenir de l'aide.",
+ "ErrorRequest": "Oups... Il y a eu un problème pendant le traitement de la requête. Peut-être que le serveur a eu un soucis temporaire, ou peut-être que vous avez demandé un rapport avec trop de données. Veuillez réssayer. Si cette erreur se répète veuillez %1$scontacter votre administrateur Piwik%2$s pour obtenir de l'aide.",
"EvolutionOverPeriod": "Évolution sur la période",
"EvolutionSummaryGeneric": "%1$s en %2$s comparé à %3$s en %4$s. Evolution: %5$s",
"ExceptionContactSupportGeneric": "Si vous avez toujours ce problème veuillez %1$scontacter votre administrateur Piwik%2$s pour obtenir de l'aide.",
diff --git a/lang/pl.json b/lang/pl.json
index 21898b490a..f65ac788bc 100644
--- a/lang/pl.json
+++ b/lang/pl.json
@@ -7,7 +7,7 @@
"Action": "Aktywność",
"Actions": "Aktywność",
"Add": "Dodaj",
- "AfterEntry": "Po wprowadzeniu tutaj",
+ "AfterEntry": "po wprowadzeniu tutaj",
"All": "Wszystko",
"AllowPiwikArchivingToTriggerBrowser": "Archiwizuj raporty podczas przeglądania ich w przeglądarce",
"AllWebsitesDashboard": "Tablica analiz wszystkich stron",
@@ -26,6 +26,7 @@
"Cancel": "Anuluj",
"CannotUnzipFile": "Nie można rozpakować pliku %1$s: %2$s",
"ChangePassword": "Zmień hasło",
+ "ChooseDate": "Wybierz datę, aktualnie wybrana data, to: %s",
"ChooseLanguage": "Wybierz język",
"ChoosePeriod": "Wybierz okres",
"ClickHere": "Kliknij tutaj, aby uzyskać więcej informacji.",
@@ -64,6 +65,7 @@
"ColumnNbVisits": "użytkownicy",
"ColumnPageviews": "Liczba odsłon",
"ColumnPageviewsDocumentation": "Ile razy tę stronę odwiedziło.",
+ "ColumnPercentageVisits": "%% odwiedzin",
"ColumnRevenue": "Przychody",
"ColumnSumVisitLength": "Ogólny czas spędzony przez odwiedzającego (w sekundach)",
"ColumnTotalPageviews": "Łącznie odwiedzin stron",
@@ -78,6 +80,7 @@
"ConfigFileIsNotWritable": "Plik konfiguracyjny Piwik %1$s nie ma ustawionych praw do zapisu, zmiany poczynione nie mogły więc zostać zapisane. %2$s Zmień przez chmod uprawnienia do zapisu pliku konfiguracyjnego.",
"Continue": "Kontunuuj",
"ContinueToPiwik": "Idź do Piwik",
+ "CreatedByUser": "utworzony przez %s",
"CurrentMonth": "bieżący miesiąc",
"CurrentWeek": "bieżący tydzień",
"CurrentYear": "bieżący rok",
@@ -120,6 +123,7 @@
"Edit": "Edycja",
"EncryptedSmtpTransport": "Wpisz szyfrowanie warstwy transportowej wymagane przez twój serwer SMTP.",
"Error": "Błąd",
+ "Errors": "Błędy",
"EvolutionOverPeriod": "Postęp w okresie",
"ExceptionConfigurationFileNotFound": "Plik konfiguracyjny {%s} nie został odnaleziony.",
"ExceptionDatabaseVersion": "Twoja %1$s wersja to %2$s a Piwik wymaga minimum %3$s.",
@@ -138,6 +142,9 @@
"ExceptionLanguageFileNotFound": "Plik obsługi języka '%s' nie został odnaleziony.",
"ExceptionMethodNotFound": "Metoda '%1$s' nie istnieje lub nie jest osiągalna w module '%2$s'.",
"ExceptionMissingFile": "Brak pliku: %s",
+ "ExceptionUnexpectedFilePleaseDelete": "Usuń te pliki, aby uniknąć błędów.",
+ "ExceptionFileToDelete": "Plik do usunięcia: %s",
+ "ExceptionDirectoryToDelete": "Katalog do usunięcia: %s",
"ExceptionNonceMismatch": "Nie można pozytywnie zweryfikować tokenu zabezpieczającego w tym formularzu.",
"ExceptionPrivilege": "Nie posiadasz dostępu do tych zasobów, ponieważ one wymagają poziomu uprawnień określonych jako %s.",
"ExceptionPrivilegeAccessWebsite": "Nie posiadasz dostępu do tych zasobów, ponieważ one wymagają uprawnień jako %s dla strony o id = %d.",
@@ -148,6 +155,7 @@
"ExceptionReportNotFound": "Raport nie istnieje.",
"ExceptionWidgetNotFound": "Żądany gadżet nie istnieje.",
"ExceptionReportNotEnabled": "Żądany raport nie jest włączony. Zazwyczaj oznacza to, że wtyczka, która określa raport jest nieaktywowana albo nie masz wystarczających uprawnień do dostępu do raportu.",
+ "ExceptionWidgetNotEnabled": "Żądany gadżet nie jest włączony. To zazwyczaj oznacza, że albo wtyczka, która obsługuje ten gadżet, jest nieaktywna, albo nie masz wystarczających praw dostępu.",
"ExpandDataTableFooter": "Zmienić wizualizację lub skonfigurować raport",
"Export": "Eksport",
"ExportAsImage": "Eksport jako obraz",
@@ -159,6 +167,7 @@
"Forums": "Forum",
"FromReferrer": "z",
"GeneralInformation": "Ogólne informacje",
+ "GeneralSettings": "Ogólne ustawienia",
"GetStarted": "Zacznij",
"GiveUsYourFeedback": "Zdaj relację!",
"Goal": "Cel",
@@ -194,6 +203,7 @@
"Metric": "Metryka",
"Metrics": "Metryki",
"MetricsToPlot": "Dane do porównania",
+ "MetricToPlot": "Metryka do wykreślenia",
"MinutesSeconds": "%1$s min %2$ss",
"Mobile": "Przenośny",
"Monthly": "Miesięcznie",
@@ -205,6 +215,8 @@
"MultiSitesSummary": "Wszystkie strony",
"Name": "Nazwa",
"NbActions": "Numer działań",
+ "NbInteractions": "Liczba interakcji",
+ "NeedMoreHelp": "Potrzebujesz więcej pomocy?",
"Never": "Nigdy",
"NewReportsWillBeProcessedByCron": "Kiedy archiwizacja baz Piwik nie jest wywoływana przez przeglądarkę, nowe raporty będą jedynie przetwarzane przez crontab.",
"NewUpdatePiwikX": "Najnowsza aktualizacja: Piwik %s",
@@ -260,6 +272,7 @@
"Piechart": "Wykres kołowy",
"PiwikXIsAvailablePleaseNotifyPiwikAdmin": "%1$s jest dostępny. Prosimy powiadomić%2$sPiwik administratora%3$s.",
"PiwikXIsAvailablePleaseUpdateNow": "Piwik %1$s jest dostępna. %2$sWykonaj aktualizację!%3$s (zobacz %4$szmiany%5$s).",
+ "PleaseContactYourPiwikAdministrator": "Skontaktuj się z administratorem Piwika.",
"PleaseSpecifyValue": "Proszę określić parametr dla '%s'.",
"PleaseUpdatePiwik": "Prosimy o aktualizację oprogramowania Piwik",
"Plugin": "Wtyczka pluginu",
@@ -304,6 +317,7 @@
"Settings": "Konfiguracja",
"Shipping": "Wysyłka",
"Show": "pokaż",
+ "SingleWebsitesDashboard": "Pulpit pojedynczej witryny",
"SmallTrafficYouCanLeaveDefault": "Dla serwisów o małym natężeniu ruchu, możesz pozostawić domyślne %s sekund, by mieć dostęp do wszystkich raportów w czasie rzeczywistym.",
"SmtpEncryption": "Szyfrowanie SMTP",
"SmtpPassword": "Hasło SMTP",
@@ -352,8 +366,11 @@
"VisitType": "Typ wizyty",
"VisitTypeExample": "Przykładowo, aby wybrać wszystkich odwiedzających, którzy powrócili na serwis, włączając tych, którzy zakupili coś podczas poprzednich wizyt, zapytanie API będzie zawierać %s",
"Warning": "Ostrzeżenie",
+ "Warnings": "Ostrzeżenia",
"WarningPhpVersionXIsTooOld": "Wersja PHP %s której używasz osiągnęła swój Koniec Życia (EOL). Rekomandujemy aktualizację do aktualnej wersji, ponieważ używanie obecnej może narazić Cię na luki w zabezpieczeniach i błędy które zostały naprawione w nowszych wersjach PHP.",
"WarningPiwikWillStopSupportingPHPVersion": "Piwik przestanie wspierać PHP %1$s w następnej głownej wersji. Zaktualizuj PHP do przynajmniej PHP %2$s, zanim będzie za późno!",
+ "YouMustUpgradePhpVersionToReceiveLatestPiwik": "Musisz zaktualizować PHP, aby zainstalować najnowszą aktualizację Piwika.",
+ "PiwikCannotBeUpgradedBecausePhpIsTooOld": "Piwik nie może zostać zaktualizowany do najnowszej wersji, ponieważ Twoja wersja PHP jest za stara.",
"WarningFileIntegrityNoManifest": "Weryfikacja integralności plików nie mogła zostać przeprowadzona z powodu braku pliku manifest.inc.php.",
"WarningFileIntegrityNoManifestDeployingFromGit": "W przypadku wdrażania Piwik z Git, komunikat ten jest prawidłowy.",
"WarningFileIntegrityNoMd5file": "Weryfikacja integralności plików nie mogła zostać zakończona z powodu braku funkcji md5_file().",
@@ -378,7 +395,7 @@
},
"Mobile": {
"AboutPiwikMobile": "O Piwik Mobile",
- "AccessUrlLabel": "Dostęp etykiety adresowej URL Piwik",
+ "AccessUrlLabel": "Adres dostępowy Piwik",
"Account": "Konto",
"Accounts": "Konta",
"AddAccount": "Dodaj konto",
@@ -431,13 +448,17 @@
"TopVisitedWebsites": "Najczęściej odwiedzanie strony",
"TryIt": "Wypróbuj!",
"VerifyAccount": "Weryfikowanie Konta",
+ "ValidateSslCertificate": "Zweryfikuj certyfikat SSL",
"YouAreOffline": "Przepraszamy, obecnie jesteś odłączony"
},
"RowEvolution": {
"AvailableMetrics": "Dostępne wskaźniki",
+ "CompareDocumentation": "Kliknij poniższy link i otwórz to okno dla kolejnego wiersza tej samej tabeli, aby porównać wiele rekordów.<br\/>Przytrzymaj Shift, aby zaznaczyć wiersze bez otwierania tego okna.",
"CompareRows": "Porównaj rekordy",
"ComparingRecords": "Porównywanych wierszy %s",
+ "Documentation": "Kliknij metryki, aby wyświetlić jest na dużym wykresie ewolucyjnym. Przytrzymaj Shift, aby wyświetlić kilka metryk na raz.",
"MetricBetweenText": "od %1$s do %2$s",
+ "MetricChangeText": "%s zmiany w okresie",
"MetricsFor": "Metryka dla %s",
"MultiRowEvolutionTitle": "Postęp dla wielu rekordów",
"PickAnotherRow": "Wybierz inny wiersz do porównania",
diff --git a/plugins/API/Controller.php b/plugins/API/Controller.php
index 2d107182cb..25bfb7212d 100644
--- a/plugins/API/Controller.php
+++ b/plugins/API/Controller.php
@@ -16,6 +16,7 @@ use Piwik\Config;
use Piwik\Piwik;
use Piwik\Plugin\Report;
use Piwik\Url;
+use Piwik\UrlHelper;
use Piwik\View;
/**
@@ -50,6 +51,9 @@ class Controller extends \Piwik\Plugin\Controller
{
$ApiDocumentation = new DocumentationGenerator();
$prefixUrls = Common::getRequestVar('prefixUrl', 'http://demo.piwik.org/', 'string');
+ if (!UrlHelper::isLookLikeUrl($prefixUrls)) {
+ $prefixUrls = '';
+ }
return $ApiDocumentation->getApiDocumentationAsStringForDeveloperReference($outputExampleUrls = true, $prefixUrls);
}
diff --git a/plugins/Actions/lang/fi.json b/plugins/Actions/lang/fi.json
index 4b8be4fa72..84d97a3d64 100644
--- a/plugins/Actions/lang/fi.json
+++ b/plugins/Actions/lang/fi.json
@@ -13,7 +13,7 @@
"ColumnNoResultKeyword": "Ei hakutuloksia",
"ColumnPageName": "Sivun nimi",
"ColumnPagesPerSearch": "Haun tulossivut",
- "ColumnPagesPerSearchDocumentation": "Käyttäjät hakevat sivulla ja välillä klikkaavat tuloksien seuraavalle sivulle. Tämä on keskiarvo katsotuista hakutulossivuista.",
+ "ColumnPagesPerSearchDocumentation": "Kävijät tekevät sivustolla hakuja ja klikkaavat toisinaan linkkejä tuloksien seuraaville sivuille. Tämä on keskiarvo katsotuista hakutulossivuista.",
"ColumnPageURL": "Sivun URL",
"ColumnSearchCategory": "Haun kategoria",
"ColumnSearches": "Haut",
diff --git a/plugins/Actions/lang/it.json b/plugins/Actions/lang/it.json
index 1242d5e21f..bfbbfb37c7 100644
--- a/plugins/Actions/lang/it.json
+++ b/plugins/Actions/lang/it.json
@@ -29,8 +29,10 @@
"ColumnIdPageview": "ID Pagina vista",
"ColumnInteractionPosition": "Posizione Interazione",
"DownloadsReportDocumentation": "In questo report è possibile vedere quali file sono stati scaricati dai tuoi visitatori. %s Ciò che Piwik conta come download è il click su un link per il download. Se il download è stato completato o meno, non è noto a Piwik.",
+ "EntryPagesReportDocumentation": "Questo report contiene le informazioni sulle pagine di ingresso utilizzate nel periodo di tempo definito. Una pagina di ingresso è la prima pagina che un utente vede durante la sua visita. %s Le URL di ingresso vengono visualizzate come una struttura a cartelle.",
"EntryPageTitles": "Titoli delle pagine in entrata",
"EntryPageTitlesReportDocumentation": "Questo report contiene informazioni sui titoli delle pagine di ingresso che sono state utilizzate durante il periodo specificato.",
+ "ExitPagesReportDocumentation": "Questo report contiene le informazioni sulle pagine di uscita utilizzate nel periodo di tempo definito. Una pagina di uscita è l'ultima pagina che un utente vede durante la sua visita. %s Le URL di uscita vengono visualizzate come una struttura a cartelle.",
"ExitPageTitles": "Titoli delle pagine di uscita",
"ExitPageTitlesReportDocumentation": "Questo report contiene informazioni sui titoli delle pagine di uscita durante il periodo specificato.",
"LearnMoreAboutSiteSearchLink": "Scopri di più sul tracciamento di come i visitatori usano il vostro motore di ricerca.",
diff --git a/plugins/CoreAdminHome/lang/fi.json b/plugins/CoreAdminHome/lang/fi.json
index 6b18dc6345..e5b9cc57b3 100644
--- a/plugins/CoreAdminHome/lang/fi.json
+++ b/plugins/CoreAdminHome/lang/fi.json
@@ -61,6 +61,7 @@
"PluginSettingReadNotAllowed": "Et voi lukea asetusta \"%1$s\" lisäosasta \"%2$s\"",
"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",
+ "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.",
"TrackAGoal": "Seuraa tavoitetta",
diff --git a/plugins/CoreAdminHome/lang/it.json b/plugins/CoreAdminHome/lang/it.json
index 00fb1062fa..d378bfd5e8 100644
--- a/plugins/CoreAdminHome/lang/it.json
+++ b/plugins/CoreAdminHome/lang/it.json
@@ -26,9 +26,11 @@
"JSTracking_CampaignNameParam": "Parametro Nome Campagna",
"JSTracking_CodeNoteBeforeClosingHead": "Assicurati che questo codice sia presente in ogni pagina del tuo sito. Ti raccomandiamo di incollarlo subito prima del tag %1$s di chiusura.",
"JSTracking_CustomCampaignQueryParam": "Utilizza i nomi dei parametri di query personalizzati per il nome della campagna e parola chiave",
+ "JSTracking_CrossDomain": "Per impostazione predefinita, l'ID visitatore che identifica un visitatore unico è memorizzato in un primo gruppo di cookies del browser al quale si può accedere solamente dalle pagine che si trovano nello stesso dominio. Abilitando i collegamenti cross domain, potrai tracciare tutte le azioni e le pagine viste di un determinato visitatore nell'ambito della stessa visita, anche quando esso visita le pagine di diversi domini. Quando un utente clicca su un link a un URL di uno degli alis del tuo sito web, verrà aggiunto un parametro URL pk_vid appresso all'ID Visitatore.",
"JSTracking_CustomCampaignQueryParamDesc": "Nota: %1$sPiwik rivelerà automaticamente i parametri di Google Analytics.%2$s",
"JSTracking_DisableCookies": "Disabilita tutti i cookies di tracking",
"JSTracking_DisableCookiesDesc": "Disabilita tutti i cookies proprietari. I cookies esistenti di Piwik verranno cancellati alla prossima visualizzazione della pagina.",
+ "JSTracking_EnableCrossDomainLinking": "Abilita i collegamenti cross domain",
"JSTracking_EnableDoNotTrack": "Abilita l'individuazione DoNotTrack lato client",
"JSTracking_EnableDoNotTrack_AlreadyEnabled": "Nota: È stato abilitato il supporto DoNotTrack lato server, così questa opzione non avrà effetto.",
"JSTracking_EnableDoNotTrackDesc": "In questo modo le richieste di tracciamento non verranno inviate se il visitatore non vuole essere tracciato.",
diff --git a/plugins/CoreHome/angularjs/quick-access/quick-access.directive.js b/plugins/CoreHome/angularjs/quick-access/quick-access.directive.js
index b71a468a7d..7161883e75 100644
--- a/plugins/CoreHome/angularjs/quick-access/quick-access.directive.js
+++ b/plugins/CoreHome/angularjs/quick-access/quick-access.directive.js
@@ -260,6 +260,9 @@
};
Mousetrap.bind('f', function(event) {
+ if (event.altKey) {
+ return;
+ }
if (event.preventDefault) {
event.preventDefault();
} else {
diff --git a/plugins/CoreHome/angularjs/siteselector/siteselector.controller.js b/plugins/CoreHome/angularjs/siteselector/siteselector.controller.js
index f872818897..8974576246 100644
--- a/plugins/CoreHome/angularjs/siteselector/siteselector.controller.js
+++ b/plugins/CoreHome/angularjs/siteselector/siteselector.controller.js
@@ -39,6 +39,9 @@
};
Mousetrap.bind('w', function(event) {
+ if (event.altKey) {
+ return;
+ }
if (event.preventDefault) {
event.preventDefault();
} else {
diff --git a/plugins/CoreHome/javascripts/broadcast.js b/plugins/CoreHome/javascripts/broadcast.js
index 2c6fad9eb5..7117a0fb69 100644
--- a/plugins/CoreHome/javascripts/broadcast.js
+++ b/plugins/CoreHome/javascripts/broadcast.js
@@ -237,20 +237,16 @@ var broadcast = {
},
/**
- * propagateAjax -- update hash values then make ajax calls.
- * example :
- * 1) <a href="javascript:broadcast.propagateAjax('module=Referrers&action=getKeywords')">View keywords report</a>
- * 2) Main menu li also goes through this function.
+ * Returns the current hash with updated parameters that were provided in ajaxUrl
*
- * Will propagate your new value into the current hash string and make ajax calls.
+ * Parameters like idGoal and idDashboard will be automatically reset if the won't be relevant anymore
*
- * NOTE: this method will only make ajax call and replacing main content.
+ * NOTE: this method does not issue any ajax call, but returns the hash instead
*
* @param {string} ajaxUrl querystring with parameters to be updated
- * @param {boolean} [disableHistory] the hash change won't be available in the browser history
- * @return {void}
+ * @return {string} current hash with updated parameters
*/
- buildReportingUrl: function (ajaxUrl, disableHistory) {
+ buildReportingUrl: function (ajaxUrl) {
// available in global scope
var currentHashStr = broadcast.getHash();
diff --git a/plugins/CoreHome/javascripts/calendar.js b/plugins/CoreHome/javascripts/calendar.js
index fdf58f2cf0..c026bc8da5 100644
--- a/plugins/CoreHome/javascripts/calendar.js
+++ b/plugins/CoreHome/javascripts/calendar.js
@@ -699,6 +699,9 @@
});
Mousetrap.bind('d', function(event) {
+ if (event.altKey) {
+ return;
+ }
if (event.preventDefault) {
event.preventDefault();
} else {
diff --git a/plugins/CoreHome/javascripts/uiControl.js b/plugins/CoreHome/javascripts/uiControl.js
index cd2d985ea4..29b8f08711 100644
--- a/plugins/CoreHome/javascripts/uiControl.js
+++ b/plugins/CoreHome/javascripts/uiControl.js
@@ -22,7 +22,7 @@
throw new Error("no element passed to UIControl constructor");
}
- this._controlId = UIControl._controls.length;
+ this._controlId = UIControl._nextControlId++;
UIControl._controls.push(this);
var $element = this.$element = $(element);
@@ -45,6 +45,11 @@
UIControl._controls = [];
/**
+ * Specifies the next unique control ID to use.
+ */
+ UIControl._nextControlId = 0;
+
+ /**
* Utility method that will clean up all piwik UI controls whose elements are not attached
* to the DOM.
*
@@ -53,6 +58,9 @@
*/
UIControl.cleanupUnusedControls = function () {
var controls = UIControl._controls;
+ // reset _controls; we will repopulate it with only active
+ // controls in the loop below.
+ var activeControls = UIControl._controls = [];
for (var i = 0; i != controls.length; ++i) {
var control = controls[i];
@@ -67,6 +75,9 @@
throw new Error("Error: " + control.constructor.name + "'s destroy method does not call " +
"UIControl.destroy. You may have a memory leak.");
}
+ } else {
+ // Control is still active / used.
+ activeControls.push(control);
}
}
};
diff --git a/plugins/CoreHome/javascripts/zen-mode.js b/plugins/CoreHome/javascripts/zen-mode.js
index 13d5015419..145e4d4e88 100644
--- a/plugins/CoreHome/javascripts/zen-mode.js
+++ b/plugins/CoreHome/javascripts/zen-mode.js
@@ -15,6 +15,9 @@ $(function () {
}
Mousetrap.bind('z', function (event) {
+ if (event.altKey) {
+ return;
+ }
zenMode = !zenMode;
$cookies.put('zenMode', zenMode ? '1' : '0');
updateZenMode();
diff --git a/plugins/CoreHome/lang/es.json b/plugins/CoreHome/lang/es.json
index 3a93c1f008..c3befac55b 100644
--- a/plugins/CoreHome/lang/es.json
+++ b/plugins/CoreHome/lang/es.json
@@ -7,7 +7,7 @@
"ClickToEditX": "Clic para editar %s",
"ClickToSeeFullInformation": "Haz clic para ver la información completa",
"CloseSearch": "Cerrar búsqueda",
- "CloseWidgetDirections": "Puede cerrar este reproductor haciendo clic en el icono \"X\" en la parte superior del mismo.",
+ "CloseWidgetDirections": "Puede cerrar este módulo haciendo clic en el icono \"X\" de la parte superior del mismo.",
"ChooseX": "Elige %1$s",
"DataForThisReportHasBeenPurged": "Los datos para este informe tienen más de %s meses de antigüedad y han sido purgados.",
"DataTableExcludeAggregateRows": "Mostrar filas acumuladas %s Ocultarlas",
diff --git a/plugins/CoreHome/lang/fi.json b/plugins/CoreHome/lang/fi.json
index dffae61873..09f0c2d4d6 100644
--- a/plugins/CoreHome/lang/fi.json
+++ b/plugins/CoreHome/lang/fi.json
@@ -47,6 +47,7 @@
"ClickRowToExpandOrContract": "Klikkaa tätä riviä avataksesi tai sulkeaksesi alataulukon.",
"UndoPivotBySubtable": "Tämä raportti on käännetty %s:llä. Kumoa kääntö",
"PivotBySubtable": "Tämä raportti ei ole käännetty %1$s:n mukaan. Käännetty %2$s:llä.",
+ "SystemSummaryNActivatedPlugins": "%d lisäosaa käytössä",
"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/it.json b/plugins/CoreHome/lang/it.json
index ea89211a76..520a633e9c 100644
--- a/plugins/CoreHome/lang/it.json
+++ b/plugins/CoreHome/lang/it.json
@@ -16,6 +16,7 @@
"Default": "predefinito",
"DonateCall1": "Piwik non costerà mai nulla a voi per il suo utilizzo, ma ciò non significa che non costi nulla a noi svilupparlo.",
"DonateCall2": "Piwik ha bisogno del vostro costante supporto per crescere e prosperare.",
+ "DonateCall3": "Se ritieni che Piwik abbia portato alla tua attività un significativo valore aggiunto, %1$sconsidera di fare una donazione%2$s o %3$sdi acquistare una funzionalità premium%4$s. Anche gli spiccioli aiutano.",
"DonateFormInstructions": "Fai clic sul cursore per selezionare una somma, quindi fai clic su sottoscrivi per donare.",
"ExcludeRowsWithLowPopulation": "Tutte le righe sono visualizzate %s Escludi quelle scarsamente popolate",
"ExternalHelp": "Aiuto (apri in una nuova scheda)",
@@ -66,6 +67,7 @@
"Segments": "Segmenti",
"OneClickUpdateNotPossibleAsMultiServerEnvironment": "L'aggiornamento in un click non è disponibile se stai utilizzando Piwik con server multipli. Si prega di scaricare l'ultima versione da %1$s per procedere.",
"AdblockIsMaybeUsed": "Se stai utilizzando un plugin di blocco della pubblicità, disabilitalo per questo sito, per essere sicuro che Piwik lavori senza problemi.",
- "ChangeCurrentWebsite": "Scegli un sito, attualmente è selezionato: %s"
+ "ChangeCurrentWebsite": "Scegli un sito, attualmente è selezionato: %s",
+ "LeadingAnalyticsPlatformRespectsYourPrivacy": "La piattaforma gratuita di analisi web che rispetta la tua privacy."
}
} \ No newline at end of file
diff --git a/plugins/CoreHome/templates/_donate.twig b/plugins/CoreHome/templates/_donate.twig
index c4de056774..fff06f2cc1 100755
--- a/plugins/CoreHome/templates/_donate.twig
+++ b/plugins/CoreHome/templates/_donate.twig
@@ -5,7 +5,7 @@
{% else %}
<p>{{ 'CoreHome_DonateCall1'|translate }}</p>
<p><strong>{{ 'CoreHome_DonateCall2'|translate }}</strong></p>
- <p>{{ 'CoreHome_DonateCall3'|translate('<strong>','</strong>', '<a target="_blank" rel="nofollow" href="https://plugins.piwik.org/premium"><strong>', '</strong></a>')|raw }}</p>
+ <p>{{ 'CoreHome_DonateCall3'|translate('<strong>','</strong>', '<a target="_blank" rel="nofollow" href="https://piwik.org/recommends/premium-plugins/"><strong>', '</strong></a>')|raw }}</p>
{% endif %}
</div>
diff --git a/plugins/CorePluginsAdmin/Controller.php b/plugins/CorePluginsAdmin/Controller.php
index 13872a3793..d2b0b305e4 100644
--- a/plugins/CorePluginsAdmin/Controller.php
+++ b/plugins/CorePluginsAdmin/Controller.php
@@ -88,6 +88,10 @@ class Controller extends Plugin\ControllerAdmin
static::dieIfPluginsAdminIsDisabled();
Piwik::checkUserHasSuperUserAccess();
+ if (!CorePluginsAdmin::isPluginUploadEnabled()) {
+ throw new \Exception('Plugin upload disabled by config');
+ }
+
$nonce = Common::getRequestVar('nonce', null, 'string');
if (!Nonce::verifyNonce(MarketplaceController::INSTALL_NONCE, $nonce)) {
@@ -219,6 +223,16 @@ class Controller extends Plugin\ControllerAdmin
foreach ($plugins as $pluginName => &$plugin) {
$plugin['isCorePlugin'] = $this->pluginManager->isPluginBundledWithCore($pluginName);
+ $plugin['isOfficialPlugin'] = false;
+
+ if (isset($plugin['info']) && isset($plugin['info']['authors'])) {
+ foreach ($plugin['info']['authors'] as $author) {
+ if (in_array(strtolower($author['name']), array('piwik', 'innocraft'))) {
+ $plugin['isOfficialPlugin'] = true;
+ break;
+ }
+ }
+ }
if (!empty($plugin['info']['description'])) {
$plugin['info']['description'] = $this->translator->translate($plugin['info']['description']);
diff --git a/plugins/CorePluginsAdmin/CorePluginsAdmin.php b/plugins/CorePluginsAdmin/CorePluginsAdmin.php
index df8934519b..d1c0a3fee1 100644
--- a/plugins/CorePluginsAdmin/CorePluginsAdmin.php
+++ b/plugins/CorePluginsAdmin/CorePluginsAdmin.php
@@ -36,6 +36,11 @@ class CorePluginsAdmin extends Plugin
return (bool) Config::getInstance()->General['enable_plugins_admin'];
}
+ public static function isPluginUploadEnabled()
+ {
+ return (bool) Config::getInstance()->General['enable_plugin_upload'];
+ }
+
public function getJsFiles(&$jsFiles)
{
$jsFiles[] = "libs/bower_components/jQuery.dotdotdot/src/js/jquery.dotdotdot.min.js";
diff --git a/plugins/CorePluginsAdmin/angularjs/form-field/form-field.directive.html b/plugins/CorePluginsAdmin/angularjs/form-field/form-field.directive.html
index 7b2ce74430..1fca1b63fe 100644
--- a/plugins/CorePluginsAdmin/angularjs/form-field/form-field.directive.html
+++ b/plugins/CorePluginsAdmin/angularjs/form-field/form-field.directive.html
@@ -21,7 +21,7 @@
<span ng-show="formField.defaultValue && formField.uiControl != 'checkbox' && formField.uiControl != 'radio'">
<br />
{{ 'General_Default'|translate }}:
- <span>{{formField.defaultValue|limitTo:50}}</span>
+ <span>{{formField.defaultValuePretty|limitTo:50}}</span>
</span>
</div>
</div>
diff --git a/plugins/CorePluginsAdmin/angularjs/form-field/form-field.directive.js b/plugins/CorePluginsAdmin/angularjs/form-field/form-field.directive.js
index f3d9680819..821404e9e2 100644
--- a/plugins/CorePluginsAdmin/angularjs/form-field/form-field.directive.js
+++ b/plugins/CorePluginsAdmin/angularjs/form-field/form-field.directive.js
@@ -244,11 +244,34 @@
return field.availableValues;
}
+ function formatPrettyDefaultValue(defaultValue, availableOptions) {
+
+ if (!angular.isArray(availableOptions)) {
+ return defaultValue;
+ }
+
+ var prettyValues = [];
+
+ if (!angular.isArray(defaultValue)) {
+ defaultValue = [defaultValue];
+ }
+
+ angular.forEach(availableOptions, function (value, key) {
+ if (defaultValue.indexOf(value.key) !== -1) {
+ prettyValues.push(value.value);
+ }
+ });
+
+ return prettyValues.join(', ');
+ }
+
return function (scope, element, attrs) {
var field = scope.piwikFormField;
+ var defaultValue = field.defaultValue;
+
if (angular.isArray(field.defaultValue)) {
- field.defaultValue = field.defaultValue.join(',');
+ field.defaultValue = defaultValue.join(',');
}
if (field.type === 'boolean') {
@@ -263,6 +286,8 @@
// availableValues and in the watch change availableValues could trigger lots of more watch events
field.availableOptions = formatAvailableValues(field);
+ field.defaultValuePretty = formatPrettyDefaultValue(defaultValue, field.availableOptions);
+
field.showField = true;
var inlineHelpNode;
diff --git a/plugins/CorePluginsAdmin/angularjs/plugins/plugin-filter.directive.js b/plugins/CorePluginsAdmin/angularjs/plugins/plugin-filter.directive.js
index df77ee5d7f..6e5a335392 100644
--- a/plugins/CorePluginsAdmin/angularjs/plugins/plugin-filter.directive.js
+++ b/plugins/CorePluginsAdmin/angularjs/plugins/plugin-filter.directive.js
@@ -48,7 +48,8 @@
updateNumberOfMatchingPluginsInFilter('[data-filter-origin="all"]', 'all', filterStatus);
updateNumberOfMatchingPluginsInFilter('[data-filter-origin="core"]', 'core', filterStatus);
- updateNumberOfMatchingPluginsInFilter('[data-filter-origin="noncore"]', 'noncore', filterStatus);
+ updateNumberOfMatchingPluginsInFilter('[data-filter-origin="official"]', 'official', filterStatus);
+ updateNumberOfMatchingPluginsInFilter('[data-filter-origin="thirdparty"]', 'thirdparty', filterStatus);
}
function updateNumberOfMatchingPluginsInFilter(selectorFilterToUpdate, filterOrigin, filterStatus)
diff --git a/plugins/CorePluginsAdmin/lang/en.json b/plugins/CorePluginsAdmin/lang/en.json
index 1fe5a78fa9..5247ae19d9 100644
--- a/plugins/CorePluginsAdmin/lang/en.json
+++ b/plugins/CorePluginsAdmin/lang/en.json
@@ -37,6 +37,7 @@
"NoPluginSettings": "No plugin settings that can be configured",
"Origin": "Origin",
"OriginCore": "Core",
+ "OriginOfficial": "Official",
"OriginThirdParty": "Third-party",
"PluginHomepage": "Plugin Homepage",
"PluginNotCompatibleWith": "%1$s plugin is not compatible with %2$s.",
diff --git a/plugins/CorePluginsAdmin/lang/fi.json b/plugins/CorePluginsAdmin/lang/fi.json
index 1915fde78b..28fa58cd36 100644
--- a/plugins/CorePluginsAdmin/lang/fi.json
+++ b/plugins/CorePluginsAdmin/lang/fi.json
@@ -1,15 +1,15 @@
{
"CorePluginsAdmin": {
"ActionUninstall": "Poista",
- "Activate": "Aktivoi",
- "Activated": "Aktivoitu",
+ "Activate": "Ota käyttöön",
+ "Activated": "Käytössä",
"Active": "Käytössä",
"Activity": "Toiminnot",
"AuthorHomepage": "Tekijän kotisivu",
"Changelog": "Muutokset",
"ChangeSettingsPossible": "Voit muuttaa tämän liitännäisen %1$sasetuksia%2$s",
"CorePluginTooltip": "Standardiliitännäisillä ei ole versioita, koska ne ovat Piwikin levittämiä.",
- "Deactivate": "Poistettu käytöstä",
+ "Deactivate": "Poista käytöstä",
"DoMoreContactPiwikAdmins": "Asentaaksesi uuden liitännäisen tai uuden teeman, ota yhteyttä Piwikin ylläpitäjiin.",
"History": "Historia",
"Inactive": "Ei käytössä",
@@ -20,7 +20,7 @@
"InstallNewThemes": "Asenna uusia teemoja",
"LicenseHomepage": "Lisenssisivu",
"PluginsExtendPiwik": "Lisäosilla voi laajentaa ja parantaa Piwikin toiminnallisuutta.",
- "OncePluginIsInstalledYouMayActivateHere": "Kun lisäosa on asennettu, voit aktivoida ja poistaa käytöstä sen täällä.",
+ "OncePluginIsInstalledYouMayActivateHere": "Kun lisäosa on asennettu, voit ottaa sen käyttöön tai poistaa käytöstä täällä.",
"MenuPlatform": "Sovellusalusta",
"MissingRequirementsNotice": "Päivitä %1$s %2$s uudempaan versioon, %1$s %3$s vaaditaan.",
"NoZipFileSelected": "Ole hyvä ja valitse ZIP-tiedosto.",
@@ -33,6 +33,7 @@
"PluginNotWorkingAlternative": "Jos olet käyttänyt tätä liitännäistä, voit ehkä löytää uudemman version kauppatorilta. Muussa tapauksessa haluat ehkä poistaa liitännäisen.",
"PluginRequirement": "%1$s vaatii %2$s:n.",
"PluginsManagement": "Lisäosien hallinta",
+ "PluginActivated": "Lisäosa otettu käyttöön",
"Status": "Tila",
"SuccessfullyActicated": "<strong>%s<\/strong> on aktivoitu onnistuneesti.",
"TeaserExtendPiwik": "Laajenna Piwikiä liitännäisillä ja teemoilla",
diff --git a/plugins/CorePluginsAdmin/templates/macros.twig b/plugins/CorePluginsAdmin/templates/macros.twig
index 6e6f3c7115..ffdff511f7 100644
--- a/plugins/CorePluginsAdmin/templates/macros.twig
+++ b/plugins/CorePluginsAdmin/templates/macros.twig
@@ -76,7 +76,8 @@
<strong>{{ 'CorePluginsAdmin_Origin'|translate }}</strong>
<a data-filter-origin="all" href="#" class="active">{{ 'General_All'|translate }}<span class="counter"></span></a> |
<a data-filter-origin="core" href="#">{{ 'CorePluginsAdmin_OriginCore'|translate }}<span class="counter"></span></a> |
- <a data-filter-origin="noncore" href="#">{{ 'CorePluginsAdmin_OriginThirdParty'|translate }}<span class="counter"></span></a>
+ <a data-filter-origin="official" href="#">{{ 'CorePluginsAdmin_OriginOfficial'|translate }}<span class="counter"></span></a> |
+ <a data-filter-origin="thirdparty" href="#">{{ 'CorePluginsAdmin_OriginThirdParty'|translate }}<span class="counter"></span></a>
</span>
<span class="status">
@@ -114,7 +115,7 @@
{% for name,plugin in pluginsInfo %}
{% set isDefaultTheme = isTheme and name == 'Morpheus' %}
{% if (plugin.alwaysActivated is defined and not plugin.alwaysActivated) or isTheme %}
- <tr {% if plugin.activated %}class="active-plugin"{% else %}class="inactive-plugin"{% endif %} data-filter-status="{% if plugin.activated %}active{% else %}inactive{% endif %}" data-filter-origin="{% if plugin.isCorePlugin %}core{% else %}noncore{% endif %}">
+ <tr {% if plugin.activated %}class="active-plugin"{% else %}class="inactive-plugin"{% endif %} data-filter-status="{% if plugin.activated %}active{% else %}inactive{% endif %}" data-filter-origin="{% if plugin.isCorePlugin %}core{% elseif plugin.isOfficialPlugin %}official{% else %}thirdparty{% endif %}">
<td class="name">
<a name="{{ name|e('html_attr') }}"></a>
{% if not plugin.isCorePlugin and name in marketplacePluginNames -%}
diff --git a/plugins/CustomAlerts b/plugins/CustomAlerts
-Subproject cd9121dd4671f19783f6f7b576f2f2a1b5c4898
+Subproject 4ff23fa2d64d9e9dfc7d7f74f96ecc29881f97c
diff --git a/plugins/CustomDimensions b/plugins/CustomDimensions
-Subproject 3460c802ad121db9ab9e8e70bc68733f1f109f7
+Subproject b4170a796a533b5d7fb8b78411ee83b0ffe082d
diff --git a/plugins/Dashboard/lang/es.json b/plugins/Dashboard/lang/es.json
index a357f09051..4fb8c64829 100644
--- a/plugins/Dashboard/lang/es.json
+++ b/plugins/Dashboard/lang/es.json
@@ -1,35 +1,35 @@
{
"Dashboard": {
- "AddAWidget": "Agregar un reproductor",
- "AddPreviewedWidget": "Añade el reproductor al tablero",
+ "AddAWidget": "Añadir un módulo",
+ "AddPreviewedWidget": "Añade el módulo al panel de control",
"ChangeDashboardLayout": "Modificar distribución del tablero",
"CopyDashboardToUser": "Copiar tablero al usuario",
"CreateNewDashboard": "Crear nuevo tablero",
"Dashboard": "Tablero",
"DashboardCopied": "Actual tablero copiado exitosamente al usuario seleccionado.",
- "DashboardEmptyNotification": "Su Tablero no contiene ningún reproductor. Comience agregando alguno o sólo reajuste el tablero a los reproductores seleccionados por defecto.",
+ "DashboardEmptyNotification": "Su panel de control no contiene ningún módulo. Comience añadiendo alguno o restablezca el panel de control con la selección de módulos por defecto.",
"DashboardName": "Nombre del tablero:",
"DashboardOf": "Tablero de %s",
- "DefaultDashboard": "Tablero por defecto - Usando la selección de reproductores y disposición de columnas por defecto",
- "DeleteWidgetConfirm": "¿Está seguro que desea borrar este reproductor de su tablero?",
- "EmptyDashboard": "Tablero vacío - Elija sus reproductores preferidos",
- "LoadingWidget": "Cargando reproductor, por favor espere...",
+ "DefaultDashboard": "Panel de control por defecto - Usando la selección por defecto de módulos y la disposición de columnas",
+ "DeleteWidgetConfirm": "¿Está seguro que desea borrar este módulo de su panel de control?",
+ "EmptyDashboard": "Panel de control vacío - Elija sus módulos preferidos",
+ "LoadingWidget": "Cargando módulo, por favor espere...",
"ManageDashboard": "Configurar el tablero",
"Maximise": "Maximizar",
"Minimise": "Minimizar",
"NotUndo": "No podrá deshacer esta operación.",
- "PluginDescription": "Su tablero de análisis de internet. Personalize su tablero agregando nuevos reproductores, arrastre y suéltelos; cambie la disposición de las columnas del tablero. Cada usuario puede administrar su propio tablero personalizado.",
+ "PluginDescription": "Su panel de control. Personalice su tablero añadiendo nuevos módulos arrastrándolos y soltándolos; cambie la disposición de las columnas del panel de control. Cada usuario puede administrar su propio panel de control personalizado.",
"RemoveDashboard": "Elimina el tablero",
"RemoveDashboardConfirm": "¿Está seguro que desea eliminar el tablero \"%s\"?",
"RemoveDefaultDashboardNotPossible": "El tablero predeterminado no puede ser eliminado",
"RenameDashboard": "Renombrar el tablero",
"ResetDashboard": "Reinicia el tablero",
- "ResetDashboardConfirm": "¿Realmente desea reiniciar la distribución del tablero y regresar a la selección de reproductores por defecto?",
+ "ResetDashboardConfirm": "¿Realmente desea restablecer la distribución del panel de control y regresar a la selección de módulos por defecto ?",
"SelectDashboardLayout": "Por favor seleccione su nueva distribución de tablero",
- "SelectWidget": "Selecciona el reproductor para añadir en el tablero",
- "SetAsDefaultWidgets": "Establecer como selección de reproductores por defecto",
+ "SelectWidget": "Selecciona el módulo para añadirlo al panel de control",
+ "SetAsDefaultWidgets": "Establecer como selección de módulos por defecto",
"SetAsDefaultWidgetsConfirm": "¿Está seguro que desea establecer esta selección y disposición de tablero como la plantilla de tablero por defecto?",
- "SetAsDefaultWidgetsConfirmHelp": "Esta selección de reproductores y disposición de columnas del tablero será usada cuando un usuario cree un nuevo tablero o cuando sea usada la función \"%s\".",
+ "SetAsDefaultWidgetsConfirmHelp": "Esta selección de módulos y disposición de columnas del panel de control será usada cuando un usuario cree un nuevo panel de control o cuando se use la función \"%s\".",
"TopLinkTooltip": "Ver los reportes de Análisis de internet para %s.",
"WidgetNotFound": "Reproductor no encontrado",
"WidgetPreview": "Previsualización del reproductor"
diff --git a/plugins/Dashboard/lang/pl.json b/plugins/Dashboard/lang/pl.json
index 4bb3823e2b..8bb1576dfa 100644
--- a/plugins/Dashboard/lang/pl.json
+++ b/plugins/Dashboard/lang/pl.json
@@ -1,36 +1,37 @@
{
"Dashboard": {
- "AddAWidget": "Dodaj Widżet",
- "AddPreviewedWidget": "Dodaj obejrzane widżety do tablicy",
- "ChangeDashboardLayout": "Zmień wygląd tablicy analiz",
- "CopyDashboardToUser": "Kopiuj panel do użytkownika",
- "CreateNewDashboard": "Utwórz nową tablicę analiz",
- "Dashboard": "Tablica statystyk",
- "DashboardCopied": "Aktualny panel z powodzeniem można skopiować do wybranego użytkownika.",
- "DashboardEmptyNotification": "Twój panel nie zatwiera, żadnych gadżetów. Rozpocznij pracę od dodawania różnych gazetów lub po prostu zresetuj panel, aby przywrócić domyślną sekcję gadżetów.",
- "DashboardName": "Nazwa tablicy analiz:",
- "DashboardOf": "Panel z %s",
- "DefaultDashboard": "Domyślny panel - używa domyślnej sekcji gadżetów i kolumn układu.",
- "DeleteWidgetConfirm": "Czy jesteś pewien, że chcesz usunąć ten widżet z tej tablicy statystyk?",
- "EmptyDashboard": "Pusty panel - wskaż swóje ulubione gadżety",
- "LoadingWidget": "Ładowanie widżetu, proszę czekać...",
- "ManageDashboard": "Zarządzaj tablicami analiz",
+ "AddAWidget": "Dodaj gadżet",
+ "AddPreviewedWidget": "Kliknij, aby dodać gadżet do pulpitu",
+ "ChangeDashboardLayout": "Zmień układ pulpitu",
+ "CopyDashboardToUser": "Kopiuj pulpit do użytkownika",
+ "CreateNewDashboard": "Utwórz nowy pulpit",
+ "Dashboard": "Pulpit",
+ "DashboardCopied": "Bieżący panel został pomyślnie skopiowany do wybranego użytkownika.",
+ "DashboardEmptyNotification": "Twój pulpit nie zawiera żadnych gadżetów. Rozpocznij pracę od dodania kilku gadżetów, lub po prostu zresetuj pulpit, aby przywrócić domyślny zestaw gadżetów.",
+ "DashboardName": "Nazwa pulpitu:",
+ "DashboardOf": "Pulpit %s",
+ "DefaultDashboard": "Domyślny pulpit - używa domyślnego zestawu gadżetów i układu kolumn.",
+ "DeleteWidgetConfirm": "Czy jesteś pewien, że chcesz usunąć ten gadżet z pulpitu?",
+ "EmptyDashboard": "Pusty pulpit - wskaż swóje ulubione gadżety",
+ "LoadingWidget": "Ładowanie gadżetu, proszę czekać...",
+ "ManageDashboard": "Zarządzaj pulpitem",
"Maximise": "Maksymalizuj",
- "Minimise": "Minimalizacja",
+ "Minimise": "Minimalizuj",
"NotUndo": "Nie będziesz mógł cofnąć tej operacji.",
- "PluginDescription": "Twoja tablica statystyk. Dostosuj swoją tablicę poprzez dodanie nowych widżetów, przeciągaj i opuszczaj je wokoło, zmień także wygląd kolumn. Każdy użytkownik może zarządzać swoją własną tablicą.",
- "RemoveDashboard": "Usuń tablicę analiz",
- "RemoveDashboardConfirm": "Czy jesteś pewny, że chcesz usunąć panel \"%s\"?",
- "RenameDashboard": "Zmień nawę tablicy analiz",
- "ResetDashboard": "Resetuj tablice analiz",
- "ResetDashboardConfirm": "Czy na pewno chcesz zresetować układ tablicy analiz?",
- "SelectDashboardLayout": "Proszę wybrać swój nowy wygląd tablicy analiz",
- "SelectWidget": "Wybierz widżet który chcesz dodać do tablicy statystyk",
- "SetAsDefaultWidgets": "Ustaw wybrane gadżety jako domyślne",
- "SetAsDefaultWidgetsConfirm": "Czy na pewno chcesz, aby ustawić wybór i układ gadżetów na bieżącym panelu jako domyślny szablon panelu ?",
- "SetAsDefaultWidgetsConfirmHelp": "Ta sekcja gadżetów i układ kolumn będzie używany, gdy jakikolwiek użytkownik stworzy nowy panel albo gdy funkcja \"%s\" jest w użyciu.",
- "TopLinkTooltip": "Podgląd raportów Web Analytics %s.",
- "WidgetNotFound": "Widżet nie został znaleziony",
- "WidgetPreview": "Podgląd widżetu"
+ "PluginDescription": "Twoja tablica statystyk. Dostosuj swoją tablicę poprzez dodanie nowych gadżetów, przeciągaj i opuszczaj je wokoło, zmień także układ kolumn. Każdy użytkownik może zarządzać swoją własną tablicą.",
+ "RemoveDashboard": "Usuń pulpit",
+ "RemoveDashboardConfirm": "Czy jesteś pewny, że chcesz usunąć pulpit \"%s\"?",
+ "RemoveDefaultDashboardNotPossible": "Nie można usunąć domyślnego pulpitu",
+ "RenameDashboard": "Zmień nawę pulpitu",
+ "ResetDashboard": "Resetuj pulpit",
+ "ResetDashboardConfirm": "Czy na pewno chcesz zresetować układ pulpitu?",
+ "SelectDashboardLayout": "Proszę wybrać swój nowy wygląd pulpitu",
+ "SelectWidget": "Wybierz gadżet, który chcesz dodać do pulpitu",
+ "SetAsDefaultWidgets": "Ustaw jako domyślny zestaw gadżetów",
+ "SetAsDefaultWidgetsConfirm": "Czy na pewno chcesz ustawić wybór i układ gadżetów na bieżącym panelu jako domyślny szablon panelu?",
+ "SetAsDefaultWidgetsConfirmHelp": "Ten zestaw gadżetów i układ kolumn będzie używany, gdy jakikolwiek użytkownik stworzy nowy panel, albo gdy funkcja \"%s\" jest w użyciu.",
+ "TopLinkTooltip": "Podgląd raportów Web Analytics dla %s.",
+ "WidgetNotFound": "Gadżet nie został znaleziony",
+ "WidgetPreview": "Podgląd gadżetu"
}
} \ No newline at end of file
diff --git a/plugins/DevicesDetection/lang/fi.json b/plugins/DevicesDetection/lang/fi.json
index 161ed55866..90b76ac4b7 100644
--- a/plugins/DevicesDetection/lang/fi.json
+++ b/plugins/DevicesDetection/lang/fi.json
@@ -8,6 +8,7 @@
"BrowserVersions": "Selainversiot",
"Camera": "Kamera",
"CarBrowser": "Auton selain",
+ "Software": "Ohjelmisto",
"ColumnBrowser": "Selain",
"ColumnOperatingSystem": "Käyttöjärjestelmä",
"Console": "Konsoli",
diff --git a/plugins/Diagnostics/Diagnostic/PhpFunctionsCheck.php b/plugins/Diagnostics/Diagnostic/PhpFunctionsCheck.php
index 26e30326be..736fc73877 100644
--- a/plugins/Diagnostics/Diagnostic/PhpFunctionsCheck.php
+++ b/plugins/Diagnostics/Diagnostic/PhpFunctionsCheck.php
@@ -59,6 +59,7 @@ class PhpFunctionsCheck implements Diagnostic
'debug_backtrace',
'create_function',
'eval',
+ 'hash',
'gzcompress',
'gzuncompress',
'pack',
@@ -101,6 +102,7 @@ class PhpFunctionsCheck implements Diagnostic
'debug_backtrace' => 'Installation_SystemCheckDebugBacktraceHelp',
'create_function' => 'Installation_SystemCheckCreateFunctionHelp',
'eval' => 'Installation_SystemCheckEvalHelp',
+ 'hash' => 'Installation_SystemCheckHashHelp',
'gzcompress' => 'Installation_SystemCheckGzcompressHelp',
'gzuncompress' => 'Installation_SystemCheckGzuncompressHelp',
'pack' => 'Installation_SystemCheckPackHelp',
diff --git a/plugins/Ecommerce/lang/es.json b/plugins/Ecommerce/lang/es.json
index 1f39ffe235..d79a558766 100644
--- a/plugins/Ecommerce/lang/es.json
+++ b/plugins/Ecommerce/lang/es.json
@@ -3,6 +3,11 @@
"PluginDescription": "Comercio electrónico le permite rastrear cuando los usuarios agregan productos a su carrito y cuando se transforman en una venta electrónica. También rastrea productos y visualiza las categorías de producto y sus carritos abandonados.",
"Sales": "Ventas",
"SalesBy": "Ventas por %s",
- "SalesAdjective": "Ventas %s"
+ "SalesAdjective": "Ventas %s",
+ "LifeTimeValue": "Ingresos atribuidos al cliente durante el tiempo que fue cliente: \"Ecommerce Life Time Value\"",
+ "LifeTimeValueDescription": "Ingresos totales por Ecommerce atribuidos a este cliente a lo largo de todas las visitas: la suma de los ingresos de todas las compras para el visitante %s",
+ "VisitorProfileLTV": "Generó un Life Time Revenue de %1$s.",
+ "VisitorProfileItemsAndOrders": "Compró %1$s artículos en %2$s compras ecommerce.",
+ "VisitorProfileAbandonedCartSummary": "Abandonó %1$s carritos de compra que incluían %2$s artículos por un valor total de %3$s."
}
} \ No newline at end of file
diff --git a/plugins/Ecommerce/lang/it.json b/plugins/Ecommerce/lang/it.json
index 2a4fb97b24..918fe2cbd5 100644
--- a/plugins/Ecommerce/lang/it.json
+++ b/plugins/Ecommerce/lang/it.json
@@ -3,6 +3,11 @@
"PluginDescription": "Ecommerce ti consente di tracciare quando gli utenti aggiungono al carrello dei prodotti, e quando questi vengono convertiti in una vendita. Traccia anche le visioni dei prodotti, delle categorie di prodotti e i carrelli abbandonati.",
"Sales": "Vendite",
"SalesBy": "Vendite per %s",
- "SalesAdjective": "Vendite %s"
+ "SalesAdjective": "Vendite %s",
+ "LifeTimeValue": "Incasso Complessivo Ecommerce",
+ "LifeTimeValueDescription": "Ricavo totale Ecommerce attribuito a questo cliente durante tutte le sue visite: la somma degli incassi di tutti gli ordini commerce per l'ID Visitatore %s.",
+ "VisitorProfileLTV": "Generato un Incasso Complessivo di %1$s.",
+ "VisitorProfileItemsAndOrders": "Acquistati %1$s articoli in %2$s ordini ecommerce.",
+ "VisitorProfileAbandonedCartSummary": "Abbandonati %1$s carrelli contenenti %2$s articoli per un valore di %3$s."
}
} \ No newline at end of file
diff --git a/plugins/Events/lang/es.json b/plugins/Events/lang/es.json
index b602256a4e..0ef8fbe081 100644
--- a/plugins/Events/lang/es.json
+++ b/plugins/Events/lang/es.json
@@ -15,7 +15,7 @@
"EventsWithValue": "Eventos con un valor",
"EventsWithValueDocumentation": "Numero de eventos en los que se estableció un valor",
"EventValue": "Valor del evento",
- "EventValueTooltip": "El valor total del evento se compone de la suma de %1$s los valores de los eventos %2$s entre un mínimo de %3$s y un máximo de %4$s.",
+ "EventValueTooltip": "El valor total del evento se compone de la suma de los %1$s valores de los eventos %2$s entre un mínimo de %3$s y un máximo de %4$s.",
"MaxValue": "Valor máximo",
"MaxValueDocumentation": "El valor máximo de este evento",
"MinValue": "Valor mínimo",
diff --git a/plugins/Feedback/lang/es.json b/plugins/Feedback/lang/es.json
index a4e07c8a65..4f4bfef846 100644
--- a/plugins/Feedback/lang/es.json
+++ b/plugins/Feedback/lang/es.json
@@ -3,7 +3,7 @@
"DoYouHaveBugReportOrFeatureRequest": "¿Tienes un error que informar o una nueva característica?",
"HowToCreateTicket": "Por favor, lee las recomendaciones de cómo escribir un buen %1$sinforme de error%2$s o %3$spetición de funcionalidad%4$s. Luego regístrese o inicie sesión en nuestro %5$ssistema de seguimiento de errores%6$s y crea un %7$snuevo tema de discusión%8$s.",
"IWantTo": "Yo quiero:",
- "LearnWaysToParticipate": "Aprende sobre todas las formas de %1$sparticipar%2$s",
+ "LearnWaysToParticipate": "Aprende a cerca de todas las formas de %1$sparticipar%2$s",
"ManuallySendEmailTo": "Por favor envíe su mensaje manualmente a",
"PluginDescription": "Envíe su comentario al equipo de Piwik. ¡Comparte tus ideas y sugerencias para hacer de Piwik la mejor plataforma de analíticas en el mundo!",
"PrivacyClaim": "Piwik respeta su %1$sprivacidad%2$s y le deja controlar todos sus datos.",
@@ -20,11 +20,11 @@
"CommunityHelp": "Ayuda comunitaria",
"ProfessionalHelp": "Ayuda profesional",
"ProfessionalServicesIntro": "Nuestra red mundial de consultores profesionales que brindan asistencia a todos los clientes que hospedan Piwik en su propia infraestructura.",
- "ProfessionalServicesOfferIntro": "¿Qué servicios puede beneficiarse?",
- "ProfessionalServicesReviewPiwikSetup": "Reseña de su instalación Piwik",
+ "ProfessionalServicesOfferIntro": "¿De qué servicios puedes beneficiarte?",
+ "ProfessionalServicesReviewPiwikSetup": "Una reseña de su instalación Piwik",
"ProfessionalServicesOptimizationMaintenance": "Servicios de mantenimiento & optimización Piwik",
"ProfessionalServicesPhoneEmailSupport": "Asistencia por teléfono y correo electrónico",
- "ProfessionalServicesTraining": "Usuario, técnico y entrenamiento del desarrollador",
+ "ProfessionalServicesTraining": "Cursos de usuario, técnico y desarrollador",
"ProfessionalServicesPremiumFeatures": "Funciones premium",
"ProfessionalServicesCustomDevelopment": "Servicios de desarrollo personalizado",
"ProfessionalServicesAnalystConsulting": "Servicios de consultoría de análisis",
diff --git a/plugins/Feedback/templates/index.twig b/plugins/Feedback/templates/index.twig
index b17d13d05f..d90c1caebe 100644
--- a/plugins/Feedback/templates/index.twig
+++ b/plugins/Feedback/templates/index.twig
@@ -63,6 +63,7 @@
<p> &bull; <a rel='noreferrer' target='_blank' href='https://piwik.org/recommends/form-analytics/'>Form Analytics</a>: increase conversions and get better leads from your website forms.</p>
<p> &bull; <a rel='noreferrer' target='_blank' href='https://piwik.org/recommends/media-analytics-website/'>Video and Audio Analytics</a>: powerful insights into how your audience watches your videos and listens to your audio.</p>
<p> &bull; <a rel='noreferrer' target='_blank' href='https://piwik.org/recommends/roll-up-reporting/'>Roll-Up Reporting</a>: aggregate data from multiple websites, apps and shops into a Roll-Up site to gain new insights.</p>
+ <p> &bull; <a rel='noreferrer' target='_blank' href='https://piwik.org/recommends/search-keywords-performance/'>Search Keywords Performance</a>: all keywords searched by your users on Google+Bing+Yahoo into your Piwik reports.</p>
<p> &bull; <a rel='noreferrer' target='_blank' href='https://piwik.org/recommends/activity-log/'>Audit log</a>: better security and problem diagnostic with a detailed audit log of Piwik user activities.</p>
<p> &bull; <a rel='noreferrer' target='_blank' href='https://piwik.org/recommends/white-label/'>White Label</a>: give your clients access to their analytics reports where all Piwik-branded widgets are removed.</p>
<p> &bull; <strong><a rel='noreferrer' target='_blank' href='https://piwik.org/recommends/premium-plugins'>All premium plugins.</a></strong></p>
diff --git a/plugins/Goals/angularjs/manage-goals/manage-goals.controller.js b/plugins/Goals/angularjs/manage-goals/manage-goals.controller.js
index c2eb80eca1..8ef619c310 100644
--- a/plugins/Goals/angularjs/manage-goals/manage-goals.controller.js
+++ b/plugins/Goals/angularjs/manage-goals/manage-goals.controller.js
@@ -157,6 +157,13 @@
};
this.createGoal = function () {
+
+ var parameters = {isAllowed: true};
+ $rootScope.$emit('Goals.initAddGoal', parameters);
+ if (parameters && !parameters.isAllowed) {
+ return;
+ }
+
this.showAddEditForm();
initGoalForm('Goals.addGoal', _pk_translate('Goals_AddGoal'), '', '', 'url', '', 'contains', /*caseSensitive = */false, /*allowMultiple = */'0', '0');
scrollToTop();
diff --git a/plugins/Goals/lang/es.json b/plugins/Goals/lang/es.json
index df39949d25..3b149409d4 100644
--- a/plugins/Goals/lang/es.json
+++ b/plugins/Goals/lang/es.json
@@ -10,7 +10,7 @@
"BestKeywords": "Sus principales palabras clave de conversión son:",
"BestReferrers": "Sus mejores páginas de internet referentes de conversión son:",
"CaseSensitive": "Coincidir mayúsculas y minúsculas",
- "CancelAndReturnToGoals": "Cancelar y %1$svolver a la lista de metas%2$s",
+ "CancelAndReturnToGoals": "Cancelar y %1$svolver a la lista de objetivos%2$s",
"CategoryTextGeneral_Visitors": "Ubicación del usuario",
"CategoryTextReferrers_Referrers": "Referencias",
"CategoryTextVisitsSummary_VisitsSummary": "Atributo del usuario",
@@ -33,7 +33,7 @@
"ColumnVisits": "El número total de visitas, sin importar si el objetivo fue cumplido o no.",
"ColumnVisitsProductDocumentation": "El número de visitas en la página de Producto\/Categoría. Esto también se usa para procesar el ratio de conversión de %s. Esta métrica está en el Informe si el seguimiento del comercio electrónico fue configurado en las páginas de Producto\/Categoría.",
"Contains": "contiene %s",
- "ConversionByTypeReportDocumentation": "Este reporte proporciona información detallada sobre el rendimiento del objetivo (conversiones, ratio de conversión y ingresos por visita) para cada de las categorías disponibles en el panel de la izquierda. %1$s Por favor, haga clic en una de las categorías para ver el informe. %2$s Para más información, lea la %3$sdocumentación sobre Seguimiento de Objetivos en piwik.org%4$s",
+ "ConversionByTypeReportDocumentation": "Este informe proporciona información detallada sobre el rendimiento del objetivo (conversiones, ratio de conversión e ingresos por visita) para cada de las categorías disponibles en el panel de la izquierda. %1$s Por favor, haga clic en una de las categorías para ver el informe. %2$s Para más información, lea la %3$sdocumentación sobre Seguimiento de Objetivos%4$s",
"ConversionRate": "%s tasa de conversión",
"Conversions": "%s conversiones",
"ConversionsDescription": "conversiones",
@@ -69,7 +69,7 @@
"GoalX": "Objetivo %s",
"HelpOneConversionPerVisit": "Si una página que coincide con este objetivo es actualizada o vista más de una vez en una visita, el objetivo solo será convertido la primera vez que la página fue cargada durante la visita.",
"IsExactly": "es exactamente %s",
- "LearnMoreAboutGoalTrackingDocumentation": "Aprender más acerca de %1$sRastrear metas en Piwik%2$s en la documentación de usuario.",
+ "LearnMoreAboutGoalTrackingDocumentation": "Aprender más acerca de %1$sRastrear objetivos en Piwik%2$s en la documentación de usuario.",
"LeftInCart": "%s dejado en el carrito",
"Manually": "manualmente",
"ManuallyTriggeredUsingJavascriptFunction": "Los objetivos son manualmente activados usando la API Javascript trackGoal()",
@@ -102,7 +102,7 @@
"VisitUrl": "Visita a una URL dada (página o grupo de páginas)",
"WhenVisitors": "cuando los visitantes",
"WhereThe": "donde el",
- "WhereVisitedPageManuallyCallsJavascriptTrackerLearnMore": "La página visitada necesita contener una solicitud vía el 'trackGoal' de Javascript (%1$ssaber más%2$s)",
- "YouCanEnableEcommerceReports": "Puede habilitar %1$s para este sitio de internet en la página %2$s."
+ "WhereVisitedPageManuallyCallsJavascriptTrackerLearnMore": "La página visitada necesita contener una llamada al método Javascript 'trackGoal' (%1$ssaber más%2$s)",
+ "YouCanEnableEcommerceReports": "Puede habilitar %1$s para este sitio web en la página %2$s."
}
} \ No newline at end of file
diff --git a/plugins/Goals/lang/fi.json b/plugins/Goals/lang/fi.json
index c90c02f06a..cbcbc6504c 100644
--- a/plugins/Goals/lang/fi.json
+++ b/plugins/Goals/lang/fi.json
@@ -10,6 +10,7 @@
"BestKeywords": "Parhaat hakusanat ovat:",
"BestReferrers": "Parhaat verkkosivuviittaajat ovat:",
"CaseSensitive": "Kokoherkkä",
+ "CategoryTextReferrers_Referrers": "Viittaajat",
"ClickOutlink": "Ulos lähtevän linkin painaminen",
"SendEvent": "Lähetä tapahtuma",
"ColumnAverageOrderRevenueDocumentation": "Keskimääräinen tilauksen arvo (AOV) on tilausten arvon summa jaettuna tilausten lukumäärällä.",
@@ -32,7 +33,7 @@
"Conversions": "%s siirtymää",
"ConversionsOverview": "Siirtymien yleiskatsaus",
"ConversionsOverviewBy": "Tavoitteiden saavuttamisen yleiskatsaus vierailun tyypin mukaan",
- "DaysToConv": "Päiviä tavoiteen saavuttamiseen",
+ "DaysToConv": "Päiviä tavoitteen saavuttamiseen",
"DefaultGoalConvertedOncePerVisit": "(oletus) tavoitteen voi saavuttaa vain kerran per käynti",
"DefaultRevenue": "Tavoitteen oletustuotto on",
"DefaultRevenueHelp": "Esimerkiksi lähetetyn \"Ota yhteyttä\"-lomakkeen arvo voi olla keskimäärin 10€. Piwik auttaa ymmärtämään, miten eri segmentit tuovat rahaa.",
diff --git a/plugins/ImageGraph/lang/es.json b/plugins/ImageGraph/lang/es.json
index e11a85da22..e213f5f341 100644
--- a/plugins/ImageGraph/lang/es.json
+++ b/plugins/ImageGraph/lang/es.json
@@ -1,6 +1,6 @@
{
"ImageGraph": {
- "ColumnOrdinateMissing": "La columna '%1$s' no se encontró en este informe. Intente con alguno de %2$s",
+ "ColumnOrdinateMissing": "La columna '%1$s' no se encontró en este informe. Inténtalo con alguno de %2$s",
"PluginDescription": "Genera bellas imágenes estáticas de gráficos PNG para cualquiera de sus informes de datos."
}
} \ No newline at end of file
diff --git a/plugins/Insights/lang/es.json b/plugins/Insights/lang/es.json
index 314f4e32c8..e8bfcfc416 100644
--- a/plugins/Insights/lang/es.json
+++ b/plugins/Insights/lang/es.json
@@ -1,6 +1,6 @@
{
"Insights": {
- "PluginDescription": "Proporciona información detallada acerca de su tráfico. Estos están disponibles como reproductores del tablero, así como un nuevo icono en los informes que le permiten ver las tendencias más importantes en sus datos.",
+ "PluginDescription": "Proporciona información detallada acerca de su tráfico. Estos detalles están disponibles como módulos del panel de control y como un nuevo icono en los informes que le permite ver las tendencias más importantes en sus datos.",
"ControlComparedToDescription": "Crecimiento comparado con",
"ControlFilterByDescription": "Muestra todos, solo los más activos, nuevos o solo desaparecidos",
"DatePeriodCombinationNotSupported": "No es posible generar estadística para esta combinación de fecha y periodo.",
diff --git a/plugins/Installation/lang/en.json b/plugins/Installation/lang/en.json
index 6e13414628..131b40a2a1 100644
--- a/plugins/Installation/lang/en.json
+++ b/plugins/Installation/lang/en.json
@@ -84,6 +84,7 @@
"SystemCheckGlobHelp": "This built-in function has been disabled on your host. Piwik will attempt to emulate this function but may encounter further security restrictions. Functionality may be impacted.",
"SystemCheckGzcompressHelp": "You need to enable the zlib extension and gzcompress function.",
"SystemCheckGzuncompressHelp": "You need to enable the zlib extension and gzuncompress function.",
+ "SystemCheckHashHelp": "You need to configure and rebuild PHP with hash() support enabled by excluding the option --disable-hash.",
"SystemCheckIconvHelp": "You need to configure and rebuild PHP with \"iconv\" support enabled, --with-iconv.",
"SystemCheckJsonHelp": "The php5-json extension is required for Piwik to read and write JSON data.",
"SystemCheckMailHelp": "Feedback and Lost Password messages will not be sent without mail().",
@@ -144,4 +145,4 @@
"CannotConnectToDb": "Cannot connect to the database",
"CannotConnectToDbResolvingExplanation": "This may be a temporary issue, try %1$srefreshing the page%2$s. If the problem persists please contact your Piwik administrator."
}
-} \ No newline at end of file
+}
diff --git a/plugins/Installation/lang/es.json b/plugins/Installation/lang/es.json
index a7e989ed9d..419de82838 100644
--- a/plugins/Installation/lang/es.json
+++ b/plugins/Installation/lang/es.json
@@ -36,9 +36,9 @@
"NfsFilesystemWarning": "Su servidor está utilizando un sistema de archivos NFS.",
"NfsFilesystemWarningSuffixAdmin": "Esto significa que Piwik será extremadamente lento cuando se utilice sesiones basadas en archivos.",
"NfsFilesystemWarningSuffixInstall": "Utilizando sesiones basadas en archivos sobre NFS es extremadamente lento, por lo tanto Piwik utilizará sesiones basada en base de datos. Si tiene varios usuarios de tableros, puede que necesite incrementar el número máximo de conexiones de clientes al servidor de la base de datos.",
- "NoConfigFileFound": "El archivo de configuración de Piwik no pudo ser encontrado y está intentando acceder a la página de Piwik.",
+ "NoConfigFileFound": "El archivo de configuración de Piwik no pudo ser encontrado y está intentando acceder a una página de Piwik.",
"YouMayInstallPiwikNow": "Ahora puede %1$sinstalar Piwik%2$s",
- "IfPiwikInstalledBeforeTablesCanBeKept": "Si ha instalado Piwik anteriormente y posee algunas tlas en su base de datos, no se preocupe, puede reusarlas y mantenerlas!",
+ "IfPiwikInstalledBeforeTablesCanBeKept": "Si has instalado Piwik anteriormente y posees algunas tablas en tu base de datos, no te preocupes, ¡puedes reusarlas y mantenerlas!",
"Optional": "Opcional",
"Password": "Contraseña",
"PasswordDoNotMatch": "contraseña no coincide",
@@ -54,7 +54,7 @@
"RestartWebServer": "Luego de realizar este cambio, reinicie su servidor de internet.",
"ReusingTables": "Reutilizando las Tablas",
"PiwikOrgNewsletter": "Enviarme un correo electrónico con las principales actualizaciones de la comunidad Piwik",
- "ProfessionalServicesNewsletter": "enviarme información sobre los servicios %1$sProfesional y productos%2$s de Piwik",
+ "ProfessionalServicesNewsletter": "envíenme información sobre %1$slos servicios profesionales y productos%2$s de Piwik",
"SeeBelowForMoreInfo": "Véase más adelante para mayor información.",
"SetupWebsite": "Configurar un sitio de internet",
"SetupWebsiteError": "Se ha producido un error al añadir el sitio de internet",
@@ -78,7 +78,7 @@
"SystemCheckExtensions": "Otras extensiones requeridas",
"SystemCheckFileIntegrity": "Integridad de archivos",
"SystemCheckFunctions": "Funciones requeridas",
- "SystemCheckFunctionHelp": "Necesita habilitar esta función incorporada.",
+ "SystemCheckFunctionHelp": "Necesita habilitar esta función ya incorporada.",
"SystemCheckGDFreeType": "GD > 2.x + Freetype (gráfica)",
"SystemCheckGDHelp": "Los minigráficos e imágenes de gráficos (en la aplicación móvil de Piwik y en los informes por correo electrónico) no funcionarán.",
"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.",
diff --git a/plugins/Installation/lang/fi.json b/plugins/Installation/lang/fi.json
index 0ca63c3b51..767f3f3721 100644
--- a/plugins/Installation/lang/fi.json
+++ b/plugins/Installation/lang/fi.json
@@ -4,7 +4,7 @@
"ConfigurationHelp": "Piwikin asetustiedosto on luotu väärin. Voit joko poistaa tiedoston config\/config.ini.php ja käyttää asennusohjelmaa uudelleen tai korjata tietokannan asetukset.",
"ConfirmDeleteExistingTables": "Haluatko varmasti poistaa seuraavat taulut tietokannasta: %s? VAROITUS: TAULUJEN TIETOJA EI VOI PALAUTTAA EIKÄ POISTAMISTA VOI KUMOTA!",
"Congratulations": "Onnittelut",
- "CongratulationsHelp": "<p>Onnittelut! Piwikin asennus on valmis.<\/p><p>Varmista, että javascript-koodi on lisätty sivuille ja odota ensimmäisiä vierailijoita!<\/p>",
+ "CongratulationsHelp": "<p>Onnittelut! Piwikin asennus on valmis.<\/p><p>Varmista, että JavaScript-koodi on lisätty sivuille, ja odota ensimmäisiä vierailijoita!<\/p>",
"DatabaseAbilities": "Tietokannan toiminnot",
"DatabaseCreation": "Tietokannan luominen",
"DatabaseErrorConnect": "Virhe tietokantayhteyden avaamisessa",
diff --git a/plugins/Live/lang/es.json b/plugins/Live/lang/es.json
index 4bf0314e4d..404c0e0509 100644
--- a/plugins/Live/lang/es.json
+++ b/plugins/Live/lang/es.json
@@ -1,11 +1,9 @@
{
"Live": {
- "AbandonedCartSummary": "%1$s carritos abandonadoss%2$s y %3$s artículos abandonados%4$s por un total de %5$s%6$s.",
"AveragePageGenerationTime": "Cada página tomó en promedio %1$s para cargar este visitante.",
"CalculatedOverNPageViews": "Calculado usando las últimas %1$s páginas vistas de este visitante.",
"ClickToViewMoreAboutVisit": "Clic para ver más información acerca de esta visita.",
"ConvertedNGoals": "%s Objetivos convertidos",
- "EcommerceSummaryConversions": "%1$s pedidos%2$s por un total de %3$s%4$s, comprando %5$s artículos%6$s.",
"FirstVisit": "Primer visita",
"GoalType": "Tipo",
"HideMap": "ocultar mapa",
@@ -21,16 +19,16 @@
"NextVisitor": "Siguiente visitante",
"NoMoreVisits": "No hay más visitas de este visitante.",
"PageRefreshed": "Número de veces que esta página ha sido vista\/actualizada en una fila",
- "PluginDescription": "Suministra el Registro de Visitante en vivo y le permite observar a sus visitantes en tiempo real en el reproductor del tablero correspondiente. El complemento también le permite observar un perfil de visitante para cualquier usuario dado.",
+ "PluginDescription": "Suministra el Registro de Visitantes y le permite observar en directo a sus visitantes en el módulo correspondiente del panel de control de tiempo real. El complemento también le permite observar el perfil de visitante para cualquier usuario dado.",
"PreviousVisitor": "Visitante anterior",
"RealTimeVisitorCount": "Contador de visitantes en tiempo real",
"Referrer_URL": "URL de referencia",
"ShowMap": "mostrar mapa",
"SimpleRealTimeWidget_Message": "%1$s y %2$s en los últimos %3$s",
"ViewVisitorProfile": "Ver perfil de visitante",
- "VisitedPages": "Páginas vsitadas",
+ "VisitedPages": "Páginas visitadas",
"VisitorLog": "Registro de visitantes",
- "VisitorLogDocumentation": "Esta tabla muestra las últimas visitas en el rango de fecha seleccionado. Puede ver cuando fue la última visita de un visitante posicionándose sobre la fecha de la visita. %1$s Si el rango de fecha incluye el día actual, ¡puede ver a sus visitantes en tiempo real! %2$s La información mostrada aquí es siempre en tiempo real, independientemente de si y con qué frecuencia está utilizando un cron archivando.",
+ "VisitorLogDocumentation": "Esta tabla muestra las últimas visitas en el rango de fecha seleccionado. Puede ver cuándo fue la última visita de un visitante posicionándose sobre la fecha de la visita. %1$s Si el rango de fecha incluye el día actual, ¡puede ver a sus visitantes en tiempo real! %2$s La información mostrada aquí es siempre en tiempo real, independientemente de si -y con qué frecuencia- está utilizando un cron para archivar.",
"VisitorProfile": "Perfil de visitante",
"VisitorsInRealTime": "Visitantes en tiempo real",
"VisitorsLastVisit": "La última visita de este visitante fue hace %s días.",
diff --git a/plugins/Live/lang/fi.json b/plugins/Live/lang/fi.json
index a273a5d133..de8b3b9b60 100644
--- a/plugins/Live/lang/fi.json
+++ b/plugins/Live/lang/fi.json
@@ -11,7 +11,7 @@
"LastHours": "Edelliset %s tuntia",
"LastMinutes": "Edelliset %s minuuttia",
"LastVisit": "Edellinen käynti",
- "LinkVisitorLog": "Katso yksityiskohtainen vierailijan loki",
+ "LinkVisitorLog": "Katso yksityiskohtainen kävijäloki",
"LoadMoreVisits": "Lataa lisää käyntejä",
"MorePagesNotDisplayed": "muita sivuja tältä kävijältä ei näytetä",
"NbVisitor": "1 kävijä",
@@ -26,7 +26,7 @@
"SimpleRealTimeWidget_Message": "%1$s ja %2$s viimeisessä %3$s",
"ViewVisitorProfile": "Näytä kävijäprofiili",
"VisitedPages": "Vieraillut sivut",
- "VisitorLog": "Kävijän tiedot",
+ "VisitorLog": "Kävijöiden tiedot",
"VisitorLogDocumentation": "Tämä taulukko näyttää viimeisimmät käynnit valitulta aikaväliltä. Voit nähdä, koska viimeisin käynti oli pitämällä hiirtä päiväyksen päällä. %1$s Jos aikaväli sisältää tämän päivän, näet kävijät reaaliaikaisena! %2$s Näytetyt tiedot ovat aina reaaliaikaisia, riippumatta arkistoinnista.",
"VisitorProfile": "Kävijäprofiili",
"VisitorsInRealTime": "Reaaliaikaiset kävijätiedot",
diff --git a/plugins/Login/lang/fi.json b/plugins/Login/lang/fi.json
index 5cac73e20f..01a88b4c20 100644
--- a/plugins/Login/lang/fi.json
+++ b/plugins/Login/lang/fi.json
@@ -11,7 +11,10 @@
"LoginOrEmail": "Käyttäjätunnus tai sähköposti",
"LoginPasswordNotCorrect": "Käyttäjätunnus tai salasana väärin",
"LostYourPassword": "Unohtuiko salasana?",
+ "ChangeYourPassword": "Vaihda salasanasi",
"MailTopicPasswordChange": "Varmista salasanan vaihto",
+ "NewPassword": "Uusi salasana",
+ "NewPasswordRepeat": "Uusi salasana (toista)",
"PasswordChanged": "Salasana on vaihdettu.",
"PasswordRepeat": "Salasana (uudelleen)",
"PasswordsDoNotMatch": "Salasanat eivät täsmää.",
diff --git a/plugins/Marketplace/API.php b/plugins/Marketplace/API.php
index 0ebdaec905..b8a817e5ab 100644
--- a/plugins/Marketplace/API.php
+++ b/plugins/Marketplace/API.php
@@ -15,7 +15,7 @@ use Piwik\Plugins\Marketplace\Api\Service;
use Piwik\Plugins\Marketplace\Plugins\InvalidLicenses;
/**
- * The Marketplace API lets you manage your license key so you can download & install in one-click <a target="_blank" rel="noreferrer" href="https://plugins.piwik.org/premium">paid premium plugins</a> you have subscribed to.
+ * The Marketplace API lets you manage your license key so you can download & install in one-click <a target="_blank" rel="noreferrer" href="https://piwik.org/recommends/premium-plugins/">paid premium plugins</a> you have subscribed to.
*
* @method static \Piwik\Plugins\Marketplace\API getInstance()
*/
diff --git a/plugins/Marketplace/Controller.php b/plugins/Marketplace/Controller.php
index 986ee5cf9a..418c39dc42 100644
--- a/plugins/Marketplace/Controller.php
+++ b/plugins/Marketplace/Controller.php
@@ -271,6 +271,7 @@ class Controller extends \Piwik\Plugin\ControllerAdmin
$view->isPluginsAdminEnabled = CorePluginsAdmin::isPluginsAdminEnabled();
$view->isAutoUpdatePossible = SettingsPiwik::isAutoUpdatePossible();
$view->isAutoUpdateEnabled = SettingsPiwik::isAutoUpdateEnabled();
+ $view->isPluginUploadEnabled = CorePluginsAdmin::isPluginUploadEnabled();
return $view->render();
}
@@ -317,17 +318,27 @@ class Controller extends \Piwik\Plugin\ControllerAdmin
for ($i = 0; $i <= 10; $i++) {
foreach ($paidPlugins as $index => $paidPlugin) {
+ if (empty($paidPlugin)) {
+ continue;
+ }
+
$pluginName = $paidPlugin['name'];
if ($this->pluginManager->isPluginActivated($pluginName)) {
- unset($paidPlugins[$index]);
+ // we do not use unset since it might skip a plugin afterwards when removing index
+ $paidPlugins[$index] = null;
+ continue;
+ }
+
+ if (!$this->pluginManager->isPluginInFilesystem($pluginName)) {
+ $paidPlugins[$index] = null;
continue;
}
if (empty($paidPlugin['require'])
|| !$dependency->hasDependencyToDisabledPlugin($paidPlugin['require'])) {
- unset($paidPlugins[$index]);
+ $paidPlugins[$index] = null;
try {
$this->pluginManager->activatePlugin($pluginName);
@@ -340,6 +351,8 @@ class Controller extends \Piwik\Plugin\ControllerAdmin
}
}
}
+
+ $paidPlugins = array_filter($paidPlugins);
}
if ($hasErrors) {
diff --git a/plugins/Marketplace/lang/en.json b/plugins/Marketplace/lang/en.json
index 1278adf2c2..f27bfc16bd 100644
--- a/plugins/Marketplace/lang/en.json
+++ b/plugins/Marketplace/lang/en.json
@@ -103,6 +103,7 @@
"Updated": "Updated",
"UpdatingPlugin": "Updating %1$s",
"UploadZipFile": "Upload ZIP file",
+ "PluginUploadDisabled": "Plugin upload is disabled in config file. In order to enable this feature please update your configuration or contact your administrator",
"LicenseKeyExpiresSoon": "Your license key expires soon, please contact %1$s.",
"LicenseKeyIsExpired": "Your license key is expired, please contact %1$s.",
"MultiServerEnvironmentWarning": "You cannot install or update the plugin directly as you are using Piwik on multiple servers. The plugin would be only installed on one server. Instead download the plugin and deploy it manually to all your servers.",
diff --git a/plugins/Marketplace/lang/es.json b/plugins/Marketplace/lang/es.json
index c8a6a0802f..04214e85c2 100644
--- a/plugins/Marketplace/lang/es.json
+++ b/plugins/Marketplace/lang/es.json
@@ -4,7 +4,7 @@
"ActionActivatePlugin": "Activar complemento",
"ActionActivateTheme": "Activar tema",
"ActionInstall": "Instalar",
- "AddToCart": "Agregar al carro",
+ "AddToCart": "Añadir al carrito de la compra",
"AllowedUploadFormats": "Puede subir un complemento o tema en formato .zip vía esta página.",
"Authors": "Autores",
"BackToMarketplace": "Volver al Mercado",
@@ -13,44 +13,73 @@
"CannotInstall": "No se puede instalar",
"CannotUpdate": "No se puede actualizar",
"ClickToCompletePurchase": "Haz clic para completar la compra.",
+ "CurrentNumPiwikUsers": "Actualmente, tu Piwik tiene %1$s usuarios registrados.",
+ "ConfirmRemoveLicense": "¿Estás seguro de que quieres eliminar tu clave de licencia? No recibirás actualizaciones para ninguno de tus complementos comprados.",
"Developer": "Desarrollador",
- "DevelopersLearnHowToDevelopPlugins": "Desarrolladores: Aprenda como extender y personalizar Piwik %1$sdesarrollando complementos o temas%2$s.",
+ "DevelopersLearnHowToDevelopPlugins": "Desarrolladores: Aprende como extender y personalizar Piwik %1$sdesarrollando complementos o temas%2$s.",
"Marketplace": "Mercado",
+ "PaidPlugins": "Funcionalidades Premium",
"FeaturedPlugin": "Complemento destacado",
+ "InstallingNewPluginViaMarketplaceOrUpload": "Puedes actualizar automáticamente %1$s desde el Mercado or %2$ssubir un %3$s%4$s en formato ZIP.",
"InstallingPlugin": "Instalando %s",
"InstallPurchasedPlugins": "Instalar complementos comprados",
"LastCommitTime": "(último cambio %s)",
"LastUpdated": "Última actualización",
"License": "Licencia",
- "LicenseKey": "Llave de licencia",
+ "LicenseKey": "Clave de licencia",
+ "LicenseKeyActivatedSuccess": "¡La clave de licencia se ha activado con éxito!",
+ "LicenseKeyDeletedSuccess": "Clave de licencia eliminada con éxito.",
"Exceeded": "Excedido",
+ "LicenseMissing": "No se encuentra la licencia",
+ "LicenseMissingDescription": "Estás usando los siguientes complementos sin licencia: %1$s. %2$sPara resolver esta incidencia: actualiza tu clave de licencia, %3$sconsigue una suscripción ahora%4$s o desactiva el complemento.",
+ "PluginLicenseMissingDescription": "No se te permite descargar este complemento porque no hay licencia para él. Para resolver esta incidencia, actualiza tu clave de licencia, consigue una suscripción o desinstala el complemento.",
+ "LicenseExceeded": "Licencia excedida",
+ "LicenseExceededDescription": "Las licencias para los siguiente complementos ya no son válidas porque se ha excedido del número de usuarios autorizados por la licencia: %1$s. %2$sNo podrás descargar actualizaciones para estos complementos. Para resolver esta incidencia, elimina algunos usuarios o %3$sactualiza la suscripción ahora%4$s.",
+ "PluginLicenseExceededDescription": "No se te permite descargar este complemento. La licencia para este complemento ya no es válida porque se ha excedido del número de usuarios autorizados por la licencia. Para resolver esta incidencia, elimina algunos usuarios o actualiza la suscripción ahora",
"LicenseExpired": "Licencia caducada",
+ "LicenseExpiredDescription": "Han expirado las licencias para los siguientes complementos: %1$s. %2$sNo recibirás más actualizaciones para estos plugins. Para resolver esta incidencia, %3$srenueva tu suscripción ahora%4$s o descativa el complemento si ya no lo usas.",
+ "LicenseRenewsNextPaymentDate": "Renueva en la siguiente fecha de pago",
"UpgradeSubscription": "Actualizar Suscripción",
+ "ViewSubscriptionsSummary": "%1$sVer tus suscripciones a complementos.%2$s",
"ViewSubscriptions": "Ver suscripciones",
- "ExceptionLinceseKeyIsExpired": "Esta llave de licencia está caducada.",
- "LicenseKeyIsValidShort": "La llave de licencia es valida!",
- "RemoveLicenseKey": "Eliminar llave de licencia",
+ "ExceptionLinceseKeyIsExpired": "Esta clave de licencia está caducada.",
+ "ExceptionLinceseKeyIsNotValid": "Esta clave de licencia no es válida.",
+ "LicenseKeyIsValidShort": "¡La clave de licencia es valida!",
+ "RemoveLicenseKey": "Eliminar clave de licencia",
"InstallAllPurchasedPlugins": "Instalar todos los complementos comprados de una vez",
"InstallAllPurchasedPluginsAction": "Instalar y activar %d complementos comprados",
- "InstallThesePlugins": "Esto instalara y activara los siguientes complementos:",
+ "InstallThesePlugins": "Esto instalará y activará los siguientes complementos:",
"AllPaidPluginsInstalledAndActivated": "Todos los complementos de pago fueron instalados y activados correctamente.",
"OnlySomePaidPluginsInstalledAndActivated": "Algunos complementos de pago no fueron instalados correctamente.",
"NewVersion": "nueva versión",
- "NotAllowedToBrowseMarketplacePlugins": "Puedes navegar la lista de complementos que se pueden instalar para personalizar o extender su plataforma Piwik. Por favor contáctese con el administrador si desea que sea instalado uno de ellos.",
- "NotAllowedToBrowseMarketplaceThemes": "Puede navegar la lista de temas que se pueden instalar para personalizar el estilo de su plataforma Piwik. Por favor contáctese con el administrador si desea que sea instalado uno de ellos.",
+ "NotAllowedToBrowseMarketplacePlugins": "Puedes navegar por la lista de complementos que se pueden instalar para personalizar o extender tu plataforma Piwik. Por favor contácta con el administrador si desea que sea instalado uno de ellos.",
+ "NotAllowedToBrowseMarketplaceThemes": "Puede navegar por la lista de temas que se pueden instalar para personalizar el estilo de su plataforma Piwik. Por favor contácta con el administrador si deseas que sea instalado uno de ellos.",
"NoPluginsFound": "No se encontraron complementos",
"NoThemesFound": "No se encontraron temas",
"NoSubscriptionsFound": "No se encontraron suscripciones",
"NumDownloadsLatestVersion": "Última versión: %s descargas",
+ "OverviewPluginSubscriptions": "Resumen de tus suscripciones a complementos",
+ "OverviewPluginSubscriptionsMissingLicense": "No tienes puesta la clave de licencia. Si has comprado una suscripción a un complemento, ve al %1$sMercado%2$s e introduce tu clave de licencia.",
"OverviewPluginSubscriptionsAllDetails": "Para ver todos los detalles, o para cambiar una suscripción, inicia sesión en tu cuenta.",
+ "OverviewPluginSubscriptionsMissingInfo": "Puede ser posible que no aparezcan algunas de las suscripciones, por ejemplo, si el pago no ha sido completado todavía. En tal caso, prueba de nuevo en unas horas o contacta con el equipo de Piwik.",
+ "NoValidSubscriptionNoUpdates": "Una vez que una suscripción expira, ya no recibirás más actualizaciones para este complemento.",
+ "PluginSubscriptionsList": "Esta es una lista de las suscripciones asociadas con tu clave de licencia.",
+ "PaidPluginsNoLicenseKeyIntro": "Si has comprado un %1$scomplemento premium de pago%2$s, por favor, introduce aquí abajo la clave de licencia que recibiste.",
+ "PaidPluginsWithLicenseKeyIntro": "Se ha configurado una clave de licencia válida. Por razones de seguridad no mostramos la clave aquí. Si has perdido tu clave de licencia, por favor, contacta con el equipo de Piwik.",
+ "PaidPluginsNoLicenseKeyIntroNoSuperUserAccess": "In caso de que hayas comprado un %1$scomplemento premium de pago%2$s en el \"Mercado\", por favor, pide a un usuario con acceso de \"Super Usuario\" que añada la clave de licencia.",
+ "PluginDescription": "Extiende y expande la funcionalidad de Piwik, por medio del \"Mercado\", descargando complementos y temas.",
"PluginKeywords": "Palabras claves",
- "PluginUpdateAvailable": "Está utilizando la versión %1$s y hay una nueva versión %2$s disponible.",
+ "PluginUpdateAvailable": "Estás utilizando la versión %1$s y hay una nueva versión %2$s disponible.",
"PluginVersionInfo": "%1$s de %2$s",
- "PluginWebsite": "Sitio de internet del complemento",
+ "PluginWebsite": "Sitio web del complemento",
+ "PriceExclTax": "%1$s %2$s impuestos excluidos",
+ "PriceFromPerPeriod": "Desde %1$s \/ %2$s",
"Reviews": "Reseñas",
+ "ShownPriceIsExclTax": "El precio mostrado no incluye impuestos.",
"Screenshots": "Capturas de pantalla",
"SortByNewest": "Más reciente",
"SortByAlpha": "Alfa",
+ "SortByLastUpdated": "Último actualizado",
"SortByPopular": "Popular",
"StepDownloadingPluginFromMarketplace": "Descargando complemento del Mercado",
"StepDownloadingThemeFromMarketplace": "Descargando tema del Mercado",
@@ -63,14 +92,21 @@
"StepReplaceExistingTheme": "Sustituyendo tema existente",
"StepThemeSuccessfullyUpdated": "El tema %1$s %2$s ha sido actualizado con éxito.",
"SubscriptionType": "Tipo",
+ "SubscriptionStartDate": "Fecha de inicio",
+ "SubscriptionEndDate": "Fecha de fin",
"SubscriptionNextPaymentDate": "Fecha del siguiente pago",
"SubscriptionInvalid": "Esta suscripción es invalida o ha caducado",
"SubscriptionExpiresSoon": "Esta suscripción expirará pronto",
"Support": "Asistencia",
"TeaserExtendPiwikByUpload": "Amplíe Piwik cargando un archivo ZIP",
+ "LicenseExceededPossibleCause": "La licencia se ha excedido. Posiblemente, en esta instalación de Piwik, haya más usuarios que los que autoriza la suscripción.",
"Updated": "Actualizado",
"UpdatingPlugin": "Actualizando %1$s",
"UploadZipFile": "Carga un archivo ZIP",
+ "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.",
+ "AutoUpdateDisabledWarning": "No puedes instalar o actualizar el plugin directamente ya que las actualizaciones automáticas están deshabilitadas en la configuración. Para habilitar las actualizaciones automáticas configura %1$s en %2$s.",
"ViewRepositoryChangelog": "Ver cambios"
}
} \ No newline at end of file
diff --git a/plugins/Marketplace/lang/fi.json b/plugins/Marketplace/lang/fi.json
index c4bfc9e120..d99133e8a8 100644
--- a/plugins/Marketplace/lang/fi.json
+++ b/plugins/Marketplace/lang/fi.json
@@ -1,8 +1,8 @@
{
"Marketplace": {
"ActivateLicenseKey": "Aktivoi",
- "ActionActivatePlugin": "Aktivoi lisäosa",
- "ActionActivateTheme": "Aktivoi teema",
+ "ActionActivatePlugin": "Ota lisäosa käyttöön",
+ "ActionActivateTheme": "Ota teema käyttöön",
"ActionInstall": "Asenna",
"AllowedUploadFormats": "Tällä sivulla voit lisätä liitännäisen tai teeman .zip-formaatissa.",
"Authors": "Tekijät",
@@ -14,6 +14,8 @@
"InstallingPlugin": "Asenna %s",
"LastCommitTime": "(viimeisin lähetys %s)",
"LastUpdated": "Edellinen päivitys",
+ "InstallAllPurchasedPluginsAction": "Asenna ja ota käyttöön %d ostettua lisäosaa",
+ "InstallThesePlugins": "Seuraavat lisäosat asennetaan ja otetaan käyttöön:",
"NotAllowedToBrowseMarketplacePlugins": "Voit selata asennettavien liitännäisten listaa, joilla voit mukauttaa tai laajentaaa Piwik sovellusalustaasi. Ota yhteyttä ylläpitäjääsi saadaksesi liitännäinen asennettua.",
"NotAllowedToBrowseMarketplaceThemes": "Voit selata listaa asennettavista teemoista, joilla voit muuttaa Piwikin ilmettä. Ota yhteyttä ylläpitäjääsi saadaksesi teema asennetuksi.",
"NoPluginsFound": "Liitännäisiä ei löydetty",
diff --git a/plugins/Marketplace/templates/licenseform.twig b/plugins/Marketplace/templates/licenseform.twig
index c43a4fd4df..17cc2d2a52 100644
--- a/plugins/Marketplace/templates/licenseform.twig
+++ b/plugins/Marketplace/templates/licenseform.twig
@@ -49,7 +49,7 @@
{% else %}
{% if isSuperUser %}
- {{ 'Marketplace_PaidPluginsNoLicenseKeyIntro'|translate("<a target='_blank' href='?module=Proxy&action=redirect&url=https://plugins.piwik.org/premium'>", "</a>")|raw }}
+ {{ 'Marketplace_PaidPluginsNoLicenseKeyIntro'|translate("<a target='_blank' href='?module=Proxy&action=redirect&url=https://piwik.org/recommends/premium-plugins/'>", "</a>")|raw }}
<br/>
@@ -60,7 +60,7 @@
<div piwik-activity-indicator loading="licenseController.isUpdating"></div>
{% else %}
- {{ 'Marketplace_PaidPluginsNoLicenseKeyIntroNoSuperUserAccess'|translate("<a target='_blank' href='?module=Proxy&action=redirect&url=https://plugins.piwik.org/premium'>", "</a>")|raw }}
+ {{ 'Marketplace_PaidPluginsNoLicenseKeyIntroNoSuperUserAccess'|translate("<a target='_blank' href='?module=Proxy&action=redirect&url=https://piwik.org/recommends/premium-plugins/'>", "</a>")|raw }}
{% endif %}
{% endif %}
diff --git a/plugins/Marketplace/templates/overview.twig b/plugins/Marketplace/templates/overview.twig
index 9541ab0a16..76123fc2a1 100644
--- a/plugins/Marketplace/templates/overview.twig
+++ b/plugins/Marketplace/templates/overview.twig
@@ -31,6 +31,7 @@
<div class="ui-confirm" id="installPluginByUpload">
<h2>{{ 'Marketplace_TeaserExtendPiwikByUpload'|translate }}</h2>
+ {% if isPluginUploadEnabled %}
<p class="description"> {{ 'Marketplace_AllowedUploadFormats'|translate }} </p>
<form enctype="multipart/form-data" method="post" id="uploadPluginForm"
@@ -39,6 +40,12 @@
<br />
<input class="startUpload btn" type="submit" value="{{ 'Marketplace_UploadZipFile'|translate }}">
</form>
+ {% else %}
+ <p class="description"> {{ 'Marketplace_PluginUploadDisabled'|translate|raw }} </p>
+ <pre>[General]
+enable_plugin_upload = 1</pre>
+ <input role="yes" type="button" value="{{ 'General_Ok'|translate }}"/>
+ {% endif %}
</div>
<div class="row marketplaceActions" ng-controller="PiwikMarketplaceController as marketplace">
diff --git a/plugins/MobileMessaging/lang/de.json b/plugins/MobileMessaging/lang/de.json
index 2a2961d948..648a8b59d6 100644
--- a/plugins/MobileMessaging/lang/de.json
+++ b/plugins/MobileMessaging/lang/de.json
@@ -42,6 +42,7 @@
"Available_Credits": "Verfügbares Guthaben: %1$s",
"TopLinkTooltip": "Erhalten Sie Webanalytik Berichte direkt in Ihren E-Mail Posteingang oder auf Ihr Mobiltelefon!",
"TopMenu": "E-Mail & SMS Berichte",
+ "UserKey": "Userkey",
"VerificationText": "Der Code lautet %1$s. Um Ihre Telefonnummer zu validieren und Piwik SMS Berichte zu erhalten kopieren Sie bitte diesen Code in das Formular unter Piwik > %2$s > %3$s."
}
} \ No newline at end of file
diff --git a/plugins/MobileMessaging/lang/el.json b/plugins/MobileMessaging/lang/el.json
index 4c5295b66d..cbf7485456 100644
--- a/plugins/MobileMessaging/lang/el.json
+++ b/plugins/MobileMessaging/lang/el.json
@@ -42,6 +42,7 @@
"Available_Credits": "Διαθέσιμες μονάδες: %1$s",
"TopLinkTooltip": "Λάβετε αναφορές Στατιστικών Ιστοσελίδων στο e-mail σας ή το κινητό σας τηλέφωνο!",
"TopMenu": "Αναφορές Email & SMS",
+ "UserKey": "Κλειδί χρήστη",
"VerificationText": "Ο κωδικός είναι %1$s. Για να επαληθεύσετε τον τηλεφωνικό σας αριθμό και να λάβετε αναφορές του Piwik σε SMS, αντιγράψτε τον κωδικό αυτόν στη διαθέσιμη φόρμα στο Piwik > %2$s > %3$s."
}
} \ No newline at end of file
diff --git a/plugins/MobileMessaging/lang/es.json b/plugins/MobileMessaging/lang/es.json
index a28d1858d6..61d194aa22 100644
--- a/plugins/MobileMessaging/lang/es.json
+++ b/plugins/MobileMessaging/lang/es.json
@@ -1,6 +1,6 @@
{
"MobileMessaging": {
- "Exception_UnknownProvider": "Nombre del proveedor '%1$s' desconocido. Intente con los siguientes: %2$s.",
+ "Exception_UnknownProvider": "Nombre del proveedor '%1$s' desconocido. Inténtalo con los siguientes: %2$s.",
"MobileReport_AdditionalPhoneNumbers": "Puede agregar más números telefónicos accediendo",
"MobileReport_MobileMessagingSettingsLink": "página de configuraciones de mensajería móvil",
"MobileReport_NoPhoneNumbers": "Por favor, active al menos un número telefónico accediendo",
@@ -13,10 +13,11 @@
"Settings_CredentialNotProvided": "Antes de crear y administrar los números telefónicos, por favor conecte Piwik con su cuenta SMS.",
"Settings_CredentialNotProvidedByAdmin": "Antes que pueda crear y administrar números telefónicos, consulte con su administrador para conectar Piwik con una cuenta SMS.",
"Settings_CredentialProvided": "Su %s cuenta API SMS está correctamente configurada!",
+ "Settings_CredentialInvalid": "Tu cuenta de SMS API %1$s está configurada, sin embargo, se produjo un error mientras se intentaban recibir los créditos disponibles.",
"Settings_DeleteAccountConfirm": "¿Está seguro que desea borrar esta cuenta SMS?",
"Settings_DelegatedSmsProviderOnlyAppliesToYou": "El proveedor de SMS configurado solo podrá ser usado por usted y nadie más.",
"Settings_DelegatedPhoneNumbersOnlyUsedByYou": "Los números telefónicos configurados solo pueden ser vistos y utilizados por usted y nadie más.",
- "Settings_EnterActivationCode": "Ingresar código de activación",
+ "Settings_EnterActivationCode": "Introducir el código de activación",
"Settings_InvalidActivationCode": "Código ingresado no es válido, inténtelo nuevamente.",
"Settings_LetUsersManageAPICredential": "Permitir a los usuarios administrar sus propias credenciales API de su SMS",
"Settings_LetUsersManageAPICredential_No_Help": "Todos los usuarios están habilitados a recibir Informes SMS y utilizarán los créditos de su cuenta de teléfono móvil.",
@@ -27,6 +28,7 @@
"Settings_PhoneNumbers_Add": "Agregar un nuevo número telefónico",
"Settings_PhoneNumbers_CountryCode_Help": "Si no conoce el código telefónico del país, búsquelo aquí.",
"Settings_PhoneNumbers_Help": "Antes de recibir los mensajes de texto (SMS) de los informes en un teléfono, el número de teléfono debe ser ingresado.",
+ "Settings_PhoneNumbers_HelpAdd": "Cuando hagas click en \"Añadir\", se enviará al teléfono un SMS que contiene un código. El usuario que reciba el código deberá conectarse a Piwik, hacer click en \"Configuración\" y, luego, hacer click en \"Mensajería móvil\". Después de introducir el código, el usuario ya podrá recibir informes de texto en su teléfono.",
"Settings_PleaseSignUp": "Para crear informes SMS y recibir mensajes de texto cortos con las estadísticas de sus sitios de internet en su teléfono móvil, por favor, enrólese con la API del SMS e ingrese su información abajo.",
"Settings_SMSAPIAccount": "Administrar API de la cuenta SMS",
"Settings_SMSProvider": "Proveedor SMS",
@@ -37,8 +39,10 @@
"Settings_VerificationCodeJustSent": "Hemos enviado un mensaje de texto (SMS) con un código: por favor, ingrese este código arriba y clic en \"Validar\".",
"SettingsMenu": "Mensajero móvil",
"SMS_Content_Too_Long": "[demasiado largo]",
+ "Available_Credits": "Créditos disponibles: %1$s",
"TopLinkTooltip": "Obtenga informes analíticos de su sitio de internet enviados a su casilla de correo electrónico o su teléfono móvil.",
"TopMenu": "Informes por correo electrónico & SMS",
- "VerificationText": "Código es %1$s. Para validar su número de teléfono y recibir los informes Piwik vía mensaje de texto (SMS), por favor, copie este código en el formulario accesible vía Piwik > %2$s > %3$s."
+ "UserKey": "Clave de usuario",
+ "VerificationText": "El código es %1$s. Para validar su número de teléfono y recibir los informes Piwik vía mensaje de texto (SMS), por favor, copie este código en el formulario accesible vía Piwik > %2$s > %3$s."
}
} \ No newline at end of file
diff --git a/plugins/MobileMessaging/lang/fi.json b/plugins/MobileMessaging/lang/fi.json
index 42cd39c70d..6fcfffb419 100644
--- a/plugins/MobileMessaging/lang/fi.json
+++ b/plugins/MobileMessaging/lang/fi.json
@@ -3,7 +3,7 @@
"Exception_UnknownProvider": "Tarjoajan nimi '%1$s' on tuntematon. Kokeile jotakin seuraavista: %2$s.",
"MobileReport_AdditionalPhoneNumbers": "Voit lisätä puhelinnumeroita",
"MobileReport_MobileMessagingSettingsLink": "Mobiiliviestinnän asetukset",
- "MobileReport_NoPhoneNumbers": "Aktivoi vähintään yksi puhelinnumero",
+ "MobileReport_NoPhoneNumbers": "Ota käyttöön vähintään yksi puhelinnumero",
"MultiSites_Must_Be_Activated": "Saadaksesi SMS-viestejä verkkosivusi tilastoista, sinun tulee sallia MultiSite liitännäinen Piwikissä.",
"PhoneNumbers": "Puhelinnumerot",
"PluginDescription": "Luo ja lataa sovellettuja SMS raportteja ja saa ne puhelimeesi päivittäin, viikoittain tai kuukausittain.",
@@ -15,7 +15,7 @@
"Settings_DeleteAccountConfirm": "Haluatko varmasti poistaa tämän SMS-tilin?",
"Settings_InvalidActivationCode": "Koodi on väärin. Yritä uudelleen.",
"Settings_LetUsersManageAPICredential": "Salli käyttäjien hallinnoida omia SMS API suosituksiaan",
- "Settings_LetUsersManageAPICredential_No_Help": "Kaikki käyttäjät voivat vastaanottaa SMS raportteja ja käyttävät tilisi luottoa.",
+ "Settings_LetUsersManageAPICredential_No_Help": "Kaikki käyttäjät voivat vastaanottaa SMS-raportteja ja käyttävät tilisi saldoa.",
"Settings_LetUsersManageAPICredential_Yes_Help": "Jokainen käyttäjä voi asettaa oman SPS API tilinsä, eikä käytä sinun luottoasi.",
"Settings_ManagePhoneNumbers": "Hallitse puhelinnumeroita",
"Settings_PhoneActivated": "Puhelinnumero on todennettu! Nyt voit vastaanottaa tilastojasi tekstiviesteinä.",
diff --git a/plugins/MobileMessaging/lang/fr.json b/plugins/MobileMessaging/lang/fr.json
index 91f0e7452b..797209d96f 100644
--- a/plugins/MobileMessaging/lang/fr.json
+++ b/plugins/MobileMessaging/lang/fr.json
@@ -42,6 +42,7 @@
"Available_Credits": "Crédit disponible: %1$s",
"TopLinkTooltip": "Recevez vos rapports d'analyse web dans votre boite de courriels ou sur votre téléphone mobile!",
"TopMenu": "Rapports Email & SMS",
+ "UserKey": "Clef utilisateur",
"VerificationText": "Le code est %1$s. Pour valider votre numéro de téléphone et recevoir les rapports SMS de Piwik veuillez copier ce code dans le formulaire accessible via Piwik > %2$s > %3$s."
}
} \ No newline at end of file
diff --git a/plugins/MobileMessaging/lang/it.json b/plugins/MobileMessaging/lang/it.json
index a43c4501fb..dfdad6713f 100644
--- a/plugins/MobileMessaging/lang/it.json
+++ b/plugins/MobileMessaging/lang/it.json
@@ -13,6 +13,7 @@
"Settings_CredentialNotProvided": "Prima di creare e gestire i numeri di telefono, si prega di collegare Piwik al tuo account SMS qui sopra.",
"Settings_CredentialNotProvidedByAdmin": "Prima di creare e gestire i numeri di telefono, contatta l'amministratore per collegare Piwik a un account SMS.",
"Settings_CredentialProvided": "Il tuo account %s SMS API è configurato correttamente!",
+ "Settings_CredentialInvalid": "Il tuo account SMS API %1$s è stato configurato ma si è verificato un errore durante il tentativo di ricezione dei crediti disponibili.",
"Settings_DeleteAccountConfirm": "Sei sicuro di voler cancellare questo account SMS?",
"Settings_DelegatedSmsProviderOnlyAppliesToYou": "Il provider SMS configurato verrà utilizzato solo da te e da nessuno degli altri utenti.",
"Settings_DelegatedPhoneNumbersOnlyUsedByYou": "I numeri di telefono configurati saranno visti e utilizzati solo da te e da nessuno degli altri utenti.",
@@ -27,6 +28,7 @@
"Settings_PhoneNumbers_Add": "Aggiungi Numero Telefonico",
"Settings_PhoneNumbers_CountryCode_Help": "Se desideri sapere il prefisso internazionale, cerca qui il tuo paese.",
"Settings_PhoneNumbers_Help": "Prima di ricevere SMS (messaggi di testo) su un telefono, bisogna inserirne qui sotto il numero.",
+ "Settings_PhoneNumbers_HelpAdd": "Quando clicchi si \"Aggiungi\", un SMS contenente un codice verrà inviato al telefono. L'utente che riceve il codice deve accedere a Piwik, cliccare su Impostazioni, poi cliccare su Messaggeria Mobile. Dopo avere inserito il codice, l'utente potrà ricevere i report testuali sul suo telefono.",
"Settings_PleaseSignUp": "Per creare SMS e ricevere brevi messaggi di testo con le statistiche dei tuoi siti web sul tuo cellulare, si prega di registrarsi con l'API SMS e immettere le informazioni qui di seguito.",
"Settings_SMSAPIAccount": "Gestisci Account SMS API",
"Settings_SMSProvider": "Gestore SMS",
@@ -37,8 +39,10 @@
"Settings_VerificationCodeJustSent": "Abbiamo inviato ora un SMS con un codice a questo numero: si prega di inserire questo codice qui sopraa e cliccare su \"Convalida\".",
"SettingsMenu": "Messaggeria Mobile",
"SMS_Content_Too_Long": "[troppo lungo]",
+ "Available_Credits": "Crediti disponibili: %1$s",
"TopLinkTooltip": "Ricevi i Rapporti delle Statistiche Web sulla tua casella di posta elettronica o sul tuo cellulare!",
"TopMenu": "Rapporti Email & SMS",
+ "UserKey": "Userkey",
"VerificationText": "Il codice è %1$s. Per convalidare il tuo numero telefonico e ricevere i report SMS di Piwik copia questo codice nel form accessibile da Piwik > %2$s > %3$s."
}
} \ No newline at end of file
diff --git a/plugins/MobileMessaging/lang/sq.json b/plugins/MobileMessaging/lang/sq.json
index c05a059e7c..0b33853b76 100644
--- a/plugins/MobileMessaging/lang/sq.json
+++ b/plugins/MobileMessaging/lang/sq.json
@@ -42,6 +42,7 @@
"Available_Credits": "Krediti që zotëroni: %1$s",
"TopLinkTooltip": "Merrni Raporte Analizash Web drejt e te email-i ose celulari juaj.",
"TopMenu": "Raporte me Email & SMS",
+ "UserKey": "Kyç përdoruesi",
"VerificationText": "Kodi është %1$s. Që të vleftësohet numri i telefonit tuaj dhe të merrni raporte Piwik me SMS, ju lutemi, kopjojeni këtë kot te formulari përkatës përmes Piwik-ut > %2$s > %3$s."
}
} \ No newline at end of file
diff --git a/plugins/MobileMessaging/lang/zh-tw.json b/plugins/MobileMessaging/lang/zh-tw.json
index 699d79ba74..5f193cbdd9 100644
--- a/plugins/MobileMessaging/lang/zh-tw.json
+++ b/plugins/MobileMessaging/lang/zh-tw.json
@@ -42,6 +42,7 @@
"Available_Credits": "可用額度:%1$s",
"TopLinkTooltip": "從信箱或手機取得網頁分析報表。",
"TopMenu": "Email 和簡訊報表",
+ "UserKey": "使用者金鑰",
"VerificationText": "驗證碼為 %1$s。請將此驗證碼填入 Piwik > %2$s > %3$s 的表單中來完成手機驗證。"
}
} \ No newline at end of file
diff --git a/plugins/Morpheus/templates/admin.twig b/plugins/Morpheus/templates/admin.twig
index 4fc89289e8..11907c0e75 100644
--- a/plugins/Morpheus/templates/admin.twig
+++ b/plugins/Morpheus/templates/admin.twig
@@ -25,7 +25,7 @@
{% import 'ajaxMacros.twig' as ajax %}
{{ ajax.requestErrorDiv(emailSuperUser|default(''), areAdsForProfessionalServicesEnabled, currentModule) }}
- {{ postEvent("Template.beforeContent", "admin", currentModule) }}
+ {{ postEvent("Template.beforeContent", "admin", currentModule, currentAction) }}
<div class="page">
diff --git a/plugins/Morpheus/templates/dashboard.twig b/plugins/Morpheus/templates/dashboard.twig
index 9bb9bf19a7..bc5cd070af 100644
--- a/plugins/Morpheus/templates/dashboard.twig
+++ b/plugins/Morpheus/templates/dashboard.twig
@@ -35,7 +35,7 @@
<input role="yes" type="button" value="{{ 'General_Ok'|translate }}"/>
</div>
- {{ postEvent("Template.beforeContent", "dashboard", currentModule) }}
+ {{ postEvent("Template.beforeContent", "dashboard", currentModule, currentAction) }}
<div class="page">
diff --git a/plugins/MultiSites/API.php b/plugins/MultiSites/API.php
index 2312ebfec3..8e9022f75d 100755
--- a/plugins/MultiSites/API.php
+++ b/plugins/MultiSites/API.php
@@ -285,7 +285,7 @@ class API extends \Piwik\Plugin\API
// ResponseBuilder throws 'Call to a member function getColumns() on a non-object'
if ($multipleWebsitesRequested
// We don't delete the 0 visits row, if "Enhanced" mode is on.
- && !$enhanced
+ && !$enhanced && (empty($showColumns) || in_array(self::NB_VISITS_METRIC, $showColumns))
) {
$dataTable->filter(
'ColumnCallbackDeleteRow',
diff --git a/plugins/Overlay/client/client.css b/plugins/Overlay/client/client.css
index 80e526a232..edc349f746 100644
--- a/plugins/Overlay/client/client.css
+++ b/plugins/Overlay/client/client.css
@@ -41,6 +41,8 @@
text-align: left;
background: url(./linktags_lessshadow.png) no-repeat 0 -21px;
overflow: hidden;
+ transform-origin: 100% 50%;
+ transition: 0.2s ease-in-out;
}
.PIS_LinkTag span {
@@ -64,6 +66,7 @@
.PIS_LinkTag.PIS_Right {
background-position: -36px -21px;
+ transform-origin: 0% 50%;
}
.PIS_LinkTag.PIS_Right span,
@@ -73,6 +76,7 @@
.PIS_LinkTag.PIS_Bottom {
background-position: 0 0;
+ transform-origin: 100% 50%;
}
.PIS_LinkTag.PIS_Bottom span,
@@ -82,6 +86,7 @@
.PIS_LinkTag.PIS_BottomRight {
background-position: -36px 0;
+ transform-origin: 0% 50%;
}
/**
@@ -135,4 +140,4 @@
#PIS_StatusBar .PIS_Loading {
background: url(./loading.gif) no-repeat right center;
padding-right: 30px;
-} \ No newline at end of file
+}
diff --git a/plugins/Overlay/client/followingpages.js b/plugins/Overlay/client/followingpages.js
index eb3ff3b80d..d13bf68122 100644
--- a/plugins/Overlay/client/followingpages.js
+++ b/plugins/Overlay/client/followingpages.js
@@ -258,27 +258,29 @@ var Piwik_Overlay_FollowingPages = (function () {
}
var zoomFactor = 1 + +tagElement.attr('data-rateofmax');
- tagElement.css({'zoom':zoomFactor, 'opacity': zoomFactor/2 });
- offset.top = offset.top / zoomFactor;
- offset.left = offset.left / zoomFactor;
-
top = offset.top - tagHeight + 6;
left = offset.left - tagWidth + 10;
- if (isRight = (left < 2)) {
+ if (isRight = (left < zoomFactor * tagWidth - tagWidth ) ) {
tagElement.addClass('PIS_Right');
- left = offset.left + linkTag.outerWidth() / zoomFactor - 10;
+ left = offset.left + linkTag.outerWidth() - 10;
}
- if (top < 2) {
+ if (top < zoomFactor * tagHeight - tagHeight ) {
tagElement.addClass(isRight ? 'PIS_BottomRight' : 'PIS_Bottom');
- top = offset.top + linkTag.outerHeight() / zoomFactor - 6;
+ top = offset.top + linkTag.outerHeight() - 6;
}
tagElement.css({
- top: top + 'px',
- left: left + 'px'
- }).show();
+ '-webkit-transform': 'translate(' + left + 'px, ' + top + 'px) scale(' + zoomFactor + ')',
+ '-moz-transform': 'translate(' + left + 'px, ' + top + 'px) scale(' + zoomFactor + ')',
+ '-ms-transform': 'translate(' + left + 'px, ' + top + 'px) scale(' + zoomFactor + ')',
+ '-o-transform': 'translate(' + left + 'px, ' + top + 'px) scale(' + zoomFactor + ')',
+ 'transform': 'translate(' + left + 'px, ' + top + 'px) scale(' + zoomFactor + ')',
+ 'opacity': zoomFactor/2
+ });
+
+ tagElement.show();
}
}
diff --git a/plugins/Overlay/lang/es.json b/plugins/Overlay/lang/es.json
index 24cda29637..d2767f0706 100644
--- a/plugins/Overlay/lang/es.json
+++ b/plugins/Overlay/lang/es.json
@@ -14,8 +14,8 @@
"OpenFullScreen": "Ir a pantalla completa (sin barras laterales)",
"Overlay": "Superposición de página",
"PluginDescription": "Vea su información analítica como una superposición en su actual sitio de internet. Vea cuántas veces sus usuarios han hecho clic en cada enlace. Nota: Requiere el complemento Transitions habilitado.",
- "RedirectUrlError": "Está intentando abrir Superposición de página de la dirección de internet \"%1$s\"- %2$s Ninguno de los dominios de su configuración Piwik coincide con el enlace.",
- "RedirectUrlErrorAdmin": "Puede agregar el dominio como una dirección de internet %1$sen la configuración%2$s.",
+ "RedirectUrlError": "Estás intentando abrir la \"Superposición de página\" para la URL \"%1$s\"- %2$s Ninguno de los dominios de su configuración Piwik coincide con el del enlace.",
+ "RedirectUrlErrorAdmin": "Puede agregar el dominio como una URL %1$sen la configuración%2$s.",
"RedirectUrlErrorUser": "Pregunte a su administrador para agregar el dominio como una dirección de internet adicional."
}
} \ No newline at end of file
diff --git a/plugins/Overlay/templates/startOverlaySession.twig b/plugins/Overlay/templates/startOverlaySession.twig
index b1db8ce5b2..995dd78020 100644
--- a/plugins/Overlay/templates/startOverlaySession.twig
+++ b/plugins/Overlay/templates/startOverlaySession.twig
@@ -8,20 +8,19 @@
}
}
- function removeUrlPrefix(url) {
- return url.replace(/http(s)?:\/\/(www\.)?/i, "");
- }
-
if (window.location.hash) {
var match = false;
+ var parser = document.createElement('a');
var urlToRedirect = window.location.hash.substr(1);
- var urlToRedirectWithoutPrefix = removeUrlPrefix(urlToRedirect);
+ parser.href = urlToRedirect;
+ var hostToRedirect = parser.hostname;
var knownUrls = {{ knownUrls|raw }};
for (var i = 0; i < knownUrls.length; i++) {
- var testUrl = removeUrlPrefix(knownUrls[i]);
- if (urlToRedirectWithoutPrefix.substr(0, testUrl.length) == testUrl) {
+ parser.href = knownUrls[i];
+ var testHost = parser.hostname;
+ if (hostToRedirect == testHost) {
match = true;
if (navigator.appName == "Microsoft Internet Explorer") {
// internet explorer loses the referrer if we use window.location.href=X
diff --git a/plugins/PrivacyManager/lang/es.json b/plugins/PrivacyManager/lang/es.json
index 852b976cc0..4422970ecb 100644
--- a/plugins/PrivacyManager/lang/es.json
+++ b/plugins/PrivacyManager/lang/es.json
@@ -2,7 +2,7 @@
"PrivacyManager": {
"AnonymizeIpDescription": "Seleccione \"Si\" si desea que Piwik no registre direcciones IP completas.",
"AnonymizeIpInlineHelp": "Ocultar los últimos bit(s) de la dirección IP del visitante para cumplir con las leyes\/directrices de privacidad de su jurisdicción.",
- "AnonymizeIpExtendedHelp": "Cuando los usuarios visiten su sitio de internet, Piwik no usará la dirección completa IP (tales como %1$s) sino que Piwik las mantendrá anónimas primeramente (como %2$s). El anonimato de una dirección IP es uno de los requerimientos dispuesto por leyes de privacidad en algunos países tales como Alemania.",
+ "AnonymizeIpExtendedHelp": "Cuando los usuarios visiten su sitio web, Piwik no usará la dirección IP completa (como en %1$s) sino que Piwik la mantendrá anónima (como en %2$s). El anonimato de una dirección IP es uno de los requisitos dispuestos por leyes de privacidad en algunos países como Alemania.",
"AnonymizeIpMaskLengtDescription": "Seleccione cuantos bytes de las direcciones IP de los visitantes deben ser enmascaradas.",
"AnonymizeIpMaskLength": "%1$s byte(s) - ej. %2$s",
"CannotLockSoDeleteLogActions": "La tabla log_action no se purgará: por favor, concede el privilegio LOCK TABLES al usuario '%s' de MySQL.",
@@ -22,8 +22,8 @@
"DeleteMaxRows": "Número máximo de filas que serán eliminadas en cada ejecución:",
"DeleteMaxRowsNoLimit": "sin límites",
"DeleteReportsConfirm": "Está disponiendo la eliminación de datos de informes. Si un antiguo informe es borrado, tendrá que reprocesarlos nuevamente para visualizarlos. ¿Está seguro que desea hacer esto?",
- "DeleteReportsDetailedInfo": "Información desde las tablas numéricas de los archivos de la base de datos (%1$s) y borradores de archivos de tablas (%2$s) serán eliminados.",
- "DeleteReportsInfo": "Si es habilitado, todos los antiguos informes serán eliminados. %1$sRecomendamos habilitarlo solo cuando el espacio de la base de datos sea limitado.%2$s",
+ "DeleteReportsDetailedInfo": "Serán eliminados los datos de las tablas con información numérica archivada (%1$s) y de las tablas de informes procesados (%2$s)",
+ "DeleteReportsInfo": "Si se habilita, todos los informes antiguos serán eliminados. %1$sRecomendamos habilitarlo solo cuando esté limitado el espacio en la base de datos .%2$s",
"DeleteReportsInfo2": "Si no ha habilitado \"%s\", los antiguos informes serán recreados automáticamente cuando sean solicitados.",
"DeleteReportsInfo3": "Si ha habilitado \"%s\", la información será eliminada de forma permanente.",
"DeleteReportsOlderThan": "Borrar informes anteriores a",
@@ -56,8 +56,8 @@
"RecommendedForPrivacy": "Recomendado por privacidad",
"ReportsDataSavedEstimate": "Tamaño de la base de datos",
"SaveSettingsBeforePurge": "Ha cambiado la configuración de borrado de información. Por favor, guárdelas antes de iniciar la purga.",
- "SeeAlsoOurOfficialGuidePrivacy": "Lee también nuestra guía oficial: %1$sPrivacidad del análisis de internet%2$s",
- "Teaser": "En esta página, puede personalizar Piwik para hacer que cumpla con la privacidad de las legislaciones existentes: %1$s haciendo anónima la IP del visitante%2$s, %3$s eliminar automáticamente los antiguos registros de los visitantes de la base de datos%4$s. y %5$s proporcionando un mecanismo de opción de desconectarse de su sitio de internet (para que los visitantes no sean seguidos)%6$s",
+ "SeeAlsoOurOfficialGuidePrivacy": "Lee también nuestra guía oficial: %1$sPrivacidad en las análíticas web%2$s",
+ "Teaser": "En esta página, puede personalizar Piwik para hacer que cumpla con la privacidad de las legislaciones existentes: %1$s haciendo anónima la IP del visitante%2$s, %3$s eliminar automáticamente los antiguos registros de los visitantes de la base de datos%4$s. y %5$s proporcionando un mecanismo de renuncia de su sitio web (para que los visitantes no sean rastreados)%6$s",
"TeaserHeadline": "Configuración de privacidad",
"UseAnonymizedIpForVisitEnrichment": "Usa también direcciones IP anónimas para enriquecer las visitas.",
"UseAnonymizedIpForVisitEnrichmentNote": "Los complementos Geo Location a través de IP y Provider mejoran los metadatos de los visitantes. Por defecto estos complementos utilizan las direcciones IP anónimas. Si elige 'No' será utilizada una dirección completa de forma no anónima lo que resulta en una menor privacidad pero una mayor precisión de datos.",
diff --git a/plugins/PrivacyManager/lang/fi.json b/plugins/PrivacyManager/lang/fi.json
index 59a4336c12..600235035f 100644
--- a/plugins/PrivacyManager/lang/fi.json
+++ b/plugins/PrivacyManager/lang/fi.json
@@ -10,9 +10,9 @@
"DBPurged": "Tietokannasta poistettiin vanhat tiedot.",
"DeleteBothConfirm": "Olet ottamassa käyttöön sekä logien että raporttien poistamisen. Tämä poistaa peruuttamattomasti vanhat analytiikkatiedot. Haluatko varmasti tehdä tämän?",
"DeleteDataDescription": "Voit säätää Piwikin poistamaan vanhat kävijätiedot ja\/tai luodut raportit, jotta tietokannan koko pysyy pienenä.",
- "DeleteDataDescription2": "Voit valita, että etukäteen luodut raportit säilytetäänja ainoastaan käynnit, avatut sivut ja seurantalogit poistetaan. Tai raportit voidaan poistaa ja logit säilyttää.",
+ "DeleteDataDescription2": "Voit valita, että etukäteen luodut raportit säilytetään, ja ainoastaan käynnit, avatut sivut ja seurantalokit poistetaan. Vaihtoehtoisesti raportit voidaan poistaa ja lokit säilyttää.",
"DeleteDataInterval": "Poista vanhat tiedot joka",
- "DeleteOldVisitorLogs": "Poista vanhat kävijälogit",
+ "DeleteOldVisitorLogs": "Poista vanhat kävijälokit",
"DeleteOldArchivedReports": "Poista arkistoidut raportit",
"DeleteLogDescription2": "Kun lokeja poistetaan automaattisesti, sinun täytyy tarkistaa, että kaikki aikaisemmat päivittäiset raportit on prosessoitu, jotta tietoja ei häviä.",
"DeleteLogInfo": "Lokit seuraavista tauluista poistetaan: %s",
@@ -60,8 +60,8 @@
"TeaserHeadline": "Yksityisyysasetukset",
"UseAnonymizedIpForVisitEnrichment": "Käytä piilotettuja IP-osoitteita myös käyntejä rikastettaessa.",
"UseAnonymizedIpForVisitEnrichmentNote": "Geopaikannusliitännäiset parantavat käyttäjien metadataa. Nämä liitännäiset käyttävät oletuksena piilotettuja IP-osoitteita. Jos valitset \"Ei\", käytetään täysiä, ei-piilotettuja IP-osoitteita. Tämä vähentää yksityisyyttä, mutta parantaa datan tarkkuutta.",
- "UseAnonymizeIp": "Anonymisoi vierailijoiden IP-osoitteet",
- "UseDeleteLog": "Poista säännöllisesti vanhat käyttäjien lokit tietokannasta",
+ "UseAnonymizeIp": "Anonymisoi kävijöiden IP-osoitteet",
+ "UseDeleteLog": "Poista säännöllisesti vanhat kävijöiden lokit tietokannasta",
"UseDeleteReports": "Poista vanhat raportit säännöllisesti."
}
} \ No newline at end of file
diff --git a/plugins/ProfessionalServices/ProfessionalServices.php b/plugins/ProfessionalServices/ProfessionalServices.php
index 8dafa079bd..5dd848e61d 100644
--- a/plugins/ProfessionalServices/ProfessionalServices.php
+++ b/plugins/ProfessionalServices/ProfessionalServices.php
@@ -9,6 +9,7 @@
namespace Piwik\Plugins\ProfessionalServices;
use Piwik\Common;
+use Piwik\View;
class ProfessionalServices extends \Piwik\Plugin
{
@@ -24,6 +25,7 @@ class ProfessionalServices extends \Piwik\Plugin
'Template.afterGoalCannotAddNewGoal' => array('function' => 'getGoalOverviewPromo', 'after' => true),
'Template.endGoalEditTable' => array('function' => 'getGoalFunnelOverviewPromo', 'after' => true),
'Template.afterEventsReport' => 'getEventsPromo',
+ 'Template.afterReferrersKeywordsReport' => 'getSearchKeywordsPerformancePromo',
);
}
@@ -58,6 +60,17 @@ class ProfessionalServices extends \Piwik\Plugin
return $isWidget;
}
+ public function getSearchKeywordsPerformancePromo(&$out)
+ {
+ if(\Piwik\Plugin\Manager::getInstance()->isPluginActivated('SearchEngineKeywordsPerformance')
+ || $this->isRequestForDashboardWidget()) {
+ return;
+ }
+
+ $view = new View('@ProfessionalServices/promoSearchKeywords');
+ $out .= $view->render();
+ }
+
public function getGoalFunnelOverviewPromo(&$out)
{
if(\Piwik\Plugin\Manager::getInstance()->isPluginActivated('Funnels')
@@ -65,12 +78,8 @@ class ProfessionalServices extends \Piwik\Plugin
return;
}
- $out .= '
- <p style="margin-top:3em;margin-bottom:3em" class=" alert-info alert">Did you know?
- A Funnel defines a series of actions that you expect your visitors to take on their way to converting a goal.
- <br/>With <a target="_blank" rel="noreferrer" href="https://piwik.org/recommends/conversion-funnel/">Funnels for Piwik</a>,
- you can easily determine your funnel and see where your visitors drop off and how to focus efforts to increase your conversions.
- </p>';
+ $view = new View('@ProfessionalServices/promoFunnel');
+ $out .= $view->render();
}
@@ -81,11 +90,8 @@ class ProfessionalServices extends \Piwik\Plugin
return;
}
- $out .= '
- <p style="margin-top:3em" class=" alert-info alert">Did you know?
- With <a target="_blank" rel="noreferrer" href="https://piwik.org/recommends/ab-testing-learn-more/">A/B Testing for Piwik</a> you can immediately increase conversions and sales by creating different versions of a page to see which one grows your business.
- </p>
- ';
+ $view = new View('@ProfessionalServices/promoExperiments.twig');
+ $out .= $view->render();
}
public function getEventsPromo(&$out)
@@ -93,14 +99,8 @@ class ProfessionalServices extends \Piwik\Plugin
if($this->isRequestForDashboardWidget()) {
return;
}
- $inlineAd = '';
- if(!\Piwik\Plugin\Manager::getInstance()->isPluginActivated('MediaAnalytics')) {
- $inlineAd = '<br/>When you publish videos or audios, <a target="_blank" rel="noreferrer" href="https://piwik.org/recommends/media-analytics-website">Media Analytics gives deep insights into your audience</a> and how they watch your videos or listens to your music.';
- }
- $out .= '<p style="margin-top:3em" class=" alert-info alert">Did you know?
- <br/>Using Events you can measure any user interaction and gain amazing insights into your audience. <a target="_blank" href="?module=Proxy&action=redirect&url=http://piwik.org/docs/event-tracking/">Learn more</a>.
- <br/> To measure blocks of content such as image galleries, listings or ads: use <a target="_blank" href="?module=Proxy&action=redirect&url=http://developer.piwik.org/guides/content-tracking">Content Tracking</a> and see exactly which content is viewed and clicked.
- ' . $inlineAd . '
- </p>';
+ $view = new View('@ProfessionalServices/promoBelowEvents');
+ $view->displayMediaAnalyticsAd = !\Piwik\Plugin\Manager::getInstance()->isPluginActivated('MediaAnalytics');
+ $out .= $view->render();
}
}
diff --git a/plugins/ProfessionalServices/Promo.php b/plugins/ProfessionalServices/Promo.php
index 630b2c98c0..d163843627 100644
--- a/plugins/ProfessionalServices/Promo.php
+++ b/plugins/ProfessionalServices/Promo.php
@@ -37,13 +37,19 @@ class Promo
'url' => 'https://piwik.org/recommends/media-analytics-website',
'text' => 'Ever wondered how people interact and engage with videos or audios on your website? Well now you can, and it integrates perfectly into your Piwik.',
),
-
array(
'campaignContent' => 'mediaAnalytics',
'url' => 'https://piwik.org/recommends/media-analytics',
'text' => 'Get powerful insights into how your audience watches your videos and listens to your audio. Media Analytics is now available on the Marketplace.',
),
+ // Form
+ array(
+ 'campaignContent' => 'formAnalytics',
+ 'url' => 'https://piwik.org/recommends/form-analytics',
+ 'text' => 'Increase the conversions on your online forms, by learning everything about your users behavior and their pain points on your forms',
+ ),
+
// Funnels
array(
'campaignContent' => 'funnels',
@@ -57,41 +63,40 @@ class Promo
'url' => 'https://piwik.org/training/?pk_campaign=' . Advertising::CAMPAIGN_NAME_PROFESSIONAL_SERVICES . '&pk_source=Piwik_App',
'text' => 'Want to know how to use all the exciting features in Piwik? Try a User training to be up to speed with working with Piwik.'
),
-
-
-
- // Piwik PRO
- // https://piwik.org/recommends/piwik-pro-from-app
+ // Keywords performance
array(
- 'campaignContent' => 'discoverPower',
- 'url' => 'https://piwik.org/recommends/piwik-pro-from-app',
- 'text' => 'Discover the power of open-source combined with enterprise-grade support and premium functionalities.'
+ 'campaignContent' => 'searchKeywords',
+ 'url' => 'https://piwik.org/recommends/search-keywords-performance/',
+ 'text' => 'Which queries caused your website to appear in search results? Improve your SEO efforts and monitor your position and performance for each Keyword directly in your Piwik reports.',
),
+ // Roll-Up Reporting
array(
- 'campaignContent' => 'bringEnterpriseLevel',
- 'url' => 'https://piwik.org/recommends/piwik-pro-from-app',
- 'text' => 'Bring your analytics to enterprise level. Upgrade your Piwik platform and receive access to numerous premium features and assistance from experts.'
+ 'campaignContent' => 'rollUp',
+ 'url' => 'https://piwik.org/recommends/roll-up-reporting/',
+ 'text' => 'Did you know you can aggregate the collected data across hundreds of sites and display it in a single dashboard?',
),
+ // White label
array(
- 'campaignContent' => 'monitoringAndIncident',
- 'url' => 'https://piwik.org/recommends/piwik-pro-from-app',
- 'text' => 'Do you need 24/7 Monitoring and Incident Handling for your Piwik? Get Premium features and enterprise-grade support.'
+ 'campaignContent' => 'whiteLabel',
+ 'url' => 'https://piwik.org/recommends/white-label/',
+ 'text' => 'Did you know you can give your clients access to their analytics reports where all Piwik-branded widgets are removed? Try the White Label product!',
+ ),
+ // Enterprise
+ array(
+ 'campaignContent' => 'bringEnterpriseLevel',
+ 'url' => 'https://piwik.org/recommends/enterprise/',
+ 'text' => 'Bring your analytics to enterprise level. Upgrade your Piwik platform and receive access to numerous premium features and assistance from experts.'
),
array(
'campaignContent' => 'slowingDown',
- 'url' => 'https://piwik.org/recommends/piwik-pro-from-app',
+ 'url' => 'https://piwik.org/recommends/enterprise/',
'text' => 'Is your Piwik slowing down? Piwik experts can help with your server setup!'
),
array(
- 'campaignContent' => 'whiteLabel',
- 'url' => 'https://piwik.org/recommends/piwik-pro-from-app',
- 'text' => 'Did you know you can adjust the look and feel of Piwik to your brand, and even replace "Piwik" with your product name? Try the White Label product!',
+ 'campaignContent' => 'discoverPower',
+ 'url' => 'https://piwik.org/recommends/enterprise/',
+ 'text' => 'Discover the power of open-source combined with enterprise-grade support and premium functionalities.'
),
- array(
- 'campaignContent' => 'metaSites',
- 'url' => 'https://piwik.org/recommends/piwik-pro-from-app',
- 'text' => 'Did you know you can aggregate the collected data across hundreds of sites and display it in a single dashboard? Get Premium features and enterprise-grade support.',
- )
);
}
diff --git a/plugins/ProfessionalServices/templates/promoBelowEvents.twig b/plugins/ProfessionalServices/templates/promoBelowEvents.twig
new file mode 100644
index 0000000000..8121d9c1cb
--- /dev/null
+++ b/plugins/ProfessionalServices/templates/promoBelowEvents.twig
@@ -0,0 +1,7 @@
+<p style="margin-top:3em" class=" alert-info alert">Did you know?
+ <br/>Using Events you can measure any user interaction and gain amazing insights into your audience. <a target="_blank" href="?module=Proxy&action=redirect&url=http://piwik.org/docs/event-tracking/">Learn more</a>.
+ <br/> To measure blocks of content such as image galleries, listings or ads: use <a target="_blank" href="?module=Proxy&action=redirect&url=http://developer.piwik.org/guides/content-tracking">Content Tracking</a> and see exactly which content is viewed and clicked.
+ {% if displayMediaAnalyticsAd %}
+ <br/>When you publish videos or audios, <a target="_blank" rel="noreferrer" href="https://piwik.org/recommends/media-analytics-website">Media Analytics gives deep insights into your audience</a> and how they watch your videos or listens to your music.
+ {% endif %}
+</p> \ No newline at end of file
diff --git a/plugins/ProfessionalServices/templates/promoExperiments.twig b/plugins/ProfessionalServices/templates/promoExperiments.twig
new file mode 100644
index 0000000000..cfef975e0c
--- /dev/null
+++ b/plugins/ProfessionalServices/templates/promoExperiments.twig
@@ -0,0 +1,3 @@
+<p style="margin-top:3em" class=" alert-info alert">Did you know?
+ With <a target="_blank" rel="noreferrer" href="https://piwik.org/recommends/ab-testing-learn-more/">A/B Testing for Piwik</a> you can immediately increase conversions and sales by creating different versions of a page to see which one grows your business.
+</p> \ No newline at end of file
diff --git a/plugins/ProfessionalServices/templates/promoFunnel.twig b/plugins/ProfessionalServices/templates/promoFunnel.twig
new file mode 100644
index 0000000000..4e1118a0ef
--- /dev/null
+++ b/plugins/ProfessionalServices/templates/promoFunnel.twig
@@ -0,0 +1,5 @@
+<p style="margin-top:3em;margin-bottom:3em" class="alert-info alert">Did you know?
+ A Funnel defines a series of actions that you expect your visitors to take on their way to converting a goal.
+ <br/>With <a target="_blank" rel="noreferrer" href="https://piwik.org/recommends/conversion-funnel/">Funnels for Piwik</a>,
+ you can easily determine your funnel and see where your visitors drop off and how to focus efforts to increase your conversions.
+</p> \ No newline at end of file
diff --git a/plugins/ProfessionalServices/templates/promoSearchKeywords.twig b/plugins/ProfessionalServices/templates/promoSearchKeywords.twig
new file mode 100644
index 0000000000..aaa283b68f
--- /dev/null
+++ b/plugins/ProfessionalServices/templates/promoSearchKeywords.twig
@@ -0,0 +1,6 @@
+<p style="margin-top:3em;margin-bottom:3em" class=" alert-info alert">Did you know?<br/>
+ Use <a target="_blank" rel="noreferrer" href="https://piwik.org/recommends/search-keywords-performance/">Search Keywords Performance</a>
+ to see all keywords behind 'keyword not defined'.
+ All keywords searched by your users on Google, Bing and other search engines will be listed
+ and you can even monitor the SEO position of your website in their search results.
+</p> \ No newline at end of file
diff --git a/plugins/Referrers/Reports/GetKeywords.php b/plugins/Referrers/Reports/GetKeywords.php
index 3239fefde0..7cd0473fe0 100644
--- a/plugins/Referrers/Reports/GetKeywords.php
+++ b/plugins/Referrers/Reports/GetKeywords.php
@@ -8,6 +8,7 @@
*/
namespace Piwik\Plugins\Referrers\Reports;
+use Piwik\EventDispatcher;
use Piwik\Piwik;
use Piwik\Plugin\ViewDataTable;
use Piwik\Plugins\CoreVisualizations\Visualizations\HtmlTable;
@@ -39,6 +40,21 @@ class GetKeywords extends Base
if ($view->isViewDataTableId(HtmlTable::ID)) {
$view->config->disable_subtable_when_show_goals = true;
}
+
+ $this->configureFooterMessage($view);
}
+ protected function configureFooterMessage(ViewDataTable $view)
+ {
+ if ($this->isSubtableReport) {
+ // no footer message for subtables
+ return;
+ }
+
+ $out = '';
+ EventDispatcher::getInstance()->postEvent('Template.afterReferrersKeywordsReport', array(&$out));
+ $view->config->show_footer_message = $out;
+ }
+
+
}
diff --git a/plugins/Referrers/lang/fi.json b/plugins/Referrers/lang/fi.json
index 858fed0338..11f7d6fccc 100644
--- a/plugins/Referrers/lang/fi.json
+++ b/plugins/Referrers/lang/fi.json
@@ -2,7 +2,7 @@
"Referrers": {
"AllReferrersReportDocumentation": "Tämä raportti näyttää kaikki viittaukset yhdessä raportissa, listaten kaikki verkkosivut, hakusanat ja kampanjat, joita käyttäjäsi käyttivät löytääkseen verkkosivusi.",
"Campaigns": "Kampanjat",
- "CampaignsDocumentation": "Vierailijat, jotka tulivat sivullesi kampanjan mukana. %1$s Katso %2$s raportista lisätietoja.",
+ "CampaignsDocumentation": "Kävijät, jotka tulivat sivullesi kampanjan mukana. %1$s Katso %2$s raportista lisätietoja.",
"CampaignsReportDocumentation": "Tässä raportissa on tietoa kampanjoista, joilla käyttäjiä tuli sivuillesi. %1$s Lisätietoa kampanjoiden seuraamisesta löytyy %2$senglanninkielisestä dokumentista piwik.orgissa%3$s",
"ColumnCampaign": "Kampanja",
"ColumnSearchEngine": "Hakukone",
diff --git a/plugins/ScheduledReports/lang/el.json b/plugins/ScheduledReports/lang/el.json
index ccfc0d801f..87664faf15 100644
--- a/plugins/ScheduledReports/lang/el.json
+++ b/plugins/ScheduledReports/lang/el.json
@@ -25,7 +25,7 @@
"PiwikReports": "Αναφορές Piwik",
"PleaseFindAttachedFile": "Βρείτε την %1$s αναφορά σας για %2$s στο συνημμένο αρχείο.",
"SentFromX": "Στάλθηκε από %s.",
- "PleaseFindBelow": "Βρείτε παρακάτω την αναφορά %1$s για τη %2$s.",
+ "PleaseFindBelow": "Βρείτε παρακάτω την αναφορά %1$s για το %2$s.",
"PluginDescription": "Δημιουργεί προσαρμοσμένες αναφορές και τις προγραμματίζει για καθημερινή, εβδομαδιαία ή μηνιαία αναφορά σε ένα ή περισσότερα άτομα. Υποστηρίζονται αρκετοί τύποι αναφορών (html, pdf, csv, εικόνες).",
"ReportFormat": "Μορφή Αναφοράς",
"ReportHour": "Αποστολή αναφοράς στις %s",
diff --git a/plugins/ScheduledReports/lang/it.json b/plugins/ScheduledReports/lang/it.json
index 41bbb35ce5..48a55ccfb6 100644
--- a/plugins/ScheduledReports/lang/it.json
+++ b/plugins/ScheduledReports/lang/it.json
@@ -23,6 +23,7 @@
"NoRecipients": "Questo report non ha destinatari",
"Pagination": "Pagina %1$s di %2$s",
"PiwikReports": "Report di Piwik",
+ "PleaseFindAttachedFile": "Troverai il tuo report %1$s per %2$s nel file allegato.",
"SentFromX": "Inviato da %s",
"PleaseFindBelow": "Di seguito trovi il tuo report %1$s per %2$s.",
"PluginDescription": "Crea dei report personalizzati e li programma per l'invio tramite email ogni giorno, settimana o mese a una o più persone. Sono supportati svariati formati (html, pdf, csv, immagini).",
diff --git a/plugins/SegmentEditor/javascripts/Segmentation.js b/plugins/SegmentEditor/javascripts/Segmentation.js
index 90fc6cc7f5..d85399781b 100644
--- a/plugins/SegmentEditor/javascripts/Segmentation.js
+++ b/plugins/SegmentEditor/javascripts/Segmentation.js
@@ -8,6 +8,9 @@
Segmentation = (function($) {
Mousetrap.bind('s', function (event) {
+ if (event.altKey) {
+ return;
+ }
if (event.preventDefault) {
event.preventDefault();
} else {
@@ -546,6 +549,14 @@ Segmentation = (function($) {
});
self.target.on('click', '.add_new_segment', function (e) {
+
+ var parameters = {isAllowed: true};
+ var $rootScope = piwikHelper.getAngularDependency('$rootScope');
+ $rootScope.$emit('Segmentation.initAddSegment', parameters);
+ if (parameters && !parameters.isAllowed) {
+ return;
+ }
+
e.stopPropagation();
displayFormAddNewSegment(e);
});
diff --git a/plugins/SegmentEditor/lang/es.json b/plugins/SegmentEditor/lang/es.json
index 61e3945add..9d64dfe991 100644
--- a/plugins/SegmentEditor/lang/es.json
+++ b/plugins/SegmentEditor/lang/es.json
@@ -7,7 +7,7 @@
"AutoArchivePreProcessed": "los informes segmentados son pre-procesados (rápidamente, requiere cron)",
"AutoArchiveRealTime": "los informes segmentados son procesados en tiempo real",
"ChangingSegmentDefinitionConfirmationNotProcessedOnRequest": "Está próximo a cambiar la definición de este segmento. Sus informes analíticos para este nuevo segmento no estarán disponibles hasta que estos no sean reprocesados. Puede tomar unas pocas horas para que se observe información de este segmento. Aun así, proceder?",
- "ChangingSegmentDefinitionConfirmationProcessedOnRequest": "Está próximo a cambiar la definición de segmento. Sus informes analíticos para este nuevo segmento serán reprocesados bajo demanda la próxima vez que los peticione. Sus informes pueden tomar un par de minutos en aparecer. ¿Proceder de cualquier modo?",
+ "ChangingSegmentDefinitionConfirmationProcessedOnRequest": "Estás a punto de cambiar la definición de segmento. Tus informes analíticos para este nuevo segmento serán reprocesados la próxima vez que los requieras. Tus informes pueden tardar un par de minutos en aparecer. ¿Deseas proceder de cualquier modo?",
"ChooseASegment": "Elegir un segmento",
"CurrentlySelectedSegment": "Segmento seleccionado actualmente: %s",
"DataAvailableAtLaterDate": "Sus informes analíticos segmentados estarán disponibles más tarde. Lamentamos la inconveniencia.",
@@ -27,7 +27,7 @@
"ThisSegmentIsVisibleTo": "Este segmento es visible para:",
"VisibleToAllUsers": "todos los usuarios",
"VisibleToMe": "yo",
- "YouMayChangeSetting": "Alternativamente puede cambiar la configuración en el archivo config (%1$s) o modificar este segmento y elegir '%2$s'.",
+ "YouMayChangeSetting": "Alternativamente puedes cambiar la configuración en el archivo config (%1$s) o modificar este segmento y elegir '%2$s'.",
"VisibleToSuperUser": "Visible para usted debido a que posee un acceso de Super Usuario",
"SharedWithYou": "Compartido con usted",
"YouMustBeLoggedInToCreateSegments": "Debe estar conectado para crear y editar segmentos de usuario personalizados.",
diff --git a/plugins/SegmentEditor/lang/fi.json b/plugins/SegmentEditor/lang/fi.json
index 7aab90628c..b3cc1489e8 100644
--- a/plugins/SegmentEditor/lang/fi.json
+++ b/plugins/SegmentEditor/lang/fi.json
@@ -9,7 +9,7 @@
"DataAvailableAtLaterDate": "Raportti tulee saataville myöhemmin. Pahoittelut häiriöstä.",
"DefaultAllVisits": "Kaikki käynnit",
"DragDropCondition": "Vedä & Pudota ehto",
- "LoadingSegmentedDataMayTakeSomeTime": "Segmentoitujen käyttäjätietojen prosessointi saattaa kestää joitakin minuutteja...",
+ "LoadingSegmentedDataMayTakeSomeTime": "Segmentoitujen kävijätietojen prosessointi saattaa kestää joitakin minuutteja...",
"OperatorAND": "JA",
"OperatorOR": "TAI",
"SaveAndApply": "Tallenna ja ota käyttöön",
diff --git a/plugins/SitesManager/angularjs/sites-manager/sites-manager.controller.js b/plugins/SitesManager/angularjs/sites-manager/sites-manager.controller.js
index 3fbd008740..64b3bfb88d 100644
--- a/plugins/SitesManager/angularjs/sites-manager/sites-manager.controller.js
+++ b/plugins/SitesManager/angularjs/sites-manager/sites-manager.controller.js
@@ -194,6 +194,13 @@
};
var addSite = function(type) {
+
+ var parameters = {isAllowed: true, measurableType: type};
+ $rootScope.$emit('SitesManager.initAddSite', parameters);
+ if (parameters && !parameters.isAllowed) {
+ return;
+ }
+
if (!type) {
type = 'website'; // todo shall we really hard code this or trigger an exception or so?
}
diff --git a/plugins/SitesManager/lang/fi.json b/plugins/SitesManager/lang/fi.json
index 6bcea5084d..4ce8166b36 100644
--- a/plugins/SitesManager/lang/fi.json
+++ b/plugins/SitesManager/lang/fi.json
@@ -2,7 +2,7 @@
"SitesManager": {
"AddSite": "Lisää uusi sivu",
"AdvancedTimezoneSupportNotFound": "PHP-asennuksessasi ei ole edistyneiden aikavyöhykkeiden tukea (tuettu PHP>=5.2:ssa). Voit silti valita manuaalisesti poikkeaman UTC:stä.",
- "AliasUrlHelp": "On suositeltavaa mutta ei pakollista määrittää sivun osoitteita. Osoitteiden määrittäminen ei ole pakollista. www:tä ei tarvitse lisätä.",
+ "AliasUrlHelp": "On suositeltavaa, mutta ei pakollista, määrittää sivuston osoitteet. Alias-osoitteita ei näytetä viittaajaraporteissa. Osoitteita ei tarvitse määritellä www-alkuosalla ja ilman, koska Piwik huomioi molemmat automaattisesti.",
"ChangingYourTimezoneWillOnlyAffectDataForward": "Aikavyöhykkeen vaihtaminen vaikuttaa vain uusiin tietoihin, eikä vanhoja muutetaan.",
"ChooseCityInSameTimezoneAsYou": "Valitse kaupunki samalta aikavyöhykkeeltä.",
"Currency": "Valuutta",
diff --git a/plugins/SitesManager/lang/fr.json b/plugins/SitesManager/lang/fr.json
index 6f2fa0253d..c96c2105c8 100644
--- a/plugins/SitesManager/lang/fr.json
+++ b/plugins/SitesManager/lang/fr.json
@@ -71,7 +71,7 @@
"SiteWithoutDataDescription": "Aucune donnée d'analyse n'a été enregistrée pour ce site pour le moment.",
"SiteWithoutDataSetupTracking": "Veuillez configurer le %1$scode de suivit JavaScript%2$s sur votre site web 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, peut être voudriez vous %1$sdéfinir des objectifs%2$s.",
+ "SiteWithoutDataSetupGoals": "Pendant ce temps, peut-être voudriez-vous %1$sdéfinir des objectifs%2$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/TestRunner/Commands/TestsRunUI.php b/plugins/TestRunner/Commands/TestsRunUI.php
index f227e74ef6..dc31162929 100644
--- a/plugins/TestRunner/Commands/TestsRunUI.php
+++ b/plugins/TestRunner/Commands/TestsRunUI.php
@@ -44,7 +44,7 @@ class TestsRunUI extends ConsoleCommand
protected function execute(InputInterface $input, OutputInterface $output)
{
$specs = $input->getArgument('specs');
- $persistFixtureData = $input->getOption("persist-fixture-data");
+ $persistFixtureData = $input->getOption('persist-fixture-data');
$keepSymlinks = $input->getOption('keep-symlinks');
$printLogs = $input->getOption('print-logs');
$drop = $input->getOption('drop');
@@ -105,6 +105,8 @@ class TestsRunUI extends ConsoleCommand
$phantomJsOptions[] = "--debug=true";
}
+ $phantomJsOptions[] = "--ignore-ssl-errors=true";
+
if ($extraOptions) {
$options[] = $extraOptions;
}
diff --git a/plugins/UserCountry/Diagnostic/GeolocationDiagnostic.php b/plugins/UserCountry/Diagnostic/GeolocationDiagnostic.php
index 5dd8c7b766..c01660bbc0 100644
--- a/plugins/UserCountry/Diagnostic/GeolocationDiagnostic.php
+++ b/plugins/UserCountry/Diagnostic/GeolocationDiagnostic.php
@@ -41,7 +41,7 @@ class GeolocationDiagnostic implements Diagnostic
$currentProviderId = LocationProvider::getCurrentProviderId();
$allProviders = LocationProvider::getAllProviderInfo();
$isRecommendedProvider = in_array($currentProviderId, array(LocationProvider\GeoIp\Php::ID, $currentProviderId == LocationProvider\GeoIp\Pecl::ID));
- $isProviderInstalled = ($allProviders[$currentProviderId]['status'] == LocationProvider::INSTALLED);
+ $isProviderInstalled = (isset($allProviders[$currentProviderId]['status']) && $allProviders[$currentProviderId]['status'] == LocationProvider::INSTALLED);
if ($isRecommendedProvider && $isProviderInstalled) {
return array(DiagnosticResult::singleResult($label, DiagnosticResult::STATUS_OK));
diff --git a/plugins/UserCountry/lang/fr.json b/plugins/UserCountry/lang/fr.json
index bc6f551059..2298c5b26c 100644
--- a/plugins/UserCountry/lang/fr.json
+++ b/plugins/UserCountry/lang/fr.json
@@ -24,7 +24,7 @@
"DistinctCountries": "%s pays différents",
"DownloadingDb": "Téléchargement de %s",
"DownloadNewDatabasesEvery": "Mettre à jour les bases de données tous (toutes) les",
- "FatalErrorDuringDownload": "Une erreur fatale est arrivée lors du téléchargement de ce fichier. Il y a peut être un problème avec votre connexion Internet, avec la base de données GeoIP que vous téléchargez ou avec Piwik. Essayez de la télécharger et de l'installer manuellement.",
+ "FatalErrorDuringDownload": "Une erreur fatale est arrivée lors du téléchargement de ce fichier. Il y a peut-être un problème avec votre connexion Internet, avec la base de données GeoIP que vous téléchargez ou avec Piwik. Essayez de la télécharger et de l'installer manuellement.",
"FoundApacheModules": "Piwik a trouvé les modules Apache suivants",
"FromDifferentCities": "villes différentes",
"GeoIPCannotFindMbstringExtension": "Impossible de trouver la fonction %1$s. Veuillez vous assurer que l'extension %2$s est installée et chargée.",
diff --git a/plugins/UserCountryMap/lang/es.json b/plugins/UserCountryMap/lang/es.json
index 67234af481..0e38b00199 100644
--- a/plugins/UserCountryMap/lang/es.json
+++ b/plugins/UserCountryMap/lang/es.json
@@ -1,6 +1,6 @@
{
"UserCountryMap": {
- "PluginDescription": "Este complemento suministra los reproductores Mapa de visitante y Mapa tiempo-real. Nota: Requiere el complemento UserCountry habilitado.",
+ "PluginDescription": "Este complemento suministra los módulos Mapa de visitante y Mapa en tiempo real. Nota: Requiere el complemento UserCountry habilitado.",
"AndNOthers": "y %s otros",
"Cities": "Ciudades",
"Countries": "Países",
diff --git a/plugins/UserLanguage/lang/fi.json b/plugins/UserLanguage/lang/fi.json
index 140e43780b..28d2161d71 100644
--- a/plugins/UserLanguage/lang/fi.json
+++ b/plugins/UserLanguage/lang/fi.json
@@ -2,6 +2,6 @@
"UserLanguage": {
"BrowserLanguage": "Selaimen kieli",
"LanguageCode": "Kielikoodi",
- "PluginDescription": "Raportoi käyttäjän selaimen kieliasetukset."
+ "PluginDescription": "Raportoi kävijöiden selainten kieliasetukset."
}
} \ No newline at end of file
diff --git a/plugins/UsersManager/angularjs/manage-users/manage-users.controller.js b/plugins/UsersManager/angularjs/manage-users/manage-users.controller.js
index 621113355c..a10d331e4f 100644
--- a/plugins/UsersManager/angularjs/manage-users/manage-users.controller.js
+++ b/plugins/UsersManager/angularjs/manage-users/manage-users.controller.js
@@ -7,9 +7,9 @@
(function () {
angular.module('piwikApp').controller('ManageUsersController', ManageUsersController);
- ManageUsersController.$inject = ['piwik', 'piwikApi', '$timeout'];
+ ManageUsersController.$inject = ['piwik', 'piwikApi', '$timeout', '$rootScope'];
- function ManageUsersController(piwik, piwikApi, $timeout) {
+ function ManageUsersController(piwik, piwikApi, $timeout, $rootScope) {
// remember to keep controller very simple. Create a service/factory (model) if needed
var self = this;
@@ -132,6 +132,13 @@
}
this.createUser = function () {
+
+ var parameters = {isAllowed: true};
+ $rootScope.$emit('UsersManager.initAddUser', parameters);
+ if (parameters && !parameters.isAllowed) {
+ return;
+ }
+
this.showCreateUser = false;
var numberOfRows = $('table#users')[0].rows.length;
diff --git a/plugins/UsersManager/lang/es.json b/plugins/UsersManager/lang/es.json
index 5a5c2d428b..0094c898b6 100644
--- a/plugins/UsersManager/lang/es.json
+++ b/plugins/UsersManager/lang/es.json
@@ -16,7 +16,7 @@
"DeleteConfirm": "¿Está seguro que desea eliminar al usuario %s?",
"Email": "Correo electrónico",
"EmailYourAdministrator": "%1$sEnviar un correo electrónico a su administrador acerca de este problema%2$s.",
- "EnterUsernameOrEmail": "Introduce usuario o correo electrónico",
+ "EnterUsernameOrEmail": "Introduce un nombre de usuario o correo electrónico",
"ExceptionAccessValues": "El parámetro de acceso debe tener uno de los siguientes valores: [ %s ]",
"ExceptionAdminAnonymous": "No puede concederle el acceso de 'administrador' a un usuario 'anónimo'.",
"ExceptionDeleteDoesNotExist": "El usuario '%s' no existe, por lo tanto, no puede ser borrado.",
@@ -25,21 +25,21 @@
"ExceptionEmailExists": "Ya existe un usuario con el correo electrónico '%s'.",
"ExceptionInvalidEmail": "El correo electrónico no tiene un formato válido.",
"ExceptionInvalidLoginFormat": "El usuario debe tener entre %1$s y %2$s caracteres y estar formado por letras, números o alguno de estos caracteres '_' o '-' o '.' o '@' o '+'",
- "ExceptionInvalidPassword": "La extensión de la contraseña debe ser superior a los %1$s caracteres.",
+ "ExceptionInvalidPassword": "La longitud de la contraseña debe ser superior a los %1$s caracteres.",
"ExceptionLoginExists": "El usuario '%s' ya existe.",
"ExceptionPasswordMD5HashExpected": "UsersManager.getTokenAuth está a la espera de una contraseña con algoritmo hash MD5 (32 caracteres de longitud). Por favor demande la función md5() en la contraseña antes de reclamar a este método.",
"ExceptionRemoveSuperUserAccessOnlySuperUser": "Eliminar el acceso Super Usuario del usuario '%s' no es posible.",
"ExceptionSuperUserAccess": "Este usuario tiene acceso Super Usuario y ya posee permiso para acceder y modificar todos los sitios de internet de Piwik. Puede eliminar el acceso Super Usuario a este usuario y volver a probar.",
"ExceptionUserDoesNotExist": "El usuario '%s' no existe.",
"ExceptionYouMustGrantSuperUserAccessFirst": "Debe haber al menos un usuario con acceso Super Usuario. Por favor conceda el acceso Super Usuario a otro usuario.",
- "ExceptionUserHasViewAccessAlready": "Éste usuario ya tiene acceso al sitio web.",
- "ExceptionNoValueForUsernameOrEmail": "Por favor introduce usuario o correo electrónico.",
+ "ExceptionUserHasViewAccessAlready": "Este usuario ya tiene acceso al sitio web.",
+ "ExceptionNoValueForUsernameOrEmail": "Por favor introduce u nombre de usuario o un correo electrónico.",
"ExcludeVisitsViaCookie": "Excluir sus visitas usando una cookie",
"ForAnonymousUsersReportDateToLoadByDefault": "Para los usuarios anónimos, fecha del informe a cargar por defecto",
"GiveUserAccess": "Otorgar acceso a '%1$s' %2$s para %3$s.",
- "GiveViewAccess": "Otorgar acceso a la visualización de %1$s",
+ "GiveViewAccess": "Otorgar acceso de visualización para %1$s",
"GiveViewAccessTitle": "Otorgar a un actual usuario acceso a ver los informes de %s",
- "GiveViewAccessInstructions": "Para otorgar atributos de visualización a actuales usuarios de %s suministre o el nombre de usuario o su correo electrónico",
+ "GiveViewAccessInstructions": "Para otorgar atributos de visualización para %s a un usuario existente introduce el nombre de usuario o su correo electrónico",
"IfYouWouldLikeToChangeThePasswordTypeANewOne": "Si desea cambiar la contraseña ingrese una nueva. Si no, déjelo vacío.",
"InjectedHostCannotChangePwd": "Está actualmente visitando con un medio desconocido (%1$s). No puede cambiar su contraseña hasta que el problema esté soluionado.",
"LastSeen": "Última visita",
@@ -77,7 +77,7 @@
"UsersManagementMainDescription": "Cree nuevos usuarios o actualice los actuales. Luego puede configurar sus permisos.",
"WhenUsersAreNotLoggedInAndVisitPiwikTheyShouldAccess": "Cuando los usuarios no están identificados y visitan Piwik, deberían poder acceder",
"YourUsernameCannotBeChanged": "Su nombre de usuario no puede ser cambiado.",
- "YourVisitsAreIgnoredOnDomain": "%1$sSus visitas son ignoradas por Piwik en %2$s %3$s (la cookie de ignorar a Piwik fue encontrada en su navegador).",
- "YourVisitsAreNotIgnored": "%1$sSus visitas no son ignoradas por Piwik%2$s (la cookie de ignorar a Piwik no fue encontrada en su navegador)."
+ "YourVisitsAreIgnoredOnDomain": "%1$sTus visitas son ignoradas por Piwik en %2$s %3$s (la cookie de ignorar a Piwik fue encontrada en su navegador).",
+ "YourVisitsAreNotIgnored": "%1$sTus visitas no son ignoradas por Piwik%2$s (la cookie de ignorar a Piwik no fue encontrada en su navegador)."
}
} \ No newline at end of file
diff --git a/plugins/UsersManager/lang/fi.json b/plugins/UsersManager/lang/fi.json
index 556d340a76..46da66f970 100644
--- a/plugins/UsersManager/lang/fi.json
+++ b/plugins/UsersManager/lang/fi.json
@@ -24,6 +24,7 @@
"ExceptionEmailExists": "Käyttäjä sähköpostilla '%s' on jo olemassa.",
"ExceptionInvalidEmail": "Sähköposti ei ole kelvollinen.",
"ExceptionInvalidLoginFormat": "Käyttäjänimen pitää olla %1$s-%2$s merkkiä pitkä ja saa sisältää vain kirjaimia (ei ääkkösiä), numeroita tai '_' or '-' or '.' or '@' or '+'",
+ "ExceptionInvalidPassword": "Salasanan täytyy olla vähintään %1$s merkkiä pitkä.",
"ExceptionLoginExists": "Käyttäjätunnus '%s' on jo olemassa.",
"ExceptionPasswordMD5HashExpected": "UserManager.getTokenAuth haluaa MD5-tiivisteen salasanastasi (32 merkkiä pitkä merkkijono). Kutsu md5()-funktiota salasanallesi ennen kutsumista.",
"ExceptionRemoveSuperUserAccessOnlySuperUser": "Superkäyttäjäoikeuksien poistaminen käyttäjältä '%s' ei ole mahdollista.",
diff --git a/plugins/UsersManager/lang/it.json b/plugins/UsersManager/lang/it.json
index d58253dce9..41f0ba988a 100644
--- a/plugins/UsersManager/lang/it.json
+++ b/plugins/UsersManager/lang/it.json
@@ -36,6 +36,7 @@
"ExceptionNoValueForUsernameOrEmail": "Per favore inserisci un nome utente o un indirizzo email.",
"ExcludeVisitsViaCookie": "Escludi le tue visite usando un cookie",
"ForAnonymousUsersReportDateToLoadByDefault": "Per utenti anonimi, data report da caricare di default",
+ "GiveUserAccess": "Dai a '%1$s' l'accesso %2$s per %3$s.",
"GiveViewAccess": "Da' accesso in lettura a %1$s",
"GiveViewAccessTitle": "Dai a un utente esistente l'accesso per vedere i report per %s",
"GiveViewAccessInstructions": "Per dare a un utente esistente l'accesso in visione per %s inserisci il nome utente o l'indirizzo email di un utente esistente",
@@ -55,6 +56,7 @@
"PrivAdmin": "Amministra Piwik",
"PrivNone": "Nessun accesso",
"PrivView": "Vista",
+ "RemoveUserAccess": "Togli a '%1$s' l'accesso a %2$s.",
"ReportDateToLoadByDefault": "Data report da caricare di default",
"ReportToLoadByDefault": "Report da caricare di default",
"SuperUserAccessManagement": "Gestisci l'accesso Super User",
@@ -63,11 +65,14 @@
"TheLoginScreen": "La schermata di login",
"ThereAreCurrentlyNRegisteredUsers": "Al momento ci sono %s utenti registrati.",
"TokenAuth": "Token Autenticazione API",
+ "TokenRegenerateConfirm": "Cambiando il token di autenticazione API verrà invalidato l'attuale token degli utenti. Se un utente è in questo momento loggato, gli potrebbe essere richiesto di accedere nuovamente. Vuoi veramente continuare?",
"TokenRegenerateConfirmSelf": "Il cambiamento del token di autenticazione API invaliderà il tuo token. Ti potrebbe essere chiesto di effettuare nuovamente l'accesso, se procedi. Vuoi veramente cambiare il tuo token di autenticazione?",
"TokenRegenerateLogoutWarning": "Quando rigeneri il tuo token verrai disconnesso e dovrai accedere nuovamente.",
"TokenRegenerateTitle": "Rigenera",
"TypeYourPasswordAgain": "Scrivi di nuovo la tua nuova password.",
"User": "Utente",
+ "UserHasPermission": "%1$s ha al momento accesso %2$s per %3$s.",
+ "UserHasNoPermission": "%1$s ha al momento %2$s a %3$s",
"UsersManagement": "Gestione utenti",
"UsersManagementMainDescription": "Crea nuovi utenti o aggiorna quelli esistenti. Puoi anche scegliere quali operazioni permettere tramite la tabella qui sopra.",
"WhenUsersAreNotLoggedInAndVisitPiwikTheyShouldAccess": "Quando gli utenti non si sono autenticati in Piwik, possono accedere a",
diff --git a/plugins/VisitsSummary/lang/es.json b/plugins/VisitsSummary/lang/es.json
index a727db2b94..9b3f4ed1b5 100644
--- a/plugins/VisitsSummary/lang/es.json
+++ b/plugins/VisitsSummary/lang/es.json
@@ -14,7 +14,7 @@
"NbSearchesDescription": "búsquedas totales en su sitio web",
"NbUniqueDownloadsDescription": "descargas únicas",
"NbUniqueOutlinksDescription": "enlaces de salida únicos",
- "NbUniquePageviewsDescription": "Solo páginas vistas",
+ "NbUniquePageviewsDescription": "páginas vistas únicas",
"NbUniqueVisitors": "visitantes únicos",
"NbUsersDescription": "usuarios",
"NbVisitsDescription": "visitas",
diff --git a/tests/UI/expected-screenshots/BarGraph_load.png b/tests/UI/expected-screenshots/BarGraph_load.png
index 9ce17c35fe..1a3b1997bc 100644
--- a/tests/UI/expected-screenshots/BarGraph_load.png
+++ b/tests/UI/expected-screenshots/BarGraph_load.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:a3616d61a7ea6e9ff3fd6dd5b3ebc3c1a7262dc905efe5a2e3a1cb37d6415bf8
-size 14355
+oid sha256:52149c088a9d4952984527d2fcb69629eb19917ab7ea06828567e7b4de176626
+size 33400
diff --git a/tests/UI/expected-screenshots/BarGraph_metric_picker_shown.png b/tests/UI/expected-screenshots/BarGraph_metric_picker_shown.png
index aa0cace36b..3b1b59724e 100644
--- a/tests/UI/expected-screenshots/BarGraph_metric_picker_shown.png
+++ b/tests/UI/expected-screenshots/BarGraph_metric_picker_shown.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:7a285d7f289198295a281b722a8fca500a720375b925e76c068fbe1459cdf932
-size 26905
+oid sha256:f1b9cc2db50c14995a966b63eb516b4f1e9bd9faa571cc43457d175a84396886
+size 46745
diff --git a/tests/UI/expected-screenshots/BarGraph_other_metric.png b/tests/UI/expected-screenshots/BarGraph_other_metric.png
index 798e00cb55..2a4696fc9b 100644
--- a/tests/UI/expected-screenshots/BarGraph_other_metric.png
+++ b/tests/UI/expected-screenshots/BarGraph_other_metric.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:bd3e453454d4ca353a41f11d6a1e8f85c26f784dd474f05bdf7b66c53d8931bd
-size 15829
+oid sha256:f3031f2dde305a4ea64ff03a72dda62c4f2d66d6f92f69c2a2c9d1a7f357829b
+size 34472
diff --git a/tests/UI/expected-screenshots/GoalsTable_goals_table_ecommerce.png b/tests/UI/expected-screenshots/GoalsTable_goals_table_ecommerce.png
index 6ae5762e30..113ea5134e 100644
--- a/tests/UI/expected-screenshots/GoalsTable_goals_table_ecommerce.png
+++ b/tests/UI/expected-screenshots/GoalsTable_goals_table_ecommerce.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:03ef44db1e4a79a625aa9b4fe3bbebc1f882c5268f90f08af4fd0b9d3795613b
-size 37733
+oid sha256:b0815d3e4a94ab8771d07d8f90d94168f889e88996f16799de28961e0e294a80
+size 57172
diff --git a/tests/UI/expected-screenshots/GoalsTable_goals_table_full.png b/tests/UI/expected-screenshots/GoalsTable_goals_table_full.png
index f95fb27c72..3c50aa1394 100644
--- a/tests/UI/expected-screenshots/GoalsTable_goals_table_full.png
+++ b/tests/UI/expected-screenshots/GoalsTable_goals_table_full.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:05ab66ef93ba61f5c2a76caf72da7a68a4e0ffe33dc994fe9c788cfa8128a9ed
-size 68784
+oid sha256:76dc796f59932a62912ac54f0e391a226e9760e4bd99aa676fad455c286d17fc
+size 85638
diff --git a/tests/UI/expected-screenshots/GoalsTable_goals_table_single.png b/tests/UI/expected-screenshots/GoalsTable_goals_table_single.png
index 21965d9bb6..4cd3fa8ff3 100644
--- a/tests/UI/expected-screenshots/GoalsTable_goals_table_single.png
+++ b/tests/UI/expected-screenshots/GoalsTable_goals_table_single.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:84da3d27ec8edbcd191edf023c7eff72b4af71f452092eea7876cce11ee49b31
-size 43366
+oid sha256:92d1342bd3d11111b3cd6bc14ce9af212711cf1484be5957a9b6de1fe3c1e703
+size 63126
diff --git a/tests/UI/expected-screenshots/GoalsTable_initial.png b/tests/UI/expected-screenshots/GoalsTable_initial.png
index 3e3272f1e6..0768317efb 100644
--- a/tests/UI/expected-screenshots/GoalsTable_initial.png
+++ b/tests/UI/expected-screenshots/GoalsTable_initial.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:8736f9d6b4986e0e886e4bc1a547c7796217f8dd5361fc0e38a9c1bee4fe4498
-size 41983
+oid sha256:188caa6ddaf1e61ca1880977ce2feacbbb7309f1a52086613de11512e75202a9
+size 61769
diff --git a/tests/UI/expected-screenshots/Installation_system_check.png b/tests/UI/expected-screenshots/Installation_system_check.png
index 0d0af0024b..2b068301b1 100644
--- a/tests/UI/expected-screenshots/Installation_system_check.png
+++ b/tests/UI/expected-screenshots/Installation_system_check.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:4466e331e9dcdefbd09f68ed8e649c96c867627267a434d79c8cb3bc8ec4b0da
-size 168847
+oid sha256:22f5ded27d63055d808e02751a8aa203118e6f58a421d5f16ddf7499f85eadc9
+size 169750
diff --git a/tests/UI/expected-screenshots/MeasurableManager_add_measurable_view.png b/tests/UI/expected-screenshots/MeasurableManager_add_measurable_view.png
index fa3726eeba..e71e879402 100644
--- a/tests/UI/expected-screenshots/MeasurableManager_add_measurable_view.png
+++ b/tests/UI/expected-screenshots/MeasurableManager_add_measurable_view.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:f5374f56887499ba2aca22f50d02096d7e0fcd6252a90563408ed2512fef077e
-size 424564
+oid sha256:a86785bdde4c70ca7dea71035926d5b0232742f1a18f6d0d44c21d74642d00e1
+size 427663
diff --git a/tests/UI/expected-screenshots/Overlay_loaded.png b/tests/UI/expected-screenshots/Overlay_loaded.png
index f4db30282f..714d4c9708 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:17a4c698ad76447989cba6f79f4467bd10f91ade67571909cb552fc802eb4359
-size 90444
+oid sha256:06e6f83a9bf5b90fa04c9d834c3d18e30682819745a7c9eae2de13a55238d6ee
+size 90662
diff --git a/tests/UI/expected-screenshots/Overlay_loaded_with_segment.png b/tests/UI/expected-screenshots/Overlay_loaded_with_segment.png
index 03f54336fc..86aa47a554 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:2a3a1baf8b525a006b266974852fffbd74fd6f70f156e19a1472b489e085913b
-size 89026
+oid sha256:43b57ce669b979f74af229b11ae937030cd35309ad3f45d0718beaf69974ee0e
+size 89140
diff --git a/tests/UI/expected-screenshots/Overlay_page_change.png b/tests/UI/expected-screenshots/Overlay_page_change.png
index e69bf4b7ba..8599c29f2d 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:0aacca889a473900d5e79717a7c584462918761fd505630d374efe93f94900fb
-size 199077
+oid sha256:116c07c68ed377f1d9ee8f3235280037d3a29f016246ecb71c4fd35240d4d577
+size 199127
diff --git a/tests/UI/expected-screenshots/Overlay_page_link_clicks.png b/tests/UI/expected-screenshots/Overlay_page_link_clicks.png
index b5f571d737..8c5ae90776 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:63753eefe1437f94c4578f444fb4cbb0062c337fc47605889ed9ede2be521d5a
-size 97259
+oid sha256:8b7d7301d2b5e260db0241d0fcb0234e5d5b0215079a6f08971d424fadf938b5
+size 97493
diff --git a/tests/UI/expected-screenshots/Overlay_period_change.png b/tests/UI/expected-screenshots/Overlay_period_change.png
index 3d4461f835..f1921bf3d2 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:0bdc09ac43acaa7d97f10072e4751e02ad579f79dae51a9d86835d4c15e1c91d
-size 201359
+oid sha256:f592419ff29b16e74b49a98e743882986458021b29d6682eb3b9acbed07d8b4a
+size 201409
diff --git a/tests/UI/expected-screenshots/Overlay_transitions.png b/tests/UI/expected-screenshots/Overlay_transitions.png
index b905aa18b2..e53c5c9f41 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:3841fe4b0ff02129ccf16d1b5a6c5bd7486ba4f36ce5e0b59cbd290a2b3ee264
-size 120161
+oid sha256:b512d8e268ffcec1c8c005f09eb6e8210547c3a1f876bf8312315e7cdc975598
+size 120232
diff --git a/tests/UI/expected-screenshots/PieGraph_load.png b/tests/UI/expected-screenshots/PieGraph_load.png
index a5c5430e53..b438b8b520 100644
--- a/tests/UI/expected-screenshots/PieGraph_load.png
+++ b/tests/UI/expected-screenshots/PieGraph_load.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:dd3ca2311e5466f30b434f140dcfcee23bcebe0106269560fb6af1c11f34e3f9
-size 29894
+oid sha256:a07659206f0a9786165f9c2073d32718bfc36409cbe70c54fcd357a758509b6f
+size 49255
diff --git a/tests/UI/expected-screenshots/PieGraph_metric_picker_shown.png b/tests/UI/expected-screenshots/PieGraph_metric_picker_shown.png
index 7f0ffb4a1f..f83211fd23 100644
--- a/tests/UI/expected-screenshots/PieGraph_metric_picker_shown.png
+++ b/tests/UI/expected-screenshots/PieGraph_metric_picker_shown.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:85cd1d643e1c0b006ffebe4efad378d7345e568a792af701002961b6d9c00de7
-size 43780
+oid sha256:5b3ffb582693f7e9511ca36c77392ec581dbcb272edcc874a42178c1f1498230
+size 63682
diff --git a/tests/UI/expected-screenshots/PieGraph_other_metric.png b/tests/UI/expected-screenshots/PieGraph_other_metric.png
index dbc3c9724c..993d128b8d 100644
--- a/tests/UI/expected-screenshots/PieGraph_other_metric.png
+++ b/tests/UI/expected-screenshots/PieGraph_other_metric.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:f9a012c5d0369d1bdd4b3fbfc85155f3e522d522d7d0f298eb8dd6f2446e7782
-size 35148
+oid sha256:493c491078867117fc0fe80e6069bb68f8b8ce060a1226387373a08a77c04ec6
+size 54142
diff --git a/tests/UI/expected-screenshots/PieGraph_pie_segment_tooltip.png b/tests/UI/expected-screenshots/PieGraph_pie_segment_tooltip.png
index f3d5af32aa..3fd53f1837 100644
--- a/tests/UI/expected-screenshots/PieGraph_pie_segment_tooltip.png
+++ b/tests/UI/expected-screenshots/PieGraph_pie_segment_tooltip.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:dc1ae497258e4e2a2f16400e6724a2bd9691b5b17417376850d2c38394de9e89
-size 32641
+oid sha256:6184b18de3cc01d68f10c87ab6162da147de78ac1e07d08ad482228fc7374cc1
+size 51461
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_admin_diagnostics_configfile.png b/tests/UI/expected-screenshots/UIIntegrationTest_admin_diagnostics_configfile.png
index b4569d0fe7..b98f8ecb03 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_admin_diagnostics_configfile.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_admin_diagnostics_configfile.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:a90487bbaaae92569b8ddc2c3fa0ffd19b973ae7cd771efdea6b11199efdd7b5
-size 3532421
+oid sha256:ce5fe2a7e10433eccc7ff65ecc8282e9f261309697be4cf8378eb0384c5c3f8a
+size 3559171
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_admin_plugins.png b/tests/UI/expected-screenshots/UIIntegrationTest_admin_plugins.png
index 83ce827159..726fca1877 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:1dfe72aff4ea603f1c3ddfd0cdcfcd3e03d1230713e077054512e3fe2b682ac9
-size 955453
+oid sha256:0cacebc0fa6fa2aec9920c16311d1ea10a0770d787967f0f411d2b3b172c4ed2
+size 956270
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_admin_settings_general.png b/tests/UI/expected-screenshots/UIIntegrationTest_admin_settings_general.png
index 83a4b8ac44..c13ddb72b9 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_admin_settings_general.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_admin_settings_general.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:9955076f8a3a3e6efbfb1c171154a76ed9381052205263063356269fdd6eff59
-size 653419
+oid sha256:a0de3aa3ad3d81ac2c29249bc1cf1e9acdd3470eba73fd32a494822ba7a9af15
+size 653375
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_admin_themes.png b/tests/UI/expected-screenshots/UIIntegrationTest_admin_themes.png
index 59120fe451..510782eb50 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_admin_themes.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_admin_themes.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:f8713d9dca666ac6f2532cc3dee5a4b30bd5e8f3a6fa3181d6b9005c87e2c9b2
-size 80901
+oid sha256:e11b309dbd848688234faa2e2e1e82403035596332128d871b47ec43248cb8bc
+size 81460
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_fatal_error_safemode.png b/tests/UI/expected-screenshots/UIIntegrationTest_fatal_error_safemode.png
index 14bf63a1cf..7644c8b396 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:72e051179a4110d717256901c2c7bfa96da877407500348b968e20019b58cf73
-size 193463
+oid sha256:f6c7b1e43460effdcf48f24aa60696f78591214aa16d193b4bd319e5cd46f4ac
+size 193363
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_feedback_form.png b/tests/UI/expected-screenshots/UIIntegrationTest_feedback_form.png
index da8b82d38a..484a5a5e0d 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_feedback_form.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_feedback_form.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:581633963d6ad2e35e0259c593fac39072e96c9924a485f446b48e3654f366ce
-size 217914
+oid sha256:c443db5ec52e9f09e58365f410b5ff8a79639fbc18a98b5ac81fa4a9e522aa72
+size 227746
diff --git a/tests/UI/expected-screenshots/UIIntegrationTest_referrers_search_engines_keywords.png b/tests/UI/expected-screenshots/UIIntegrationTest_referrers_search_engines_keywords.png
index e7f02027c3..80b7468a87 100644
--- a/tests/UI/expected-screenshots/UIIntegrationTest_referrers_search_engines_keywords.png
+++ b/tests/UI/expected-screenshots/UIIntegrationTest_referrers_search_engines_keywords.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:66c69b9c0dda3f16b3085b947714776ef607351ba50814cd33d68c755ca1a74d
-size 71814
+oid sha256:46ae4e1a6f608ebdd704c81597571d7641b21bb3e7262f5b266e07a990763e56
+size 97011
diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_0_initial.png b/tests/UI/expected-screenshots/ViewDataTableTest_0_initial.png
index 00028031a4..69783be1d3 100644
--- a/tests/UI/expected-screenshots/ViewDataTableTest_0_initial.png
+++ b/tests/UI/expected-screenshots/ViewDataTableTest_0_initial.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:8db471e5cd81cad572a7a68397ef8f42831dffa75a531c026fcb196b6e9c11a6
-size 24087
+oid sha256:0f3354a263829ab4416b032a8fc9446c202e97f4681843f4d2d8eeee7c77a0ee
+size 43884
diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_10_change_limit.png b/tests/UI/expected-screenshots/ViewDataTableTest_10_change_limit.png
index a37e480237..732f9d70c5 100644
--- a/tests/UI/expected-screenshots/ViewDataTableTest_10_change_limit.png
+++ b/tests/UI/expected-screenshots/ViewDataTableTest_10_change_limit.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:96b114016b088e681dbe80500350fd40e82a6b598a25c45b44929eb9624f9a7f
-size 39069
+oid sha256:42b300cef1e8077ca3671725c9a75b1d99724964a9fcfdc759a3632c95543f70
+size 58606
diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_11_flattened.png b/tests/UI/expected-screenshots/ViewDataTableTest_11_flattened.png
index 1a9dda3f85..8711e209ad 100644
--- a/tests/UI/expected-screenshots/ViewDataTableTest_11_flattened.png
+++ b/tests/UI/expected-screenshots/ViewDataTableTest_11_flattened.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:b233e118fa6459b94faf6e31690f677181b2e5d830bbae56a8cb7329524cfb56
-size 46518
+oid sha256:e205ef29771a9bd531351d66ee207f7e301893e4d9b214d1be49ced93669b622
+size 65037
diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_12_aggregate_shown.png b/tests/UI/expected-screenshots/ViewDataTableTest_12_aggregate_shown.png
index 3e0d937536..87a4cf6185 100644
--- a/tests/UI/expected-screenshots/ViewDataTableTest_12_aggregate_shown.png
+++ b/tests/UI/expected-screenshots/ViewDataTableTest_12_aggregate_shown.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:d62b387394e730e1b93285b55bcac93d2c5003d3fd6142ab4d56723e269572a0
-size 51239
+oid sha256:9e9e2064a5d68ec792c9f86751e049c6473e1d6b1396fa60079d734305e12a62
+size 70625
diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_13_make_hierarchical.png b/tests/UI/expected-screenshots/ViewDataTableTest_13_make_hierarchical.png
index a37e480237..732f9d70c5 100644
--- a/tests/UI/expected-screenshots/ViewDataTableTest_13_make_hierarchical.png
+++ b/tests/UI/expected-screenshots/ViewDataTableTest_13_make_hierarchical.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:96b114016b088e681dbe80500350fd40e82a6b598a25c45b44929eb9624f9a7f
-size 39069
+oid sha256:42b300cef1e8077ca3671725c9a75b1d99724964a9fcfdc759a3632c95543f70
+size 58606
diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_14_visits_percent.png b/tests/UI/expected-screenshots/ViewDataTableTest_14_visits_percent.png
index 59e571c6a2..f771037e7f 100644
--- a/tests/UI/expected-screenshots/ViewDataTableTest_14_visits_percent.png
+++ b/tests/UI/expected-screenshots/ViewDataTableTest_14_visits_percent.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:7583864f6dd731a581465da38ab41461af9660289422e0e14b81693b835ba527
-size 47228
+oid sha256:9e41322bb963d263d8f639a68829cb2fc057a789c4bf79b3e9ef2c9f8a563446
+size 65746
diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_15_search.png b/tests/UI/expected-screenshots/ViewDataTableTest_15_search.png
index 8c80f08e2a..76aeed777d 100644
--- a/tests/UI/expected-screenshots/ViewDataTableTest_15_search.png
+++ b/tests/UI/expected-screenshots/ViewDataTableTest_15_search.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:044235cdfc011161d1bdf7c3910757f52960c68c56980ab3c108c017faf0134c
-size 24615
+oid sha256:f34fc02d43dc4d3948e6b6ae2136e179c07192830153e4772091031884d9f8be
+size 44465
diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_1_all_columns.png b/tests/UI/expected-screenshots/ViewDataTableTest_1_all_columns.png
index 348f6c312c..3d40d2af4b 100644
--- a/tests/UI/expected-screenshots/ViewDataTableTest_1_all_columns.png
+++ b/tests/UI/expected-screenshots/ViewDataTableTest_1_all_columns.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:174fe9bcdc2e6185e1332fed6dbc07363aeee34b60a652d767677fd29ba13c9b
-size 35266
+oid sha256:1952ae645f02cc833d65829160c9771c88e745b139e14b17ec390b9d5ff7c0ff
+size 54712
diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_2_column_sorted_desc.png b/tests/UI/expected-screenshots/ViewDataTableTest_2_column_sorted_desc.png
index 4990e2f569..45654391f1 100644
--- a/tests/UI/expected-screenshots/ViewDataTableTest_2_column_sorted_desc.png
+++ b/tests/UI/expected-screenshots/ViewDataTableTest_2_column_sorted_desc.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:51e62ba90948a30110ef888c07ff067f3ab46ae1d76d94394c163c057f7a79dc
-size 40671
+oid sha256:0e8c05f2123579a1c9c12bba944add72d2e979bdd303d2ee263541fbc0c40bea
+size 60404
diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_3_column_sorted_asc.png b/tests/UI/expected-screenshots/ViewDataTableTest_3_column_sorted_asc.png
index 30dd55873a..42a30b88a7 100644
--- a/tests/UI/expected-screenshots/ViewDataTableTest_3_column_sorted_asc.png
+++ b/tests/UI/expected-screenshots/ViewDataTableTest_3_column_sorted_asc.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:9c6f180eec5c2b6d095a62bc8205069464303613231fa3f9c2f057e2ebe878dd
-size 31529
+oid sha256:a3fa50152edd5722f1128f6c96904037b72df700c6d2ba0e2678325b5d025922
+size 50338
diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_5_goals.png b/tests/UI/expected-screenshots/ViewDataTableTest_5_goals.png
index 3e3272f1e6..0768317efb 100644
--- a/tests/UI/expected-screenshots/ViewDataTableTest_5_goals.png
+++ b/tests/UI/expected-screenshots/ViewDataTableTest_5_goals.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:8736f9d6b4986e0e886e4bc1a547c7796217f8dd5361fc0e38a9c1bee4fe4498
-size 41983
+oid sha256:188caa6ddaf1e61ca1880977ce2feacbbb7309f1a52086613de11512e75202a9
+size 61769
diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_6_bar_graph.png b/tests/UI/expected-screenshots/ViewDataTableTest_6_bar_graph.png
index a03dc7a2f3..386fc90fb8 100644
--- a/tests/UI/expected-screenshots/ViewDataTableTest_6_bar_graph.png
+++ b/tests/UI/expected-screenshots/ViewDataTableTest_6_bar_graph.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:3cfa4005b1362a88ecc5fded0f104eec184bc01539f919289e157f6d96baf1eb
-size 14532
+oid sha256:b1f97b0d56b90733eee36c906a09c5174618b451252c5026a06d16279444b7e5
+size 33555
diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_7_pie_graph.png b/tests/UI/expected-screenshots/ViewDataTableTest_7_pie_graph.png
index d3fb24244f..6f9bb15b31 100644
--- a/tests/UI/expected-screenshots/ViewDataTableTest_7_pie_graph.png
+++ b/tests/UI/expected-screenshots/ViewDataTableTest_7_pie_graph.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:0f521257fa92b01f43c551bafe696e4c018fda6b23a09b697aa16a8703a3d369
-size 30067
+oid sha256:c10f7ecd2b97eef6e1599f28824bdf92a08f2a6b5827af9e3993f94004e27ea2
+size 49443
diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_8_tag_cloud.png b/tests/UI/expected-screenshots/ViewDataTableTest_8_tag_cloud.png
index 6b1398e365..b8a201dce5 100644
--- a/tests/UI/expected-screenshots/ViewDataTableTest_8_tag_cloud.png
+++ b/tests/UI/expected-screenshots/ViewDataTableTest_8_tag_cloud.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:ed009444977b7cb6ba3f64852734962b9fa1d2c70d453931e94743118ecdfd67
-size 61738
+oid sha256:89c7280f92d5ab387a2009a8b0a554a42662a549484a3ac7615f666cc86ba015
+size 81681
diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_9_normal_table.png b/tests/UI/expected-screenshots/ViewDataTableTest_9_normal_table.png
index e93bdd236e..6f8a71aa00 100644
--- a/tests/UI/expected-screenshots/ViewDataTableTest_9_normal_table.png
+++ b/tests/UI/expected-screenshots/ViewDataTableTest_9_normal_table.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:a08c7a4e3bcd9867d0d9a396d2abab4aa1cac4fbbe3b46e9b1776c9ba837f8e8
-size 53573
+oid sha256:c991abf54e77046f5917ba61e654e83b7d6ee45651a4d2e349c404e91be40320
+size 74217
diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_export_options.png b/tests/UI/expected-screenshots/ViewDataTableTest_export_options.png
index 2886545717..c6ecd1347c 100644
--- a/tests/UI/expected-screenshots/ViewDataTableTest_export_options.png
+++ b/tests/UI/expected-screenshots/ViewDataTableTest_export_options.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:cc6fc62acd600b8c57a070b1199891566e3a7c59d1be4fde799955efffe747ab
-size 32701
+oid sha256:5d30ba93cc82334c46fc4f5e3efd44ee15be70bddbcad0c2cbcc3ce57f2f67db
+size 49043
diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_limit_selector_open.png b/tests/UI/expected-screenshots/ViewDataTableTest_limit_selector_open.png
index 2f640b5975..d82c46231a 100644
--- a/tests/UI/expected-screenshots/ViewDataTableTest_limit_selector_open.png
+++ b/tests/UI/expected-screenshots/ViewDataTableTest_limit_selector_open.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:1a6d455b1e3ff73eeb9543a91839a086bc13740cdd60f4e0f2c47966fde4f301
-size 58074
+oid sha256:a125e6d7278f066dfe13c1bc61a55a12626f0831a0b09388484cfd8d45ab856b
+size 78563
diff --git a/tests/UI/expected-screenshots/ViewDataTableTest_subtables_loaded.png b/tests/UI/expected-screenshots/ViewDataTableTest_subtables_loaded.png
index 8e8f5cf26f..81a7ba915f 100644
--- a/tests/UI/expected-screenshots/ViewDataTableTest_subtables_loaded.png
+++ b/tests/UI/expected-screenshots/ViewDataTableTest_subtables_loaded.png
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:ac571db707145f557518a2a1c70461cc072d086a0ac3d5d7f2795124d1667901
-size 50019
+oid sha256:1fddef92dd6c82ab2b30d9dfe5b390021d26f96fd6820838a6ab79a860dbd6ca
+size 70794
diff --git a/tests/UI/specs/Dashboard_spec.js b/tests/UI/specs/Dashboard_spec.js
index f647bdab68..e585bc719f 100644
--- a/tests/UI/specs/Dashboard_spec.js
+++ b/tests/UI/specs/Dashboard_spec.js
@@ -182,6 +182,7 @@ describe("Dashboard", function () {
});
it("should reset dashboard when reset dashboard process completed", function (done) {
+ this.retries(3);
expect.screenshot("reset").to.be.capture(function (page) {
page.click('.dashboard-manager .title');
page.click('li[data-action=resetDashboard]');
diff --git a/tests/lib/screenshot-testing/support/page-renderer.js b/tests/lib/screenshot-testing/support/page-renderer.js
index ab756e211a..1eb7b81214 100644
--- a/tests/lib/screenshot-testing/support/page-renderer.js
+++ b/tests/lib/screenshot-testing/support/page-renderer.js
@@ -19,6 +19,7 @@ var PageRenderer = function (baseUrl) {
this.aborted = false;
this.baseUrl = baseUrl;
this.currentFrame = null;
+ this.frameOffset = null;
this.defaultWaitTime = 1000;
this._isLoading = false;
@@ -98,6 +99,14 @@ PageRenderer.prototype.mouseup = function (selector, waitTime) {
this.queuedEvents.push([this._mouseup, waitTime, selector]);
};
+PageRenderer.prototype.selectFrame = function (frameNameOrPosition, waitTime) {
+ this.queuedEvents.push([this._selectFrame, waitTime, frameNameOrPosition]);
+};
+
+PageRenderer.prototype.selectMainFrame = function (waitTime) {
+ this.queuedEvents.push([this._selectMainFrame, waitTime]);
+};
+
PageRenderer.prototype.reload = function (waitTime) {
this.queuedEvents.push([this._reload, waitTime]);
};
@@ -227,6 +236,41 @@ PageRenderer.prototype._mouseup = function (selector, callback) {
callback();
};
+PageRenderer.prototype._selectFrame = function (frameNameOrPosition, callback) {
+ if (!this.frameOffset) {
+ // case when selecting a frame within a frame is currently not supported
+ // and we'd need to make sure to not use jQuery in that case as it is likely not available in that frame
+ // within the frame :)
+ this.frameOffset = this.webpage.evaluate(function (frameName) {
+ if ('undefined' === typeof window.jQuery) {
+ return null;
+ }
+ // todo eventually we should also try to find frame by position
+ var frame = window.jQuery('iframe[name=' + frameName + ']');
+
+ if (!frame.size()) {
+ frame = window.jQuery('iframe[id=' + frameName + ']');
+ }
+ if (frame.size()) {
+ return frame.offset();
+ }
+
+ return null;
+ }, frameNameOrPosition);
+ }
+
+ this.webpage.switchToFrame(frameNameOrPosition);
+ this.wait(100);
+ callback();
+};
+
+PageRenderer.prototype._selectMainFrame = function (callback) {
+ this.frameOffset = null;
+ this.webpage.switchToMainFrame();
+ this.wait(100);
+ callback();
+};
+
PageRenderer.prototype._reload = function (callback) {
this.webpage.reload();
@@ -317,7 +361,9 @@ PageRenderer.prototype._getPosition = function (selector) {
return selector;
}
- var pos = this.webpage.evaluate(function (selector) {
+ var self = this;
+
+ var pos = this.webpage.evaluate(function (selector, frameOffset) {
var element = window.jQuery(selector),
offset = element.offset();
@@ -331,11 +377,20 @@ PageRenderer.prototype._getPosition = function (selector) {
return null;
}
+ if (frameOffset) {
+ if (frameOffset.top) {
+ offset.top += frameOffset.top;
+ }
+ if (frameOffset.left) {
+ offset.left += frameOffset.left;
+ }
+ }
+
return {
x: offset.left + element.width() / 2,
y: offset.top + element.height() / 2
};
- }, selector);
+ }, selector, self.frameOffset);
return pos;
};
@@ -382,8 +437,10 @@ PageRenderer.prototype.capture = function (outputPath, callback, selector) {
}
var result = page.evaluate(function(selector) {
- var docWidth = $(document).width(),
- docHeight = $(document).height();
+ window.jQuery('html').addClass('uiTest');
+
+ var docWidth = window.jQuery(document).width(),
+ docHeight = window.jQuery(document).height();
function isInvalidBoundingRect (rect) {
return !rect.width || !rect.height