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:
authorThomas Steur <thomas.steur@gmail.com>2016-04-06 06:29:18 +0300
committerThomas Steur <thomas.steur@gmail.com>2016-04-06 06:29:18 +0300
commit3eb0cf055146c0b77b592cf9ef4bf2eb2e2f1ca3 (patch)
tree99817781db0a0626fa4d14f96697f6e04e66f983 /plugins
parent1854f5c456a76af807431d52bcb19ad207ba658e (diff)
parent0f38083969261b95a00c59f1f5596d35365506cd (diff)
Merge branch 'master' into 3.0-m03
Conflicts: core/Version.php core/WidgetsList.php plugins/CustomDimensions plugins/Goals/templates/getGoalReportView.twig plugins/Goals/templates/getOverviewView.twig tests/UI/expected-ui-screenshots
Diffstat (limited to 'plugins')
-rw-r--r--plugins/API/lang/fi.json6
-rw-r--r--plugins/API/lang/ru.json5
-rw-r--r--plugins/Actions/lang/fi.json5
-rw-r--r--plugins/Actions/lang/ru.json4
-rw-r--r--plugins/Contents/lang/ru.json6
-rw-r--r--plugins/CoreAdminHome/lang/ru.json13
-rw-r--r--plugins/CoreAdminHome/templates/trackingCodeGenerator.twig1
-rw-r--r--plugins/CoreHome/Columns/VisitorReturning.php8
-rw-r--r--plugins/CoreHome/angularjs/common/services/piwik-api.js2
-rw-r--r--plugins/CoreHome/angularjs/siteselector/siteselector.directive.less2
-rw-r--r--plugins/CoreHome/lang/fi.json11
-rw-r--r--plugins/CoreHome/lang/ko.json1
-rw-r--r--plugins/CoreHome/lang/ru.json8
-rw-r--r--plugins/CoreHome/stylesheets/dataTable/_reportDocumentation.less2
-rw-r--r--plugins/CoreHome/templates/_dataTableCell.twig15
-rw-r--r--plugins/CorePluginsAdmin/lang/ru.json11
-rw-r--r--plugins/CoreUpdater/lang/fi.json10
-rw-r--r--plugins/CoreUpdater/lang/ru.json8
-rw-r--r--plugins/CoreVisualizations/CoreVisualizations.php20
-rw-r--r--plugins/CoreVisualizations/Visualizations/HtmlTable.php19
-rw-r--r--plugins/CoreVisualizations/Visualizations/HtmlTable/AllColumns.php10
-rw-r--r--plugins/CoreVisualizations/Visualizations/HtmlTable/PivotBy.php36
m---------plugins/CustomDimensions0
-rw-r--r--plugins/CustomVariables/lang/fi.json6
-rw-r--r--plugins/CustomVariables/lang/ru.json16
-rw-r--r--plugins/DBStats/lang/fi.json1
-rw-r--r--plugins/Dashboard/lang/fi.json2
-rw-r--r--plugins/Dashboard/lang/lt.json2
-rw-r--r--plugins/Dashboard/lang/ru.json2
-rw-r--r--plugins/DevicePlugins/lang/fi.json2
-rw-r--r--plugins/DevicePlugins/lang/ru.json2
-rw-r--r--plugins/DevicesDetection/images/browsers/AT.gifbin0 -> 1087 bytes
-rw-r--r--plugins/DevicesDetection/images/browsers/KY.gifbin0 -> 614 bytes
-rw-r--r--plugins/DevicesDetection/images/browsers/OT.gifbin0 -> 1025 bytes
-rw-r--r--plugins/DevicesDetection/images/browsers/SP.gifbin0 -> 990 bytes
-rw-r--r--plugins/DevicesDetection/images/browsers/SS.gifbin0 -> 595 bytes
-rw-r--r--plugins/Diagnostics/lang/fi.json6
-rw-r--r--plugins/Diagnostics/lang/nb.json6
-rw-r--r--plugins/Diagnostics/lang/ru.json8
-rw-r--r--plugins/Ecommerce/lang/fi.json8
-rw-r--r--plugins/Events/Events.php3
-rw-r--r--plugins/Events/lang/ru.json2
-rw-r--r--plugins/Feedback/lang/fi.json8
-rw-r--r--plugins/Feedback/lang/ru.json4
-rw-r--r--plugins/Goals/API.php1
-rw-r--r--plugins/Goals/Pages.php3
-rw-r--r--plugins/Goals/lang/el.json2
-rw-r--r--plugins/Goals/lang/en.json1
-rw-r--r--plugins/Goals/lang/lt.json2
-rw-r--r--plugins/Goals/lang/nb.json1
-rw-r--r--plugins/Goals/lang/ru.json5
-rw-r--r--plugins/Goals/tests/Integration/APITest.php7
-rw-r--r--plugins/ImageGraph/lang/fi.json3
-rw-r--r--plugins/Installation/ServerFilesGenerator.php16
-rw-r--r--plugins/Installation/lang/fi.json14
-rw-r--r--plugins/Live/lang/fi.json4
-rw-r--r--plugins/Live/lang/nb.json1
-rw-r--r--plugins/Live/stylesheets/live.less4
-rw-r--r--plugins/Live/templates/_dataTableViz_visitorLog.twig7
-rw-r--r--plugins/Live/templates/getLastVisitsStart.twig35
-rw-r--r--plugins/Live/tests/Integration/ModelTest.php9
-rw-r--r--plugins/Login/lang/en.json2
m---------plugins/LoginHttpAuth0
-rw-r--r--plugins/MobileAppMeasurable/lang/fi.json7
-rw-r--r--plugins/PrivacyManager/lang/fi.json7
-rw-r--r--plugins/PrivacyManager/lang/nb.json2
-rw-r--r--plugins/Provider/lang/fi.json4
m---------plugins/QueuedTracking0
-rw-r--r--plugins/Referrers/lang/fi.json2
-rw-r--r--plugins/SEO/lang/fi.json1
m---------plugins/SecurityInfo0
-rw-r--r--plugins/SegmentEditor/lang/fi.json9
-rw-r--r--plugins/SitesManager/API.php4
-rw-r--r--plugins/SitesManager/Controller.php1
-rw-r--r--plugins/SitesManager/Menu.php1
-rw-r--r--plugins/SitesManager/Model.php34
-rw-r--r--plugins/SitesManager/angularjs/sites-manager/multiline-field.directive.html1
-rw-r--r--plugins/SitesManager/angularjs/sites-manager/sites-manager-site.controller.js9
-rw-r--r--plugins/SitesManager/angularjs/sites-manager/sites-manager.controller.js19
-rw-r--r--plugins/SitesManager/lang/el.json2
-rw-r--r--plugins/SitesManager/lang/ru.json4
-rw-r--r--plugins/SitesManager/templates/dialogs/dialogs.html1
-rw-r--r--plugins/SitesManager/templates/dialogs/edit-dialog.html1
-rw-r--r--plugins/SitesManager/templates/displayJavascriptCode.twig1
-rw-r--r--plugins/SitesManager/templates/help/timezone-help.html3
-rw-r--r--plugins/SitesManager/templates/index.html8
-rw-r--r--plugins/SitesManager/templates/siteWithoutData.twig4
-rw-r--r--plugins/SitesManager/templates/sites-list/site-fields.html2
m---------plugins/TasksTimetable0
-rw-r--r--plugins/Transitions/API.php6
-rw-r--r--plugins/Transitions/lang/fi.json1
m---------plugins/TreemapVisualization0
-rw-r--r--plugins/UserCountry/Commands/AttributeHistoricalDataWithLocations.php4
-rw-r--r--plugins/UserCountry/lang/fi.json1
-rw-r--r--plugins/UserCountry/lang/nb.json2
-rw-r--r--plugins/UserCountryMap/lang/fi.json5
-rw-r--r--plugins/UserLanguage/lang/fi.json3
-rw-r--r--plugins/UsersManager/Model.php105
-rw-r--r--plugins/UsersManager/lang/fi.json12
-rw-r--r--plugins/UsersManager/tests/Integration/APITest.php11
-rw-r--r--plugins/VisitFrequency/Controller.php1
-rw-r--r--plugins/VisitFrequency/lang/fi.json2
-rw-r--r--plugins/VisitTime/lang/fi.json1
-rw-r--r--plugins/VisitorInterest/lang/fi.json1
-rw-r--r--plugins/VisitsSummary/lang/fi.json1
-rw-r--r--plugins/WebsiteMeasurable/lang/fi.json7
106 files changed, 482 insertions, 206 deletions
diff --git a/plugins/API/lang/fi.json b/plugins/API/lang/fi.json
index 22e886ce2c..27db066e77 100644
--- a/plugins/API/lang/fi.json
+++ b/plugins/API/lang/fi.json
@@ -4,8 +4,12 @@
"KeepTokenSecret": "Tämä token_auth on yhtä salainen kuin salasanasi, %1$s älä jaa sitä%2$s!",
"LoadedAPIs": "Ladattiin %s APIa",
"MoreInformation": "Lisätietoa Piwikin APIsta löytyy sivulta %1$sJohdatus Piwikin APIin%2$s ja %3$sPiwikin API%4$s.",
+ "PluginDescription": "Kaikki Piwikissä olevat tiedot on saatavilla yksinkertaisten APIen kautta. Tämä lisäosa on API verkkosivuille. Tämän lisäosan kautta voit ladata tiedot xml:nä, json:na, php:nä, csv:nä jne.",
+ "ReportingApiReference": "Raportointi-API:n referenssi",
"TopLinkTooltip": "Hae analytiikkatietoja automaattisesti yksinkertaisella API:lla JSON:lla, XML:llä jne.",
"UserAuthentication": "Käyttäjän autentikointi",
- "UsingTokenAuth": "Jos haluat %1$s hakea tietoja skriptillä, crontabista jne. %2$s sinun täytyy lisätä parametri %3$s API-kutsujen osoitteisiin, jos kutsu vaatii autentikoinnin."
+ "UsingTokenAuth": "Jos haluat %1$s hakea tietoja skriptillä, crontabista jne. %2$s sinun täytyy lisätä parametri %3$s API-kutsujen osoitteisiin, jos kutsu vaatii autentikoinnin.",
+ "Glossary": "Sanasto",
+ "LearnAboutCommonlyUsedTerms": "Opi lisää yleisistä termeistä Piwikissä: %1$s ja %2$s."
}
} \ No newline at end of file
diff --git a/plugins/API/lang/ru.json b/plugins/API/lang/ru.json
index fd5378fa78..b1f33d003e 100644
--- a/plugins/API/lang/ru.json
+++ b/plugins/API/lang/ru.json
@@ -5,8 +5,11 @@
"LoadedAPIs": "%s API успешно загружен",
"MoreInformation": "Чтобы узнать больше информации о Piwik API, пожалуйста, посмотрите раздел %1$s Introduction to Piwik API %2$s в %3$s Piwik API Reference %4$s.",
"PluginDescription": "Все данные из Piwik доступны через простые API. Этот плагин является входной точкой для веб сервиса, который можно вызвать чтобы получить данные веб аналитики в xml, json, php, csv и др.",
+ "ReportingApiReference": "Сообщение справочной информации по API",
"TopLinkTooltip": "Получайте доступ к вашей веб-аналитике с помощью простого API и использования json, xml и др.",
"UserAuthentication": "Аутентификация пользователя",
- "UsingTokenAuth": "Если вам необходимо %1$s запрашивать данные в ваших скриптах, cron-задачах, или другого источника, то вам %2$s необходимо добавить следующий ключ %3$s к URL API-вызова, который требует аутентификации."
+ "UsingTokenAuth": "Если вам необходимо %1$s запрашивать данные в ваших скриптах, cron-задачах, или другого источника, то вам %2$s необходимо добавить следующий ключ %3$s к URL API-вызова, который требует аутентификации.",
+ "Glossary": "Глоссарий",
+ "LearnAboutCommonlyUsedTerms": "Изучите часто используемые термины, чтобы извлечь максимум пользы из Piwik Analytics: %1$s and %2$s."
}
} \ No newline at end of file
diff --git a/plugins/Actions/lang/fi.json b/plugins/Actions/lang/fi.json
index cb7a0a31ca..26f23e5629 100644
--- a/plugins/Actions/lang/fi.json
+++ b/plugins/Actions/lang/fi.json
@@ -2,6 +2,7 @@
"Actions": {
"AvgGenerationTimeTooltip": "Keskiarvo %1$s osumasta %2$s %3$s - %4$s",
"ColumnClickedURL": "Klikattu URL",
+ "ColumnActionURL": "Toiminnon osoite",
"ColumnClicks": "Klikkaukset",
"ColumnClicksDocumentation": "Tämän linkin klikkausten määrä.",
"ColumnDownloadURL": "Ladattu URL",
@@ -39,6 +40,7 @@
"PagesReportDocumentation": "Tämä raportti sisältää tietoa sivuista, joilla on käyty. %s Taulukko on organisoitu hierarkisesti, URL:t näytetään puurakenteena.",
"PageTitlesReportDocumentation": "Tämä raportti sisältää tietoa käytyjen sivujen otsikoista. %1$s Sivun otsikko on HTML:n %2$s-tagi, jonka useimmat selaimet näyttävät ikkunan otsikossa.",
"PageUrls": "Sivujen URL:t",
+ "PluginDescription": "Raportoi sivukatselut ja sivujen otsikot. Mahdollistaa sivun sisäisen hakukoneen mittaamisen. Seuraa automaattisesti ulospäin suuntautuvia linkkejä ja latauksia.",
"SiteSearchCategories1": "Tämä raportti listaa kategoriat jotka kävijät valitsivat.",
"SiteSearchCategories2": "Esimerkiksi e-kauppojen sivuilla on tyypillisesti \"Kategoria\"-valitsin, jolla käyttäjät voivat rajoittaa hakutuloksia.",
"SiteSearchFollowingPagesDoc": "Kun kävijät hakevat sivuiltasi, he etsivät tiettyä sivua, sisältöä, tuotetta tai palvelua. Tämä raportti listaa sivut joita klikattiin useiten haun jälkeen.",
@@ -59,6 +61,7 @@
"WidgetPageUrlsFollowingSearch": "Verkkosivuhaun tuloksena löytyneet sivut",
"WidgetSearchCategories": "Haun kategoriat",
"WidgetSearchKeywords": "Sivuhaun hakusanat",
- "WidgetSearchNoResultKeywords": "Hakusanat ilman tuloksia"
+ "WidgetSearchNoResultKeywords": "Hakusanat ilman tuloksia",
+ "ActionType": "Toiminnon tyyppi"
}
} \ No newline at end of file
diff --git a/plugins/Actions/lang/ru.json b/plugins/Actions/lang/ru.json
index 04b3e49b5e..61d49c8364 100644
--- a/plugins/Actions/lang/ru.json
+++ b/plugins/Actions/lang/ru.json
@@ -2,6 +2,7 @@
"Actions": {
"AvgGenerationTimeTooltip": "В среднем по %1$s хит(ов) %2$s между %3$s и %4$s",
"ColumnClickedURL": "URL кликов",
+ "ColumnActionURL": "URL действия",
"ColumnClicks": "Клики",
"ColumnClicksDocumentation": "Количество кликов по этой ссылке.",
"ColumnDownloadURL": "Ссылка для загрузки",
@@ -60,6 +61,7 @@
"WidgetPageUrlsFollowingSearch": "Страницы, которые нашлись в поиске",
"WidgetSearchCategories": "Категории поиска",
"WidgetSearchKeywords": "Поисковые ключевые слова сайта",
- "WidgetSearchNoResultKeywords": "Поисковые ключевые слова без результатов"
+ "WidgetSearchNoResultKeywords": "Поисковые ключевые слова без результатов",
+ "ActionType": "Тип действия"
}
} \ No newline at end of file
diff --git a/plugins/Contents/lang/ru.json b/plugins/Contents/lang/ru.json
index b4d5864720..bddfd2799c 100644
--- a/plugins/Contents/lang/ru.json
+++ b/plugins/Contents/lang/ru.json
@@ -1,5 +1,6 @@
{
"Contents": {
+ "PluginDescription": "Отслеживание контента и баннеров позволяет вам измерять эффективность (просмотры, клики, CTR) любой части контента на ваших страницах (баннер-реклама, изображение, любой элемент).",
"Impressions": "Показы",
"Interactions": "Взаимодествия",
"Interaction": "Взаимодествие",
@@ -7,6 +8,9 @@
"ContentName": "Название публикации",
"ContentPiece": "Часть публикации",
"ContentTarget": "Цель публикации",
- "Contents": "Публикации"
+ "Contents": "Публикации",
+ "InteractionsMetricDocumentation": "Сколько раз с блоком контента происходило взаимодействие (например, 'клик' по баннеру или рекламе).",
+ "ImpressionsMetricDocumentation": "Сколько раз блок контента, такой как баннер или реклама, был показан на странице.",
+ "InteractionRateMetricDocumentation": "Соотношение представления контента и взаимодействий."
}
} \ No newline at end of file
diff --git a/plugins/CoreAdminHome/lang/ru.json b/plugins/CoreAdminHome/lang/ru.json
index 92b61015dc..905ccd69c0 100644
--- a/plugins/CoreAdminHome/lang/ru.json
+++ b/plugins/CoreAdminHome/lang/ru.json
@@ -1,8 +1,10 @@
{
"CoreAdminHome": {
+ "AddNewTrustedHost": "Добавить новый доверенный хост",
"Administration": "Администрирование",
"ArchivingSettings": "Настройка архивации",
"BrandingSettings": "Настройки логотипа",
+ "ReleaseChannel": "Канал выпуска",
"ClickHereToOptIn": "Кликните, чтобы вы учитывались в аналитике.",
"ClickHereToOptOut": "Кликните, чтобы отказаться от учета вас в аналитике.",
"CustomLogoFeedbackInfo": "Если вы используйете свой логотип, вам, возможно, также понадобится скрыть ссылку %1$s в верхнем меню. Для этого просто отключите плагин Feedback (обратная связь) на странице %2$sУправление плагинами%3$s.",
@@ -20,6 +22,9 @@
"InvalidPluginsWarning": "Следующие плагины не совместимы с %1$s и не могут быть загружены: %2$s.",
"InvalidPluginsYouCanUninstall": "Вы можете обновить или удалить эти плагины на странице %1$sУправления плагинами%2$s.",
"JavaScriptTracking": "JavaScript-отслеживание",
+ "JSTracking_CampaignKwdParam": "Параметр Ключевого слова кампании",
+ "JSTracking_CampaignNameParam": "Параметр Имени кампании",
+ "JSTracking_CodeNoteBeforeClosingHead": "Удостоверьтесь, что этот код находится на каждой странице вашего вебсайта. Мы рекомендуем вставлять его сразу перед закрытием тега %1$s.",
"JSTracking_CustomCampaignQueryParam": "Использовать пользовательские имена параметров в запросе для названия кампании и ключевого слова",
"JSTracking_CustomCampaignQueryParamDesc": "Примечание: %1$sPiwik автоматически определит параметры Google Analytics.%2$s",
"JSTracking_DisableCookies": "Отключить все отслеживания cookies",
@@ -44,6 +49,7 @@
"JSTrackingIntro5": "Если вы хотите больше, чем простое отслеживание страниц, пожалуйста, ознакомьтесь с %1$sPiwik Javascript Tracking documentation%2$s для просмотра всех функций. С помощью этих функций вы можете отслеживать цели, пользовательские переменные, заказы электронной коммерции, неоформленные заказы и многое другое.",
"LogoNotWriteableInstruction": "Чтобы использовать собственное лого вместо стандартного Piwik, откройте для записи эту папку: %1$s Piwik нужен доступ на запись к вашим лого, храняшимся в файлах %2$s.",
"FileUploadDisabled": "Загрузка файлов не включена в вашей конфигурации PHP. Для загрузки другого логотипа выставите %s в php.ini и перезапустите веб-сервер.",
+ "LogoUploadFailed": "Загруженный файл не может быть обработан. Пожалуйста, проверьте, что файл имеет нужный формат.",
"LogoUpload": "Выберите лого для загрузки",
"FaviconUpload": "Выбрать Favicon для загрузки",
"LogoUploadHelp": "Пожалуйста, закачивайте файлы в %1$s форматах, минимальное ограничение по высоте – %2$s пикселей.",
@@ -53,6 +59,7 @@
"MenuDevelopment": "Разработка",
"OptOutComplete": "Исключение из политики конфиденциальности завершено; ваши посещения на данный сайт не будут учитываться системой веб аналитики. Мы уважаем ваш выбор.",
"OptOutCompleteBis": "Заметьте, что если вы очистите cookies браузера, то, скорее всего, удалится и исключительный cookie, или если вы поменяете компьютер или браузер, то необходимо будет пройти процедуру исключения снова.",
+ "OptOutDntFound": "Ваши действия не отслеживались, так как ваш браузер сообщает, что вы не хотите этого. Это настройка вашего браузера, поэтому у вас не будет возможности включить ее до тех пор, пока вы не отключите опцию \"Не отслеживать\".",
"OptOutExplanation": "Piwik – за сохранение личных данных в сети. Поэтому данная система может предложить вашим пользователям выбор исключения из политики конфиденциальности (отказ от дальнейшего сбора статистики о пользователе). Вы можете вставить следующий HTML-код на одну из ваших страниц сайта, например на страницу о гарантиях конфиденциальности.",
"OptOutExplanationBis": "Тег покаже \"iframe\", в якому міститиметься посилання для ваших відвідувачів, клацнувши на яке, вони зможуть відмовитися від потрапляння в веб-аналітику через отримання відповідного файлу cookie. %1$s Клацніть тут%2$s, щоб переглянути вміст що буде показано в \"iframe\".",
"OptOutForYourVisitors": "Исключение из политики конфиденциальности Piwik для посетителей",
@@ -67,6 +74,7 @@
"SendPluginUpdateCommunication": "Отправить email с уведомлением, когда для плагина будет доступна новая версия",
"SendPluginUpdateCommunicationHelp": "Письмо будет отправлено суперпользователю когда будет доступна новая версия плагина.",
"StableReleases": "Если Piwik является важной частью вашего бизнеса, мы рекомендуем использовать последнюю стабильную версию. Если вы используете последнюю бета версию, и вы нашли ошибку или есть предложение, пожалуйста, %1$sперейдите по ссылке%2$s.",
+ "LtsReleases": "Версии LTS (Долгосрочная поддержка) получают только исправления, касающиеся безопасности и ошибок.",
"SystemPluginSettings": "Системные настройки плагинов",
"TrackAGoal": "Отслеживать цель",
"TrackingCode": "Код отслеживания",
@@ -79,6 +87,9 @@
"YouAreOptedIn": "Статистика о вас собирается.",
"YouAreOptedOut": "Вы отказались от сбора статистических данных.",
"YouMayOptOut": "Вы можете отказаться от уникального cookie, привязанному к вашему браузеру, и идентифицирующего вас в системе аналитики данного сайта, тем самым отказавшись от любого сбора сведений о вас и их анализа на данном сайте.",
- "YouMayOptOutBis": "Снимите галочку и получите исключающий cookie для отказа сбора данных."
+ "YouMayOptOutBis": "Снимите галочку и получите исключающий cookie для отказа сбора данных.",
+ "OptingYouOut": "Отписываем вас, пожалуйста, подождите...",
+ "ProtocolNotDetectedCorrectly": "В данный момент вы просматриваете Piwik через безопасное соединение SSL (используя https), но Piwic смог обнаружить только небезопасное соединение на сервере.",
+ "ProtocolNotDetectedCorrectlySolution": "Чтобы удостовериться, что Piwic безопасно запрашивает и обрабатывает ваш контент через HTTPS, вы можете отредактировать свой файл %1$s или настроить ваши настройки прокси, или вы можете добавить линию %2$s под разделом %3$s. %4$sУзнать больше%5$s"
}
} \ No newline at end of file
diff --git a/plugins/CoreAdminHome/templates/trackingCodeGenerator.twig b/plugins/CoreAdminHome/templates/trackingCodeGenerator.twig
index 787ff4aba7..1011afa8cb 100644
--- a/plugins/CoreAdminHome/templates/trackingCodeGenerator.twig
+++ b/plugins/CoreAdminHome/templates/trackingCodeGenerator.twig
@@ -50,6 +50,7 @@
<div class="form-group">
<div class="form-help">
{{ 'CoreAdminHome_JSTracking_MergeSubdomainsDesc'|translate("x.<span class='current-site-host'>"~defaultReportSiteDomain~"</span>","y.<span class='current-site-host'>"~defaultReportSiteDomain~"</span>")|raw }}
+ {{ 'General_LearnMore'|translate(' (<a href="http://developer.piwik.org/guides/tracking-javascript-guide#measuring-domains-andor-sub-domains" rel="noreferrer" target="_blank">', '</a>)')|raw }}
</div>
<label class="checkbox">
<input type="checkbox" id="javascript-tracking-all-subdomains"/>
diff --git a/plugins/CoreHome/Columns/VisitorReturning.php b/plugins/CoreHome/Columns/VisitorReturning.php
index fc0ca345a7..3a7268052e 100644
--- a/plugins/CoreHome/Columns/VisitorReturning.php
+++ b/plugins/CoreHome/Columns/VisitorReturning.php
@@ -49,8 +49,6 @@ class VisitorReturning extends VisitDimension
*/
public function onNewVisit(Request $request, Visitor $visitor, $action)
{
- $visitCount = $request->getVisitCount();
- $daysSinceLastVisit = $request->getDaysSinceLastVisit();
$daysSinceLastOrder = $request->getDaysSinceLastOrder();
$isReturningCustomer = ($daysSinceLastOrder !== false);
@@ -59,7 +57,11 @@ class VisitorReturning extends VisitDimension
return self::IS_RETURNING_CUSTOMER;
}
- if ($visitCount > 1 || $visitor->isVisitorKnown() || $daysSinceLastVisit > 0) {
+ $visitCount = $request->getVisitCount();
+ $daysSinceFirstVisit = $request->getDaysSinceFirstVisit();
+ $daysSinceLastVisit = $request->getDaysSinceLastVisit();
+
+ if ($visitCount > 1 || $visitor->isVisitorKnown() || $daysSinceFirstVisit > 0 || $daysSinceLastVisit > 0) {
return self::IS_RETURNING;
}
diff --git a/plugins/CoreHome/angularjs/common/services/piwik-api.js b/plugins/CoreHome/angularjs/common/services/piwik-api.js
index 8bb14808c5..5257aff0c9 100644
--- a/plugins/CoreHome/angularjs/common/services/piwik-api.js
+++ b/plugins/CoreHome/angularjs/common/services/piwik-api.js
@@ -53,7 +53,7 @@ var hasBlockedContent = false;
}
function isErrorResponse(response) {
- return response && response.result == 'error';
+ return response && angular.isObject(response) && response.result == 'error';
}
function createResponseErrorNotification(response, options) {
diff --git a/plugins/CoreHome/angularjs/siteselector/siteselector.directive.less b/plugins/CoreHome/angularjs/siteselector/siteselector.directive.less
index b6e4c3d676..78dd32a862 100644
--- a/plugins/CoreHome/angularjs/siteselector/siteselector.directive.less
+++ b/plugins/CoreHome/angularjs/siteselector/siteselector.directive.less
@@ -22,7 +22,7 @@
> .siteSelector {
position: absolute;
- z-index: 9999;
+ z-index: 999;
}
a.title {
diff --git a/plugins/CoreHome/lang/fi.json b/plugins/CoreHome/lang/fi.json
index 382429907e..401eb9fdfc 100644
--- a/plugins/CoreHome/lang/fi.json
+++ b/plugins/CoreHome/lang/fi.json
@@ -3,6 +3,7 @@
"CategoryNoData": "Tässä kategoriassa ei ole tietoja. Kokeile linkkiä \"Kaikki esiintymät\".",
"CheckForUpdates": "Tarkista päivitykset",
"CheckPiwikOut": "Tutustu Piwikiin!",
+ "ClickToEditX": "Muokkaa %s klikkaamalla",
"CloseWidgetDirections": "Voit sulkea tämän widget-käyttöliittymän klikkaamalla \"X\"-ikonia käyttöliittymän yläreunassa.",
"DataForThisReportHasBeenPurged": "Tämän raportin data on yli %s kuukautta vanhaa ja on poistettu.",
"DataTableExcludeAggregateRows": "Yhdistetyt rivit ovat näkyvillä %s Piilota",
@@ -23,8 +24,10 @@
"InjectedHostSuperUserWarning": "Piwik saattaa olla väärin asennettu (esim. jos Piwik on hiljattain siirretty uuteen serveriin tai URL:ään). Voit joko %1$sklikata tästä ja lisätä %2$s ja lisätä päteväksi Piwik isäntänimeksi (jos luotat siihen)%3$s, tai %4$sklikata tästä ja %5$s siirtyäksesi Piwikiin turvallisesti%6$s.",
"InjectedHostWarningIntro": "Käytät Piwikiä osoitteesta %1$s, mutta Piwik on konfiguroitu ajettavaksi tässä osoitteessa: %2$s.",
"JavascriptDisabled": "JavaScriptin täytyy olla käytössä normaalinäkymässä.<br \/>JavaScript ei ole päällä tai ei ole tuettu selaimessasi.<br \/>Ota JavaScript käyttöön selaimesi asetuksista ja %1$syritä uudelleen%2$s.<br\/>",
+ "MainNavigation": "Päänavigointi",
"MakeADifference": "Ole mukana vaikuttamassa: %1$sTee lahjoitus%2$s Piwik 2.0 version rahoittamiseksi!",
"MakeOneTimeDonation": "Lahjoita kertasumma.",
+ "Menu": "Valikko",
"NoPrivilegesAskPiwikAdmin": "Olet kirjautuneena sisään käyttäjänä '%1$s', mutta sinulla ei ole mitään oikeuksia Piwikissä. %2$sPyydä Piwikin ylläpitäjää (klikkaa avataksesi sähköpostin)%3$s antamaan katseluoikeudet verkkosivuun.",
"OnlyForSuperUserAccess": "Tämä widget näkyy ainoastaan käyttäjille, joilla on Superkäyttäjän oikeudet.",
"PageOf": "%1$s of %2$s",
@@ -35,6 +38,7 @@
"SharePiwikShort": "Piwik! Ilmainen ja avoimen lähdekoodin verkkoanalyysi. Hallitse omaa dataasi.",
"ShareThis": "Jaa tämä",
"ShowJSCode": "Näytä lisättävä Javascript-koodi",
+ "SkipToContent": "Siirry sisältöön",
"SubscribeAndBecomePiwikSupporter": "Jatka turvalliselle luottokorttimaksusivulle (Paypal) ryhtyäksesi Piwikin tukijaksi!",
"SupportPiwik": "Tue Piwikiä!",
"TableNoData": "Ei tietoja tässä taulukossa",
@@ -45,6 +49,11 @@
"YouAreUsingTheLatestVersion": "Käytössäsi on uusin versio Piwikistä!",
"ClickRowToExpandOrContract": "Klikkaa tätä riviä avataksesi tai sulkeaksesi alataulukon.",
"UndoPivotBySubtable": "Tämä raportti on käännetty %s:llä. Kumoa kääntö",
- "PivotBySubtable": "Tämä raportti ei ole käännetty %1$s:n mukaan. Käännetty %2$s:llä."
+ "PivotBySubtable": "Tämä raportti ei ole käännetty %1$s:n mukaan. Käännetty %2$s:llä.",
+ "QuickAccessTitle": "Hae %s:llä. Käytä nuolia navigointiin. Oikotie: haku aukeaa painamalla f-näppäintä.",
+ "MenuEntries": "Valikon sisältö",
+ "Segments": "Segmentit",
+ "AdblockIsMaybeUsed": "Jos käytät mainostenestoa (ad blocker), poista se käytöstä tällä sivulla, jotta Piwik toimii ongelmitta.",
+ "ChangeCurrentWebsite": "Valitse verkkosivu, nyt valittuna %s"
}
} \ No newline at end of file
diff --git a/plugins/CoreHome/lang/ko.json b/plugins/CoreHome/lang/ko.json
index 53f815c4cc..1288435bf2 100644
--- a/plugins/CoreHome/lang/ko.json
+++ b/plugins/CoreHome/lang/ko.json
@@ -49,6 +49,7 @@
"ClickRowToExpandOrContract": "하위 테이블의 행을 확장하거나 축소하기 위해 클릭하세요.",
"UndoPivotBySubtable": "이 보고서는 %s Undo pivot에 의해 결정되었습니다.",
"PivotBySubtable": "이 보고서는 %1$s Pivot이 %2$s에 의해 결정되지 않았습니다.",
+ "QuickAccessTitle": "%s 검색. 검색 결과를 확인할 때 방향키를 사용하세요. 단축키: 'f'는 검색",
"MenuEntries": "메뉴",
"Segments": "세그멘트",
"AdblockIsMaybeUsed": "Piwik가 문제 없이 동작하기 위해서 광고 차단기능이 있는 플러그인을 꺼주시길 바랍니다.",
diff --git a/plugins/CoreHome/lang/ru.json b/plugins/CoreHome/lang/ru.json
index 4b7d9f0549..7fdd19b854 100644
--- a/plugins/CoreHome/lang/ru.json
+++ b/plugins/CoreHome/lang/ru.json
@@ -24,6 +24,7 @@
"InjectedHostSuperUserWarning": "Piwik может быть неправильно сконфигурирован (например, если Piwik был недавно перемещен на новый сервер или переехал на новый адрес). Вы также можете %1$sнажать сюда и добавить %2$s в качестве доверенного имени хоста Piwik (если вы доверяете ему)%3$s, или %4$sнажмите сюда и перейдите %5$s для безопасного доступа к Piwik%6$s.",
"InjectedHostWarningIntro": "Сейчас вы заходите в Piwik на %1$s, но Piwik был настроен на этом адресе: %2$s.",
"JavascriptDisabled": "JavaScript должен быть разрешен для корректного стандартного отображения Piwik.<br \/>Если Вы читаете это сообщение, значит JavaScript запрещен, либо не поддерживается вашим браузером.<br \/>Для использования стандартного вида, разрешите JavaScript в настройках вашего браузера, потом %1$sпопробуйте обновить страницу%2$s.<br \/>",
+ "MainNavigation": "Основная навигация",
"MakeADifference": "Внесите свой вклад: %1$sПожертвуйте сейчас%2$s для финансирования Piwik 2.0!",
"MakeOneTimeDonation": "Сделать только пожертвование (без подписки).",
"Menu": "Меню",
@@ -46,6 +47,11 @@
"ViewAllPiwikVideoTutorials": "Просмотреть все обучающие ролики про Piwik",
"WebAnalyticsReports": "Отчеты веб аналитики",
"YouAreUsingTheLatestVersion": "У вас последняя версия Piwik!",
- "ClickRowToExpandOrContract": "Нажмите на эту строку, чтобы растянуть или сжать подтаблицу."
+ "ClickRowToExpandOrContract": "Нажмите на эту строку, чтобы растянуть или сжать подтаблицу.",
+ "QuickAccessTitle": "Поиск %s. Используйте клавиши со стрелками для переходов в пределах результатов поиска. Быстрый доступ: нажмите 'f' для поиска.",
+ "MenuEntries": "Пункты меню",
+ "Segments": "Сегменты",
+ "AdblockIsMaybeUsed": "В случае, если вы используете блокировщик рекламы, пожалуйста, отключите его, чтобы убедиться, что Piwik работает без проблем.",
+ "ChangeCurrentWebsite": "Выбор вебсайта, сейчас выбран вебсайт: %s"
}
} \ No newline at end of file
diff --git a/plugins/CoreHome/stylesheets/dataTable/_reportDocumentation.less b/plugins/CoreHome/stylesheets/dataTable/_reportDocumentation.less
index 117fcf8716..6d071025f9 100644
--- a/plugins/CoreHome/stylesheets/dataTable/_reportDocumentation.less
+++ b/plugins/CoreHome/stylesheets/dataTable/_reportDocumentation.less
@@ -10,7 +10,7 @@ table.dataTable th .columnDocumentation {
border: 1px solid #e4e5e4;
padding: 5px 10px 6px 10px;
border-radius: 4px;
- z-index: 125;
+ z-index: 150;
position: absolute;
box-shadow: 0 0 4px #e4e5e4;
cursor: default;
diff --git a/plugins/CoreHome/templates/_dataTableCell.twig b/plugins/CoreHome/templates/_dataTableCell.twig
index 1bcd1bb0f2..3a54c3fac0 100644
--- a/plugins/CoreHome/templates/_dataTableCell.twig
+++ b/plugins/CoreHome/templates/_dataTableCell.twig
@@ -2,9 +2,12 @@
{% set tooltipIndex = column ~ '_tooltip' %}
{% if row.getMetadata(tooltipIndex) %}<span class="cell-tooltip" data-tooltip="{{ row.getMetadata(tooltipIndex) }}">{% endif %}
{% if not row.getIdSubDataTable() and column=='label' and row.getMetadata('url') %}
- <a rel="noreferrer" target="_blank" href='{% if row.getMetadata('url')|slice(0,4) not in ['http','ftp:'] %}http://{% endif %}{{ row.getMetadata('url')|rawSafeDecoded }}'>
+ <a rel="noreferrer"
+ target="_blank"
+ href='{% if row.getMetadata('url')|slice(0,4) not in ['http','ftp:'] %}http://{% endif %}{{ row.getMetadata('url')|rawSafeDecoded }}'>
{% if not row.getMetadata('logo') %}
- <img class="link" width="10" height="9" src="plugins/Morpheus/images/link.gif"/>
+ <img class="link" width="10" height="9"
+ src="plugins/Morpheus/images/link.gif"/>
{% endif %}
{% endif %}
@@ -19,7 +22,7 @@
{% endif %}
{% set rowPercentage = row.getColumn(column)|percentage(reportTotal, 1) %}
{% set metricTitle = translations[column]|default(column) %}
- {% set reportLabel = row.getColumn(labelColumn)|truncate(40)|raw %}
+ {% set reportLabel = row.getColumn(labelColumn)|truncate(40)|rawSafeDecoded %}
{% set reportRatioTooltip = 'General_ReportRatioTooltip'|translate(reportLabel, rowPercentage|e('html_attr'), reportTotal|e('html_attr'), metricTitle|e('html_attr'), translations[labelColumn]|default(labelColumn)|e('html_attr')) %}
@@ -30,7 +33,9 @@
{% set totalRatioTooltip = '' %}
{% endif %}
- <span class="ratio" title="{{ reportRatioTooltip|raw }} {{ totalRatioTooltip|e('html_attr') }}">&nbsp;{{ rowPercentage }}</span>
+ <span class="ratio"
+ title="{{ reportRatioTooltip|raw }} {{ totalRatioTooltip|e('html_attr') }}"
+ >&nbsp;{{ rowPercentage }}</span>
{%- endif %}
{% if column=='label' %}
@@ -42,7 +47,7 @@
{% if row.getMetadata('html_label_prefix') %}<span class='label-prefix'>{{ row.getMetadata('html_label_prefix') | raw }}&nbsp;</span>{% endif -%}
{%- if row.getMetadata('html_label_suffix') %}<span class='label-suffix'>{{ row.getMetadata('html_label_suffix') | raw }}</span>{% endif -%}
{% endif %}<span class="value">
- {%- if row.getColumn(column) %}{% if column=='label' %}{{- row.getColumn(column)|raw -}}{% else %}{{- row.getColumn(column)|number(2,0)|raw -}}{% endif %}
+ {%- if row.getColumn(column) or (column=='label' and row.getColumn(column) is same as("0")) %}{% if column=='label' %}{{- row.getColumn(column)|rawSafeDecoded -}}{% else %}{{- row.getColumn(column)|number(2,0)|raw -}}{% endif %}
{%- else -%}-
{%- endif -%}</span>
{% if column=='label' %}</span>{% endif %}
diff --git a/plugins/CorePluginsAdmin/lang/ru.json b/plugins/CorePluginsAdmin/lang/ru.json
index 0aa82140b2..405c87ac6f 100644
--- a/plugins/CorePluginsAdmin/lang/ru.json
+++ b/plugins/CorePluginsAdmin/lang/ru.json
@@ -14,12 +14,16 @@
"BackToExtendPiwik": "Вернуться к Marketplace",
"BeCarefulUsingPlugins": "Плагины, которые разработаны не командой Piwik должны использоваться с осторожностью: мы не просматриваем их.",
"BeCarefulUsingThemes": "Темы, которые разработаны не командой Piwik должны использоваться с осторожностью: мы не просматриваем их.",
+ "ByXDevelopers": "разработчиками %s",
+ "CannotInstall": "Невозможно установить (помощь)",
"Changelog": "История изменений",
"ChangeSettingsPossible": "Вы можете %1$sизменить настройки%2$s для этого плагина.",
"CorePluginTooltip": "Основные плагины не имеют версию, так как они распространяются с Piwik.",
"Deactivate": "Деактивировать",
"Developer": "Разработчик",
+ "DevelopersLearnHowToDevelopPlugins": "Разработчикам: Изучите, как вы можете расширить и настроить Piwik при помощи плагинов для %1$sразработки или тем%2$s.",
"DoMoreContactPiwikAdmins": "Для установки нового плагина или новой темы, пожалуйста свяжитесь с вашим Piwik-администратором",
+ "EmailToEnquireUpdatedVersion": "Пожалуйста, напишите на электронную почту %1$s и запросите обновленную версию %2$s.",
"FeaturedPlugin": "Набирающий популярность плагин",
"ChangeLookByManageThemes": "Вы можете изменить внешний вид Piwik: %1$sВыбор Темы%2$s.",
"GetEarlyAccessForPaidPlugins": "Примечание: в настоящее время все плагины доступны бесплатно, в будущем мы включим платные плагины на Marketplace (%1$sсвяжитесь с нами%2$s для раннего доступа).",
@@ -31,8 +35,13 @@
"InstallingPlugin": "Установка %s",
"InstallNewPlugins": "Установить новые плагины",
"InstallNewThemes": "Установить новые темы",
+ "LastCommitTime": "(последний коммит %s)",
"LastUpdated": "Последнее обновление",
"LicenseHomepage": "Дом. страница лицензии",
+ "LikeThisPlugin": "Нравится этот плагин?",
+ "ConsiderDonating": "Рассмотреть возможность пожертвования",
+ "CommunityContributedPlugin": "Это плагин, сделанный при содействии сообщества, доставленный к вам бесплатно.",
+ "ConsiderDonatingCreatorOf": "Пожалуйста, рассмотрите возможность пожертвования автору %s",
"PluginsExtendPiwik": "Плагины расширяют функциональность Piwik.",
"OncePluginIsInstalledYouMayActivateHere": "После установки плагина Вы можете активировать или деактивировать его здесь.",
"Marketplace": "Marketplace",
@@ -40,8 +49,10 @@
"MenuPlatform": "Платформа",
"MissingRequirementsNotice": "Пожалуйста, обновите %1$s %2$s до более новой версии, необходима версия %1$s %3$s.",
"MissingRequirementsPleaseInstallNotice": "Пожалуйста, установите %1$s %2$s т. к. оно требуется для %3$s.",
+ "NewVersion": "новая версия",
"NoPluginsFound": "Плагины не найдены",
"NotAllowedToBrowseMarketplacePlugins": "Можете посмотреть список плагинов, которые могут быть установлены для подстройки или расширения вашей платформы Piwik. Свяжитесь с администратором если вам потребуется установить один из них.",
+ "NotAllowedToBrowseMarketplaceThemes": "Вы можете посмотреть список тем, которые могут быть установлены для настройки внешнего вида платформы Piwik. Пожалуйста, свяжите с вашим администратором, чтобы установить любой из них.",
"NoThemesFound": "Темы не найдены",
"NoZipFileSelected": "Выберете ZIP файл",
"NumDownloadsLatestVersion": "Последняя версия скачена: %s раз",
diff --git a/plugins/CoreUpdater/lang/fi.json b/plugins/CoreUpdater/lang/fi.json
index 87b362e1e2..28915e6f2f 100644
--- a/plugins/CoreUpdater/lang/fi.json
+++ b/plugins/CoreUpdater/lang/fi.json
@@ -25,6 +25,11 @@
"HighTrafficPiwikServerEnableMaintenance": "Jos Piwik-palvelimellasi on suuria määriä liikennettä, suosittelemme %1$spoistamaan käyttäjäseurannan hetkellisesti käytöstä ja laittamaan Piwikin käyttäjäliittymän huoltotilaan%2$s.",
"IncompatbilePluginsWillBeDisabledInfo": "Huom. Osa lisäosista ei ole yhteensopivia Piwikin kanssa: %s. Nämä poistetaan käytöstä kun päivität:",
"InstallingTheLatestVersion": "Asennetaan uusinta versiota",
+ "LatestBetaRelease": "Viimeisin beta-julkaisu",
+ "LatestStableRelease": "Viimeisin vakaa julkaisu",
+ "Latest2XStableRelease": "Viimeisin vakaa 2.X",
+ "Latest2XBetaRelease": "Viimeisin beta 2.X",
+ "LtsSupportVersion": "Pitkään tuettu versio",
"MajorUpdateWarning1": "Tämä on iso päivitys! Päivityksessä kestää kauemmin kuin normaalisti.",
"MajorUpdateWarning2": "Seuraavat ohjeet ovat erityisen tärkeitä suurille asennuksille.",
"NoteForLargePiwikInstances": "Tärkeä tiedotus suurille Piwikin asennuksille",
@@ -48,6 +53,8 @@
"UpdateHasBeenCancelledExplanation": "Piwikin yhden klikkauksen päivitys on peruutettu. Jos et voi korjata alla olevaa virhettä, on suositeltavaa päivittää Piwik manuaalisesti. %1$s Ole hyvä ja tarkista %2$sPäivitysdokumentaatio%3$s",
"UpdateTitle": "Piwik › Päivitys",
"UpdateSuccessTitle": "Piwik on päivitetty onnistuneesti!",
+ "UpdateErrorTitle": "Päivitysvirhe",
+ "Updating": "Päivitetään",
"UpgradeComplete": "Päivitys valmis!",
"UpgradePiwik": "Päivitä Piwik",
"VerifyingUnpackedFiles": "Tarkistetaan purettuja tiedostoja",
@@ -56,6 +63,7 @@
"YouCanUpgradeAutomaticallyOrDownloadPackage": "Voit päivittää versioon %s automaattisesti tai ladata paketin ja asentaa sen manuaalisesti:",
"YouCouldManuallyExecuteSqlQueries": "Jos et voi käyttää komentorivin päivitysohjelmaa ja Piwikin päivitys epäonnistuu (aikakatkaisu tai jokin muu virhe), voit ajaa SQL-kyselyt itse.",
"YouMustDownloadPackageOrFixPermissions": "Piwik ei voi ylikirjoittaa nykyistä asennusta. Voit joko korjata hakemistojen\/tiedostojen oikeudet tai ladata paketin ja asentaa version %s itse:",
- "YourDatabaseIsOutOfDate": "Piwikin tietokanta on vanhentunut ja se tulee päivittää ennen jatkamista."
+ "YourDatabaseIsOutOfDate": "Piwikin tietokanta on vanhentunut ja se tulee päivittää ennen jatkamista.",
+ "ViewVersionChangelog": "katso muutostiedot tälle versiolle:"
}
} \ No newline at end of file
diff --git a/plugins/CoreUpdater/lang/ru.json b/plugins/CoreUpdater/lang/ru.json
index 30c9ab8e11..768fc2b8bc 100644
--- a/plugins/CoreUpdater/lang/ru.json
+++ b/plugins/CoreUpdater/lang/ru.json
@@ -22,8 +22,14 @@
"HelpMessageContent": "Проверьте %1$s Piwik FAQ %2$s, в котором объясняется большинство известных ошибок, которые могут случится во время обновления. %3$s Обратитесь к системному администратору – он может помочь Вам с решением проблемы на сервере или с настройками MySQL.",
"HelpMessageIntroductionWhenError": "Выше подается код ошибки ядра системы. Он поможет Вам объяснить причину ошибки, но если же Вам необходима дополнительная помощь, пожалуйста:",
"HelpMessageIntroductionWhenWarning": "Обновление завершено успешно, однако в процессе возникло несколько предупреждений. Пожалуйста, прочтите примечания ниже. Для дополнительной помощи:",
+ "HighTrafficPiwikServerEnableMaintenance": "Если вы управляете сервером Piwik с большим объемом трафика, мы рекомендуем %1$sна мгновение выключить Отслеживание посетителей и переключить Пользовательский интерфейс Piwik в режим%2$s поддержки.",
"IncompatbilePluginsWillBeDisabledInfo": "Примечание: некоторые плагины не совместимы с Piwik %s. Они будут отключены при обновлении:",
"InstallingTheLatestVersion": "Установка последней версии",
+ "LatestBetaRelease": "Последний тестовый выпуск",
+ "LatestStableRelease": "Последний стабильный выпуск",
+ "Latest2XStableRelease": "Последний стабильный 2.X",
+ "Latest2XBetaRelease": "Последний тестовый 2.X",
+ "LtsSupportVersion": "Версия Долгосрочной поддержки",
"MajorUpdateWarning1": "Это большое обновление! Может потребоваться больше времени, чем обычно.",
"MajorUpdateWarning2": "Следующий совет особенно важен для больших обновлений!",
"NoteForLargePiwikInstances": "Важное замечание для больших инсталляций Piwik",
@@ -55,6 +61,8 @@
"CloudHosting": "Облачный хостинг",
"Updating": "Обновление",
"UpdateUsingHttpsFailed": "Не удалось скачать последнюю версию Piwik по безопасному HTTPS, возникла следующая ошибка:",
+ "UpdateUsingHttpsFailedHelp": "Почему это не удалось? Загрузка последней версии Piwik (через безопасное HTTPS соединение) может потерпеть неудачу по разным причинам, например, из-за ошибки соединения, медленной скорости соединения или неправильной настройки системы. Обратите внимание, что это также может означать, что ваш сервер подвергается атаке MITM, и кто-то пытается заменить обновление на вредоносную версию Piwik.",
+ "UpdateUsingHttpsFailedHelpWhatToDo": "Рекомендуется повторить попытку загрузки, используя безопасное соединение HTTPS, так как оно предотвращает атаки MITM.",
"UsingHttps": "используется защищенное HTTPS-соединение (рекомендуется)",
"UsingHttp": "используется незащищенное HTTP-соединение",
"UpgradeComplete": "Обновление завершено!",
diff --git a/plugins/CoreVisualizations/CoreVisualizations.php b/plugins/CoreVisualizations/CoreVisualizations.php
index 9a5f88e7ec..0aec35fb3e 100644
--- a/plugins/CoreVisualizations/CoreVisualizations.php
+++ b/plugins/CoreVisualizations/CoreVisualizations.php
@@ -29,8 +29,7 @@ class CoreVisualizations extends \Piwik\Plugin
'AssetManager.getStylesheetFiles' => 'getStylesheetFiles',
'AssetManager.getJavaScriptFiles' => 'getJsFiles',
'Translate.getClientSideTranslationKeys' => 'getClientSideTranslationKeys',
- 'UsersManager.deleteUser' => 'deleteUser',
- 'ViewDataTable.addViewDataTable' => 'addViewDataTable'
+ 'UsersManager.deleteUser' => 'deleteUser'
);
}
@@ -39,23 +38,6 @@ class CoreVisualizations extends \Piwik\Plugin
ViewDataTableManager::clearUserViewDataTableParameters($userLogin);
}
- public function addViewDataTable(&$viewDataTable)
- {
- // Both are the same HtmlTable, just the Pivot one has some extra logic in case Pivot is used.
- // We don't want to use the same HtmlTable twice in the UI. Therefore we always need to remove one.
- if (Common::getRequestVar('pivotBy', '')) {
- $tableToRemove = 'Visualizations\HtmlTable';
- } else {
- $tableToRemove = 'HtmlTable\PivotBy';
- }
-
- foreach ($viewDataTable as $index => $table) {
- if (Common::stringEndsWith($table, $tableToRemove)) {
- unset($viewDataTable[$index]);
- }
- }
- }
-
public function getStylesheetFiles(&$stylesheets)
{
$stylesheets[] = "plugins/CoreVisualizations/stylesheets/dataTableVisualizations.less";
diff --git a/plugins/CoreVisualizations/Visualizations/HtmlTable.php b/plugins/CoreVisualizations/Visualizations/HtmlTable.php
index 66cb4c26e9..dff8aa3e7a 100644
--- a/plugins/CoreVisualizations/Visualizations/HtmlTable.php
+++ b/plugins/CoreVisualizations/Visualizations/HtmlTable.php
@@ -70,6 +70,25 @@ class HtmlTable extends Visualization
$dataTable = $request->process();
$this->assignTemplateVar('siteSummary', $dataTable);
}
+
+ if ($this->isPivoted()) {
+ $this->config->columns_to_display = $this->dataTable->getColumns();
+ }
+ }
+
+ public function beforeGenericFiltersAreAppliedToLoadedDataTable()
+ {
+ if ($this->isPivoted()) {
+ $this->config->columns_to_display = $this->dataTable->getColumns();
+
+ $this->dataTable->applyQueuedFilters();
+ }
+
+ parent::beforeGenericFiltersAreAppliedToLoadedDataTable();
}
+ protected function isPivoted()
+ {
+ return $this->requestConfig->pivotBy || Common::getRequestVar('pivotBy', '');
+ }
}
diff --git a/plugins/CoreVisualizations/Visualizations/HtmlTable/AllColumns.php b/plugins/CoreVisualizations/Visualizations/HtmlTable/AllColumns.php
index 5acf9b50be..959aa0d57b 100644
--- a/plugins/CoreVisualizations/Visualizations/HtmlTable/AllColumns.php
+++ b/plugins/CoreVisualizations/Visualizations/HtmlTable/AllColumns.php
@@ -64,4 +64,14 @@ class AllColumns extends HtmlTable
$properties->columns_to_display = $columnsToDisplay;
});
}
+
+ public function beforeLoadDataTable()
+ {
+ $this->requestConfig->request_parameters_to_modify['pivotBy'] = null; // always unset pivotBy
+ }
+
+ protected function isPivoted()
+ {
+ return false; // Pivot not supported
+ }
}
diff --git a/plugins/CoreVisualizations/Visualizations/HtmlTable/PivotBy.php b/plugins/CoreVisualizations/Visualizations/HtmlTable/PivotBy.php
deleted file mode 100644
index 1703988599..0000000000
--- a/plugins/CoreVisualizations/Visualizations/HtmlTable/PivotBy.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-/**
- * Piwik - free/libre analytics platform
- *
- * @link http://piwik.org
- * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
- *
- */
-
-namespace Piwik\Plugins\CoreVisualizations\Visualizations\HtmlTable;
-
-use Piwik\DataTable;
-use Piwik\Plugins\CoreVisualizations\Visualizations\HtmlTable;
-use Piwik\View;
-
-/**
- * DataTable Visualization that derives from HtmlTable and sets show_extra_columns to true.
- */
-class PivotBy extends HtmlTable
-{
- public function beforeGenericFiltersAreAppliedToLoadedDataTable()
- {
- $this->config->columns_to_display = $this->dataTable->getColumns();
-
- $this->dataTable->applyQueuedFilters();
-
- parent::beforeGenericFiltersAreAppliedToLoadedDataTable();
- }
-
- public function beforeRender()
- {
- parent::beforeRender();
-
- $this->config->columns_to_display = $this->dataTable->getColumns();
- }
-}
diff --git a/plugins/CustomDimensions b/plugins/CustomDimensions
-Subproject cef5a9d43f7e26e98a33a003eb283431dfacf6d
+Subproject 212a703c5884c644cff37eea714a1be4494715c
diff --git a/plugins/CustomVariables/lang/fi.json b/plugins/CustomVariables/lang/fi.json
index 51c8ee0f1f..0dfd138a41 100644
--- a/plugins/CustomVariables/lang/fi.json
+++ b/plugins/CustomVariables/lang/fi.json
@@ -5,6 +5,10 @@
"CustomVariables": "Kustomoidut muuttujat",
"CustomVariablesReportDocumentation": "Tämä raportti sisältää tietoa kustomoiduista muuttujastasi. Voit tarkastella eri arvojen määrää klikkaamalla muuttujan nimeä. %1$s Saat lisätietoa kustomoiduista muuttujista %2$sCustom Variables%3$s-sivulta piwik.orgista (englanninkielinen)",
"ScopePage": "alueena sivu",
- "ScopeVisit": "alueena käynti"
+ "ScopeVisit": "alueena käynti",
+ "ManageDescription": "Tämä on yleiskatsaus kaikista kustomoiduista muuttujista ja niiden käytöstä verkkosivulla '%s'. Nimet on järjestetty käyttömäärien mukaan.",
+ "Index": "Indeksi",
+ "Usages": "Käytöt",
+ "Unused": "Käyttämätön"
}
} \ No newline at end of file
diff --git a/plugins/CustomVariables/lang/ru.json b/plugins/CustomVariables/lang/ru.json
index c448538e4b..82d7f8182f 100644
--- a/plugins/CustomVariables/lang/ru.json
+++ b/plugins/CustomVariables/lang/ru.json
@@ -4,7 +4,21 @@
"ColumnCustomVariableValue": "Значение пользовательской переменной",
"CustomVariables": "Пользовательские переменные",
"CustomVariablesReportDocumentation": "Этот отчет отображает информацию по вашим Пользовательским Переменным. Кликните по переменной, чтобы увидеть распределение значений. %1$s Для большей информации о Пользов. Переменных в общих чертах ознакомьтесь с %2$sдокументацией по Пользов. переменных на сайте Piwik%3$s",
+ "PluginDescription": "Пользовательские переменные - это пары (имя, значение), которые вы можете назначить для пользователей или любого их действия при помощи Javascript API. Тогда Piwik будет сообщать, сколько посещений, страниц, преобразований для каждого из этих пользовательских имен и значений. Смотрите детализацию Пользовательских переменных для каждого пользователя и действия в Журнале посещений.<br \/>Требуется для использования опции <a href=\"http:\/\/piwik.org\/docs\/ecommerce-analytics\/\">Аналитика электронной торговли<\/a>!",
"ScopePage": "scope page",
- "ScopeVisit": "scope visit"
+ "ScopeVisit": "scope visit",
+ "ManageDescription": "Этот обзор показывает все слоты для пользовательских переменных и их использование для вебсайта '%s'. Названия в пределах одного слота распределены по общей частоте использования.",
+ "ScopeX": "Выборка %s",
+ "Index": "Индекс",
+ "Usages": "Использование",
+ "Unused": "Не использовано",
+ "CreateNewSlot": "Увеличить количество доступных слотов Пользовательских переменных",
+ "UsageDetails": "%1$s посещений и %2$s действий с момента создания этого вебсайта.",
+ "CreatingCustomVariableTakesTime": "Создание нового слота пользовательских переменных может занять долгое время в зависимости от размера вашей базы данных. Поэтому, это возможно сделать только с помощью команды, которая должна выполняться в командной строке.",
+ "CurrentAvailableCustomVariables": "В данный момент вы можете использовать до %s Пользовательских переменных на сайт.",
+ "ToCreateCustomVarExecute": "Чтобы создать новый слот Пользовательских переменных, введите следующую команду во время установки Piwik:",
+ "SlotsReportIsGeneratedOverTime": "Информация для этого отчета будет заполнена со временем. Это может занять день или два, чтобы увидеть какую-либо информацию, и несколько недель, чтобы получить точный отчет.",
+ "MetricsAreOnlyAvailableForVisitScope": "Внимание: %1$s метрика доступна только для Пользовательских переменных выборки %2$s.",
+ "MetricsNotAvailableForPageScope": "Для выборки Пользовательных переменных %1$s, значение столбца для этих метрик - %2$s"
}
} \ No newline at end of file
diff --git a/plugins/DBStats/lang/fi.json b/plugins/DBStats/lang/fi.json
index edb42aeadd..9232287c22 100644
--- a/plugins/DBStats/lang/fi.json
+++ b/plugins/DBStats/lang/fi.json
@@ -10,6 +10,7 @@
"MetricDataByYear": "Metriikat vuosittain",
"MetricTables": "Metriikkataulut",
"OtherTables": "Muut taulut",
+ "PluginDescription": "Tarjoaa tietoa MySQL-tietokannan käytöstä. Saatavilla pääkäyttäjille Diagnostiikka-sivun alla.",
"ReportDataByYear": "Raporttitaulut vuosittain",
"ReportTables": "Raporttitaulut",
"RowCount": "Rivien määrä",
diff --git a/plugins/Dashboard/lang/fi.json b/plugins/Dashboard/lang/fi.json
index c888edd724..14a6dd65b1 100644
--- a/plugins/Dashboard/lang/fi.json
+++ b/plugins/Dashboard/lang/fi.json
@@ -18,8 +18,10 @@
"Maximise": "Suurenna",
"Minimise": "Pienennä",
"NotUndo": "Et voi peruuttaa tätä operaatiota.",
+ "PluginDescription": "Web-analytiikkojen työpöytä. Muokkaa työpöytääsi lisäämällä uusia osia, siirtämällä osia eri kohtiin, ja vaihtamalla työpöydän sisältöä. Jokainen käyttäjä voi hallita omaa työpöytäänsä.",
"RemoveDashboard": "Poista näkymä",
"RemoveDashboardConfirm": "Haluatko varmasti poistaa työpöydän \"%s\"?",
+ "RemoveDefaultDashboardNotPossible": "Oletustyöpöytää ei voi poistaa",
"RenameDashboard": "Uudelleenimeä näkymä",
"ResetDashboard": "Nollaa työpöytä",
"ResetDashboardConfirm": "Haluatko varmasti nollata työpöydän asettelun takaisin oletusasetuksiin?",
diff --git a/plugins/Dashboard/lang/lt.json b/plugins/Dashboard/lang/lt.json
index dc83d12c30..b7ac2a7f30 100644
--- a/plugins/Dashboard/lang/lt.json
+++ b/plugins/Dashboard/lang/lt.json
@@ -9,6 +9,7 @@
"DashboardCopied": "Esamas skydelis sėkmingai nukopijuotas pasirinktam naudotojui.",
"DashboardEmptyNotification": "Jūsų Skydelyje nėra jokių valdiklių. Pradėkite, pridėdami kelis valdiklius arba, tiesiog, atstatykite skydelį į numatytąjį valdiklių pasirinkimą.",
"DashboardName": "Skydelio pavadinimas:",
+ "DashboardOf": "%s skydelis",
"DefaultDashboard": "Numatytasis skydelis - Naudojamas numatytųjų valdiklių pasirinkimo ir stulpelių išdėstymas",
"DeleteWidgetConfirm": "Ar tikrai norite pašalinti šį valdiklį iš skydelio?",
"EmptyDashboard": "Tuščias skydelis - Parinkite savo mėgiamus valdiklius",
@@ -20,6 +21,7 @@
"PluginDescription": "Jūsų Saityno Analitikos Skydelis. Tinkinkite savo skydelį, pridėdami naujų valdiklių, vilkdami juos iš vienos vietos į kitą ir keisdami skydelio stulpelių išdėstymą. Kiekvienas naudotojas gali tvarkyti savo asmeninį pasirinktiną skydelį.",
"RemoveDashboard": "Šalinti skydelį",
"RemoveDashboardConfirm": "Ar tikrai norite pašalinti skydelį \"%s\"?",
+ "RemoveDefaultDashboardNotPossible": "Numatytasis skydelis negali būti pašalintas",
"RenameDashboard": "Pervadinti skydelį",
"ResetDashboard": "Atstatyti skydelį",
"ResetDashboardConfirm": "Ar tikrai norite atstatyti savo skydelio išdėstymą į numatytąjį Valdiklių pasirinkimą?",
diff --git a/plugins/Dashboard/lang/ru.json b/plugins/Dashboard/lang/ru.json
index 413838e418..071a954c63 100644
--- a/plugins/Dashboard/lang/ru.json
+++ b/plugins/Dashboard/lang/ru.json
@@ -18,8 +18,10 @@
"Maximise": "Развернуть",
"Minimise": "Свернуть",
"NotUndo": "Данная операция не обратима.",
+ "PluginDescription": "Ваша Панель управления веб-аналитикой. Настройте свою панель управления, добавляйте новые виджеты, перемещайте их и изменяйте расположение столбцов панели управления. Каждый пользователь может управлять своей собственной панелью управления.",
"RemoveDashboard": "Удалить панель инструментов",
"RemoveDashboardConfirm": "Вы уверены, что хотите удалить эту панель инструментов: '%s'?",
+ "RemoveDefaultDashboardNotPossible": "Панель управления по умолчанию не может быть удалена",
"RenameDashboard": "Переименовать панель инструментов",
"ResetDashboard": "Сбросить панель инструментов",
"ResetDashboardConfirm": "Вы уверены, что хотите обновить сбросить вид панели инструментов к виду по умолчанию?",
diff --git a/plugins/DevicePlugins/lang/fi.json b/plugins/DevicePlugins/lang/fi.json
index 8011625ef1..de4ac1ac6b 100644
--- a/plugins/DevicePlugins/lang/fi.json
+++ b/plugins/DevicePlugins/lang/fi.json
@@ -2,6 +2,8 @@
"DevicePlugins": {
"BrowserWithNoPluginsEnabled": "%1$s ilman liitännäisiä aktivoitu",
"BrowserWithPluginsEnabled": "%1$s liitännäisillä %2$s on aktivoitu",
+ "PluginDescription": "Lista lisäosista joita kävijöiden selaimet tukevat.",
+ "PluginDetectionDoesNotWorkInIE": "Huom. Lisäosien tunnistus ei toimi Internet Explorerissa ennen versiota 11. Tässä raportissa on mukana vain uudet IE:t ja muut selaimet.",
"WidgetPlugins": "Lista lisäosista",
"WidgetPluginsDocumentation": "Tämä raportti näyttää, mitä selainlisäosia vierailijoillasi oli käytössä. Tästä tiedosta voi olla hyötyä, kun joudut valitsemaan, miten tietoa esitetään ja välitetään vierailijoille."
}
diff --git a/plugins/DevicePlugins/lang/ru.json b/plugins/DevicePlugins/lang/ru.json
index b1ae429313..cca6f1f296 100644
--- a/plugins/DevicePlugins/lang/ru.json
+++ b/plugins/DevicePlugins/lang/ru.json
@@ -1,7 +1,9 @@
{
"DevicePlugins": {
"BrowserWithNoPluginsEnabled": "%1$s без активированных плагинов",
+ "BrowserWithPluginsEnabled": "%1$s с плагинами %2$s включен",
"PluginDescription": "Сообщает список плагинов, доступных в браузерах посетителей.",
+ "PluginDetectionDoesNotWorkInIE": "Внимание: Определение плагинов не работает в Internet Explorer до 11. Этот отчет базируется только на не-IE браузерах и новейших версиях IE.",
"WidgetPlugins": "Список плагинов",
"WidgetPluginsDocumentation": "Этот отчет показывается какие плагины посетители используют в своих браузерах. Эта информация может быть важна для того, чтобы посетители смогли видеть ваш контент должным образом."
}
diff --git a/plugins/DevicesDetection/images/browsers/AT.gif b/plugins/DevicesDetection/images/browsers/AT.gif
new file mode 100644
index 0000000000..f1d9824afd
--- /dev/null
+++ b/plugins/DevicesDetection/images/browsers/AT.gif
Binary files differ
diff --git a/plugins/DevicesDetection/images/browsers/KY.gif b/plugins/DevicesDetection/images/browsers/KY.gif
new file mode 100644
index 0000000000..9d14605aca
--- /dev/null
+++ b/plugins/DevicesDetection/images/browsers/KY.gif
Binary files differ
diff --git a/plugins/DevicesDetection/images/browsers/OT.gif b/plugins/DevicesDetection/images/browsers/OT.gif
new file mode 100644
index 0000000000..068d88fa29
--- /dev/null
+++ b/plugins/DevicesDetection/images/browsers/OT.gif
Binary files differ
diff --git a/plugins/DevicesDetection/images/browsers/SP.gif b/plugins/DevicesDetection/images/browsers/SP.gif
new file mode 100644
index 0000000000..f404825e95
--- /dev/null
+++ b/plugins/DevicesDetection/images/browsers/SP.gif
Binary files differ
diff --git a/plugins/DevicesDetection/images/browsers/SS.gif b/plugins/DevicesDetection/images/browsers/SS.gif
new file mode 100644
index 0000000000..5ea7e91ba4
--- /dev/null
+++ b/plugins/DevicesDetection/images/browsers/SS.gif
Binary files differ
diff --git a/plugins/Diagnostics/lang/fi.json b/plugins/Diagnostics/lang/fi.json
new file mode 100644
index 0000000000..28051d0630
--- /dev/null
+++ b/plugins/Diagnostics/lang/fi.json
@@ -0,0 +1,6 @@
+{
+ "Diagnostics": {
+ "ConfigFileTitle": "Asetustiedosto",
+ "Sections": "Osiot"
+ }
+} \ No newline at end of file
diff --git a/plugins/Diagnostics/lang/nb.json b/plugins/Diagnostics/lang/nb.json
new file mode 100644
index 0000000000..47a69e3d91
--- /dev/null
+++ b/plugins/Diagnostics/lang/nb.json
@@ -0,0 +1,6 @@
+{
+ "Diagnostics": {
+ "ConfigFileTitle": "Konfigurasjonsfil",
+ "Sections": "Seksjoner"
+ }
+} \ No newline at end of file
diff --git a/plugins/Diagnostics/lang/ru.json b/plugins/Diagnostics/lang/ru.json
new file mode 100644
index 0000000000..d865637b5e
--- /dev/null
+++ b/plugins/Diagnostics/lang/ru.json
@@ -0,0 +1,8 @@
+{
+ "Diagnostics": {
+ "ConfigFileTitle": "Файл конфигурации",
+ "ConfigFileIntroduction": "Здесь вы можете посмотреть конфигурацию Piwik. Если вы запускаете Piwik в среде с балансированной нагрузкой, страница может быть различной в зависимости от сервера, с которого эта страница загружается. Ряды с разными цветами фона - это измененные значения конфигурации, которые описаны, например в файле %1$s.",
+ "HideUnchanged": "Если вы хотите видеть только измененные значения, вы можете %1$sспрятать все неизмененные значения%2$s.",
+ "Sections": "Разделы"
+ }
+} \ No newline at end of file
diff --git a/plugins/Ecommerce/lang/fi.json b/plugins/Ecommerce/lang/fi.json
new file mode 100644
index 0000000000..6942b9eb21
--- /dev/null
+++ b/plugins/Ecommerce/lang/fi.json
@@ -0,0 +1,8 @@
+{
+ "Ecommerce": {
+ "PluginDescription": "E-kauppa mahdollistaa myyntiin liittyvien toimintojen seuraamisen: tuotteiden lisäämisen ostoskoriin ja ostosten tekemisen. Myös tuotteiden ja tuotekategorioiden katselu, ja hylätyt ostoskorit seurataan.",
+ "Sales": "Myynnit",
+ "SalesBy": "Myynnit %s:n mukaan",
+ "SalesAdjective": "Myynnit %s"
+ }
+} \ No newline at end of file
diff --git a/plugins/Events/Events.php b/plugins/Events/Events.php
index 06a7b5b081..15c49e87f1 100644
--- a/plugins/Events/Events.php
+++ b/plugins/Events/Events.php
@@ -144,7 +144,8 @@ class Events extends \Piwik\Plugin
$secondaryDimension = $this->getSecondaryDimensionFromRequest();
$view->config->subtable_controller_action = API::getInstance()->getActionToLoadSubtables($apiMethod, $secondaryDimension);
- if (Common::getRequestVar('pivotBy', false) === false) {
+ $pivotBy = Common::getRequestVar('pivotBy', false);
+ if (empty($pivotBy)) {
$view->config->columns_to_display = array('label', 'nb_events', 'sum_event_value');
}
diff --git a/plugins/Events/lang/ru.json b/plugins/Events/lang/ru.json
index 242b414fa2..3a8c5c6656 100644
--- a/plugins/Events/lang/ru.json
+++ b/plugins/Events/lang/ru.json
@@ -1,5 +1,6 @@
{
"Events": {
+ "PluginDescription": "Отслеживайте события и получайте отчеты об активности своих посетителей.",
"AvgEventValue": "Среднее значение события: %s",
"AvgValue": "Среднее значение",
"AvgValueDocumentation": "Среднее всех значений для этого события",
@@ -19,6 +20,7 @@
"MaxValueDocumentation": "Максимальное значения для этого события",
"MinValue": "Минимальное значение",
"MinValueDocumentation": "Минимальное значения для этого события",
+ "SecondaryDimension": "Втроричное измерение %s.",
"SwitchToSecondaryDimension": "Переключиться на %s",
"TopEvents": "Топ событий",
"TotalEvents": "Всего событий",
diff --git a/plugins/Feedback/lang/fi.json b/plugins/Feedback/lang/fi.json
index 6ab6ec2a91..f665cbf2da 100644
--- a/plugins/Feedback/lang/fi.json
+++ b/plugins/Feedback/lang/fi.json
@@ -10,6 +10,12 @@
"RateFeatureTitle": "Pidätkö ominaisuudesta '%s'? Jätä arvostelu ja kommentti",
"SendFeedback": "Lähetä palaute",
"ThankYou": "Kiitos että autat parantamaan Piwikiä!",
- "TopLinkTooltip": "Kerro meille mitä ajattelet, tai osta tukipalveluita (englanniksi)."
+ "TopLinkTooltip": "Kerro meille mitä ajattelet, tai osta tukipalveluita (englanniksi).",
+ "CommunityHelp": "Yhteisön apu",
+ "ProfessionalHelp": "Ammattilaisapu",
+ "PiwikProReviewPiwikSetup": "Piwik-asennuksesi arviointi",
+ "PiwikProPhoneEmailSupport": "Puhelin- ja sähköpostituki",
+ "PiwikProPremiumFeatures": "Premium-ominaisuudet",
+ "ContactUs": "Ota yhteyttä"
}
} \ No newline at end of file
diff --git a/plugins/Feedback/lang/ru.json b/plugins/Feedback/lang/ru.json
index e04996be0b..941b17f2d9 100644
--- a/plugins/Feedback/lang/ru.json
+++ b/plugins/Feedback/lang/ru.json
@@ -18,6 +18,7 @@
"ViewUserGuides": "Узнайте, как настроить Piwik и эффективно анализировать Ваши данные, используя %1$s руководства пользователя%2$s",
"CommunityHelp": "Помощь сообщества",
"ProfessionalHelp": "Помощь профессионала",
+ "PiwikProIntro": "Piwik PRO предоставляет экспертную поддержку и консультирование клиентам, которые размещают Piwik в своей собственной инфраструктуре.",
"PiwikProOfferIntro": "Наше предложение включает",
"PiwikProReviewPiwikSetup": "Просмотр Вашей установки Piwik",
"PiwikProOptimizationMaintenance": "Услуги оптимизации и обслуживания Piwik",
@@ -26,6 +27,7 @@
"PiwikProPremiumFeatures": "Премиальные возможности",
"PiwikProCustomDevelopment": "Услуги разработки",
"PiwikProAnalystConsulting": "Услуги аналитика-консультанта",
- "ContactUs": "Свяжитесь с нами"
+ "ContactUs": "Свяжитесь с нами",
+ "VisitTheForums": "Посетите %1$s Форумы%2$s и получите помощь от сообщества пользователей Piwik"
}
} \ No newline at end of file
diff --git a/plugins/Goals/API.php b/plugins/Goals/API.php
index 89af85f9c0..bb7da8cbae 100644
--- a/plugins/Goals/API.php
+++ b/plugins/Goals/API.php
@@ -184,6 +184,7 @@ class API extends \Piwik\Plugin\API
if ($patternType == 'exact'
&& substr($pattern, 0, 4) != 'http'
&& substr($matchAttribute, 0, 6) != 'event_'
+ && $matchAttribute != 'title'
) {
throw new Exception(Piwik::translate('Goals_ExceptionInvalidMatchingString', array("http:// or https://", "http://www.yourwebsite.com/newsletter/subscribed.html")));
}
diff --git a/plugins/Goals/Pages.php b/plugins/Goals/Pages.php
index 72db6cc21b..50e3f63e37 100644
--- a/plugins/Goals/Pages.php
+++ b/plugins/Goals/Pages.php
@@ -8,12 +8,9 @@
*/
namespace Piwik\Plugins\Goals;
-
-use Piwik\API\Request;
use Piwik\Cache;
use Piwik\Common;
use Piwik\Piwik;
-use Piwik\Plugin\Report;
use Piwik\Plugins\CoreVisualizations\Visualizations\JqplotGraph\Evolution;
use Piwik\Plugins\CoreVisualizations\Visualizations\Sparklines;
use Piwik\Plugin\Reports;
diff --git a/plugins/Goals/lang/el.json b/plugins/Goals/lang/el.json
index 612438258b..b2cce6c204 100644
--- a/plugins/Goals/lang/el.json
+++ b/plugins/Goals/lang/el.json
@@ -66,7 +66,7 @@
"GoalsOverview": "Επισκόπηση στόχων",
"GoalsOverviewDocumentation": "Αυτό είναι μια επισκόπηση των μετατροπών των στόχων σας. Αρχικά, το διάγραμμα δείχνει το άθροισμα όλων των μετατροπών. %s Κάτω από το διάγραμμα, μπορείτε να αναφορές μετατροπής για κάθε έναν από τους στόχους. Τα μικροδιαγράμματα μπορούν να μεγεθυνθούν πατώντας επάνω τους.",
"GoalX": "Στόχος %s",
- "HelpOneConversionPerVisit": "Αν μια Σελίδα ταιριάζει, αυτός ο Στόχος ανανεώνεται ή προβάλεται περισσόερες φορές ανά Επίσκεψη και ο Στόχος θα καταγράφετε μόνο την πρώτη φορά που φορτώθηκε η σελίδα κατά την επίσκεψη.",
+ "HelpOneConversionPerVisit": "Αν μια Σελίδα ταιριάζει, αυτός ο Στόχος ανανεώνεται ή προβάλλεται περισσότερες φορές ανά Επίσκεψη και ο Στόχος θα καταγράφεται μόνο την πρώτη φορά που φορτώθηκε η σελίδα κατά την επίσκεψη.",
"IsExactly": "είναι ακριβώς %s",
"LearnMoreAboutGoalTrackingDocumentation": "Δείτε περισσότερα για την %1$sΠαρακολούθηση των Στόχων στο Piwik%2$s στην τεκμηρίωση για το χρήστη.",
"LeftInCart": "%s απομένουν στο καλάθι",
diff --git a/plugins/Goals/lang/en.json b/plugins/Goals/lang/en.json
index d5b221a3fc..2b9a79ea32 100644
--- a/plugins/Goals/lang/en.json
+++ b/plugins/Goals/lang/en.json
@@ -78,6 +78,7 @@
"NewGoalIntro": "Goal Conversion tracking is one of the most efficient ways to measure and improve your business objectives.",
"NewVisitorsConversionRateIs": "New visitors conversion rate is %s",
"NoGoalsNeedAccess": "Only an Administrator or a user with Super User access can manage Goals for a given website. Please ask your Piwik administrator to set up a Goal for your website. <br>Tracking Goals is a great way to help understand and maximize your website performance!",
+ "NoConversionsNoReportsMessage": "Reports are not displayed because there is no conversion data for the selected goal and period.",
"NeedAccess": "Only an Administrator or a user with Super User access can manage Goals for a given website.",
"Optional": "(optional)",
"OverallConversionRate": "overall conversion rate (visits with a completed goal)",
diff --git a/plugins/Goals/lang/lt.json b/plugins/Goals/lang/lt.json
index 10bcee0e28..c32adb2a5b 100644
--- a/plugins/Goals/lang/lt.json
+++ b/plugins/Goals/lang/lt.json
@@ -6,7 +6,7 @@
"BestCountries": "Jūsų geriausios konversijos šalys:",
"BestKeywords": "Jū9sų geriausi konversijos raktažodžiai:",
"BestReferrers": "Jūsų geriausios konversijos svetainės:",
- "CaseSensitive": "Linksnių atitikimas",
+ "CaseSensitive": "Raidžių dydžio sutapimas",
"ClickOutlink": "Paspauskite ant nuorodos į išorinį puslapį",
"ColumnConversions": "Konversijos",
"Contains": "turi %s",
diff --git a/plugins/Goals/lang/nb.json b/plugins/Goals/lang/nb.json
index 415c58bff0..62627850be 100644
--- a/plugins/Goals/lang/nb.json
+++ b/plugins/Goals/lang/nb.json
@@ -16,6 +16,7 @@
"ColumnConversions": "Konvertering",
"ColumnConversionsDocumentation": "Antall konverteringer for %s.",
"Contains": "inneholder %s",
+ "ConversionRate": "%s konverteringsrate",
"Conversions": "%s konverteringer",
"DaysToConv": "Dager til konvertering",
"Details": "Måldetaljer",
diff --git a/plugins/Goals/lang/ru.json b/plugins/Goals/lang/ru.json
index 52b761496a..7a3575049a 100644
--- a/plugins/Goals/lang/ru.json
+++ b/plugins/Goals/lang/ru.json
@@ -13,6 +13,7 @@
"CancelAndReturnToGoals": "Отмена и %1$sвозврат к списку целей%2$s",
"CategoryTextGeneral_Visitors": "Местоположение пользователя",
"CategoryTextReferrers_Referrers": "Источники",
+ "CategoryTextVisitsSummary_VisitsSummary": "Свойство пользователя",
"CategoryTextGeneral_Visit": "Вовлеченность",
"ChooseGoal": "Выберите цель",
"ClickOutlink": "Переходят по ссылке на внешний сайт",
@@ -76,6 +77,8 @@
"NewGoalIntro": "Отслеживание достигнутых переходов является одним из наиболее эффективных способов измерить и улучшить свои бизнес-задачи.",
"NewVisitorsConversionRateIs": "Коэффициент новых посетителей %s",
"NoGoalsNeedAccess": "Только администратор или пользователь с правами суперпользователя может добавлять цели для данного сайта. Пожалуйста, обратитесь к администратору Piwik, чтобы создать цели для вашего сайта.<br>Отслеживания целей является отличным способом, чтобы помочь понять как увеличить и максимизировать эффективность веб-сайта!",
+ "NoConversionsNoReportsMessage": "Отчеты не показаны, потому что данные преобразования для выбранных цели и периода отсутсвуют.",
+ "NeedAccess": "Только Администратор или пользователь с доступом Суперпользователя может управлять целями для данного вебсайта.",
"Optional": "(необязательно)",
"OverallConversionRate": "%s общий коэффициент конверсий (переходы с выполненной целью)",
"OverallRevenue": "%s общая прибыль",
@@ -92,6 +95,8 @@
"UpdateGoal": "Обновить цель",
"URL": "URL выглядит следующим образом:",
"ViewAndEditGoals": "Просмотреть и редактировать цели",
+ "GoalsBy": "Цели по %s",
+ "GoalsAdjective": "Цели %s",
"VisitPageTitle": "Посещают данный Заголовок страницы",
"VisitsUntilConv": "Сконвертированные посещения",
"VisitUrl": "Посещают данный URL (страницу или группу страниц)",
diff --git a/plugins/Goals/tests/Integration/APITest.php b/plugins/Goals/tests/Integration/APITest.php
index 913bebf0a6..7dcb79eef5 100644
--- a/plugins/Goals/tests/Integration/APITest.php
+++ b/plugins/Goals/tests/Integration/APITest.php
@@ -62,6 +62,13 @@ class APITest extends IntegrationTestCase
$this->assertGoal($idGoal, 'MyName', 'url', 'http://www.test.de', 'exact', 1, 50, 1);
}
+ public function test_addGoal_ShouldSucceed_IfExactPageTitle()
+ {
+ $idGoal = $this->api->addGoal($this->idSite, 'MyName', 'title', 'normal title', 'exact', true, 50, true);
+
+ $this->assertGoal($idGoal, 'MyName', 'title', 'normal title', 'exact', 1, 50, 1);
+ }
+
/**
* @expectedException \Exception
* @expectedExceptionMessage Goals_ExceptionInvalidMatchingString
diff --git a/plugins/ImageGraph/lang/fi.json b/plugins/ImageGraph/lang/fi.json
index 5dac1b5f20..06af13adfe 100644
--- a/plugins/ImageGraph/lang/fi.json
+++ b/plugins/ImageGraph/lang/fi.json
@@ -1,5 +1,6 @@
{
"ImageGraph": {
- "ColumnOrdinateMissing": "Kolumnia '%1$s' ei löydetty tässä raportissa. Kokeile mitä tahansa %2$s"
+ "ColumnOrdinateMissing": "Kolumnia '%1$s' ei löydetty tässä raportissa. Kokeile mitä tahansa %2$s",
+ "PluginDescription": "Luo kauniita staattisia PNG-kuvaajia mistä tahansa raportista."
}
} \ No newline at end of file
diff --git a/plugins/Installation/ServerFilesGenerator.php b/plugins/Installation/ServerFilesGenerator.php
index fcd780523d..927f403ccb 100644
--- a/plugins/Installation/ServerFilesGenerator.php
+++ b/plugins/Installation/ServerFilesGenerator.php
@@ -15,12 +15,10 @@ class ServerFilesGenerator
{
/**
* Generate Apache .htaccess files to restrict access
+ * .htaccess files are created on all webservers even Nginx, as sometimes Nginx knows how to handle .htaccess files
*/
public static function createHtAccessFiles()
{
- if (!SettingsServer::isApache()) {
- return;
- }
$denyAll = self::getDenyAllHtaccessContent();
$allow = self::getAllowHtaccessContent();
@@ -39,7 +37,7 @@ class ServerFilesGenerator
"</IfModule>\n\n" .
"# Allow to serve static files which are safe\n" .
- "<Files ~ \"\\.(gif|ico|jpg|png|svg|js|css|htm|html|swf|mp3|mp4|wav|ogg|avi|ttf)$\">\n" .
+ "<Files ~ \"\\.(gif|ico|jpg|png|svg|js|css|htm|html|swf|mp3|mp4|wav|ogg|avi|ttf|eot)$\">\n" .
$allow . "\n" .
"</Files>\n";
@@ -76,17 +74,17 @@ class ServerFilesGenerator
*
* Apache-specific; for IIS @see web.config
*
+ * .htaccess files are created on all webservers even Nginx, as sometimes Nginx knows how to handle .htaccess files
+ *
* @param string $path without trailing slash
* @param bool $overwrite whether to overwrite an existing file or not
* @param string $content
*/
protected static function createHtAccess($path, $overwrite = true, $content)
{
- if (SettingsServer::isApache()) {
- $file = $path . '/.htaccess';
- if ($overwrite || !file_exists($file)) {
- @file_put_contents($file, $content);
- }
+ $file = $path . '/.htaccess';
+ if ($overwrite || !file_exists($file)) {
+ @file_put_contents($file, $content);
}
}
diff --git a/plugins/Installation/lang/fi.json b/plugins/Installation/lang/fi.json
index 0a3a2579dd..25a3b390af 100644
--- a/plugins/Installation/lang/fi.json
+++ b/plugins/Installation/lang/fi.json
@@ -15,6 +15,7 @@
"DatabaseSetupLogin": "käyttäjätunnus",
"DatabaseSetupServer": "tietokantapalvelin",
"DatabaseSetupTablePrefix": "taulujen etuliite",
+ "Email": "Sähköposti",
"Extension": "lisäosa",
"Filesystem": "Tiedostojärjestelmä",
"GetInvolved": "Jos pidät näkemästäsi, myös sinä voit %1$sosallistua%2$s.",
@@ -24,6 +25,7 @@
"InstallationStatus": "Asennuksen tila",
"InsufficientPrivilegesHelp": "Voit lisätä nämä oikeudet esim. phpMyAdminilla tai ajamalla oikeat SQL-kyselyt. Jos et tiedä miten tehdä nämä asiat, pyydä järjestelmän ylläpitäjää säätämään oikeudet oikein.",
"InsufficientPrivilegesMain": "Joko tietokantaa ei ole olemassa (eikä sitä voitu luoda), tai tällä käyttäjällä ei ole tarvittavia oikeuksia. Tietokannan käyttäjällä täytyy olla seuraavat oikeudet: %s",
+ "InvalidStateError": "Virhe: Piwik on jo asennettu. %1$s Mene takaisin %2$s Piwikiin%3$s.",
"JsTagArchivingHelp1": "Kohtalaisen ja korkean liikenteen verkkosivuille on tiettyjä optimointeja, jotka tulisi tehdä, jotta Piwik voi toimia nopeammin (kuten %1$sautomaattisen arkistoinnin asettaminen%2$s).",
"JSTracking_EndNote": "Huom: Asennuksen jälkeen voit luoda omia seurantakoodeja ylläpitosivun osastolla %1$sSeurantakoodi%2$s",
"JSTracking_Intro": "Voidaksesi seurata liikennettä Piwikin avulla, sinun tulee lisätä ekstrakoodi jokaiselle verkkosivullesi.",
@@ -36,9 +38,14 @@
"NfsFilesystemWarningSuffixInstall": "Tiedostopohjaisten sessioiden käyttäminen NFS:ssä on todella hidasta, joten Piwik käyttää tietokantasessioita. Jos sinulla on monia samanaikaisia ohjauspaneelin käyttäjiä, sinun tarvitsee ehkä lisätä tietokantaserverin käyttäjäyhteyksien maksimimäärää.",
"NoConfigFound": "Piwikin asetustiedostoa ei löydy ja yrität siirtyä Piwikin sivuille.<br \/><b>  » Voit <a href='index.php'>asentaa Piwikin nyt<\/a><\/b><br \/><small>Jos asensit Piwikin aikaisemmin ja tietokannassa on jo tietoja, älä murehdi, tietoja ei hävitetä.<\/small>",
"Optional": "Optionaalinen",
+ "Password": "Salasana",
"PasswordDoNotMatch": "salasanat eivät täsmää",
+ "PasswordRepeat": "Salasana (uudelleen)",
"PercentDone": "%s %% valmiina",
+ "PiwikProAdTitle": "Edistynyt analytiikka ja palvelut",
"PleaseFixTheFollowingErrors": "Korjaa seuraavat virheet",
+ "DefaultSettings": "Oletusasetukset",
+ "DefaultSettingsHelp": "Piwikissä on oletusasetukset. Voit muuttaa asetuksia nyt tai myöhemmin hallintasivulta.",
"Requirements": "Piwikin vaatimukset",
"RestartWebServer": "Käynnistä web-palvelimesi uudelleen näiden muutosten jälkeen.",
"ReusingTables": "Taulukoiden uudelleenkäyttö",
@@ -46,15 +53,19 @@
"SeeBelowForMoreInfo": "Katso alempaa lisätietoja.",
"SetupWebsite": "Lisää verkkosivu",
"SetupWebsiteError": "Virhe verkkosivun lisäämisessä",
+ "SetupWebSiteName": "Verkkosivun nimi",
"SetupWebsiteSetupSuccess": "Sivu %s luotiin onnistuneesti!",
+ "SetupWebSiteURL": "Verkkosivun osoite",
"SiteSetup": "Luo ensimmäinen seurattava verkkosivu:",
"SiteSetupFootnote": "Huom: kun asennus on valmis, voit lisätä lisää verkkosivuja!",
"SuperUser": "Pääkäyttäjä",
+ "SuperUserLogin": "Pääkäyttäjän kirjautuminen",
"SuperUserSetupError": "Superkäyttäjää lisätessä tapahtui virhe.",
"SuperUserSetupSuccess": "Pääkäyttäjän luominen onnistui!",
"SystemCheck": "Järjestelmän asetukset",
"SystemCheckAutoUpdateHelp": "Huomioi: Piwikin yhden klikkauksen päivitys vaatii kirjoitusoikeudet Piwikin kansioon ja kansion kaikkeen sisältöön.",
"SystemCheckCreateFunctionHelp": "Piwik käyttää anonyymejä funktioita takaisinkutsuihin.",
+ "SystemCheckDatabaseExtensions": "MySQL-lisäosat",
"SystemCheckDatabaseHelp": "Piwik vaatii joko mysqli-lisäosan tai sekä PDO- että pdo_mysql-lisäosat..",
"SystemCheckDebugBacktraceHelp": "View::factory ei voi luoda näkymää kutsuvalle moduulille.",
"SystemCheckError": "Tapahtui virhe - täytyy korjata ennen jatkamista",
@@ -62,6 +73,7 @@
"SystemCheckExtensions": "Muut vaaditut lisäosat",
"SystemCheckFileIntegrity": "Tiedoston eheys",
"SystemCheckFunctions": "Vaaditut funktiot",
+ "SystemCheckFunctionHelp": "Sinun täytyy ottaa käyttöön tämä sisäänrakennettu funktio.",
"SystemCheckGDFreeType": "GD > 2.x + Freetype (grafiikka)",
"SystemCheckGDHelp": "Pienet graafit eivät toimi.",
"SystemCheckGlobHelp": "Tämä sisäänrakennettu toiminnallisuus on poistettu käytöstä palvelimellasi. Piwik yrittää emuloida toimintoa, mutta saattaa törmätä uusiin turvallisuusrajoituksiin. Suorituskyky heikkenee.",
@@ -99,6 +111,7 @@
"SystemCheckZlibHelp": "PHP pitää olla asennettuna zlib-lisäosan kanssa, --with-zlib.",
"SystemCheckCronArchiveProcess": "Arkistointityö",
"SystemCheckCronArchiveProcessCLI": "Prosessien hallinta komentoriviltä",
+ "SystemCheckUpdateHttps": "Päivitä HTTPS:n yli",
"NotSupported": "ei tuettu",
"Tables": "Luodaan taulut",
"TablesCreatedSuccess": "Taulut luotu onnistuneesti!",
@@ -109,6 +122,7 @@
"TablesUpdatedSuccess": "Tietokanta on päivitetty onnistuneesti: %1$s > %2$s!",
"TablesWarningHelp": "Valitse joko nykyisten taulujen käyttö tai luo taulut uudelleen (vanhat tiedot menetetään).",
"TablesWithSameNamesFound": "Osalla %1$s tauluista tietokannassa %2$s on sama nimi kuin tauluilla, joita Piwik yrittää luoda.",
+ "Timezone": "Verkkosivun aikavyöhyke",
"WeHopeYouWillEnjoyPiwik": "Toivomme että nautit Piwikin käytöstä yhtä paljon kuin me nautimme sen luomisesta!",
"Welcome": "Tervetuloa!",
"WelcomeHelp": "<p>Piwik on vapaan lähdekoodin verkkosivujen analysointityökalu, joka tekee kävijöiden tietojen keräämisen ja analysoinnin helpoksi.<\/p><p>Tämä prosessi on jaettu %s helppoon osaan ja vie aikaa noin viisi minuuttia.<\/p>",
diff --git a/plugins/Live/lang/fi.json b/plugins/Live/lang/fi.json
index 505ef58e1b..a273a5d133 100644
--- a/plugins/Live/lang/fi.json
+++ b/plugins/Live/lang/fi.json
@@ -31,6 +31,8 @@
"VisitorProfile": "Kävijäprofiili",
"VisitorsInRealTime": "Reaaliaikaiset kävijätiedot",
"VisitorsLastVisit": "Tämän kävijän edellinen käynti oli %s päivää sitten.",
- "VisitsFrom": "%1$s%2$s käyntiä%3$s lähteestä"
+ "VisitsFrom": "%1$s%2$s käyntiä%3$s lähteestä",
+ "OnClickPause": "%s on käynnissä. Pysäytä klikkaamalla.",
+ "OnClickStart": "%s on pysäytetty. Aloita klikkaamalla."
}
} \ No newline at end of file
diff --git a/plugins/Live/lang/nb.json b/plugins/Live/lang/nb.json
index f70474f6c6..5ac8a3275c 100644
--- a/plugins/Live/lang/nb.json
+++ b/plugins/Live/lang/nb.json
@@ -23,6 +23,7 @@
"VisitorProfile": "Besøksprofil",
"VisitorsInRealTime": "Besøkende i sanntid",
"VisitsFrom": "%1$s%2$s besøk%3$s fra",
+ "VisitSummaryWithActionDetails": "Brukte totalt %1$s%2$s på nettsiden%3$s og utførte %4$s handlinger%5$s (%6$s) over %7$s besøk%8$s.",
"OnClickPause": "%s er startet. Klikk for å sette på pause.",
"OnClickStart": "%s er stoppet. Klikk for å starte."
}
diff --git a/plugins/Live/stylesheets/live.less b/plugins/Live/stylesheets/live.less
index 7bbdde4044..bf71c90c2c 100644
--- a/plugins/Live/stylesheets/live.less
+++ b/plugins/Live/stylesheets/live.less
@@ -119,6 +119,10 @@ ol.visitorLog li {
margin-right: 4px;
}
+.visitorReferrer .visitorRank {
+ display: inline-block;
+}
+
.visitorRank {
border: 1px solid #D8D8D8;
color: #474747;
diff --git a/plugins/Live/templates/_dataTableViz_visitorLog.twig b/plugins/Live/templates/_dataTableViz_visitorLog.twig
index 5ae56c9570..37c1cac60f 100644
--- a/plugins/Live/templates/_dataTableViz_visitorLog.twig
+++ b/plugins/Live/templates/_dataTableViz_visitorLog.twig
@@ -140,8 +140,11 @@ GPS (lat/long): {{ visitor.getColumn('latitude') }},{{ visitor.getColumn('longit
{% if visitor.getColumn('provider') %}
<br/>
{{ 'Provider_ColumnProvider'|translate }}:
- <a href="{{ visitor.getColumn('providerUrl') }}" rel="noreferrer" target="_blank" class="visitorLogTooltip" title="{{ visitor.getColumn('providerName') }} {{ visitor.getColumn('providerUrl') }}" style="text-decoration:underline;">
- {{ visitor.getColumn('providerName') }}</a>
+ {% if visitor.getColumn('providerUrl') %}
+ <a href="{{ visitor.getColumn('providerUrl') }}" rel="noreferrer" target="_blank" class="visitorLogTooltip" title="{{ visitor.getColumn('providerName') }} {{ visitor.getColumn('providerUrl') }}" style="text-decoration:underline;">
+ {% endif -%}
+ {{ visitor.getColumn('providerName') }}
+ {%- if visitor.getColumn('providerUrl') %}</a>{% endif %}
{% endif %}
{% if visitor.getColumn('visitorTypeIcon') or visitor.getColumn('countryFlag') %}
<br/>
diff --git a/plugins/Live/templates/getLastVisitsStart.twig b/plugins/Live/templates/getLastVisitsStart.twig
index 59a4a1fb9d..064a3545ae 100644
--- a/plugins/Live/templates/getLastVisitsStart.twig
+++ b/plugins/Live/templates/getLastVisitsStart.twig
@@ -19,23 +19,25 @@
{% endif %}
<br />
- {% if visitor.countryFlag is defined %}&nbsp;<img src="{{ visitor.countryFlag }}" title="{{ visitor.location }}, {{ 'Provider_ColumnProvider'|translate }} {% if visitor.providerName is defined %}{{ visitor.providerName }}{% endif %}"/>{% endif %}
- {% if visitor.browserIcon is defined %}&nbsp;<img src="{{ visitor.browserIcon }}" title="{{ visitor.browser }}{% if visitor.plugins is defined %}, {{ 'General_Plugins'|translate }}: {{ visitor.plugins }}{% endif %}"/>{% endif %}
+ {% if visitor.countryFlag is defined %}&nbsp;<img src="{{ visitor.countryFlag }}" title="{{ visitor.location|e('html_attr') }}, {{ 'Provider_ColumnProvider'|translate }} {% if visitor.providerName is defined %}{{ visitor.providerName }}{% endif %}"/>{% endif %}
+ {% if visitor.browserIcon is defined %}&nbsp;<img src="{{ visitor.browserIcon }}" title="{{ visitor.browser|e('html_attr') }}{% if visitor.plugins is defined %}, {{ 'General_Plugins'|translate }}: {{ visitor.plugins }}{% endif %}"/>{% endif %}
{% if visitor.operatingSystemIcon is defined %}&nbsp;<img src="{{ visitor.operatingSystemIcon }}" title="{{ visitor.operatingSystem }}{% if visitor.resolution is defined %}, {{ visitor.resolution }}{% endif %}"/>{% endif %}
&nbsp;
{% if visitor.visitConverted %}
- <span title="{{ 'General_VisitConvertedNGoals'|translate(visitor.goalConversions) }}" class='visitorRank'>
+ <span title="{{ 'General_VisitConvertedNGoals'|translate(visitor.goalConversions) }}"
+ class='visitorRank'>
<img src="{{ visitor.visitConvertedIcon }}" />
<span class='hash'>#</span>
{{ visitor.goalConversions }}
{% if visitor.visitEcommerceStatusIcon %}
- <img src="{{ visitor.visitEcommerceStatusIcon }}" title="{{ visitor.visitEcommerceStatus }}"/>
+ <img src="{{ visitor.visitEcommerceStatusIcon }}" title="{{ visitor.visitEcommerceStatus|e('html_attr') }}"/>
{% endif %}
</span>
{% endif %}
{% if visitor.visitorTypeIcon %}
- <img src="{{ visitor.visitorTypeIcon }}" title="{{ 'General_ReturningVisitor'|translate }}"/>
+ <img src="{{ visitor.visitorTypeIcon }}"
+ title="{{ 'General_ReturningVisitor'|translate }}"/>
{% endif %}
{% if visitor.visitIp %} <span title="{% if visitor.visitorId is not empty %}{{ 'General_VisitorID'|translate }}: {{ visitor.visitorId }}{% endif %}">
@@ -46,33 +48,45 @@
{% if visitor.referrerType is defined and visitor.referrerType != 'direct' %}
{{ 'General_FromReferrer'|translate }}
{% if visitor.referrerUrl is not empty %}
- <a href="{{ visitor.referrerUrl }}" rel="noreferrer" target="_blank">
+ <a rel="noreferrer" target="_blank"
+ href="{{ visitor.referrerUrl|e('html_attr') }}">
{% endif %}
+
{% if visitor.searchEngineIcon is defined %}
<img src="{{ visitor.searchEngineIcon }}" />
{% endif %}
+
{{ visitor.referrerName }}
+
{% if visitor.referrerUrl is not empty %}
</a>
{% endif %}
+
{% if visitor.referrerKeyword is not empty %} - "{{ visitor.referrerKeyword }}"{% endif %}
+
{% set keyword %}{{ visitor.referrerKeyword }}{% endset %}
{% set searchName %}{{ visitor.referrerName }}{% endset %}
{% set position %}#{{ visitor.referrerKeywordPosition}}{% endset %}
+
{% if visitor.referrerKeywordPosition is not empty %}
- <span title='{{ 'Live_KeywordRankedOnSearchResultForThisVisitor'|translate(keyword,position,searchName) }}' class='visitorRank'>
+ <span title='{{ 'Live_KeywordRankedOnSearchResultForThisVisitor'|translate(keyword,position,searchName) }}'
+ class='visitorRank'>
<span class='hash'>#</span> {{ visitor.referrerKeywordPosition }}
</span>
{% endif %}
+
{% elseif visitor.referrerType is defined %}
{{ 'Referrers_DirectEntry'|translate }}
{% endif %}
</span></div>
- <div id="{{ visitor.idVisit }}_actions" class="settings">
- <span class="pagesTitle" title="{{ visitor.actionDetails|length }} {{ 'General_Actions'|translate }}">{{ 'General_Actions'|translate }}:</span>&nbsp;
+ <div id="{{ visitor.idVisit|e('html_attr') }}_actions" class="settings">
+ <span class="pagesTitle"
+ title="{{ visitor.actionDetails|length }} {{ 'General_Actions'|translate }}"
+ >{{ 'General_Actions'|translate }}:</span>&nbsp;
{% set col = 0 %}
{% for action in visitor.actionDetails %}
{% if loop.index <= maxPagesDisplayedByVisitor %}
+
{% if action.type == 'ecommerceOrder' or action.type == 'ecommerceAbandonedCart' %}
{% set title %}
{%- if action.type == 'ecommerceOrder' %}
@@ -104,7 +118,9 @@
{{ 'General_ColumnRevenue'|translate }}: {{ action.revenue|money(idSite)|raw }}
{% endif %}
</span>
+
{% else %}
+
{% set col = col + 1 %}
{% if col >= 9 %}
{% set col = 0 %}
@@ -136,6 +152,7 @@
{% endif %}
{% endif %}
{% endfor %}
+
{% if visitor.actionDetails|length > maxPagesDisplayedByVisitor %}
<em>({{ 'Live_MorePagesNotDisplayed'|translate }})</em>
{% endif %}
diff --git a/plugins/Live/tests/Integration/ModelTest.php b/plugins/Live/tests/Integration/ModelTest.php
index 355f1fb777..828d3865f0 100644
--- a/plugins/Live/tests/Integration/ModelTest.php
+++ b/plugins/Live/tests/Integration/ModelTest.php
@@ -53,7 +53,7 @@ class ModelTest extends IntegrationTestCase
AND log_visit.visit_last_action_time >= ?
AND log_visit.visit_last_action_time <= ?
ORDER BY idsite, visit_last_action_time DESC
- LIMIT 100
+ LIMIT 0, 100
) AS sub
GROUP BY sub.idvisit
ORDER BY sub.visit_last_action_time DESC
@@ -93,7 +93,7 @@ class ModelTest extends IntegrationTestCase
AND log_visit.visit_last_action_time >= ?
AND log_visit.visit_last_action_time <= ?
ORDER BY visit_last_action_time DESC
- LIMIT 100
+ LIMIT 0, 100
) AS sub
GROUP BY sub.idvisit
ORDER BY sub.visit_last_action_time DESC
@@ -154,7 +154,7 @@ class ModelTest extends IntegrationTestCase
$period = 'month',
$date = '2010-01-01',
$segment = 'customVariablePageName1==Test',
- $offset = 0,
+ $offset = 10,
$limit = 100,
$visitorId = 'abc',
$minTimestamp = false,
@@ -175,10 +175,9 @@ class ModelTest extends IntegrationTestCase
AND log_visit.visit_last_action_time <= ? )
AND ( log_link_visit_action.custom_var_k1 = ? )
ORDER BY idsite, visit_last_action_time DESC
- LIMIT 100
+ LIMIT 10, 100
) AS log_inner
ORDER BY idsite, visit_last_action_time DESC
- LIMIT 100
) AS sub
GROUP BY sub.idvisit
ORDER BY sub.visit_last_action_time DESC
diff --git a/plugins/Login/lang/en.json b/plugins/Login/lang/en.json
index 185de64c25..89a06ab7e0 100644
--- a/plugins/Login/lang/en.json
+++ b/plugins/Login/lang/en.json
@@ -12,7 +12,7 @@
"LoginOrEmail": "Username or E-mail",
"LoginPasswordNotCorrect": "Wrong Username and password combination.",
"LostYourPassword": "Lost your password?",
- "MailPasswordChangeBody": "Hi %1$s,\n\nA password reset request was received from %2$s. To confirm this password change so you can login with your new credentials, visit the following link:\n\n%3$s\n\nAttention: Changing the password will also change your token_auth. You can look up your new token_auth on your settings page.\n\nIf you are using your API token in any external applications or for archiving, make sure to update the token as requests to the API will fail otherwise.\n\nNote: this token will expire in 24 hours.\n\nAnd thank you for using Piwik!",
+ "MailPasswordChangeBody": "Hi %1$s,\n\nA password reset request was received from %2$s. To confirm this password change so you can login with your new credentials, visit the following link:\n\n%3$s\n\nAttention: Changing the password will also change your token_auth. You can look up your new token_auth on your settings page.\n\nIf you are using your API token_auth in any external applications or for archiving, make sure to update the token_auth as requests to the API will fail otherwise.\n\nNote: this link will expire in 24 hours.\n\nAnd thank you for using Piwik!",
"MailTopicPasswordChange": "Confirm Password Change",
"PasswordChanged": "Your password has been changed.",
"PasswordRepeat": "Password (repeat)",
diff --git a/plugins/LoginHttpAuth b/plugins/LoginHttpAuth
new file mode 160000
+Subproject 92978e17acd032cfcdfc1f4be4c40947b54b91e
diff --git a/plugins/MobileAppMeasurable/lang/fi.json b/plugins/MobileAppMeasurable/lang/fi.json
new file mode 100644
index 0000000000..8300bfb476
--- /dev/null
+++ b/plugins/MobileAppMeasurable/lang/fi.json
@@ -0,0 +1,7 @@
+{
+ "MobileAppMeasurable": {
+ "MobileApp": "Mobiili-app",
+ "MobileApps": "Mobiili-appit",
+ "MobileAppDescription": "Natiiviohjelmat iOS:llä, Androidilla tai millä tahansa muulla mobiilikäyttöjärjestelmällä"
+ }
+} \ No newline at end of file
diff --git a/plugins/PrivacyManager/lang/fi.json b/plugins/PrivacyManager/lang/fi.json
index bc8d0c0085..af20fe9d0c 100644
--- a/plugins/PrivacyManager/lang/fi.json
+++ b/plugins/PrivacyManager/lang/fi.json
@@ -2,6 +2,7 @@
"PrivacyManager": {
"AnonymizeIpDescription": "Valitse \"Kyllä\", jos et halua, että Piwik seuraa kokonaisia IP-osoitteita.",
"AnonymizeIpInlineHelp": "Poistaa viimeisen tavun vierailijoiden IP-osoitteista, mikäli paikalliset yksityiseensuojalait\/-ohjeistukset vaativat.",
+ "AnonymizeIpExtendedHelp": "Kun käyttäjät vierailevat sivullasi, Piwik ei tallenna täyttä IP-osoitetta (esim. %1$s), vaan sen sijaan osoite anonymisoidaan (esim. %2$s). IP-osoitteen anonymisointi on osa yksityisyydensuojasta määrääviä lakeja esimerkiksi Saksassa.",
"AnonymizeIpMaskLengtDescription": "Valitse, montako tavua käyttäjien IP-osoitteista piilotetaan.",
"AnonymizeIpMaskLength": "%1$s tavua - esim. %2$s",
"CannotLockSoDeleteLogActions": "log_action-taulua ei ole tyhjätty. Lisää \"LOCK TABLES\"-oikeus käyttäjälle %s.",
@@ -12,6 +13,8 @@
"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ää.",
"DeleteDataInterval": "Poista vanhat tiedot joka",
+ "DeleteOldVisitorLogs": "Poista vanhat kävijälogit",
+ "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",
"DeleteLogsConfirm": "Olet ottamassa käyttöön lokitietojen poistamisen. Jos vanhat tiedot poistetaan ja raportteja ei ole vielä luotu, et näe historiatietoja. Haluatko varmasti tehdä tämän?",
@@ -24,6 +27,7 @@
"DeleteReportsInfo2": "Jos et ole ottanut käyttöön \"%s\":ää, vanhat raportit luodaan automaattisesti uudelleen tarvittaessa.",
"DeleteReportsInfo3": "Jos olet ottanut käyttöön \"%s\":n, vanhat tiedot poistetaan lopullisesti.",
"DeleteReportsOlderThan": "Poista raportit, jotka ovat vanhempia kuin",
+ "DeleteSchedulingSettings": "Ajoita vanhojen tietojen poisto",
"DeleteDataSettings": "Poista vanhat lokit ja raportit",
"DoNotTrack_Description": "\"Do not Track\" (älä seuraa) on teknologia, jolla käyttäjät voivat ilmoittaa etteivät halua tulla seuratuiksi.",
"DoNotTrack_Disable": "Poista \"Älä seuraa minua\" (\"do not track\") -tuki käytöstä",
@@ -38,15 +42,18 @@
"GeolocationAnonymizeIpNote": "Huom: Geopaikannuksella on suurin piirtein samat tulokset, kun 1 tavu on salattu. Jos 2 tavua tai enemmän on salattu, Geopaikannus on epätarkka.",
"GetPurgeEstimate": "Kokoarviot tietojen poistamisesta",
"KeepBasicMetrics": "Kerää yksinkertaiset metriikat (käynnit, sivujen katselut, kauppatiedot jne.)",
+ "KeepDataFor": "Säilytä kaikki tiedot",
"KeepReportSegments": "Säilytä alla listattujen tietojen lisäksi segmentoidut raportit",
"LastDelete": "Edellinen poistaminen oli",
"LeastDaysInput": "Päiviä täytyy olla enemmän kuin %s.",
"LeastMonthsInput": "Kuukausien lukumäärän täytyy olla suurempi kuin %s.",
"MenuPrivacySettings": "Yksityisyys",
"NextDelete": "Seuraava poistaminen on",
+ "PluginDescription": "Paranna kävijöiden yksityisyydensuojaa ja säädä Piwik-asennuksesi noudattamaan paikallista lainsäädäntöä",
"PurgeNow": "Siivoa tietokanta nyt",
"PurgeNowConfirm": "Olet poistamassa tietoja lopullisesti. Haluatko varmasti jatkaa?",
"PurgingData": "Siivotaan tietoja...",
+ "RecommendedForPrivacy": "Suositellaan yksityisyydensuojaan",
"ReportsDataSavedEstimate": "Tietokannan koko",
"SaveSettingsBeforePurge": "Olet muuttanut tietojen poistamisen asetuksia. Tallenna muutokset ennen jatkamista.",
"SeeAlsoOurOfficialGuidePrivacy": "Lue myös virallinen oppaamme: %1$sVerkkoanalyysi ja yksityisyys%2$s",
diff --git a/plugins/PrivacyManager/lang/nb.json b/plugins/PrivacyManager/lang/nb.json
index 87b96e9d56..8642afedbf 100644
--- a/plugins/PrivacyManager/lang/nb.json
+++ b/plugins/PrivacyManager/lang/nb.json
@@ -12,6 +12,8 @@
"DeleteMaxRowsNoLimit": "ingen grense",
"DeleteReportsOlderThan": "Slett rapporter eldre enn",
"DeleteDataSettings": "Slett gamle besøkslogger og -rapporter",
+ "DoNotTrack_Disable": "Deaktiver Do Not Track støtte",
+ "DoNotTrack_Enable": "Aktiver Do Not Track støtte",
"EstimatedSpaceSaved": "Estimert plassbesparelse",
"GeolocationAnonymizeIpNote": "Merk: Geoposisjonering vil ha omtrent de samme resultatene med en byte anonymisert. Med to byte eller mer, vil geoposisjonering være unøyaktig.",
"KeepDataFor": "Behold all data for",
diff --git a/plugins/Provider/lang/fi.json b/plugins/Provider/lang/fi.json
index bf079428c4..cce8a9cac5 100644
--- a/plugins/Provider/lang/fi.json
+++ b/plugins/Provider/lang/fi.json
@@ -1,7 +1,9 @@
{
"Provider": {
"ColumnProvider": "Palveluntarjoajat",
+ "PluginDescription": "Raportoi kävijöiden internetoperaattorin",
"ProviderReportDocumentation": "Tämä raportti näyttää, mitä internetin toimittajia kävijäsi käyttivät sivuillasi. Saat lisätietoja klikkaamalla toimittajan nimeä. %s Jos Piwik ei tunnista toimittajan nimeä, kävijästä näytetään IP.",
- "WidgetProviders": "Palveluntarjoajat"
+ "WidgetProviders": "Palveluntarjoajat",
+ "ProviderReportFooter": "Tuntematon toimittaja ei selvitä IP-osoitteita"
}
} \ No newline at end of file
diff --git a/plugins/QueuedTracking b/plugins/QueuedTracking
-Subproject 39b949806240c93beef5d0308988f608b643788
+Subproject a7137646fa4d738c6378686df6cd222fd291217
diff --git a/plugins/Referrers/lang/fi.json b/plugins/Referrers/lang/fi.json
index a4e985a12b..3f877a70ea 100644
--- a/plugins/Referrers/lang/fi.json
+++ b/plugins/Referrers/lang/fi.json
@@ -20,10 +20,12 @@
"EvolutionDocumentationMoreInfo": "Löydät lisätietoja erilaisista viittaustyypeistä taulun %s dokumentaatiosta.",
"Keywords": "Avainsanat",
"KeywordsReportDocumentation": "Tämä rapotti näyttää, millä hakusanoilla kävijät tulivat sivuillesi. %s Näet hakukoneiden määrän klikkaamalla hakusanaa.",
+ "PluginDescription": "Raportoi viittaajiin liittyvää tietoa: hakukoneet, hakusanat, verkkosivut, kampanjat, sosiaalisen median, suorat saapumiset.",
"Referrer": "Viittaukset",
"ReferrerName": "Viittauksen nimi",
"Referrers": "Viittaajat",
"ReferrersOverview": "Viittauksien yleiskatsaus",
+ "ReferrerTypes": "Viittaajatyypit",
"SearchEngines": "Hakukoneet",
"SearchEnginesDocumentation": "Kävijä tuli sivullesi hakukoneesta. %1$s Katso %2$s raportista lisätietoja.",
"SearchEnginesReportDocumentation": "Tämä raportti näyttää, mitkä hakukoneet viittasivat kävijöitä sivuillesi. %s Näet hakusanat klikkaamalla hakukoneen nimeä.",
diff --git a/plugins/SEO/lang/fi.json b/plugins/SEO/lang/fi.json
index 354270e2d3..02accf4536 100644
--- a/plugins/SEO/lang/fi.json
+++ b/plugins/SEO/lang/fi.json
@@ -1,5 +1,6 @@
{
"SEO": {
+ "PluginDescription": "Tämä lisäosa hakee ja näyttää SEO-tietoja: Alexan web ranking, Googlen Pagerank, indeksoitujen sivujen lukumäärän, ja takaisin osoittavien linkkien määrän valitulle sivulle.",
"AlexaRank": "Alexa-tulos",
"Bing_IndexedPages": "Bingin indeksoidut sivut",
"Dmoz": "DMOZ tulossivut",
diff --git a/plugins/SecurityInfo b/plugins/SecurityInfo
-Subproject 8647523ae5de07f5dbfc9f50476c9bb661a51b3
+Subproject 85790278f1c34d2b12c9a4d846df81daee905bb
diff --git a/plugins/SegmentEditor/lang/fi.json b/plugins/SegmentEditor/lang/fi.json
index de72617253..7aab90628c 100644
--- a/plugins/SegmentEditor/lang/fi.json
+++ b/plugins/SegmentEditor/lang/fi.json
@@ -16,10 +16,17 @@
"SegmentDisplayedAllWebsites": "kaikki sivut",
"SegmentDisplayedThisWebsiteOnly": "vain tällä verkkosivulla",
"SegmentNotApplied": "Segmenttiä '%s' ei sovelleta",
+ "SelectSegmentOfVisits": "Valitse segmentit käynnille:",
"ThisSegmentIsVisibleTo": "Tämä segmentti näytetään seuraaville:",
"VisibleToAllUsers": "kaikki käyttäjät",
"VisibleToMe": "minä",
"YouMayChangeSetting": "Vaihtoehtoisesti voit vaihtaa asetuksen tiedostosta %1$s, tai muuttaa tätä segmenttiä ja valita '%2$s'.",
- "YouMustBeLoggedInToCreateSegments": "Sinun täytyy olla sisäänkirjautuneena voidaksesi luoda tai muokata kävijäsegmenttejä."
+ "VisibleToSuperUser": "Näkyvissä sinulle, koska sinulla on pääkäyttäjän oikeudet",
+ "SharedWithYou": "Jaettu kanssasi",
+ "YouMustBeLoggedInToCreateSegments": "Sinun täytyy olla sisäänkirjautuneena voidaksesi luoda tai muokata kävijäsegmenttejä.",
+ "AddingSegmentForAllWebsitesDisabled": "Segmenttien lisääminen kaikille verkkosivuille on poistettu käytöstä.",
+ "CustomSegment": "Kustomoidut segmentit",
+ "SegmentOperatorIsNullOrEmpty": "on tyhjä",
+ "SegmentOperatorIsNotNullNorEmpty": "ei ole tyhjä"
}
} \ No newline at end of file
diff --git a/plugins/SitesManager/API.php b/plugins/SitesManager/API.php
index 739af7d5e9..d6b969f9ad 100644
--- a/plugins/SitesManager/API.php
+++ b/plugins/SitesManager/API.php
@@ -491,6 +491,7 @@ class API extends \Piwik\Plugin\API
* @param array|string $urls The URLs array must contain at least one URL called the 'main_url' ;
* if several URLs are provided in the array, they will be recorded
* as Alias URLs for this website.
+ * When calling API via HTTP specify multiple URLs via `&urls[]=http...&urls[]=http...`.
* @param int $ecommerce Is Ecommerce Reporting enabled for this website?
* @param null $siteSearch
* @param string $searchKeywordParameters Comma separated list of search keyword parameter names
@@ -767,7 +768,7 @@ class API extends \Piwik\Plugin\API
* they won't be duplicated. The 'main_url' of the website won't be affected by this method.
*
* @param int $idSite
- * @param array|string $urls
+ * @param array|string $urls When calling API via HTTP specify multiple URLs via `&urls[]=http...&urls[]=http...`.
* @return int the number of inserted URLs
*/
public function addSiteAliasUrls($idSite, $urls)
@@ -1077,6 +1078,7 @@ class API extends \Piwik\Plugin\API
* @param int $idSite website ID defining the website to edit
* @param string $siteName website name
* @param string|array $urls the website URLs
+ * When calling API via HTTP specify multiple URLs via `&urls[]=http...&urls[]=http...`.
* @param int $ecommerce Whether Ecommerce is enabled, 0 or 1
* @param null|int $siteSearch Whether site search is enabled, 0 or 1
* @param string $searchKeywordParameters Comma separated list of search keyword parameter names
diff --git a/plugins/SitesManager/Controller.php b/plugins/SitesManager/Controller.php
index fc7b7eb6e8..d64fb45fa9 100644
--- a/plugins/SitesManager/Controller.php
+++ b/plugins/SitesManager/Controller.php
@@ -63,7 +63,6 @@ class Controller extends \Piwik\Plugin\ControllerAdmin
$response = new ResponseBuilder(Common::getRequestVar('format'));
$globalSettings = array();
-
$globalSettings['keepURLFragmentsGlobal'] = API::getInstance()->getKeepURLFragmentsGlobal();
$globalSettings['siteSpecificUserAgentExcludeEnabled'] = API::getInstance()->isSiteSpecificUserAgentExcludeEnabled();
$globalSettings['defaultCurrency'] = API::getInstance()->getDefaultCurrency();
diff --git a/plugins/SitesManager/Menu.php b/plugins/SitesManager/Menu.php
index a9e82e6024..d242a25351 100644
--- a/plugins/SitesManager/Menu.php
+++ b/plugins/SitesManager/Menu.php
@@ -44,6 +44,7 @@ class Menu extends \Piwik\Plugin\Menu
if (count($types) === 1) {
// only one type is in use, use this one for the wording
return reset($types);
+
} else {
// multiple types are activated, check whether only one is actually in use
$model = new Model();
diff --git a/plugins/SitesManager/Model.php b/plugins/SitesManager/Model.php
index 96062b608a..5e69d308e7 100644
--- a/plugins/SitesManager/Model.php
+++ b/plugins/SitesManager/Model.php
@@ -41,8 +41,9 @@ class Model
*/
public function getSitesFromGroup($group)
{
- $sites = $this->getDb()->fetchAll("SELECT * FROM " . $this->table . "
- WHERE `group` = ?", $group);
+ $db = $this->getDb();
+ $sites = $db->fetchAll("SELECT * FROM " . $this->table . "
+ WHERE `group` = ?", $group);
return $sites;
}
@@ -55,7 +56,8 @@ class Model
*/
public function getSitesGroups()
{
- $groups = $this->getDb()->fetchAll("SELECT DISTINCT `group` FROM " . $this->table);
+ $db = $this->getDb();
+ $groups = $db->fetchAll("SELECT DISTINCT `group` FROM " . $this->table);
$cleanedGroups = array();
foreach ($groups as $group) {
@@ -72,7 +74,8 @@ class Model
*/
public function getAllSites()
{
- $sites = $this->getDb()->fetchAll("SELECT * FROM " . $this->table . " ORDER BY idsite ASC");
+ $db = $this->getDb();
+ $sites = $db->fetchAll("SELECT * FROM " . $this->table . " ORDER BY idsite ASC");
return $sites;
}
@@ -111,7 +114,8 @@ class Model
{
$siteUrlTable = Common::prefixTable('site_url');
- $ids = $this->getDb()->fetchAll(
+ $db = $this->getDb();
+ $ids = $db->fetchAll(
'SELECT idsite FROM ' . $this->table . '
WHERE main_url IN ( ' . Common::getSqlStringFieldsArray($urls) . ') ' .
'UNION
@@ -137,7 +141,8 @@ class Model
$siteUrlTable = Common::prefixTable('site_url');
$sqlAccessSite = Access::getSqlAccessSite('idsite');
- $ids = $this->getDb()->fetchAll(
+ $db = $this->getDb();
+ $ids = $db->fetchAll(
'SELECT idsite
FROM ' . $this->table . '
WHERE main_url IN ( ' . Common::getSqlStringFieldsArray($urls) . ')' .
@@ -171,7 +176,8 @@ class Model
$query = 'SELECT idsite FROM ' . $this->table . '
WHERE timezone IN (' . Common::getSqlStringFieldsArray($timezones) . ')
ORDER BY idsite ASC';
- $sites = $this->getDb()->fetchAll($query, $timezones);
+ $db = $this->getDb();
+ $sites = $db->fetchAll($query, $timezones);
return $sites;
}
@@ -223,8 +229,9 @@ class Model
*/
public function getSiteFromId($idSite)
{
- $site = $this->getDb()->fetchRow("SELECT * FROM " . $this->table . "
- WHERE idsite = ?", $idSite);
+ $db = $this->getDb();
+ $site = $db->fetchRow("SELECT * FROM " . $this->table . "
+ WHERE idsite = ?", $idSite);
return $site;
}
@@ -237,7 +244,7 @@ class Model
*/
public function getSitesId()
{
- $result = Db::fetchAll("SELECT idsite FROM " . Common::prefixTable('site'));
+ $result = Db::fetchAll("SELECT idsite FROM " . Common::prefixTable('site'));
$idSites = array();
foreach ($result as $idSite) {
@@ -277,7 +284,8 @@ class Model
{
$db = $this->getDb();
$result = $db->fetchAll("SELECT url FROM " . Common::prefixTable("site_url") . "
- WHERE idsite = ?", $idSite);
+ WHERE idsite = ?", $idSite);
+
$urls = array();
foreach ($result as $url) {
$urls[] = $url['url'];
@@ -354,7 +362,9 @@ class Model
public function getUsedTypeIds()
{
$types = array();
- $rows = $this->getDb()->fetchAll("SELECT DISTINCT `type` as typeid FROM " . $this->table);
+
+ $db = $this->getDb();
+ $rows = $db->fetchAll("SELECT DISTINCT `type` as typeid FROM " . $this->table);
foreach ($rows as $row) {
$types[] = $row['typeid'];
diff --git a/plugins/SitesManager/angularjs/sites-manager/multiline-field.directive.html b/plugins/SitesManager/angularjs/sites-manager/multiline-field.directive.html
index fed8822dc1..2e1bf44bf7 100644
--- a/plugins/SitesManager/angularjs/sites-manager/multiline-field.directive.html
+++ b/plugins/SitesManager/angularjs/sites-manager/multiline-field.directive.html
@@ -3,5 +3,4 @@
rows="{{ rows }}"
ng-model="field.value"
ng-change="onChange()">
-
</textarea>
diff --git a/plugins/SitesManager/angularjs/sites-manager/sites-manager-site.controller.js b/plugins/SitesManager/angularjs/sites-manager/sites-manager-site.controller.js
index d759ec940f..0fac17cc22 100644
--- a/plugins/SitesManager/angularjs/sites-manager/sites-manager-site.controller.js
+++ b/plugins/SitesManager/angularjs/sites-manager/sites-manager-site.controller.js
@@ -135,22 +135,25 @@
"http://siteUrl2.com/"
];
$scope.site.exclude_unknown_urls = 0;
- $scope.site.keep_url_fragment = "0";
+ $scope.site.keep_url_fragment = 0;
$scope.site.excluded_ips = [];
$scope.site.excluded_parameters = [];
$scope.site.excluded_user_agents = [];
$scope.site.sitesearch_keyword_parameters = [];
$scope.site.sitesearch_category_parameters = [];
- $scope.site.sitesearch = $scope.globalSettings.searchKeywordParametersGlobal.length ? "1" : "0";
+ $scope.site.sitesearch = $scope.globalSettings.searchKeywordParametersGlobal.length ? 1 : 0;
$scope.site.timezone = $scope.globalSettings.defaultTimezone;
$scope.site.currency = $scope.globalSettings.defaultCurrency;
- $scope.site.ecommerce = "0";
+ $scope.site.ecommerce = 0;
updateSiteWithSiteSearchConfig();
};
var initExistingSite = function() {
+ $scope.site.keep_url_fragment = parseInt($scope.site.keep_url_fragment, 10);
+ $scope.site.ecommerce = parseInt($scope.site.ecommerce, 10);
+ $scope.site.sitesearch = parseInt($scope.site.sitesearch, 10);
$scope.site.excluded_ips = sitesManagerApiHelper.commaDelimitedFieldToArray($scope.site.excluded_ips);
$scope.site.excluded_parameters = sitesManagerApiHelper.commaDelimitedFieldToArray($scope.site.excluded_parameters);
$scope.site.excluded_user_agents = sitesManagerApiHelper.commaDelimitedFieldToArray($scope.site.excluded_user_agents);
diff --git a/plugins/SitesManager/angularjs/sites-manager/sites-manager.controller.js b/plugins/SitesManager/angularjs/sites-manager/sites-manager.controller.js
index b5d7ec0213..66c27a7703 100644
--- a/plugins/SitesManager/angularjs/sites-manager/sites-manager.controller.js
+++ b/plugins/SitesManager/angularjs/sites-manager/sites-manager.controller.js
@@ -118,8 +118,8 @@
var initEcommerceSelectOptions = function() {
$scope.eCommerceptions = [
- {key: '0', value: translate('SitesManager_NotAnEcommerceSite')},
- {key: '1', value: translate('SitesManager_EnableEcommerce')}
+ {key: 0, value: translate('SitesManager_NotAnEcommerceSite')},
+ {key: 1, value: translate('SitesManager_EnableEcommerce')}
];
};
@@ -189,18 +189,17 @@
var initSiteSearchSelectOptions = function() {
$scope.siteSearchOptions = [
- {key: '1', value: translate('SitesManager_EnableSiteSearch')},
- {key: '0', value: translate('SitesManager_DisableSiteSearch')}
+ {key: 1, value: translate('SitesManager_EnableSiteSearch')},
+ {key: 0, value: translate('SitesManager_DisableSiteSearch')}
];
};
var initKeepURLFragmentsList = function() {
-
- $scope.keepURLFragmentsOptions = {
- 0: ($scope.globalSettings.keepURLFragmentsGlobal ? translate('General_Yes') : translate('General_No')) + ' (' + translate('General_Default') + ')',
- 1: translate('General_Yes'),
- 2: translate('General_No')
- };
+ $scope.keepURLFragmentsOptions = [
+ {key: 0, value: ($scope.globalSettings.keepURLFragmentsGlobal ? translate('General_Yes') : translate('General_No')) + ' (' + translate('General_Default') + ')'},
+ {key: 1, value: translate('General_Yes')},
+ {key: 2, value: translate('General_No')}
+ ];
};
var addNewEntity = function () {
diff --git a/plugins/SitesManager/lang/el.json b/plugins/SitesManager/lang/el.json
index e8636db0ad..a6b2092a5a 100644
--- a/plugins/SitesManager/lang/el.json
+++ b/plugins/SitesManager/lang/el.json
@@ -11,7 +11,7 @@
"DefaultCurrencyForNewWebsites": "Προεπιλεγμένο Νόμισμα για νέες ιστοσελίδες",
"DefaultTimezoneForNewWebsites": "Προεπιλεγμένη Ζώνη ώρας για νέες ιστοσελίδες",
"DeleteConfirm": "Είστε σίγουρος ότι θέλετε να διαγράψετε την ιστοσελίδα %s?",
- "DisableSiteSearch": "Να μην καταγράφετε η Αναζήτηση Σελίδας",
+ "DisableSiteSearch": "Να μην καταγράφεται η Αναζήτηση Σελίδας",
"EcommerceHelp": "Όταν ενεργοποιηθεί, η αναφορά «Στόχοι» θα έχει ένα νέο τομέα «Ηλεκτρονικό Εμπόριο».",
"EnableEcommerce": "Το Ηλεκτρονικό Εμπόριο ενεργοποιήθηκε",
"EnableSiteSearch": "Η καταγραφή Αναζήτησης Ιστοσελίδας είναι ενεργοποιημένη",
diff --git a/plugins/SitesManager/lang/ru.json b/plugins/SitesManager/lang/ru.json
index db55be9cfc..f4b1a26d6d 100644
--- a/plugins/SitesManager/lang/ru.json
+++ b/plugins/SitesManager/lang/ru.json
@@ -1,6 +1,7 @@
{
"SitesManager": {
"AddSite": "Добавить новый сайт",
+ "AddMeasurable": "Добавить новые показатели",
"AdvancedTimezoneSupportNotFound": "Поддержка дополнительных временных зон не найдена в вашем PHP (поддерживается в PHP>=5.2). Вы все еще можете выбрать UTC вручную вместо этого.",
"AliasUrlHelp": "Рекомендуется, но необязательно, указывать все домены для сайта (каждый домен – новая линия), которые пользователи могут использовать для доступа к сайту. Псевдонимы для различных доменов сайта не будут отображаться в разделе Источики трафика > Сайты. Заметьте, что нет необходимости указывать варианты адресов с \"www\" и без него. Piwik автоматически учитывает оба.",
"ChangingYourTimezoneWillOnlyAffectDataForward": "Изменение вашего часового пояса только повлияет на то, что данные будут учитываться наперед, и никак не повлияет на существующие данные.",
@@ -64,6 +65,7 @@
"ShowTrackingTag": "Показать код",
"Sites": "Сайты",
"SiteSearchUse": "Вы можете использовать Piwik для отслеживания и отображения аналитики по тому, что ищут посетители на вашем сайте используя функционал для внутреннего поиска по сайту.",
+ "SiteWithoutDataTitle": "Ещё ни какие данные не были записаны",
"SuperUserAccessCan": "Пользователь с правами суперпользователя может также %1$sуказать общие настройки%2$s для новых веб-сайтов.",
"Timezone": "Часовой пояс",
"TrackingSiteSearch": "Отслеживать внутренний поиск по сайту",
@@ -71,6 +73,8 @@
"Urls": "URL-ы",
"UTCTimeIs": "Время UTC: %s.",
"WebsitesManagement": "Управление сайтами",
+ "XManagement": "Управление %s",
+ "ChooseMeasurableTypeHeadline": "Чтобы вы хотели измерить?",
"YouCurrentlyHaveAccessToNWebsites": "В данный момент вы имеете доступ к %s сайтам.",
"YourCurrentIpAddressIs": "Ваш IP: %s"
}
diff --git a/plugins/SitesManager/templates/dialogs/dialogs.html b/plugins/SitesManager/templates/dialogs/dialogs.html
index 476505e7bf..2f3d5d8072 100644
--- a/plugins/SitesManager/templates/dialogs/dialogs.html
+++ b/plugins/SitesManager/templates/dialogs/dialogs.html
@@ -1,3 +1,2 @@
<div ng-include="'plugins/SitesManager/templates/dialogs/edit-dialog.html'"></div>
-
<div ng-include="'plugins/SitesManager/templates/dialogs/remove-dialog.html'"></div>
diff --git a/plugins/SitesManager/templates/dialogs/edit-dialog.html b/plugins/SitesManager/templates/dialogs/edit-dialog.html
index afb9910869..1bb6067f47 100644
--- a/plugins/SitesManager/templates/dialogs/edit-dialog.html
+++ b/plugins/SitesManager/templates/dialogs/edit-dialog.html
@@ -1,5 +1,4 @@
<div class="ui-confirm" piwik-dialog="site.editDialog.show">
-
<h2>{{ site.editDialog.title }}</h2>
<input role="no" type="button" value="{{ 'General_Ok'|translate }}"/>
diff --git a/plugins/SitesManager/templates/displayJavascriptCode.twig b/plugins/SitesManager/templates/displayJavascriptCode.twig
index 9b514b69c0..05d867030e 100644
--- a/plugins/SitesManager/templates/displayJavascriptCode.twig
+++ b/plugins/SitesManager/templates/displayJavascriptCode.twig
@@ -1,6 +1,5 @@
{% extends 'admin.twig' %}
{% block content %}
-
{% include "@SitesManager/_displayJavascriptCode.twig" %}
{% endblock %} \ No newline at end of file
diff --git a/plugins/SitesManager/templates/help/timezone-help.html b/plugins/SitesManager/templates/help/timezone-help.html
index 0308b783b5..f77ad7863e 100644
--- a/plugins/SitesManager/templates/help/timezone-help.html
+++ b/plugins/SitesManager/templates/help/timezone-help.html
@@ -9,10 +9,7 @@
</span>
<br/>
-
{{ 'SitesManager_UTCTimeIs'| translate : (utcTime | date : 'yyyy-MM-dd HH:mm:ss') }}
-
<br/>
-
{{ 'SitesManager_ChangingYourTimezoneWillOnlyAffectDataForward'|translate }}
</div>
diff --git a/plugins/SitesManager/templates/index.html b/plugins/SitesManager/templates/index.html
index cfdca4a970..adedf3e644 100644
--- a/plugins/SitesManager/templates/index.html
+++ b/plugins/SitesManager/templates/index.html
@@ -1,17 +1,9 @@
<div ng-controller="SitesManagerController" class="SitesManager">
-
<div ng-include="'plugins/SitesManager/templates/sites-manager-header.html?cb=' + cacheBuster" class="sites-manager-header"></div>
-
<div ng-include="'plugins/SitesManager/templates/loading.html?cb=' + cacheBuster"></div>
-
<div ng-include="'plugins/SitesManager/templates/sites-list/add-site-link.html?cb=' + cacheBuster"></div>
-
<div ng-include="'plugins/SitesManager/templates/sites-list/add-entity-dialog.html?cb=' + cacheBuster"></div>
-
<div ng-include="'plugins/SitesManager/templates/sites-list/sites-list.html?cb=' + cacheBuster"></div>
-
<div class="bottomButtonBar" ng-include="'plugins/SitesManager/templates/sites-list/add-site-link.html?cb=' + cacheBuster"></div>
-
<div ng-include="'plugins/SitesManager/templates/global-settings.html?cb=' + cacheBuster"></div>
-
</div>
diff --git a/plugins/SitesManager/templates/siteWithoutData.twig b/plugins/SitesManager/templates/siteWithoutData.twig
index 498d2ee765..b1a659f31a 100644
--- a/plugins/SitesManager/templates/siteWithoutData.twig
+++ b/plugins/SitesManager/templates/siteWithoutData.twig
@@ -33,7 +33,7 @@
{{ 'SitesManager_SiteWithoutDataSetupTracking'|translate('<a href="' ~ linkTo({
'module': 'CoreAdminHome',
'action': 'trackingCodeGenerator',
- }) ~ '">', '</a>')|raw }}
+ }) ~ '">', "</a>")|raw }}
</p>
<p>
@@ -41,7 +41,7 @@
{{ 'SitesManager_SiteWithoutDataSetupGoals'|translate('<a href="' ~ linkTo({
'module': 'Goals',
'action': 'manage',
- }) ~ '">', '</a>')|raw }}
+ }) ~ '">', "</a>")|raw }}
</p>
{{ trackingHelp|raw }}
diff --git a/plugins/SitesManager/templates/sites-list/site-fields.html b/plugins/SitesManager/templates/sites-list/site-fields.html
index 200e935e27..2f0eaa7b76 100644
--- a/plugins/SitesManager/templates/sites-list/site-fields.html
+++ b/plugins/SitesManager/templates/sites-list/site-fields.html
@@ -94,7 +94,7 @@
<div class="form-group">
<label>{{ 'SitesManager_KeepURLFragmentsLong'|translate }}</label>
- <select ng-options="key as value for (key, value) in keepURLFragmentsOptions"
+ <select ng-options="option.key as option.value for option in keepURLFragmentsOptions"
ng-model="site.keep_url_fragment"></select>
</div>
diff --git a/plugins/TasksTimetable b/plugins/TasksTimetable
-Subproject 53ab383e4d19963441b2e8c8211fac3ac9426cb
+Subproject 8212ef0033dd2b3731fccd39c498f61d6ca8147
diff --git a/plugins/Transitions/API.php b/plugins/Transitions/API.php
index 1ab38f89ae..4304e2a281 100644
--- a/plugins/Transitions/API.php
+++ b/plugins/Transitions/API.php
@@ -222,7 +222,8 @@ class API extends \Piwik\Plugin\API
if ($actionType != 'title') {
// specific setup for page urls
$types[Action::TYPE_PAGE_URL] = 'followingPages';
- $dimension = 'if ( idaction_url IS NULL, idaction_name, idaction_url )';
+ $dimension = 'if ( %1$s.idaction_url IS NULL, %1$s.idaction_name, %1$s.idaction_url )';
+ $dimension = sprintf($dimension, 'log_link_visit_action' );
// site search referrers are logged with url=NULL
// when we find one, we have to join on name
$joinLogActionColumn = $dimension;
@@ -405,7 +406,8 @@ class API extends \Piwik\Plugin\API
if ($dimension == 'idaction_url_ref') {
// site search referrers are logged with url_ref=NULL
// when we find one, we have to join on name_ref
- $dimension = 'if ( idaction_url_ref IS NULL, idaction_name_ref, idaction_url_ref )';
+ $dimension = 'if ( %1$s.idaction_url_ref IS NULL, %1$s.idaction_name_ref, %1$s.idaction_url_ref )';
+ $dimension = sprintf($dimension, 'log_link_visit_action');
$joinLogActionOn = $dimension;
} else {
$joinLogActionOn = $dimension;
diff --git a/plugins/Transitions/lang/fi.json b/plugins/Transitions/lang/fi.json
index 246303c4df..df5c6bc3a8 100644
--- a/plugins/Transitions/lang/fi.json
+++ b/plugins/Transitions/lang/fi.json
@@ -16,6 +16,7 @@
"NoDataForAction": "%s:lle ei ole tietoja",
"NoDataForActionDetails": "Joko toiminnolle ei ole tietoja aikavälille %s tai toiminto on virheellinen.",
"OutgoingTraffic": "Lähtevä liikenne",
+ "PluginDescription": "Raportoi edellisen ja seuraavat toiminnot jokaiselle sivulle. Saatavilla \"Toiminnot\"-raportissa uuden ikonin takaa.",
"ShareOfAllPageviews": "Tällä sivulla on %1$s sivunavausta (%2$s kaikista)",
"ToFollowingPages": "Sisäisille sivuille",
"ToFollowingPagesInline": "%s sisäisille sivuille",
diff --git a/plugins/TreemapVisualization b/plugins/TreemapVisualization
-Subproject e487d14390a4b99504a38ba6237705c10317b12
+Subproject a74d9a9b29d257a00b7cb1b51f70997e45ee23c
diff --git a/plugins/UserCountry/Commands/AttributeHistoricalDataWithLocations.php b/plugins/UserCountry/Commands/AttributeHistoricalDataWithLocations.php
index 5e617f53e6..c5eaf833da 100644
--- a/plugins/UserCountry/Commands/AttributeHistoricalDataWithLocations.php
+++ b/plugins/UserCountry/Commands/AttributeHistoricalDataWithLocations.php
@@ -145,7 +145,7 @@ class AttributeHistoricalDataWithLocations extends ConsoleCommand
* Print information about progress.
* @param OutputInterface $output
*/
- protected function onVisitProcessed(OutputInterface $output)
+ public function onVisitProcessed(OutputInterface $output)
{
++$this->processed;
@@ -199,4 +199,4 @@ class AttributeHistoricalDataWithLocations extends ConsoleCommand
return $geolocator;
}
-} \ No newline at end of file
+}
diff --git a/plugins/UserCountry/lang/fi.json b/plugins/UserCountry/lang/fi.json
index 98ea0c0518..1cb6e70cb2 100644
--- a/plugins/UserCountry/lang/fi.json
+++ b/plugins/UserCountry/lang/fi.json
@@ -16,6 +16,7 @@
"country_a2": "Satelliittiyhteys",
"country_cat": "Katalaania puhuvat alueet",
"country_o1": "Muu maa",
+ "country_ti": "Tiibet",
"CurrentLocationIntro": "Tämän toteutuksen mukaan nykyinen sijaintisi on",
"DefaultLocationProviderDesc1": "Oletustoteutus arvaa käyttäjien maan kielen perusteella.",
"DefaultLocationProviderDesc2": "Tämä ei ole erityisen tarkkaa, joten %1$ssuosittelemme asentamaan ja käyttämään %2$sGeoIp:tä%3$s.%4$s",
diff --git a/plugins/UserCountry/lang/nb.json b/plugins/UserCountry/lang/nb.json
index 34b842e32d..155ec58045 100644
--- a/plugins/UserCountry/lang/nb.json
+++ b/plugins/UserCountry/lang/nb.json
@@ -1,5 +1,6 @@
{
"UserCountry": {
+ "AssumingNonApache": "Kan ikke finne apache_get_modules-funksjonen. Antar at det ikke er en Apache webserver.",
"CannotFindGeoIPDatabaseInArchive": "Kan ikke finne filen %1$s i tar-arkivet %2$s!",
"CannotListContent": "Kunne ikke vise innhold for %1$s: %2$s",
"CannotLocalizeLocalIP": "IP-adressen %s er en lokal adresse og kan ikke lokaliseres.",
@@ -24,6 +25,7 @@
"HowToInstallGeoIpPecl": "Hvordan installerer jeg GeoIP PECL-utvidelsen?",
"HowToInstallNginxModule": "Hvordan installerer jeg GeoIP-modulen for Nginx?",
"HowToSetupGeoIP_Step1": "%1$sLast ned%2$s GeoLite City-databasen fra %3$sMaxMind%4$s.",
+ "HttpServerModule": "HTTP Server-modul",
"ISPDatabase": "ISP-database",
"IWantToDownloadFreeGeoIP": "Jeg vil laste ned gratis GeoIP-database...",
"Latitude": "Breddegrad",
diff --git a/plugins/UserCountryMap/lang/fi.json b/plugins/UserCountryMap/lang/fi.json
index 9da534097e..ab377390bd 100644
--- a/plugins/UserCountryMap/lang/fi.json
+++ b/plugins/UserCountryMap/lang/fi.json
@@ -1,5 +1,6 @@
{
"UserCountryMap": {
+ "PluginDescription": "Tämä lisäosa tarjoaa käyttäjäkartan ja reaaliaikakartan. Huom: \"UserCountry\"-lisäosan täytyy olla päällä.",
"AndNOthers": "ja %s muuta",
"Cities": "Kaupunkeja",
"Countries": "Maita",
@@ -17,6 +18,8 @@
"ShowingVisits": "Geopaikannetut käynnit viimeiset",
"Unlocated": "<b>%s<\/b> %p käynneistä %c:sta ei voitu geopaikantaa.",
"VisitorMap": "Kartta kävijöistä",
- "WorldWide": "Maailmanlaajuinen"
+ "WorldWide": "Maailmanlaajuinen",
+ "WithUnknownRegion": "%s tuntemattomalta alueelta",
+ "WithUnknownCity": "%s tuntemattomista kaupungeista"
}
} \ No newline at end of file
diff --git a/plugins/UserLanguage/lang/fi.json b/plugins/UserLanguage/lang/fi.json
index 57a7794cc9..140e43780b 100644
--- a/plugins/UserLanguage/lang/fi.json
+++ b/plugins/UserLanguage/lang/fi.json
@@ -1,6 +1,7 @@
{
"UserLanguage": {
"BrowserLanguage": "Selaimen kieli",
- "LanguageCode": "Kielikoodi"
+ "LanguageCode": "Kielikoodi",
+ "PluginDescription": "Raportoi käyttäjän selaimen kieliasetukset."
}
} \ No newline at end of file
diff --git a/plugins/UsersManager/Model.php b/plugins/UsersManager/Model.php
index e6c0971867..db0285eab6 100644
--- a/plugins/UsersManager/Model.php
+++ b/plugins/UsersManager/Model.php
@@ -50,9 +50,10 @@ class Model
$bind = $userLogins;
}
- $users = $this->getDb()->fetchAll("SELECT * FROM " . $this->table . "
- $where
- ORDER BY login ASC", $bind);
+ $db = $this->getDb();
+ $users = $db->fetchAll("SELECT * FROM " . $this->table . "
+ $where
+ ORDER BY login ASC", $bind);
return $users;
}
@@ -64,7 +65,8 @@ class Model
*/
public function getUsersLogin()
{
- $users = $this->getDb()->fetchAll("SELECT login FROM " . $this->table . " ORDER BY login ASC");
+ $db = $this->getDb();
+ $users = $db->fetchAll("SELECT login FROM " . $this->table . " ORDER BY login ASC");
$return = array();
foreach ($users as $login) {
@@ -76,9 +78,10 @@ class Model
public function getUsersSitesFromAccess($access)
{
- $users = $this->getDb()->fetchAll("SELECT login,idsite FROM " . Common::prefixTable("access")
- . " WHERE access = ?
- ORDER BY login, idsite", $access);
+ $db = $this->getDb();
+ $users = $db->fetchAll("SELECT login,idsite FROM " . Common::prefixTable("access")
+ . " WHERE access = ?
+ ORDER BY login, idsite", $access);
$return = array();
foreach ($users as $user) {
@@ -90,8 +93,9 @@ class Model
public function getUsersAccessFromSite($idSite)
{
- $users = $this->getDb()->fetchAll("SELECT login,access FROM " . Common::prefixTable("access")
- . " WHERE idsite = ?", $idSite);
+ $db = $this->getDb();
+ $users = $db->fetchAll("SELECT login,access FROM " . Common::prefixTable("access")
+ . " WHERE idsite = ?", $idSite);
$return = array();
foreach ($users as $user) {
@@ -103,7 +107,8 @@ class Model
public function getUsersLoginWithSiteAccess($idSite, $access)
{
- $users = $this->getDb()->fetchAll("SELECT login
+ $db = $this->getDb();
+ $users = $db->fetchAll("SELECT login
FROM " . Common::prefixTable("access")
. " WHERE idsite = ? AND access = ?", array($idSite, $access));
@@ -133,7 +138,8 @@ class Model
*/
public function getSitesAccessFromUser($userLogin)
{
- $users = $this->getDb()->fetchAll("SELECT idsite,access FROM " . Common::prefixTable("access")
+ $db = $this->getDb();
+ $users = $db->fetchAll("SELECT idsite,access FROM " . Common::prefixTable("access")
. " WHERE login = ?", $userLogin);
$return = array();
@@ -167,12 +173,14 @@ class Model
public function getUserByEmail($userEmail)
{
- return $this->getDb()->fetchRow("SELECT * FROM " . $this->table . " WHERE email = ?", $userEmail);
+ $db = $this->getDb();
+ return $db->fetchRow("SELECT * FROM " . $this->table . " WHERE email = ?", $userEmail);
}
public function getUserByTokenAuth($tokenAuth)
{
- return $this->getDb()->fetchRow('SELECT * FROM ' . $this->table . ' WHERE token_auth = ?', $tokenAuth);
+ $db = $this->getDb();
+ return $db->fetchRow('SELECT * FROM ' . $this->table . ' WHERE token_auth = ?', $tokenAuth);
}
public function addUser($userLogin, $passwordTransformed, $email, $alias, $tokenAuth, $dateRegistered)
@@ -187,17 +195,31 @@ class Model
'superuser_access' => 0
);
- $this->getDb()->insert($this->table, $user);
+ $db = $this->getDb();
+ $db->insert($this->table, $user);
}
public function setSuperUserAccess($userLogin, $hasSuperUserAccess)
{
- $this->getDb()->update($this->table,
- array(
- 'superuser_access' => $hasSuperUserAccess ? 1 : 0
- ),
- "login = '$userLogin'"
- );
+ $this->updateUserFields($userLogin, array(
+ 'superuser_access' => $hasSuperUserAccess ? 1 : 0
+ ));
+ }
+
+ private function updateUserFields($userLogin, $fields)
+ {
+ $set = array();
+ $bind = array();
+
+ foreach ($fields as $key => $val) {
+ $set[] = "`$key` = ?";
+ $bind[] = $val;
+ }
+
+ $bind[] = $userLogin;
+
+ $db = $this->getDb();
+ $db->query(sprintf('UPDATE `%s` SET %s WHERE `login` = ?', $this->table, implode(', ', $set)), $bind);
}
/**
@@ -207,45 +229,47 @@ class Model
*/
public function getUsersHavingSuperUserAccess()
{
- $users = $this->getDb()->fetchAll("SELECT login, email, token_auth
- FROM " . Common::prefixTable("user") . "
- WHERE superuser_access = 1
- ORDER BY date_registered ASC");
+ $db = $this->getDb();
+ $users = $db->fetchAll("SELECT login, email, token_auth
+ FROM " . Common::prefixTable("user") . "
+ WHERE superuser_access = 1
+ ORDER BY date_registered ASC");
return $users;
}
public function updateUser($userLogin, $password, $email, $alias, $tokenAuth)
{
- $this->getDb()->update($this->table,
- array(
- 'password' => $password,
- 'alias' => $alias,
- 'email' => $email,
- 'token_auth' => $tokenAuth
- ),
- "login = '$userLogin'"
- );
+ $this->updateUserFields($userLogin, array(
+ 'password' => $password,
+ 'alias' => $alias,
+ 'email' => $email,
+ 'token_auth' => $tokenAuth
+ ));
}
public function userExists($userLogin)
{
- $count = $this->getDb()->fetchOne("SELECT count(*) FROM " . $this->table . " WHERE login = ?", $userLogin);
+ $db = $this->getDb();
+ $count = $db->fetchOne("SELECT count(*) FROM " . $this->table . " WHERE login = ?", $userLogin);
return $count != 0;
}
public function userEmailExists($userEmail)
{
- $count = $this->getDb()->fetchOne("SELECT count(*) FROM " . $this->table . " WHERE email = ?", $userEmail);
+ $db = $this->getDb();
+ $count = $db->fetchOne("SELECT count(*) FROM " . $this->table . " WHERE email = ?", $userEmail);
return $count != 0;
}
public function addUserAccess($userLogin, $access, $idSites)
{
+ $db = $this->getDb();
+
foreach ($idSites as $idsite) {
- $this->getDb()->insert(Common::prefixTable("access"),
+ $db->insert(Common::prefixTable("access"),
array("idsite" => $idsite,
"login" => $userLogin,
"access" => $access)
@@ -255,7 +279,8 @@ class Model
public function deleteUserOnly($userLogin)
{
- $this->getDb()->query("DELETE FROM " . $this->table . " WHERE login = ?", $userLogin);
+ $db = $this->getDb();
+ $db->query("DELETE FROM " . $this->table . " WHERE login = ?", $userLogin);
/**
* Triggered after a user has been deleted.
@@ -270,13 +295,15 @@ class Model
public function deleteUserAccess($userLogin, $idSites = null)
{
+ $db = $this->getDb();
+
if (is_null($idSites)) {
- $this->getDb()->query("DELETE FROM " . Common::prefixTable("access") .
+ $db->query("DELETE FROM " . Common::prefixTable("access") .
" WHERE login = ?",
array($userLogin));
} else {
foreach ($idSites as $idsite) {
- $this->getDb()->query("DELETE FROM " . Common::prefixTable("access") .
+ $db->query("DELETE FROM " . Common::prefixTable("access") .
" WHERE idsite = ? AND login = ?",
array($idsite, $userLogin)
);
diff --git a/plugins/UsersManager/lang/fi.json b/plugins/UsersManager/lang/fi.json
index 8a39276cae..9fb8873852 100644
--- a/plugins/UsersManager/lang/fi.json
+++ b/plugins/UsersManager/lang/fi.json
@@ -3,9 +3,11 @@
"AddUser": "Lisää uusi käyttäjä",
"Alias": "Alias",
"AllWebsites": "Kaikki sivut",
+ "AnonymousUser": "Anonyymi käyttäjä",
"AnonymousUserHasViewAccess": "Huom: käyttäjällä %1$s on %2$s pääsy tälle verkkosivulle.",
"AnonymousUserHasViewAccess2": "Analyysiraporttisi ja kävijätietosi ovat julkisia.",
"ApplyToAllWebsites": "Päivitä kaikille sivuille",
+ "ChangeAllConfirm": "Haluatko varmasti antaa käyttäjälle '%s' pääsyn kaikille verkkosivuille?",
"ChangePasswordConfirm": "Salasanan vaihtaminen vaihtaa myös käyttäjän token_auth:n. Haluatko varmasti jatkaa?",
"ClickHereToDeleteTheCookie": "Paina tästä poistaaksesi cookie",
"ClickHereToSetTheCookieOnDomain": "Paina tästä luodaksesi cookie sivulle %s",
@@ -14,6 +16,7 @@
"DeleteConfirm": "Haluatko varmasti poistaa käyttäjän %s?",
"Email": "Sähköposti",
"EmailYourAdministrator": "%1$sLähetä ylläpitäjällesi sähköpostia ongelmasta%2$s.",
+ "EnterUsernameOrEmail": "Kirjoita käyttäjätunnus tai sähköpostiosoite",
"ExceptionAccessValues": "Oikeuksien täytyy olla yksi seuraavista arvoista: [ %s ]",
"ExceptionAdminAnonymous": "Et voi sallia ylläpito-oikeuksia anonyymikäyttäjälle.",
"ExceptionDeleteDoesNotExist": "Käyttäjää '%s' ei ole eikä sitä siksi voida poistaa.",
@@ -21,14 +24,20 @@
"ExceptionEditAnonymous": "Anonyymikäyttäjää ei voi muokata tai poistaa. Se on Piwikin sisäinen tunnus käyttäjälle, joka ei ole kirjautunut sisään. Voit esimerkiksi julkaista tilastoja kaikille sallimalla anonyymikäyttäjälle katsomisoikeuden.",
"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 pituuden täytyy olla %1$s ja %2$s välillä.",
+ "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.",
"ExceptionSuperUserAccess": "Tällä käyttäjällä on jo Superkäyttäjäoikeudet ja oikeudet muokata kaikkia verkkosivuja Piwikissä. Voit poistaa Superkäyttäjäoikeudet tältä käyttäjältä ja yrittää uudelleen.",
"ExceptionUserDoesNotExist": "Käyttäjää '%s' ei ole olemassa.",
"ExceptionYouMustGrantSuperUserAccessFirst": "Ainakin yhdellä käyttäjällä tulee olla Superkäyttäjäoikeudet. Ole hyvä ja anna toiselle käyttäjälle Superkäyttäjäoikeudet ensin.",
+ "ExceptionUserHasViewAccessAlready": "Käyttäjällä on jo pääsy sivulle.",
+ "ExceptionNoValueForUsernameOrEmail": "Kirjoita käyttäjätunnus tai sähköpostiosoite.",
"ExcludeVisitsViaCookie": "Poista käyntiesi seuraaminen cookiella",
"ForAnonymousUsersReportDateToLoadByDefault": "Lataa anonyymeille käyttäjille oletuksena",
+ "GiveViewAccess": "Anna katseluoikeus",
+ "GiveViewAccessTitle": "Anna olemassaolevalle käyttäjälle oikeus katsoa %s:n raportteja",
"IfYouWouldLikeToChangeThePasswordTypeANewOne": "Jos haluat vaihtaa salasanan, kirjoita uusi. Muuten jätä tyhjäksi.",
"InjectedHostCannotChangePwd": "Olet sivulla tällä hetkellä tuntemattoman isännän kautta (%1$s). Et voi vaihtaa salasanaasi ennen kuin tämä ongelma on korjattu.",
"LastSeen": "Nähty viimeeksi",
@@ -36,8 +45,11 @@
"MenuAnonymousUserSettings": "Anonyymin käyttäjän asetukset",
"MenuUsers": "Käyttäjät",
"MenuUserSettings": "Käyttäjäasetukset",
+ "MenuPersonal": "Henkilökohtainen",
+ "PersonalSettings": "Henkilökohtaiset asetukset",
"NoteNoAnonymousUserAccessSettingsWontBeUsed2": "Huom. et voi vaihtaa tämän osion asetuksia, koska sinulla ei ole yhtäkään sivustoa, jonka tietoja anonyymit käyttäjät pääsevät katsomaan.",
"NoUsersExist": "Yhtään käyttäjää ei ole vielä olemassa.",
+ "PluginDescription": "Käyttäjähallinta antaa sinun lisätä uusia käyttäjiä, muokata olemassaolevia käyttäjiä, antaa pääsyoikeuksia sivuille ja muokata sivuja.",
"PrivAdmin": "Hallinnointioikeus",
"PrivNone": "Ei käyttöoikeutta",
"PrivView": "Näkymä",
diff --git a/plugins/UsersManager/tests/Integration/APITest.php b/plugins/UsersManager/tests/Integration/APITest.php
index f7ab746ce6..892deedc58 100644
--- a/plugins/UsersManager/tests/Integration/APITest.php
+++ b/plugins/UsersManager/tests/Integration/APITest.php
@@ -178,6 +178,17 @@ class APITest extends IntegrationTestCase
$this->api->setUserPreference($user2, 'ohOH_myPreferenceName', 'valueForUser2');
}
+ public function test_updateUser()
+ {
+ $this->api->updateUser($this->login, 'newPassword', 'email@example.com', 'newAlias', false);
+
+ $user = $this->api->getUser($this->login);
+
+ $this->assertSame('14a88b9d2f52c55b5fbcf9c5d9c11875', $user['password']);
+ $this->assertSame('email@example.com', $user['email']);
+ $this->assertSame('newAlias', $user['alias']);
+ }
+
public function test_getSitesAccessFromUser_forSuperUser()
{
$user2 = 'userLogin2';
diff --git a/plugins/VisitFrequency/Controller.php b/plugins/VisitFrequency/Controller.php
index 8e6af9cffd..855d1286de 100644
--- a/plugins/VisitFrequency/Controller.php
+++ b/plugins/VisitFrequency/Controller.php
@@ -68,6 +68,7 @@ class Controller extends \Piwik\Plugin\Controller
);
$period = Common::getRequestVar('period', false);
+
if ($period == 'day') {
// add number of unique (returning) visitors for period=day
$selectableColumns = array_merge(
diff --git a/plugins/VisitFrequency/lang/fi.json b/plugins/VisitFrequency/lang/fi.json
index b46c8115d6..4bee78edcc 100644
--- a/plugins/VisitFrequency/lang/fi.json
+++ b/plugins/VisitFrequency/lang/fi.json
@@ -10,6 +10,8 @@
"ColumnReturningVisits": "Palaavat käynnit",
"ColumnSumVisitLengthReturning": "Palaavien käyttäjien aika yhteensä (sekunteja)",
"ColumnUniqueReturningVisitors": "Yksilölliset palaavat kävijät",
+ "ColumnReturningUsers": "Palaavat käyttäjät",
+ "PluginDescription": "Raportoi metriikat ensimmäisen kerran kävijöistä ja palaavista vierailijoista",
"ReturnActions": "%s toimintoa palaavilta käyttäjiltä",
"ReturnAverageVisitDuration": "%s keskimääräinen käynnin pituus palaaville kävijöille",
"ReturnAvgActions": "%s toimintoa \/ palaava käynti",
diff --git a/plugins/VisitTime/lang/fi.json b/plugins/VisitTime/lang/fi.json
index 14e8b8856b..1efd00df94 100644
--- a/plugins/VisitTime/lang/fi.json
+++ b/plugins/VisitTime/lang/fi.json
@@ -5,6 +5,7 @@
"DayOfWeek": "Viikonpäivä",
"LocalTime": "Käyntejä (paikallinen aika)",
"NHour": "%sh",
+ "PluginDescription": "Raportoi palvelimen ajan ja käyttäjän paikallisen ajan käynneille.",
"ServerTime": "Käyntejä (palvelimen aika)",
"SubmenuTimes": "Ajat",
"VisitsByDayOfWeek": "Käynnit viikonpäivän mukaan",
diff --git a/plugins/VisitorInterest/lang/fi.json b/plugins/VisitorInterest/lang/fi.json
index e306a04236..e196332b95 100644
--- a/plugins/VisitorInterest/lang/fi.json
+++ b/plugins/VisitorInterest/lang/fi.json
@@ -7,6 +7,7 @@
"Engagement": "Sitoutuminen",
"NPages": "%s sivua",
"OnePage": "1 sivu",
+ "PluginDescription": "Raportoi kävijöiden kiinnostuksen: käytyjen sivujen määrän, sivuilla vietetyn ajan, ajan edellisestä käynnistä jne.",
"VisitNum": "Käynnin numero",
"VisitsByDaysSinceLast": "Käynnit lajiteltuna aikavälillä edelliseen käyntiin",
"visitsByVisitCount": "Käynnit käyntinumeron mukaan",
diff --git a/plugins/VisitsSummary/lang/fi.json b/plugins/VisitsSummary/lang/fi.json
index 4df0a1d5db..0bc92bcf03 100644
--- a/plugins/VisitsSummary/lang/fi.json
+++ b/plugins/VisitsSummary/lang/fi.json
@@ -17,6 +17,7 @@
"NbUniquePageviewsDescription": "%s yksilöllistä sivunavausta",
"NbUniqueVisitors": "%s uniikia kävijää",
"NbVisitsBounced": "%s lyhyttä käyntiä (vain yksi ladattu sivu)",
+ "PluginDescription": "Raportoi yleiset analytiikkametriikat: käynnit, uniikit kävijät, toimintojen määrän jne.",
"VisitsSummary": "Yhteenveto käynneistä",
"VisitsSummaryDocumentation": "Tämä on käyntien muutoksen yleiskatsaus",
"WidgetLastVisits": "Edelliset käynnit",
diff --git a/plugins/WebsiteMeasurable/lang/fi.json b/plugins/WebsiteMeasurable/lang/fi.json
new file mode 100644
index 0000000000..e3c519b052
--- /dev/null
+++ b/plugins/WebsiteMeasurable/lang/fi.json
@@ -0,0 +1,7 @@
+{
+ "WebsiteMeasurable": {
+ "Website": "Verkkosivu",
+ "Websites": "Verkkosivut",
+ "WebsiteDescription": "Verkkosivusto on tyypillisesti kokoelma sivuja saman verkko-osoitteen alla."
+ }
+} \ No newline at end of file