Deploy Matomo fully configured for Hugging Face Spaces (part 7)
Browse filesThis view is limited to 50 files because it contains too many changes. See raw diff
- .gitattributes +2 -0
- plugins/Actions/Metrics.php +103 -0
- plugins/Actions/RecordBuilders/ActionReports.php +982 -0
- plugins/Actions/RecordBuilders/Hits.php +42 -0
- plugins/Actions/RecordBuilders/SearchCategories.php +52 -0
- plugins/Actions/Reports/Base.php +159 -0
- plugins/Actions/Reports/Get.php +39 -0
- plugins/Actions/Reports/GetDownloads.php +56 -0
- plugins/Actions/Reports/GetEntryPageTitles.php +95 -0
- plugins/Actions/Reports/GetEntryPageUrls.php +88 -0
- plugins/Actions/Reports/GetExitPageTitles.php +101 -0
- plugins/Actions/Reports/GetExitPageUrls.php +101 -0
- plugins/Actions/Reports/GetOutlinks.php +59 -0
- plugins/Actions/Reports/GetPageTitles.php +96 -0
- plugins/Actions/Reports/GetPageTitlesFollowingSiteSearch.php +87 -0
- plugins/Actions/Reports/GetPageUrls.php +98 -0
- plugins/Actions/Reports/GetPageUrlsFollowingSiteSearch.php +43 -0
- plugins/Actions/Reports/GetSiteSearchCategories.php +64 -0
- plugins/Actions/Reports/GetSiteSearchKeywords.php +69 -0
- plugins/Actions/Reports/GetSiteSearchNoResultKeywords.php +68 -0
- plugins/Actions/Reports/SiteSearchBase.php +67 -0
- plugins/Actions/Segment.php +22 -0
- plugins/Actions/Tracker/ActionsRequestProcessor.php +106 -0
- plugins/Actions/VisitorDetails.php +523 -0
- plugins/Actions/config/config.php +3 -0
- plugins/Actions/config/tracker.php +3 -0
- plugins/Actions/javascripts/actionsDataTable.js +341 -0
- plugins/Actions/javascripts/rowactions.js +99 -0
- plugins/Actions/lang/am.json +9 -0
- plugins/Actions/lang/ar.json +63 -0
- plugins/Actions/lang/az.json +14 -0
- plugins/Actions/lang/be.json +25 -0
- plugins/Actions/lang/bg.json +100 -0
- plugins/Actions/lang/bn.json +1 -0
- plugins/Actions/lang/bs.json +60 -0
- plugins/Actions/lang/ca.json +102 -0
- plugins/Actions/lang/cs.json +100 -0
- plugins/Actions/lang/cy.json +5 -0
- plugins/Actions/lang/da.json +79 -0
- plugins/Actions/lang/de.json +100 -0
- plugins/Actions/lang/dv.json +14 -0
- plugins/Actions/lang/el.json +102 -0
- plugins/Actions/lang/en.json +102 -0
- plugins/Actions/lang/eo.json +5 -0
- plugins/Actions/lang/es-ar.json +100 -0
- plugins/Actions/lang/es.json +102 -0
- plugins/Actions/lang/et.json +44 -0
- plugins/Actions/lang/eu.json +100 -0
- plugins/Actions/lang/fa.json +79 -0
- plugins/Actions/lang/fi.json +79 -0
.gitattributes
CHANGED
|
@@ -86,3 +86,5 @@ tests/javascript/assets/** linguist-vendored
|
|
| 86 |
tests/javascript/frameworks/** linguist-vendored
|
| 87 |
tests/javascript/jash/** linguist-vendored
|
| 88 |
tests/javascript/jslint/** linguist-vendored
|
|
|
|
|
|
|
|
|
| 86 |
tests/javascript/frameworks/** linguist-vendored
|
| 87 |
tests/javascript/jash/** linguist-vendored
|
| 88 |
tests/javascript/jslint/** linguist-vendored
|
| 89 |
+
plugins/AnonymousPiwikUsageMeasurement/screenshots/AdminSettings.png filter=lfs diff=lfs merge=lfs -text
|
| 90 |
+
plugins/Bandwidth/screenshots/Visitor_Overview.png filter=lfs diff=lfs merge=lfs -text
|
plugins/Actions/Metrics.php
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Matomo - free/libre analytics platform
|
| 5 |
+
*
|
| 6 |
+
* @link https://matomo.org
|
| 7 |
+
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
namespace Piwik\Plugins\Actions;
|
| 11 |
+
|
| 12 |
+
use Piwik\Metrics as PiwikMetrics;
|
| 13 |
+
use Piwik\Piwik;
|
| 14 |
+
use Piwik\Tracker\Action;
|
| 15 |
+
|
| 16 |
+
/**
|
| 17 |
+
* Class encapsulating logic to process Day/Period Archiving for the Actions reports
|
| 18 |
+
*
|
| 19 |
+
*/
|
| 20 |
+
class Metrics
|
| 21 |
+
{
|
| 22 |
+
public static $actionTypes = array(
|
| 23 |
+
Action::TYPE_PAGE_URL,
|
| 24 |
+
Action::TYPE_OUTLINK,
|
| 25 |
+
Action::TYPE_DOWNLOAD,
|
| 26 |
+
Action::TYPE_PAGE_TITLE,
|
| 27 |
+
Action::TYPE_SITE_SEARCH,
|
| 28 |
+
);
|
| 29 |
+
|
| 30 |
+
public static $columnsToRenameAfterAggregation = array(
|
| 31 |
+
PiwikMetrics::INDEX_NB_UNIQ_VISITORS => PiwikMetrics::INDEX_SUM_DAILY_NB_UNIQ_VISITORS,
|
| 32 |
+
PiwikMetrics::INDEX_PAGE_ENTRY_NB_UNIQ_VISITORS => PiwikMetrics::INDEX_PAGE_ENTRY_SUM_DAILY_NB_UNIQ_VISITORS,
|
| 33 |
+
PiwikMetrics::INDEX_PAGE_EXIT_NB_UNIQ_VISITORS => PiwikMetrics::INDEX_PAGE_EXIT_SUM_DAILY_NB_UNIQ_VISITORS,
|
| 34 |
+
);
|
| 35 |
+
|
| 36 |
+
public static $columnsToDeleteAfterAggregation = array(
|
| 37 |
+
PiwikMetrics::INDEX_NB_UNIQ_VISITORS,
|
| 38 |
+
PiwikMetrics::INDEX_PAGE_ENTRY_NB_UNIQ_VISITORS,
|
| 39 |
+
PiwikMetrics::INDEX_PAGE_EXIT_NB_UNIQ_VISITORS,
|
| 40 |
+
);
|
| 41 |
+
|
| 42 |
+
public static function getColumnsAggregationOperation()
|
| 43 |
+
{
|
| 44 |
+
$operations = [];
|
| 45 |
+
$actionMetrics = self::getActionMetrics();
|
| 46 |
+
|
| 47 |
+
foreach ($actionMetrics as $actionMetric => $definition) {
|
| 48 |
+
if (!empty($definition['aggregation']) && $definition['aggregation'] !== 'sum') {
|
| 49 |
+
$operations[$actionMetric] = $definition['aggregation'];
|
| 50 |
+
}
|
| 51 |
+
}
|
| 52 |
+
|
| 53 |
+
return $operations;
|
| 54 |
+
}
|
| 55 |
+
|
| 56 |
+
public static function getActionMetrics()
|
| 57 |
+
{
|
| 58 |
+
$metricsConfig = array(
|
| 59 |
+
PiwikMetrics::INDEX_NB_VISITS => array(
|
| 60 |
+
'aggregation' => 'sum',
|
| 61 |
+
'query' => "count(distinct log_link_visit_action.idvisit)",
|
| 62 |
+
),
|
| 63 |
+
PiwikMetrics::INDEX_NB_UNIQ_VISITORS => array(
|
| 64 |
+
'aggregation' => false,
|
| 65 |
+
'query' => "count(distinct log_link_visit_action.idvisitor)",
|
| 66 |
+
),
|
| 67 |
+
PiwikMetrics::INDEX_PAGE_NB_HITS => array(
|
| 68 |
+
'aggregation' => 'sum',
|
| 69 |
+
'query' => "count(*)",
|
| 70 |
+
),
|
| 71 |
+
PiwikMetrics::INDEX_PAGE_SUM_TIME_GENERATION => array(
|
| 72 |
+
'aggregation' => 'sum',
|
| 73 |
+
'query' => "sum(
|
| 74 |
+
case when " . Action::DB_COLUMN_CUSTOM_FLOAT . " is null
|
| 75 |
+
then 0
|
| 76 |
+
else " . Action::DB_COLUMN_CUSTOM_FLOAT . "
|
| 77 |
+
end
|
| 78 |
+
) / 1000",
|
| 79 |
+
),
|
| 80 |
+
PiwikMetrics::INDEX_PAGE_NB_HITS_WITH_TIME_GENERATION => array(
|
| 81 |
+
'aggregation' => 'sum',
|
| 82 |
+
'query' => "sum(
|
| 83 |
+
case when " . Action::DB_COLUMN_CUSTOM_FLOAT . " is null
|
| 84 |
+
then 0
|
| 85 |
+
else 1
|
| 86 |
+
end
|
| 87 |
+
)",
|
| 88 |
+
),
|
| 89 |
+
PiwikMetrics::INDEX_PAGE_MIN_TIME_GENERATION => array(
|
| 90 |
+
'aggregation' => 'min',
|
| 91 |
+
'query' => "min(" . Action::DB_COLUMN_CUSTOM_FLOAT . ") / 1000",
|
| 92 |
+
),
|
| 93 |
+
PiwikMetrics::INDEX_PAGE_MAX_TIME_GENERATION => array(
|
| 94 |
+
'aggregation' => 'max',
|
| 95 |
+
'query' => "max(" . Action::DB_COLUMN_CUSTOM_FLOAT . ") / 1000",
|
| 96 |
+
),
|
| 97 |
+
);
|
| 98 |
+
|
| 99 |
+
Piwik::postEvent('Actions.Archiving.addActionMetrics', array(&$metricsConfig));
|
| 100 |
+
|
| 101 |
+
return $metricsConfig;
|
| 102 |
+
}
|
| 103 |
+
}
|
plugins/Actions/RecordBuilders/ActionReports.php
ADDED
|
@@ -0,0 +1,982 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Matomo - free/libre analytics platform
|
| 5 |
+
*
|
| 6 |
+
* @link https://matomo.org
|
| 7 |
+
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
namespace Piwik\Plugins\Actions\RecordBuilders;
|
| 11 |
+
|
| 12 |
+
use Piwik\API\Request;
|
| 13 |
+
use Piwik\ArchiveProcessor;
|
| 14 |
+
use Piwik\ArchiveProcessor\Record;
|
| 15 |
+
use Piwik\Cache;
|
| 16 |
+
use Piwik\Config\GeneralConfig;
|
| 17 |
+
use Piwik\DataAccess\LogAggregator;
|
| 18 |
+
use Piwik\DataTable;
|
| 19 |
+
use Piwik\DataTable\Row;
|
| 20 |
+
use Piwik\Metrics as PiwikMetrics;
|
| 21 |
+
use Piwik\Plugins\Actions\Archiver;
|
| 22 |
+
use Piwik\Plugins\Actions\ArchivingHelper;
|
| 23 |
+
use Piwik\Plugins\Actions\Metrics;
|
| 24 |
+
use Piwik\RankingQuery;
|
| 25 |
+
use Piwik\Tracker\Action;
|
| 26 |
+
use Piwik\Tracker\GoalManager;
|
| 27 |
+
|
| 28 |
+
class ActionReports extends ArchiveProcessor\RecordBuilder
|
| 29 |
+
{
|
| 30 |
+
public function __construct()
|
| 31 |
+
{
|
| 32 |
+
ArchivingHelper::reloadConfig();
|
| 33 |
+
|
| 34 |
+
parent::__construct(
|
| 35 |
+
ArchivingHelper::$maximumRowsInDataTableLevelZero,
|
| 36 |
+
ArchivingHelper::$maximumRowsInSubDataTable,
|
| 37 |
+
ArchivingHelper::$columnToSortByBeforeTruncation,
|
| 38 |
+
null,
|
| 39 |
+
Metrics::$columnsToRenameAfterAggregation
|
| 40 |
+
);
|
| 41 |
+
}
|
| 42 |
+
|
| 43 |
+
public function getRecordMetadata(ArchiveProcessor $archiveProcessor): array
|
| 44 |
+
{
|
| 45 |
+
$pageUrlsRecord = Record::make(Record::TYPE_BLOB, Archiver::PAGE_URLS_RECORD_NAME)
|
| 46 |
+
->setBlobColumnAggregationOps(Metrics::getColumnsAggregationOperation());
|
| 47 |
+
$pageTitlesRecord = Record::make(Record::TYPE_BLOB, Archiver::PAGE_TITLES_RECORD_NAME)
|
| 48 |
+
->setBlobColumnAggregationOps(Metrics::getColumnsAggregationOperation());
|
| 49 |
+
|
| 50 |
+
if ($this->isFlatArchivingEnabled()) {
|
| 51 |
+
$this->setHierarchyBuiltFromFlatRecord(
|
| 52 |
+
$pageUrlsRecord,
|
| 53 |
+
Archiver::PAGE_URLS_FLAT_RECORD_NAME,
|
| 54 |
+
[$this, 'flatRowToUrlHierarchyPath'],
|
| 55 |
+
[$this, 'reduceLegacyUrlHierarchyIntoFlatTable']
|
| 56 |
+
);
|
| 57 |
+
$this->setHierarchyBuiltFromFlatRecord(
|
| 58 |
+
$pageTitlesRecord,
|
| 59 |
+
Archiver::PAGE_TITLES_FLAT_RECORD_NAME,
|
| 60 |
+
[$this, 'flatRowToTitleHierarchyPath'],
|
| 61 |
+
[$this, 'reduceLegacyTitleHierarchyIntoFlatTable']
|
| 62 |
+
);
|
| 63 |
+
}
|
| 64 |
+
|
| 65 |
+
$records = [
|
| 66 |
+
Record::make(Record::TYPE_BLOB, Archiver::SITE_SEARCH_RECORD_NAME)
|
| 67 |
+
->setMaxRowsInTable(ArchivingHelper::$maximumRowsInDataTableSiteSearch),
|
| 68 |
+
|
| 69 |
+
$pageUrlsRecord,
|
| 70 |
+
$pageTitlesRecord,
|
| 71 |
+
|
| 72 |
+
Record::make(Record::TYPE_BLOB, Archiver::DOWNLOADS_RECORD_NAME),
|
| 73 |
+
Record::make(Record::TYPE_BLOB, Archiver::OUTLINKS_RECORD_NAME),
|
| 74 |
+
|
| 75 |
+
Record::make(Record::TYPE_NUMERIC, Archiver::METRIC_SEARCHES_RECORD_NAME),
|
| 76 |
+
Record::make(Record::TYPE_NUMERIC, Archiver::METRIC_KEYWORDS_RECORD_NAME)
|
| 77 |
+
->setIsCountOfBlobRecordRows(Archiver::SITE_SEARCH_RECORD_NAME),
|
| 78 |
+
|
| 79 |
+
Record::make(Record::TYPE_NUMERIC, Archiver::METRIC_OUTLINKS_RECORD_NAME),
|
| 80 |
+
Record::make(Record::TYPE_NUMERIC, Archiver::METRIC_UNIQ_OUTLINKS_RECORD_NAME),
|
| 81 |
+
|
| 82 |
+
Record::make(Record::TYPE_NUMERIC, Archiver::METRIC_PAGEVIEWS_RECORD_NAME),
|
| 83 |
+
Record::make(Record::TYPE_NUMERIC, Archiver::METRIC_UNIQ_PAGEVIEWS_RECORD_NAME),
|
| 84 |
+
Record::make(Record::TYPE_NUMERIC, Archiver::METRIC_SUM_TIME_RECORD_NAME),
|
| 85 |
+
Record::make(Record::TYPE_NUMERIC, Archiver::METRIC_HITS_TIMED_RECORD_NAME),
|
| 86 |
+
|
| 87 |
+
Record::make(Record::TYPE_NUMERIC, Archiver::METRIC_DOWNLOADS_RECORD_NAME),
|
| 88 |
+
Record::make(Record::TYPE_NUMERIC, Archiver::METRIC_UNIQ_DOWNLOADS_RECORD_NAME),
|
| 89 |
+
];
|
| 90 |
+
|
| 91 |
+
if ($this->isFlatArchivingEnabled()) {
|
| 92 |
+
$records[] = Record::make(Record::TYPE_BLOB, Archiver::PAGE_URLS_FLAT_RECORD_NAME)
|
| 93 |
+
->setBlobColumnAggregationOps(Metrics::getColumnsAggregationOperation())
|
| 94 |
+
->setMaxRowsInTable(ArchivingHelper::$maximumRowsInDataTableFlat);
|
| 95 |
+
$records[] = Record::make(Record::TYPE_BLOB, Archiver::PAGE_TITLES_FLAT_RECORD_NAME)
|
| 96 |
+
->setBlobColumnAggregationOps(Metrics::getColumnsAggregationOperation())
|
| 97 |
+
->setMaxRowsInTable(ArchivingHelper::$maximumRowsInDataTableFlat);
|
| 98 |
+
}
|
| 99 |
+
|
| 100 |
+
return $records;
|
| 101 |
+
}
|
| 102 |
+
|
| 103 |
+
public function flatRowToUrlHierarchyPath(Row $flatRow): ?array
|
| 104 |
+
{
|
| 105 |
+
return $this->flatRowToHierarchyPath($flatRow, Action::TYPE_PAGE_URL);
|
| 106 |
+
}
|
| 107 |
+
|
| 108 |
+
public function flatRowToTitleHierarchyPath(Row $flatRow): ?array
|
| 109 |
+
{
|
| 110 |
+
return $this->flatRowToHierarchyPath($flatRow, Action::TYPE_PAGE_TITLE);
|
| 111 |
+
}
|
| 112 |
+
|
| 113 |
+
public function reduceLegacyUrlHierarchyIntoFlatTable(DataTable $legacyHierarchy, DataTable $flatTable, ArchiveProcessor $archiveProcessor, Record $record): void
|
| 114 |
+
{
|
| 115 |
+
ArchivingHelper::mergeHierarchicalActionsTableIntoBestEffortFlatTable(
|
| 116 |
+
$legacyHierarchy,
|
| 117 |
+
$flatTable,
|
| 118 |
+
Action::TYPE_PAGE_URL
|
| 119 |
+
);
|
| 120 |
+
}
|
| 121 |
+
|
| 122 |
+
public function reduceLegacyTitleHierarchyIntoFlatTable(DataTable $legacyHierarchy, DataTable $flatTable, ArchiveProcessor $archiveProcessor, Record $record): void
|
| 123 |
+
{
|
| 124 |
+
ArchivingHelper::mergeHierarchicalActionsTableIntoBestEffortFlatTable(
|
| 125 |
+
$legacyHierarchy,
|
| 126 |
+
$flatTable,
|
| 127 |
+
Action::TYPE_PAGE_TITLE
|
| 128 |
+
);
|
| 129 |
+
}
|
| 130 |
+
|
| 131 |
+
protected function aggregate(ArchiveProcessor $archiveProcessor): array
|
| 132 |
+
{
|
| 133 |
+
if (!$this->isFlatArchivingEnabled()) {
|
| 134 |
+
return $this->aggregateLegacyHierarchical($archiveProcessor);
|
| 135 |
+
}
|
| 136 |
+
|
| 137 |
+
$rankingQueryLimit = ArchivingHelper::getRankingQueryLimit();
|
| 138 |
+
ArchivingHelper::reloadConfig();
|
| 139 |
+
|
| 140 |
+
$tablesByType = $this->makeReportTables();
|
| 141 |
+
$flatPageTablesByType = $this->makeFlatPageTables();
|
| 142 |
+
$tableModesByType = [
|
| 143 |
+
Action::TYPE_PAGE_URL => ArchivingHelper::ACTION_TABLE_MODE_FLAT,
|
| 144 |
+
Action::TYPE_PAGE_TITLE => ArchivingHelper::ACTION_TABLE_MODE_FLAT,
|
| 145 |
+
];
|
| 146 |
+
$dayTablesByType = $tablesByType;
|
| 147 |
+
$dayTablesByType[Action::TYPE_PAGE_URL] = $flatPageTablesByType[Action::TYPE_PAGE_URL];
|
| 148 |
+
$dayTablesByType[Action::TYPE_PAGE_TITLE] = $flatPageTablesByType[Action::TYPE_PAGE_TITLE];
|
| 149 |
+
|
| 150 |
+
$this->archiveDayActions(
|
| 151 |
+
$archiveProcessor,
|
| 152 |
+
$rankingQueryLimit,
|
| 153 |
+
$dayTablesByType,
|
| 154 |
+
array_diff(array_keys($dayTablesByType), [Action::TYPE_SITE_SEARCH]),
|
| 155 |
+
true,
|
| 156 |
+
$tableModesByType
|
| 157 |
+
);
|
| 158 |
+
|
| 159 |
+
if ($archiveProcessor->getParams()->getSite()->isSiteSearchEnabled()) {
|
| 160 |
+
$rankingQueryLimitSiteSearch = max($rankingQueryLimit, ArchivingHelper::$maximumRowsInDataTableSiteSearch);
|
| 161 |
+
$this->archiveDayActions(
|
| 162 |
+
$archiveProcessor,
|
| 163 |
+
$rankingQueryLimitSiteSearch,
|
| 164 |
+
$dayTablesByType,
|
| 165 |
+
[Action::TYPE_SITE_SEARCH],
|
| 166 |
+
false,
|
| 167 |
+
$tableModesByType
|
| 168 |
+
);
|
| 169 |
+
}
|
| 170 |
+
|
| 171 |
+
$this->archiveDayEntryActions($archiveProcessor->getLogAggregator(), $dayTablesByType, $rankingQueryLimit, $tableModesByType);
|
| 172 |
+
$this->archiveDayExitActions($archiveProcessor->getLogAggregator(), $dayTablesByType, $rankingQueryLimit, $tableModesByType);
|
| 173 |
+
$this->archiveDayActionsTime($archiveProcessor->getLogAggregator(), $dayTablesByType, $rankingQueryLimit, $tableModesByType);
|
| 174 |
+
$this->archiveDayActionsGoals($archiveProcessor, $rankingQueryLimit);
|
| 175 |
+
ArchivingHelper::normalizeFlatGoalsMetricsForHierarchy($flatPageTablesByType);
|
| 176 |
+
|
| 177 |
+
ArchivingHelper::clearActionsCache();
|
| 178 |
+
|
| 179 |
+
$tablesByType[Action::TYPE_PAGE_URL] = $this->buildDayHierarchicalTableFromFlatTable(
|
| 180 |
+
$flatPageTablesByType[Action::TYPE_PAGE_URL],
|
| 181 |
+
[$this, 'flatRowToUrlHierarchyPath']
|
| 182 |
+
);
|
| 183 |
+
$tablesByType[Action::TYPE_PAGE_TITLE] = $this->buildDayHierarchicalTableFromFlatTable(
|
| 184 |
+
$flatPageTablesByType[Action::TYPE_PAGE_TITLE],
|
| 185 |
+
[$this, 'flatRowToTitleHierarchyPath']
|
| 186 |
+
);
|
| 187 |
+
$this->finalizeBuiltFromFlatHierarchyTable(
|
| 188 |
+
$archiveProcessor,
|
| 189 |
+
$tablesByType[Action::TYPE_PAGE_URL],
|
| 190 |
+
Archiver::PAGE_URLS_RECORD_NAME
|
| 191 |
+
);
|
| 192 |
+
$this->finalizeBuiltFromFlatHierarchyTable(
|
| 193 |
+
$archiveProcessor,
|
| 194 |
+
$tablesByType[Action::TYPE_PAGE_TITLE],
|
| 195 |
+
Archiver::PAGE_TITLES_RECORD_NAME
|
| 196 |
+
);
|
| 197 |
+
|
| 198 |
+
$dataTable = $tablesByType[Action::TYPE_SITE_SEARCH];
|
| 199 |
+
$this->deleteUnusedColumnsFromKeywordsDataTable($dataTable);
|
| 200 |
+
|
| 201 |
+
foreach ($tablesByType as $actionType => $dataTable) {
|
| 202 |
+
if (
|
| 203 |
+
$actionType === Action::TYPE_PAGE_URL
|
| 204 |
+
|| $actionType === Action::TYPE_PAGE_TITLE
|
| 205 |
+
) {
|
| 206 |
+
continue;
|
| 207 |
+
}
|
| 208 |
+
|
| 209 |
+
ArchivingHelper::deleteInvalidSummedColumnsFromDataTable($dataTable);
|
| 210 |
+
}
|
| 211 |
+
foreach ($flatPageTablesByType as $flatDataTable) {
|
| 212 |
+
// also removes unique visitor columns from the summary row, as those cannot
|
| 213 |
+
// be summed and would otherwise be aggregated into non-day periods
|
| 214 |
+
ArchivingHelper::deleteInvalidSummedColumnsFromDataTable($flatDataTable);
|
| 215 |
+
}
|
| 216 |
+
|
| 217 |
+
$nbSearches = array_sum($dataTable->getColumn(PiwikMetrics::INDEX_PAGE_NB_HITS));
|
| 218 |
+
$nbKeywords = $dataTable->getRowsCount();
|
| 219 |
+
|
| 220 |
+
$dataTable = $tablesByType[Action::TYPE_OUTLINK];
|
| 221 |
+
$nbOutlinks = array_sum($dataTable->getColumn(PiwikMetrics::INDEX_PAGE_NB_HITS));
|
| 222 |
+
$nbUniqOutlinks = array_sum($dataTable->getColumn(PiwikMetrics::INDEX_NB_VISITS));
|
| 223 |
+
|
| 224 |
+
$dataTable = $flatPageTablesByType[Action::TYPE_PAGE_URL];
|
| 225 |
+
$nbPageviews = array_sum($dataTable->getColumn(PiwikMetrics::INDEX_PAGE_NB_HITS));
|
| 226 |
+
$nbUniqPageviews = array_sum($dataTable->getColumn(PiwikMetrics::INDEX_NB_VISITS));
|
| 227 |
+
$nbSumTimeGeneration = array_sum($dataTable->getColumn(PiwikMetrics::INDEX_PAGE_SUM_TIME_GENERATION));
|
| 228 |
+
$nbHitsWithTimeGeneration = array_sum($dataTable->getColumn(PiwikMetrics::INDEX_PAGE_NB_HITS_WITH_TIME_GENERATION));
|
| 229 |
+
|
| 230 |
+
$dataTable = $tablesByType[Action::TYPE_DOWNLOAD];
|
| 231 |
+
$nbDownloads = array_sum($dataTable->getColumn(PiwikMetrics::INDEX_PAGE_NB_HITS));
|
| 232 |
+
$nbUniqDownloads = array_sum($dataTable->getColumn(PiwikMetrics::INDEX_NB_VISITS));
|
| 233 |
+
|
| 234 |
+
return [
|
| 235 |
+
// blob records
|
| 236 |
+
Archiver::PAGE_URLS_FLAT_RECORD_NAME => $flatPageTablesByType[Action::TYPE_PAGE_URL],
|
| 237 |
+
Archiver::PAGE_TITLES_FLAT_RECORD_NAME => $flatPageTablesByType[Action::TYPE_PAGE_TITLE],
|
| 238 |
+
Archiver::PAGE_URLS_RECORD_NAME => $tablesByType[Action::TYPE_PAGE_URL],
|
| 239 |
+
Archiver::PAGE_TITLES_RECORD_NAME => $tablesByType[Action::TYPE_PAGE_TITLE],
|
| 240 |
+
Archiver::DOWNLOADS_RECORD_NAME => $tablesByType[Action::TYPE_DOWNLOAD],
|
| 241 |
+
Archiver::OUTLINKS_RECORD_NAME => $tablesByType[Action::TYPE_OUTLINK],
|
| 242 |
+
Archiver::SITE_SEARCH_RECORD_NAME => $tablesByType[Action::TYPE_SITE_SEARCH],
|
| 243 |
+
|
| 244 |
+
// numeric records
|
| 245 |
+
Archiver::METRIC_SEARCHES_RECORD_NAME => $nbSearches,
|
| 246 |
+
Archiver::METRIC_KEYWORDS_RECORD_NAME => $nbKeywords,
|
| 247 |
+
|
| 248 |
+
Archiver::METRIC_OUTLINKS_RECORD_NAME => $nbOutlinks,
|
| 249 |
+
Archiver::METRIC_UNIQ_OUTLINKS_RECORD_NAME => $nbUniqOutlinks,
|
| 250 |
+
|
| 251 |
+
Archiver::METRIC_PAGEVIEWS_RECORD_NAME => $nbPageviews,
|
| 252 |
+
Archiver::METRIC_UNIQ_PAGEVIEWS_RECORD_NAME => $nbUniqPageviews,
|
| 253 |
+
Archiver::METRIC_SUM_TIME_RECORD_NAME => $nbSumTimeGeneration,
|
| 254 |
+
Archiver::METRIC_HITS_TIMED_RECORD_NAME => $nbHitsWithTimeGeneration,
|
| 255 |
+
|
| 256 |
+
Archiver::METRIC_DOWNLOADS_RECORD_NAME => $nbDownloads,
|
| 257 |
+
Archiver::METRIC_UNIQ_DOWNLOADS_RECORD_NAME => $nbUniqDownloads,
|
| 258 |
+
];
|
| 259 |
+
}
|
| 260 |
+
|
| 261 |
+
protected function beforeInsertBuiltFromFlatHierarchyRecord(
|
| 262 |
+
ArchiveProcessor $archiveProcessor,
|
| 263 |
+
Record $hierarchicalRecord,
|
| 264 |
+
DataTable $hierarchicalTable,
|
| 265 |
+
DataTable $flatTable
|
| 266 |
+
): void {
|
| 267 |
+
$recordName = $hierarchicalRecord->getName();
|
| 268 |
+
if (
|
| 269 |
+
$recordName !== Archiver::PAGE_URLS_RECORD_NAME
|
| 270 |
+
&& $recordName !== Archiver::PAGE_TITLES_RECORD_NAME
|
| 271 |
+
) {
|
| 272 |
+
return;
|
| 273 |
+
}
|
| 274 |
+
|
| 275 |
+
$this->finalizeBuiltFromFlatHierarchyTable($archiveProcessor, $hierarchicalTable, $recordName);
|
| 276 |
+
}
|
| 277 |
+
|
| 278 |
+
private function flatRowToHierarchyPath(Row $flatRow, int $actionType): ?array
|
| 279 |
+
{
|
| 280 |
+
$label = $flatRow->getColumn('label');
|
| 281 |
+
if (!is_string($label) || $label === '') {
|
| 282 |
+
return null;
|
| 283 |
+
}
|
| 284 |
+
|
| 285 |
+
if ($actionType === Action::TYPE_PAGE_URL) {
|
| 286 |
+
if ($label === ArchivingHelper::getUnknownActionName(Action::TYPE_PAGE_URL)) {
|
| 287 |
+
return [$label];
|
| 288 |
+
}
|
| 289 |
+
|
| 290 |
+
return ArchivingHelper::getActionExplodedNames(
|
| 291 |
+
ArchivingHelper::removePageUrlLeafMarkerFromFlatLabel($label),
|
| 292 |
+
$actionType
|
| 293 |
+
);
|
| 294 |
+
}
|
| 295 |
+
|
| 296 |
+
return ArchivingHelper::getActionExplodedNames($label, $actionType);
|
| 297 |
+
}
|
| 298 |
+
|
| 299 |
+
private function removeFlatPathMetadataFromDataTable(DataTable $dataTable): void
|
| 300 |
+
{
|
| 301 |
+
$summaryRow = $dataTable->getRowFromId(DataTable::ID_SUMMARY_ROW);
|
| 302 |
+
if ($summaryRow instanceof Row) {
|
| 303 |
+
$summaryRow->deleteMetadata(ArchivingHelper::ACTION_FLAT_PATH_METADATA_NAME);
|
| 304 |
+
}
|
| 305 |
+
|
| 306 |
+
foreach ($dataTable->getRows() as $row) {
|
| 307 |
+
$row->deleteMetadata(ArchivingHelper::ACTION_FLAT_PATH_METADATA_NAME);
|
| 308 |
+
|
| 309 |
+
$subtable = $row->getSubtable();
|
| 310 |
+
if ($subtable instanceof DataTable) {
|
| 311 |
+
$this->removeFlatPathMetadataFromDataTable($subtable);
|
| 312 |
+
}
|
| 313 |
+
}
|
| 314 |
+
}
|
| 315 |
+
|
| 316 |
+
private function finalizeBuiltFromFlatHierarchyTable(
|
| 317 |
+
ArchiveProcessor $archiveProcessor,
|
| 318 |
+
DataTable $hierarchicalTable,
|
| 319 |
+
string $recordName
|
| 320 |
+
): void {
|
| 321 |
+
$hierarchicalTable->setMetadata(DataTable::COLUMN_AGGREGATION_OPS_METADATA_NAME, Metrics::getColumnsAggregationOperation());
|
| 322 |
+
|
| 323 |
+
if ($recordName === Archiver::PAGE_URLS_RECORD_NAME) {
|
| 324 |
+
$prefix = $archiveProcessor->getParams()->getSite()->getMainUrl();
|
| 325 |
+
$prefix = rtrim($prefix, '/') . '/';
|
| 326 |
+
ArchivingHelper::setFolderPathMetadata($hierarchicalTable, $isUrl = true, $prefix);
|
| 327 |
+
} elseif ($recordName === Archiver::PAGE_TITLES_RECORD_NAME) {
|
| 328 |
+
ArchivingHelper::setFolderPathMetadata($hierarchicalTable, $isUrl = false);
|
| 329 |
+
}
|
| 330 |
+
|
| 331 |
+
$this->removeFlatPathMetadataFromDataTable($hierarchicalTable);
|
| 332 |
+
ArchivingHelper::deleteInvalidSummedColumnsFromDataTable($hierarchicalTable);
|
| 333 |
+
}
|
| 334 |
+
|
| 335 |
+
private function isFlatArchivingEnabled(): bool
|
| 336 |
+
{
|
| 337 |
+
ArchivingHelper::reloadConfig();
|
| 338 |
+
return ArchivingHelper::$maximumRowsInDataTableFlat > 0;
|
| 339 |
+
}
|
| 340 |
+
|
| 341 |
+
private function setHierarchyBuiltFromFlatRecord(
|
| 342 |
+
Record $record,
|
| 343 |
+
string $flatRecordName,
|
| 344 |
+
callable $flatToHierarchyPathCallback,
|
| 345 |
+
callable $legacyHierarchyToFlatReducer
|
| 346 |
+
): void {
|
| 347 |
+
$record->setBuiltFromFlatRecord(
|
| 348 |
+
$flatRecordName,
|
| 349 |
+
$flatToHierarchyPathCallback,
|
| 350 |
+
$legacyHierarchyToFlatReducer
|
| 351 |
+
)->setMaxRowsInTable(0)->setMaxRowsInSubtable(0);
|
| 352 |
+
}
|
| 353 |
+
|
| 354 |
+
private function buildDayHierarchicalTableFromFlatTable(
|
| 355 |
+
DataTable $flatTable,
|
| 356 |
+
callable $flatToHierarchyPathCallback
|
| 357 |
+
): DataTable {
|
| 358 |
+
return $this->buildHierarchicalTableFromFlatTable(
|
| 359 |
+
$flatTable,
|
| 360 |
+
Metrics::getColumnsAggregationOperation(),
|
| 361 |
+
$flatToHierarchyPathCallback,
|
| 362 |
+
$this->getDefaultHierarchyRowColumns()
|
| 363 |
+
);
|
| 364 |
+
}
|
| 365 |
+
|
| 366 |
+
private function getDefaultHierarchyRowColumns(): array
|
| 367 |
+
{
|
| 368 |
+
return [
|
| 369 |
+
PiwikMetrics::INDEX_NB_VISITS => 0,
|
| 370 |
+
PiwikMetrics::INDEX_NB_UNIQ_VISITORS => 0,
|
| 371 |
+
PiwikMetrics::INDEX_PAGE_NB_HITS => 0,
|
| 372 |
+
PiwikMetrics::INDEX_PAGE_SUM_TIME_SPENT => 0,
|
| 373 |
+
];
|
| 374 |
+
}
|
| 375 |
+
|
| 376 |
+
private function aggregateLegacyHierarchical(ArchiveProcessor $archiveProcessor): array
|
| 377 |
+
{
|
| 378 |
+
$rankingQueryLimit = ArchivingHelper::getRankingQueryLimit();
|
| 379 |
+
ArchivingHelper::reloadConfig();
|
| 380 |
+
|
| 381 |
+
$tablesByType = $this->makeReportTables();
|
| 382 |
+
|
| 383 |
+
$this->archiveDayActions(
|
| 384 |
+
$archiveProcessor,
|
| 385 |
+
$rankingQueryLimit,
|
| 386 |
+
$tablesByType,
|
| 387 |
+
array_diff(array_keys($tablesByType), [Action::TYPE_SITE_SEARCH]),
|
| 388 |
+
true
|
| 389 |
+
);
|
| 390 |
+
|
| 391 |
+
if ($archiveProcessor->getParams()->getSite()->isSiteSearchEnabled()) {
|
| 392 |
+
$rankingQueryLimitSiteSearch = max($rankingQueryLimit, ArchivingHelper::$maximumRowsInDataTableSiteSearch);
|
| 393 |
+
$this->archiveDayActions($archiveProcessor, $rankingQueryLimitSiteSearch, $tablesByType, [Action::TYPE_SITE_SEARCH], false);
|
| 394 |
+
}
|
| 395 |
+
|
| 396 |
+
$this->archiveDayEntryActions($archiveProcessor->getLogAggregator(), $tablesByType, $rankingQueryLimit);
|
| 397 |
+
$this->archiveDayExitActions($archiveProcessor->getLogAggregator(), $tablesByType, $rankingQueryLimit);
|
| 398 |
+
$this->archiveDayActionsTime($archiveProcessor->getLogAggregator(), $tablesByType, $rankingQueryLimit);
|
| 399 |
+
$this->archiveDayActionsGoals($archiveProcessor, $rankingQueryLimit);
|
| 400 |
+
|
| 401 |
+
ArchivingHelper::clearActionsCache();
|
| 402 |
+
|
| 403 |
+
$prefix = $archiveProcessor->getParams()->getSite()->getMainUrl();
|
| 404 |
+
$prefix = rtrim($prefix, '/') . '/';
|
| 405 |
+
ArchivingHelper::setFolderPathMetadata($tablesByType[Action::TYPE_PAGE_URL], $isUrl = true, $prefix);
|
| 406 |
+
ArchivingHelper::setFolderPathMetadata($tablesByType[Action::TYPE_PAGE_TITLE], $isUrl = false);
|
| 407 |
+
|
| 408 |
+
$dataTable = $tablesByType[Action::TYPE_SITE_SEARCH];
|
| 409 |
+
$this->deleteUnusedColumnsFromKeywordsDataTable($dataTable);
|
| 410 |
+
|
| 411 |
+
foreach ($tablesByType as $dataTable) {
|
| 412 |
+
ArchivingHelper::deleteInvalidSummedColumnsFromDataTable($dataTable);
|
| 413 |
+
}
|
| 414 |
+
|
| 415 |
+
$nbSearches = array_sum($dataTable->getColumn(PiwikMetrics::INDEX_PAGE_NB_HITS));
|
| 416 |
+
$nbKeywords = $dataTable->getRowsCount();
|
| 417 |
+
|
| 418 |
+
$dataTable = $tablesByType[Action::TYPE_OUTLINK];
|
| 419 |
+
$nbOutlinks = array_sum($dataTable->getColumn(PiwikMetrics::INDEX_PAGE_NB_HITS));
|
| 420 |
+
$nbUniqOutlinks = array_sum($dataTable->getColumn(PiwikMetrics::INDEX_NB_VISITS));
|
| 421 |
+
|
| 422 |
+
$dataTable = $tablesByType[Action::TYPE_PAGE_URL];
|
| 423 |
+
$nbPageviews = array_sum($dataTable->getColumn(PiwikMetrics::INDEX_PAGE_NB_HITS));
|
| 424 |
+
$nbUniqPageviews = array_sum($dataTable->getColumn(PiwikMetrics::INDEX_NB_VISITS));
|
| 425 |
+
$nbSumTimeGeneration = array_sum($dataTable->getColumn(PiwikMetrics::INDEX_PAGE_SUM_TIME_GENERATION));
|
| 426 |
+
$nbHitsWithTimeGeneration = array_sum($dataTable->getColumn(PiwikMetrics::INDEX_PAGE_NB_HITS_WITH_TIME_GENERATION));
|
| 427 |
+
|
| 428 |
+
$dataTable = $tablesByType[Action::TYPE_DOWNLOAD];
|
| 429 |
+
$nbDownloads = array_sum($dataTable->getColumn(PiwikMetrics::INDEX_PAGE_NB_HITS));
|
| 430 |
+
$nbUniqDownloads = array_sum($dataTable->getColumn(PiwikMetrics::INDEX_NB_VISITS));
|
| 431 |
+
|
| 432 |
+
return [
|
| 433 |
+
Archiver::PAGE_URLS_RECORD_NAME => $tablesByType[Action::TYPE_PAGE_URL],
|
| 434 |
+
Archiver::PAGE_TITLES_RECORD_NAME => $tablesByType[Action::TYPE_PAGE_TITLE],
|
| 435 |
+
Archiver::DOWNLOADS_RECORD_NAME => $tablesByType[Action::TYPE_DOWNLOAD],
|
| 436 |
+
Archiver::OUTLINKS_RECORD_NAME => $tablesByType[Action::TYPE_OUTLINK],
|
| 437 |
+
Archiver::SITE_SEARCH_RECORD_NAME => $tablesByType[Action::TYPE_SITE_SEARCH],
|
| 438 |
+
|
| 439 |
+
Archiver::METRIC_SEARCHES_RECORD_NAME => $nbSearches,
|
| 440 |
+
Archiver::METRIC_KEYWORDS_RECORD_NAME => $nbKeywords,
|
| 441 |
+
Archiver::METRIC_OUTLINKS_RECORD_NAME => $nbOutlinks,
|
| 442 |
+
Archiver::METRIC_UNIQ_OUTLINKS_RECORD_NAME => $nbUniqOutlinks,
|
| 443 |
+
Archiver::METRIC_PAGEVIEWS_RECORD_NAME => $nbPageviews,
|
| 444 |
+
Archiver::METRIC_UNIQ_PAGEVIEWS_RECORD_NAME => $nbUniqPageviews,
|
| 445 |
+
Archiver::METRIC_SUM_TIME_RECORD_NAME => $nbSumTimeGeneration,
|
| 446 |
+
Archiver::METRIC_HITS_TIMED_RECORD_NAME => $nbHitsWithTimeGeneration,
|
| 447 |
+
Archiver::METRIC_DOWNLOADS_RECORD_NAME => $nbDownloads,
|
| 448 |
+
Archiver::METRIC_UNIQ_DOWNLOADS_RECORD_NAME => $nbUniqDownloads,
|
| 449 |
+
];
|
| 450 |
+
}
|
| 451 |
+
|
| 452 |
+
protected function deleteUnusedColumnsFromKeywordsDataTable(DataTable $dataTable): void
|
| 453 |
+
{
|
| 454 |
+
$columnsToDelete = array(
|
| 455 |
+
PiwikMetrics::INDEX_NB_UNIQ_VISITORS,
|
| 456 |
+
PiwikMetrics::INDEX_PAGE_IS_FOLLOWING_SITE_SEARCH_NB_HITS,
|
| 457 |
+
PiwikMetrics::INDEX_PAGE_ENTRY_NB_UNIQ_VISITORS,
|
| 458 |
+
PiwikMetrics::INDEX_PAGE_ENTRY_NB_ACTIONS,
|
| 459 |
+
PiwikMetrics::INDEX_PAGE_ENTRY_SUM_VISIT_LENGTH,
|
| 460 |
+
PiwikMetrics::INDEX_PAGE_ENTRY_NB_VISITS,
|
| 461 |
+
PiwikMetrics::INDEX_PAGE_ENTRY_BOUNCE_COUNT,
|
| 462 |
+
PiwikMetrics::INDEX_PAGE_EXIT_NB_UNIQ_VISITORS,
|
| 463 |
+
);
|
| 464 |
+
$dataTable->deleteColumns($columnsToDelete);
|
| 465 |
+
}
|
| 466 |
+
|
| 467 |
+
private function makeReportTables(): array
|
| 468 |
+
{
|
| 469 |
+
$result = [];
|
| 470 |
+
foreach (Metrics::$actionTypes as $type) {
|
| 471 |
+
$dataTable = new DataTable();
|
| 472 |
+
if ($type === Action::TYPE_SITE_SEARCH) {
|
| 473 |
+
$maxRows = ArchivingHelper::$maximumRowsInDataTableSiteSearch;
|
| 474 |
+
} else {
|
| 475 |
+
$maxRows = ArchivingHelper::$maximumRowsInDataTableLevelZero;
|
| 476 |
+
}
|
| 477 |
+
$dataTable->setMaximumAllowedRows($maxRows);
|
| 478 |
+
|
| 479 |
+
if (
|
| 480 |
+
$type == Action::TYPE_PAGE_URL
|
| 481 |
+
|| $type == Action::TYPE_PAGE_TITLE
|
| 482 |
+
) {
|
| 483 |
+
// for page urls and page titles, performance metrics exist and have to be aggregated correctly
|
| 484 |
+
$dataTable->setMetadata(DataTable::COLUMN_AGGREGATION_OPS_METADATA_NAME, Metrics::getColumnsAggregationOperation());
|
| 485 |
+
}
|
| 486 |
+
|
| 487 |
+
$result[$type] = $dataTable;
|
| 488 |
+
}
|
| 489 |
+
return $result;
|
| 490 |
+
}
|
| 491 |
+
|
| 492 |
+
private function makeFlatPageTables(): array
|
| 493 |
+
{
|
| 494 |
+
$tables = [];
|
| 495 |
+
$maxRowsInFlatTable = ArchivingHelper::$maximumRowsInDataTableFlat;
|
| 496 |
+
foreach ([Action::TYPE_PAGE_URL, Action::TYPE_PAGE_TITLE] as $type) {
|
| 497 |
+
$table = new DataTable();
|
| 498 |
+
$table->setMaximumAllowedRows($maxRowsInFlatTable);
|
| 499 |
+
$table->setMetadata(DataTable::COLUMN_AGGREGATION_OPS_METADATA_NAME, Metrics::getColumnsAggregationOperation());
|
| 500 |
+
$tables[$type] = $table;
|
| 501 |
+
}
|
| 502 |
+
|
| 503 |
+
return $tables;
|
| 504 |
+
}
|
| 505 |
+
|
| 506 |
+
protected function archiveDayActions(
|
| 507 |
+
ArchiveProcessor $archiveProcessor,
|
| 508 |
+
int $rankingQueryLimit,
|
| 509 |
+
array $actionsTablesByType,
|
| 510 |
+
$actionTypes,
|
| 511 |
+
bool $includePageNotDefined,
|
| 512 |
+
array $tableModesByType = []
|
| 513 |
+
): void {
|
| 514 |
+
$logAggregator = $archiveProcessor->getLogAggregator();
|
| 515 |
+
|
| 516 |
+
$metricsConfig = Metrics::getActionMetrics();
|
| 517 |
+
|
| 518 |
+
$select = "log_action.name,
|
| 519 |
+
log_action.type,
|
| 520 |
+
log_action.idaction,
|
| 521 |
+
log_action.url_prefix";
|
| 522 |
+
|
| 523 |
+
$select = $this->addMetricsToSelect($select, $metricsConfig);
|
| 524 |
+
|
| 525 |
+
$from = array(
|
| 526 |
+
"log_link_visit_action",
|
| 527 |
+
array(
|
| 528 |
+
"table" => "log_action",
|
| 529 |
+
"joinOn" => "log_link_visit_action.%s = log_action.idaction",
|
| 530 |
+
),
|
| 531 |
+
);
|
| 532 |
+
|
| 533 |
+
$where = $logAggregator->getWhereStatement('log_link_visit_action', 'server_time');
|
| 534 |
+
$where .= " AND log_link_visit_action.%s IS NOT NULL"
|
| 535 |
+
. $this->getWhereClauseActionIsNotEvent();
|
| 536 |
+
|
| 537 |
+
$actionTypesWhere = "log_action.type IN (" . implode(", ", $actionTypes) . ")";
|
| 538 |
+
if ($includePageNotDefined) {
|
| 539 |
+
$actionTypesWhere = "(" . $actionTypesWhere . " OR log_action.type IS NULL)";
|
| 540 |
+
}
|
| 541 |
+
$where .= " AND $actionTypesWhere";
|
| 542 |
+
|
| 543 |
+
$groupBy = "log_link_visit_action.%s";
|
| 544 |
+
$orderBy = "`" . PiwikMetrics::INDEX_PAGE_NB_HITS . "` DESC, name ASC";
|
| 545 |
+
|
| 546 |
+
$siteSearchEnabled = $archiveProcessor->getParams()->getSite()->isSiteSearchEnabled();
|
| 547 |
+
|
| 548 |
+
$rankingQuery = false;
|
| 549 |
+
if ($rankingQueryLimit > 0) {
|
| 550 |
+
$rankingQuery = new RankingQuery($rankingQueryLimit);
|
| 551 |
+
$rankingQuery->addLabelColumn(array('idaction', 'name'));
|
| 552 |
+
$rankingQuery->addColumn('url_prefix');
|
| 553 |
+
|
| 554 |
+
if ($siteSearchEnabled) {
|
| 555 |
+
$rankingQuery->addColumn(PiwikMetrics::INDEX_SITE_SEARCH_HAS_NO_RESULT, 'min');
|
| 556 |
+
$rankingQuery->addColumn(PiwikMetrics::INDEX_PAGE_IS_FOLLOWING_SITE_SEARCH_NB_HITS, 'sum');
|
| 557 |
+
}
|
| 558 |
+
|
| 559 |
+
$this->addMetricsToRankingQuery($rankingQuery, $metricsConfig);
|
| 560 |
+
|
| 561 |
+
$rankingQuery->partitionResultIntoMultipleGroups('type', $actionTypes);
|
| 562 |
+
}
|
| 563 |
+
|
| 564 |
+
// Special Magic to get
|
| 565 |
+
// 1) No result Keywords
|
| 566 |
+
// 2) For each page view, count number of times the referrer page was a Site Search
|
| 567 |
+
if ($siteSearchEnabled) {
|
| 568 |
+
$this->updateQuerySelectFromForSiteSearch($select, $from);
|
| 569 |
+
}
|
| 570 |
+
|
| 571 |
+
$this->archiveDayQueryProcess(
|
| 572 |
+
$logAggregator,
|
| 573 |
+
$actionsTablesByType,
|
| 574 |
+
$select,
|
| 575 |
+
$from,
|
| 576 |
+
$where,
|
| 577 |
+
$groupBy,
|
| 578 |
+
$orderBy,
|
| 579 |
+
"idaction_name",
|
| 580 |
+
$rankingQuery,
|
| 581 |
+
$metricsConfig,
|
| 582 |
+
$tableModesByType
|
| 583 |
+
);
|
| 584 |
+
$this->archiveDayQueryProcess(
|
| 585 |
+
$logAggregator,
|
| 586 |
+
$actionsTablesByType,
|
| 587 |
+
$select,
|
| 588 |
+
$from,
|
| 589 |
+
$where,
|
| 590 |
+
$groupBy,
|
| 591 |
+
$orderBy,
|
| 592 |
+
"idaction_url",
|
| 593 |
+
$rankingQuery,
|
| 594 |
+
$metricsConfig,
|
| 595 |
+
$tableModesByType
|
| 596 |
+
);
|
| 597 |
+
}
|
| 598 |
+
|
| 599 |
+
/**
|
| 600 |
+
* Entry actions for Page URLs and Page names
|
| 601 |
+
*/
|
| 602 |
+
protected function archiveDayEntryActions(LogAggregator $logAggregator, array $actionsTablesByType, int $rankingQueryLimit, array $tableModesByType = [])
|
| 603 |
+
{
|
| 604 |
+
$rankingQuery = false;
|
| 605 |
+
if ($rankingQueryLimit > 0) {
|
| 606 |
+
$rankingQuery = new RankingQuery($rankingQueryLimit);
|
| 607 |
+
$rankingQuery->addLabelColumn('idaction');
|
| 608 |
+
$rankingQuery->addColumn(PiwikMetrics::INDEX_PAGE_ENTRY_NB_UNIQ_VISITORS);
|
| 609 |
+
$rankingQuery->addColumn(array(PiwikMetrics::INDEX_PAGE_ENTRY_NB_VISITS,
|
| 610 |
+
PiwikMetrics::INDEX_PAGE_ENTRY_NB_ACTIONS,
|
| 611 |
+
PiwikMetrics::INDEX_PAGE_ENTRY_SUM_VISIT_LENGTH,
|
| 612 |
+
PiwikMetrics::INDEX_PAGE_ENTRY_BOUNCE_COUNT), 'sum');
|
| 613 |
+
$rankingQuery->partitionResultIntoMultipleGroups('type', array_keys($actionsTablesByType));
|
| 614 |
+
|
| 615 |
+
$extraSelects = 'log_action.type, log_action.name,';
|
| 616 |
+
$from = array(
|
| 617 |
+
"log_visit",
|
| 618 |
+
array(
|
| 619 |
+
"table" => "log_action",
|
| 620 |
+
"joinOn" => "log_visit.%s = log_action.idaction",
|
| 621 |
+
),
|
| 622 |
+
);
|
| 623 |
+
$orderBy = "`" . PiwikMetrics::INDEX_PAGE_ENTRY_NB_ACTIONS . "` DESC, log_action.name ASC";
|
| 624 |
+
} else {
|
| 625 |
+
$extraSelects = false;
|
| 626 |
+
$from = "log_visit";
|
| 627 |
+
$orderBy = false;
|
| 628 |
+
}
|
| 629 |
+
|
| 630 |
+
$select = "log_visit.%s as idaction, $extraSelects
|
| 631 |
+
count(distinct log_visit.idvisitor) as `" . PiwikMetrics::INDEX_PAGE_ENTRY_NB_UNIQ_VISITORS . "`,
|
| 632 |
+
count(*) as `" . PiwikMetrics::INDEX_PAGE_ENTRY_NB_VISITS . "`,
|
| 633 |
+
sum(log_visit.visit_total_actions) as `" . PiwikMetrics::INDEX_PAGE_ENTRY_NB_ACTIONS . "`,
|
| 634 |
+
sum(log_visit.visit_total_time) as `" . PiwikMetrics::INDEX_PAGE_ENTRY_SUM_VISIT_LENGTH . "`,
|
| 635 |
+
sum(case log_visit.visit_total_actions when 1 then 1 when 0 then 1 else 0 end) as `" . PiwikMetrics::INDEX_PAGE_ENTRY_BOUNCE_COUNT . "`";
|
| 636 |
+
|
| 637 |
+
$where = $logAggregator->getWhereStatement('log_visit', 'visit_last_action_time');
|
| 638 |
+
$where .= " AND log_visit.%s > 0";
|
| 639 |
+
|
| 640 |
+
$groupBy = "log_visit.%s";
|
| 641 |
+
|
| 642 |
+
$this->archiveDayQueryProcess(
|
| 643 |
+
$logAggregator,
|
| 644 |
+
$actionsTablesByType,
|
| 645 |
+
$select,
|
| 646 |
+
$from,
|
| 647 |
+
$where,
|
| 648 |
+
$groupBy,
|
| 649 |
+
$orderBy,
|
| 650 |
+
"visit_entry_idaction_url",
|
| 651 |
+
$rankingQuery,
|
| 652 |
+
[],
|
| 653 |
+
$tableModesByType
|
| 654 |
+
);
|
| 655 |
+
|
| 656 |
+
$this->archiveDayQueryProcess(
|
| 657 |
+
$logAggregator,
|
| 658 |
+
$actionsTablesByType,
|
| 659 |
+
$select,
|
| 660 |
+
$from,
|
| 661 |
+
$where,
|
| 662 |
+
$groupBy,
|
| 663 |
+
$orderBy,
|
| 664 |
+
"visit_entry_idaction_name",
|
| 665 |
+
$rankingQuery,
|
| 666 |
+
[],
|
| 667 |
+
$tableModesByType
|
| 668 |
+
);
|
| 669 |
+
}
|
| 670 |
+
|
| 671 |
+
/**
|
| 672 |
+
* Exit actions
|
| 673 |
+
*/
|
| 674 |
+
protected function archiveDayExitActions(LogAggregator $logAggregator, array $actionsTablesByType, int $rankingQueryLimit, array $tableModesByType = [])
|
| 675 |
+
{
|
| 676 |
+
$rankingQuery = false;
|
| 677 |
+
if ($rankingQueryLimit > 0) {
|
| 678 |
+
$rankingQuery = new RankingQuery($rankingQueryLimit);
|
| 679 |
+
$rankingQuery->addLabelColumn('idaction');
|
| 680 |
+
$rankingQuery->addColumn(PiwikMetrics::INDEX_PAGE_EXIT_NB_UNIQ_VISITORS);
|
| 681 |
+
$rankingQuery->addColumn(PiwikMetrics::INDEX_PAGE_EXIT_NB_VISITS, 'sum');
|
| 682 |
+
$rankingQuery->partitionResultIntoMultipleGroups('type', array_keys($actionsTablesByType));
|
| 683 |
+
|
| 684 |
+
$extraSelects = 'log_action.type, log_action.name,';
|
| 685 |
+
$from = array(
|
| 686 |
+
"log_visit",
|
| 687 |
+
array(
|
| 688 |
+
"table" => "log_action",
|
| 689 |
+
"joinOn" => "log_visit.%s = log_action.idaction",
|
| 690 |
+
),
|
| 691 |
+
);
|
| 692 |
+
$orderBy = "`" . PiwikMetrics::INDEX_PAGE_EXIT_NB_VISITS . "` DESC, log_action.name ASC";
|
| 693 |
+
} else {
|
| 694 |
+
$extraSelects = false;
|
| 695 |
+
$from = "log_visit";
|
| 696 |
+
$orderBy = false;
|
| 697 |
+
}
|
| 698 |
+
|
| 699 |
+
$select = "log_visit.%s as idaction, $extraSelects
|
| 700 |
+
count(distinct log_visit.idvisitor) as `" . PiwikMetrics::INDEX_PAGE_EXIT_NB_UNIQ_VISITORS . "`,
|
| 701 |
+
count(*) as `" . PiwikMetrics::INDEX_PAGE_EXIT_NB_VISITS . "`";
|
| 702 |
+
|
| 703 |
+
$where = $logAggregator->getWhereStatement('log_visit', 'visit_last_action_time');
|
| 704 |
+
$where .= " AND log_visit.%s > 0";
|
| 705 |
+
|
| 706 |
+
$groupBy = "log_visit.%s";
|
| 707 |
+
|
| 708 |
+
$this->archiveDayQueryProcess(
|
| 709 |
+
$logAggregator,
|
| 710 |
+
$actionsTablesByType,
|
| 711 |
+
$select,
|
| 712 |
+
$from,
|
| 713 |
+
$where,
|
| 714 |
+
$groupBy,
|
| 715 |
+
$orderBy,
|
| 716 |
+
"visit_exit_idaction_url",
|
| 717 |
+
$rankingQuery,
|
| 718 |
+
[],
|
| 719 |
+
$tableModesByType
|
| 720 |
+
);
|
| 721 |
+
|
| 722 |
+
$this->archiveDayQueryProcess(
|
| 723 |
+
$logAggregator,
|
| 724 |
+
$actionsTablesByType,
|
| 725 |
+
$select,
|
| 726 |
+
$from,
|
| 727 |
+
$where,
|
| 728 |
+
$groupBy,
|
| 729 |
+
$orderBy,
|
| 730 |
+
"visit_exit_idaction_name",
|
| 731 |
+
$rankingQuery,
|
| 732 |
+
[],
|
| 733 |
+
$tableModesByType
|
| 734 |
+
);
|
| 735 |
+
|
| 736 |
+
return array($rankingQuery, $extraSelects, $from, $orderBy, $select, $where, $groupBy);
|
| 737 |
+
}
|
| 738 |
+
|
| 739 |
+
/**
|
| 740 |
+
* Time per action
|
| 741 |
+
*/
|
| 742 |
+
protected function archiveDayActionsTime(LogAggregator $logAggregator, array $actionsTablesByType, int $rankingQueryLimit, array $tableModesByType = [])
|
| 743 |
+
{
|
| 744 |
+
$rankingQuery = false;
|
| 745 |
+
if ($rankingQueryLimit > 0) {
|
| 746 |
+
$rankingQuery = new RankingQuery($rankingQueryLimit);
|
| 747 |
+
$rankingQuery->addLabelColumn('idaction');
|
| 748 |
+
$rankingQuery->addColumn(PiwikMetrics::INDEX_PAGE_SUM_TIME_SPENT, 'sum');
|
| 749 |
+
$rankingQuery->partitionResultIntoMultipleGroups('type', array_keys($actionsTablesByType));
|
| 750 |
+
|
| 751 |
+
$extraSelects = "log_action.type, log_action.name, count(*) as `" . PiwikMetrics::INDEX_PAGE_NB_HITS . "`,";
|
| 752 |
+
$from = array(
|
| 753 |
+
"log_link_visit_action",
|
| 754 |
+
array(
|
| 755 |
+
"table" => "log_action",
|
| 756 |
+
"joinOn" => "log_link_visit_action.%s = log_action.idaction",
|
| 757 |
+
),
|
| 758 |
+
);
|
| 759 |
+
$orderBy = "`" . PiwikMetrics::INDEX_PAGE_NB_HITS . "` DESC, log_action.name ASC";
|
| 760 |
+
} else {
|
| 761 |
+
$extraSelects = false;
|
| 762 |
+
$from = "log_link_visit_action";
|
| 763 |
+
$orderBy = false;
|
| 764 |
+
}
|
| 765 |
+
|
| 766 |
+
$select = "log_link_visit_action.%s as idaction, $extraSelects
|
| 767 |
+
sum(log_link_visit_action.time_spent_ref_action) as `" . PiwikMetrics::INDEX_PAGE_SUM_TIME_SPENT . "`";
|
| 768 |
+
|
| 769 |
+
$where = $logAggregator->getWhereStatement('log_link_visit_action', 'server_time');
|
| 770 |
+
$where .= " AND log_link_visit_action.time_spent_ref_action > 0
|
| 771 |
+
AND log_link_visit_action.%s > 0"
|
| 772 |
+
. $this->getWhereClauseActionIsNotEvent();
|
| 773 |
+
|
| 774 |
+
$groupBy = "log_link_visit_action.%s";
|
| 775 |
+
|
| 776 |
+
$this->archiveDayQueryProcess(
|
| 777 |
+
$logAggregator,
|
| 778 |
+
$actionsTablesByType,
|
| 779 |
+
$select,
|
| 780 |
+
$from,
|
| 781 |
+
$where,
|
| 782 |
+
$groupBy,
|
| 783 |
+
$orderBy,
|
| 784 |
+
"idaction_url_ref",
|
| 785 |
+
$rankingQuery,
|
| 786 |
+
[],
|
| 787 |
+
$tableModesByType
|
| 788 |
+
);
|
| 789 |
+
|
| 790 |
+
$this->archiveDayQueryProcess(
|
| 791 |
+
$logAggregator,
|
| 792 |
+
$actionsTablesByType,
|
| 793 |
+
$select,
|
| 794 |
+
$from,
|
| 795 |
+
$where,
|
| 796 |
+
$groupBy,
|
| 797 |
+
$orderBy,
|
| 798 |
+
"idaction_name_ref",
|
| 799 |
+
$rankingQuery,
|
| 800 |
+
[],
|
| 801 |
+
$tableModesByType
|
| 802 |
+
);
|
| 803 |
+
}
|
| 804 |
+
|
| 805 |
+
protected function archiveDayQueryProcess(
|
| 806 |
+
LogAggregator $logAggregator,
|
| 807 |
+
array $actionsTablesByType,
|
| 808 |
+
string $select,
|
| 809 |
+
$from,
|
| 810 |
+
string $where,
|
| 811 |
+
string $groupBy,
|
| 812 |
+
$orderBy,
|
| 813 |
+
string $sprintfField,
|
| 814 |
+
?RankingQuery $rankingQuery = null,
|
| 815 |
+
array $metricsConfig = array(),
|
| 816 |
+
array $tableModesByType = []
|
| 817 |
+
): void {
|
| 818 |
+
$select = sprintf($select, $sprintfField);
|
| 819 |
+
|
| 820 |
+
// get query with segmentation
|
| 821 |
+
$query = $logAggregator->generateQuery($select, $from, $where, $groupBy, $orderBy);
|
| 822 |
+
|
| 823 |
+
// replace the rest of the %s
|
| 824 |
+
$querySql = str_replace("%s", $sprintfField, $query['sql']);
|
| 825 |
+
|
| 826 |
+
// apply ranking query
|
| 827 |
+
if ($rankingQuery) {
|
| 828 |
+
$querySql = $rankingQuery->generateRankingQuery($querySql);
|
| 829 |
+
}
|
| 830 |
+
|
| 831 |
+
// get result
|
| 832 |
+
$resultSet = $logAggregator->getDb()->query($querySql, $query['bind']);
|
| 833 |
+
ArchivingHelper::updateActionsTableWithRowQuery(
|
| 834 |
+
$resultSet,
|
| 835 |
+
$sprintfField,
|
| 836 |
+
$actionsTablesByType,
|
| 837 |
+
$metricsConfig,
|
| 838 |
+
$tableModesByType
|
| 839 |
+
);
|
| 840 |
+
}
|
| 841 |
+
|
| 842 |
+
protected function updateQuerySelectFromForSiteSearch(string &$select, array &$from): void
|
| 843 |
+
{
|
| 844 |
+
$selectFlagNoResultKeywords = ",
|
| 845 |
+
MAX(log_link_visit_action.search_count) = 0 AS `" . PiwikMetrics::INDEX_SITE_SEARCH_HAS_NO_RESULT . "`";
|
| 846 |
+
|
| 847 |
+
// we need an extra JOIN to know whether the referrer "idaction_name_ref" was a Site Search request
|
| 848 |
+
$from[] = array(
|
| 849 |
+
"table" => "log_action",
|
| 850 |
+
"tableAlias" => "log_action_name_ref",
|
| 851 |
+
"joinOn" => "log_link_visit_action.idaction_name_ref = log_action_name_ref.idaction",
|
| 852 |
+
);
|
| 853 |
+
|
| 854 |
+
$selectPageIsFollowingSiteSearch = ",
|
| 855 |
+
SUM( CASE WHEN log_action_name_ref.type = " . Action::TYPE_SITE_SEARCH . "
|
| 856 |
+
THEN 1 ELSE 0 END)
|
| 857 |
+
AS `" . PiwikMetrics::INDEX_PAGE_IS_FOLLOWING_SITE_SEARCH_NB_HITS . "`";
|
| 858 |
+
|
| 859 |
+
$select .= $selectFlagNoResultKeywords
|
| 860 |
+
. $selectPageIsFollowingSiteSearch;
|
| 861 |
+
}
|
| 862 |
+
|
| 863 |
+
private function addMetricsToRankingQuery(RankingQuery $rankingQuery, array $metricsConfig): void
|
| 864 |
+
{
|
| 865 |
+
foreach ($metricsConfig as $metric => $config) {
|
| 866 |
+
if (!empty($config['aggregation'])) {
|
| 867 |
+
$rankingQuery->addColumn($metric, $config['aggregation']);
|
| 868 |
+
} else {
|
| 869 |
+
$rankingQuery->addColumn($metric);
|
| 870 |
+
}
|
| 871 |
+
}
|
| 872 |
+
}
|
| 873 |
+
|
| 874 |
+
private function addMetricsToSelect(string $select, array $metricsConfig): string
|
| 875 |
+
{
|
| 876 |
+
if (!empty($metricsConfig)) {
|
| 877 |
+
foreach ($metricsConfig as $metric => $config) {
|
| 878 |
+
$select .= ', ' . $config['query'] . " as `" . $metric . "`";
|
| 879 |
+
}
|
| 880 |
+
}
|
| 881 |
+
|
| 882 |
+
return $select;
|
| 883 |
+
}
|
| 884 |
+
|
| 885 |
+
protected function getWhereClauseActionIsNotEvent(): string
|
| 886 |
+
{
|
| 887 |
+
return " AND log_link_visit_action.idaction_event_category IS NULL";
|
| 888 |
+
}
|
| 889 |
+
|
| 890 |
+
/**
|
| 891 |
+
* Add goals data for each combination of url / title and pageviews / entries
|
| 892 |
+
*/
|
| 893 |
+
protected function archiveDayActionsGoals(ArchiveProcessor $archiveProcessor, int $rankingQueryLimit): void
|
| 894 |
+
{
|
| 895 |
+
$site = $archiveProcessor->getParams()->getSite();
|
| 896 |
+
|
| 897 |
+
if (
|
| 898 |
+
!\Piwik\Common::isGoalPluginEnabled() ||
|
| 899 |
+
GeneralConfig::getConfigValue('disable_archive_actions_goals', $site->getId())
|
| 900 |
+
) {
|
| 901 |
+
return;
|
| 902 |
+
}
|
| 903 |
+
|
| 904 |
+
$goals = $this->getGoalsForSite($site->getId());
|
| 905 |
+
|
| 906 |
+
// Add orders and abandoned cart codes if the site is enabled for ecommerce
|
| 907 |
+
if ($site->isEcommerceEnabled()) {
|
| 908 |
+
$goals[] = GoalManager::IDGOAL_CART;
|
| 909 |
+
$goals[] = GoalManager::IDGOAL_ORDER;
|
| 910 |
+
}
|
| 911 |
+
|
| 912 |
+
foreach ($goals as $idGoal) {
|
| 913 |
+
$this->archiveDayActionsGoalsPages($archiveProcessor->getLogAggregator(), true, $idGoal);
|
| 914 |
+
$this->archiveDayActionsGoalsPages($archiveProcessor->getLogAggregator(), false, $idGoal);
|
| 915 |
+
}
|
| 916 |
+
|
| 917 |
+
$this->archiveDayActionsGoalsPagesEntry($archiveProcessor, $rankingQueryLimit, true);
|
| 918 |
+
$this->archiveDayActionsGoalsPagesEntry($archiveProcessor, $rankingQueryLimit, false);
|
| 919 |
+
}
|
| 920 |
+
|
| 921 |
+
/**
|
| 922 |
+
* Query goal page view data and update actions data table
|
| 923 |
+
*
|
| 924 |
+
* @param bool $isUrl If true then query goal data by url, else by name
|
| 925 |
+
* @param int $idGoal Goal to archive
|
| 926 |
+
*
|
| 927 |
+
* @return int|null Count of records processed
|
| 928 |
+
* @throws \Exception
|
| 929 |
+
*/
|
| 930 |
+
protected function archiveDayActionsGoalsPages(LogAggregator $logAggregator, bool $isUrl, int $idGoal): ?int
|
| 931 |
+
{
|
| 932 |
+
$linkField = ($isUrl ? 'idaction_url' : 'idaction_name');
|
| 933 |
+
$resultSet = $logAggregator->queryConversionsByPageView($linkField, $idGoal);
|
| 934 |
+
if (!$resultSet) {
|
| 935 |
+
return null;
|
| 936 |
+
}
|
| 937 |
+
return ArchivingHelper::updateActionsTableWithGoals($resultSet, true);
|
| 938 |
+
}
|
| 939 |
+
|
| 940 |
+
/**
|
| 941 |
+
* Get a list of goal ids for a site
|
| 942 |
+
*
|
| 943 |
+
* @return array
|
| 944 |
+
*/
|
| 945 |
+
private function getGoalsForSite(string $idSite): array
|
| 946 |
+
{
|
| 947 |
+
$cache = Cache::getTransientCache();
|
| 948 |
+
$key = 'ActionArchives_allGoalIds_' . $idSite;
|
| 949 |
+
|
| 950 |
+
if ($cache->contains($key)) {
|
| 951 |
+
return $cache->fetch($key);
|
| 952 |
+
}
|
| 953 |
+
|
| 954 |
+
$siteGoals = Request::processRequest('Goals.getGoals', ['idSite' => $idSite, 'filter_limit' => '-1'], $default = []);
|
| 955 |
+
$goalIds = array_column($siteGoals, 'idgoal');
|
| 956 |
+
|
| 957 |
+
$cache->save($key, $goalIds);
|
| 958 |
+
return $goalIds;
|
| 959 |
+
}
|
| 960 |
+
|
| 961 |
+
/**
|
| 962 |
+
* Query goal entry page data and update actions data table
|
| 963 |
+
*
|
| 964 |
+
* @param bool $isUrl If true then query goal data by url, else by name
|
| 965 |
+
*
|
| 966 |
+
* @return int|null Count of records processed
|
| 967 |
+
* @throws \Exception
|
| 968 |
+
*/
|
| 969 |
+
protected function archiveDayActionsGoalsPagesEntry(ArchiveProcessor $archiveProcessor, int $rankingQueryLimit, bool $isUrl): ?int
|
| 970 |
+
{
|
| 971 |
+
if (GeneralConfig::getConfigValue('disable_archive_actions_goals', $archiveProcessor->getParams()->getSite()->getId())) {
|
| 972 |
+
return null;
|
| 973 |
+
}
|
| 974 |
+
$linkField = ($isUrl ? 'visit_entry_idaction_url' : 'visit_entry_idaction_name');
|
| 975 |
+
$resultSet = $archiveProcessor->getLogAggregator()->queryConversionsByEntryPageView($linkField, $rankingQueryLimit);
|
| 976 |
+
if (!$resultSet) {
|
| 977 |
+
return null;
|
| 978 |
+
}
|
| 979 |
+
|
| 980 |
+
return ArchivingHelper::updateActionsTableWithGoals($resultSet, false);
|
| 981 |
+
}
|
| 982 |
+
}
|
plugins/Actions/RecordBuilders/Hits.php
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Matomo - free/libre analytics platform
|
| 5 |
+
*
|
| 6 |
+
* @link https://matomo.org
|
| 7 |
+
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
namespace Piwik\Plugins\Actions\RecordBuilders;
|
| 11 |
+
|
| 12 |
+
use Piwik\ArchiveProcessor;
|
| 13 |
+
use Piwik\ArchiveProcessor\Record;
|
| 14 |
+
use Piwik\Metrics as PiwikMetrics;
|
| 15 |
+
use Piwik\Plugins\Actions\Archiver;
|
| 16 |
+
|
| 17 |
+
class Hits extends ArchiveProcessor\RecordBuilder
|
| 18 |
+
{
|
| 19 |
+
public function getRecordMetadata(ArchiveProcessor $archiveProcessor): array
|
| 20 |
+
{
|
| 21 |
+
return [
|
| 22 |
+
Record::make(Record::TYPE_NUMERIC, Archiver::METRIC_HITS_RECORD_NAME),
|
| 23 |
+
];
|
| 24 |
+
}
|
| 25 |
+
|
| 26 |
+
protected function aggregate(ArchiveProcessor $archiveProcessor): array
|
| 27 |
+
{
|
| 28 |
+
$query = $archiveProcessor->getLogAggregator()->queryActionsByDimension(
|
| 29 |
+
[],
|
| 30 |
+
'',
|
| 31 |
+
['count(distinct log_link_visit_action.idlink_va) as `' . PiwikMetrics::INDEX_NB_HITS . '`'],
|
| 32 |
+
[],
|
| 33 |
+
null
|
| 34 |
+
);
|
| 35 |
+
$data = $query->fetch();
|
| 36 |
+
$nbHits = $data[PiwikMetrics::INDEX_NB_HITS];
|
| 37 |
+
|
| 38 |
+
return [
|
| 39 |
+
Archiver::METRIC_HITS_RECORD_NAME => $nbHits,
|
| 40 |
+
];
|
| 41 |
+
}
|
| 42 |
+
}
|
plugins/Actions/RecordBuilders/SearchCategories.php
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Matomo - free/libre analytics platform
|
| 5 |
+
*
|
| 6 |
+
* @link https://matomo.org
|
| 7 |
+
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
namespace Piwik\Plugins\Actions\RecordBuilders;
|
| 11 |
+
|
| 12 |
+
use Piwik\ArchiveProcessor;
|
| 13 |
+
use Piwik\ArchiveProcessor\Record;
|
| 14 |
+
use Piwik\DataTable;
|
| 15 |
+
use Piwik\Plugins\Actions\Archiver;
|
| 16 |
+
use Piwik\Plugins\Actions\ArchivingHelper;
|
| 17 |
+
|
| 18 |
+
class SearchCategories extends ArchiveProcessor\RecordBuilder
|
| 19 |
+
{
|
| 20 |
+
protected function aggregate(ArchiveProcessor $archiveProcessor): array
|
| 21 |
+
{
|
| 22 |
+
$logAggregator = $archiveProcessor->getLogAggregator();
|
| 23 |
+
$query = $logAggregator->queryActionsByDimension(['search_cat'], "%s.search_cat != '' AND %s.search_cat IS NOT NULL");
|
| 24 |
+
|
| 25 |
+
$table = new DataTable();
|
| 26 |
+
|
| 27 |
+
while ($row = $query->fetch()) {
|
| 28 |
+
$label = $row['search_cat'];
|
| 29 |
+
unset($row['search_cat']);
|
| 30 |
+
|
| 31 |
+
$row = new DataTable\Row([DataTable\Row::COLUMNS => ['label' => $label] + $row]);
|
| 32 |
+
$table->addRow($row);
|
| 33 |
+
}
|
| 34 |
+
|
| 35 |
+
return [
|
| 36 |
+
Archiver::SITE_SEARCH_CATEGORY_RECORD_NAME => $table,
|
| 37 |
+
];
|
| 38 |
+
}
|
| 39 |
+
|
| 40 |
+
public function getRecordMetadata(ArchiveProcessor $archiveProcessor): array
|
| 41 |
+
{
|
| 42 |
+
return [
|
| 43 |
+
Record::make(Record::TYPE_BLOB, Archiver::SITE_SEARCH_CATEGORY_RECORD_NAME)
|
| 44 |
+
->setMaxRowsInTable(ArchivingHelper::$maximumRowsInDataTableSiteSearch),
|
| 45 |
+
];
|
| 46 |
+
}
|
| 47 |
+
|
| 48 |
+
public function isEnabled(ArchiveProcessor $archiveProcessor): bool
|
| 49 |
+
{
|
| 50 |
+
return $archiveProcessor->getParams()->getSite()->isSiteSearchEnabled();
|
| 51 |
+
}
|
| 52 |
+
}
|
plugins/Actions/Reports/Base.php
ADDED
|
@@ -0,0 +1,159 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Matomo - free/libre analytics platform
|
| 5 |
+
*
|
| 6 |
+
* @link https://matomo.org
|
| 7 |
+
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
namespace Piwik\Plugins\Actions\Reports;
|
| 11 |
+
|
| 12 |
+
use Piwik\Common;
|
| 13 |
+
use Piwik\Config\GeneralConfig;
|
| 14 |
+
use Piwik\Metrics;
|
| 15 |
+
use Piwik\Metrics\Formatter;
|
| 16 |
+
use Piwik\Piwik;
|
| 17 |
+
use Piwik\Plugin\ViewDataTable;
|
| 18 |
+
use Piwik\Plugins\Actions\Actions;
|
| 19 |
+
use Piwik\Plugins\Actions\Columns\EntryPageTitle;
|
| 20 |
+
use Piwik\Plugins\Actions\Columns\EntryPageUrl;
|
| 21 |
+
use Piwik\Plugins\Actions\Columns\ExitPageTitle;
|
| 22 |
+
use Piwik\Plugins\Actions\Columns\ExitPageUrl;
|
| 23 |
+
use Piwik\Plugins\Actions\Columns\PageTitle;
|
| 24 |
+
use Piwik\Plugins\Actions\Columns\PageUrl;
|
| 25 |
+
use Piwik\Plugins\CoreVisualizations\Visualizations\HtmlTable;
|
| 26 |
+
use Piwik\API\Request;
|
| 27 |
+
|
| 28 |
+
abstract class Base extends \Piwik\Plugin\Report
|
| 29 |
+
{
|
| 30 |
+
protected function init()
|
| 31 |
+
{
|
| 32 |
+
$this->categoryId = 'General_Actions';
|
| 33 |
+
$this->processedMetrics = [];
|
| 34 |
+
$this->recursiveLabelSeparator = '/';
|
| 35 |
+
}
|
| 36 |
+
|
| 37 |
+
protected function addBaseDisplayProperties(ViewDataTable $view)
|
| 38 |
+
{
|
| 39 |
+
$view->config->datatable_js_type = 'ActionsDataTable';
|
| 40 |
+
$view->config->search_recursive = true;
|
| 41 |
+
$view->config->show_table_all_columns = false;
|
| 42 |
+
$view->requestConfig->filter_limit = Actions::ACTIONS_REPORT_ROWS_DISPLAY;
|
| 43 |
+
$view->config->show_all_views_icons = false;
|
| 44 |
+
|
| 45 |
+
if ($view->requestConfig->getRequestParam('performance') === '1') {
|
| 46 |
+
$view->requestConfig->filter_limit = 25;
|
| 47 |
+
// hide visualization selector
|
| 48 |
+
$view->config->footer_icons = [[
|
| 49 |
+
'class' => 'tableAllColumnsSwitch',
|
| 50 |
+
'buttons' => [],
|
| 51 |
+
]];
|
| 52 |
+
}
|
| 53 |
+
|
| 54 |
+
if ($view->isViewDataTableId(HtmlTable::ID)) {
|
| 55 |
+
$view->config->show_embedded_subtable = true;
|
| 56 |
+
}
|
| 57 |
+
|
| 58 |
+
if (Request::shouldLoadExpanded()) {
|
| 59 |
+
if ($view->isViewDataTableId(HtmlTable::ID)) {
|
| 60 |
+
$view->config->show_expanded = true;
|
| 61 |
+
}
|
| 62 |
+
|
| 63 |
+
$view->config->filters[] = function ($dataTable) {
|
| 64 |
+
Actions::setDataTableRowLevels($dataTable);
|
| 65 |
+
};
|
| 66 |
+
}
|
| 67 |
+
|
| 68 |
+
$view->config->filters[] = function ($dataTable) use ($view) {
|
| 69 |
+
if ($view->isViewDataTableId(HtmlTable::ID)) {
|
| 70 |
+
$view->config->datatable_css_class = 'dataTableActions';
|
| 71 |
+
}
|
| 72 |
+
};
|
| 73 |
+
}
|
| 74 |
+
|
| 75 |
+
protected function addPageDisplayProperties(ViewDataTable $view)
|
| 76 |
+
{
|
| 77 |
+
$view->config->addTranslations(array(
|
| 78 |
+
'nb_hits' => Piwik::translate('General_ColumnPageviews'),
|
| 79 |
+
'nb_visits' => Piwik::translate('General_ColumnUniquePageviews'),
|
| 80 |
+
));
|
| 81 |
+
|
| 82 |
+
$formatter = new Formatter();
|
| 83 |
+
|
| 84 |
+
// add avg_generation_time tooltip
|
| 85 |
+
$tooltipCallback = function ($hits, $min, $max) use ($formatter) {
|
| 86 |
+
if (!$hits) {
|
| 87 |
+
return false;
|
| 88 |
+
}
|
| 89 |
+
|
| 90 |
+
return Piwik::translate("Actions_AvgGenerationTimeTooltip", array(
|
| 91 |
+
$hits,
|
| 92 |
+
"<br />",
|
| 93 |
+
$formatter->getPrettyTimeFromSeconds($min, true),
|
| 94 |
+
$formatter->getPrettyTimeFromSeconds($max, true),
|
| 95 |
+
));
|
| 96 |
+
};
|
| 97 |
+
$view->config->filters[] = array('ColumnCallbackAddMetadata',
|
| 98 |
+
array(
|
| 99 |
+
array('nb_hits_with_time_generation', 'min_time_generation', 'max_time_generation'),
|
| 100 |
+
'avg_time_generation_tooltip',
|
| 101 |
+
$tooltipCallback,
|
| 102 |
+
),
|
| 103 |
+
);
|
| 104 |
+
|
| 105 |
+
$this->addExcludeLowPopDisplayProperties($view);
|
| 106 |
+
|
| 107 |
+
// hide the performance columns viz in page reports when not displayed as widget
|
| 108 |
+
if ($view->requestConfig->getRequestParam('widget') != '1') {
|
| 109 |
+
$view->config->show_table_performance = false;
|
| 110 |
+
}
|
| 111 |
+
}
|
| 112 |
+
|
| 113 |
+
protected function addExcludeLowPopDisplayProperties(ViewDataTable $view)
|
| 114 |
+
{
|
| 115 |
+
if (Common::getRequestVar('enable_filter_excludelowpop', '0', 'string') != '0') {
|
| 116 |
+
if (Common::getRequestVar('flat', 0, 'int') === 1) {
|
| 117 |
+
$view->requestConfig->filter_excludelowpop = 'nb_hits';
|
| 118 |
+
} else {
|
| 119 |
+
$view->requestConfig->filter_excludelowpop = Metrics::INDEX_PAGE_NB_HITS;
|
| 120 |
+
}
|
| 121 |
+
$view->requestConfig->filter_excludelowpop_value = function () {
|
| 122 |
+
// computing minimum value to exclude (2 percent of the total number of actions)
|
| 123 |
+
$visitsInfo = \Piwik\Plugins\VisitsSummary\Controller::getVisitsSummary()->getFirstRow();
|
| 124 |
+
$nbActions = $visitsInfo->getColumn('nb_actions');
|
| 125 |
+
$nbActionsLowPopulationThreshold = floor(0.02 * $nbActions);
|
| 126 |
+
|
| 127 |
+
// we remove 1 to make sure some actions/downloads are displayed in the case we have a very few of them
|
| 128 |
+
// and each of them has 1 or 2 hits...
|
| 129 |
+
return min($visitsInfo->getColumn('max_actions') - 1, $nbActionsLowPopulationThreshold - 1);
|
| 130 |
+
};
|
| 131 |
+
}
|
| 132 |
+
}
|
| 133 |
+
|
| 134 |
+
public function getRecursiveLabelSeparator()
|
| 135 |
+
{
|
| 136 |
+
$legacyDelimiter = GeneralConfig::getConfigValue('action_category_delimiter');
|
| 137 |
+
if (!empty($legacyDelimiter)) {
|
| 138 |
+
return $legacyDelimiter;
|
| 139 |
+
}
|
| 140 |
+
|
| 141 |
+
if (
|
| 142 |
+
$this->dimension instanceof PageTitle
|
| 143 |
+
|| $this->dimension instanceof EntryPageTitle
|
| 144 |
+
|| $this->dimension instanceof ExitPageTitle
|
| 145 |
+
) {
|
| 146 |
+
return GeneralConfig::getConfigValue('action_title_category_delimiter') ?: $this->recursiveLabelSeparator;
|
| 147 |
+
}
|
| 148 |
+
|
| 149 |
+
if (
|
| 150 |
+
$this->dimension instanceof PageUrl
|
| 151 |
+
|| $this->dimension instanceof EntryPageUrl
|
| 152 |
+
|| $this->dimension instanceof ExitPageUrl
|
| 153 |
+
) {
|
| 154 |
+
return GeneralConfig::getConfigValue('action_url_category_delimiter') ?: $this->recursiveLabelSeparator;
|
| 155 |
+
}
|
| 156 |
+
|
| 157 |
+
return parent::getRecursiveLabelSeparator();
|
| 158 |
+
}
|
| 159 |
+
}
|
plugins/Actions/Reports/Get.php
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Matomo - free/libre analytics platform
|
| 5 |
+
*
|
| 6 |
+
* @link https://matomo.org
|
| 7 |
+
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
namespace Piwik\Plugins\Actions\Reports;
|
| 11 |
+
|
| 12 |
+
use Piwik\Piwik;
|
| 13 |
+
use Piwik\Plugins\Actions\Columns\Metrics\AveragePageGenerationTime;
|
| 14 |
+
|
| 15 |
+
class Get extends Base
|
| 16 |
+
{
|
| 17 |
+
protected function init()
|
| 18 |
+
{
|
| 19 |
+
parent::init();
|
| 20 |
+
|
| 21 |
+
$this->name = Piwik::translate('General_Actions') . ' - ' . Piwik::translate('General_MainMetrics');
|
| 22 |
+
$this->documentation = Piwik::translate('Actions_MainMetricsReportDocumentation');
|
| 23 |
+
$this->order = 1;
|
| 24 |
+
$this->processedMetrics = array(
|
| 25 |
+
new AveragePageGenerationTime(),
|
| 26 |
+
);
|
| 27 |
+
$this->metrics = array(
|
| 28 |
+
'nb_pageviews',
|
| 29 |
+
'nb_uniq_pageviews',
|
| 30 |
+
'nb_downloads',
|
| 31 |
+
'nb_uniq_downloads',
|
| 32 |
+
'nb_outlinks',
|
| 33 |
+
'nb_uniq_outlinks',
|
| 34 |
+
'nb_searches',
|
| 35 |
+
'nb_keywords',
|
| 36 |
+
'hits',
|
| 37 |
+
);
|
| 38 |
+
}
|
| 39 |
+
}
|
plugins/Actions/Reports/GetDownloads.php
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Matomo - free/libre analytics platform
|
| 5 |
+
*
|
| 6 |
+
* @link https://matomo.org
|
| 7 |
+
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
namespace Piwik\Plugins\Actions\Reports;
|
| 11 |
+
|
| 12 |
+
use Piwik\Piwik;
|
| 13 |
+
use Piwik\Plugin\ViewDataTable;
|
| 14 |
+
use Piwik\Plugins\Actions\Columns\DownloadUrl;
|
| 15 |
+
|
| 16 |
+
class GetDownloads extends Base
|
| 17 |
+
{
|
| 18 |
+
protected function init()
|
| 19 |
+
{
|
| 20 |
+
parent::init();
|
| 21 |
+
|
| 22 |
+
$this->dimension = new DownloadUrl();
|
| 23 |
+
$this->name = Piwik::translate('General_Downloads');
|
| 24 |
+
$this->documentation = Piwik::translate('Actions_DownloadsReportDocumentation', '<br />');
|
| 25 |
+
$this->metrics = array('nb_visits', 'nb_hits');
|
| 26 |
+
|
| 27 |
+
$this->actionToLoadSubTables = $this->action;
|
| 28 |
+
$this->order = 9;
|
| 29 |
+
|
| 30 |
+
$this->subcategoryId = 'General_Downloads';
|
| 31 |
+
}
|
| 32 |
+
|
| 33 |
+
public function getMetrics()
|
| 34 |
+
{
|
| 35 |
+
return array(
|
| 36 |
+
'nb_visits' => Piwik::translate('Actions_ColumnUniqueDownloads'),
|
| 37 |
+
'nb_hits' => Piwik::translate('General_Downloads'),
|
| 38 |
+
);
|
| 39 |
+
}
|
| 40 |
+
|
| 41 |
+
protected function getMetricsDocumentation()
|
| 42 |
+
{
|
| 43 |
+
return array(
|
| 44 |
+
'nb_visits' => Piwik::translate('Actions_ColumnUniqueClicksDocumentation'),
|
| 45 |
+
'nb_hits' => Piwik::translate('Actions_ColumnClicksDocumentation'),
|
| 46 |
+
);
|
| 47 |
+
}
|
| 48 |
+
|
| 49 |
+
public function configureView(ViewDataTable $view)
|
| 50 |
+
{
|
| 51 |
+
$view->config->columns_to_display = array('label', 'nb_visits', 'nb_hits');
|
| 52 |
+
$view->config->show_exclude_low_population = false;
|
| 53 |
+
|
| 54 |
+
$this->addBaseDisplayProperties($view);
|
| 55 |
+
}
|
| 56 |
+
}
|
plugins/Actions/Reports/GetEntryPageTitles.php
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Matomo - free/libre analytics platform
|
| 5 |
+
*
|
| 6 |
+
* @link https://matomo.org
|
| 7 |
+
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
namespace Piwik\Plugins\Actions\Reports;
|
| 11 |
+
|
| 12 |
+
use Piwik\Piwik;
|
| 13 |
+
use Piwik\Plugin\ViewDataTable;
|
| 14 |
+
use Piwik\Plugins\Actions\Columns\EntryPageTitle;
|
| 15 |
+
use Piwik\Plugins\Actions\Columns\Metrics\AveragePageGenerationTime;
|
| 16 |
+
use Piwik\Plugins\Actions\Columns\Metrics\AverageTimeOnPage;
|
| 17 |
+
use Piwik\Plugins\Actions\Columns\Metrics\BounceRate;
|
| 18 |
+
use Piwik\Plugins\Actions\Columns\Metrics\ExitRate;
|
| 19 |
+
use Piwik\Plugin\ReportsProvider;
|
| 20 |
+
use Piwik\Report\ReportWidgetFactory;
|
| 21 |
+
use Piwik\Widget\WidgetsList;
|
| 22 |
+
|
| 23 |
+
class GetEntryPageTitles extends Base
|
| 24 |
+
{
|
| 25 |
+
protected function init()
|
| 26 |
+
{
|
| 27 |
+
parent::init();
|
| 28 |
+
|
| 29 |
+
$this->dimension = new EntryPageTitle();
|
| 30 |
+
$this->name = Piwik::translate('Actions_EntryPageTitles');
|
| 31 |
+
$this->documentation = Piwik::translate('Actions_EntryPageTitlesReportDocumentation', '<br />')
|
| 32 |
+
. ' ' . Piwik::translate('General_UsePlusMinusIconsDocumentation');
|
| 33 |
+
$this->metrics = array('entry_nb_visits', 'entry_bounce_count');
|
| 34 |
+
$this->processedMetrics = array(
|
| 35 |
+
new AverageTimeOnPage(),
|
| 36 |
+
new BounceRate(),
|
| 37 |
+
new ExitRate(),
|
| 38 |
+
new AveragePageGenerationTime(),
|
| 39 |
+
);
|
| 40 |
+
$this->order = 6;
|
| 41 |
+
$this->actionToLoadSubTables = $this->action;
|
| 42 |
+
$this->subcategoryId = 'Actions_SubmenuPagesEntry';
|
| 43 |
+
$this->hasGoalMetrics = true;
|
| 44 |
+
}
|
| 45 |
+
|
| 46 |
+
public function configureWidgets(WidgetsList $widgetsList, ReportWidgetFactory $factory)
|
| 47 |
+
{
|
| 48 |
+
$widgetsList->addWidgetConfig($factory->createWidget()->setName('Actions_WidgetEntryPageTitles'));
|
| 49 |
+
}
|
| 50 |
+
|
| 51 |
+
public function getProcessedMetrics()
|
| 52 |
+
{
|
| 53 |
+
$result = parent::getProcessedMetrics();
|
| 54 |
+
|
| 55 |
+
// these metrics are not displayed in the API.getProcessedReport version of this report,
|
| 56 |
+
// so they are removed here.
|
| 57 |
+
unset($result['avg_time_on_page']);
|
| 58 |
+
unset($result['exit_rate']);
|
| 59 |
+
|
| 60 |
+
return $result;
|
| 61 |
+
}
|
| 62 |
+
|
| 63 |
+
protected function getMetricsDocumentation()
|
| 64 |
+
{
|
| 65 |
+
$metrics = parent::getMetricsDocumentation();
|
| 66 |
+
$metrics['bounce_rate'] = Piwik::translate('General_ColumnPageBounceRateDocumentation');
|
| 67 |
+
|
| 68 |
+
// remove these metrics from API.getProcessedReport version of this report
|
| 69 |
+
unset($metrics['avg_time_on_page']);
|
| 70 |
+
unset($metrics['exit_rate']);
|
| 71 |
+
|
| 72 |
+
return $metrics;
|
| 73 |
+
}
|
| 74 |
+
|
| 75 |
+
public function configureView(ViewDataTable $view)
|
| 76 |
+
{
|
| 77 |
+
$view->config->columns_to_display = array('label', 'entry_nb_visits', 'entry_bounce_count', 'bounce_rate');
|
| 78 |
+
$view->config->title = $this->name;
|
| 79 |
+
|
| 80 |
+
$view->requestConfig->filter_sort_column = 'entry_nb_visits';
|
| 81 |
+
|
| 82 |
+
$this->addPageDisplayProperties($view);
|
| 83 |
+
$this->addBaseDisplayProperties($view);
|
| 84 |
+
|
| 85 |
+
$view->config->show_goals = true;
|
| 86 |
+
}
|
| 87 |
+
|
| 88 |
+
public function getRelatedReports()
|
| 89 |
+
{
|
| 90 |
+
return array(
|
| 91 |
+
ReportsProvider::factory('Actions', 'getPageTitles'),
|
| 92 |
+
ReportsProvider::factory('Actions', 'getEntryPageUrls'),
|
| 93 |
+
);
|
| 94 |
+
}
|
| 95 |
+
}
|
plugins/Actions/Reports/GetEntryPageUrls.php
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Matomo - free/libre analytics platform
|
| 5 |
+
*
|
| 6 |
+
* @link https://matomo.org
|
| 7 |
+
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
namespace Piwik\Plugins\Actions\Reports;
|
| 11 |
+
|
| 12 |
+
use Piwik\Piwik;
|
| 13 |
+
use Piwik\Plugin\ViewDataTable;
|
| 14 |
+
use Piwik\Plugins\Actions\Columns\EntryPageUrl;
|
| 15 |
+
use Piwik\Plugins\Actions\Columns\Metrics\AveragePageGenerationTime;
|
| 16 |
+
use Piwik\Plugins\Actions\Columns\Metrics\AverageTimeOnPage;
|
| 17 |
+
use Piwik\Plugins\Actions\Columns\Metrics\BounceRate;
|
| 18 |
+
use Piwik\Plugins\Actions\Columns\Metrics\ExitRate;
|
| 19 |
+
use Piwik\Plugin\ReportsProvider;
|
| 20 |
+
|
| 21 |
+
class GetEntryPageUrls extends Base
|
| 22 |
+
{
|
| 23 |
+
protected function init()
|
| 24 |
+
{
|
| 25 |
+
parent::init();
|
| 26 |
+
|
| 27 |
+
$this->dimension = new EntryPageUrl();
|
| 28 |
+
$this->name = Piwik::translate('Actions_SubmenuPagesEntry');
|
| 29 |
+
$this->documentation = Piwik::translate('Actions_EntryPagesReportDocumentation', '<br />')
|
| 30 |
+
. '<br />' . Piwik::translate('General_UsePlusMinusIconsDocumentation');
|
| 31 |
+
|
| 32 |
+
$this->metrics = array('entry_nb_visits', 'entry_bounce_count');
|
| 33 |
+
$this->processedMetrics = array(
|
| 34 |
+
new AverageTimeOnPage(),
|
| 35 |
+
new BounceRate(),
|
| 36 |
+
new ExitRate(),
|
| 37 |
+
new AveragePageGenerationTime(),
|
| 38 |
+
);
|
| 39 |
+
$this->order = 3;
|
| 40 |
+
|
| 41 |
+
$this->actionToLoadSubTables = $this->action;
|
| 42 |
+
$this->subcategoryId = 'Actions_SubmenuPagesEntry';
|
| 43 |
+
$this->hasGoalMetrics = true;
|
| 44 |
+
}
|
| 45 |
+
|
| 46 |
+
public function getProcessedMetrics()
|
| 47 |
+
{
|
| 48 |
+
$result = parent::getProcessedMetrics();
|
| 49 |
+
|
| 50 |
+
// these metrics are not displayed in the API.getProcessedReport version of this report,
|
| 51 |
+
// so they are removed here.
|
| 52 |
+
unset($result['avg_time_on_page']);
|
| 53 |
+
unset($result['exit_rate']);
|
| 54 |
+
|
| 55 |
+
return $result;
|
| 56 |
+
}
|
| 57 |
+
|
| 58 |
+
protected function getMetricsDocumentation()
|
| 59 |
+
{
|
| 60 |
+
$metrics = parent::getMetricsDocumentation();
|
| 61 |
+
$metrics['bounce_rate'] = Piwik::translate('General_ColumnPageBounceRateDocumentation');
|
| 62 |
+
|
| 63 |
+
unset($metrics['avg_time_on_page']);
|
| 64 |
+
unset($metrics['exit_rate']);
|
| 65 |
+
|
| 66 |
+
return $metrics;
|
| 67 |
+
}
|
| 68 |
+
|
| 69 |
+
public function configureView(ViewDataTable $view)
|
| 70 |
+
{
|
| 71 |
+
$view->config->title = $this->name;
|
| 72 |
+
$view->config->columns_to_display = array('label', 'entry_nb_visits', 'entry_bounce_count', 'bounce_rate');
|
| 73 |
+
$view->requestConfig->filter_sort_column = 'entry_nb_visits';
|
| 74 |
+
$view->requestConfig->filter_sort_order = 'desc';
|
| 75 |
+
|
| 76 |
+
$this->addPageDisplayProperties($view);
|
| 77 |
+
$this->addBaseDisplayProperties($view);
|
| 78 |
+
|
| 79 |
+
$view->config->show_goals = true;
|
| 80 |
+
}
|
| 81 |
+
|
| 82 |
+
public function getRelatedReports()
|
| 83 |
+
{
|
| 84 |
+
return array(
|
| 85 |
+
ReportsProvider::factory('Actions', 'getEntryPageTitles'),
|
| 86 |
+
);
|
| 87 |
+
}
|
| 88 |
+
}
|
plugins/Actions/Reports/GetExitPageTitles.php
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Matomo - free/libre analytics platform
|
| 5 |
+
*
|
| 6 |
+
* @link https://matomo.org
|
| 7 |
+
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
namespace Piwik\Plugins\Actions\Reports;
|
| 11 |
+
|
| 12 |
+
use Piwik\Piwik;
|
| 13 |
+
use Piwik\Plugin\ViewDataTable;
|
| 14 |
+
use Piwik\Plugins\Actions\Columns\ExitPageTitle;
|
| 15 |
+
use Piwik\Plugins\Actions\Columns\Metrics\AveragePageGenerationTime;
|
| 16 |
+
use Piwik\Plugins\Actions\Columns\Metrics\AverageTimeOnPage;
|
| 17 |
+
use Piwik\Plugins\Actions\Columns\Metrics\BounceRate;
|
| 18 |
+
use Piwik\Plugins\Actions\Columns\Metrics\ExitRate;
|
| 19 |
+
use Piwik\Plugin\ReportsProvider;
|
| 20 |
+
use Piwik\Report\ReportWidgetFactory;
|
| 21 |
+
use Piwik\Widget\WidgetsList;
|
| 22 |
+
|
| 23 |
+
class GetExitPageTitles extends Base
|
| 24 |
+
{
|
| 25 |
+
protected function init()
|
| 26 |
+
{
|
| 27 |
+
parent::init();
|
| 28 |
+
|
| 29 |
+
$this->dimension = new ExitPageTitle();
|
| 30 |
+
$this->name = Piwik::translate('Actions_ExitPageTitles');
|
| 31 |
+
$this->documentation = Piwik::translate('Actions_ExitPageTitlesReportDocumentation', '<br />')
|
| 32 |
+
. ' ' . Piwik::translate('General_UsePlusMinusIconsDocumentation');
|
| 33 |
+
$this->subcategoryId = 'Actions_SubmenuPagesExit';
|
| 34 |
+
|
| 35 |
+
$this->metrics = array('exit_nb_visits', 'nb_visits');
|
| 36 |
+
$this->processedMetrics = array(
|
| 37 |
+
new AverageTimeOnPage(),
|
| 38 |
+
new BounceRate(),
|
| 39 |
+
new ExitRate(),
|
| 40 |
+
new AveragePageGenerationTime(),
|
| 41 |
+
);
|
| 42 |
+
$this->order = 7;
|
| 43 |
+
|
| 44 |
+
$this->actionToLoadSubTables = $this->action;
|
| 45 |
+
}
|
| 46 |
+
|
| 47 |
+
public function configureWidgets(WidgetsList $widgetsList, ReportWidgetFactory $factory)
|
| 48 |
+
{
|
| 49 |
+
// we have to do it manually since it's only done automatically if a subcategoryId is specified,
|
| 50 |
+
// we do not set a subcategoryId since this report is not supposed to be shown in the UI
|
| 51 |
+
$widgetsList->addWidgetConfig($factory->createWidget());
|
| 52 |
+
}
|
| 53 |
+
|
| 54 |
+
public function getProcessedMetrics()
|
| 55 |
+
{
|
| 56 |
+
$result = parent::getProcessedMetrics();
|
| 57 |
+
|
| 58 |
+
// these metrics are not displayed in the API.getProcessedReport version of this report,
|
| 59 |
+
// so they are removed here.
|
| 60 |
+
unset($result['bounce_rate']);
|
| 61 |
+
unset($result['avg_time_on_page']);
|
| 62 |
+
|
| 63 |
+
return $result;
|
| 64 |
+
}
|
| 65 |
+
|
| 66 |
+
public function getMetrics()
|
| 67 |
+
{
|
| 68 |
+
$metrics = parent::getMetrics();
|
| 69 |
+
$metrics['nb_visits'] = Piwik::translate('General_ColumnUniquePageviews');
|
| 70 |
+
|
| 71 |
+
return $metrics;
|
| 72 |
+
}
|
| 73 |
+
|
| 74 |
+
protected function getMetricsDocumentation()
|
| 75 |
+
{
|
| 76 |
+
$metrics = parent::getMetricsDocumentation();
|
| 77 |
+
$metrics['nb_visits'] = Piwik::translate('General_ColumnUniquePageviewsDocumentation');
|
| 78 |
+
|
| 79 |
+
unset($metrics['bounce_rate']);
|
| 80 |
+
unset($metrics['avg_time_on_page']);
|
| 81 |
+
|
| 82 |
+
return $metrics;
|
| 83 |
+
}
|
| 84 |
+
|
| 85 |
+
public function configureView(ViewDataTable $view)
|
| 86 |
+
{
|
| 87 |
+
$view->config->title = $this->name;
|
| 88 |
+
$view->config->columns_to_display = array('label', 'exit_nb_visits', 'nb_visits', 'exit_rate');
|
| 89 |
+
|
| 90 |
+
$this->addPageDisplayProperties($view);
|
| 91 |
+
$this->addBaseDisplayProperties($view);
|
| 92 |
+
}
|
| 93 |
+
|
| 94 |
+
public function getRelatedReports()
|
| 95 |
+
{
|
| 96 |
+
return array(
|
| 97 |
+
ReportsProvider::factory('Actions', 'getPageTitles'),
|
| 98 |
+
ReportsProvider::factory('Actions', 'getExitPageUrls'),
|
| 99 |
+
);
|
| 100 |
+
}
|
| 101 |
+
}
|
plugins/Actions/Reports/GetExitPageUrls.php
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Matomo - free/libre analytics platform
|
| 5 |
+
*
|
| 6 |
+
* @link https://matomo.org
|
| 7 |
+
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
namespace Piwik\Plugins\Actions\Reports;
|
| 11 |
+
|
| 12 |
+
use Piwik\Piwik;
|
| 13 |
+
use Piwik\Plugin\ViewDataTable;
|
| 14 |
+
use Piwik\API\Request;
|
| 15 |
+
use Piwik\Plugins\Actions\Columns\ExitPageUrl;
|
| 16 |
+
use Piwik\Plugins\Actions\Columns\Metrics\AveragePageGenerationTime;
|
| 17 |
+
use Piwik\Plugins\Actions\Columns\Metrics\AverageTimeOnPage;
|
| 18 |
+
use Piwik\Plugins\Actions\Columns\Metrics\BounceRate;
|
| 19 |
+
use Piwik\Plugins\Actions\Columns\Metrics\ExitRate;
|
| 20 |
+
use Piwik\Plugin\ReportsProvider;
|
| 21 |
+
|
| 22 |
+
class GetExitPageUrls extends Base
|
| 23 |
+
{
|
| 24 |
+
protected function init()
|
| 25 |
+
{
|
| 26 |
+
parent::init();
|
| 27 |
+
|
| 28 |
+
$this->dimension = new ExitPageUrl();
|
| 29 |
+
$this->name = Piwik::translate('Actions_SubmenuPagesExit');
|
| 30 |
+
$this->documentation = Piwik::translate('Actions_ExitPagesReportDocumentation', '<br />')
|
| 31 |
+
. '<br />' . Piwik::translate('General_UsePlusMinusIconsDocumentation');
|
| 32 |
+
|
| 33 |
+
$this->metrics = array('exit_nb_visits', 'nb_visits');
|
| 34 |
+
$this->processedMetrics = array(
|
| 35 |
+
new AverageTimeOnPage(),
|
| 36 |
+
new BounceRate(),
|
| 37 |
+
new ExitRate(),
|
| 38 |
+
new AveragePageGenerationTime(),
|
| 39 |
+
);
|
| 40 |
+
$this->actionToLoadSubTables = $this->action;
|
| 41 |
+
|
| 42 |
+
$this->order = 4;
|
| 43 |
+
|
| 44 |
+
$this->subcategoryId = 'Actions_SubmenuPagesExit';
|
| 45 |
+
}
|
| 46 |
+
|
| 47 |
+
public function getProcessedMetrics()
|
| 48 |
+
{
|
| 49 |
+
$result = parent::getProcessedMetrics();
|
| 50 |
+
|
| 51 |
+
// these metrics are not displayed in the API.getProcessedReport version of this report,
|
| 52 |
+
// so they are removed here.
|
| 53 |
+
unset($result['bounce_rate']);
|
| 54 |
+
unset($result['avg_time_on_page']);
|
| 55 |
+
|
| 56 |
+
return $result;
|
| 57 |
+
}
|
| 58 |
+
|
| 59 |
+
public function getMetrics()
|
| 60 |
+
{
|
| 61 |
+
$metrics = parent::getMetrics();
|
| 62 |
+
$metrics['nb_visits'] = Piwik::translate('General_ColumnUniquePageviews');
|
| 63 |
+
|
| 64 |
+
unset($metrics['bounce_rate']);
|
| 65 |
+
unset($metrics['avg_time_on_page']);
|
| 66 |
+
|
| 67 |
+
return $metrics;
|
| 68 |
+
}
|
| 69 |
+
|
| 70 |
+
protected function getMetricsDocumentation()
|
| 71 |
+
{
|
| 72 |
+
$metrics = parent::getMetricsDocumentation();
|
| 73 |
+
$metrics['nb_visits'] = Piwik::translate('General_ColumnUniquePageviewsDocumentation');
|
| 74 |
+
|
| 75 |
+
return $metrics;
|
| 76 |
+
}
|
| 77 |
+
|
| 78 |
+
public function configureView(ViewDataTable $view)
|
| 79 |
+
{
|
| 80 |
+
$view->config->self_url = Request::getCurrentUrlWithoutGenericFilters(array(
|
| 81 |
+
'module' => 'Actions',
|
| 82 |
+
'action' => 'getExitPageUrls',
|
| 83 |
+
));
|
| 84 |
+
|
| 85 |
+
$view->config->title = $this->name;
|
| 86 |
+
|
| 87 |
+
$view->config->columns_to_display = array('label', 'exit_nb_visits', 'nb_visits', 'exit_rate');
|
| 88 |
+
$view->requestConfig->filter_sort_column = 'exit_nb_visits';
|
| 89 |
+
$view->requestConfig->filter_sort_order = 'desc';
|
| 90 |
+
|
| 91 |
+
$this->addPageDisplayProperties($view);
|
| 92 |
+
$this->addBaseDisplayProperties($view);
|
| 93 |
+
}
|
| 94 |
+
|
| 95 |
+
public function getRelatedReports()
|
| 96 |
+
{
|
| 97 |
+
return array(
|
| 98 |
+
ReportsProvider::factory('Actions', 'getExitPageTitles'),
|
| 99 |
+
);
|
| 100 |
+
}
|
| 101 |
+
}
|
plugins/Actions/Reports/GetOutlinks.php
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Matomo - free/libre analytics platform
|
| 5 |
+
*
|
| 6 |
+
* @link https://matomo.org
|
| 7 |
+
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
namespace Piwik\Plugins\Actions\Reports;
|
| 11 |
+
|
| 12 |
+
use Piwik\Piwik;
|
| 13 |
+
use Piwik\Plugin\ViewDataTable;
|
| 14 |
+
use Piwik\Plugins\Actions\Columns\ClickedUrl;
|
| 15 |
+
|
| 16 |
+
class GetOutlinks extends Base
|
| 17 |
+
{
|
| 18 |
+
protected function init()
|
| 19 |
+
{
|
| 20 |
+
parent::init();
|
| 21 |
+
|
| 22 |
+
$this->dimension = new ClickedUrl();
|
| 23 |
+
$this->name = Piwik::translate('General_Outlinks');
|
| 24 |
+
$this->documentation = Piwik::translate('Actions_OutlinksReportDocumentation') . ' '
|
| 25 |
+
. Piwik::translate('Actions_OutlinkDocumentation') . '<br />'
|
| 26 |
+
. Piwik::translate('General_UsePlusMinusIconsDocumentation');
|
| 27 |
+
|
| 28 |
+
$this->metrics = array('nb_visits', 'nb_hits');
|
| 29 |
+
$this->order = 8;
|
| 30 |
+
|
| 31 |
+
$this->actionToLoadSubTables = $this->action;
|
| 32 |
+
|
| 33 |
+
$this->subcategoryId = 'General_Outlinks';
|
| 34 |
+
}
|
| 35 |
+
|
| 36 |
+
public function getMetrics()
|
| 37 |
+
{
|
| 38 |
+
return array(
|
| 39 |
+
'nb_visits' => Piwik::translate('Actions_ColumnUniqueClicks'),
|
| 40 |
+
'nb_hits' => Piwik::translate('Actions_ColumnClicks'),
|
| 41 |
+
);
|
| 42 |
+
}
|
| 43 |
+
|
| 44 |
+
protected function getMetricsDocumentation()
|
| 45 |
+
{
|
| 46 |
+
return array(
|
| 47 |
+
'nb_visits' => Piwik::translate('Actions_ColumnUniqueClicksDocumentation'),
|
| 48 |
+
'nb_hits' => Piwik::translate('Actions_ColumnClicksDocumentation'),
|
| 49 |
+
);
|
| 50 |
+
}
|
| 51 |
+
|
| 52 |
+
public function configureView(ViewDataTable $view)
|
| 53 |
+
{
|
| 54 |
+
$view->config->columns_to_display = array('label', 'nb_visits', 'nb_hits');
|
| 55 |
+
$view->config->show_exclude_low_population = false;
|
| 56 |
+
|
| 57 |
+
$this->addBaseDisplayProperties($view);
|
| 58 |
+
}
|
| 59 |
+
}
|
plugins/Actions/Reports/GetPageTitles.php
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Matomo - free/libre analytics platform
|
| 5 |
+
*
|
| 6 |
+
* @link https://matomo.org
|
| 7 |
+
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
namespace Piwik\Plugins\Actions\Reports;
|
| 11 |
+
|
| 12 |
+
use Piwik\DbHelper;
|
| 13 |
+
use Piwik\Piwik;
|
| 14 |
+
use Piwik\Plugin\ViewDataTable;
|
| 15 |
+
use Piwik\API\Request;
|
| 16 |
+
use Piwik\Plugins\Actions\Columns\PageTitle;
|
| 17 |
+
use Piwik\Plugins\Actions\Columns\Metrics\AveragePageGenerationTime;
|
| 18 |
+
use Piwik\Plugins\Actions\Columns\Metrics\AverageTimeOnPage;
|
| 19 |
+
use Piwik\Plugins\Actions\Columns\Metrics\BounceRate;
|
| 20 |
+
use Piwik\Plugins\Actions\Columns\Metrics\ExitRate;
|
| 21 |
+
use Piwik\Plugin\ReportsProvider;
|
| 22 |
+
|
| 23 |
+
class GetPageTitles extends Base
|
| 24 |
+
{
|
| 25 |
+
protected function init()
|
| 26 |
+
{
|
| 27 |
+
parent::init();
|
| 28 |
+
|
| 29 |
+
$this->dimension = new PageTitle();
|
| 30 |
+
$this->name = Piwik::translate('Actions_SubmenuPageTitles');
|
| 31 |
+
$this->documentation = Piwik::translate(
|
| 32 |
+
'Actions_PageTitlesReportDocumentation',
|
| 33 |
+
['<br />', htmlentities('<title>', ENT_COMPAT | ENT_HTML401, 'UTF-8')]
|
| 34 |
+
);
|
| 35 |
+
|
| 36 |
+
$this->order = 5;
|
| 37 |
+
$this->metrics = array('nb_hits', 'nb_visits');
|
| 38 |
+
$this->processedMetrics = array(
|
| 39 |
+
new AverageTimeOnPage(),
|
| 40 |
+
new BounceRate(),
|
| 41 |
+
new ExitRate(),
|
| 42 |
+
new AveragePageGenerationTime(),
|
| 43 |
+
);
|
| 44 |
+
|
| 45 |
+
$this->actionToLoadSubTables = $this->action;
|
| 46 |
+
$this->subcategoryId = 'Actions_SubmenuPageTitles';
|
| 47 |
+
$this->hasGoalMetrics = true;
|
| 48 |
+
}
|
| 49 |
+
|
| 50 |
+
public function getMetrics()
|
| 51 |
+
{
|
| 52 |
+
$metrics = parent::getMetrics();
|
| 53 |
+
$metrics['nb_visits'] = Piwik::translate('General_ColumnUniquePageviews');
|
| 54 |
+
|
| 55 |
+
return $metrics;
|
| 56 |
+
}
|
| 57 |
+
|
| 58 |
+
protected function getMetricsDocumentation()
|
| 59 |
+
{
|
| 60 |
+
$metrics = parent::getMetricsDocumentation();
|
| 61 |
+
$metrics['nb_visits'] = Piwik::translate('General_ColumnUniquePageviewsDocumentation');
|
| 62 |
+
$metrics['bounce_rate'] = Piwik::translate('General_ColumnPageBounceRateDocumentation');
|
| 63 |
+
|
| 64 |
+
return $metrics;
|
| 65 |
+
}
|
| 66 |
+
|
| 67 |
+
public function configureView(ViewDataTable $view)
|
| 68 |
+
{
|
| 69 |
+
$view->config->self_url = Request::getCurrentUrlWithoutGenericFilters(array(
|
| 70 |
+
'module' => $this->module,
|
| 71 |
+
'action' => 'getPageTitles',
|
| 72 |
+
));
|
| 73 |
+
|
| 74 |
+
$view->config->title = $this->name;
|
| 75 |
+
|
| 76 |
+
$view->config->columns_to_display = array('label', 'nb_hits', 'nb_visits', 'bounce_rate',
|
| 77 |
+
'avg_time_on_page', 'exit_rate');
|
| 78 |
+
|
| 79 |
+
if (version_compare(DbHelper::getInstallVersion(), '4.0.0-b1', '<')) {
|
| 80 |
+
$view->config->columns_to_display[] = 'avg_time_generation';
|
| 81 |
+
}
|
| 82 |
+
|
| 83 |
+
$this->addPageDisplayProperties($view);
|
| 84 |
+
$this->addBaseDisplayProperties($view);
|
| 85 |
+
|
| 86 |
+
$view->config->show_goals = true;
|
| 87 |
+
}
|
| 88 |
+
|
| 89 |
+
public function getRelatedReports()
|
| 90 |
+
{
|
| 91 |
+
return array(
|
| 92 |
+
ReportsProvider::factory('Actions', 'getEntryPageTitles'),
|
| 93 |
+
ReportsProvider::factory('Actions', 'getExitPageTitles'),
|
| 94 |
+
);
|
| 95 |
+
}
|
| 96 |
+
}
|
plugins/Actions/Reports/GetPageTitlesFollowingSiteSearch.php
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Matomo - free/libre analytics platform
|
| 5 |
+
*
|
| 6 |
+
* @link https://matomo.org
|
| 7 |
+
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
namespace Piwik\Plugins\Actions\Reports;
|
| 11 |
+
|
| 12 |
+
use Piwik\Piwik;
|
| 13 |
+
use Piwik\Plugin\ViewDataTable;
|
| 14 |
+
use Piwik\Plugins\Actions\Columns\DestinationPage;
|
| 15 |
+
use Piwik\Plugins\Actions\Columns\Metrics\AveragePageGenerationTime;
|
| 16 |
+
use Piwik\Plugins\Actions\Columns\Metrics\AverageTimeOnPage;
|
| 17 |
+
use Piwik\Plugins\Actions\Columns\Metrics\BounceRate;
|
| 18 |
+
use Piwik\Plugins\Actions\Columns\Metrics\ExitRate;
|
| 19 |
+
use Piwik\Plugin\ReportsProvider;
|
| 20 |
+
|
| 21 |
+
class GetPageTitlesFollowingSiteSearch extends SiteSearchBase
|
| 22 |
+
{
|
| 23 |
+
protected function init()
|
| 24 |
+
{
|
| 25 |
+
parent::init();
|
| 26 |
+
$this->dimension = new DestinationPage();
|
| 27 |
+
$this->name = Piwik::translate('Actions_WidgetPageTitlesFollowingSearch');
|
| 28 |
+
$this->documentation = Piwik::translate('Actions_SiteSearchFollowingPagesDoc') . '<br/>' . Piwik::translate('General_UsePlusMinusIconsDocumentation');
|
| 29 |
+
$this->metrics = array('nb_hits_following_search', 'nb_hits');
|
| 30 |
+
$this->processedMetrics = array(
|
| 31 |
+
new AverageTimeOnPage(),
|
| 32 |
+
new BounceRate(),
|
| 33 |
+
new ExitRate(),
|
| 34 |
+
new AveragePageGenerationTime(),
|
| 35 |
+
);
|
| 36 |
+
$this->order = 19;
|
| 37 |
+
|
| 38 |
+
$this->subcategoryId = 'Actions_SubmenuSitesearch';
|
| 39 |
+
}
|
| 40 |
+
|
| 41 |
+
public function configureView(ViewDataTable $view)
|
| 42 |
+
{
|
| 43 |
+
$title = Piwik::translate('Actions_WidgetPageUrlsFollowingSearch');
|
| 44 |
+
|
| 45 |
+
$this->configureViewForUrlAndTitle($view, $title);
|
| 46 |
+
}
|
| 47 |
+
|
| 48 |
+
public function getMetrics()
|
| 49 |
+
{
|
| 50 |
+
return array(
|
| 51 |
+
'nb_hits_following_search' => Piwik::translate('General_ColumnViewedAfterSearch'),
|
| 52 |
+
'nb_hits' => Piwik::translate('General_ColumnPageviews'),
|
| 53 |
+
);
|
| 54 |
+
}
|
| 55 |
+
|
| 56 |
+
public function getProcessedMetrics()
|
| 57 |
+
{
|
| 58 |
+
return array();
|
| 59 |
+
}
|
| 60 |
+
|
| 61 |
+
protected function getMetricsDocumentation()
|
| 62 |
+
{
|
| 63 |
+
return array(
|
| 64 |
+
'nb_hits_following_search' => Piwik::translate('General_ColumnViewedAfterSearchDocumentation'),
|
| 65 |
+
'nb_hits' => Piwik::translate('General_ColumnPageviewsDocumentation'),
|
| 66 |
+
);
|
| 67 |
+
}
|
| 68 |
+
|
| 69 |
+
protected function configureViewForUrlAndTitle(ViewDataTable $view, $title)
|
| 70 |
+
{
|
| 71 |
+
$view->config->title = $title;
|
| 72 |
+
$view->config->columns_to_display = array('label', 'nb_hits_following_search', 'nb_hits');
|
| 73 |
+
$view->config->show_exclude_low_population = false;
|
| 74 |
+
$view->requestConfig->filter_sort_column = 'nb_hits_following_search';
|
| 75 |
+
$view->requestConfig->filter_sort_order = 'desc';
|
| 76 |
+
|
| 77 |
+
$this->addExcludeLowPopDisplayProperties($view);
|
| 78 |
+
$this->addBaseDisplayProperties($view);
|
| 79 |
+
}
|
| 80 |
+
|
| 81 |
+
public function getRelatedReports()
|
| 82 |
+
{
|
| 83 |
+
return array(
|
| 84 |
+
ReportsProvider::factory('Actions', 'getPageUrlsFollowingSiteSearch'),
|
| 85 |
+
);
|
| 86 |
+
}
|
| 87 |
+
}
|
plugins/Actions/Reports/GetPageUrls.php
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Matomo - free/libre analytics platform
|
| 5 |
+
*
|
| 6 |
+
* @link https://matomo.org
|
| 7 |
+
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
namespace Piwik\Plugins\Actions\Reports;
|
| 11 |
+
|
| 12 |
+
use Piwik\DbHelper;
|
| 13 |
+
use Piwik\Piwik;
|
| 14 |
+
use Piwik\Plugin\ReportsProvider;
|
| 15 |
+
use Piwik\Plugin\ViewDataTable;
|
| 16 |
+
use Piwik\Plugins\Actions\Columns\Metrics\AveragePageGenerationTime;
|
| 17 |
+
use Piwik\Plugins\Actions\Columns\Metrics\BounceRate;
|
| 18 |
+
use Piwik\Plugins\Actions\Columns\PageUrl;
|
| 19 |
+
use Piwik\Plugins\Actions\Columns\Metrics\ExitRate;
|
| 20 |
+
use Piwik\Plugins\Actions\Columns\Metrics\AverageTimeOnPage;
|
| 21 |
+
use Piwik\Report\ReportWidgetFactory;
|
| 22 |
+
use Piwik\Widget\WidgetsList;
|
| 23 |
+
|
| 24 |
+
class GetPageUrls extends Base
|
| 25 |
+
{
|
| 26 |
+
protected function init()
|
| 27 |
+
{
|
| 28 |
+
parent::init();
|
| 29 |
+
|
| 30 |
+
$this->dimension = new PageUrl();
|
| 31 |
+
$this->name = Piwik::translate('Actions_PageUrls');
|
| 32 |
+
$this->documentation = Piwik::translate('Actions_PagesReportDocumentation', '<br />')
|
| 33 |
+
. '<br />' . Piwik::translate('General_UsePlusMinusIconsDocumentation');
|
| 34 |
+
|
| 35 |
+
$this->actionToLoadSubTables = $this->action;
|
| 36 |
+
$this->order = 2;
|
| 37 |
+
$this->metrics = array('nb_hits', 'nb_visits');
|
| 38 |
+
$this->processedMetrics = array(
|
| 39 |
+
new AverageTimeOnPage(),
|
| 40 |
+
new BounceRate(),
|
| 41 |
+
new ExitRate(),
|
| 42 |
+
new AveragePageGenerationTime(),
|
| 43 |
+
);
|
| 44 |
+
|
| 45 |
+
$this->subcategoryId = 'General_Pages';
|
| 46 |
+
$this->hasGoalMetrics = true;
|
| 47 |
+
}
|
| 48 |
+
|
| 49 |
+
public function configureWidgets(WidgetsList $widgetsList, ReportWidgetFactory $factory)
|
| 50 |
+
{
|
| 51 |
+
$widgetsList->addWidgetConfig($factory->createWidget()->setName($this->subcategoryId));
|
| 52 |
+
}
|
| 53 |
+
|
| 54 |
+
public function getMetrics()
|
| 55 |
+
{
|
| 56 |
+
$metrics = parent::getMetrics();
|
| 57 |
+
$metrics['nb_visits'] = Piwik::translate('General_ColumnUniquePageviews');
|
| 58 |
+
|
| 59 |
+
return $metrics;
|
| 60 |
+
}
|
| 61 |
+
|
| 62 |
+
protected function getMetricsDocumentation()
|
| 63 |
+
{
|
| 64 |
+
$metrics = parent::getMetricsDocumentation();
|
| 65 |
+
$metrics['nb_visits'] = Piwik::translate('General_ColumnUniquePageviewsDocumentation');
|
| 66 |
+
$metrics['bounce_rate'] = Piwik::translate('General_ColumnPageBounceRateDocumentation');
|
| 67 |
+
|
| 68 |
+
return $metrics;
|
| 69 |
+
}
|
| 70 |
+
|
| 71 |
+
public function configureView(ViewDataTable $view)
|
| 72 |
+
{
|
| 73 |
+
$view->config->columns_to_display = array('label', 'nb_hits', 'nb_visits', 'bounce_rate',
|
| 74 |
+
'avg_time_on_page', 'exit_rate');
|
| 75 |
+
|
| 76 |
+
if (version_compare(DbHelper::getInstallVersion(), '4.0.0-b1', '<')) {
|
| 77 |
+
$view->config->columns_to_display[] = 'avg_time_generation';
|
| 78 |
+
}
|
| 79 |
+
|
| 80 |
+
$this->addPageDisplayProperties($view);
|
| 81 |
+
$this->addBaseDisplayProperties($view);
|
| 82 |
+
|
| 83 |
+
$view->config->show_goals = true;
|
| 84 |
+
|
| 85 |
+
// related reports are only shown on performance page
|
| 86 |
+
if ($view->requestConfig->getRequestParam('performance') !== '1') {
|
| 87 |
+
$view->config->related_reports = [];
|
| 88 |
+
}
|
| 89 |
+
}
|
| 90 |
+
|
| 91 |
+
public function getRelatedReports()
|
| 92 |
+
{
|
| 93 |
+
return [
|
| 94 |
+
ReportsProvider::factory('Actions', 'getEntryPageUrls'),
|
| 95 |
+
ReportsProvider::factory('Actions', 'getExitPageUrls'),
|
| 96 |
+
];
|
| 97 |
+
}
|
| 98 |
+
}
|
plugins/Actions/Reports/GetPageUrlsFollowingSiteSearch.php
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Matomo - free/libre analytics platform
|
| 5 |
+
*
|
| 6 |
+
* @link https://matomo.org
|
| 7 |
+
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
namespace Piwik\Plugins\Actions\Reports;
|
| 11 |
+
|
| 12 |
+
use Piwik\Piwik;
|
| 13 |
+
use Piwik\Plugin\ViewDataTable;
|
| 14 |
+
use Piwik\Plugins\Actions\Columns\DestinationPage;
|
| 15 |
+
use Piwik\Plugin\ReportsProvider;
|
| 16 |
+
|
| 17 |
+
class GetPageUrlsFollowingSiteSearch extends GetPageTitlesFollowingSiteSearch
|
| 18 |
+
{
|
| 19 |
+
protected function init()
|
| 20 |
+
{
|
| 21 |
+
parent::init();
|
| 22 |
+
$this->dimension = new DestinationPage();
|
| 23 |
+
$this->name = Piwik::translate('Actions_WidgetPageUrlsFollowingSearch');
|
| 24 |
+
$this->documentation = Piwik::translate('Actions_SiteSearchFollowingPagesDoc') . '<br/>' . Piwik::translate('General_UsePlusMinusIconsDocumentation');
|
| 25 |
+
$this->order = 16;
|
| 26 |
+
|
| 27 |
+
$this->subcategoryId = 'Actions_SubmenuSitesearch';
|
| 28 |
+
}
|
| 29 |
+
|
| 30 |
+
public function configureView(ViewDataTable $view)
|
| 31 |
+
{
|
| 32 |
+
$title = Piwik::translate('Actions_WidgetPageTitlesFollowingSearch');
|
| 33 |
+
|
| 34 |
+
$this->configureViewForUrlAndTitle($view, $title);
|
| 35 |
+
}
|
| 36 |
+
|
| 37 |
+
public function getRelatedReports()
|
| 38 |
+
{
|
| 39 |
+
return array(
|
| 40 |
+
ReportsProvider::factory('Actions', 'getPageTitlesFollowingSiteSearch'),
|
| 41 |
+
);
|
| 42 |
+
}
|
| 43 |
+
}
|
plugins/Actions/Reports/GetSiteSearchCategories.php
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Matomo - free/libre analytics platform
|
| 5 |
+
*
|
| 6 |
+
* @link https://matomo.org
|
| 7 |
+
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
namespace Piwik\Plugins\Actions\Reports;
|
| 11 |
+
|
| 12 |
+
use Piwik\Piwik;
|
| 13 |
+
use Piwik\Plugin\ViewDataTable;
|
| 14 |
+
use Piwik\Plugins\Actions\Columns\SearchCategory;
|
| 15 |
+
use Piwik\Plugins\CoreVisualizations\Visualizations\HtmlTable;
|
| 16 |
+
|
| 17 |
+
class GetSiteSearchCategories extends SiteSearchBase
|
| 18 |
+
{
|
| 19 |
+
protected function init()
|
| 20 |
+
{
|
| 21 |
+
parent::init();
|
| 22 |
+
$this->dimension = new SearchCategory();
|
| 23 |
+
$this->name = Piwik::translate('Actions_WidgetSearchCategories');
|
| 24 |
+
$this->documentation = Piwik::translate('Actions_SiteSearchCategories1') . '<br/>' . Piwik::translate('Actions_SiteSearchCategories2');
|
| 25 |
+
$this->metrics = array('nb_visits', 'nb_pages_per_search', 'exit_rate');
|
| 26 |
+
$this->order = 20;
|
| 27 |
+
|
| 28 |
+
$this->subcategoryId = 'Actions_SubmenuSitesearch';
|
| 29 |
+
}
|
| 30 |
+
|
| 31 |
+
protected function isEnabledForIdSites($idSites, $idSite)
|
| 32 |
+
{
|
| 33 |
+
return parent::isEnabledForIdSites($idSites, $idSite);
|
| 34 |
+
}
|
| 35 |
+
|
| 36 |
+
public function getMetrics()
|
| 37 |
+
{
|
| 38 |
+
return array(
|
| 39 |
+
'nb_visits' => Piwik::translate('Actions_ColumnSearches'),
|
| 40 |
+
'nb_pages_per_search' => Piwik::translate('Actions_ColumnPagesPerSearch'),
|
| 41 |
+
'exit_rate' => Piwik::translate('Actions_ColumnSearchExits'),
|
| 42 |
+
);
|
| 43 |
+
}
|
| 44 |
+
|
| 45 |
+
protected function getMetricsDocumentation()
|
| 46 |
+
{
|
| 47 |
+
return array(
|
| 48 |
+
'nb_visits' => Piwik::translate('Actions_ColumnSearchesDocumentation'),
|
| 49 |
+
'nb_pages_per_search' => Piwik::translate('Actions_ColumnPagesPerSearchDocumentation'),
|
| 50 |
+
'exit_rate' => Piwik::translate('Actions_ColumnSearchExitsDocumentation'),
|
| 51 |
+
);
|
| 52 |
+
}
|
| 53 |
+
|
| 54 |
+
public function configureView(ViewDataTable $view)
|
| 55 |
+
{
|
| 56 |
+
$view->config->columns_to_display = array('label', 'nb_visits', 'nb_pages_per_search');
|
| 57 |
+
$view->config->show_table_all_columns = false;
|
| 58 |
+
$view->config->show_bar_chart = false;
|
| 59 |
+
|
| 60 |
+
if ($view->isViewDataTableId(HtmlTable::ID)) {
|
| 61 |
+
$view->config->disable_row_evolution = false;
|
| 62 |
+
}
|
| 63 |
+
}
|
| 64 |
+
}
|
plugins/Actions/Reports/GetSiteSearchKeywords.php
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Matomo - free/libre analytics platform
|
| 5 |
+
*
|
| 6 |
+
* @link https://matomo.org
|
| 7 |
+
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
namespace Piwik\Plugins\Actions\Reports;
|
| 11 |
+
|
| 12 |
+
use Piwik\Piwik;
|
| 13 |
+
use Piwik\Plugin\ViewDataTable;
|
| 14 |
+
use Piwik\Plugins\Actions\Columns\Keyword;
|
| 15 |
+
use Piwik\Plugins\Actions\Columns\Metrics\AveragePageGenerationTime;
|
| 16 |
+
use Piwik\Plugins\Actions\Columns\Metrics\AverageTimeOnPage;
|
| 17 |
+
use Piwik\Plugins\Actions\Columns\Metrics\BounceRate;
|
| 18 |
+
use Piwik\Plugins\Actions\Columns\Metrics\ExitRate;
|
| 19 |
+
|
| 20 |
+
class GetSiteSearchKeywords extends SiteSearchBase
|
| 21 |
+
{
|
| 22 |
+
protected function init()
|
| 23 |
+
{
|
| 24 |
+
parent::init();
|
| 25 |
+
$this->dimension = new Keyword();
|
| 26 |
+
$this->name = Piwik::translate('Actions_WidgetSearchKeywords');
|
| 27 |
+
$this->documentation = Piwik::translate('Actions_SiteSearchKeywordsDocumentation') . '<br/><br/>' . Piwik::translate('Actions_SiteSearchIntro');
|
| 28 |
+
$this->metrics = array('nb_visits', 'nb_pages_per_search');
|
| 29 |
+
$this->processedMetrics = array(
|
| 30 |
+
new AverageTimeOnPage(),
|
| 31 |
+
new BounceRate(),
|
| 32 |
+
new ExitRate(),
|
| 33 |
+
new AveragePageGenerationTime(),
|
| 34 |
+
);
|
| 35 |
+
$this->order = 15;
|
| 36 |
+
$this->subcategoryId = 'Actions_SubmenuSitesearch';
|
| 37 |
+
}
|
| 38 |
+
|
| 39 |
+
public function getMetrics()
|
| 40 |
+
{
|
| 41 |
+
return array(
|
| 42 |
+
'nb_visits' => Piwik::translate('Actions_ColumnSearches'),
|
| 43 |
+
'nb_pages_per_search' => Piwik::translate('Actions_ColumnPagesPerSearch'),
|
| 44 |
+
);
|
| 45 |
+
}
|
| 46 |
+
|
| 47 |
+
public function getProcessedMetrics()
|
| 48 |
+
{
|
| 49 |
+
return array(
|
| 50 |
+
'exit_rate' => Piwik::translate('Actions_ColumnSearchExits'),
|
| 51 |
+
);
|
| 52 |
+
}
|
| 53 |
+
|
| 54 |
+
protected function getMetricsDocumentation()
|
| 55 |
+
{
|
| 56 |
+
return array(
|
| 57 |
+
'nb_visits' => Piwik::translate('Actions_ColumnSearchesDocumentation'),
|
| 58 |
+
'nb_pages_per_search' => Piwik::translate('Actions_ColumnPagesPerSearchDocumentation'),
|
| 59 |
+
'exit_rate' => Piwik::translate('Actions_ColumnSearchExitsDocumentation'),
|
| 60 |
+
);
|
| 61 |
+
}
|
| 62 |
+
|
| 63 |
+
public function configureView(ViewDataTable $view)
|
| 64 |
+
{
|
| 65 |
+
$view->config->columns_to_display = array('label', 'nb_visits', 'nb_pages_per_search', 'exit_rate');
|
| 66 |
+
|
| 67 |
+
$this->addSiteSearchDisplayProperties($view);
|
| 68 |
+
}
|
| 69 |
+
}
|
plugins/Actions/Reports/GetSiteSearchNoResultKeywords.php
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Matomo - free/libre analytics platform
|
| 5 |
+
*
|
| 6 |
+
* @link https://matomo.org
|
| 7 |
+
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
namespace Piwik\Plugins\Actions\Reports;
|
| 11 |
+
|
| 12 |
+
use Piwik\Piwik;
|
| 13 |
+
use Piwik\Plugin\ViewDataTable;
|
| 14 |
+
use Piwik\Plugins\Actions\Columns\KeywordwithNoSearchResult;
|
| 15 |
+
use Piwik\Plugins\Actions\Columns\Metrics\AveragePageGenerationTime;
|
| 16 |
+
use Piwik\Plugins\Actions\Columns\Metrics\AverageTimeOnPage;
|
| 17 |
+
use Piwik\Plugins\Actions\Columns\Metrics\BounceRate;
|
| 18 |
+
use Piwik\Plugins\Actions\Columns\Metrics\ExitRate;
|
| 19 |
+
|
| 20 |
+
class GetSiteSearchNoResultKeywords extends SiteSearchBase
|
| 21 |
+
{
|
| 22 |
+
protected function init()
|
| 23 |
+
{
|
| 24 |
+
parent::init();
|
| 25 |
+
$this->dimension = new KeywordwithNoSearchResult();
|
| 26 |
+
$this->name = Piwik::translate('Actions_WidgetSearchNoResultKeywords');
|
| 27 |
+
$this->documentation = Piwik::translate('Actions_SiteSearchIntro') . '<br /><br />' . Piwik::translate('Actions_SiteSearchKeywordsNoResultDocumentation');
|
| 28 |
+
$this->metrics = array('nb_visits');
|
| 29 |
+
$this->processedMetrics = array(
|
| 30 |
+
new AverageTimeOnPage(),
|
| 31 |
+
new BounceRate(),
|
| 32 |
+
new ExitRate(),
|
| 33 |
+
new AveragePageGenerationTime(),
|
| 34 |
+
);
|
| 35 |
+
$this->order = 18;
|
| 36 |
+
|
| 37 |
+
$this->subcategoryId = 'Actions_SubmenuSitesearch';
|
| 38 |
+
}
|
| 39 |
+
|
| 40 |
+
public function getMetrics()
|
| 41 |
+
{
|
| 42 |
+
return array(
|
| 43 |
+
'nb_visits' => Piwik::translate('Actions_ColumnSearches'),
|
| 44 |
+
);
|
| 45 |
+
}
|
| 46 |
+
|
| 47 |
+
public function getProcessedMetrics()
|
| 48 |
+
{
|
| 49 |
+
return array(
|
| 50 |
+
'exit_rate' => Piwik::translate('Actions_ColumnSearchExits'),
|
| 51 |
+
);
|
| 52 |
+
}
|
| 53 |
+
|
| 54 |
+
protected function getMetricsDocumentation()
|
| 55 |
+
{
|
| 56 |
+
return array(
|
| 57 |
+
'nb_visits' => Piwik::translate('Actions_ColumnSearchesDocumentation'),
|
| 58 |
+
'exit_rate' => Piwik::translate('Actions_ColumnSearchExitsDocumentation'),
|
| 59 |
+
);
|
| 60 |
+
}
|
| 61 |
+
|
| 62 |
+
public function configureView(ViewDataTable $view)
|
| 63 |
+
{
|
| 64 |
+
$view->config->columns_to_display = array('label', 'nb_visits', 'exit_rate');
|
| 65 |
+
|
| 66 |
+
$this->addSiteSearchDisplayProperties($view);
|
| 67 |
+
}
|
| 68 |
+
}
|
plugins/Actions/Reports/SiteSearchBase.php
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Matomo - free/libre analytics platform
|
| 5 |
+
*
|
| 6 |
+
* @link https://matomo.org
|
| 7 |
+
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
namespace Piwik\Plugins\Actions\Reports;
|
| 11 |
+
|
| 12 |
+
use Piwik\Common;
|
| 13 |
+
use Piwik\Piwik;
|
| 14 |
+
use Piwik\Plugin\ViewDataTable;
|
| 15 |
+
use Piwik\Plugins\Actions\Actions;
|
| 16 |
+
use Piwik\Url;
|
| 17 |
+
|
| 18 |
+
abstract class SiteSearchBase extends Base
|
| 19 |
+
{
|
| 20 |
+
protected function init()
|
| 21 |
+
{
|
| 22 |
+
parent::init();
|
| 23 |
+
$this->categoryId = 'General_Actions';
|
| 24 |
+
$this->onlineGuideUrl = Url::addCampaignParametersToMatomoLink('https://matomo.org/docs/site-search/');
|
| 25 |
+
}
|
| 26 |
+
|
| 27 |
+
public function isEnabled()
|
| 28 |
+
{
|
| 29 |
+
$idSites = Common::getRequestVar('idSites', '', 'string');
|
| 30 |
+
$idSite = Common::getRequestVar('idSite', 0, 'int');
|
| 31 |
+
|
| 32 |
+
return $this->isEnabledForIdSites($idSites, $idSite);
|
| 33 |
+
}
|
| 34 |
+
|
| 35 |
+
protected function isEnabledForIdSites($idSites, $idSite)
|
| 36 |
+
{
|
| 37 |
+
$actions = new Actions();
|
| 38 |
+
return $actions->isSiteSearchEnabled($idSites, $idSite);
|
| 39 |
+
}
|
| 40 |
+
|
| 41 |
+
public function configureReportMetadata(&$availableReports, $infos)
|
| 42 |
+
{
|
| 43 |
+
$idSite = array($infos['idSite']);
|
| 44 |
+
|
| 45 |
+
if (!$this->isEnabledForIdSites($idSite, Common::getRequestVar('idSite', 0, 'int'))) {
|
| 46 |
+
return;
|
| 47 |
+
}
|
| 48 |
+
|
| 49 |
+
$report = $this->buildReportMetadata();
|
| 50 |
+
|
| 51 |
+
if (!empty($report)) {
|
| 52 |
+
$availableReports[] = $report;
|
| 53 |
+
}
|
| 54 |
+
}
|
| 55 |
+
|
| 56 |
+
protected function addSiteSearchDisplayProperties(ViewDataTable $view)
|
| 57 |
+
{
|
| 58 |
+
$view->config->addTranslations(array(
|
| 59 |
+
'nb_visits' => Piwik::translate('Actions_ColumnSearches'),
|
| 60 |
+
'exit_rate' => str_replace("% ", "% ", Piwik::translate('Actions_ColumnSearchExits')),
|
| 61 |
+
'nb_pages_per_search' => Piwik::translate('Actions_ColumnPagesPerSearch'),
|
| 62 |
+
));
|
| 63 |
+
|
| 64 |
+
$view->config->show_bar_chart = false;
|
| 65 |
+
$view->config->show_table_all_columns = false;
|
| 66 |
+
}
|
| 67 |
+
}
|
plugins/Actions/Segment.php
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Matomo - free/libre analytics platform
|
| 5 |
+
*
|
| 6 |
+
* @link https://matomo.org
|
| 7 |
+
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
namespace Piwik\Plugins\Actions;
|
| 11 |
+
|
| 12 |
+
/**
|
| 13 |
+
* Actions segment base class
|
| 14 |
+
*/
|
| 15 |
+
class Segment extends \Piwik\Plugin\Segment
|
| 16 |
+
{
|
| 17 |
+
protected function init()
|
| 18 |
+
{
|
| 19 |
+
$this->setCategory('General_Actions');
|
| 20 |
+
$this->setSqlFilter('\\Piwik\\Tracker\\TableLogAction::getIdActionFromSegment');
|
| 21 |
+
}
|
| 22 |
+
}
|
plugins/Actions/Tracker/ActionsRequestProcessor.php
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Matomo - free/libre analytics platform
|
| 5 |
+
*
|
| 6 |
+
* @link https://matomo.org
|
| 7 |
+
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
namespace Piwik\Plugins\Actions\Tracker;
|
| 11 |
+
|
| 12 |
+
use Piwik\Tracker\Action;
|
| 13 |
+
use Piwik\Tracker\Request;
|
| 14 |
+
use Piwik\Tracker\RequestProcessor;
|
| 15 |
+
use Piwik\Tracker\Visit\VisitProperties;
|
| 16 |
+
use Piwik\Tracker\Visitor;
|
| 17 |
+
|
| 18 |
+
/**
|
| 19 |
+
* Handles actions detection and recording during tracker requests.
|
| 20 |
+
*
|
| 21 |
+
* ## Request Metadata
|
| 22 |
+
*
|
| 23 |
+
* This RequestProcessor exposes the following metadata for the **Actions** plugin:
|
| 24 |
+
*
|
| 25 |
+
* **action**: Contains the `Action` instance that represents the action being tracked for
|
| 26 |
+
* the current tracking request.
|
| 27 |
+
*
|
| 28 |
+
* Set in `processRequestParams()`.
|
| 29 |
+
*
|
| 30 |
+
* Other RequestProcessors can unset this value to skip actions recording or
|
| 31 |
+
* change the value to change how they are recorded.
|
| 32 |
+
*
|
| 33 |
+
* **idReferrerActionUrl**: The idaction of the URL action that is the referrer for the action
|
| 34 |
+
* being tracked.
|
| 35 |
+
*
|
| 36 |
+
* Set in `processRequestParams()`.
|
| 37 |
+
*
|
| 38 |
+
* Can be changed/unset to change the current action's referrer action.
|
| 39 |
+
*
|
| 40 |
+
* **idReferrerActionName**: The idaction of the name action that is the referrer for the action
|
| 41 |
+
* being tracked.
|
| 42 |
+
*
|
| 43 |
+
* Set in `processRequestParams()`.
|
| 44 |
+
*
|
| 45 |
+
* Can be changed/unset to change the current action's referrer action.
|
| 46 |
+
*/
|
| 47 |
+
class ActionsRequestProcessor extends RequestProcessor
|
| 48 |
+
{
|
| 49 |
+
public function processRequestParams(VisitProperties $visitProperties, Request $request)
|
| 50 |
+
{
|
| 51 |
+
// normal page view, potentially triggering a URL matching goal
|
| 52 |
+
$action = Action::factory($request);
|
| 53 |
+
$action->writeDebugInfo();
|
| 54 |
+
|
| 55 |
+
$request->setMetadata('Actions', 'action', $action);
|
| 56 |
+
|
| 57 |
+
// save the exit actions of the last action in this visit as the referrer actions for the action being tracked.
|
| 58 |
+
// when the visit is updated, these columns will be changed, so we have to do this before recordLogs
|
| 59 |
+
$request->setMetadata(
|
| 60 |
+
'Actions',
|
| 61 |
+
'idReferrerActionUrl',
|
| 62 |
+
$visitProperties->getProperty('visit_exit_idaction_url')
|
| 63 |
+
);
|
| 64 |
+
$request->setMetadata(
|
| 65 |
+
'Actions',
|
| 66 |
+
'idReferrerActionName',
|
| 67 |
+
$visitProperties->getProperty('visit_exit_idaction_name')
|
| 68 |
+
);
|
| 69 |
+
|
| 70 |
+
return false;
|
| 71 |
+
}
|
| 72 |
+
|
| 73 |
+
public function afterRequestProcessed(VisitProperties $visitProperties, Request $request)
|
| 74 |
+
{
|
| 75 |
+
/** @var Action $action */
|
| 76 |
+
$action = $request->getMetadata('Actions', 'action');
|
| 77 |
+
|
| 78 |
+
if (!empty($action)) { // other plugins can unset the action if they want
|
| 79 |
+
$action->loadIdsFromLogActionTable();
|
| 80 |
+
}
|
| 81 |
+
|
| 82 |
+
return false;
|
| 83 |
+
}
|
| 84 |
+
|
| 85 |
+
public function recordLogs(VisitProperties $visitProperties, Request $request)
|
| 86 |
+
{
|
| 87 |
+
/** @var Action $action */
|
| 88 |
+
$action = $request->getMetadata('Actions', 'action');
|
| 89 |
+
|
| 90 |
+
if (
|
| 91 |
+
$action !== null
|
| 92 |
+
&& !$request->getMetadata('CoreHome', 'visitorNotFoundInDb')
|
| 93 |
+
) {
|
| 94 |
+
$idReferrerActionUrl = 0;
|
| 95 |
+
$idReferrerActionName = 0;
|
| 96 |
+
|
| 97 |
+
if (!$request->getMetadata('CoreHome', 'isNewVisit')) {
|
| 98 |
+
$idReferrerActionUrl = $request->getMetadata('Actions', 'idReferrerActionUrl');
|
| 99 |
+
$idReferrerActionName = $request->getMetadata('Actions', 'idReferrerActionName');
|
| 100 |
+
}
|
| 101 |
+
|
| 102 |
+
$visitor = Visitor::makeFromVisitProperties($visitProperties, $request);
|
| 103 |
+
$action->record($visitor, $idReferrerActionUrl, $idReferrerActionName);
|
| 104 |
+
}
|
| 105 |
+
}
|
| 106 |
+
}
|
plugins/Actions/VisitorDetails.php
ADDED
|
@@ -0,0 +1,523 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Matomo - free/libre analytics platform
|
| 5 |
+
*
|
| 6 |
+
* @link https://matomo.org
|
| 7 |
+
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
namespace Piwik\Plugins\Actions;
|
| 11 |
+
|
| 12 |
+
use Piwik\Common;
|
| 13 |
+
use Piwik\Date;
|
| 14 |
+
use Piwik\Metrics\Formatter;
|
| 15 |
+
use Piwik\Piwik;
|
| 16 |
+
use Piwik\Plugin;
|
| 17 |
+
use Piwik\Plugins\Live\VisitorDetailsAbstract;
|
| 18 |
+
use Piwik\Site;
|
| 19 |
+
use Piwik\Tracker\Action;
|
| 20 |
+
use Piwik\Tracker\PageUrl;
|
| 21 |
+
|
| 22 |
+
class VisitorDetails extends VisitorDetailsAbstract
|
| 23 |
+
{
|
| 24 |
+
public function extendVisitorDetails(&$visitor)
|
| 25 |
+
{
|
| 26 |
+
$visitor['searches'] = $this->details['visit_total_searches'];
|
| 27 |
+
$visitor['actions'] = $this->details['visit_total_actions'];
|
| 28 |
+
$visitor['interactions'] = $this->details['visit_total_interactions'];
|
| 29 |
+
}
|
| 30 |
+
|
| 31 |
+
public function provideActionsForVisitIds(&$actions, $visitIds)
|
| 32 |
+
{
|
| 33 |
+
$actionDetails = $this->queryActionsForVisits($visitIds);
|
| 34 |
+
// use while / array_shift combination instead of foreach to save memory
|
| 35 |
+
while (is_array($actionDetails) && count($actionDetails)) {
|
| 36 |
+
$action = array_shift($actionDetails);
|
| 37 |
+
$idVisit = $action['idvisit'];
|
| 38 |
+
unset($action['idvisit']);
|
| 39 |
+
$actions[$idVisit][] = $action;
|
| 40 |
+
}
|
| 41 |
+
}
|
| 42 |
+
|
| 43 |
+
|
| 44 |
+
public function provideActionsForVisit(&$actions, $visitorDetails)
|
| 45 |
+
{
|
| 46 |
+
$actionDetails = $actions;
|
| 47 |
+
|
| 48 |
+
$formatter = new Formatter();
|
| 49 |
+
|
| 50 |
+
// Enrich with time spent per action
|
| 51 |
+
$nextActionId = 0;
|
| 52 |
+
foreach ($actionDetails as $idx => &$action) {
|
| 53 |
+
if ($idx < $nextActionId || !$this->isPageView($action)) {
|
| 54 |
+
unset($action['timeSpentRef']);
|
| 55 |
+
continue; // skip to next page view
|
| 56 |
+
}
|
| 57 |
+
|
| 58 |
+
$action['timeSpent'] = 0;
|
| 59 |
+
|
| 60 |
+
// search for next action with timeSpentRef
|
| 61 |
+
$nextActionId = $idx;
|
| 62 |
+
$nextAction = null;
|
| 63 |
+
|
| 64 |
+
do {
|
| 65 |
+
$nextActionId++;
|
| 66 |
+
|
| 67 |
+
$nextAction = isset($actionDetails[$nextActionId]) ? $actionDetails[$nextActionId] : null;
|
| 68 |
+
|
| 69 |
+
if (is_null($nextAction)) {
|
| 70 |
+
// Last action of a visit.
|
| 71 |
+
// By default, Matomo does not know how long the user stayed on the page
|
| 72 |
+
// If enableHeartBeatTimer() is used in piwik.js then we can find the accurate time on page for the last pageview
|
| 73 |
+
$visitTotalTime = $visitorDetails['visitDuration'];
|
| 74 |
+
$timeOfLastAction = Date::factory($action['serverTimePretty'])->getTimestamp();
|
| 75 |
+
|
| 76 |
+
$timeSpentOnAllActionsApartFromLastOne = ($timeOfLastAction - $visitorDetails['firstActionTimestamp']);
|
| 77 |
+
$timeSpentOnPage = $visitTotalTime - $timeSpentOnAllActionsApartFromLastOne;
|
| 78 |
+
|
| 79 |
+
// Safe net, we assume the time is correct when it's more than 10 seconds
|
| 80 |
+
if ($timeSpentOnPage > 10) {
|
| 81 |
+
$action['timeSpent'] = $timeSpentOnPage;
|
| 82 |
+
}
|
| 83 |
+
break;
|
| 84 |
+
}
|
| 85 |
+
|
| 86 |
+
if (!array_key_exists('timeSpentRef', $nextAction)) {
|
| 87 |
+
continue;
|
| 88 |
+
}
|
| 89 |
+
|
| 90 |
+
// Set the time spent for this action (which is the timeSpentRef of the next action)
|
| 91 |
+
if ($nextAction) {
|
| 92 |
+
$action['timeSpent'] += $nextAction['timeSpentRef'] ?? 0;
|
| 93 |
+
}
|
| 94 |
+
|
| 95 |
+
// sum spent time until next page view
|
| 96 |
+
if ($this->isPageView($nextAction)) {
|
| 97 |
+
break;
|
| 98 |
+
}
|
| 99 |
+
} while (isset($actionDetails[$nextActionId]));
|
| 100 |
+
|
| 101 |
+
if (isset($action['timeSpent'])) {
|
| 102 |
+
$action['timeSpentPretty'] = $formatter->getPrettyTimeFromSeconds($action['timeSpent'], true);
|
| 103 |
+
}
|
| 104 |
+
|
| 105 |
+
unset($action['timeSpentRef']);
|
| 106 |
+
}
|
| 107 |
+
|
| 108 |
+
$actions = $actionDetails;
|
| 109 |
+
}
|
| 110 |
+
|
| 111 |
+
private function shouldHandleAction($action)
|
| 112 |
+
{
|
| 113 |
+
$actionTypesToHandle = array(
|
| 114 |
+
Action::TYPE_PAGE_URL,
|
| 115 |
+
Action::TYPE_PAGE_TITLE,
|
| 116 |
+
Action::TYPE_SITE_SEARCH,
|
| 117 |
+
Action::TYPE_EVENT,
|
| 118 |
+
Action::TYPE_OUTLINK,
|
| 119 |
+
Action::TYPE_DOWNLOAD,
|
| 120 |
+
);
|
| 121 |
+
|
| 122 |
+
if (empty($action['type'])) {
|
| 123 |
+
return !empty($action['eventType']);
|
| 124 |
+
}
|
| 125 |
+
|
| 126 |
+
return in_array($action['type'], $actionTypesToHandle) || !empty($action['eventType']);
|
| 127 |
+
}
|
| 128 |
+
|
| 129 |
+
private function isPageView($action)
|
| 130 |
+
{
|
| 131 |
+
if (empty($action['type'])) {
|
| 132 |
+
return false;
|
| 133 |
+
}
|
| 134 |
+
|
| 135 |
+
$pageViewTypes = array(
|
| 136 |
+
Action::TYPE_PAGE_URL,
|
| 137 |
+
Action::TYPE_PAGE_TITLE,
|
| 138 |
+
);
|
| 139 |
+
|
| 140 |
+
return in_array($action['type'], $pageViewTypes);
|
| 141 |
+
}
|
| 142 |
+
|
| 143 |
+
public function extendActionDetails(&$action, $nextAction, $visitorDetails)
|
| 144 |
+
{
|
| 145 |
+
$actionType = '';
|
| 146 |
+
if (!empty($action['type'])) {
|
| 147 |
+
$actionType = $action['type'];
|
| 148 |
+
}
|
| 149 |
+
|
| 150 |
+
$formatter = new Formatter();
|
| 151 |
+
|
| 152 |
+
if ($actionType == Action::TYPE_SITE_SEARCH) {
|
| 153 |
+
// Handle Site Search
|
| 154 |
+
$action['siteSearchKeyword'] = $action['pageTitle'];
|
| 155 |
+
$action['siteSearchCategory'] = $action['search_cat'];
|
| 156 |
+
$action['siteSearchCount'] = $action['search_count'];
|
| 157 |
+
unset($action['pageTitle']);
|
| 158 |
+
}
|
| 159 |
+
|
| 160 |
+
unset($action['search_cat']);
|
| 161 |
+
unset($action['search_count']);
|
| 162 |
+
|
| 163 |
+
// Generation time
|
| 164 |
+
if ($this->shouldHandleAction($action) && empty($action['eventType']) && isset($action['custom_float']) && $action['custom_float'] > 0) {
|
| 165 |
+
$action['generationTimeMilliseconds'] = $action['custom_float'];
|
| 166 |
+
$action['generationTime'] = $formatter->getPrettyTimeFromSeconds($action['custom_float'] / 1000, true);
|
| 167 |
+
unset($action['custom_float']);
|
| 168 |
+
}
|
| 169 |
+
|
| 170 |
+
if (array_key_exists('custom_float', $action) && is_null($action['custom_float'])) {
|
| 171 |
+
unset($action['custom_float']);
|
| 172 |
+
}
|
| 173 |
+
|
| 174 |
+
if (!array_key_exists('pageLoadTime', $action) || $action['pageLoadTime'] <= 0) {
|
| 175 |
+
unset($action['pageLoadTime']);
|
| 176 |
+
} else {
|
| 177 |
+
$action['pageLoadTimeMilliseconds'] = $action['pageLoadTime'];
|
| 178 |
+
$action['pageLoadTime'] = $formatter->getPrettyTimeFromSeconds($action['pageLoadTime'] / 1000, true);
|
| 179 |
+
}
|
| 180 |
+
|
| 181 |
+
if (array_key_exists('pageview_position', $action)) {
|
| 182 |
+
$action['pageviewPosition'] = $action['pageview_position'];
|
| 183 |
+
unset($action['pageview_position']);
|
| 184 |
+
}
|
| 185 |
+
|
| 186 |
+
// Reconstruct url from prefix
|
| 187 |
+
if (array_key_exists('url', $action) && array_key_exists('url_prefix', $action)) {
|
| 188 |
+
if ($action['url'] && stripos($action['url'], 'http://') !== 0 && stripos($action['url'], 'https://') !== 0) {
|
| 189 |
+
$url = PageUrl::reconstructNormalizedUrl($action['url'], $action['url_prefix']);
|
| 190 |
+
$url = Common::unsanitizeInputValue($url);
|
| 191 |
+
$action['url'] = $url;
|
| 192 |
+
}
|
| 193 |
+
|
| 194 |
+
unset($action['url_prefix']);
|
| 195 |
+
}
|
| 196 |
+
|
| 197 |
+
if (!empty($action['url']) && strpos($action['url'], 'http://') === 0) {
|
| 198 |
+
$host = parse_url($action['url'], PHP_URL_HOST);
|
| 199 |
+
|
| 200 |
+
if ($host && PageUrl::shouldUseHttpsHost($visitorDetails['idSite'], $host)) {
|
| 201 |
+
$action['url'] = 'https://' . mb_substr($action['url'], 7 /* = strlen('http://') */);
|
| 202 |
+
}
|
| 203 |
+
}
|
| 204 |
+
|
| 205 |
+
switch ($actionType) {
|
| 206 |
+
case 'goal':
|
| 207 |
+
$action['icon'] = 'plugins/Morpheus/images/goal.png';
|
| 208 |
+
$action['iconSVG'] = 'plugins/Morpheus/images/goal.svg';
|
| 209 |
+
$action['title'] = Piwik::translate('Goals_GoalConversion');
|
| 210 |
+
$action['subtitle'] = $action['goalName'];
|
| 211 |
+
if (!empty($action['revenue'])) {
|
| 212 |
+
$action['subtitle'] .= ' (' . Piwik::translate('Goals_NRevenue', $formatter->getPrettyMoney($action['revenue'], $visitorDetails['idSite'])) . ')';
|
| 213 |
+
}
|
| 214 |
+
break;
|
| 215 |
+
case Piwik::LABEL_ID_GOAL_IS_ECOMMERCE_ORDER:
|
| 216 |
+
case Piwik::LABEL_ID_GOAL_IS_ECOMMERCE_CART:
|
| 217 |
+
$action['icon'] = 'plugins/Morpheus/images/' . $actionType . '.png';
|
| 218 |
+
$action['iconSVG'] = 'plugins/Morpheus/images/' . $actionType . '.svg';
|
| 219 |
+
if ($actionType == Piwik::LABEL_ID_GOAL_IS_ECOMMERCE_ORDER) {
|
| 220 |
+
$action['title'] = Piwik::translate('CoreHome_VisitStatusOrdered') . ' (' . $action['orderId'] . ')';
|
| 221 |
+
} else {
|
| 222 |
+
$action['title'] = Piwik::translate('Goals_AbandonedCart');
|
| 223 |
+
}
|
| 224 |
+
|
| 225 |
+
$itemNames = implode(', ', array_column($action['itemDetails'], 'itemName'));
|
| 226 |
+
$action['subtitle'] = Piwik::translate('Goals_NRevenue', $formatter->getPrettyMoney($action['revenue'], $visitorDetails['idSite']));
|
| 227 |
+
$action['subtitle'] .= ' - ' . Piwik::translate('Goals_NItems', $action['items']) . ': ' . $itemNames . ')';
|
| 228 |
+
break;
|
| 229 |
+
case Action::TYPE_CONTENT:
|
| 230 |
+
if (!empty($action['contentInteraction'])) {
|
| 231 |
+
$action['icon'] = 'plugins/Morpheus/images/contentinteraction.png';
|
| 232 |
+
$action['iconSVG'] = 'plugins/Morpheus/images/contentinteraction.svg';
|
| 233 |
+
$action['title'] = Piwik::translate('Contents_ContentInteraction') . ' (' . $action['contentInteraction'] . ')';
|
| 234 |
+
} else {
|
| 235 |
+
$action['icon'] = 'plugins/Morpheus/images/contentimpression.png';
|
| 236 |
+
$action['iconSVG'] = 'plugins/Morpheus/images/contentimpression.svg';
|
| 237 |
+
$action['title'] = Piwik::translate('Contents_ContentImpression');
|
| 238 |
+
}
|
| 239 |
+
|
| 240 |
+
$action['subtitle'] = $action['contentName'];
|
| 241 |
+
if (!empty($action['contentPiece'])) {
|
| 242 |
+
$action['subtitle'] .= ' - ' . $action['contentPiece'];
|
| 243 |
+
}
|
| 244 |
+
break;
|
| 245 |
+
case Action::TYPE_DOWNLOAD:
|
| 246 |
+
$action['type'] = 'download';
|
| 247 |
+
$action['icon'] = 'plugins/Morpheus/images/download.png';
|
| 248 |
+
$action['iconSVG'] = 'plugins/Morpheus/images/download.svg';
|
| 249 |
+
$action['title'] = Piwik::translate('General_Download');
|
| 250 |
+
$action['subtitle'] = $action['url'];
|
| 251 |
+
break;
|
| 252 |
+
case Action::TYPE_OUTLINK:
|
| 253 |
+
$action['type'] = 'outlink';
|
| 254 |
+
$action['icon'] = 'plugins/Morpheus/images/link.png';
|
| 255 |
+
$action['iconSVG'] = 'plugins/Morpheus/images/link.svg';
|
| 256 |
+
$action['title'] = Piwik::translate('General_Outlink');
|
| 257 |
+
$action['subtitle'] = $action['url'];
|
| 258 |
+
break;
|
| 259 |
+
case Action::TYPE_SITE_SEARCH:
|
| 260 |
+
$action['type'] = 'search';
|
| 261 |
+
$action['icon'] = 'plugins/Morpheus/images/search.png';
|
| 262 |
+
$action['iconSVG'] = 'plugins/Morpheus/images/search.svg';
|
| 263 |
+
$action['title'] = Piwik::translate('Actions_SubmenuSitesearch');
|
| 264 |
+
$action['subtitle'] = $action['siteSearchKeyword'];
|
| 265 |
+
|
| 266 |
+
if (!empty($action['siteSearchCategory'])) {
|
| 267 |
+
$action['subtitle'] .= ' - ' . Piwik::translate('Actions_ColumnSearchCategory') . ': ' . $action['siteSearchCategory'];
|
| 268 |
+
}
|
| 269 |
+
|
| 270 |
+
if (!empty($action['siteSearchCount'])) {
|
| 271 |
+
$action['subtitle'] .= ' - ' . Piwik::translate('Actions_ColumnSearchResultsCount') . ': ' . $action['siteSearchCount'];
|
| 272 |
+
}
|
| 273 |
+
|
| 274 |
+
break;
|
| 275 |
+
case Action::TYPE_PAGE_URL:
|
| 276 |
+
case Action::TYPE_PAGE_TITLE:
|
| 277 |
+
case '':
|
| 278 |
+
if (!isset($action['title'])) {
|
| 279 |
+
$action['title'] = $action['pageTitle'];
|
| 280 |
+
$action['subtitle'] = $action['url'];
|
| 281 |
+
}
|
| 282 |
+
$action['type'] = 'action';
|
| 283 |
+
$action['icon'] = '';
|
| 284 |
+
$action['iconSVG'] = 'plugins/Morpheus/images/action.svg';
|
| 285 |
+
break;
|
| 286 |
+
}
|
| 287 |
+
|
| 288 |
+
// Convert datetimes to the site timezone
|
| 289 |
+
$dateTimeVisit = Date::factory(
|
| 290 |
+
$action['serverTimePretty'],
|
| 291 |
+
Site::getTimezoneFor($visitorDetails['idSite'])
|
| 292 |
+
);
|
| 293 |
+
$action['serverTimePretty'] = $dateTimeVisit->getLocalized(Date::DATETIME_FORMAT_SHORT);
|
| 294 |
+
$action['timestamp'] = $dateTimeVisit->getTimestamp();
|
| 295 |
+
|
| 296 |
+
unset($action['idlink_va']);
|
| 297 |
+
}
|
| 298 |
+
|
| 299 |
+
/**
|
| 300 |
+
* @param array $idVisits
|
| 301 |
+
* @return array
|
| 302 |
+
*/
|
| 303 |
+
protected function queryActionsForVisits($idVisits)
|
| 304 |
+
{
|
| 305 |
+
$customFields = array();
|
| 306 |
+
$customJoins = array();
|
| 307 |
+
|
| 308 |
+
Piwik::postEvent('Actions.getCustomActionDimensionFieldsAndJoins', array(&$customFields, &$customJoins));
|
| 309 |
+
|
| 310 |
+
$customFields = array_filter($customFields);
|
| 311 |
+
array_unshift($customFields, ''); // add empty element at first
|
| 312 |
+
$customActionDimensionFields = implode(', ', $customFields);
|
| 313 |
+
|
| 314 |
+
// The second join is a LEFT join to allow returning records that don't have a matching page title
|
| 315 |
+
// eg. Downloads, Outlinks. For these, idaction_name is set to 0
|
| 316 |
+
$pagePerformanceSelect = '';
|
| 317 |
+
if (Plugin\Manager::getInstance()->isPluginActivated('PagePerformance')) {
|
| 318 |
+
$pagePerformanceSelect = '( log_link_visit_action.time_network +
|
| 319 |
+
log_link_visit_action.time_server +
|
| 320 |
+
log_link_visit_action.time_transfer +
|
| 321 |
+
log_link_visit_action.time_dom_completion +
|
| 322 |
+
log_link_visit_action.time_dom_processing +
|
| 323 |
+
log_link_visit_action.time_on_load ) AS pageLoadTime,';
|
| 324 |
+
}
|
| 325 |
+
|
| 326 |
+
$sql = "
|
| 327 |
+
SELECT
|
| 328 |
+
log_link_visit_action.idvisit,
|
| 329 |
+
COALESCE(log_action.type, log_action_title.type) AS type,
|
| 330 |
+
log_action.name AS url,
|
| 331 |
+
log_action.url_prefix,
|
| 332 |
+
log_action_title.name AS pageTitle,
|
| 333 |
+
log_action.idaction AS pageIdAction,
|
| 334 |
+
log_link_visit_action.idpageview,
|
| 335 |
+
log_link_visit_action.idlink_va,
|
| 336 |
+
log_link_visit_action.server_time as serverTimePretty,
|
| 337 |
+
log_link_visit_action.time_spent_ref_action as timeSpentRef,
|
| 338 |
+
log_link_visit_action.idlink_va AS pageId,
|
| 339 |
+
log_link_visit_action.custom_float,
|
| 340 |
+
$pagePerformanceSelect
|
| 341 |
+
log_link_visit_action.pageview_position,
|
| 342 |
+
log_link_visit_action.search_cat,
|
| 343 |
+
log_link_visit_action.search_count
|
| 344 |
+
" . $customActionDimensionFields . "
|
| 345 |
+
FROM `" . Common::prefixTable('log_link_visit_action') . "` AS log_link_visit_action
|
| 346 |
+
LEFT JOIN `" . Common::prefixTable('log_action') . "` AS log_action
|
| 347 |
+
ON log_link_visit_action.idaction_url = log_action.idaction
|
| 348 |
+
LEFT JOIN `" . Common::prefixTable('log_action') . "` AS log_action_title
|
| 349 |
+
ON log_link_visit_action.idaction_name = log_action_title.idaction
|
| 350 |
+
" . implode(" ", $customJoins) . "
|
| 351 |
+
WHERE log_link_visit_action.idvisit IN ('" . implode("','", $idVisits) . "')
|
| 352 |
+
ORDER BY log_link_visit_action.idvisit, log_link_visit_action.server_time, log_link_visit_action.idlink_va
|
| 353 |
+
";
|
| 354 |
+
$actionDetails = $this->getDb()->fetchAll($sql);
|
| 355 |
+
return $actionDetails;
|
| 356 |
+
}
|
| 357 |
+
|
| 358 |
+
|
| 359 |
+
private $visitedPageUrls = array();
|
| 360 |
+
private $siteSearchKeywords = array();
|
| 361 |
+
private $pageGenerationTimeTotal = 0;
|
| 362 |
+
private $pageLoadTimeTotal = 0;
|
| 363 |
+
|
| 364 |
+
public function initProfile($visits, &$profile)
|
| 365 |
+
{
|
| 366 |
+
$this->visitedPageUrls = array();
|
| 367 |
+
$this->siteSearchKeywords = array();
|
| 368 |
+
$this->pageGenerationTimeTotal = 0;
|
| 369 |
+
$this->pageLoadTimeTotal = 0;
|
| 370 |
+
$profile['totalActions'] = 0;
|
| 371 |
+
$profile['totalOutlinks'] = 0;
|
| 372 |
+
$profile['totalDownloads'] = 0;
|
| 373 |
+
$profile['totalSearches'] = 0;
|
| 374 |
+
$profile['totalPageViews'] = 0;
|
| 375 |
+
$profile['totalUniquePageViews'] = 0;
|
| 376 |
+
$profile['totalRevisitedPages'] = 0;
|
| 377 |
+
$profile['totalPageViewsWithTiming'] = 0;
|
| 378 |
+
$profile['totalPageViewsWithLoadTime'] = 0;
|
| 379 |
+
$profile['searches'] = array();
|
| 380 |
+
}
|
| 381 |
+
|
| 382 |
+
public function handleProfileVisit($visit, &$profile)
|
| 383 |
+
{
|
| 384 |
+
$profile['totalActions'] += $visit->getColumn('actions');
|
| 385 |
+
}
|
| 386 |
+
|
| 387 |
+
public function handleProfileAction($action, &$profile)
|
| 388 |
+
{
|
| 389 |
+
$this->handleIfDownloadAction($action, $profile);
|
| 390 |
+
$this->handleIfOutlinkAction($action, $profile);
|
| 391 |
+
$this->handleIfSiteSearchAction($action, $profile);
|
| 392 |
+
$this->handleIfPageViewAction($action, $profile);
|
| 393 |
+
$this->handleIfPageGenerationTime($action, $profile);
|
| 394 |
+
$this->handleIfPageLoadTime($action, $profile);
|
| 395 |
+
}
|
| 396 |
+
|
| 397 |
+
public function finalizeProfile($visits, &$profile)
|
| 398 |
+
{
|
| 399 |
+
$profile['visitedPages'] = [];
|
| 400 |
+
|
| 401 |
+
foreach ($this->visitedPageUrls as $visitedPageUrl => $count) {
|
| 402 |
+
$profile['visitedPages'][] = [
|
| 403 |
+
'url' => $visitedPageUrl,
|
| 404 |
+
'count' => $count,
|
| 405 |
+
];
|
| 406 |
+
}
|
| 407 |
+
|
| 408 |
+
usort($profile['visitedPages'], function ($a, $b) {
|
| 409 |
+
if ($a['count'] == $b['count']) {
|
| 410 |
+
return strcmp($a['url'], $b['url']);
|
| 411 |
+
}
|
| 412 |
+
|
| 413 |
+
return $a['count'] > $b['count'] ? -1 : 1;
|
| 414 |
+
});
|
| 415 |
+
|
| 416 |
+
$this->handleSiteSearches($profile);
|
| 417 |
+
$this->handleAveragePageGenerationTime($profile);
|
| 418 |
+
$this->handleAveragePageLoadTime($profile);
|
| 419 |
+
}
|
| 420 |
+
|
| 421 |
+
/**
|
| 422 |
+
* @param $action
|
| 423 |
+
*/
|
| 424 |
+
private function handleIfDownloadAction($action, &$profile)
|
| 425 |
+
{
|
| 426 |
+
if (empty($action['type']) || $action['type'] != 'download') {
|
| 427 |
+
return;
|
| 428 |
+
}
|
| 429 |
+
$profile['totalDownloads']++;
|
| 430 |
+
}
|
| 431 |
+
|
| 432 |
+
/**
|
| 433 |
+
* @param $action
|
| 434 |
+
*/
|
| 435 |
+
private function handleIfOutlinkAction($action, &$profile)
|
| 436 |
+
{
|
| 437 |
+
if (empty($action['type']) || $action['type'] != 'outlink') {
|
| 438 |
+
return;
|
| 439 |
+
}
|
| 440 |
+
$profile['totalOutlinks']++;
|
| 441 |
+
}
|
| 442 |
+
|
| 443 |
+
/**
|
| 444 |
+
* @param $action
|
| 445 |
+
*/
|
| 446 |
+
private function handleIfPageViewAction($action, &$profile)
|
| 447 |
+
{
|
| 448 |
+
if (empty($action['type']) || $action['type'] != 'action') {
|
| 449 |
+
return;
|
| 450 |
+
}
|
| 451 |
+
$profile['totalPageViews']++;
|
| 452 |
+
$pageUrl = $action['url'];
|
| 453 |
+
if (!empty($pageUrl)) {
|
| 454 |
+
if (!array_key_exists($pageUrl, $this->visitedPageUrls)) {
|
| 455 |
+
$this->visitedPageUrls[$pageUrl] = 0;
|
| 456 |
+
$profile['totalUniquePageViews']++;
|
| 457 |
+
}
|
| 458 |
+
$this->visitedPageUrls[$pageUrl]++;
|
| 459 |
+
if ($this->visitedPageUrls[$pageUrl] == 2) {
|
| 460 |
+
$profile['totalRevisitedPages']++;
|
| 461 |
+
}
|
| 462 |
+
}
|
| 463 |
+
}
|
| 464 |
+
|
| 465 |
+
private function handleIfSiteSearchAction($action, &$profile)
|
| 466 |
+
{
|
| 467 |
+
if (!isset($action['siteSearchKeyword'])) {
|
| 468 |
+
return;
|
| 469 |
+
}
|
| 470 |
+
$keyword = $action['siteSearchKeyword'];
|
| 471 |
+
|
| 472 |
+
if (!isset($this->siteSearchKeywords[$keyword])) {
|
| 473 |
+
$this->siteSearchKeywords[$keyword] = 0;
|
| 474 |
+
++$profile['totalSearches'];
|
| 475 |
+
}
|
| 476 |
+
++$this->siteSearchKeywords[$keyword];
|
| 477 |
+
}
|
| 478 |
+
|
| 479 |
+
private function handleSiteSearches(&$profile)
|
| 480 |
+
{
|
| 481 |
+
// sort by visit/action
|
| 482 |
+
arsort($this->siteSearchKeywords);
|
| 483 |
+
|
| 484 |
+
foreach ($this->siteSearchKeywords as $keyword => $searchCount) {
|
| 485 |
+
$profile['searches'][] = array(
|
| 486 |
+
'keyword' => $keyword,
|
| 487 |
+
'searches' => $searchCount,
|
| 488 |
+
);
|
| 489 |
+
}
|
| 490 |
+
}
|
| 491 |
+
|
| 492 |
+
private function handleIfPageGenerationTime($action, &$profile)
|
| 493 |
+
{
|
| 494 |
+
if (isset($action['generationTimeMilliseconds'])) {
|
| 495 |
+
$this->pageGenerationTimeTotal += $action['generationTimeMilliseconds'];
|
| 496 |
+
++$profile['totalPageViewsWithTiming'];
|
| 497 |
+
}
|
| 498 |
+
}
|
| 499 |
+
|
| 500 |
+
private function handleAveragePageGenerationTime(&$profile)
|
| 501 |
+
{
|
| 502 |
+
if ($profile['totalPageViewsWithTiming']) {
|
| 503 |
+
$profile['averagePageGenerationTime'] =
|
| 504 |
+
round($this->pageGenerationTimeTotal / (1000 * $profile['totalPageViewsWithTiming']), $precision = 3);
|
| 505 |
+
}
|
| 506 |
+
}
|
| 507 |
+
|
| 508 |
+
private function handleIfPageLoadTime($action, &$profile)
|
| 509 |
+
{
|
| 510 |
+
if (isset($action['pageLoadTimeMilliseconds'])) {
|
| 511 |
+
$this->pageLoadTimeTotal += $action['pageLoadTimeMilliseconds'];
|
| 512 |
+
++$profile['totalPageViewsWithLoadTime'];
|
| 513 |
+
}
|
| 514 |
+
}
|
| 515 |
+
|
| 516 |
+
private function handleAveragePageLoadTime(&$profile)
|
| 517 |
+
{
|
| 518 |
+
if ($profile['totalPageViewsWithLoadTime']) {
|
| 519 |
+
$profile['averagePageLoadTime'] =
|
| 520 |
+
round($this->pageLoadTimeTotal / (1000 * $profile['totalPageViewsWithLoadTime']), $precision = 3);
|
| 521 |
+
}
|
| 522 |
+
}
|
| 523 |
+
}
|
plugins/Actions/config/config.php
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
return array();
|
plugins/Actions/config/tracker.php
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
return array();
|
plugins/Actions/javascripts/actionsDataTable.js
ADDED
|
@@ -0,0 +1,341 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/*!
|
| 2 |
+
* Matomo - free/libre analytics platform
|
| 3 |
+
*
|
| 4 |
+
* @link https://matomo.org
|
| 5 |
+
* @license https://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
| 6 |
+
*/
|
| 7 |
+
|
| 8 |
+
(function ($, require) {
|
| 9 |
+
|
| 10 |
+
var exports = require('piwik/UI'),
|
| 11 |
+
DataTable = exports.DataTable,
|
| 12 |
+
dataTablePrototype = DataTable.prototype;
|
| 13 |
+
|
| 14 |
+
// helper function for ActionDataTable
|
| 15 |
+
function getLevelFromClass(style) {
|
| 16 |
+
if (!style || typeof style == "undefined") return 0;
|
| 17 |
+
|
| 18 |
+
var currentLevel = 0;
|
| 19 |
+
|
| 20 |
+
var currentLevelIndex = style.indexOf('level');
|
| 21 |
+
if (currentLevelIndex >= 0) {
|
| 22 |
+
currentLevel = Number(style.slice(currentLevelIndex + 5, currentLevelIndex + 6));
|
| 23 |
+
}
|
| 24 |
+
return currentLevel;
|
| 25 |
+
}
|
| 26 |
+
|
| 27 |
+
/**
|
| 28 |
+
* UI control that handles extra functionality for Actions datatables.
|
| 29 |
+
*
|
| 30 |
+
* @constructor
|
| 31 |
+
*/
|
| 32 |
+
exports.ActionsDataTable = function (element) {
|
| 33 |
+
this.parentAttributeParent = '';
|
| 34 |
+
this.parentId = '';
|
| 35 |
+
this.disabledRowDom = {}; // to handle double click on '+' row
|
| 36 |
+
|
| 37 |
+
DataTable.call(this, element);
|
| 38 |
+
};
|
| 39 |
+
|
| 40 |
+
$.extend(exports.ActionsDataTable.prototype, dataTablePrototype, {
|
| 41 |
+
|
| 42 |
+
//see dataTable::bindEventsAndApplyStyle
|
| 43 |
+
bindEventsAndApplyStyle: function (domElem, rows) {
|
| 44 |
+
var self = this;
|
| 45 |
+
|
| 46 |
+
self.cleanParams();
|
| 47 |
+
self.preBindEventsAndApplyStyleHook(domElem, rows);
|
| 48 |
+
|
| 49 |
+
if (!rows) {
|
| 50 |
+
rows = $('tr', domElem);
|
| 51 |
+
}
|
| 52 |
+
|
| 53 |
+
self.numberOfSubtables = rows.filter('.subDataTable').click(function () {
|
| 54 |
+
if (!self.param.filter_pattern_recursive) {
|
| 55 |
+
// we don't display the link on the row with subDataTable when we are already
|
| 56 |
+
// printing all the subTables (case of recursive search when the content is
|
| 57 |
+
// including recursively all the subtables
|
| 58 |
+
self.onClickActionSubDataTable(this);
|
| 59 |
+
}
|
| 60 |
+
}).length;
|
| 61 |
+
self.applyCosmetics(domElem, rows);
|
| 62 |
+
self.handleColumnHighlighting(domElem);
|
| 63 |
+
self.handleRowActions(domElem, rows);
|
| 64 |
+
self.handleLimit(domElem);
|
| 65 |
+
self.handlePeriod(domElem);
|
| 66 |
+
self.handleAnnotationsButton(domElem);
|
| 67 |
+
self.handleExportBox(domElem);
|
| 68 |
+
self.handleSort(domElem);
|
| 69 |
+
self.handleOffsetInformation(domElem);
|
| 70 |
+
if (self.workingDivId != undefined) {
|
| 71 |
+
var dataTableLoadedProxy = function (response) {
|
| 72 |
+
self.dataTableLoaded(response, self.workingDivId);
|
| 73 |
+
};
|
| 74 |
+
|
| 75 |
+
self.handleConfigurationBox(domElem, dataTableLoadedProxy);
|
| 76 |
+
self.handleSearchBox(domElem, dataTableLoadedProxy);
|
| 77 |
+
}
|
| 78 |
+
|
| 79 |
+
self.handleColumnDocumentation(domElem);
|
| 80 |
+
self.handleRelatedReports(domElem);
|
| 81 |
+
self.handleTriggeredEvents(domElem);
|
| 82 |
+
self.handleCellTooltips(domElem);
|
| 83 |
+
self.setFixWidthToMakeEllipsisWork(domElem);
|
| 84 |
+
self.handleSummaryRow(domElem);
|
| 85 |
+
self.openSubtableFromLevel0IfOnlyOneSubtableGiven(domElem);
|
| 86 |
+
self.postBindEventsAndApplyStyleHook(domElem, rows);
|
| 87 |
+
},
|
| 88 |
+
|
| 89 |
+
openSubtableFromLevel0IfOnlyOneSubtableGiven: function (domElem) {
|
| 90 |
+
var $subtables = domElem.find('.subDataTable');
|
| 91 |
+
var hasOnlyOneSubtable = $subtables.length === 1;
|
| 92 |
+
|
| 93 |
+
if (hasOnlyOneSubtable) {
|
| 94 |
+
var hasOnlyOneRow = domElem.find('tbody tr.level0').length === 1;
|
| 95 |
+
|
| 96 |
+
if (hasOnlyOneRow) {
|
| 97 |
+
var $labels = $subtables.find('.label');
|
| 98 |
+
if ($labels.length) {
|
| 99 |
+
$labels.first().click();
|
| 100 |
+
}
|
| 101 |
+
}
|
| 102 |
+
}
|
| 103 |
+
},
|
| 104 |
+
|
| 105 |
+
openSubtableFromSubtableIfOnlyOneSubtableGiven: function (domElem) {
|
| 106 |
+
var hasOnlyOneRow = domElem.length === 1;
|
| 107 |
+
var hasOnlyOneSubtable = domElem.hasClass('subDataTable');
|
| 108 |
+
|
| 109 |
+
if (hasOnlyOneRow && hasOnlyOneSubtable) {
|
| 110 |
+
// when subtable is loaded
|
| 111 |
+
var $labels = domElem.find('.label');
|
| 112 |
+
if ($labels.length) {
|
| 113 |
+
$labels.first().click();
|
| 114 |
+
}
|
| 115 |
+
}
|
| 116 |
+
},
|
| 117 |
+
|
| 118 |
+
//see dataTable::applyCosmetics
|
| 119 |
+
applyCosmetics: function (domElem, rows) {
|
| 120 |
+
var self = this;
|
| 121 |
+
var rowsWithSubtables = rows.filter('.subDataTable');
|
| 122 |
+
|
| 123 |
+
rowsWithSubtables.css('font-weight', 'bold');
|
| 124 |
+
|
| 125 |
+
$("th:first-child", domElem).addClass('label');
|
| 126 |
+
$(rowsWithSubtables)
|
| 127 |
+
.each(function () {
|
| 128 |
+
if (self.param.filter_pattern_recursive) {
|
| 129 |
+
$(this).addClass('expanded');
|
| 130 |
+
// remove tooltip "Click this row to expand or contract the subtable"
|
| 131 |
+
$(this).attr('title', '');
|
| 132 |
+
}
|
| 133 |
+
});
|
| 134 |
+
|
| 135 |
+
var rootRow = rows.first().prev();
|
| 136 |
+
|
| 137 |
+
// we look at the style of the row before the new rows to determine the rows'
|
| 138 |
+
// level
|
| 139 |
+
var level = rootRow.length ? getLevelFromClass(rootRow.attr('class')) + 1 : 0;
|
| 140 |
+
|
| 141 |
+
rows.each(function () {
|
| 142 |
+
var currentStyle = $(this).attr('class') || '';
|
| 143 |
+
|
| 144 |
+
if (currentStyle.indexOf('level') == -1) {
|
| 145 |
+
$(this).addClass('level' + level);
|
| 146 |
+
}
|
| 147 |
+
|
| 148 |
+
// we add an attribute parent that contains the ID of all the parent categories
|
| 149 |
+
// this ID is used when collapsing a parent row, it searches for all children rows
|
| 150 |
+
// which 'parent' attribute's value contains the collapsed row ID
|
| 151 |
+
$(this).prop('parent', function () {
|
| 152 |
+
return self.parentAttributeParent + ' ' + self.parentId;
|
| 153 |
+
});
|
| 154 |
+
});
|
| 155 |
+
|
| 156 |
+
self.addOddAndEvenClasses(domElem);
|
| 157 |
+
},
|
| 158 |
+
|
| 159 |
+
addOddAndEvenClasses: function(domElem) {
|
| 160 |
+
// empty
|
| 161 |
+
},
|
| 162 |
+
|
| 163 |
+
handleRowActions: function (domElem, rows) {
|
| 164 |
+
this.doHandleRowActions(rows);
|
| 165 |
+
},
|
| 166 |
+
|
| 167 |
+
// Called when the user click on an actionDataTable row
|
| 168 |
+
onClickActionSubDataTable: function (domElem) {
|
| 169 |
+
var self = this;
|
| 170 |
+
|
| 171 |
+
// get the idSubTable
|
| 172 |
+
var idSubTable = $(domElem).attr('id');
|
| 173 |
+
|
| 174 |
+
var divIdToReplaceWithSubTable = 'subDataTable_' + idSubTable;
|
| 175 |
+
|
| 176 |
+
var $insertAfter = $(domElem).nextUntil(':not(.comparePeriod):not(.comparisonRow)').last();
|
| 177 |
+
if (!$insertAfter.length) {
|
| 178 |
+
$insertAfter = $(domElem);
|
| 179 |
+
}
|
| 180 |
+
|
| 181 |
+
var NextStyle = $insertAfter.next().attr('class');
|
| 182 |
+
var CurrentStyle = $(domElem).attr('class');
|
| 183 |
+
|
| 184 |
+
var currentRowLevel = getLevelFromClass(CurrentStyle);
|
| 185 |
+
var nextRowLevel = getLevelFromClass(NextStyle);
|
| 186 |
+
|
| 187 |
+
// if the row has not been clicked
|
| 188 |
+
// which is the same as saying that the next row level is equal or less than the current row
|
| 189 |
+
// because when we click a row the level of the next rows is higher (level2 row gives level3 rows)
|
| 190 |
+
if (currentRowLevel >= nextRowLevel) {
|
| 191 |
+
//unbind click to avoid double click problem
|
| 192 |
+
$(domElem).off('click');
|
| 193 |
+
self.disabledRowDom = $(domElem);
|
| 194 |
+
|
| 195 |
+
var numberOfColumns = $(domElem).children().length;
|
| 196 |
+
$insertAfter.after('\
|
| 197 |
+
<tr id="' + divIdToReplaceWithSubTable + '" class="cellSubDataTable">\
|
| 198 |
+
<td colspan="' + numberOfColumns + '">\
|
| 199 |
+
<span class="loadingPiwik" style="display:inline">\
|
| 200 |
+
<span class="matomo-loader"><span></span><span></span><span></span></span>\
|
| 201 |
+
Loading...\
|
| 202 |
+
</span>\
|
| 203 |
+
</td>\
|
| 204 |
+
</tr>\
|
| 205 |
+
');
|
| 206 |
+
var savedActionVariable = self.param.action;
|
| 207 |
+
|
| 208 |
+
// reset all the filters from the Parent table
|
| 209 |
+
var filtersToRestore = self.resetAllFilters();
|
| 210 |
+
|
| 211 |
+
// Do not reset the sorting filters that must be applied to sub tables
|
| 212 |
+
this.param['filter_sort_column'] = filtersToRestore['filter_sort_column'];
|
| 213 |
+
this.param['filter_sort_order'] = filtersToRestore['filter_sort_order'];
|
| 214 |
+
this.param['enable_filter_excludelowpop'] = filtersToRestore['enable_filter_excludelowpop'];
|
| 215 |
+
|
| 216 |
+
self.param.idSubtable = idSubTable;
|
| 217 |
+
self.param.action = self.props.subtable_controller_action;
|
| 218 |
+
|
| 219 |
+
var extraParams = {};
|
| 220 |
+
extraParams.comparisonIdSubtables = self.getComparisonIdSubtables($(domElem));
|
| 221 |
+
|
| 222 |
+
self.reloadAjaxDataTable(false, function (resp) {
|
| 223 |
+
self.actionsSubDataTableLoaded(resp, idSubTable);
|
| 224 |
+
self.repositionRowActions($(domElem));
|
| 225 |
+
}, extraParams);
|
| 226 |
+
self.param.action = savedActionVariable;
|
| 227 |
+
|
| 228 |
+
self.restoreAllFilters(filtersToRestore);
|
| 229 |
+
|
| 230 |
+
delete self.param.idSubtable;
|
| 231 |
+
}
|
| 232 |
+
// else we toggle all these rows
|
| 233 |
+
else {
|
| 234 |
+
var isExpanded = $(domElem).hasClass('subDataTable') && $(domElem).hasClass('expanded');
|
| 235 |
+
|
| 236 |
+
$(domElem).siblings().each(function () {
|
| 237 |
+
var parents = $(this).prop('parent').split(' ');
|
| 238 |
+
if (parents) {
|
| 239 |
+
if (parents.indexOf(idSubTable) >= 0
|
| 240 |
+
|| parents.indexOf('subDataTable_' + idSubTable) >= 0) {
|
| 241 |
+
if (!isExpanded) {
|
| 242 |
+
$(this).css('display', '').removeClass('hidden');
|
| 243 |
+
|
| 244 |
+
// unroll everything if the row is already opened
|
| 245 |
+
var NextStyle = $(this).next().attr('class');
|
| 246 |
+
var CurrentStyle = $(this).attr('class');
|
| 247 |
+
|
| 248 |
+
var currentRowLevel = getLevelFromClass(CurrentStyle);
|
| 249 |
+
var nextRowLevel = getLevelFromClass(NextStyle);
|
| 250 |
+
|
| 251 |
+
if (currentRowLevel < nextRowLevel) {
|
| 252 |
+
$(this).addClass('expanded');
|
| 253 |
+
}
|
| 254 |
+
}
|
| 255 |
+
else {
|
| 256 |
+
$(this).css('display', 'none').addClass('hidden');
|
| 257 |
+
}
|
| 258 |
+
self.repositionRowActions($(domElem));
|
| 259 |
+
}
|
| 260 |
+
}
|
| 261 |
+
});
|
| 262 |
+
|
| 263 |
+
self.$element.trigger('piwik:actionsSubTableToggled');
|
| 264 |
+
}
|
| 265 |
+
|
| 266 |
+
// toggle the +/- image
|
| 267 |
+
$(domElem).toggleClass('expanded');
|
| 268 |
+
},
|
| 269 |
+
|
| 270 |
+
//called when the full table actions is loaded
|
| 271 |
+
dataTableLoaded: function (response, workingDivId) {
|
| 272 |
+
var content = $(response);
|
| 273 |
+
var idToReplace = workingDivId || $(content).attr('id');
|
| 274 |
+
|
| 275 |
+
//reset parents id
|
| 276 |
+
self.parentAttributeParent = '';
|
| 277 |
+
self.parentId = '';
|
| 278 |
+
|
| 279 |
+
var dataTableSel = $('#' + idToReplace);
|
| 280 |
+
|
| 281 |
+
// keep the original list of related reports
|
| 282 |
+
var oldReportsElem = $('.datatableRelatedReports', dataTableSel);
|
| 283 |
+
$('.datatableRelatedReports', content).replaceWith(oldReportsElem);
|
| 284 |
+
|
| 285 |
+
dataTableSel.replaceWith(content);
|
| 286 |
+
|
| 287 |
+
content.trigger('piwik:dataTableLoaded');
|
| 288 |
+
|
| 289 |
+
piwikHelper.compileVueEntryComponents(content);
|
| 290 |
+
|
| 291 |
+
piwikHelper.lazyScrollTo(content[0], 400);
|
| 292 |
+
|
| 293 |
+
return content;
|
| 294 |
+
},
|
| 295 |
+
|
| 296 |
+
// Called when a set of rows for a category of actions is loaded
|
| 297 |
+
actionsSubDataTableLoaded: function (response, idSubTable) {
|
| 298 |
+
var self = this;
|
| 299 |
+
var idToReplace = 'subDataTable_' + idSubTable;
|
| 300 |
+
var root = $('#' + self.workingDivId);
|
| 301 |
+
|
| 302 |
+
var response = $(response);
|
| 303 |
+
self.parentAttributeParent = $('tr#' + idToReplace).prev().prop('parent');
|
| 304 |
+
self.parentId = idToReplace;
|
| 305 |
+
|
| 306 |
+
$('tr#' + idToReplace, root).after(response).remove();
|
| 307 |
+
|
| 308 |
+
var requiredColumnCount = 0, availableColumnCount = 0;
|
| 309 |
+
|
| 310 |
+
response.prev().find('td').each(function(){ requiredColumnCount += $(this).attr('colspan') || 1; });
|
| 311 |
+
response.find('td').each(function(){ availableColumnCount += $(this).attr('colspan') || 1; });
|
| 312 |
+
|
| 313 |
+
var missingColumns = requiredColumnCount - availableColumnCount;
|
| 314 |
+
for (var i = 0; i < missingColumns; i++) {
|
| 315 |
+
// if the subtable has fewer columns than the parent table, add some columns.
|
| 316 |
+
// this happens for example, when the parent table has performance metrics and the subtable doesn't.
|
| 317 |
+
response.append('<td>-</td>');
|
| 318 |
+
}
|
| 319 |
+
|
| 320 |
+
var re = /subDataTable_(\d+)/;
|
| 321 |
+
var ok = re.exec(self.parentId);
|
| 322 |
+
if (ok) {
|
| 323 |
+
self.parentId = ok[1];
|
| 324 |
+
}
|
| 325 |
+
|
| 326 |
+
// we execute the bindDataTableEvent function for the new DIV
|
| 327 |
+
self.bindEventsAndApplyStyle($('#' + self.workingDivId), response);
|
| 328 |
+
|
| 329 |
+
self.$element.trigger('piwik:actionsSubDataTableLoaded');
|
| 330 |
+
|
| 331 |
+
//bind back the click event (disabled to avoid double-click problem)
|
| 332 |
+
self.disabledRowDom.click(
|
| 333 |
+
function () {
|
| 334 |
+
self.onClickActionSubDataTable(this)
|
| 335 |
+
});
|
| 336 |
+
|
| 337 |
+
self.openSubtableFromSubtableIfOnlyOneSubtableGiven(response);
|
| 338 |
+
}
|
| 339 |
+
});
|
| 340 |
+
|
| 341 |
+
})(jQuery, require);
|
plugins/Actions/javascripts/rowactions.js
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
$(function () {
|
| 2 |
+
|
| 3 |
+
function isActionsModule(params)
|
| 4 |
+
{
|
| 5 |
+
return params.module == 'Actions';
|
| 6 |
+
}
|
| 7 |
+
|
| 8 |
+
function isPageUrlReport(params) {
|
| 9 |
+
var action = params.action;
|
| 10 |
+
|
| 11 |
+
return isActionsModule(params) &&
|
| 12 |
+
(action == 'getPageUrls' || action == 'getEntryPageUrls' || action == 'getExitPageUrls' || action == 'getPageUrlsFollowingSiteSearch');
|
| 13 |
+
};
|
| 14 |
+
|
| 15 |
+
function isPageTitleReport(params) {
|
| 16 |
+
var action = params.action;
|
| 17 |
+
|
| 18 |
+
return isActionsModule(params) && (action == 'getPageTitles' || action == 'getPageTitlesFollowingSiteSearch');
|
| 19 |
+
};
|
| 20 |
+
|
| 21 |
+
function getLinkForTransitionAndOverlayPopover(tr)
|
| 22 |
+
{
|
| 23 |
+
tr = getRealRowIfComparisonRow(tr);
|
| 24 |
+
|
| 25 |
+
var link = tr.find('> td:first > a').attr('href');
|
| 26 |
+
// replace all &, that are not part of a named character reference with a tailing semicolon, with a &
|
| 27 |
+
// otherwise named character references without a tailing , (like ®) would be replaced
|
| 28 |
+
link = link.replace(/&([a-z]+[^a-z;])/, '&$1');
|
| 29 |
+
link = $('<textarea>').html(link).val(); // remove html entities
|
| 30 |
+
return link;
|
| 31 |
+
}
|
| 32 |
+
|
| 33 |
+
if (window.DataTable_RowActions_Transitions) {
|
| 34 |
+
DataTable_RowActions_Transitions.registerReport({
|
| 35 |
+
isAvailableOnReport: function (dataTableParams) {
|
| 36 |
+
return isPageUrlReport(dataTableParams);
|
| 37 |
+
},
|
| 38 |
+
isAvailableOnRow: function (dataTableParams, tr) {
|
| 39 |
+
tr = getRealRowIfComparisonRow(tr);
|
| 40 |
+
return isPageUrlReport(dataTableParams) && tr.find('> td:first span.label').parent().is('a')
|
| 41 |
+
},
|
| 42 |
+
trigger: function (tr, e, subTableLabel, originalRow) {
|
| 43 |
+
var overrideParams = $.extend({}, $(originalRow || tr).data('param-override'));
|
| 44 |
+
if (typeof overrideParams !== 'object') {
|
| 45 |
+
overrideParams = {};
|
| 46 |
+
}
|
| 47 |
+
|
| 48 |
+
tr = getRealRowIfComparisonRow(tr);
|
| 49 |
+
|
| 50 |
+
var link = getLinkForTransitionAndOverlayPopover(tr);
|
| 51 |
+
var popoverUrl = 'url:' + link;
|
| 52 |
+
|
| 53 |
+
Object.keys(overrideParams).forEach(function (paramName) {
|
| 54 |
+
if (!overrideParams[paramName]) {
|
| 55 |
+
return;
|
| 56 |
+
}
|
| 57 |
+
|
| 58 |
+
popoverUrl += ':' + encodeURIComponent(paramName) + ':' + encodeURIComponent(overrideParams[paramName]);
|
| 59 |
+
});
|
| 60 |
+
|
| 61 |
+
this.openPopover(popoverUrl);
|
| 62 |
+
}
|
| 63 |
+
});
|
| 64 |
+
|
| 65 |
+
DataTable_RowActions_Transitions.registerReport({
|
| 66 |
+
isAvailableOnReport: function (dataTableParams) {
|
| 67 |
+
return isPageTitleReport(dataTableParams);
|
| 68 |
+
},
|
| 69 |
+
isAvailableOnRow: function (dataTableParams, tr) {
|
| 70 |
+
return isPageTitleReport(dataTableParams);
|
| 71 |
+
},
|
| 72 |
+
trigger: function (tr, e, subTableLabel) {
|
| 73 |
+
DataTable_RowAction.prototype.trigger.apply(this, [tr, e, subTableLabel]);
|
| 74 |
+
}
|
| 75 |
+
});
|
| 76 |
+
}
|
| 77 |
+
|
| 78 |
+
if (window.DataTable_RowActions_Overlay) {
|
| 79 |
+
DataTable_RowActions_Overlay.registerReport({
|
| 80 |
+
isAvailableOnReport: function (dataTableParams) {
|
| 81 |
+
return isPageUrlReport(dataTableParams);
|
| 82 |
+
},
|
| 83 |
+
onClick: function (actionA, tr, e) {
|
| 84 |
+
return {
|
| 85 |
+
link: getLinkForTransitionAndOverlayPopover(tr),
|
| 86 |
+
segment: null
|
| 87 |
+
}
|
| 88 |
+
}
|
| 89 |
+
});
|
| 90 |
+
}
|
| 91 |
+
|
| 92 |
+
function getRealRowIfComparisonRow(tr) {
|
| 93 |
+
if (tr.is('.comparisonRow')) {
|
| 94 |
+
var prevUntil = tr.prevUntil('.parentComparisonRow').prev();
|
| 95 |
+
return prevUntil.length ? prevUntil : tr.prev();
|
| 96 |
+
}
|
| 97 |
+
return tr;
|
| 98 |
+
}
|
| 99 |
+
});
|
plugins/Actions/lang/am.json
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"Actions": {
|
| 3 |
+
"ColumnClicks": "ጠቃድርጎች",
|
| 4 |
+
"ColumnDownloadURL": "የማውረጃ ዩ አር ኤል",
|
| 5 |
+
"ColumnPageName": "የገፅ ስም",
|
| 6 |
+
"ColumnUniqueClicks": "ብቸኛ ጠቅአድርጎች",
|
| 7 |
+
"ColumnUniqueDownloads": "ብቸኛ የወረዱ"
|
| 8 |
+
}
|
| 9 |
+
}
|
plugins/Actions/lang/ar.json
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"Actions": {
|
| 3 |
+
"ActionType": "نوع الأمر",
|
| 4 |
+
"AvgGenerationTimeTooltip": "متوسط على أساس %1$s كبسة %2$s ما بين %3$s و %4$s",
|
| 5 |
+
"ColumnActionURL": "رابط الأمر",
|
| 6 |
+
"ColumnClicks": "النقرات",
|
| 7 |
+
"ColumnClicksDocumentation": "عدد مرات النقر على هذا الرابط.",
|
| 8 |
+
"ColumnDownloadURL": "رابط التحميل",
|
| 9 |
+
"ColumnEntryPageTitle": "عنوان صفحة الوصول",
|
| 10 |
+
"ColumnEntryPageURL": "رابط صفحة الوصول",
|
| 11 |
+
"ColumnExitPageTitle": "عنوان صفحة المغادرة",
|
| 12 |
+
"ColumnExitPageURL": "رابط صفحة المغادرة",
|
| 13 |
+
"ColumnNoResultKeyword": "الكلمات الدلالية بدون نتائج بحث",
|
| 14 |
+
"ColumnPageName": "اسم الصفحة",
|
| 15 |
+
"ColumnPageURL": "رابط الصفحة",
|
| 16 |
+
"ColumnPagesPerSearch": "صفحات نتائج البحث",
|
| 17 |
+
"ColumnPagesPerSearchDocumentation": "سيقوم الزوار بالبحث على صفحات موقعك، وفي بعض الأحيان سينقرون \"التالي\" لمشاهدة المزيد من النتائج. هذا هو متوسط عدد صفحات نتائج البحث المعروضة لتلك الكلمة الدلالية.",
|
| 18 |
+
"ColumnSearchCategory": "فئة البحث",
|
| 19 |
+
"ColumnSearchExitsDocumentation": "نسبة الزيارات التي غادرت موقعك بعد البحث عن هذه الكلمة باستخدام محرك بحث موقعك.",
|
| 20 |
+
"ColumnSearchResultsCount": "عدد نتائج البحث",
|
| 21 |
+
"ColumnSearches": "البجث",
|
| 22 |
+
"ColumnSearchesDocumentation": "عدد الزيارات التي تم فيها البحث عن هذه الكلمة باستخدام محرك بحث موقعك.",
|
| 23 |
+
"ColumnSiteSearchKeywords": "الكلمات الدلالية الفريدة",
|
| 24 |
+
"ColumnUniqueClicks": "النقرات الفريدة",
|
| 25 |
+
"ColumnUniqueClicksDocumentation": "عدد الزيارات التي تم النقر فيها على هذا الرابط. إذا تم النقر عدة مرات على الرابط نفسه في زيارة واحدة، ستحتسب جميعها واحدة فقط.",
|
| 26 |
+
"ColumnUniqueDownloads": "التحميلات الفريدة",
|
| 27 |
+
"ColumnUniqueOutlinks": "الروابط الصادرة الفريدة",
|
| 28 |
+
"DownloadsReportDocumentation": "في هذا التقرير، يمكنك مشاهدة أي الملفات قام زوارك بتحميلها. %s ما يحتسبه بايويك كعملية تحميل هو النقر على رابط التحميل. لا يستطيع أن يعلم بايويك ما إذا كان التحميل قد اكتمل أم لا.",
|
| 29 |
+
"EntryPageTitles": "عناوين صفحات الوصول",
|
| 30 |
+
"EntryPageTitlesReportDocumentation": "يتضمن هذا التقرير معلومات عن عناوين صفحات الوصول التي تم استخدامها خلال فترة زمنية معينة.",
|
| 31 |
+
"ExitPageTitles": "عناوين صفحات الخروج",
|
| 32 |
+
"ExitPageTitlesReportDocumentation": "يتضمن هذا التقرير معلومات عن عناوين صفحات الخروج التي حدثت خلال الفترة المحددة.",
|
| 33 |
+
"OneSearch": "نتيجة بحث واحدة",
|
| 34 |
+
"OutlinkDocumentation": "الرابط الصادر هو رابط يقود الزائر بعيداً عن موقعك (إلى اسم نطاق آخر).",
|
| 35 |
+
"OutlinksReportDocumentation": "يعرض هذا التقرير قائمة هيكلية بالروابط الصادرة والتي تم النقر عليها بواسطة زوارك.",
|
| 36 |
+
"PageTitlesReportDocumentation": "يتضمن هذا التقرير معلومات عن عناوين الصفحات التي تم زيارتها. %1$s عنوان الصفحة هو وسم لغة %2$s HTML الذي تعرضه أغلب متصفحات ويب كعناون النافذة.",
|
| 37 |
+
"PageUrls": "روابط الصفحة",
|
| 38 |
+
"PagesReportDocumentation": "يتضمن هذا التقرير معلومات عن روابط الصفحات التي تم زيارتها. %s الجدول منظم هيكلياً، والروابط معروضة في شكل شجرة مجلدات.",
|
| 39 |
+
"PagesSubcategoryHelp3": "استخدم أيقونات زائد وناقص على اليمين للتنقل.",
|
| 40 |
+
"PluginDescription": "تقارير عرض الصفحات وعناوين الصفحات. تتيح لك هذه التقارير قياس خدمة البحث الداخلية في موقعك. كما تقدم تتبعاً آلياً للنقرات للروابط الخارجية وتنزيلات الملفات.",
|
| 41 |
+
"SiteSearchCategories1": "يعرض هذا التقرير قائمة الفئات التي اختارها زوارك عندما قاموا بالبحث في موقعك.",
|
| 42 |
+
"SiteSearchCategories2": "على سبيل المثال، المواقع التجارية عادة ما تحتوي طريقة لاختيار \"فئة\" بحيث يمكن للزوار حصر البحث في فئة منتجات معينة.",
|
| 43 |
+
"SiteSearchFollowingPagesDoc": "عندما يقوم زوارك بالبحث في موقعك، فإنهم يبحثون عن صفحة بعينها، مقال ما، منتج أو خدمة. هذا التقرير يعرض أكثر الصفحات التي قاموا بالنقر عليها عند استخدام بحث الموقع. بكلمات أخرى، هذه قائمة بالصفحات التي يبحث عنها زوارك دائماً.",
|
| 44 |
+
"SiteSearchIntro": "تتبع عمليات البحث التي يقوم بها الزوار على موقعك هي أكثر الطرق فعالية لمعرفة ما يبحث عنه جمهورك، هذا قد يساعد على البحث عن أفكار للمحتوى الجديد، سلع جديد للتسوق الألكتروني التي بحث عنها المستهلكين، و عموما تحسين تجربة الزوار على موقعك.",
|
| 45 |
+
"SiteSearchKeyword": "كلمة (بحث موقع(",
|
| 46 |
+
"SiteSearchKeywordsDocumentation": "يعرض هذا التقرير قوائم كلمات البحث الدلالية التي بحث عنها زوارك باستخدام محرك البحث الداخلي لديك.",
|
| 47 |
+
"SiteSearchKeywordsNoResultDocumentation": "يعرض هذا التقرير قوائك كلمات البحث الدلالية التي لم تأتي بأي نتائج: ربما تحتاج خوارزمية محرك البحث إلى التحسين، أو ربما بحث زوار موقعك عن محتوى غير موجود (بعد)؟",
|
| 48 |
+
"SubmenuPageTitles": "عناوين الصفحات",
|
| 49 |
+
"SubmenuPagesEntry": "صفحات الدخول",
|
| 50 |
+
"SubmenuPagesExit": "صفحات الخروج",
|
| 51 |
+
"SubmenuSitesearch": "بحث الموقع",
|
| 52 |
+
"WidgetEntryPageTitles": "عناوين صفحات الدخول",
|
| 53 |
+
"WidgetExitPageTitles": "عناوين صفحات الخروج",
|
| 54 |
+
"WidgetPageTitles": "عناوين الصفحة",
|
| 55 |
+
"WidgetPageTitlesFollowingSearch": "عناوين الصفحة بعد بحث بالموقع",
|
| 56 |
+
"WidgetPageUrlsFollowingSearch": "الصفحات بعد بحث بالموقع",
|
| 57 |
+
"WidgetPagesEntry": "صفحات الوصول",
|
| 58 |
+
"WidgetPagesExit": "صفحات الخروج",
|
| 59 |
+
"WidgetSearchCategories": "فئات البحث",
|
| 60 |
+
"WidgetSearchKeywords": "كلمات البحث الدلالية",
|
| 61 |
+
"WidgetSearchNoResultKeywords": "كلمات البحث الدلالية بلا نتائج"
|
| 62 |
+
}
|
| 63 |
+
}
|
plugins/Actions/lang/az.json
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"Actions": {
|
| 3 |
+
"ColumnClicks": "Klikləmələr",
|
| 4 |
+
"ColumnClicksDocumentation": "Bu keçidin kliklənmə sayı.",
|
| 5 |
+
"ColumnDownloadURL": "İndirme Sayfa Adresleri",
|
| 6 |
+
"ColumnEntryPageTitle": "Giriş səhifəsi Başlığı",
|
| 7 |
+
"ColumnEntryPageURL": "Giriş Sayfa Adresi",
|
| 8 |
+
"ColumnExitPageTitle": "Çıxış səhifəsi Başlığı",
|
| 9 |
+
"ColumnExitPageURL": "Çıxış Sayfa Adresi",
|
| 10 |
+
"ColumnPageName": "Səhifə Adı",
|
| 11 |
+
"ColumnPageURL": "Sayfa Adresi",
|
| 12 |
+
"ColumnSearchCategory": "Axtarış Kategorisi"
|
| 13 |
+
}
|
| 14 |
+
}
|
plugins/Actions/lang/be.json
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"Actions": {
|
| 3 |
+
"ColumnClicks": "Націскі",
|
| 4 |
+
"ColumnClicksDocumentation": "Колькасць націскаў па гэтай спасылцы.",
|
| 5 |
+
"ColumnDownloadURL": "URL запамповак",
|
| 6 |
+
"ColumnEntryPageTitle": "Назва старонкі ўваходу",
|
| 7 |
+
"ColumnEntryPageURL": "URL старонкі ўваходу",
|
| 8 |
+
"ColumnExitPageTitle": "Назва старонак выхаду",
|
| 9 |
+
"ColumnExitPageURL": "URL старонкі выхаду",
|
| 10 |
+
"ColumnPageName": "Імя старонкі",
|
| 11 |
+
"ColumnPageURL": "URL старонкі",
|
| 12 |
+
"ColumnUniqueClicks": "Унікальныя націскі",
|
| 13 |
+
"ColumnUniqueClicksDocumentation": "Колькасць наведвалнікаў, якія націснулі на гэтую спасылку. Калі спасылка была націснутая некалькі разоў на працягу аднаго наведвання, то яна лічыцца адзін раз.",
|
| 14 |
+
"ColumnUniqueDownloads": "Унікальныя запампоўкі",
|
| 15 |
+
"DownloadsReportDocumentation": "На гэтай справаздачы, можна ўбачыць, якія файлы былі спампаваны вашымя наведвальнікамі. %s Matomo лічыць за спампаўку націск на адпаведную спасылку. Была запампоўка завершана ці не, гэта не вядома Matomo.",
|
| 16 |
+
"OutlinkDocumentation": "Знешняя спасылка - гэта такая спасылка, якая вядзе наведвальніка прэч з вашага сайта (да іншага дамену).",
|
| 17 |
+
"OutlinksReportDocumentation": "Гэтая справаздача паказвае іерархічны спіс URL-адрасоў знешніх спасылак, якія былі націснуты вашымі наведвальнікамі.",
|
| 18 |
+
"PageTitlesReportDocumentation": "Гэтая справаздача змяшчае інфармацыю аб назвах старонак, якія былі наведаны. %1$s Назва старонкі гэта HTML %2$s тэг, які большасць брасзэраў паказваюць у загалоўке акна.",
|
| 19 |
+
"PagesReportDocumentation": "Гэтая справаздача змяшчае інфармацыю аб URL-адрасах старонак, якія былі наведаны. %s Табліца арганізавана іерархічна, URL-адрасы адлюстроўваюцца ў выглядзе тэчакавай структуры.",
|
| 20 |
+
"PagesSubcategoryHelp3": "Выкарыстоўвайце значкі плюса і мінуса, якія знаходзяцца злева, для навігацыі.",
|
| 21 |
+
"SubmenuPageTitles": "Назвы старонак",
|
| 22 |
+
"SubmenuPagesEntry": "Старонкі ўваходу",
|
| 23 |
+
"SubmenuPagesExit": "Старонкі выхаду"
|
| 24 |
+
}
|
| 25 |
+
}
|
plugins/Actions/lang/bg.json
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"Actions": {
|
| 3 |
+
"ActionType": "Тип действие",
|
| 4 |
+
"ActionTypes": "Видове действия",
|
| 5 |
+
"ActionsInVisit": "Действия при посещение",
|
| 6 |
+
"AvgGenerationTimeTooltip": "Средно базирано на %1$s посещение(я) %2$s между %3$s и %4$s",
|
| 7 |
+
"Behaviour": "Поведение",
|
| 8 |
+
"ColumnActionURL": "URL адрес на действие",
|
| 9 |
+
"ColumnClickedURL": "Кликната препратка",
|
| 10 |
+
"ColumnClickedURLs": "Кликнати препратки",
|
| 11 |
+
"ColumnClicks": "Кликвания",
|
| 12 |
+
"ColumnClicksDocumentation": "Брой кликвания на тази връзка.",
|
| 13 |
+
"ColumnDownloadURL": "Свален URL",
|
| 14 |
+
"ColumnDownloadURLs": "URL адреси за изтегляне",
|
| 15 |
+
"ColumnEntryPageTitle": "Входно заглавие",
|
| 16 |
+
"ColumnEntryPageURL": "Входна страница",
|
| 17 |
+
"ColumnEntryPageURLs": "URL адреси на входни страници",
|
| 18 |
+
"ColumnExitPageTitle": "Изходно заглавие",
|
| 19 |
+
"ColumnExitPageURL": "Изходна страница",
|
| 20 |
+
"ColumnExitPageURLs": "URL адреси на изходни страници",
|
| 21 |
+
"ColumnIdPageview": "ID на преглед на страница",
|
| 22 |
+
"ColumnInteractionPosition": "Позиция на взаимодействие",
|
| 23 |
+
"ColumnNoResultKeyword": "Ключова дума без резултати в търсенето",
|
| 24 |
+
"ColumnPageName": "Име на страницата",
|
| 25 |
+
"ColumnPageURL": "Страница URL",
|
| 26 |
+
"ColumnPageViewPosition": "Позиция на прегледа на страницата",
|
| 27 |
+
"ColumnPagesPerSearch": "Страници с резултати от търсене",
|
| 28 |
+
"ColumnPagesPerSearchDocumentation": "Посетителите ще търсят във вашия сайт, а понякога избират „Напред“, за да видят повече резултати. Това е средният брой на страниците с резултати от търсенето, видян за тази ключова дума.",
|
| 29 |
+
"ColumnSearchCategory": "Търсена категория",
|
| 30 |
+
"ColumnSearchExits": "%% Изходи за търсене",
|
| 31 |
+
"ColumnSearchExitsDocumentation": "Процент посещения, след които, потребителите са напуснали сайта, при търсене за тази ключова дума.",
|
| 32 |
+
"ColumnSearchResultsCount": "Брой резултати от търсенето",
|
| 33 |
+
"ColumnSearches": "Търсачки",
|
| 34 |
+
"ColumnSearchesDocumentation": "Брой посещения търсениза тази ключова дума от системата за търсене на твоя сайт.",
|
| 35 |
+
"ColumnSiteSearchKeywords": "Уникални ключови думи",
|
| 36 |
+
"ColumnUniqueClicks": "Уникални кликове",
|
| 37 |
+
"ColumnUniqueClicksDocumentation": "Броят на посещенията които са кликнали на тази връзка. Ако на тази връзка е било кликано няколко пъти, при едно посещение, отчита се само веднъж.",
|
| 38 |
+
"ColumnUniqueDownloads": "Уникални изтегляния",
|
| 39 |
+
"ColumnUniqueOutlinks": "Уникални изходящи",
|
| 40 |
+
"DownloadsReportDocumentation": "В този отчет можете да видите файловете, които Вашите посетители са изтеглили. %s Matomo отчита броя кликвания върху връзката за сваляне. Дали изтеглянето е завършено или не, не е ясно за Matomo.",
|
| 41 |
+
"DownloadsSubcategoryHelp1": "В този отчет можете да видите кои файлове са изтеглили посетителите Ви.",
|
| 42 |
+
"DownloadsSubcategoryHelp2": "Това, което Matomo брои за изтегляне, е кликването върху връзка за изтегляне. Дали изтеглянето е завършено или не, не е известно на Matomo.",
|
| 43 |
+
"EntryPageTitles": "Входни заглавия",
|
| 44 |
+
"EntryPageTitlesReportDocumentation": "Този отчет съдържа информация за заглавията на входните страници, които са били използвани през определен период.",
|
| 45 |
+
"EntryPagesReportDocumentation": "Този отчет съдържа информация за входните страници, които са били използвани през посочения период. Входната страница е първата страница, която потребителят преглежда по време на посещението си. %s Входните URL адреси се показват като структура от папки.",
|
| 46 |
+
"EntryPagesSubcategoryHelp1": "Този отчет съдържа информация за входните страници, които са били използвани през посочения период. Входната страница е първата страница, която потребителят преглежда по време на посещението си.",
|
| 47 |
+
"EntryPagesSubcategoryHelp2": "Входните URL адреси се показват като структура от папки.",
|
| 48 |
+
"ExitPageTitles": "Изходни заглавия",
|
| 49 |
+
"ExitPageTitlesReportDocumentation": "Този отчет съдържа информация за заглавията на изходните страници, които са били използвани през определен период.",
|
| 50 |
+
"ExitPagesReportDocumentation": "Този отчет съдържа информация за изходните страници, възникнали през посочения период. Изходната страница е последната страница, която потребителят преглежда по време на посещението си. %s Изходните URL адреси се показват като структура от папки.",
|
| 51 |
+
"ExitPagesSubcategoryHelp1": "Този отчет съдържа информация за изходните страници, възникнали през посочения период. Изходната страница е последната страница, която потребителят преглежда по време на посещението си.",
|
| 52 |
+
"ExitPagesSubcategoryHelp2": "Изходните URL адреси се показват като структура от папки.",
|
| 53 |
+
"MainMetricsReportDocumentation": "Този отчет предоставя много основен преглед на това какви действия предприемат посетителите на уебсайта Ви.",
|
| 54 |
+
"OneSearch": "1 търсене",
|
| 55 |
+
"OutlinkDocumentation": "Изходящата връзка е връзка, която води посетителя извън Вашия сайт (към друг домейн).",
|
| 56 |
+
"OutlinksReportDocumentation": "Този доклад показва йерархичен списък на изходящите адреси, които са избрани от посетителите.",
|
| 57 |
+
"OutlinksSubcategoryHelp1": "Този отчет показва йерархичен списък с URL адреси за препращане, върху които са кликнали посетителите Ви. Препратка (outlink) е връзка, която отвежда посетителя извън Вашия уебсайт (към друг домейн).",
|
| 58 |
+
"PageTitlesReportDocumentation": "Този доклад включва информация за заглавията на посетена страница. %1$s Заглавието на страницата е HTML %2$s таг, който се изобразява в заглавната част на повечето браузери.",
|
| 59 |
+
"PageTitlesSubcategoryHelp1": "Този отчет съдържа информация за заглавията на посетените страници.",
|
| 60 |
+
"PageTitlesSubcategoryHelp2": "Заглавието на страницата е HTML &lt;title&gt; таг, който повечето браузъри показват в заглавието на прозореца си.",
|
| 61 |
+
"PageUrls": "URLs страница",
|
| 62 |
+
"PageViewsByVisitor": "Колко пъти тази страница е била прегледана от този посетител за всички посещения",
|
| 63 |
+
"PagesReportDocumentation": "Този доклад включва информация за посетените връзки. %s Таблицата е организирана йерархично, връзките са показани като структура от папки.",
|
| 64 |
+
"PagesSubcategoryHelp1": "Този отчет съдържа информация за URL адресите на страниците, които са били посетени.",
|
| 65 |
+
"PagesSubcategoryHelp2": "Таблицата е организирана йерархично, URL адресите се показват като структура от папки.",
|
| 66 |
+
"PagesSubcategoryHelp3": "Използвайте знаците плюс и минус за навигация.",
|
| 67 |
+
"PluginDescription": "Отчети за показванията на страниците и заглавията на страниците. Позволява Ви да измерите търсачката на Вашия вътрешен уебсайт. Автоматично проследява кликванията върху външни връзки и изтегляния на файлове.",
|
| 68 |
+
"RevisitedPages": "Страници, преглеждани повече от веднъж",
|
| 69 |
+
"SiteSearchCategories": "Категории (търсене в сайта)",
|
| 70 |
+
"SiteSearchCategories1": "Този доклад показва списък с категориите, които посетителите са избрали при търсене във Вашия сайт.",
|
| 71 |
+
"SiteSearchCategories2": "Например, електронните магазини обикновено имат категоризатор, така че посетителите да могат да филтрират търсенията си за всички продукти по категория.",
|
| 72 |
+
"SiteSearchCategory": "Категория (търсене в сайта)",
|
| 73 |
+
"SiteSearchFollowingPagesDoc": "Когато посетителите разглеждат Вашия сайт, те търсят определена страница, продукт или услуга. Този доклад показва списъка със страници, които са били посетени предимно след използване на търсачката на сайта. С други думи, това е списъкът с най-посещаваните страници, които са били търсени от посетителите намиращи се във Вашия сайт.",
|
| 74 |
+
"SiteSearchIntro": "Проследявайки търсенията, които посетителите правят на вашия сайт, е един много ефективен начин да научите повече за това, което вашата аудитория търси. Това може да помогне за намиране на идеи за ново съдържание, нови продукти и търговия, които потенциалните клиенти могат да търсят, и като цяло да подобри впечатлението на потребителя от вашия сайт.",
|
| 75 |
+
"SiteSearchKeyword": "Ключова дума (Търсене на сайта)",
|
| 76 |
+
"SiteSearchKeywordCount": "Брой ключови думи (търсене в сайта)",
|
| 77 |
+
"SiteSearchKeywordCounts": "Брой ключови думи (търсене в сайта)",
|
| 78 |
+
"SiteSearchKeywords": "Ключови думи (търсене в сайта)",
|
| 79 |
+
"SiteSearchKeywordsDocumentation": "Този отчет описва ключовите думи, които посетителите търсят през търсачката на сайта.",
|
| 80 |
+
"SiteSearchKeywordsNoResultDocumentation": "Този отчет съдържа „Търсене по ключови думи“, в който няма резултати от търсенето: може би алгоритъмът на търсачката може да се подобри, или може би вашите посетители търсят съдържание, което (все още) не е на вашия сайт?",
|
| 81 |
+
"SiteSearchSubcategoryHelp1": "Секцията за търсене в сайта показва кои ключови думи използват посетителите, когато търсят във Вашия уебсайт. Той също така показва кои страници преглеждат потребителите след извършване на търсене и кои ключови думи за търсене на място не връщат никакви резултати.",
|
| 82 |
+
"SiteSearchSubcategoryHelp2": "Тези отчети могат да Ви дадат идеи за липсващо съдържание на Вашия сайт, представа за това, което Вашите посетители търсят, но не могат да намерят лесно и др.",
|
| 83 |
+
"SiteSearchSubcategoryHelp3": "Научете повече в ръководството за търсене в сайта.",
|
| 84 |
+
"SubmenuPageTitles": "Заглавия на страници",
|
| 85 |
+
"SubmenuPagesEntry": "Входни страници",
|
| 86 |
+
"SubmenuPagesExit": "Изходни страници",
|
| 87 |
+
"SubmenuSitesearch": "Търсене на сайт",
|
| 88 |
+
"TimeSpentInReferringAction": "Време, прекарано в препращащо действие",
|
| 89 |
+
"WidgetEntryPageTitles": "Входящо заглавие на страницата",
|
| 90 |
+
"WidgetExitPageTitles": "Изходящо заглавие на страницата",
|
| 91 |
+
"WidgetPageTitles": "Заглавия на страниците",
|
| 92 |
+
"WidgetPageTitlesFollowingSearch": "Заглавия на страници следящи търсен��ята на сайтове",
|
| 93 |
+
"WidgetPageUrlsFollowingSearch": "Страници следящи търсенията на сайтове",
|
| 94 |
+
"WidgetPagesEntry": "Входящи страници",
|
| 95 |
+
"WidgetPagesExit": "Изходящи страници",
|
| 96 |
+
"WidgetSearchCategories": "Търси категории",
|
| 97 |
+
"WidgetSearchKeywords": "Ключови думи търсени от сайта",
|
| 98 |
+
"WidgetSearchNoResultKeywords": "Търсене по ключови думи без резултати"
|
| 99 |
+
}
|
| 100 |
+
}
|
plugins/Actions/lang/bn.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{}
|
plugins/Actions/lang/bs.json
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"Actions": {
|
| 3 |
+
"AvgGenerationTimeTooltip": "Prosijek baziran na %1$s pogodak(a) %2$s između %3$s i %4$s",
|
| 4 |
+
"ColumnClicks": "Klikovi",
|
| 5 |
+
"ColumnClicksDocumentation": "Broj klikova na ovaj link",
|
| 6 |
+
"ColumnDownloadURL": "Download URL",
|
| 7 |
+
"ColumnEntryPageTitle": "Naslov ulazne stranice",
|
| 8 |
+
"ColumnEntryPageURL": "URL ulazne stranice",
|
| 9 |
+
"ColumnExitPageTitle": "Naslov izlazne stranice",
|
| 10 |
+
"ColumnExitPageURL": "URL izlazne stranice",
|
| 11 |
+
"ColumnNoResultKeyword": "Riječ bez rezultata u pretrazi",
|
| 12 |
+
"ColumnPageName": "Ime stranice",
|
| 13 |
+
"ColumnPageURL": "URL stranice",
|
| 14 |
+
"ColumnPagesPerSearch": "Pretraži stranice rezultata",
|
| 15 |
+
"ColumnPagesPerSearchDocumentation": "Posjetioci će pretraživati vašu web-stranicu, i ponekada kliknuti na \"sljedeće\" da bi dobili više rezultata. Ovo je prosječan broj rezultata u pretrazi koje se prikazuju za ovu riječ.",
|
| 16 |
+
"ColumnSearchCategory": "Kategorija pretrage",
|
| 17 |
+
"ColumnSearchExitsDocumentation": "Percentaža posjeta kod kojih je stranica napuštena poslije pretrage za ovu riječ, izvršeno preko vašeg pretraživača.",
|
| 18 |
+
"ColumnSearchResultsCount": "Broj rezultata u pretragama",
|
| 19 |
+
"ColumnSearches": "Pretrage",
|
| 20 |
+
"ColumnSearchesDocumentation": "Broj posjeta u kojima je tražena ova riječ preko vaše stranice.",
|
| 21 |
+
"ColumnSiteSearchKeywords": "Unikatne riječi",
|
| 22 |
+
"ColumnUniqueClicks": "Jedinstveni klikovi",
|
| 23 |
+
"ColumnUniqueClicksDocumentation": "Broj posjeta koji su umiješan sa klikom na ovaj link. Ako je link kliknut više puta prilikom posjete, uračunat je samo jednom.",
|
| 24 |
+
"ColumnUniqueDownloads": "Jedinstveni downloadi",
|
| 25 |
+
"ColumnUniqueOutlinks": "Jedinstveni izlazni linkovi",
|
| 26 |
+
"DownloadsReportDocumentation": "U ovom izvještaju možete vidjeti koje fajlove je posjetioc skinuo. %s je šta Matomo računa kao download je klik na download link. Da li je download kompletiran, Matomo ne zna.",
|
| 27 |
+
"EntryPageTitles": "Naslovi ulaznih stranica",
|
| 28 |
+
"EntryPageTitlesReportDocumentation": "Ovaj izvještaj sadrži informacije o naslovima ulaznih stranica koje su korištene prilikom specifičnog vremena.",
|
| 29 |
+
"ExitPageTitles": "Naslovi izlaznih stranica",
|
| 30 |
+
"ExitPageTitlesReportDocumentation": "Ovaj izvještaj sadrži informacije o naslovima izlaznih stranica koji su se dogodili prilikom specifičnom perioda.",
|
| 31 |
+
"OneSearch": "1 traži",
|
| 32 |
+
"OutlinkDocumentation": "Izlazni link je link na kojeg je izašao posjetilac sa tvoje stranica na neki drugi websajt (druga domena)",
|
| 33 |
+
"OutlinksReportDocumentation": "Ovaj izvještaj sadrži hijerarhalnu listu izlaznih linkova koji su kliknuti od strane tvojih posjetilaca.",
|
| 34 |
+
"PageTitlesReportDocumentation": "Ovaj raport sadrži informacije o naslovima stranica koje su posjećene. %1$s Naslov stranice je HTML %2$s Oznaka koju većina pregledača prikazuje u njihovom prozornom imenu.",
|
| 35 |
+
"PageUrls": "Veze stranice",
|
| 36 |
+
"PagesReportDocumentation": "Ovaj izvještaj sadrži informacije o stranicama koje su posjećene. %s tabela je organizovana hijerarhijski, URL-ovi su prikazani kao struktura foldera.",
|
| 37 |
+
"PagesSubcategoryHelp3": "Koriste plus i minus ikone za navigaciju.",
|
| 38 |
+
"SiteSearchCategories1": "Ovaj raport prikazuje spisak kategorija koje su posjetioci odabrali kad su vršili istragu na vašoj stranici.",
|
| 39 |
+
"SiteSearchCategories2": "Na primjer, stranice sa elektronskom trgovinom tipično imaju birač kategorija tako da se posjetioci mogu ograničiti na pretrage na svim proizvodima u specifičnoj kategoriji.",
|
| 40 |
+
"SiteSearchFollowingPagesDoc": "Kada posjetioci traže na vašoj stranici, oni su u potrazi za određenu stranicu, sadržaj, proizvod, ili uslugu. Ovaj raport prikazuje spisak stranica koje su najviše kliknute poslije interne pretrage. S drugim riječima, ovo je spisak stranica koje su posjetioci najčešće pretraživali na vašoj stranici.",
|
| 41 |
+
"SiteSearchIntro": "Praćenje pretraga koje vrše vaši posjetioci je efikasan način shvatanja šta vaši posjetioci traže, pomaže u iznalaženju novih ideja i koncepata, novih proizvoda koje potencijalni kupci traže i generalno unapređuje korisničko iskustvo na vašem sajtu.",
|
| 42 |
+
"SiteSearchKeyword": "Ključna riječ (pretraživanje)",
|
| 43 |
+
"SiteSearchKeywordsDocumentation": "Ovaj izvještaj prikazuje ključne riječi koje su vaši posjetioci tražili u polju za pretragu.",
|
| 44 |
+
"SiteSearchKeywordsNoResultDocumentation": "Ovaj izvještaj prikazuje ključne reči koje nisu vratile nijedan rezultat pretrage. Možda algoritam pretrage može da se poboljša ili možda posjetioci traže sadržaje koji (još uvjek) nisu na sajtu?",
|
| 45 |
+
"SubmenuPageTitles": "Nazivi stranica",
|
| 46 |
+
"SubmenuPagesEntry": "Ulazne stranice",
|
| 47 |
+
"SubmenuPagesExit": "Izlazna stranica",
|
| 48 |
+
"SubmenuSitesearch": "Pretraživanje sajta",
|
| 49 |
+
"WidgetEntryPageTitles": "Nazivi ulaznih stranica",
|
| 50 |
+
"WidgetExitPageTitles": "Naslovi izlaznih stranica",
|
| 51 |
+
"WidgetPageTitles": "Naslovi stranica",
|
| 52 |
+
"WidgetPageTitlesFollowingSearch": "Naslovi stranica kod pretraživanja",
|
| 53 |
+
"WidgetPageUrlsFollowingSearch": "Stranice koje slijede poslije pretrage sajta",
|
| 54 |
+
"WidgetPagesEntry": "Ulazne stranice",
|
| 55 |
+
"WidgetPagesExit": "Izlazne stranice",
|
| 56 |
+
"WidgetSearchCategories": "Kategorije za pretrage",
|
| 57 |
+
"WidgetSearchKeywords": "Ključne riječi za pretragu na sajtu",
|
| 58 |
+
"WidgetSearchNoResultKeywords": "Ključne riječi za pretragu bez rezultata"
|
| 59 |
+
}
|
| 60 |
+
}
|
plugins/Actions/lang/ca.json
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"Actions": {
|
| 3 |
+
"ActionType": "Tipus d'acció",
|
| 4 |
+
"ActionTypeSegmentHelp": "Un tipus d'acció, com ara: %s",
|
| 5 |
+
"ActionTypes": "Tipus d'acció",
|
| 6 |
+
"ActionsInVisit": "Accions a visites",
|
| 7 |
+
"AvgGenerationTimeTooltip": "Promig basat en %1$s accessos %2$s entre %3$s i %4$s",
|
| 8 |
+
"Behaviour": "Comportament",
|
| 9 |
+
"ColumnActionURL": "URL d'acció",
|
| 10 |
+
"ColumnClickedURL": "Clic fet a enllaç sortint",
|
| 11 |
+
"ColumnClickedURLs": "Clic fet a enllaços sortints",
|
| 12 |
+
"ColumnClicks": "Clics",
|
| 13 |
+
"ColumnClicksDocumentation": "Nombre de vegades que s'ha fet clic en aquest enllaç.",
|
| 14 |
+
"ColumnDownloadURL": "URL de descàrrega",
|
| 15 |
+
"ColumnDownloadURLs": "URLs de descàrrega",
|
| 16 |
+
"ColumnEntryPageTitle": "Títol de la pàgina d'entrada",
|
| 17 |
+
"ColumnEntryPageURL": "URL de la pàgina d'entrada",
|
| 18 |
+
"ColumnEntryPageURLs": "URLs de pàgines d'entrada",
|
| 19 |
+
"ColumnExitPageTitle": "Títol de la pàgina de sortida",
|
| 20 |
+
"ColumnExitPageURL": "URL de la pàgina de sortida",
|
| 21 |
+
"ColumnExitPageURLs": "URLs de pàgines de sortida",
|
| 22 |
+
"ColumnIdPageview": "ID de pàgina vista",
|
| 23 |
+
"ColumnInteractionPosition": "Posició d'interacció",
|
| 24 |
+
"ColumnNoResultKeyword": "Paraula clau sense cap resultat de cerca",
|
| 25 |
+
"ColumnPageName": "Nom de la pàgina",
|
| 26 |
+
"ColumnPageURL": "URL de la pàgina",
|
| 27 |
+
"ColumnPageViewPosition": "Posició de vista de pàgina",
|
| 28 |
+
"ColumnPagesPerSearch": "Pàgines dels resultats de la cerca",
|
| 29 |
+
"ColumnPagesPerSearchDocumentation": "Els visitants cerquen al vostre lloc web i, de vegades, fan clic a \"següent\" per veure més resultats. Aquest és el nombre mitjà de pàgines de resultats de cerca vistes per a aquesta paraula clau.",
|
| 30 |
+
"ColumnSearchCategory": "Categoria de cerca",
|
| 31 |
+
"ColumnSearchExits": "%% sortides de cerca",
|
| 32 |
+
"ColumnSearchExitsDocumentation": "El percentatge de visites que marxen del vostre lloc web desprès de cercar aquesta paraula al cercador del vostre lloc web.",
|
| 33 |
+
"ColumnSearchResultsCount": "Resultats de la cerca",
|
| 34 |
+
"ColumnSearches": "Cerques",
|
| 35 |
+
"ColumnSearchesDocumentation": "Nombre de visitants que han cercat aquesta paraula clau al cercador de la vostra pàgina web.",
|
| 36 |
+
"ColumnSiteSearchKeywords": "Paraules clau úniques",
|
| 37 |
+
"ColumnUniqueClicks": "Clics únics",
|
| 38 |
+
"ColumnUniqueClicksDocumentation": "El nombre de visites que han fet clic en aquest enllaç. Si s'ha fet clic en un enllaç diverses vegades durant una visita, només es compta una vegada.",
|
| 39 |
+
"ColumnUniqueDownloads": "Descàrregues úniques",
|
| 40 |
+
"ColumnUniqueOutlinks": "Enllaços de sortida únics",
|
| 41 |
+
"DownloadsReportDocumentation": "En aquest informe podeu observar quins fitxers han descarrregats els visitants. %s El Matomo només té constància dels clicks als enllaços de descarga, desconeix si la descàrrega s'ha completat o no.",
|
| 42 |
+
"DownloadsSubcategoryHelp1": "En aquest informe podeu veure quins fitxers han baixat els vostres visitants.",
|
| 43 |
+
"DownloadsSubcategoryHelp2": "El que Matomo compta com a descàrrega és fer clic a l'enllaç de descàrrega. Matomo no sap si la descàrrega es va completar o no.",
|
| 44 |
+
"EntryPageTitles": "Títols de les pàgines d'entrada",
|
| 45 |
+
"EntryPageTitlesReportDocumentation": "Aquest informe conté la informació sobre els títols de les pàgines d'entrada que s'han utilitzat durant el període especificat.",
|
| 46 |
+
"EntryPagesReportDocumentation": "Aquest informe conté informació sobre les pàgines d'entrada durant el període especificat. Una pàgina d'entrada és la primera pàgina que visualitza un usuari durant la seva visita. %s Les URL d'entrada es mostren com una estructura de carpetes.",
|
| 47 |
+
"EntryPagesSubcategoryHelp1": "Aquest informe conté informació sobre les pàgines d'entrada durant el període especificat. Una pàgina d'entrada és la primera pàgina que visualitza un usuari durant la seva visita.",
|
| 48 |
+
"EntryPagesSubcategoryHelp2": "Les URL d'entrada es mostren com una estructura de carpetes.",
|
| 49 |
+
"ExitPageTitles": "Títols de les pàgines de sortida",
|
| 50 |
+
"ExitPageTitlesReportDocumentation": "Aquest informe conté els títols de les pàgins de sortida que s'han utiltizat durant el període especificat.",
|
| 51 |
+
"ExitPagesReportDocumentation": "Aquest informe conté informació sobre les pàgines de sortida durant el període especificat. Una pàgina de sortida és l'última pàgina que visualitza un usuari durant la seva visita. %s Les URL de sortida es mostren com una estructura de carpetes.",
|
| 52 |
+
"ExitPagesSubcategoryHelp1": "Aquest informe conté informació sobre les pàgines de sortida durant el període especificat. Una pàgina de sortida és l'última pàgina que visualitza un usuari durant la seva visita.",
|
| 53 |
+
"ExitPagesSubcategoryHelp2": "Les URL de sortida es mostren com una estructura de carpetes.",
|
| 54 |
+
"MainMetricsReportDocumentation": "Aquest informe ofereix una visió general molt bàsica de quines accions fan els vostres visitants al vostre lloc web.",
|
| 55 |
+
"OneSearch": "1 cerca",
|
| 56 |
+
"OutlinkDocumentation": "Un enllaç extern és un enllaç que allunya el visitant del vostre lloc web (a un altre domini).",
|
| 57 |
+
"OutlinksReportDocumentation": "Aquest informe mostra una llista jeràrquica de les URL d'enllaços de sortida als quals han fet clic els vostres visitants.",
|
| 58 |
+
"OutlinksSubcategoryHelp1": "Aquest informe mostra una llista jeràrquica de les URL d'enllaços externs als quals han fet clic els vostres visitants. Un enllaç extern és un enllaç que allunya el visitant del vostre lloc web (a un altre domini).",
|
| 59 |
+
"PageTitlesReportDocumentation": "Aquest informe conté informació sobre els títols de les pàgines que s'han visitat. %1$s El títol de la pàgina es el tag HTML: %2$s, que es mostra al títol de la finestra en la majoría de navegadors.",
|
| 60 |
+
"PageTitlesSubcategoryHelp1": "Aquest informe conté informació sobre els títols de les pàgines que s'han visitat.",
|
| 61 |
+
"PageTitlesSubcategoryHelp2": "El títol de la pàgina és l'etiqueta HTML &lt;títol&gt; que la majoria dels navegadors mostren al títol de la finestra.",
|
| 62 |
+
"PageUrls": "URLs de les pàgines",
|
| 63 |
+
"PageViewsByVisitor": "Nombre de vegades que aquest visitant ha vist aquesta pàgina en totes les visites",
|
| 64 |
+
"PagesReportDocumentation": "Aquest informe conté les URL de les pàgines que s'han visitat. %s La taula s'organitza jerarquicament, i les URL es mostren amb estructura de directoris.",
|
| 65 |
+
"PagesSubcategoryHelp1": "Aquest informe conté informació sobre les URL de les pàgines visitades.",
|
| 66 |
+
"PagesSubcategoryHelp2": "La taula està organitzada jeràrquicament, les URL es mostren com una estructura de carpetes.",
|
| 67 |
+
"PagesSubcategoryHelp3": "Fes servir les icones de més i menys a l'esquerra per navegar.",
|
| 68 |
+
"PluginDescription": "Informes sobre les pàgines vistes i els títols de les pàgines. Permet mesurar el motor de cerca del teu lloc web intern. Fa un seguiment automàtic dels clics als enllaços externs i a les descàrregues de fitxers.",
|
| 69 |
+
"RevisitedPages": "Pàgines vistes més d'una vegada",
|
| 70 |
+
"SearchesSegmentHelp": "Per seleccionar totes les visites que han utilitzat la cerca interna Site Search, utilitzeu: %s",
|
| 71 |
+
"SiteSearchCategories": "Categories (cerca al lloc)",
|
| 72 |
+
"SiteSearchCategories1": "Aquest informe mostra les categories que els visitants van seleccionar quan van fer una cerca al vostre lloc web.",
|
| 73 |
+
"SiteSearchCategories2": "Per exemple, els llocs web de comerç electrònic solen tenir un selector de \"Categoria\" perquè els visitants puguin restringir les seves cerques a només els productes d'una categoria específica.",
|
| 74 |
+
"SiteSearchCategory": "Categoria (cerca al lloc)",
|
| 75 |
+
"SiteSearchFollowingPagesDoc": "Quan els visitants cerquen al teu lloc web, estan buscant una pàgina, un contingut, un producte o un servei en particular. Aquest informe mostra les pàgines que han estat clicades més vegades desprès d'una cerca interna. En altres paraules, la llista de pàgines que han estat més cercades pels visitants que ja están al vostre lloc web.",
|
| 76 |
+
"SiteSearchIntro": "Observar les cerques que els visitants fan al vostre lloc web és una forma molt efectiva d'aprendre més sobre el que està cercant la vostra audiència. Pot ajudar a trobar idees per a nou contingut, nous productes que els vostres visitants poden estar buscant i permet millorar l'experiència dels visitants al vostre lloc web.",
|
| 77 |
+
"SiteSearchKeyword": "Paraula clau (Cerca al lloc web)",
|
| 78 |
+
"SiteSearchKeywordCount": "Recompte de paraules clau (cerca al lloc)",
|
| 79 |
+
"SiteSearchKeywordCounts": "Recompte de paraules clau (cerca al lloc)",
|
| 80 |
+
"SiteSearchKeywords": "Paraules clau (cerca al lloc)",
|
| 81 |
+
"SiteSearchKeywordsDocumentation": "Aquest informe mostra les paraules clau que els visitants han utiltizat per cercar al cercador del vostre lloc web.",
|
| 82 |
+
"SiteSearchKeywordsNoResultDocumentation": "Aquest informe enumera les paraules clau de cerca que no han retornat cap resultat de la cerca: potser es pot millorar l'algoritme del motor de cerca, o potser els vostres visitants busquen contingut que no es troba (encara) al vostre lloc web?",
|
| 83 |
+
"SiteSearchSubcategoryHelp1": "La secció Cerca al lloc mostra quines paraules clau fan servir els visitants quan cerquen al vostre lloc web. També mostra quines pàgines veuen els usuaris després de fer una cerca i quines paraules clau de cerca al lloc no donen cap resultat.",
|
| 84 |
+
"SiteSearchSubcategoryHelp2": "Aquests informes us poden donar idees sobre el contingut que manca al vostre lloc, informació sobre què cerquen els vostres visitants però que no poden trobar fàcilment i molt més.",
|
| 85 |
+
"SiteSearchSubcategoryHelp3": "Més informació a la guia de cerca al lloc.",
|
| 86 |
+
"SubmenuPageTitles": "Títols de les pàgines",
|
| 87 |
+
"SubmenuPagesEntry": "Pàgines d'entrada",
|
| 88 |
+
"SubmenuPagesExit": "Pàgines de sortida",
|
| 89 |
+
"SubmenuSitesearch": "Cerca al lloc",
|
| 90 |
+
"TimeSpentInReferringAction": "Temps dedicat a l'acció de referència",
|
| 91 |
+
"WidgetEntryPageTitles": "Títols de les pàgines d'entrada",
|
| 92 |
+
"WidgetExitPageTitles": "Títols de les pàgines de sortida",
|
| 93 |
+
"WidgetPageTitles": "Títols de les pàgines",
|
| 94 |
+
"WidgetPageTitlesFollowingSearch": "Títols de pàgines després d'una cerca al lloc",
|
| 95 |
+
"WidgetPageUrlsFollowingSearch": "Pàgines després d'una cerca al lloc",
|
| 96 |
+
"WidgetPagesEntry": "Pàgines d'entrada",
|
| 97 |
+
"WidgetPagesExit": "Pàgines de sortida",
|
| 98 |
+
"WidgetSearchCategories": "Categories de cerca",
|
| 99 |
+
"WidgetSearchKeywords": "Paraules de cerca al lloc",
|
| 100 |
+
"WidgetSearchNoResultKeywords": "Paraules clau de cerca sense resultats"
|
| 101 |
+
}
|
| 102 |
+
}
|
plugins/Actions/lang/cs.json
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"Actions": {
|
| 3 |
+
"ActionType": "Typ akce",
|
| 4 |
+
"ActionTypes": "Typy akcí",
|
| 5 |
+
"ActionsInVisit": "Akce během návštěvy",
|
| 6 |
+
"AvgGenerationTimeTooltip": "Průměr dle %1$s přístupů %2$s mezi %3$s a %4$s",
|
| 7 |
+
"Behaviour": "Chování",
|
| 8 |
+
"ColumnActionURL": "URL akce",
|
| 9 |
+
"ColumnClickedURL": "Kliknutý externí odkaz",
|
| 10 |
+
"ColumnClickedURLs": "Kliknuté externí odkazy",
|
| 11 |
+
"ColumnClicks": "Prokliků",
|
| 12 |
+
"ColumnClicksDocumentation": "Počet kliknutí na odkaz v závislosti na čase.",
|
| 13 |
+
"ColumnDownloadURL": "Stažení URL",
|
| 14 |
+
"ColumnDownloadURLs": "Stáhnout adresy URL",
|
| 15 |
+
"ColumnEntryPageTitle": "Titulek vstupní stránky",
|
| 16 |
+
"ColumnEntryPageURL": "URL vstupní stránky",
|
| 17 |
+
"ColumnEntryPageURLs": "URL vstupních stránek",
|
| 18 |
+
"ColumnExitPageTitle": "Titulek výstupní stránky",
|
| 19 |
+
"ColumnExitPageURL": "URL výstupní stránky",
|
| 20 |
+
"ColumnExitPageURLs": "URL výstupních stránek",
|
| 21 |
+
"ColumnIdPageview": "ID zobrazení stránky",
|
| 22 |
+
"ColumnInteractionPosition": "Pozice interakce",
|
| 23 |
+
"ColumnNoResultKeyword": "Hledané klíčové slovo nebylo nalezeno",
|
| 24 |
+
"ColumnPageName": "Jméno stránky",
|
| 25 |
+
"ColumnPageURL": "URL stránky",
|
| 26 |
+
"ColumnPageViewPosition": "Pozice zobrazení stránek",
|
| 27 |
+
"ColumnPagesPerSearch": "Stránky s výsledky vyhledávání",
|
| 28 |
+
"ColumnPagesPerSearchDocumentation": "Návštěvníci budou hledat na vašem webu a někdy kliknutím na tlačítko „další“ zobrazíte další výsledky. Toto je průměrný počet stránek s výsledky vyhledávání zobrazených pro toto klíčové slovo.",
|
| 29 |
+
"ColumnSearchCategory": "Hledání kategorie",
|
| 30 |
+
"ColumnSearchExits": "%% odchodů z vyhledávání",
|
| 31 |
+
"ColumnSearchExitsDocumentation": "Procento návštěv, které opustily stránku po nalezení tohoto klíčového slova pomocí vyhledávače.",
|
| 32 |
+
"ColumnSearchResultsCount": "Počet nalezených výsledků",
|
| 33 |
+
"ColumnSearches": "Vyhledávání",
|
| 34 |
+
"ColumnSearchesDocumentation": "Počet uživatelů, kteří hledali tato klíčová slova ve vyhledávači na Vašich stránkách.",
|
| 35 |
+
"ColumnSiteSearchKeywords": "Jedinečných klíčových slov",
|
| 36 |
+
"ColumnUniqueClicks": "Jedinečných prokliků",
|
| 37 |
+
"ColumnUniqueClicksDocumentation": "Počet návštěv, které klikly na tento odkaz. Pokud bylo na odkaz kliknuto vícekrát při jedné návštěvě, je kliknutí započítáno jen jednou.",
|
| 38 |
+
"ColumnUniqueDownloads": "Jedinečných stažení",
|
| 39 |
+
"ColumnUniqueOutlinks": "Jedinečné externí odkazy",
|
| 40 |
+
"DownloadsReportDocumentation": "V tomto reportu můžete vidět soubory, které byly staženy. %s Matomo počítá jako stažené jen ty, na které bylo kliknuto. Bez ohledu na to, jestli bylo stažení dokončeno nebo přerušeno.",
|
| 41 |
+
"DownloadsSubcategoryHelp1": "V tomto přehledu uvidíte, které soubory si vaši návštěvníci stáhli.",
|
| 42 |
+
"DownloadsSubcategoryHelp2": "To, co Matomo počítá jako stahování, je kliknutí na odkaz ke stažení. Zda bylo stahování dokončeno nebo ne, Matomo neví.",
|
| 43 |
+
"EntryPageTitles": "Titulky vstupních stránek",
|
| 44 |
+
"EntryPageTitlesReportDocumentation": "Toto hlášení obsahuje informace o titulcích vstupních stránek, které byly použity v daném období.",
|
| 45 |
+
"EntryPagesReportDocumentation": "Tento report obsahuje informace o vstupních stránkách, které byly za dané časové období použity. Vstupní stránka je první stránka, kterou uživatel navštíví. %s Vstupní URL jsou zobrazeny ve složkové struktuře.",
|
| 46 |
+
"EntryPagesSubcategoryHelp1": "Tato sestava obsahuje informace o vstupních stránkách, které byly použity během zadaného období. Vstupní stránka je první stránka, kterou si uživatel prohlíží během své návštěvy.",
|
| 47 |
+
"EntryPagesSubcategoryHelp2": "Vstupní adresy URL se zobrazují jako struktura složek.",
|
| 48 |
+
"ExitPageTitles": "Titulek výstupní stránky",
|
| 49 |
+
"ExitPageTitlesReportDocumentation": "Tento report obsahuje informace o titulcích výstupních stránek za dané období.",
|
| 50 |
+
"ExitPagesReportDocumentation": "Toto hlášení obsahujje informace o výstupních stránkách, které se za dané časové období vyskytly. Výstupní stránka je poslední stránka, kterou návštěvník během své návštěvy navštíví. %s Výstupní URL jsou zobrazeny ve složkové struktuře.",
|
| 51 |
+
"ExitPagesSubcategoryHelp1": "Tato sestava obsahuje informace o výstupních stránkách, které se objevily během zadaného období. Výstupní stránka je poslední stránka, kterou si uživatel prohlíží během své návštěvy.",
|
| 52 |
+
"ExitPagesSubcategoryHelp2": "Výstupní adresy URL se zobrazují jako struktura složek.",
|
| 53 |
+
"MainMetricsReportDocumentation": "Tento přehled poskytuje velmi základní přehled o tom, jaké akce návštěvníci na vašem webu provádějí.",
|
| 54 |
+
"OneSearch": "1 Vyhledávání",
|
| 55 |
+
"OutlinkDocumentation": "Externí odkaz je odkaz, který vede pryč z vašich stránek (na jinou doménu).",
|
| 56 |
+
"OutlinksReportDocumentation": "Toto hlášení zobrazuje hyerarchický seznam externích URL, na které vaši návštěvníci klikli.",
|
| 57 |
+
"OutlinksSubcategoryHelp1": "Tento přehled zobrazuje hierarchický seznam odchozích adres URL, na které klikli vaši návštěvníci. Externí link je odkaz, který vede návštěvníka pryč z vašeho webu (do jiné domény).",
|
| 58 |
+
"PageTitlesReportDocumentation": "Toto hlášení obsahuje informace o titulcích navštívených stránek. %1$s Titulek je HTML tag %2$s, který většina prohlížečů zobrazuje v titulku okna.",
|
| 59 |
+
"PageTitlesSubcategoryHelp1": "Tento report obsahuje informace o titulcích stránek, které byly navštíveny.",
|
| 60 |
+
"PageTitlesSubcategoryHelp2": "Titulek stránky je HTML &lt;title&gt; Štítek, který většina prohlížečů zobrazuje v názvu okna.",
|
| 61 |
+
"PageUrls": "URL stránky",
|
| 62 |
+
"PageViewsByVisitor": "Počet zobrazení této stránky návštěvníkem během všech návštěv",
|
| 63 |
+
"PagesReportDocumentation": "Tento report obsahuje informace o navštívených URL. %s Tabulka je organizována hyerarchicky jako strom složek.",
|
| 64 |
+
"PagesSubcategoryHelp1": "Tento report obsahuje informace o navštívených stránkách URL.",
|
| 65 |
+
"PagesSubcategoryHelp2": "Tabulka je uspořádána hierarchicky, adresy URL jsou zobrazeny jako struktura složek.",
|
| 66 |
+
"PagesSubcategoryHelp3": "Použijte ikonu plus a mínus vlevo k navigaci.",
|
| 67 |
+
"PluginDescription": "Hlášení o zobrazeních a názvech stránek. Umožňuje měřit interní vyhledávač vašich webových stránek. Automaticky sleduje kliknutí na externí odkazy a stahování souborů.",
|
| 68 |
+
"RevisitedPages": "Stránky navštívené více než jednou",
|
| 69 |
+
"SiteSearchCategories": "Kategorie (Vyhledávání na webu)",
|
| 70 |
+
"SiteSearchCategories1": "Tento report shrnuje kategorie, které návštěvníci vybrali při vyhledávání na stránkách.",
|
| 71 |
+
"SiteSearchCategories2": "Například elektronické obchody mívají filtr kategorií, aby mohli zákazníci zvolit, ve které kategorii bude provedeno hledání.",
|
| 72 |
+
"SiteSearchCategory": "Kategorie (Vyhledávání na webu)",
|
| 73 |
+
"SiteSearchFollowingPagesDoc": "Když návštěvníci hledají na vašich stránkách, snaží se nalézt určitou stránku, obsah, produkt, nebo službu. Toto hlášení zobrazuje stránky, na které bylo klikáno nejčastěji po interním vyhledávání. Jinak řečeno, jedná se o stránky, které byly nejvíce hledány návštěvníky, kteří už byli na vašich stránkách.",
|
| 74 |
+
"SiteSearchIntro": "Sledování vyhledávání na vašich stránkách je velmi efektivní způsob, jak se dozvědět více o tom, co vaši návštěvníci na stránkách hledají, jaký obsah by je mohl zajímat, jaké produkty by si mohli chtít koupit, a jak jim obecně zpříjemnit pobyt na vašich stránkách.",
|
| 75 |
+
"SiteSearchKeyword": "Klíčové slovo (Vyhledávání)",
|
| 76 |
+
"SiteSearchKeywordCount": "Počet klíčových slov (Vyhledávání)",
|
| 77 |
+
"SiteSearchKeywordCounts": "Počty klíčových slov (Vyhledávání)",
|
| 78 |
+
"SiteSearchKeywords": "Klíčová slova (vyhledávání na webu)",
|
| 79 |
+
"SiteSearchKeywordsDocumentation": "Tento report shrnuje klíčová slova, která byla použita návštěvníky při hledání pomocí interního vyhledávače.",
|
| 80 |
+
"SiteSearchKeywordsNoResultDocumentation": "Toto hlášení shrnuje klíčová slova, pro která nebyl vrácen žádný výsledek. Možná by bylo možné vylepšit vyhledávací algoritmus, nebo návštěvníci hledají obsah, který (zatím) není na vašich stránkách?",
|
| 81 |
+
"SiteSearchSubcategoryHelp1": "Sekce Vyhledávání stránek ukazuje, jaká klíčová slova návštěvníci používají při vyhledávání na vašem webu. Zobrazuje také, které stránky si uživatelé prohlížejí po provedení vyhledávání a která klíčová slova pro vyhledávání na webu nevracejí vůbec žádné výsledky.",
|
| 82 |
+
"SiteSearchSubcategoryHelp2": "Tyto přehledy vám mohou poskytnout představu o chybějícím obsahu na vašem webu, nahlédnout do toho, co vaši návštěvníci hledají a nemohou najít, atd.",
|
| 83 |
+
"SiteSearchSubcategoryHelp3": "Další informace naleznete v Site Search Guide.",
|
| 84 |
+
"SubmenuPageTitles": "Titulky stránek",
|
| 85 |
+
"SubmenuPagesEntry": "Vstupní stránky",
|
| 86 |
+
"SubmenuPagesExit": "Odchozí stránky",
|
| 87 |
+
"SubmenuSitesearch": "Vyhledat stránku",
|
| 88 |
+
"TimeSpentInReferringAction": "Čas strávený v odkazující akci",
|
| 89 |
+
"WidgetEntryPageTitles": "Titulky vstupní stránky",
|
| 90 |
+
"WidgetExitPageTitles": "Titulky výstupní stránky",
|
| 91 |
+
"WidgetPageTitles": "Titulky stránek",
|
| 92 |
+
"WidgetPageTitlesFollowingSearch": "Titulky stránky po hledání na stránce",
|
| 93 |
+
"WidgetPageUrlsFollowingSearch": "Stránky po hledání na str��nce",
|
| 94 |
+
"WidgetPagesEntry": "Vstupní stránky",
|
| 95 |
+
"WidgetPagesExit": "Výstupní stránky",
|
| 96 |
+
"WidgetSearchCategories": "Vyhledávání kategorií",
|
| 97 |
+
"WidgetSearchKeywords": "Klíčová slova hledané stránky",
|
| 98 |
+
"WidgetSearchNoResultKeywords": "Hledaná Klíčová slova bez výsledku hledání"
|
| 99 |
+
}
|
| 100 |
+
}
|
plugins/Actions/lang/cy.json
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"Actions": {
|
| 3 |
+
"PagesSubcategoryHelp3": "Defnyddiwch yr eiconau mwy (+) a llai (-) ar y chwith i lywio."
|
| 4 |
+
}
|
| 5 |
+
}
|
plugins/Actions/lang/da.json
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"Actions": {
|
| 3 |
+
"ActionType": "Handlingstype",
|
| 4 |
+
"ActionTypes": "Handlingstyper",
|
| 5 |
+
"ActionsInVisit": "Handlinger i Besøg",
|
| 6 |
+
"AvgGenerationTimeTooltip": "Gennemsnit baseret på %1$s hits %2$s mellem %3$s og %4$s",
|
| 7 |
+
"Behaviour": "Adfærd",
|
| 8 |
+
"ColumnActionURL": "Handlings-URL",
|
| 9 |
+
"ColumnClicks": "Klik",
|
| 10 |
+
"ColumnClicksDocumentation": "Antal gange linket blev klikket på.",
|
| 11 |
+
"ColumnDownloadURL": "Hentet URL",
|
| 12 |
+
"ColumnDownloadURLs": "Hent URLer",
|
| 13 |
+
"ColumnEntryPageTitle": "Indgangssidetitel",
|
| 14 |
+
"ColumnEntryPageURL": "Indgangsside-URL",
|
| 15 |
+
"ColumnEntryPageURLs": "Indgangsside-URL’er",
|
| 16 |
+
"ColumnExitPageTitle": "Udgangssidetitel",
|
| 17 |
+
"ColumnExitPageURL": "Udgangsside-URL",
|
| 18 |
+
"ColumnExitPageURLs": "Udgangsside-URL’er",
|
| 19 |
+
"ColumnIdPageview": "Sidevisning ID",
|
| 20 |
+
"ColumnInteractionPosition": "Position for Interaktion",
|
| 21 |
+
"ColumnNoResultKeyword": "Søgeord uden nogen resultater",
|
| 22 |
+
"ColumnPageName": "Sidenavn",
|
| 23 |
+
"ColumnPageURL": "Side-URL",
|
| 24 |
+
"ColumnPagesPerSearch": "Søgeresultatssider",
|
| 25 |
+
"ColumnPagesPerSearchDocumentation": "Besøgende vil søge på hjemmesiden, og vil nogle gange klikke på \"Næste\" for at se flere resultater. Dette er det gennemsnitlige antal søgeresultatsider set for dette søgeord.",
|
| 26 |
+
"ColumnSearchCategory": "Søgekategori",
|
| 27 |
+
"ColumnSearchExits": "%% søgeafslutninger",
|
| 28 |
+
"ColumnSearchExitsDocumentation": "Procentdelen af besøg, der forlod hjemmesiden efter en søgning på søgeordet i søgemaskinen.",
|
| 29 |
+
"ColumnSearchResultsCount": "Antal søgeresultater",
|
| 30 |
+
"ColumnSearches": "Søgninger",
|
| 31 |
+
"ColumnSearchesDocumentation": "Antal besøg, der søgte efter dette søgeord på hjemmesidens søgemaskine.",
|
| 32 |
+
"ColumnSiteSearchKeywords": "Unikke søgeord",
|
| 33 |
+
"ColumnUniqueClicks": "Unikke klik",
|
| 34 |
+
"ColumnUniqueClicksDocumentation": "Antal besøg, der involverede et klik på linket. Hvis et link blev klikket flere gange under et besøg, tæller det kun én gang.",
|
| 35 |
+
"ColumnUniqueDownloads": "Unikke downloads",
|
| 36 |
+
"ColumnUniqueOutlinks": "Unikke udgående links",
|
| 37 |
+
"DownloadsReportDocumentation": "Rapporten viser, hvilke filer dine besøgende har hentet. %s Hvad Matomo tæller som en filhentning, er klikket på et link. Hvorvidt overførelsen er afsluttet eller ej ved Matomo ikke.",
|
| 38 |
+
"EntryPageTitles": "Indgangssidetitler",
|
| 39 |
+
"EntryPageTitlesReportDocumentation": "Rapporten indeholder oplysninger om titlerne på indgangssider, der blev brugt i den angivne periode.",
|
| 40 |
+
"EntryPagesReportDocumentation": "Rapporten indeholder oplysninger om indgangssider, der blev anvendt i den angivne periode. En indgangsside er den første side, en bruger får vist under sit besøg. %s Indgangssiden vises med en mappestruktur.",
|
| 41 |
+
"ExitPageTitles": "Udgangssidetitler",
|
| 42 |
+
"ExitPageTitlesReportDocumentation": "Rapporten indeholder oplysninger om titlerne på udgangssider, der blev brugt i den angivne periode.",
|
| 43 |
+
"ExitPagesReportDocumentation": "Rapporten indeholder oplysninger om de udgangssider, der blev brugt i den angivne periode. En udgangsside er den sidste side, en bruger får vist under sit besøg. %s udgangs-URLer vises med en mappestruktur.",
|
| 44 |
+
"OneSearch": "1 søgning",
|
| 45 |
+
"OutlinkDocumentation": "Et udgående link er et link, der fører den besøgende væk fra hjemmesiden (til et andet domæne)",
|
| 46 |
+
"OutlinksReportDocumentation": "Rapporten viser en hierarkisk liste over udgående netadresser, der blev klikket på af de besøgende",
|
| 47 |
+
"PageTitlesReportDocumentation": "Rapporten indeholder oplysninger om titlerne på de sider, der er blevet besøgt. %1$s side titel er HTML %2$s mærket, som de fleste netlæsere viser i vinduetitlen.",
|
| 48 |
+
"PageUrls": "Side-URL'er",
|
| 49 |
+
"PageViewsByVisitor": "Antal gange den besøgende har set denne side henover alle besøg",
|
| 50 |
+
"PagesReportDocumentation": "Rapporten indeholder oplysninger om sidens netadresser, der er blevet besøgt. %s tabellen er arrangeret hierarkisk, netadresserne vises i en mappestruktur.",
|
| 51 |
+
"PagesSubcategoryHelp3": "Brug plus og minus ikonerne til venstre til at navigere.",
|
| 52 |
+
"PluginDescription": "Rapporter om sidevisninger og sidetitler. Gør det muligt at måle det interne websted søgemaskine. Sporer automatisk klik på eksterne links og filhentninger.",
|
| 53 |
+
"RevisitedPages": "Sider vist mere end én gang",
|
| 54 |
+
"SiteSearchCategories": "Kategorier (Sitesøgning)",
|
| 55 |
+
"SiteSearchCategories1": "Rapporten viser de kategorier, som de besøgende valgte, da de lavede en søgning på hjemmesiden.",
|
| 56 |
+
"SiteSearchCategories2": "For eksempel har E-handel hjemmesider typisk en \"Kategori\" vælger, så besøgende kan begrænse deres søgninger til alle produkter i en bestemt kategori.",
|
| 57 |
+
"SiteSearchCategory": "Kategori (Sitesøgning)",
|
| 58 |
+
"SiteSearchFollowingPagesDoc": "Når besøgende søger på hjemmesiden, er de på udkig efter en bestemt side, indhold, produkt eller service. Rapporten viser de sider, der blev klikket mest på efter en intern søgning. Med andre ord, listen over sider mest søgt af besøgende allerede på hjemmesiden.",
|
| 59 |
+
"SiteSearchIntro": "Sporing af søgninger, som de besøgende foretager på hjemmesiden er en meget effektiv måde at lære mere om, hvad din målgruppe er på udkig efter, det kan hjælpe med til at finde idéer til nyt indhold, nye E-handel produkter, som potentielle kunder kan søge efter, og generelt forbedre de besøgendes oplever på hjemmesiden.",
|
| 60 |
+
"SiteSearchKeyword": "Søgeord (intern søgning)",
|
| 61 |
+
"SiteSearchKeywords": "Nøgleord (Sitesøgning)",
|
| 62 |
+
"SiteSearchKeywordsDocumentation": "Rapporten viser de søgeord, de besøgende søgte efter på den interne søgemaskine.",
|
| 63 |
+
"SiteSearchKeywordsNoResultDocumentation": "Rapporten viser de søgeord, der ikke returnerede noget søgeresultat: måske søgemaskinen algoritme kan forbedres, eller måske de besøgende er på udkig efter indhold, der (endnu) ikke er på din hjemmeside?",
|
| 64 |
+
"SubmenuPageTitles": "Sidetitler",
|
| 65 |
+
"SubmenuPagesEntry": "Indgangssider",
|
| 66 |
+
"SubmenuPagesExit": "Udgangssider",
|
| 67 |
+
"SubmenuSitesearch": "Webstedssøgning",
|
| 68 |
+
"WidgetEntryPageTitles": "Indgangssidetitler",
|
| 69 |
+
"WidgetExitPageTitles": "Udgangssidetitler",
|
| 70 |
+
"WidgetPageTitles": "Sidetitler",
|
| 71 |
+
"WidgetPageTitlesFollowingSearch": "Sidetitler efter en webstedssøgning",
|
| 72 |
+
"WidgetPageUrlsFollowingSearch": "Sider efter en webstedssøgning",
|
| 73 |
+
"WidgetPagesEntry": "Indgangssider",
|
| 74 |
+
"WidgetPagesExit": "Udgangssider",
|
| 75 |
+
"WidgetSearchCategories": "Søge kategorier",
|
| 76 |
+
"WidgetSearchKeywords": "Websted søgeord",
|
| 77 |
+
"WidgetSearchNoResultKeywords": "Søgeord uden nogen resultater"
|
| 78 |
+
}
|
| 79 |
+
}
|
plugins/Actions/lang/de.json
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"Actions": {
|
| 3 |
+
"ActionType": "Typ der Aktion",
|
| 4 |
+
"ActionTypes": "Aktionstypen",
|
| 5 |
+
"ActionsInVisit": "Aktionen beim Besuch",
|
| 6 |
+
"AvgGenerationTimeTooltip": "Durchschnitt basierend auf %1$s Aufruf(en) %2$s zwischen %3$s und %4$s",
|
| 7 |
+
"Behaviour": "Verhalten",
|
| 8 |
+
"ColumnActionURL": "Aktions-URL",
|
| 9 |
+
"ColumnClickedURL": "Gewählter ausgehender Verweis",
|
| 10 |
+
"ColumnClickedURLs": "Gewählte ausgehende Verweise",
|
| 11 |
+
"ColumnClicks": "Klicks",
|
| 12 |
+
"ColumnClicksDocumentation": "Anzahl der Klicks auf diesen Link.",
|
| 13 |
+
"ColumnDownloadURL": "Download-URL",
|
| 14 |
+
"ColumnDownloadURLs": "Download-URLs",
|
| 15 |
+
"ColumnEntryPageTitle": "Titel der Einstiegsseite",
|
| 16 |
+
"ColumnEntryPageURL": "URL der Einstiegsseite",
|
| 17 |
+
"ColumnEntryPageURLs": "Einstiegsseiten-URLs",
|
| 18 |
+
"ColumnExitPageTitle": "Titel der Ausstiegsseite",
|
| 19 |
+
"ColumnExitPageURL": "URL der Ausstiegsseite",
|
| 20 |
+
"ColumnExitPageURLs": "Ausgangsseiten URLs",
|
| 21 |
+
"ColumnIdPageview": "Seitenansicht-ID",
|
| 22 |
+
"ColumnInteractionPosition": "Interaktionsposition",
|
| 23 |
+
"ColumnNoResultKeyword": "Suchbegriff ohne Ergebnisse",
|
| 24 |
+
"ColumnPageName": "Seitenname",
|
| 25 |
+
"ColumnPageURL": "Seiten-URL",
|
| 26 |
+
"ColumnPageViewPosition": "Seitenansichtposition",
|
| 27 |
+
"ColumnPagesPerSearch": "Besuchte Ergebnisseiten",
|
| 28 |
+
"ColumnPagesPerSearchDocumentation": "In dieser Spalte sehen Sie, wie oft die Ergebnisseiten des Suchbegriffs im Durchschnitt aufgerufen wurden. Die Ergebnisse werden beispielsweise mehrere Male aufgerufen, wenn sie in mehrere Seiten aufgespalten sind und der Besucher verschiedene Seiten aufruft.",
|
| 29 |
+
"ColumnSearchCategory": "Suchkategorie",
|
| 30 |
+
"ColumnSearchExits": "%% Ausstiege nach Suche",
|
| 31 |
+
"ColumnSearchExitsDocumentation": "Der Anteil der Besuche, die nach der internen Suche nach dem Suchbegriff die Webseite verlassen haben.",
|
| 32 |
+
"ColumnSearchResultsCount": "Anzahl Suchergebnisse",
|
| 33 |
+
"ColumnSearches": "Suchanfragen",
|
| 34 |
+
"ColumnSearchesDocumentation": "Die Anzahl der Besucher, die nach diesem Begriff in der internen Suche gesucht haben.",
|
| 35 |
+
"ColumnSiteSearchKeywords": "Eindeutige Suchbegriffe",
|
| 36 |
+
"ColumnUniqueClicks": "Eindeutige Klicks",
|
| 37 |
+
"ColumnUniqueClicksDocumentation": "Die Anzahl der Besuche, bei denen dieser Link angeklickt wurde. Falls der Link mehrmals pro Besuch angeklickt wurde, wird er nur einmal gezählt.",
|
| 38 |
+
"ColumnUniqueDownloads": "Eindeutige Downloads",
|
| 39 |
+
"ColumnUniqueOutlinks": "Eindeutige ausgehende Verweise",
|
| 40 |
+
"DownloadsReportDocumentation": "In diesem Bericht sehen Sie, welche Dateien Ihre Besucher heruntergeladen haben. %s Als Download wird in Matomo der Klick auf einen Downloadlink gewertet. Ob der Download abgeschlossen wurde oder nicht, ist Matomo nicht bekannt.",
|
| 41 |
+
"DownloadsSubcategoryHelp1": "In diesem Bericht können Sie sehen, welche Dateien Ihre Besucher heruntergeladen haben.",
|
| 42 |
+
"DownloadsSubcategoryHelp2": "Als Download zählt bei Matomo der Klick auf einen Download-Link. Ob der Download abgeschlossen wurde oder nicht, ist Matomo nicht bekannt.",
|
| 43 |
+
"EntryPageTitles": "Titel der Einstiegsseite",
|
| 44 |
+
"EntryPageTitlesReportDocumentation": "Dieser Bericht enthält Informationen über die Titel der Einstiegsseiten, die im angeforderten Zeitraum verwendet wurden.",
|
| 45 |
+
"EntryPagesReportDocumentation": "Dieser Bericht enthält Informationen über die Einstiegsseiten im gewählten Zeitraum. Die Einstiegsseite ist die erste Seite, die während eines Besuches aufgerufen wird. %s Die URLs werden als Ordnerstruktur angezeigt.",
|
| 46 |
+
"EntryPagesSubcategoryHelp1": "Dieser Bericht enthält Informationen über die Einstiegsseiten im gewählten Zeitraum. Die Einstiegsseite ist die erste Seite, die während eines Besuches aufgerufen wird.",
|
| 47 |
+
"EntryPagesSubcategoryHelp2": "Die Einstiegs-URLs werden als Verzeichnisstruktur angezeigt.",
|
| 48 |
+
"ExitPageTitles": "Titel der Ausstiegsseite",
|
| 49 |
+
"ExitPageTitlesReportDocumentation": "Dieser Bericht enthält Informationen über die Titel der Ausstiegsseiten, die angeforderten Zeitraum verwendet wurden.",
|
| 50 |
+
"ExitPagesReportDocumentation": "Dieser Bericht enthält Informationen über die Ausstiegsseiten im gewählten Zeitraum. Die Ausstiegsseite ist die letzte Seite, die während eines Besuches aufgerufen wird. %s Die URLs werden als Ordnerstruktur angezeigt.",
|
| 51 |
+
"ExitPagesSubcategoryHelp1": "Dieser Bericht enthält Informationen über die Ausstiegsseiten im gewählten Zeitraum. Die Ausstiegsseite ist die letzte Seite, die während eines Besuches aufgerufen wird.",
|
| 52 |
+
"ExitPagesSubcategoryHelp2": "Die Ausstiegs-URLs werden als Verzeichnisstruktur angezeigt.",
|
| 53 |
+
"MainMetricsReportDocumentation": "Dieser Bericht stellt einen sehr groben Überblick zur Verfügung darüber, welche Aktionen Ihre Besucher auf Ihrer Webseite ausgeführt haben.",
|
| 54 |
+
"OneSearch": "1 Suche",
|
| 55 |
+
"OutlinkDocumentation": "Ein ausgehender Verweis ist ein Link der einen Besucher auf eine andere Webseite führt (auf eine andere Domain).",
|
| 56 |
+
"OutlinksReportDocumentation": "Dieser Bericht zeigt eine hierarchisch angeordnete Liste von ausgehenden Links, die von ihren Besuchern angeklickt wurden.",
|
| 57 |
+
"OutlinksSubcategoryHelp1": "Dieser Bericht zeigt eine hierarchisch angeordnete Liste von ausgehenden Links, die von ihren Besuchern angeklickt wurden. Ein ausgehender Link ist ein Link, der den Besucher von Ihrer Webseite wegführt (zu einer anderen Domain).",
|
| 58 |
+
"PageTitlesReportDocumentation": "Dieser Bericht enthält Informationen über die Seitentitel der besuchten Seiten. %1$s Der Seitentitel ist der HTML %2$s Tag, der von den meisten Browsern in ihrer Titelleiste angezeigt wird.",
|
| 59 |
+
"PageTitlesSubcategoryHelp1": "Dieser Bericht enthält Informationen über die Titel der Seiten, welche besucht wurden.",
|
| 60 |
+
"PageTitlesSubcategoryHelp2": "Der Seitentitel ist der HTML-&lt;title&gt; Tag, welcher von den meisten Browsern in deren Fenstertitel angezeigt wird.",
|
| 61 |
+
"PageUrls": "Seiten URL",
|
| 62 |
+
"PageViewsByVisitor": "Die Anzahl, wie häufig diese Seite von diesem Besucher insgesamt besucht wurde",
|
| 63 |
+
"PagesReportDocumentation": "Dieser Bericht enthält Informationen über die URLs der besuchten Seiten. %s Die Tabelle ist hierarchisch strukturiert, die URLs werden als Ordnerstruktur angezeigt.",
|
| 64 |
+
"PagesSubcategoryHelp1": "Dieser Bericht enthält Informationen über die Seiten URLs, welche besucht wurden.",
|
| 65 |
+
"PagesSubcategoryHelp2": "Die Tabelle ist hierarchisch organisiert, die URLs werden als Verzeichnisstruktur angezeigt.",
|
| 66 |
+
"PagesSubcategoryHelp3": "Benutzen Sie zur Navigation die Symbole Plus und Minus auf der linken Seite.",
|
| 67 |
+
"PluginDescription": "Berichte über die Seitenansichten und Seitentitel. Lässt Sie die interne Suchmaschine Ihrer Webseite bewerten. Registriert Klicks auf externe Links und Dateidownloads automatisch.",
|
| 68 |
+
"RevisitedPages": "Seiten die mehrmals angesehen wurden",
|
| 69 |
+
"SiteSearchCategories": "Kategorien (Interne Suche)",
|
| 70 |
+
"SiteSearchCategories1": "Dieser Bericht zeigt die Kategorien, welche bei der internen Suche ausgewählt wurden.",
|
| 71 |
+
"SiteSearchCategories2": "Onlineshops haben beispielsweise meist eine Kategorieauswahl, mit der Besucher ihre Suche auf eine bestimmte Produktkategorie einschränken können.",
|
| 72 |
+
"SiteSearchCategory": "Kategorie (Interne Suche)",
|
| 73 |
+
"SiteSearchFollowingPagesDoc": "Wenn Besucher die interne Suche verwenden, suchen sie meist nach einer bestimmten Seite, bzw. einem bestimmen Inhalt. In diesem Bericht wird angezeigt, welche Seiten am häufigsten von den Suchergebnissen aus besucht wurden. In anderen Worten sind dies die Seiten, nach denen Besucher am häufigsten gesucht haben, nachdem sie sich bereits auf der Webseite befanden.",
|
| 74 |
+
"SiteSearchIntro": "Die Suchbegriffe der internen Suche auszuwerten, hilft dabei zu verstehen, was Ihre Zielgruppe sucht. So können Ideen für neue Inhalte oder Produkte entstehen und bestehende Inhalte für die Sprache der Besucher optimiert werden.",
|
| 75 |
+
"SiteSearchKeyword": "Suchbegriff (interne Suche)",
|
| 76 |
+
"SiteSearchKeywordCount": "Anzahl Suchbegriffe (interne Suche)",
|
| 77 |
+
"SiteSearchKeywordCounts": "Gezählte Suchbegriffe (interne Suche)",
|
| 78 |
+
"SiteSearchKeywords": "Suchbegriffe (Interne Suche)",
|
| 79 |
+
"SiteSearchKeywordsDocumentation": "Dieser Bericht enthält die Suchbegriffe, nach denen Besucher in der internen Suche gesucht haben.",
|
| 80 |
+
"SiteSearchKeywordsNoResultDocumentation": "Dieser Bericht zeigt die Suchbegriffe an, welche keine Ergebnisse hatten. Vielleicht könnten diese Begriffe in bestehende Seiten eingebaut werden, um es den Besuchern zu erleichtern, die Inhalte zu finden?",
|
| 81 |
+
"SiteSearchSubcategoryHelp1": "Der Bereich \"Interne Suche\" zeigt, welche Suchworte Besucher verwenden, wenn sie auf Ihrer Webseite suchen. Er zeigt auch auf welche Seiten Benutzer gehen, nachdem sie gesucht haben und welche Suchbegriffe gar keine Resultate erzeugt hatten.",
|
| 82 |
+
"SiteSearchSubcategoryHelp2": "Dieser Bericht kann Ihnen Hinweise darauf geben, welche Inhalte auf Ihrer Seite eventuell fehlen, in dem er aufzeigt, was Ihre Besucher suchen, aber nicht so einfach finden.",
|
| 83 |
+
"SiteSearchSubcategoryHelp3": "Weitere Informationen finden Sie in der Anleitung zur internen Suche.",
|
| 84 |
+
"SubmenuPageTitles": "Seitentitel",
|
| 85 |
+
"SubmenuPagesEntry": "Einstiegsseiten",
|
| 86 |
+
"SubmenuPagesExit": "Ausstiegsseiten",
|
| 87 |
+
"SubmenuSitesearch": "Interne Suche",
|
| 88 |
+
"TimeSpentInReferringAction": "Verwendete Zeit für Verweisaktionen",
|
| 89 |
+
"WidgetEntryPageTitles": "Titel der Einstiegsseiten",
|
| 90 |
+
"WidgetExitPageTitles": "Titel der Ausgangsseiten",
|
| 91 |
+
"WidgetPageTitles": "Seitentitel",
|
| 92 |
+
"WidgetPageTitlesFollowingSearch": "Seitentitel nach einer internen Suche",
|
| 93 |
+
"WidgetPageUrlsFollowingSearch": "Besuchte Seiten nach einer internen Suche",
|
| 94 |
+
"WidgetPagesEntry": "Einstiegsseiten",
|
| 95 |
+
"WidgetPagesExit": "Ausstiegsseiten",
|
| 96 |
+
"WidgetSearchCategories": "Suchkategorien",
|
| 97 |
+
"WidgetSearchKeywords": "Suchbegriffe (interne Suche)",
|
| 98 |
+
"WidgetSearchNoResultKeywords": "Suchbegriffe ohne Ergebnisse"
|
| 99 |
+
}
|
| 100 |
+
}
|
plugins/Actions/lang/dv.json
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"Actions": {
|
| 3 |
+
"ColumnClicks": "ކްލިކްތައް",
|
| 4 |
+
"ColumnClicksDocumentation": "މި ލިންކަށް ކްލިކް ކުރެވުނު އަދަދު",
|
| 5 |
+
"ColumnDownloadURL": "ޑައުންލޯޑް ޔޫއާރްއެލް",
|
| 6 |
+
"ColumnEntryPageTitle": "ވަން ސަފުހާގެ ސުރުހީ",
|
| 7 |
+
"ColumnEntryPageURL": "ވަން ސަފުހާގެ ޔޫއާރްއެލް",
|
| 8 |
+
"ColumnExitPageTitle": "ބޭރުވި ސަފުހާގެ ސުރުހީ",
|
| 9 |
+
"ColumnExitPageURL": "ބޭރުވި ސަފުހާގެ ޔޫއާރްއެލް",
|
| 10 |
+
"ColumnNoResultKeyword": "ނަތީޖާއެއް ހޯދިފައިނުވާ ބަސްތައް",
|
| 11 |
+
"ColumnPageName": "ސަފުހާގެ ނަން",
|
| 12 |
+
"ColumnPagesPerSearch": "ނަތީޖާތައް ހޯދާ ސަފުހާތައް"
|
| 13 |
+
}
|
| 14 |
+
}
|
plugins/Actions/lang/el.json
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"Actions": {
|
| 3 |
+
"ActionType": "Τύπος Ενέργειας",
|
| 4 |
+
"ActionTypeSegmentHelp": "Ένας τύπος ενέργειας, όπως: %s",
|
| 5 |
+
"ActionTypes": "Τύποι ενεργειών",
|
| 6 |
+
"ActionsInVisit": "Δραστηριότητες στην επίσκεψη",
|
| 7 |
+
"AvgGenerationTimeTooltip": "Μέσος όρος βάσει %1$s επισκέψεων %2$s μεταξύ %3$s και %4$s",
|
| 8 |
+
"Behaviour": "Συμπεριφορά",
|
| 9 |
+
"ColumnActionURL": "Διεύθυνση URL ενέργειας",
|
| 10 |
+
"ColumnClickedURL": "Εξωτερικός σύνδεσμος με κλικ",
|
| 11 |
+
"ColumnClickedURLs": "Εξωτερικοί σύνδεσμοι με κλικ",
|
| 12 |
+
"ColumnClicks": "Κλικ",
|
| 13 |
+
"ColumnClicksDocumentation": "Οι φορές που πατήθηκε αυτός ο σύνδεσμος.",
|
| 14 |
+
"ColumnDownloadURL": "URL λήψης",
|
| 15 |
+
"ColumnDownloadURLs": "URL για μεταφορτώσεις",
|
| 16 |
+
"ColumnEntryPageTitle": "Τίτλος Σελίδας Εισαγωγής",
|
| 17 |
+
"ColumnEntryPageURL": "URL Σελίδας Εισαγωγής",
|
| 18 |
+
"ColumnEntryPageURLs": "URL σελίδων εισόδου",
|
| 19 |
+
"ColumnExitPageTitle": "Τίτλος Σελίδας Εξόδου",
|
| 20 |
+
"ColumnExitPageURL": "URL Σελίδας Εξόδου",
|
| 21 |
+
"ColumnExitPageURLs": "URL Σελίδων Εξόδου",
|
| 22 |
+
"ColumnIdPageview": "Αναγνωριστικό προβολής σελίδας",
|
| 23 |
+
"ColumnInteractionPosition": "Θέση Αλληλεπίδρασης",
|
| 24 |
+
"ColumnNoResultKeyword": "Λέξη-κλειδί Χωρίς Αποτέλεσμα Αναζήτησης",
|
| 25 |
+
"ColumnPageName": "Ονομασία Σελίδας",
|
| 26 |
+
"ColumnPageURL": "URL σελίδας",
|
| 27 |
+
"ColumnPageViewPosition": "Θέση Προβολής Σελίδων",
|
| 28 |
+
"ColumnPagesPerSearch": "Σελίδες Αποτελεσμάτων Αναζήτησης",
|
| 29 |
+
"ColumnPagesPerSearchDocumentation": "Οι επισκέπτες θα αναζητήσουν στον ιστοτόπο σας και μερικές φορές θα πατήσουν «επόμενο» για να δουν περισσότερα αποτελέσματα. Αυτός είναι ο μέσος αριθμός των σελίδων αποτελεσμάτων αναζήτησης που προβάλλονται για αυτή τη λέξη-κλειδί.",
|
| 30 |
+
"ColumnSearchCategory": "Κατηγορία Αναζήτησης",
|
| 31 |
+
"ColumnSearchExits": "%% έξοδοι από αναζητήσεις",
|
| 32 |
+
"ColumnSearchExitsDocumentation": "Το ποσοστό των επισκέψεων που άφησαν τον ιστοτόπο μετά την αναζήτηση για αυτή τη λέξη-κλειδί στην μηχανή Αναζήτησης του Ιστοτόπου σας.",
|
| 33 |
+
"ColumnSearchResultsCount": "Μετρητής Αποτελεσμάτων Αναζήτησης",
|
| 34 |
+
"ColumnSearches": "Αναζητήσεις",
|
| 35 |
+
"ColumnSearchesDocumentation": "Ο αριθμός των επισκέψεων που αναζήτησαν για αυτή την λέξη-κλειδί στη μηχανή αναζήτησης του ιστοτόπου σας.",
|
| 36 |
+
"ColumnSiteSearchKeywords": "Μοναδικές Λέξεις-κλειδιά",
|
| 37 |
+
"ColumnUniqueClicks": "Μοναδικά κλικ",
|
| 38 |
+
"ColumnUniqueClicksDocumentation": "Ο αριθμός των επισκέψεων που περιλαμβάνουν ένα πάτημα σε αυτό το σύνδεσμο. Αν ο σύνδεσμος πατήθηκε πολλές φορές σε μια επίσκεψη, μετριέται μόνο μια φορά.",
|
| 39 |
+
"ColumnUniqueDownloads": "Μοναδικές λήψεις",
|
| 40 |
+
"ColumnUniqueOutlinks": "Μοναδικοί Εξωτερικοί σύνδεσμοι",
|
| 41 |
+
"DownloadsReportDocumentation": "Σε αυτή την αναφορά, μπορείτε να δείτε ποια αρχεία κατέβασαν οι επισκέπτες σας. %s Αυτό που μετράει το Matomo ως λήψη είναι το πάτημα σε σύνδεσμο λήψης. Αν η λήψη ολοκληρώθηκε ή όχι δεν είναι γνωστό στο Matomo.",
|
| 42 |
+
"DownloadsSubcategoryHelp1": "Σε αυτή την αναφορά, μπορείτε να δείτε ποια αρχεία κατέβασαν οι επισκέπτες σας.",
|
| 43 |
+
"DownloadsSubcategoryHelp2": "Αυτό που μετράει το Matomo ως λήψη είναι το πάτημα σε σύνδεσμο λήψης. Αν η λήψη ολοκληρώθηκε ή όχι δεν είναι γνωστό στο Matomo.",
|
| 44 |
+
"EntryPageTitles": "Τίτλοι σελίδας εισόδου",
|
| 45 |
+
"EntryPageTitlesReportDocumentation": "Αυτή η αναφορά περιέχει πληροφορίες για τους τίτλους των σελίδων εισόδου που χρησιμοπ��ιήθηκαν κατά την ορισμένη περίοδο.",
|
| 46 |
+
"EntryPagesReportDocumentation": "Η αναφορά περιέχει πληροφορίες για τις σελίδες εισόδου για συγκεκριμένη χρονική περίοδο. Μια σελίδα εισόδου είναι η πρώτη σελίδα που βλέπει ο χρήστης κατά την επίσκεψή του. %s Παρακάτω εμφανίζονται με δομή φακέλων οι διευθύνσεις URL εισόδου.",
|
| 47 |
+
"EntryPagesSubcategoryHelp1": "Η αναφορά περιέχει πληροφορίες σχετικά με τις σελίδες εισόδου που χρησιμοποιήθηκαν σε μια συγκεκριμένη χρονική περίοδο. Μια σελίδα εισόδου είναι η πρώτη σελίδα που βλέπει ένας χρήστης κατά την επίσκεψή του.",
|
| 48 |
+
"EntryPagesSubcategoryHelp2": "Οι διευθύνσεις URL εισόδου εμφανίζονται ως δομή φακέλων.",
|
| 49 |
+
"ExitPageTitles": "Τίτλοι σελίδας εξόδου",
|
| 50 |
+
"ExitPageTitlesReportDocumentation": "Αυτή η αναφορά περιέχει πληφορορίες για τους τίτλους των σελίδων εξόδου που συνέβησαν κατά την ορισμένη περίοδο.",
|
| 51 |
+
"ExitPagesReportDocumentation": "Η αναφορά περιέχει πληροφορίες για τις σελίδες εξόδου σε συγκεκριμένη χρονική περίοδο. Μια σελίδα εξόδου είναι η τελευταία σελίδα που βλέπει ένας χρήστης κατά την επίσκεψή του. %s Παρακάτω εμφανίζονται με δομή φακέλων οι διευθύνσεις URL εξόδου.",
|
| 52 |
+
"ExitPagesSubcategoryHelp1": "Η αναφορά περιέχει πληροφορίες για τις σελίδες εξόδου σε συγκεκριμένη χρονική περίοδο. Μια σελίδα εξόδου είναι η τελευταία σελίδα που βλέπει ένας χρήστης κατά την επίσκεψή του.",
|
| 53 |
+
"ExitPagesSubcategoryHelp2": "Οι διευθύνσεις URL εξόδου εμφανίζονται ως δομή φακέλων.",
|
| 54 |
+
"MainMetricsReportDocumentation": "Αυτή η αναφορά δείχνει μια βασική σύνοψη των ενεργειών που οι επισκέπτες σας προέβησαν στον ιστοτόπο σας.",
|
| 55 |
+
"OneSearch": "1 αναζήτηση",
|
| 56 |
+
"OutlinkDocumentation": "Ένας εξωτερικός σύνδεσμος είναι ένας σύνδεσμος που οδηγεί τον επισκέπτη εκτός της ιστοσελίδας (σε άλλη).",
|
| 57 |
+
"OutlinksReportDocumentation": "Αυτή η αναφορά δείχνει μια ιεραρχημένη λίστα με εξωτερικούς συνδέσμους διευθύνσεων ιστοσελίδων που πατήθηκαν από τους επισκέπτες σας.",
|
| 58 |
+
"OutlinksSubcategoryHelp1": "Η αναφορά δείχνει μια ιεραρχική λίστα με εξωτερικούς συνδέσμους διευθύνσεων ιστοσελίδων που πάτησαν οι επισκέπτες σας. Ένας εξωτερικός σύνδεσμος είναι ένας σύνδεσμος που οδηγεί τον επισκέπτη εκτός του ιστοτόπου (σε άλλο όνομα χώρου).",
|
| 59 |
+
"PageTitlesReportDocumentation": "Η αναφορά αυτή περιέχει πληροφορίες σχετικά με τους τίτλους των σελίδων που επισκέφθηκαν οι χρήστες. %1$s Ο τίτλος της σελίδας είναι η σήμανση HTML %2$s που τα περισσότερα προγράμματα πλοήγησης δείχνουν στον τίτλο του παραθύρου τους.",
|
| 60 |
+
"PageTitlesSubcategoryHelp1": "Αυτή η αναφορά περιέχει πληροφορίες για τους τίτλους των σελίδων που επισκέφτηκαν οι χρήστες.",
|
| 61 |
+
"PageTitlesSubcategoryHelp2": "Η σελίδα τίτλου είναι η σήμανση HTML &lt;title&gt; που οι περισσότεροι φυλλομετρητές εμφανίζουν στον τίτλο του παραθύρου τους.",
|
| 62 |
+
"PageUrls": "Διευθύνσεις σελίδων",
|
| 63 |
+
"PageViewsByVisitor": "Ο αριθμός των αναγνώσεων της σελίδας από αυτόν τον επισκέπτη σε όλες του τις επισκέψεις",
|
| 64 |
+
"PagesReportDocumentation": "Αυτή η αναφορά περιέχει πληροφορίες σχετικά με τις επισκεφθείσες διευθύνσεις σελίδων. %s Ο πίνακας ταξινομείται ιεραρχικά, οι διευθύνσεις σελίδων εμφανίζονται με δομή φακέλου.",
|
| 65 |
+
"PagesSubcategoryHelp1": "Αυτή η αναφορά περιέχει πληροφορίες για τις διευθύνσεις των σελίδων που επισκέφτηκαν οι χρήστες.",
|
| 66 |
+
"PagesSubcategoryHelp2": "Ο πίνακας είναι ιεραρχικά οργανωμένος, οι διευθύνσεις URL εμφανίζονται ως δομή φακέλων.",
|
| 67 |
+
"PagesSubcategoryHelp3": "Χρησιμοποιήστε τα εικονίδια + και - στα αριστερά για πλοήγηση.",
|
| 68 |
+
"PluginDescription": "Αναφέρει σχετικά με τις αναγνώσεις σελίδων και τους τίτλους τους. Επιτρέπει την μέτρηση της απόδοσης της εσωτερικής μηχανής αναζήτησης του ιστοτόπου σας. Αυτόματα παρακολουθεί τα κλικ προς εξωτερικούς συνδέσμους και μεταφορτώσεις αρχείων.",
|
| 69 |
+
"RevisitedPages": "Σελίδες που αναγνώστηκαν παραπάνω από μία φορές",
|
| 70 |
+
"SearchesSegmentHelp": "Για να επιλέξετε όλες τις επισκέψεις που χρησιμοποίησαν την Αναζήτηση Ιστοτόπου, χρησιμοποιήστε: %s",
|
| 71 |
+
"SiteSearchCategories": "Κατηγορίες (Αναζήτηση ιστοτόπου)",
|
| 72 |
+
"SiteSearchCategories1": "Αυτή η αναφορά δημιουργεί λίστα με τις Κατηγορίες που οι επισκέπτες επέλεξαν όταν έκαναν μια Αναζήτηση στην ιστοσελίδα σας.",
|
| 73 |
+
"SiteSearchCategories2": "Για παράδειγμα, οι ιστοσελίδες Ηλεκτρονικού Εμπορίου τυπικά έχουν έναν επιλογέα «Κατηγορίας» ώστε οι επισκέπτες μπορούν να περιορίσουν τις αναζητήσεις τους από όλα τα προϊόντα σε μια συγκεκριμένη κατηγορία.",
|
| 74 |
+
"SiteSearchCategory": "Κατηγορία (Αναζήτηση ιστοτόπου)",
|
| 75 |
+
"SiteSearchFollowingPagesDoc": "Όταν οι επισκέπτες αναζητούν στην ιστοσελίδα σας, αναζητούν μια συγκεκριμένη σελίδα, περιεχόμενο, προϊόν ή υπηρεσία. Αυτή η αναφορά δημιουργεί μια λίστα με τις σελίδες που επιλέχθηκαν περισσότερο μετά από μια εσωτερική αναζήτηση. Με άλλα λόγια, η λίστα των σελίδων που αναζητήθηκαν περίσσότερο από τους επισκέπτες που ήταν ήδη στην ιστοσελίδα σας.",
|
| 76 |
+
"SiteSearchIntro": "Η παρακολούθηση των αναζητήσεων που κάνουν οι επισκέπτες στην ιστοσελίδα σας είναι ένας πολύ αποτελεσματικός τρόπος για να μάθετε περισσότερα για το τί ενδιαφέρει το κοινό σας, μπορεί να σας βοηθήσει να βρείτε ιδέες για νέο περιεχόμενο, νέα προϊόντα ηλεκτρονικού εμπορίου για τα οποία οι πιθανοί πελάτες θα μπορούσαν να ψάχνουν και γενικά τη βελτίωση της εμπειρίας των επισκεπτών της ιστοσελίδας σας.",
|
| 77 |
+
"SiteSearchKeyword": "Λέξη κλειδί (Αναζήτηση ιστοτόπου)",
|
| 78 |
+
"SiteSearchKeywordCount": "Εμφάνιση λέξης κλειδιού (Αναζήτηση ιστοτόπου)",
|
| 79 |
+
"SiteSearchKeywordCounts": "Εμφανίσεις λέξεων κλειδιών (Αναζήτηση ιστοτόπου)",
|
| 80 |
+
"SiteSearchKeywords": "Λέξεις κλειδιά (Αναζήτηση ιστοτόπου)",
|
| 81 |
+
"SiteSearchKeywordsDocumentation": "Η παρούσα αναφορά απαριθμεί τις λέξεις-κλειδιά αναζήτησης που έψαξαν οι επισκέπτες στην εσωτερική μηχανή αναζήτησης σας.",
|
| 82 |
+
"SiteSearchKeywordsNoResultDocumentation": "Η παρούσα αναφορά παραθέτει τις λέξεις-κλειδιά αναζήτησης που δεν επιστρέψαν κανένα αποτέλεσμα αναζήτησης: ίσως ο αλγόριθμος της μηχανής αναζήτησης μπορεί να βελτιωθεί ή ίσως οι επισκέπτες σας ψάχνουν για περιεχόμενο που δεν είναι (ακόμη) στην ιστοσελίδα σας;",
|
| 83 |
+
"SiteSearchSubcategoryHelp1": "Το τμήμα Αναζήτηση Ιστοτόπου εμφανίζει τις λέξεις κλειδιά που οι επισκέπτες χρησιμοποίησαν κατά την αναζήτησή τους στον ιστοτόπο σας. Εμφανίζει επίσης τις σελίδες που βλέπουν οι χρήστες μετά την εκτέλεση της αναζήτησης και ποιες λέξεις κλειδιά δεν επιστρέφουν αποτελέσματα.",
|
| 84 |
+
"SiteSearchSubcategoryHelp2": "Οι αναφορές αυτές σας δίνουν ιδέες σχετικά με περιεχόμενο που μπορεί να λείπει από τον ιστοτόπο σας, εικόνα γύρω από αυτά που ψάχνουν οι επισκέπτες σας αλλά δεν βρήκαν εύκολα και άλλα πολλά.",
|
| 85 |
+
"SiteSearchSubcategoryHelp3": "Μάθετε περισσότερα στον οδηγό Αναζήτησης Ιστοτόπου.",
|
| 86 |
+
"SubmenuPageTitles": "Τίτλοι σελίδων",
|
| 87 |
+
"SubmenuPagesEntry": "Σελίδες εισόδου",
|
| 88 |
+
"SubmenuPagesExit": "Σελίδες εξόδου",
|
| 89 |
+
"SubmenuSitesearch": "Αναζήτηση ιστοσελίδας",
|
| 90 |
+
"TimeSpentInReferringAction": "Χρόνος που δαπανήθηκε σε Ενέργεια Αναφορών",
|
| 91 |
+
"WidgetEntryPageTitles": "Τίτλοι Σελίδας Εισόδου",
|
| 92 |
+
"WidgetExitPageTitles": "Τίτλοι Σελίδας Εξόδου",
|
| 93 |
+
"WidgetPageTitles": "Τίτλοι Σελίδων",
|
| 94 |
+
"WidgetPageTitlesFollowingSearch": "Τίτλοι Σελίδων που Ακολουθούν μια Αναζήτηση Ιστοσελίδας",
|
| 95 |
+
"WidgetPageUrlsFollowingSearch": "Σελίδες που Ακολουθούν μια Αναζήτηση Ιστοσελίδας",
|
| 96 |
+
"WidgetPagesEntry": "Σελίδες Εισόδου",
|
| 97 |
+
"WidgetPagesExit": "Σελίδες Εξόδου",
|
| 98 |
+
"WidgetSearchCategories": "Κατηγορίες Αναζήτησης",
|
| 99 |
+
"WidgetSearchKeywords": "Λέξεις-κλειδιά Αναζήτησης Ιστοσελίδας",
|
| 100 |
+
"WidgetSearchNoResultKeywords": "Λέξεις-κλειδιά Χωρίς Αποτελέσματα"
|
| 101 |
+
}
|
| 102 |
+
}
|
plugins/Actions/lang/en.json
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"Actions": {
|
| 3 |
+
"AvgGenerationTimeTooltip": "Average based on %1$s hit(s) %2$s between %3$s and %4$s",
|
| 4 |
+
"ColumnClickedURL": "Clicked Outlink",
|
| 5 |
+
"ColumnClickedURLs": "Clicked Outlinks",
|
| 6 |
+
"ColumnActionURL": "Action URL",
|
| 7 |
+
"ColumnClicks": "Clicks",
|
| 8 |
+
"ColumnClicksDocumentation": "The number of times this link was clicked.",
|
| 9 |
+
"ColumnDownloadURL": "Download URL",
|
| 10 |
+
"ColumnDownloadURLs": "Download URLs",
|
| 11 |
+
"ColumnEntryPageTitle": "Entry Page title",
|
| 12 |
+
"ColumnEntryPageURL": "Entry Page URL",
|
| 13 |
+
"ColumnEntryPageURLs": "Entry Page URLs",
|
| 14 |
+
"ColumnExitPageTitle": "Exit Page Title",
|
| 15 |
+
"ColumnExitPageURL": "Exit Page URL",
|
| 16 |
+
"ColumnExitPageURLs": "Exit Page URLs",
|
| 17 |
+
"ColumnNoResultKeyword": "Keyword with No Search Result",
|
| 18 |
+
"ColumnPageName": "Page Name",
|
| 19 |
+
"ColumnPagesPerSearch": "Search Results pages",
|
| 20 |
+
"ColumnPagesPerSearchDocumentation": "Visitors will search on your website, and sometimes click \"next\" to view more results. This is the average number of search results pages viewed for this keyword.",
|
| 21 |
+
"ColumnPageURL": "Page URL",
|
| 22 |
+
"ColumnSearchCategory": "Search Category",
|
| 23 |
+
"ColumnSearches": "Searches",
|
| 24 |
+
"ColumnSearchesDocumentation": "The number of visits that searched for this keyword on your website's search engine.",
|
| 25 |
+
"SearchesSegmentHelp": "To select all visits who used internal Site Search, use: %s",
|
| 26 |
+
"ColumnSearchExits": "%% Search Exits",
|
| 27 |
+
"ColumnSearchExitsDocumentation": "The percentage of visits that left the website after searching for this Keyword on your Site Search engine.",
|
| 28 |
+
"ColumnSearchResultsCount": "Search Results Count",
|
| 29 |
+
"ColumnSiteSearchKeywords": "Unique Keywords",
|
| 30 |
+
"ColumnUniqueClicks": "Unique Clicks",
|
| 31 |
+
"ColumnUniqueClicksDocumentation": "The number of visits that involved a click on this link. If a link was clicked multiple times during one visit, it is only counted once.",
|
| 32 |
+
"ColumnUniqueDownloads": "Unique Downloads",
|
| 33 |
+
"ColumnUniqueOutlinks": "Unique Outlinks",
|
| 34 |
+
"ColumnIdPageview": "Pageview ID",
|
| 35 |
+
"ColumnInteractionPosition": "Interaction Position",
|
| 36 |
+
"ColumnPageViewPosition": "Pageview Position",
|
| 37 |
+
"ActionsInVisit": "Actions In Visit",
|
| 38 |
+
"DownloadsReportDocumentation": "In this report, you can see which files your visitors have downloaded. %s What Matomo counts as a download is the click on a download link. Whether the download was completed or not isn't known to Matomo.",
|
| 39 |
+
"EntryPagesReportDocumentation": "This report contains information about the entry pages that were used during the specified period. An entry page is the first page that a user views during their visit. %s The entry URLs are displayed as a folder structure.",
|
| 40 |
+
"EntryPageTitles": "Entry page titles",
|
| 41 |
+
"EntryPageTitlesReportDocumentation": "This report contains information about the titles of entry pages that were used during the specified period.",
|
| 42 |
+
"ExitPagesReportDocumentation": "This report contains information about the exit pages that occurred during the specified period. An exit page is the last page that a user views during their visit. %s The exit URLs are displayed as a folder structure.",
|
| 43 |
+
"ExitPageTitles": "Exit page titles",
|
| 44 |
+
"ExitPageTitlesReportDocumentation": "This report contains information about the titles of exit pages that occurred during the specified period.",
|
| 45 |
+
"MainMetricsReportDocumentation": "This report provides a very basic overview of what actions your visitors take on your website.",
|
| 46 |
+
"OneSearch": "1 search",
|
| 47 |
+
"OutlinkDocumentation": "An outlink is a link that leads the visitor away from your website (to another domain).",
|
| 48 |
+
"OutlinksReportDocumentation": "This report shows a hierarchical list of outlink URLs that were clicked by your visitors.",
|
| 49 |
+
"PagesReportDocumentation": "This report contains information about the page URLs that have been visited. %s The table is organized hierarchically, the URLs are displayed as a folder structure.",
|
| 50 |
+
"PageTitlesReportDocumentation": "This report contains information about the titles of the pages that have been visited. %1$s The page title is the HTML %2$s Tag that most browsers show in their window title.",
|
| 51 |
+
"PageUrls": "Page URLs",
|
| 52 |
+
"PageViewsByVisitor": "Number of times this page was viewed by this visitor across all visits",
|
| 53 |
+
"PluginDescription": "Reports about the page views and page titles. Lets you measure your internal website's search engine. Automatically tracks clicks on external links and file downloads.",
|
| 54 |
+
"RevisitedPages": "Pages viewed more than once",
|
| 55 |
+
"SiteSearchCategories1": "This report lists the Categories that visitors selected when they made a Search on your website.",
|
| 56 |
+
"SiteSearchCategories2": "For example, Ecommerce websites typically have a \"Category\" selector so that visitors can restrict their searches to all products in a specific Category.",
|
| 57 |
+
"SiteSearchFollowingPagesDoc": "When visitors search on your website, they are looking for a particular page, content, product, or service. This report lists the pages that were clicked the most after an internal search. In other words, the list of pages the most searched for by visitors already on your website.",
|
| 58 |
+
"SiteSearchIntro": "Tracking searches that visitors make on your website is a very effective way to learn more about what your audience is looking for, it can help find ideas for new content, new Ecommerce products that potential customers might be searching for, and generally improve the visitors' experience on your website.",
|
| 59 |
+
"SiteSearchCategory": "Category (Site Search)",
|
| 60 |
+
"SiteSearchCategories": "Categories (Site Search)",
|
| 61 |
+
"SiteSearchKeyword": "Keyword (Site Search)",
|
| 62 |
+
"SiteSearchKeywords": "Keywords (Site Search)",
|
| 63 |
+
"SiteSearchKeywordCount": "Keyword count (Site Search)",
|
| 64 |
+
"SiteSearchKeywordCounts": "Keyword counts (Site Search)",
|
| 65 |
+
"SiteSearchKeywordsDocumentation": "This report lists the Search Keywords that visitors searched for on your internal Search Engine.",
|
| 66 |
+
"SiteSearchKeywordsNoResultDocumentation": "This report lists the Search Keywords that did not return any Search result: maybe the search engine algorithm can be improved, or maybe your visitors are looking for content that is not (yet) on your website?",
|
| 67 |
+
"SubmenuPagesEntry": "Entry pages",
|
| 68 |
+
"SubmenuPagesExit": "Exit pages",
|
| 69 |
+
"SubmenuPageTitles": "Page titles",
|
| 70 |
+
"SubmenuSitesearch": "Site Search",
|
| 71 |
+
"WidgetEntryPageTitles": "Entry Page Titles",
|
| 72 |
+
"WidgetExitPageTitles": "Exit Page Titles",
|
| 73 |
+
"WidgetPagesEntry": "Entry Pages",
|
| 74 |
+
"WidgetPagesExit": "Exit Pages",
|
| 75 |
+
"WidgetPageTitles": "Page Titles",
|
| 76 |
+
"WidgetPageTitlesFollowingSearch": "Page Titles Following a Site Search",
|
| 77 |
+
"WidgetPageUrlsFollowingSearch": "Pages Following a Site Search",
|
| 78 |
+
"WidgetSearchCategories": "Search Categories",
|
| 79 |
+
"WidgetSearchKeywords": "Site Search Keywords",
|
| 80 |
+
"WidgetSearchNoResultKeywords": "Search Keywords with No Results",
|
| 81 |
+
"ActionType": "Action Type",
|
| 82 |
+
"ActionTypeSegmentHelp": "A type of action, such as: %s",
|
| 83 |
+
"ActionTypes": "Action Types",
|
| 84 |
+
"Behaviour": "Behaviour",
|
| 85 |
+
"TimeSpentInReferringAction": "Time Spent in Referring Action",
|
| 86 |
+
"PagesSubcategoryHelp1": "This report contains information about the page URLs that have been visited.",
|
| 87 |
+
"PagesSubcategoryHelp2": "The table is organized hierarchically, the URLs are displayed as a folder structure.",
|
| 88 |
+
"PagesSubcategoryHelp3": "Use the plus and minus icons on the left to navigate.",
|
| 89 |
+
"EntryPagesSubcategoryHelp1": "This report contains information about the entry pages that were used during the specified period. An entry page is the first page that a user views during their visit.",
|
| 90 |
+
"EntryPagesSubcategoryHelp2": "The entry URLs are displayed as a folder structure.",
|
| 91 |
+
"ExitPagesSubcategoryHelp1": "This report contains information about the exit pages that occurred during the specified period. An exit page is the last page that a user views during their visit.",
|
| 92 |
+
"ExitPagesSubcategoryHelp2": "The exit URLs are displayed as a folder structure.",
|
| 93 |
+
"PageTitlesSubcategoryHelp1": "This report contains information about the titles of the pages that have been visited.",
|
| 94 |
+
"PageTitlesSubcategoryHelp2": "The page title is the HTML &lt;title&gt; Tag that most browsers show in their window title.",
|
| 95 |
+
"SiteSearchSubcategoryHelp1": "The Site Search section shows which keywords visitors use when searching your website. It also displays which pages users view after performing a search and which on-site search keywords return no results at all.",
|
| 96 |
+
"SiteSearchSubcategoryHelp2": "These reports can give you ideas about missing content on your site, insight into what your visitors are looking for but can’t find easily, and more.",
|
| 97 |
+
"SiteSearchSubcategoryHelp3": "Learn more in the Site Search guide.",
|
| 98 |
+
"OutlinksSubcategoryHelp1": "This report shows a hierarchical list of outlink URLs that were clicked by your visitors. An outlink is a link that leads the visitor away from your website (to another domain).",
|
| 99 |
+
"DownloadsSubcategoryHelp1": "In this report, you can see which files your visitors have downloaded.",
|
| 100 |
+
"DownloadsSubcategoryHelp2": "What Matomo counts as a download is the click on a download link. Whether the download was completed or not isn't known to Matomo."
|
| 101 |
+
}
|
| 102 |
+
}
|
plugins/Actions/lang/eo.json
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"Actions": {
|
| 3 |
+
"PagesSubcategoryHelp3": "Uzi la plus kaj minus ikonoj maldekstre por foliumi."
|
| 4 |
+
}
|
| 5 |
+
}
|
plugins/Actions/lang/es-ar.json
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"Actions": {
|
| 3 |
+
"ActionType": "Tipo de Acción",
|
| 4 |
+
"ActionTypes": "Tipos de acción",
|
| 5 |
+
"ActionsInVisit": "Acciones en visita",
|
| 6 |
+
"AvgGenerationTimeTooltip": "Promedio basado en %1$s acceso(s) %2$s entre %3$s y %4$s",
|
| 7 |
+
"Behaviour": "Comportamiento",
|
| 8 |
+
"ColumnActionURL": "URL de Acción",
|
| 9 |
+
"ColumnClickedURL": "Enlace externo cliqueado",
|
| 10 |
+
"ColumnClickedURLs": "Enlaces externos cliqueados",
|
| 11 |
+
"ColumnClicks": "Clics",
|
| 12 |
+
"ColumnClicksDocumentation": "Número de veces que este enlace ha sido clicado.",
|
| 13 |
+
"ColumnDownloadURL": "URL de Descarga",
|
| 14 |
+
"ColumnDownloadURLs": "Direcciones web descargadas",
|
| 15 |
+
"ColumnEntryPageTitle": "Título de la Página de entrada",
|
| 16 |
+
"ColumnEntryPageURL": "URL de la Página de entrada",
|
| 17 |
+
"ColumnEntryPageURLs": "Direcciones web de página de entrada",
|
| 18 |
+
"ColumnExitPageTitle": "Título de la Página de salida",
|
| 19 |
+
"ColumnExitPageURL": "URL de la Página de salida",
|
| 20 |
+
"ColumnExitPageURLs": "Direcciones web de página de salida",
|
| 21 |
+
"ColumnIdPageview": "ID de paginas vistas",
|
| 22 |
+
"ColumnInteractionPosition": "Posición de interacción",
|
| 23 |
+
"ColumnNoResultKeyword": "Palabra clave Sin Resultados en la Búsqueda",
|
| 24 |
+
"ColumnPageName": "Nombre de Página",
|
| 25 |
+
"ColumnPageURL": "URL de Página",
|
| 26 |
+
"ColumnPageViewPosition": "Posición de la vista de página",
|
| 27 |
+
"ColumnPagesPerSearch": "Páginas de resultados de búsqueda",
|
| 28 |
+
"ColumnPagesPerSearchDocumentation": "Los visitantes buscarán en tu sitio web y algunas veces harán click en \"siguiente\" para ver más resultados. Este es el promedio de páginas de resultados de búsqueda, vistos para esta palabra clave.",
|
| 29 |
+
"ColumnSearchCategory": "Categoría de búsqueda",
|
| 30 |
+
"ColumnSearchExits": "Salidas de búsqueda de %%",
|
| 31 |
+
"ColumnSearchExitsDocumentation": "El porcentaje de visitantes que abandonó el sitio después de buscar esta palabra clave en el buscador de tu sitio.",
|
| 32 |
+
"ColumnSearchResultsCount": "Cantidad de resultados de la búsqueda",
|
| 33 |
+
"ColumnSearches": "Búsquedas",
|
| 34 |
+
"ColumnSearchesDocumentation": "La cantidad de visitantes que buscó esta palabra clave en el buscador de tu sitio web.",
|
| 35 |
+
"ColumnSiteSearchKeywords": "Palabras clave Únicas",
|
| 36 |
+
"ColumnUniqueClicks": "Clics Únicos",
|
| 37 |
+
"ColumnUniqueClicksDocumentation": "Número de visitas que hicieron clic en este link. Si hicieron clic a link múltiples veces durante una visita, solo se cuenta como una.",
|
| 38 |
+
"ColumnUniqueDownloads": "Descargas Únicas",
|
| 39 |
+
"ColumnUniqueOutlinks": "Enlaces de salida Únicos",
|
| 40 |
+
"DownloadsReportDocumentation": "En este informe, podés ver qué archivos descargaron tus visitantes. %s Lo que Matomo cuenta como descarga es el clic en un enlace de descarga. Matomo no puede saber si la descarga fue completada.",
|
| 41 |
+
"DownloadsSubcategoryHelp1": "En este informe podés ver qué archivos descargaron tus visitantes.",
|
| 42 |
+
"DownloadsSubcategoryHelp2": "Lo que Matomo contabiliza como una descarga es el clic en el enlace de descarga. Matomo no sabe si la carga fue completada o no.",
|
| 43 |
+
"EntryPageTitles": "Títulos de páginas de entrada",
|
| 44 |
+
"EntryPageTitlesReportDocumentation": "Este reporte contiene información sobre los títulos de las páginas de entrada que han sido utilizadas durante el período específico.",
|
| 45 |
+
"EntryPagesReportDocumentation": "Este informe contiene información sobre las páginas de entrada que fueron usada durante el período especificado. Una página de entrada es la primera página que un usuario ve durante su visita. %s Las direcciones web de entrada se muestran como una estructura de carpeta.",
|
| 46 |
+
"EntryPagesSubcategoryHelp1": "Este informe contiene información sobre las páginas de entradas que fueron usadas durante el período especificado. Una página de entrada es la primer página que un usuario ve durante su visita.",
|
| 47 |
+
"EntryPagesSubcategoryHelp2": "Las direcciones web de entrada son mostradas como una estructura de carpeta.",
|
| 48 |
+
"ExitPageTitles": "Títulos de páginas de salida",
|
| 49 |
+
"ExitPageTitlesReportDocumentation": "Este reporte contiene información sobre los títulos de las páginas de salida que ocurrieron durante el período específico.",
|
| 50 |
+
"ExitPagesReportDocumentation": "Este informe contiene información sobre las páginas de salida que ocurrieron durante el período especificado. Una página de salida es la última página que un usuario ve durante su visita. %s Las direcciones web de salida se muestran como una estructura de carpeta.",
|
| 51 |
+
"ExitPagesSubcategoryHelp1": "Este informe contiene información sobre las páginas de salida que ocurrieron durante un períoso especificado. Una página de salida es la última página que un usuario ve durante su visita.",
|
| 52 |
+
"ExitPagesSubcategoryHelp2": "Las direcciones web de salida son mostradas como una estructura de carpeta.",
|
| 53 |
+
"MainMetricsReportDocumentation": "Este informe un pantallazo muy básico de las acciones que tus visitantes hacen en tu sitio web.",
|
| 54 |
+
"OneSearch": "1 búsqueda",
|
| 55 |
+
"OutlinkDocumentation": "Un enlace externo es un enlace que lleva a su visitante fuera de su página web (a otro dominio).",
|
| 56 |
+
"OutlinksReportDocumentation": "Este reporte muestra una lista de los enlaces externos que han sido clicados por sus visitantes, organizada por jerarquía.",
|
| 57 |
+
"OutlinksSubcategoryHelp1": "Este informe muestra una lista por jerarquía de enlaces de salida que fueron cliqueadas por tus visitantes. Un enlace de salida es un enlace que lleva al visitante a otro sitio web (a otro dominio).",
|
| 58 |
+
"PageTitlesReportDocumentation": "Este reporte contiene información sobre los títulos de las páginas que han sido visitadas. %1$s El título de la página es el Tag %2$s de HTML, que la gran mayoría de los navegadores muestran en el título de su ventana.",
|
| 59 |
+
"PageTitlesSubcategoryHelp1": "Este informe contiene información sobre los títulos de las páginas que fueron visitadas.",
|
| 60 |
+
"PageTitlesSubcategoryHelp2": "El título de la página es la etiqueta HTML &lt;título&gt; que la mayoría de los navegadores web muestra en el título de la ventana.",
|
| 61 |
+
"PageUrls": "URLs de página",
|
| 62 |
+
"PageViewsByVisitor": "Número de veces que esta página fue vista por un visitante en todas las visitas",
|
| 63 |
+
"PagesReportDocumentation": "Este reporte contiene información sobre las URLs de las páginas que han sido visitadas. %s La tabla está organizada por jerarquía, las URLs han sido mostradas como una estructura de carpetas.",
|
| 64 |
+
"PagesSubcategoryHelp1": "Este informe contiene información sobre las direcciones web de la página que fueron visitadas.",
|
| 65 |
+
"PagesSubcategoryHelp2": "La tabla es organizada por jerarquía, las direcciones web son mostradas como una estructura de carpeta.",
|
| 66 |
+
"PagesSubcategoryHelp3": "Usá los íconos de más y menos en la izquierda para navegar.",
|
| 67 |
+
"PluginDescription": "Informes sobre las vistas y títulos de página. Te deja medir tu motor de búsqueda interno del sitio web. Analiza automáticamente los clics en enlaces externos y las descargas de archivos.",
|
| 68 |
+
"RevisitedPages": "Páginas vistas más de una vez",
|
| 69 |
+
"SiteSearchCategories": "Categorías (búsqueda en el sitio)",
|
| 70 |
+
"SiteSearchCategories1": "Este reporte lista las Categorías que los visitantes eligieron cuando realizaron una búsqueda en tu sitio.",
|
| 71 |
+
"SiteSearchCategories2": "Por ejemplo: los sitios de E-commerce usualmente tienen un selector de \"Categorías\" para que los visitantes puedan restringir sus búsquedas sólo a los productos de una categoría específica.",
|
| 72 |
+
"SiteSearchCategory": "Categoría (búsqueda en el sitio)",
|
| 73 |
+
"SiteSearchFollowingPagesDoc": "Cuando los visitantes realizan una búsqueda en tu sitio, están buscando una página, contenido, producto o servicio en particular. Este reporte lista las páginas que más han sido clickeadas luego de una búsqueda interna. En otras palabras, la lista de páginas más buscadas por los visitantes que ya están en de tu sitio.",
|
| 74 |
+
"SiteSearchIntro": "El seguimiento de las búsquedas que tus visitantes hacen en tu sitio web es una manera muy efectiva de aprender más acerca de qué busca tu audiencia, puede ayudarte a encontrar ideas para nuevos contenidos o productos que tus potenciales clientes pueden estar buscando y en general, mejorar la experiencia de los visitantes de tu sitio web.",
|
| 75 |
+
"SiteSearchKeyword": "Palabra clave (Búsqueda en Sitio)",
|
| 76 |
+
"SiteSearchKeywordCount": "Conteo de palabras clave (búsqueda del sitio)",
|
| 77 |
+
"SiteSearchKeywordCounts": "Conteos de palabras clave (búsqueda del sitio)",
|
| 78 |
+
"SiteSearchKeywords": "Palabras claves (búsqueda en el sitio)",
|
| 79 |
+
"SiteSearchKeywordsDocumentation": "Este reporte muestra las palabras clave que tus visitantes buscaron en tu motor de búsqueda interno.",
|
| 80 |
+
"SiteSearchKeywordsNoResultDocumentation": "Este reporte lista las palabras clave que no produjeron resultados: ¿se podría mejorar el algoritmo de búsqueda o quizá tus visitantes están buscando algún contenido que no se encuentra (todavía) en tu sitio?",
|
| 81 |
+
"SiteSearchSubcategoryHelp1": "La sección de búsqueda de sitio muestra qué palabras claves usaron los visitantes cuando buscaron en tu sitio web. También muestra qué páginas vieron los usuarios después de hacer una búsqueda y qué palabras claves de las búsquedas en el sitio no devolvieron resultados.",
|
| 82 |
+
"SiteSearchSubcategoryHelp2": "Estos informes te pueden dar ideas sobre contenido faltante o ausente en tu sitio web, así como ideas sobre lo que tus visitantes estaban buscando pero no pudieron encontrar fácilmente, y mucho más.",
|
| 83 |
+
"SiteSearchSubcategoryHelp3": "Aprendé más en la guía de Búsqueda del sitio.",
|
| 84 |
+
"SubmenuPageTitles": "Títulos de página",
|
| 85 |
+
"SubmenuPagesEntry": "Páginas de entrada",
|
| 86 |
+
"SubmenuPagesExit": "Páginas de salida",
|
| 87 |
+
"SubmenuSitesearch": "Búsqueda interna",
|
| 88 |
+
"TimeSpentInReferringAction": "Tiempo transcurrido en la acción referente",
|
| 89 |
+
"WidgetEntryPageTitles": "Títulos de Páginas de Entrada",
|
| 90 |
+
"WidgetExitPageTitles": "Títulos de Página de Salida",
|
| 91 |
+
"WidgetPageTitles": "Títulos de Páginas",
|
| 92 |
+
"WidgetPageTitlesFollowingSearch": "Títulos de las páginas que siguen a una búsqueda interna",
|
| 93 |
+
"WidgetPageUrlsFollowingSearch": "Páginas siguientes a una búsqueda interna",
|
| 94 |
+
"WidgetPagesEntry": "Páginas de Entrada",
|
| 95 |
+
"WidgetPagesExit": "Páginas de Salida",
|
| 96 |
+
"WidgetSearchCategories": "Categorías de búsqueda",
|
| 97 |
+
"WidgetSearchKeywords": "Palabras clave de las búsquedas internas",
|
| 98 |
+
"WidgetSearchNoResultKeywords": "Palabras clave sin resultados"
|
| 99 |
+
}
|
| 100 |
+
}
|
plugins/Actions/lang/es.json
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"Actions": {
|
| 3 |
+
"ActionType": "Tipo de acción",
|
| 4 |
+
"ActionTypeSegmentHelp": "Un tipo de acción, como: %s",
|
| 5 |
+
"ActionTypes": "Tipos de acciones",
|
| 6 |
+
"ActionsInVisit": "Acciones en visitas",
|
| 7 |
+
"AvgGenerationTimeTooltip": "Promedio basado en %1$s hit(s) %2$s entre %3$s y %4$s",
|
| 8 |
+
"Behaviour": "Comportamiento",
|
| 9 |
+
"ColumnActionURL": "URL de acción",
|
| 10 |
+
"ColumnClickedURL": "Hizo clic en enlace externo",
|
| 11 |
+
"ColumnClickedURLs": "Hizo clic en enlaces externos",
|
| 12 |
+
"ColumnClicks": "Clics",
|
| 13 |
+
"ColumnClicksDocumentation": "El número de veces que se ha hecho clic en este enlace.",
|
| 14 |
+
"ColumnDownloadURL": "URL de descarga",
|
| 15 |
+
"ColumnDownloadURLs": "URLs de descarga",
|
| 16 |
+
"ColumnEntryPageTitle": "Título de la Página de entrada",
|
| 17 |
+
"ColumnEntryPageURL": "URL de la página de entrada",
|
| 18 |
+
"ColumnEntryPageURLs": "URLs de las páginas de entrada",
|
| 19 |
+
"ColumnExitPageTitle": "Título de la Página de salida",
|
| 20 |
+
"ColumnExitPageURL": "URL de la página de salida",
|
| 21 |
+
"ColumnExitPageURLs": "URLs de las páginas de salida",
|
| 22 |
+
"ColumnIdPageview": "ID Páginas vistas",
|
| 23 |
+
"ColumnInteractionPosition": "Posición de la interacción",
|
| 24 |
+
"ColumnNoResultKeyword": "Palabra clave sin resultados en la búsqueda",
|
| 25 |
+
"ColumnPageName": "Nombre de página",
|
| 26 |
+
"ColumnPageURL": "URL de la página",
|
| 27 |
+
"ColumnPageViewPosition": "Posición de vista de página",
|
| 28 |
+
"ColumnPagesPerSearch": "Páginas con resultados de búsqueda",
|
| 29 |
+
"ColumnPagesPerSearchDocumentation": "Los visitantes buscarán en su sitio de internet y algunas veces harán clic en \"siguiente\" para ver más resultados. Este es el promedio de páginas de resultados de búsqueda, vistos por esta palabra clave.",
|
| 30 |
+
"ColumnSearchCategory": "Categoría de búsqueda",
|
| 31 |
+
"ColumnSearchExits": "%% salidas por búsqueda",
|
| 32 |
+
"ColumnSearchExitsDocumentation": "El porcentaje de visitantes que dejó el sitio después de buscar esta palabra clave en el buscador interno de su sitio de internet.",
|
| 33 |
+
"ColumnSearchResultsCount": "Cantidad de resultados de la búsqueda",
|
| 34 |
+
"ColumnSearches": "Búsquedas",
|
| 35 |
+
"ColumnSearchesDocumentation": "La cantidad de visitantes que buscaron esta palabra clave en el buscador de su sitio de internet.",
|
| 36 |
+
"ColumnSiteSearchKeywords": "Palabras claves únicas",
|
| 37 |
+
"ColumnUniqueClicks": "Clics únicos",
|
| 38 |
+
"ColumnUniqueClicksDocumentation": "Número de visitas que hicieron clic en este enlace. Si un enlace se le hace clic varias veces durante una sola visita, sólo se cuenta una vez.",
|
| 39 |
+
"ColumnUniqueDownloads": "Descargas únicas",
|
| 40 |
+
"ColumnUniqueOutlinks": "Enlaces externos únicos",
|
| 41 |
+
"DownloadsReportDocumentation": "En este informe, puede ver qué archivos han descargado sus visitantes. %s Lo que Matomo cuenta como descarga es el clic en un enlace de descarga. Si la descarga fue completada o no, Matomo no puede saberlo.",
|
| 42 |
+
"DownloadsSubcategoryHelp1": "En este informe puede ver qué ficheros han descargado sus visitantes.",
|
| 43 |
+
"DownloadsSubcategoryHelp2": "Lo que Matomo cuenta como una descarga es el clic en un enlace de descarga. Si la descarga se ha completado o no es desconocido por Matomo.",
|
| 44 |
+
"EntryPageTitles": "Títulos de páginas de entrada",
|
| 45 |
+
"EntryPageTitlesReportDocumentation": "Este informe contiene información sobre los títulos de las páginas de entrada que han sido utilizadas durante el período especificado.",
|
| 46 |
+
"EntryPagesReportDocumentation": "Este informe contiene información acerca de las páginas de entrada que fueron usadas durante el periodo de tiempo especificado. Una página de entrada es la primera página que un usuario ve durante su visita. %s Las URL de entrada se muestran como una estructura jerárquica de carpetas.",
|
| 47 |
+
"EntryPagesSubcategoryHelp1": "Este informe contiene información respecto a las páginas de entrada utilizadas durante el periodo de tiempo especificado. Una página de entrada es la primera página que un usuario visualiza durante su visita.",
|
| 48 |
+
"EntryPagesSubcategoryHelp2": "Las URL-s de entrada se muestran como una estructura de ficheros.",
|
| 49 |
+
"ExitPageTitles": "Títulos de páginas de salida",
|
| 50 |
+
"ExitPageTitlesReportDocumentation": "Este reporte contiene información sobre los títulos de las páginas de salida que ocurrieron durante el período específicado.",
|
| 51 |
+
"ExitPagesReportDocumentation": "Este informe contiene información acerca de las páginas de salida durante el periodo de tiempo especificado. Una página de salida es la última página que un usuario ve durante su visita. %s Las URL de salida se muestran como una estructura jerárquica de carpetas.",
|
| 52 |
+
"ExitPagesSubcategoryHelp1": "Este informe contiene información acerca de las páginas de salida durante el periodo de tiempo especificado. Una página de salida es la última página visitada por un usuario durante su visita.",
|
| 53 |
+
"ExitPagesSubcategoryHelp2": "Las URL-s de salida se muestran como una estrucura de ficheros.",
|
| 54 |
+
"MainMetricsReportDocumentation": "Este informe muestra una vista general básica de las acciones llevadas a cabo por los visitantes en su sitio web.",
|
| 55 |
+
"OneSearch": "1 búsqueda",
|
| 56 |
+
"OutlinkDocumentation": "Un enlace externo es un enlace que lleva a su visitante fuera de su página de internet (a otro dominio).",
|
| 57 |
+
"OutlinksReportDocumentation": "Este informe muestra una lista jerárquica de los enlaces externos en los que sus visitantes han hecho clic.",
|
| 58 |
+
"OutlinksSubcategoryHelp1": "Este informe muestra una lista jerárquica de enlaces externos que fueron clicados por sus visitantes. Un enlace externo es un enlace que redirige al visitante fuera de su sitio web (a otro dominio).",
|
| 59 |
+
"PageTitlesReportDocumentation": "Este informe contiene información sobre los títulos de las páginas que han sido visitadas. %1$s El título de la página es la etiqueta HTML %2$s, que la gran mayoría de los navegadores muestran en el título de su ventana.",
|
| 60 |
+
"PageTitlesSubcategoryHelp1": "Este informe contiene información sobre los títulos de las páginas que han sido visitadas.",
|
| 61 |
+
"PageTitlesSubcategoryHelp2": "El título de la página es la etiqueta HTML &lt;title&gt; la cual la mayoría de navegadores muestran en el título de la ventana.",
|
| 62 |
+
"PageUrls": "URLs de página",
|
| 63 |
+
"PageViewsByVisitor": "Número de veces que esta página fue vista por este visitante durante todas sus visitas",
|
| 64 |
+
"PagesReportDocumentation": "Este reporte contiene información sobre las URLs de las páginas que han sido visitadas. %s La tabla está organizada por jerarquía, las URLs han sido mostradas como una estructura de carpetas.",
|
| 65 |
+
"PagesSubcategoryHelp1": "Este informe contiene información de las URL de las páginas que han sido visitadas.",
|
| 66 |
+
"PagesSubcategoryHelp2": "La tabla está organizada de forma jerárquica, las URL-s se muestran como una estructura de ficheros.",
|
| 67 |
+
"PagesSubcategoryHelp3": "Use los iconos de más y menos a la izquierda para navegar.",
|
| 68 |
+
"PluginDescription": "Informes sobre las páginas vistas y los títulos de las páginas. Le permite medir el motor de búsqueda de su sitio web interno. Rastrea automáticamente los clics en enlaces externos y descargas de archivos.",
|
| 69 |
+
"RevisitedPages": "Páginas vistas más de una vez",
|
| 70 |
+
"SearchesSegmentHelp": "Para seleccionar todas las visitas que utilizaron la búsqueda de sitio interna, use: %s",
|
| 71 |
+
"SiteSearchCategories": "Categorías (búsqueda en sitio)",
|
| 72 |
+
"SiteSearchCategories1": "Este informe lista las Categorías que los visitantes eligieron cuando realizaron una búsqueda en su sitio de internet.",
|
| 73 |
+
"SiteSearchCategories2": "Por ejemplo: los sitios de comercio electrónico usualmente tienen un selector de \"Categorías\" para que los visitantes puedan restringir sus búsquedas sólo a los productos de una categoría determinada.",
|
| 74 |
+
"SiteSearchCategory": "Categoría (búsqueda en sitio)",
|
| 75 |
+
"SiteSearchFollowingPagesDoc": "Cuando los visitantes realizan una búsqueda en su sitio, están buscando una página, contenido, producto o servicio en particular. Este informe enumera las páginas en las que más se han hecho clic luego de una búsqueda interna. En otras palabras, la lista de páginas más buscadas por los visitantes de su sitio.",
|
| 76 |
+
"SiteSearchIntro": "El monitoreo de las búsquedas que sus visitantes hacen en su sitio de internet es una manera muy efectiva de aprender más acerca de qué busca su audiencia, puede ayudarle a encontrar ideas para nuevos contenidos o productos que sus potenciales clientes pueden estar buscando y en general, mejorar la experiencia de los visitantes en su sitio de internet.",
|
| 77 |
+
"SiteSearchKeyword": "Palabra clave (búsqueda en sitio)",
|
| 78 |
+
"SiteSearchKeywordCount": "Contador de palabras clave (búsqueda en sitio)",
|
| 79 |
+
"SiteSearchKeywordCounts": "Contadores de palabras clave (búsqueda en sitio)",
|
| 80 |
+
"SiteSearchKeywords": "Palabras claves (búsqueda en sitio)",
|
| 81 |
+
"SiteSearchKeywordsDocumentation": "Este informe muestra las palabras clave que sus visitantes buscaron en su motor de búsqueda interno.",
|
| 82 |
+
"SiteSearchKeywordsNoResultDocumentation": "Este informe enumera las palabras claves de búsquedas que no produjeron resultados: tal vez se pueda mejorar el algoritmo de búsqueda o quizás sus visitantes están buscando algún contenido que no se encuentra (todavía) en tu sitio?",
|
| 83 |
+
"SiteSearchSubcategoryHelp1": "La sección Site Search muestra qué palabras claves utilizan tus visitantes al buscar tu sitio web. También muestra que páginas visitan tus usuarios tras realizar una búsqueda y qué palabras clave no devuelven resultados en las busquedas del sitio.",
|
| 84 |
+
"SiteSearchSubcategoryHelp2": "Estos informes pueden darle ideas sobre el contenido que falta en su sitio web, una visión sobre lo que sus visitantes están buscando, pero que resulta difícil de encontrar y más.",
|
| 85 |
+
"SiteSearchSubcategoryHelp3": "Obtenga más información en la guía de búsqueda en el sitio.",
|
| 86 |
+
"SubmenuPageTitles": "Títulos de página",
|
| 87 |
+
"SubmenuPagesEntry": "Páginas de entrada",
|
| 88 |
+
"SubmenuPagesExit": "Páginas de salida",
|
| 89 |
+
"SubmenuSitesearch": "Búsqueda interna",
|
| 90 |
+
"TimeSpentInReferringAction": "Tiempo utilizado en la acción referida",
|
| 91 |
+
"WidgetEntryPageTitles": "Títulos de páginas de entrada",
|
| 92 |
+
"WidgetExitPageTitles": "Títulos de página de egreso",
|
| 93 |
+
"WidgetPageTitles": "Títulos de página",
|
| 94 |
+
"WidgetPageTitlesFollowingSearch": "Títulos de las páginas que siguen a una búsqueda interna",
|
| 95 |
+
"WidgetPageUrlsFollowingSearch": "Páginas siguientes a una búsqueda interna",
|
| 96 |
+
"WidgetPagesEntry": "Páginas de entrada",
|
| 97 |
+
"WidgetPagesExit": "Páginas de salida",
|
| 98 |
+
"WidgetSearchCategories": "Categorías de búsqueda",
|
| 99 |
+
"WidgetSearchKeywords": "Palabras claves de las búsquedas internas del sitio",
|
| 100 |
+
"WidgetSearchNoResultKeywords": "Búsquedas por palabras clave sin resultados"
|
| 101 |
+
}
|
| 102 |
+
}
|
plugins/Actions/lang/et.json
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"Actions": {
|
| 3 |
+
"AvgGenerationTimeTooltip": "Keskmine, mis baseerub %1$s laadimisel %2$s, %3$s ja %4$s vahel.",
|
| 4 |
+
"ColumnClicks": "Hiireklikke",
|
| 5 |
+
"ColumnClicksDocumentation": "Arv, mitu korda antud linki on klikitud.",
|
| 6 |
+
"ColumnDownloadURL": "Allalaadimise URL",
|
| 7 |
+
"ColumnEntryPageTitle": "Sisenetud lehe pealkiri",
|
| 8 |
+
"ColumnEntryPageURL": "Sisenetud lehe URL",
|
| 9 |
+
"ColumnExitPageTitle": "Väljutud lehe pealkiri",
|
| 10 |
+
"ColumnExitPageURL": "Väljutud lehe URL",
|
| 11 |
+
"ColumnNoResultKeyword": "Ilma tulemusteta võtmesõna",
|
| 12 |
+
"ColumnPageName": "Lehe nimi",
|
| 13 |
+
"ColumnPageURL": "Lehe URL",
|
| 14 |
+
"ColumnPagesPerSearch": "Otsingu tulemuste lehed",
|
| 15 |
+
"ColumnSearchCategory": "Otsingu Kategooria",
|
| 16 |
+
"ColumnSearchResultsCount": "Otisngutulemuste arv",
|
| 17 |
+
"ColumnSearches": "Otsinguid",
|
| 18 |
+
"ColumnSearchesDocumentation": "Külastuste arv, mille jooksul otsiti antud märksõna veebilehe enda otsingumootoriga.",
|
| 19 |
+
"ColumnSiteSearchKeywords": "Unikaalseid Võtmesõnu",
|
| 20 |
+
"ColumnUniqueClicks": "Unikaalseid Klikke",
|
| 21 |
+
"ColumnUniqueDownloads": "Unikaalseid Allalaadimisi",
|
| 22 |
+
"ColumnUniqueOutlinks": "Unikaalsed väljuvad lingid",
|
| 23 |
+
"EntryPageTitles": "Sisenetud lehtede pealkirjad",
|
| 24 |
+
"ExitPageTitles": "Väljutud lehtede pealkirjad",
|
| 25 |
+
"OneSearch": "1 otsing",
|
| 26 |
+
"PageUrls": "Lehe URL'id",
|
| 27 |
+
"PagesSubcategoryHelp3": "Kasuta pluss ja miinus ikoone vasakul, et navigeerida",
|
| 28 |
+
"SiteSearchKeyword": "Võtmesõna (lehe otsing)",
|
| 29 |
+
"SubmenuPageTitles": "Lehe pealkirjad",
|
| 30 |
+
"SubmenuPagesEntry": "Sisenetud lehed",
|
| 31 |
+
"SubmenuPagesExit": "Väljutud lehed",
|
| 32 |
+
"SubmenuSitesearch": "Lehe otsing",
|
| 33 |
+
"WidgetEntryPageTitles": "Sisenetud lehtede pealkirjad",
|
| 34 |
+
"WidgetExitPageTitles": "Väljutud lehtede pealkirjad",
|
| 35 |
+
"WidgetPageTitles": "Lehe pealkirjad",
|
| 36 |
+
"WidgetPageTitlesFollowingSearch": "Peale otsingut külastatud lehtede pealkirjad",
|
| 37 |
+
"WidgetPageUrlsFollowingSearch": "Peale otsingut külastatud lehed",
|
| 38 |
+
"WidgetPagesEntry": "Sisenetud lehed",
|
| 39 |
+
"WidgetPagesExit": "Lehed kust väljutakse",
|
| 40 |
+
"WidgetSearchCategories": "Otsingu Kategooriad",
|
| 41 |
+
"WidgetSearchKeywords": "Lehe otsingu võtmesõnad",
|
| 42 |
+
"WidgetSearchNoResultKeywords": "Ilma tulemusteta otsingu võtmesõnad"
|
| 43 |
+
}
|
| 44 |
+
}
|
plugins/Actions/lang/eu.json
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"Actions": {
|
| 3 |
+
"ActionType": "Ekintza-mota",
|
| 4 |
+
"ActionTypes": "Ekintza-motak",
|
| 5 |
+
"ActionsInVisit": "Ekintzak bisitan",
|
| 6 |
+
"AvgGenerationTimeTooltip": "%1$s bisitako ekintzetan oinarritutako batezbestekoa %2$s %3$s eta %4$s artean",
|
| 7 |
+
"Behaviour": "Portaera",
|
| 8 |
+
"ColumnActionURL": "Ekintzaren URLa",
|
| 9 |
+
"ColumnClickedURL": "Kanpo estekan klik eginda",
|
| 10 |
+
"ColumnClickedURLs": "Kanpo esteketan klik eginda",
|
| 11 |
+
"ColumnClicks": "Klik kopurua",
|
| 12 |
+
"ColumnClicksDocumentation": "Zenbat aldiz egin den klik esteka honetan.",
|
| 13 |
+
"ColumnDownloadURL": "Deskargaren URLa",
|
| 14 |
+
"ColumnDownloadURLs": "Deskargaren URLak",
|
| 15 |
+
"ColumnEntryPageTitle": "Sarrera-orriaren izenburua",
|
| 16 |
+
"ColumnEntryPageURL": "Sarrera-orriaren URLa",
|
| 17 |
+
"ColumnEntryPageURLs": "Sarrera-orriaren URLak",
|
| 18 |
+
"ColumnExitPageTitle": "Irteera-orriaren izenburua",
|
| 19 |
+
"ColumnExitPageURL": "Irteera-orriaren URLa",
|
| 20 |
+
"ColumnExitPageURLs": "Irteera-orriaren URLak",
|
| 21 |
+
"ColumnIdPageview": "Orri-ikustaldi ID",
|
| 22 |
+
"ColumnInteractionPosition": "Interakzioaren kokapena",
|
| 23 |
+
"ColumnNoResultKeyword": "Bilaketa emaitzarik gabeko gako-hitza",
|
| 24 |
+
"ColumnPageName": "Orriaren izena",
|
| 25 |
+
"ColumnPageURL": "Orriaren URLa",
|
| 26 |
+
"ColumnPageViewPosition": "Orri-ikustaldiaren posizioa",
|
| 27 |
+
"ColumnPagesPerSearch": "Bilaketaren emaitzen orriak",
|
| 28 |
+
"ColumnPagesPerSearchDocumentation": "Bisitariek bilaketak egingo dituzte zure webgunean, eta batzuetan \"hurrengoa\" estekan klik egingo dute emaitza gehiago ikusteko. Hau da gako-hitz honetarako bilaketa-emaitzetan ikusitako orrien batez besteko kopurua.",
|
| 29 |
+
"ColumnSearchCategory": "Bilaketa kategoria",
|
| 30 |
+
"ColumnSearchExits": "%% Bilaketa irteerak",
|
| 31 |
+
"ColumnSearchExitsDocumentation": "Gako-hitz hau zure gunearen bilaketa-motorrean bilatu ondoren webgunea utzi duten bisitarien ehunekoa.",
|
| 32 |
+
"ColumnSearchResultsCount": "Bilaketaren emaitzen kopurua",
|
| 33 |
+
"ColumnSearches": "Bilaketak",
|
| 34 |
+
"ColumnSearchesDocumentation": "Zenbat bisitetan bilatu zen gako-hitz hau zure webguneko bilatzailean.",
|
| 35 |
+
"ColumnSiteSearchKeywords": "Gako-hitz desberdinak",
|
| 36 |
+
"ColumnUniqueClicks": "Klik desberdinak",
|
| 37 |
+
"ColumnUniqueClicksDocumentation": "Zenbat bisitak egin duten klik esteka honetan. Esteka batean behin baino gehiagotan egin bazen klik bisita batean, soilik behin kontatzen da.",
|
| 38 |
+
"ColumnUniqueDownloads": "Deskarga desberdinak",
|
| 39 |
+
"ColumnUniqueOutlinks": "Kanpo esteka desberdinak",
|
| 40 |
+
"DownloadsReportDocumentation": "Txosten honetan ikus dezakezu zein fitxategi deskargatu dituzten bisitariek. %s Matomok deskarga bezala kontatzen du deskargarako estekan klik egitea. Matomok ez daki deskarga osatu zen ala ez.",
|
| 41 |
+
"DownloadsSubcategoryHelp1": "Txosten honetan bisitariek deskargatutako fitxategiak ikus ditzakezu.",
|
| 42 |
+
"DownloadsSubcategoryHelp2": "Matomok deskarga bezala kontatzen ditu deskarga-esteketan egindako klikak. Matomok ez daki deskarga osatu den ala ez.",
|
| 43 |
+
"EntryPageTitles": "Sarrera-orrien izenburuak",
|
| 44 |
+
"EntryPageTitlesReportDocumentation": "Txosten honek zehaztutako epean erabilitako sarrera-orrien izenburuei buruzko informazioa dauka.",
|
| 45 |
+
"EntryPagesReportDocumentation": "Txosten honek zehaztutako epean erabilitako sarrera-orriei buruzko informazioa dauka. Sarrera-orri bat erabiltzaileak bisita batean ikusten duen lehen orria da. %s Sarrerako URLak karpeta egiturarekin bistaratzen dira.",
|
| 46 |
+
"EntryPagesSubcategoryHelp1": "Txosten honek zehaztutako epean erabilitako sarrera-orriei buruzko informazioa dauka. Sarrera-orri bat erabiltzaileak bisita batean ikusten duen lehen orria da.",
|
| 47 |
+
"EntryPagesSubcategoryHelp2": "Sarrerako URLak karpeta egituran bistaratzen dira.",
|
| 48 |
+
"ExitPageTitles": "Irteera-orrien izenburuak",
|
| 49 |
+
"ExitPageTitlesReportDocumentation": "Txosten honek zehaztutako epean erabilitako irteera-orrien izenburuei buruzko informazioa dauka.",
|
| 50 |
+
"ExitPagesReportDocumentation": "Txosten honek zehaztutako epean erabilitako irteera-orriei buruzko informazioa dauka. Irteera-orri bat erabiltzaile batek bisita batean ikusten duen azken orria da. %s Irteerako URLak karpeta egiturarekin bistaratzen dira.",
|
| 51 |
+
"ExitPagesSubcategoryHelp1": "Txosten honek zehaztutako epean erabilitako irteera-orriei buruzko informazioa dauka. Irteera-orri bat erabiltzaileak bisita batean ikusten duen azken orria da.",
|
| 52 |
+
"ExitPagesSubcategoryHelp2": "Irteerako URLak karpeta egituran bistaratzen dira.",
|
| 53 |
+
"MainMetricsReportDocumentation": "Txosten honek bisitariek zure webgunean gauzatzen dituzten ekintzen oinarrizko ikuspegi orokorra eskaintzen du.",
|
| 54 |
+
"OneSearch": "Bilaketa 1",
|
| 55 |
+
"OutlinkDocumentation": "Kanpo esteka bat bisitaria zure webgunetik kanpora eramaten duen esteka bat da (beste domeinu batera).",
|
| 56 |
+
"OutlinksReportDocumentation": "Bisitariek klik egindako kanpo esteken URLen zerrenda hierarkikoa erakusten du txosten honek.",
|
| 57 |
+
"OutlinksSubcategoryHelp1": "Bisitariek klik egindako kanpo esteken URLen zerrenda hierarkikoa erakusten du txosten honek. Bisitaria zure webgunetik kanpora (beste domeinu batera) eramaten duen esteka da kanpo esteka bat.",
|
| 58 |
+
"PageTitlesReportDocumentation": "Txosten honek bisitatutako orrien izenburuei buruzko informazioa dauka. %1$s Orriaren izenburua HTML %2$s etiketa da, nabigatzaile gehienek leihoaren izenburuan bistaratzen dutena.",
|
| 59 |
+
"PageTitlesSubcategoryHelp1": "Txosten honek informazioa dauka bisitatutako orrien izenburuei buruz.",
|
| 60 |
+
"PageTitlesSubcategoryHelp2": "Orriaren izenburua HTML &lt;title&gt; etiketa da, nabigatzaile gehienek leihoaren izenburuan bistaratzen dute.",
|
| 61 |
+
"PageUrls": "Orrien URLak",
|
| 62 |
+
"PageViewsByVisitor": "Orri hau zenbat aldiz ikusi duen bisitari honek, bere bisita guztiak kontuan hartuta",
|
| 63 |
+
"PagesReportDocumentation": "Txosten honek bisitatutako orrien URLei buruzko informazioa dauka. %s Taula hierarkikoki antolatuta dago, URLak karpeta egituran bistaratzen dira.",
|
| 64 |
+
"PagesSubcategoryHelp1": "Txosten honek informazioa ematen du bisitatutako orrien URLei buruz.",
|
| 65 |
+
"PagesSubcategoryHelp2": "Taula hau hierarkikoki antolatuta dago, URLak karpeta egitura moduan bistaratzen dira.",
|
| 66 |
+
"PagesSubcategoryHelp3": "Erabili ezkerreko plus eta minus ikonoak nabigatzeko.",
|
| 67 |
+
"PluginDescription": "Orri-ikustaldien eta orrien izenburuen berri ematen du. Zure webguneko barne-bilatzailearen erabilera neurtzeko aukera ematen dizu. Automatikoki erregistratzen ditu kanpo estekak eta fitxategien deskargak.",
|
| 68 |
+
"RevisitedPages": "Behin baino gehiagotan ikusitako orriak",
|
| 69 |
+
"SiteSearchCategories": "Kategoriak (gunearen bilaketa)",
|
| 70 |
+
"SiteSearchCategories1": "Bisitariek zure webgunean bilaketak bat egin dituztenean hautatutako kategorien zerrenda dago txosten honetan.",
|
| 71 |
+
"SiteSearchCategories2": "Adibidez, merkataritza elektronikoko webguneek \"Kategoria\" hautatzaile bat izan ohi dute, bisitariek bilaketak kategoria bateko produktuetara mugatzeko aukera izan dezaten.",
|
| 72 |
+
"SiteSearchCategory": "Kategoria (gunearen bilaketa)",
|
| 73 |
+
"SiteSearchFollowingPagesDoc": "Bisitariek zure webgunean bilaketak egiten dituztenean orri, eduki, produktu edo zerbitzu zehatz baten bila ari dira. Txosten honetan ikus ditzakezu barne-bilaketa baten ondoren gehienetan klik egindako orriak. Beste modu batera esanda, dagoeneko zure webgunean dauden bisitariek gehien bilatutako orrien zerrenda.",
|
| 74 |
+
"SiteSearchIntro": "Bisitariek zure webgunean egiten dituzten bilaketen jarraipena egitea oso modu eraginkorra da zure audientzia zeren bila dabilen ikasteko, eduki berria sortzeko ideiak eman ditzake, baita bezero potentzialek bilatzen dituzten merkataritza elektronikoko produktu berriak ezagutzeko aukera ere. Orokorrean, bisitariek zure webgunean duten esperientzia hobetzen lagundu dezake.",
|
| 75 |
+
"SiteSearchKeyword": "Gako-hitza (gunearen bilaketa)",
|
| 76 |
+
"SiteSearchKeywordCount": "Gako-hitz kopurua (gunearen bilaketa)",
|
| 77 |
+
"SiteSearchKeywordCounts": "Gako-hitz kopuruak (gunearen bilaketa)",
|
| 78 |
+
"SiteSearchKeywords": "Gako-hitzak (gunearen bilaketa)",
|
| 79 |
+
"SiteSearchKeywordsDocumentation": "Txosten honetan zerrendatzen dira bisitariek zure barne-bilatzailean bilatutako gako-hitzak.",
|
| 80 |
+
"SiteSearchKeywordsNoResultDocumentation": "Txosten honetan zerrendatzen dira emaitzarik itzuli ez duten bilaketako gako-hitzak: behar bada bilatzailearen algoritmoa hobetu daiteke, edo baliteke bisitariek zure webgunean (oraindik) ez dagoen edukia bilatu izana?",
|
| 81 |
+
"SiteSearchSubcategoryHelp1": "Guneko bilaketa atalak erakusten ditu bisitariek zure webgunean bilatu dituzten gako-hitzak. Bisitariek bilaketa egin ondoren ikusi dituzten orriak ere bistaratzen ditu, baita emaitzarik itzuli ez duten gako-hitzak ere.",
|
| 82 |
+
"SiteSearchSubcategoryHelp2": "Txosten hauetatik zure webgunean falta diren edukiei buruzko ideiak jaso ditzakezu, bisitariek bilatzen duten baina aurkitu ezin dutena ezagutu, eta gehiago.",
|
| 83 |
+
"SiteSearchSubcategoryHelp3": "Ikasi gehiago Guneko bilaketa gidan.",
|
| 84 |
+
"SubmenuPageTitles": "Orrien izenburuak",
|
| 85 |
+
"SubmenuPagesEntry": "Sarrera-orriak",
|
| 86 |
+
"SubmenuPagesExit": "Irteera-orriak",
|
| 87 |
+
"SubmenuSitesearch": "Gunearen bilaketa",
|
| 88 |
+
"TimeSpentInReferringAction": "Erreferentzia ekintzan igarotako denbora",
|
| 89 |
+
"WidgetEntryPageTitles": "Sarrera-orrien izenburuak",
|
| 90 |
+
"WidgetExitPageTitles": "Irteera-orrien izenburuak",
|
| 91 |
+
"WidgetPageTitles": "Orri-izenburuak",
|
| 92 |
+
"WidgetPageTitlesFollowingSearch": "Orri-izenburuak gunearen bilaketa baten ondoren",
|
| 93 |
+
"WidgetPageUrlsFollowingSearch": "Orriak gunearen bilaketa baten ondoren",
|
| 94 |
+
"WidgetPagesEntry": "Sarrera-orriak",
|
| 95 |
+
"WidgetPagesExit": "Irteera-orriak",
|
| 96 |
+
"WidgetSearchCategories": "Bilaketa kategoriak",
|
| 97 |
+
"WidgetSearchKeywords": "Gunearen bilaketaren gako-hitzak",
|
| 98 |
+
"WidgetSearchNoResultKeywords": "Emaitzarik gabeko bilaketen gako-hitzak"
|
| 99 |
+
}
|
| 100 |
+
}
|
plugins/Actions/lang/fa.json
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"Actions": {
|
| 3 |
+
"ActionType": "نوع فعالیت",
|
| 4 |
+
"ActionTypes": "نوع فعالیت",
|
| 5 |
+
"ActionsInVisit": "فعالیتهای زمان بازدید",
|
| 6 |
+
"AvgGenerationTimeTooltip": "میانگین بر اساس %1$s کلیک %2$s بین %3$s و %4$s",
|
| 7 |
+
"Behaviour": "رفتار",
|
| 8 |
+
"ColumnActionURL": "آدرس فعالیت",
|
| 9 |
+
"ColumnClicks": "کلیک ها",
|
| 10 |
+
"ColumnClicksDocumentation": "تعداد دفعاتی که بر روی این لینک کلیک شده است.",
|
| 11 |
+
"ColumnDownloadURL": "آدرس دانلود شده",
|
| 12 |
+
"ColumnDownloadURLs": "آدرسهای دانلود",
|
| 13 |
+
"ColumnEntryPageTitle": "عنوان صفحات ورودی",
|
| 14 |
+
"ColumnEntryPageURL": "آدرس صفحات ورودی",
|
| 15 |
+
"ColumnEntryPageURLs": "آدرسهای صفحه ورودی",
|
| 16 |
+
"ColumnExitPageTitle": "عنوان صفحات خروجی",
|
| 17 |
+
"ColumnExitPageURL": "آدرس صفحات خروجی",
|
| 18 |
+
"ColumnExitPageURLs": "آدرسهای صفحه خروجی",
|
| 19 |
+
"ColumnIdPageview": "آیدی نمایش صفحه",
|
| 20 |
+
"ColumnInteractionPosition": "موقعیت تعامل",
|
| 21 |
+
"ColumnNoResultKeyword": "کلیدواژه بدون نتیجه جستحو",
|
| 22 |
+
"ColumnPageName": "نام صفحات",
|
| 23 |
+
"ColumnPageURL": "آدرس صفحه",
|
| 24 |
+
"ColumnPagesPerSearch": "صفحات نتایج جستجو",
|
| 25 |
+
"ColumnPagesPerSearchDocumentation": "جستجوی نوشتارها",
|
| 26 |
+
"ColumnSearchCategory": "دسته بندی جستجو",
|
| 27 |
+
"ColumnSearchExits": "%% خروجها جستجو",
|
| 28 |
+
"ColumnSearchExitsDocumentation": "نوشتار خروجی",
|
| 29 |
+
"ColumnSearchResultsCount": "تعداد نتایج جستجو",
|
| 30 |
+
"ColumnSearches": "جستجوها",
|
| 31 |
+
"ColumnSearchesDocumentation": "جستجوی نوشتار ها",
|
| 32 |
+
"ColumnSiteSearchKeywords": "کلیدواژه های یکتا",
|
| 33 |
+
"ColumnUniqueClicks": "کلیک های منحصر به فرد",
|
| 34 |
+
"ColumnUniqueClicksDocumentation": "تعداد بار مشاهده شده است که شامل یک کلیک بر روی این لینک. اگر یک لینک چند بار در طول یک دیدار کلیک شد، آن است که تنها یک بار شمارش است.",
|
| 35 |
+
"ColumnUniqueDownloads": "دانلودهای منحصربفرد",
|
| 36 |
+
"ColumnUniqueOutlinks": "لینک های خروجی منحصر به فرد",
|
| 37 |
+
"DownloadsReportDocumentation": "در این جا شما میتوانید گزارش فایل هایی را که بازدید کنندگان شما دانلود کرده اند را ببینید . %s به چه تعداد روی لینک دانلود کلیک شده است. اینکه ایا دانلود کامل انجام شده یا نصفه به پایان رسیده.",
|
| 38 |
+
"EntryPageTitles": "ورود به عنوان های صفحه",
|
| 39 |
+
"EntryPageTitlesReportDocumentation": "این گزارش شامل اطلاعاتی درباره عنوان صفحه های ورودی می باشد که در مدت مشخصی استفاده شده اند.",
|
| 40 |
+
"EntryPagesReportDocumentation": "این گزارش شامل اطلاعاتی دربارهی صفحه ورودی که در بازه معین استفاده شده است، میباشد. صفحه ورودی اولین صفحهای است که کاربر در هنگام بازدید مشاهده میکند. %s آدرسهای ورودی به عنوان یک ساختار پوشهبندی نمایش داده میشوند.",
|
| 41 |
+
"ExitPageTitles": "خروج از عنوان های صفحه",
|
| 42 |
+
"ExitPageTitlesReportDocumentation": "این گزارش شامل اطلاعاتی درباره عنوان های صفحه های خروجی می باشد که در مدت مشخصی اتفاق افتاده است.",
|
| 43 |
+
"ExitPagesReportDocumentation": "این گزارش شامل اطلاعاتی دربارهی صفحات خروج که در بازه معین استفاده شده است، میباشد. صفحه خروجی آخرین صفحهای است که کاربر در هنگام بازدید مشاهده میکند. %s آدرسهای خروج به عنوان یک ساختار پوشهبندی نمایش داده میشوند.",
|
| 44 |
+
"OneSearch": "1 جستجو",
|
| 45 |
+
"OutlinkDocumentation": "لینک یک لینک که منجر بازدید کننده از وب سایت خود را به یکی دیگر از دامنه است.",
|
| 46 |
+
"OutlinksReportDocumentation": "این گزارش نشان می دهد یک لیست سلسله مراتبی آدرس از لینک که کلیک بازدید کنندگان شما شد.",
|
| 47 |
+
"PageTitlesReportDocumentation": "این گزارش شامل اطلاعاتی درباره عنوان صفحه هایی است که بازدید شده اند. %1$s عنوان صفحه تگ %2$s HTML است که اغلب مرورگرها در عنوان پنجره هایشان نمایش می دهند.",
|
| 48 |
+
"PageUrls": "آدرس صفحات",
|
| 49 |
+
"PageViewsByVisitor": "تعدادد دفعاتی که این صفحه توسط این بازدیدکننده در طول تمام بازدیدهایش مشاهده شده.",
|
| 50 |
+
"PagesReportDocumentation": "این گزارش شامل اطلاعاتی درباره URLهای صفحه هایی است که بازدید شده اند. %s جدول به صورت سلسله مراتبی سازماندهی شده است و URLها به عنوان پوشه نمایش داده شده اند.",
|
| 51 |
+
"PagesSubcategoryHelp3": "ازآیکون مثبت و منفی بر روی نوار سمت چپ برای حرکت استفاده کنید.",
|
| 52 |
+
"PluginDescription": "گزارشها درباره بازدید صفحات و عنوان صفحات. شما میتوانید با استفاده از این بخش موتور جستجوی داخلی وبسایت را ارزیابی کنید. به صورت خودکار کلیکهای لینکهای خارجی و دانلود فایل را رهگیری میکند.",
|
| 53 |
+
"RevisitedPages": "صفحات بیش از یک بار مشاهده شدهاند",
|
| 54 |
+
"SiteSearchCategories": "دستهبندیها (جستجوی سایت)",
|
| 55 |
+
"SiteSearchCategories1": "این گزارش مجموعه هایی را فهرست می کند که بازدیدکنندگان هنگام جستجو در سایت شما , آن را انتخاب نموده اند.",
|
| 56 |
+
"SiteSearchCategories2": "برای نمونه , وبسایت های تجاری معمولا \"مجموعه\"هایی برای انتخاب دارند که به بازدیدکنندگان اجازه می دهد جستجوهایشان را از تمام محصولات به مجموعه ای از محصولات محدود کنند.",
|
| 57 |
+
"SiteSearchCategory": "دستهبندی (جستجوی سایت)",
|
| 58 |
+
"SiteSearchFollowingPagesDoc": "هنگامی که بازدیدکنندگان در سایت شما جستجو می کنند , آنها به دنبال صفحه ,محتوی ,محصول و یا سرویس خاصی هستند. این گزارش صفحاتی را فهرست می کند که بیشترین کلیک را بعد از جستجوی داخلی داشته اند. به عبارت دیگر ,فهرست صفحه هایی که بیشترین جستجو را توسط بازدیدکنندگان سایت شما داشته اند.",
|
| 59 |
+
"SiteSearchIntro": "ردیابی جستجوهایی که بازدیدکنندگان روی سایت شما انجام داده اند , یک راه بسیار موثر برای آگاهی از چیزهایی است که مخاطبان شما به دنبال آن می گردند. این می تواند به شما کمک کند که ایده هایی برای محتوای جدید, محصولات تجاری تازه ای پیدا کنید که مشتریان ممکن است به دنبال آنها بوده اند و به طو کلی حضور بازدیدکنندگان در سایت شما را ارتقا می دهد.",
|
| 60 |
+
"SiteSearchKeyword": "(کلمه (جستجوی سایت",
|
| 61 |
+
"SiteSearchKeywords": "کلیدواژهها (جستجوی سایت)",
|
| 62 |
+
"SiteSearchKeywordsDocumentation": "این گزارش واژه های کلیدی را فهرست می کند که بازدیدکنندگان در جستجوی داخلی سایت شما استفاده کرده اند .",
|
| 63 |
+
"SiteSearchKeywordsNoResultDocumentation": "این گزارش واژه های کلیدی را فهرست می کند که هیچ پاسخی برای جستجو نداشته اند : ممکن است الگوریتم جستجوی سایت شما باید ارتقا پیدا کند و یا شاید بازدیدکنندگان به دنبال مطلبی بوده اند که در سایت شما (هنوز) وجود ندارد?",
|
| 64 |
+
"SubmenuPageTitles": "عناوین صفحه ها",
|
| 65 |
+
"SubmenuPagesEntry": "صفحه های ورودی",
|
| 66 |
+
"SubmenuPagesExit": "صفحه های خروجی",
|
| 67 |
+
"SubmenuSitesearch": "جستجوی سایت",
|
| 68 |
+
"WidgetEntryPageTitles": "عنوان صفحه ورودی",
|
| 69 |
+
"WidgetExitPageTitles": "عنوان صفحه خروجی",
|
| 70 |
+
"WidgetPageTitles": "عنوان های صفحه",
|
| 71 |
+
"WidgetPageTitlesFollowingSearch": "عنوان های صفحه پیرو جستجوی سایت",
|
| 72 |
+
"WidgetPageUrlsFollowingSearch": "عنوان های صفحه پیرو جستجوی سایت",
|
| 73 |
+
"WidgetPagesEntry": "صفحات ورودی",
|
| 74 |
+
"WidgetPagesExit": "صفحه های خروجی",
|
| 75 |
+
"WidgetSearchCategories": "جستجوی بخش ها",
|
| 76 |
+
"WidgetSearchKeywords": "کلیدواژه های جستجوی سایت",
|
| 77 |
+
"WidgetSearchNoResultKeywords": "جستجوی کلیدواژه ها بدون نتیجه بود"
|
| 78 |
+
}
|
| 79 |
+
}
|
plugins/Actions/lang/fi.json
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"Actions": {
|
| 3 |
+
"ActionType": "Toiminnon tyyppi",
|
| 4 |
+
"ActionTypes": "Toimintotyypit",
|
| 5 |
+
"ActionsInVisit": "Toimintoja käynnin aikana",
|
| 6 |
+
"AvgGenerationTimeTooltip": "Keskiarvo %1$s osumasta %2$s %3$s - %4$s",
|
| 7 |
+
"Behaviour": "Käyttäytyminen",
|
| 8 |
+
"ColumnActionURL": "Toiminnon osoite",
|
| 9 |
+
"ColumnClicks": "Klikkaukset",
|
| 10 |
+
"ColumnClicksDocumentation": "Tämän linkin klikkausten määrä.",
|
| 11 |
+
"ColumnDownloadURL": "Ladattu osoite",
|
| 12 |
+
"ColumnDownloadURLs": "Latausosoitteet",
|
| 13 |
+
"ColumnEntryPageTitle": "Saapumissivun otsikko",
|
| 14 |
+
"ColumnEntryPageURL": "Saapumissivun osoite",
|
| 15 |
+
"ColumnEntryPageURLs": "Saapumissivun osoitteet",
|
| 16 |
+
"ColumnExitPageTitle": "Poistumissivun otsikko",
|
| 17 |
+
"ColumnExitPageURL": "Poistumissivun osoite",
|
| 18 |
+
"ColumnExitPageURLs": "Poistumissivun osoitteet",
|
| 19 |
+
"ColumnIdPageview": "Sivukatselun ID",
|
| 20 |
+
"ColumnInteractionPosition": "Vuorovaikutuksen paikka",
|
| 21 |
+
"ColumnNoResultKeyword": "Ei hakutuloksia",
|
| 22 |
+
"ColumnPageName": "Sivun nimi",
|
| 23 |
+
"ColumnPageURL": "Sivun osoite",
|
| 24 |
+
"ColumnPagesPerSearch": "Haun tulossivut",
|
| 25 |
+
"ColumnPagesPerSearchDocumentation": "Kävijät tekevät sivustolla hakuja ja klikkaavat toisinaan linkkejä tuloksien seuraaville sivuille. Tämä on keskiarvo katsotuista hakutulossivuista.",
|
| 26 |
+
"ColumnSearchCategory": "Haun kategoria",
|
| 27 |
+
"ColumnSearchExits": "%% poistumista hausta",
|
| 28 |
+
"ColumnSearchExitsDocumentation": "Osuus käynneistä jotka päättyivät tämän hakusanan hakemiseen sivun hakukoneella.",
|
| 29 |
+
"ColumnSearchResultsCount": "Hakutulosten määrä",
|
| 30 |
+
"ColumnSearches": "Haut",
|
| 31 |
+
"ColumnSearchesDocumentation": "Käynnit, joilla haettiin tällä hakusanalla.",
|
| 32 |
+
"ColumnSiteSearchKeywords": "Uniikkeja hakusanoja",
|
| 33 |
+
"ColumnUniqueClicks": "Uniikit klikkaukset",
|
| 34 |
+
"ColumnUniqueClicksDocumentation": "Käynnit, jotka sisälsivät tämän linkin klikkaamisen. Vaikka sama kävijä seuraisi linkkiä useita kertoja, se lasketaan vain kerran.",
|
| 35 |
+
"ColumnUniqueDownloads": "Uniikit lataukset",
|
| 36 |
+
"ColumnUniqueOutlinks": "Yksilölliset lähtevät linkit",
|
| 37 |
+
"DownloadsReportDocumentation": "Tässä raportissa näet, mitä tiedostoja kävijät ovat ladanneet. %s Matomo laskee lataukseksi latauslinkin klikkaamisen. Matomo ei tiedä, valmistuiko lataus.",
|
| 38 |
+
"EntryPageTitles": "Saapumissivujen otsikot",
|
| 39 |
+
"EntryPageTitlesReportDocumentation": "Tämä raportti sisältää tietoa saapumissivujen otsikoista annetulla aikavälillä.",
|
| 40 |
+
"EntryPagesReportDocumentation": "Tämä raportti sisältää tietoa saapumissivuista, joita on käytetty annetulla aikavälillä. Saapumissivu on ensimmäinen sivu, jota käyttäjä on katsonut käyntinsä aikana. %s Saapumis-URL:t näytetään kansiorakenteena.",
|
| 41 |
+
"ExitPageTitles": "Poistumissivujen otsikot",
|
| 42 |
+
"ExitPageTitlesReportDocumentation": "Tämä raportti sisältää tietoa poistumissivujen otsikoista annetulla aikavälillä.",
|
| 43 |
+
"ExitPagesReportDocumentation": "Tämä raportti sisältää tietoa poistumissivuista annetulla aikavälillä. Poistumissivu on viimeinen sivu, jota käyttäjä on katsonut käyntinsä aikana. %s Poistumis-URL:t näytetään kansiorakenteena.",
|
| 44 |
+
"OneSearch": "1 haku",
|
| 45 |
+
"OutlinkDocumentation": "Lähtevä linkki on linkki, joka vie kävijän pois sinun sivultasi (eri verkkotunnukseen).",
|
| 46 |
+
"OutlinksReportDocumentation": "Tämä raportti näyttää hierarkisen listan lähtevistä osoitteista, joita kävijät ovat seuranneet.",
|
| 47 |
+
"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.",
|
| 48 |
+
"PageUrls": "Sivujen osoitteet",
|
| 49 |
+
"PageViewsByVisitor": "Kuinka monta kertaa tämä kävijä on katsonut sivua kaikkien käyntiensä aikana",
|
| 50 |
+
"PagesReportDocumentation": "Tämä raportti sisältää tietoa sivuista, joilla on käyty. %s Taulukko on organisoitu hierarkisesti, URL:t näytetään puurakenteena.",
|
| 51 |
+
"PagesSubcategoryHelp3": "Käytä plus- ja miinus-merkkejä vasemmalla.",
|
| 52 |
+
"PluginDescription": "Raportoi sivukatselut ja sivujen otsikot. Mahdollistaa sivun sisäisen hakukoneen mittaamisen. Seuraa automaattisesti ulospäin suuntautuvia linkkejä ja latauksia.",
|
| 53 |
+
"RevisitedPages": "Sivut, joita on katsottu useita kertoja",
|
| 54 |
+
"SiteSearchCategories": "Kategoriat (sivuhaku)",
|
| 55 |
+
"SiteSearchCategories1": "Tämä raportti listaa kategoriat jotka kävijät valitsivat.",
|
| 56 |
+
"SiteSearchCategories2": "Esimerkiksi e-kauppojen sivuilla on tyypillisesti \"Kategoria\"-valitsin, jolla käyttäjät voivat rajoittaa hakutuloksia.",
|
| 57 |
+
"SiteSearchCategory": "Kategoria (sivuhaku)",
|
| 58 |
+
"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 |
+
"SiteSearchIntro": "Kävijöiden hakujen seuraaminen on tehokas tapa kerätä tietoa siitä, mitä kävijäsi haluavat. Tämä voi auttaa uuden sisällön tai uusien tuotteiden ideoinnissa, joita potentiaaliset asiakkaat voivat etsiä. Voit myös yleisesti parantaa kävijöiden kokemusta verkkosivullasi.",
|
| 60 |
+
"SiteSearchKeyword": "Avainsana (sivuhaku)",
|
| 61 |
+
"SiteSearchKeywords": "Avainsanat (sivuhaku)",
|
| 62 |
+
"SiteSearchKeywordsDocumentation": "Tämä raportti sisältää hakusanat, joita kävijäsi käyttivät sisäisessä hakukoneessasi.",
|
| 63 |
+
"SiteSearchKeywordsNoResultDocumentation": "Tämä raportti sisältää hakusanat, jotka eivät antaneet mitään tulosta. Ehkä hakukonetta voidaan kehittää tai kenties kävijäsi etsivät sisältöä, jota ei (vielä) löydy verkkosivultasi?",
|
| 64 |
+
"SubmenuPageTitles": "Sivujen otsikot",
|
| 65 |
+
"SubmenuPagesEntry": "Saapumissivut",
|
| 66 |
+
"SubmenuPagesExit": "Poistumissivut",
|
| 67 |
+
"SubmenuSitesearch": "Sivun haku",
|
| 68 |
+
"WidgetEntryPageTitles": "Saapumissivujen otsikot",
|
| 69 |
+
"WidgetExitPageTitles": "Poistumissivujen otsikot",
|
| 70 |
+
"WidgetPageTitles": "Sivujen otsikot",
|
| 71 |
+
"WidgetPageTitlesFollowingSearch": "Verkkosivuhaun tuloksena löytyneet sivujen otsikot",
|
| 72 |
+
"WidgetPageUrlsFollowingSearch": "Verkkosivuhaun tuloksena löytyneet sivut",
|
| 73 |
+
"WidgetPagesEntry": "Saapumissivut",
|
| 74 |
+
"WidgetPagesExit": "Poistumissivut",
|
| 75 |
+
"WidgetSearchCategories": "Haun kategoriat",
|
| 76 |
+
"WidgetSearchKeywords": "Sivuhaun hakusanat",
|
| 77 |
+
"WidgetSearchNoResultKeywords": "Hakusanat ilman tuloksia"
|
| 78 |
+
}
|
| 79 |
+
}
|