update Piwik to version 2.16 (fixes #91)
This commit is contained in:
parent
296343bf3b
commit
d885a4baa9
5833 changed files with 418860 additions and 226988 deletions
74
www/analytics/plugins/Contents/API.php
Normal file
74
www/analytics/plugins/Contents/API.php
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
<?php
|
||||
/**
|
||||
* Piwik - free/libre analytics platform
|
||||
*
|
||||
* @link http://piwik.org
|
||||
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
||||
*
|
||||
*/
|
||||
namespace Piwik\Plugins\Contents;
|
||||
|
||||
use Piwik\Archive;
|
||||
use Piwik\DataTable;
|
||||
use Piwik\DataTable\Row;
|
||||
use Piwik\Metrics;
|
||||
use Piwik\Piwik;
|
||||
use Piwik\Plugins\Contents\Archiver;
|
||||
|
||||
/**
|
||||
* API for plugin Contents
|
||||
*
|
||||
* @method static \Piwik\Plugins\Contents\API getInstance()
|
||||
*/
|
||||
class API extends \Piwik\Plugin\API
|
||||
{
|
||||
public function getContentNames($idSite, $period, $date, $segment = false, $idSubtable = false)
|
||||
{
|
||||
return $this->getDataTable(__FUNCTION__, $idSite, $period, $date, $segment, false, $idSubtable);
|
||||
}
|
||||
|
||||
public function getContentPieces($idSite, $period, $date, $segment = false, $idSubtable = false)
|
||||
{
|
||||
return $this->getDataTable(__FUNCTION__, $idSite, $period, $date, $segment, false, $idSubtable);
|
||||
}
|
||||
|
||||
private function getDataTable($name, $idSite, $period, $date, $segment, $expanded, $idSubtable)
|
||||
{
|
||||
Piwik::checkUserHasViewAccess($idSite);
|
||||
$recordName = Dimensions::getRecordNameForAction($name);
|
||||
$dataTable = Archive::getDataTableFromArchive($recordName, $idSite, $period, $date, $segment, $expanded, $idSubtable);
|
||||
|
||||
if (empty($idSubtable)) {
|
||||
$dataTable->filter('AddSegmentValue', array(function ($label) {
|
||||
if ($label === Archiver::CONTENT_PIECE_NOT_SET) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return $label;
|
||||
}));
|
||||
}
|
||||
|
||||
$this->filterDataTable($dataTable);
|
||||
return $dataTable;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param DataTable $dataTable
|
||||
*/
|
||||
private function filterDataTable($dataTable)
|
||||
{
|
||||
$dataTable->queueFilter('ReplaceColumnNames');
|
||||
$dataTable->queueFilter('ReplaceSummaryRowLabel');
|
||||
$dataTable->filter(function (DataTable $table) {
|
||||
$row = $table->getRowFromLabel(Archiver::CONTENT_PIECE_NOT_SET);
|
||||
if ($row) {
|
||||
$row->setColumn('label', Piwik::translate('General_NotDefined', Piwik::translate('Contents_ContentPiece')));
|
||||
}
|
||||
foreach ($table->getRows() as $row) {
|
||||
if ($row->getMetadata('contentTarget') === Archiver::CONTENT_TARGET_NOT_SET) {
|
||||
$row->setMetadata('contentTarget', '');
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
54
www/analytics/plugins/Contents/Actions/ActionContent.php
Normal file
54
www/analytics/plugins/Contents/Actions/ActionContent.php
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
<?php
|
||||
/**
|
||||
* Piwik - free/libre analytics platform
|
||||
*
|
||||
* @link http://piwik.org
|
||||
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
||||
*
|
||||
*/
|
||||
|
||||
namespace Piwik\Plugins\Contents\Actions;
|
||||
|
||||
use Piwik\Tracker\Action;
|
||||
use Piwik\Tracker\Request;
|
||||
use Piwik\Tracker;
|
||||
|
||||
/**
|
||||
* A content is composed of a name, an actual piece of content, and optionally a target.
|
||||
*/
|
||||
class ActionContent extends Action
|
||||
{
|
||||
public function __construct(Request $request)
|
||||
{
|
||||
parent::__construct(Action::TYPE_CONTENT, $request);
|
||||
|
||||
$url = $request->getParam('url');
|
||||
$this->setActionUrl($url);
|
||||
}
|
||||
|
||||
public static function shouldHandle(Request $request)
|
||||
{
|
||||
$name = $request->getParam('c_n');
|
||||
|
||||
return !empty($name);
|
||||
}
|
||||
|
||||
protected function getActionsToLookup()
|
||||
{
|
||||
return array(
|
||||
'idaction_url' => array($this->getActionUrl(), $this->getActionType())
|
||||
);
|
||||
}
|
||||
|
||||
// Do not track this Event URL as Entry/Exit Page URL (leave the existing entry/exit)
|
||||
public function getIdActionUrlForEntryAndExitIds()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Do not track this Event Name as Entry/Exit Page Title (leave the existing entry/exit)
|
||||
public function getIdActionNameForEntryAndExitIds()
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
320
www/analytics/plugins/Contents/Archiver.php
Normal file
320
www/analytics/plugins/Contents/Archiver.php
Normal file
|
|
@ -0,0 +1,320 @@
|
|||
<?php
|
||||
/**
|
||||
* Piwik - free/libre analytics platform
|
||||
*
|
||||
* @link http://piwik.org
|
||||
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
||||
*
|
||||
*/
|
||||
namespace Piwik\Plugins\Contents;
|
||||
|
||||
use Piwik\DataTable;
|
||||
use Piwik\Metrics;
|
||||
use Piwik\Plugins\Actions\ArchivingHelper;
|
||||
use Piwik\RankingQuery;
|
||||
|
||||
/**
|
||||
* Processing reports for Contents
|
||||
*/
|
||||
class Archiver extends \Piwik\Plugin\Archiver
|
||||
{
|
||||
const CONTENTS_PIECE_NAME_RECORD_NAME = 'Contents_piece_name';
|
||||
const CONTENTS_NAME_PIECE_RECORD_NAME = 'Contents_name_piece';
|
||||
const CONTENT_TARGET_NOT_SET = 'Piwik_ContentTargetNotSet';
|
||||
const CONTENT_PIECE_NOT_SET = 'Piwik_ContentPieceNotSet';
|
||||
|
||||
/**
|
||||
* @var DataArray[]
|
||||
*/
|
||||
protected $arrays = array();
|
||||
protected $metadata = array();
|
||||
|
||||
public function __construct($processor)
|
||||
{
|
||||
parent::__construct($processor);
|
||||
$this->columnToSortByBeforeTruncation = Metrics::INDEX_NB_VISITS;
|
||||
$this->maximumRowsInDataTable = ArchivingHelper::$maximumRowsInDataTableLevelZero;
|
||||
$this->maximumRowsInSubDataTable = ArchivingHelper::$maximumRowsInSubDataTable;
|
||||
}
|
||||
|
||||
private function getRecordToDimensions()
|
||||
{
|
||||
return array(
|
||||
self::CONTENTS_PIECE_NAME_RECORD_NAME => array('contentPiece', 'contentName'),
|
||||
self::CONTENTS_NAME_PIECE_RECORD_NAME => array('contentName', 'contentPiece')
|
||||
);
|
||||
}
|
||||
|
||||
public function aggregateMultipleReports()
|
||||
{
|
||||
$dataTableToSum = $this->getRecordNames();
|
||||
$columnsAggregationOperation = null;
|
||||
$this->getProcessor()->aggregateDataTableRecords(
|
||||
$dataTableToSum,
|
||||
$this->maximumRowsInDataTable,
|
||||
$this->maximumRowsInSubDataTable,
|
||||
$this->columnToSortByBeforeTruncation,
|
||||
$columnsAggregationOperation,
|
||||
$columnsToRenameAfterAggregation = null,
|
||||
$countRowsRecursive = array());
|
||||
}
|
||||
|
||||
private function getRecordNames()
|
||||
{
|
||||
$mapping = $this->getRecordToDimensions();
|
||||
return array_keys($mapping);
|
||||
}
|
||||
|
||||
public function aggregateDayReport()
|
||||
{
|
||||
$this->aggregateDayImpressions();
|
||||
$this->aggregateDayInteractions();
|
||||
$this->insertDayReports();
|
||||
}
|
||||
|
||||
private function aggregateDayImpressions()
|
||||
{
|
||||
$select = "
|
||||
log_action_content_piece.name as contentPiece,
|
||||
log_action_content_target.name as contentTarget,
|
||||
log_action_content_name.name as contentName,
|
||||
|
||||
count(distinct log_link_visit_action.idvisit) as `" . Metrics::INDEX_NB_VISITS . "`,
|
||||
count(distinct log_link_visit_action.idvisitor) as `" . Metrics::INDEX_NB_UNIQ_VISITORS . "`,
|
||||
count(*) as `" . Metrics::INDEX_CONTENT_NB_IMPRESSIONS . "`
|
||||
";
|
||||
|
||||
$from = array(
|
||||
"log_link_visit_action",
|
||||
array(
|
||||
"table" => "log_action",
|
||||
"tableAlias" => "log_action_content_piece",
|
||||
"joinOn" => "log_link_visit_action.idaction_content_piece = log_action_content_piece.idaction"
|
||||
),
|
||||
array(
|
||||
"table" => "log_action",
|
||||
"tableAlias" => "log_action_content_target",
|
||||
"joinOn" => "log_link_visit_action.idaction_content_target = log_action_content_target.idaction"
|
||||
),
|
||||
array(
|
||||
"table" => "log_action",
|
||||
"tableAlias" => "log_action_content_name",
|
||||
"joinOn" => "log_link_visit_action.idaction_content_name = log_action_content_name.idaction"
|
||||
)
|
||||
);
|
||||
|
||||
$where = "log_link_visit_action.server_time >= ?
|
||||
AND log_link_visit_action.server_time <= ?
|
||||
AND log_link_visit_action.idsite = ?
|
||||
AND log_link_visit_action.idaction_content_name IS NOT NULL
|
||||
AND log_link_visit_action.idaction_content_interaction IS NULL";
|
||||
|
||||
$groupBy = "log_action_content_piece.idaction,
|
||||
log_action_content_target.idaction,
|
||||
log_action_content_name.idaction";
|
||||
|
||||
$orderBy = "`" . Metrics::INDEX_NB_VISITS . "` DESC";
|
||||
|
||||
$rankingQueryLimit = ArchivingHelper::getRankingQueryLimit();
|
||||
$rankingQuery = null;
|
||||
if ($rankingQueryLimit > 0) {
|
||||
$rankingQuery = new RankingQuery($rankingQueryLimit);
|
||||
$rankingQuery->setOthersLabel(DataTable::LABEL_SUMMARY_ROW);
|
||||
$rankingQuery->addLabelColumn(array('contentPiece', 'contentTarget', 'contentName'));
|
||||
$rankingQuery->addColumn(array(Metrics::INDEX_NB_UNIQ_VISITORS));
|
||||
$rankingQuery->addColumn(array(Metrics::INDEX_CONTENT_NB_IMPRESSIONS, Metrics::INDEX_NB_VISITS), 'sum');
|
||||
}
|
||||
|
||||
$resultSet = $this->archiveDayQueryProcess($select, $from, $where, $groupBy, $orderBy, $rankingQuery);
|
||||
|
||||
while ($row = $resultSet->fetch()) {
|
||||
$this->aggregateImpressionRow($row);
|
||||
}
|
||||
}
|
||||
|
||||
private function aggregateDayInteractions()
|
||||
{
|
||||
$select = "
|
||||
log_action_content_name.name as contentName,
|
||||
log_action_content_interaction.name as contentInteraction,
|
||||
log_action_content_piece.name as contentPiece,
|
||||
|
||||
count(*) as `" . Metrics::INDEX_CONTENT_NB_INTERACTIONS . "`
|
||||
";
|
||||
|
||||
$from = array(
|
||||
"log_link_visit_action",
|
||||
array(
|
||||
"table" => "log_action",
|
||||
"tableAlias" => "log_action_content_piece",
|
||||
"joinOn" => "log_link_visit_action.idaction_content_piece = log_action_content_piece.idaction"
|
||||
),
|
||||
array(
|
||||
"table" => "log_action",
|
||||
"tableAlias" => "log_action_content_interaction",
|
||||
"joinOn" => "log_link_visit_action.idaction_content_interaction = log_action_content_interaction.idaction"
|
||||
),
|
||||
array(
|
||||
"table" => "log_action",
|
||||
"tableAlias" => "log_action_content_name",
|
||||
"joinOn" => "log_link_visit_action.idaction_content_name = log_action_content_name.idaction"
|
||||
)
|
||||
);
|
||||
|
||||
$where = "log_link_visit_action.server_time >= ?
|
||||
AND log_link_visit_action.server_time <= ?
|
||||
AND log_link_visit_action.idsite = ?
|
||||
AND log_link_visit_action.idaction_content_name IS NOT NULL
|
||||
AND log_link_visit_action.idaction_content_interaction IS NOT NULL";
|
||||
|
||||
$groupBy = "log_action_content_piece.idaction,
|
||||
log_action_content_interaction.idaction,
|
||||
log_action_content_name.idaction";
|
||||
|
||||
$orderBy = "`" . Metrics::INDEX_CONTENT_NB_INTERACTIONS . "` DESC";
|
||||
|
||||
$rankingQueryLimit = ArchivingHelper::getRankingQueryLimit();
|
||||
$rankingQuery = null;
|
||||
if ($rankingQueryLimit > 0) {
|
||||
$rankingQuery = new RankingQuery($rankingQueryLimit);
|
||||
$rankingQuery->setOthersLabel(DataTable::LABEL_SUMMARY_ROW);
|
||||
$rankingQuery->addLabelColumn(array('contentPiece', 'contentInteraction', 'contentName'));
|
||||
$rankingQuery->addColumn(array(Metrics::INDEX_CONTENT_NB_INTERACTIONS), 'sum');
|
||||
}
|
||||
|
||||
$resultSet = $this->archiveDayQueryProcess($select, $from, $where, $groupBy, $orderBy, $rankingQuery);
|
||||
|
||||
while ($row = $resultSet->fetch()) {
|
||||
$this->aggregateInteractionRow($row);
|
||||
}
|
||||
}
|
||||
|
||||
private function archiveDayQueryProcess($select, $from, $where, $groupBy, $orderBy, RankingQuery $rankingQuery)
|
||||
{
|
||||
// get query with segmentation
|
||||
$query = $this->getLogAggregator()->generateQuery($select, $from, $where, $groupBy, $orderBy);
|
||||
|
||||
// apply ranking query
|
||||
if ($rankingQuery) {
|
||||
$query['sql'] = $rankingQuery->generateRankingQuery($query['sql']);
|
||||
}
|
||||
|
||||
// get result
|
||||
$resultSet = $this->getLogAggregator()->getDb()->query($query['sql'], $query['bind']);
|
||||
|
||||
if ($resultSet === false) {
|
||||
return;
|
||||
}
|
||||
|
||||
return $resultSet;
|
||||
}
|
||||
|
||||
/**
|
||||
* Records the daily datatables
|
||||
*/
|
||||
private function insertDayReports()
|
||||
{
|
||||
foreach ($this->arrays as $recordName => $dataArray) {
|
||||
|
||||
$dataTable = $dataArray->asDataTable();
|
||||
|
||||
foreach ($dataTable->getRows() as $row) {
|
||||
$label = $row->getColumn('label');
|
||||
|
||||
if (!empty($this->metadata[$label])) {
|
||||
foreach ($this->metadata[$label] as $name => $value) {
|
||||
$row->addMetadata($name, $value);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
$blob = $dataTable->getSerialized(
|
||||
$this->maximumRowsInDataTable,
|
||||
$this->maximumRowsInSubDataTable,
|
||||
$this->columnToSortByBeforeTruncation);
|
||||
$this->getProcessor()->insertBlobRecord($recordName, $blob);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $name
|
||||
* @return DataArray
|
||||
*/
|
||||
private function getDataArray($name)
|
||||
{
|
||||
if (empty($this->arrays[$name])) {
|
||||
$this->arrays[$name] = new DataArray();
|
||||
}
|
||||
|
||||
return $this->arrays[$name];
|
||||
}
|
||||
|
||||
private function aggregateImpressionRow($row)
|
||||
{
|
||||
foreach ($this->getRecordToDimensions() as $record => $dimensions) {
|
||||
$dataArray = $this->getDataArray($record);
|
||||
|
||||
$mainDimension = $dimensions[0];
|
||||
$mainLabel = $row[$mainDimension];
|
||||
|
||||
// content piece is optional
|
||||
if ($mainDimension == 'contentPiece'
|
||||
&& empty($mainLabel)) {
|
||||
$mainLabel = self::CONTENT_PIECE_NOT_SET;
|
||||
}
|
||||
|
||||
$dataArray->sumMetricsImpressions($mainLabel, $row);
|
||||
$this->rememberMetadataForRow($row, $mainLabel);
|
||||
|
||||
$subDimension = $dimensions[1];
|
||||
$subLabel = $row[$subDimension];
|
||||
|
||||
if (empty($subLabel)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// content piece is optional
|
||||
if ($subDimension == 'contentPiece'
|
||||
&& empty($subLabel)) {
|
||||
$subLabel = self::CONTENT_PIECE_NOT_SET;
|
||||
}
|
||||
|
||||
$dataArray->sumMetricsContentsImpressionPivot($mainLabel, $subLabel, $row);
|
||||
}
|
||||
}
|
||||
|
||||
private function aggregateInteractionRow($row)
|
||||
{
|
||||
foreach ($this->getRecordToDimensions() as $record => $dimensions) {
|
||||
$dataArray = $this->getDataArray($record);
|
||||
|
||||
$mainDimension = $dimensions[0];
|
||||
$mainLabel = $row[$mainDimension];
|
||||
|
||||
$dataArray->sumMetricsInteractions($mainLabel, $row);
|
||||
|
||||
$subDimension = $dimensions[1];
|
||||
$subLabel = $row[$subDimension];
|
||||
|
||||
if (empty($subLabel)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$dataArray->sumMetricsContentsInteractionPivot($mainLabel, $subLabel, $row);
|
||||
}
|
||||
}
|
||||
|
||||
private function rememberMetadataForRow($row, $mainLabel)
|
||||
{
|
||||
$this->metadata[$mainLabel] = array();
|
||||
|
||||
$target = $row['contentTarget'];
|
||||
if (empty($target)) {
|
||||
$target = Archiver::CONTENT_TARGET_NOT_SET;
|
||||
}
|
||||
|
||||
// there can be many different targets
|
||||
$this->metadata[$mainLabel]['contentTarget'] = $target;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
<?php
|
||||
/**
|
||||
* Piwik - free/libre analytics platform
|
||||
*
|
||||
* @link http://piwik.org
|
||||
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
||||
*
|
||||
*/
|
||||
namespace Piwik\Plugins\Contents\Columns;
|
||||
|
||||
use Piwik\Piwik;
|
||||
use Piwik\Plugin\Dimension\ActionDimension;
|
||||
use Piwik\Plugins\Actions\Segment;
|
||||
use Piwik\Tracker\Action;
|
||||
use Piwik\Tracker\Request;
|
||||
|
||||
class ContentInteraction extends ActionDimension
|
||||
{
|
||||
protected $columnName = 'idaction_content_interaction';
|
||||
protected $columnType = 'INTEGER(10) UNSIGNED DEFAULT NULL';
|
||||
|
||||
protected function configureSegments()
|
||||
{
|
||||
$segment = new Segment();
|
||||
$segment->setSegment('contentInteraction');
|
||||
$segment->setName('Contents_Interaction');
|
||||
$segment->setAcceptedValues('The type of interaction with the content. For instance "click" or "submit".');
|
||||
$this->addSegment($segment);
|
||||
}
|
||||
|
||||
public function getName()
|
||||
{
|
||||
return Piwik::translate('Contents_Interaction');
|
||||
}
|
||||
|
||||
public function getActionId()
|
||||
{
|
||||
return Action::TYPE_CONTENT_INTERACTION;
|
||||
}
|
||||
|
||||
public function onLookupAction(Request $request, Action $action)
|
||||
{
|
||||
$interaction = $request->getParam('c_i');
|
||||
|
||||
if (empty($interaction)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$interaction = trim($interaction);
|
||||
|
||||
if (strlen($interaction) > 0) {
|
||||
return $interaction;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
57
www/analytics/plugins/Contents/Columns/ContentName.php
Normal file
57
www/analytics/plugins/Contents/Columns/ContentName.php
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
<?php
|
||||
/**
|
||||
* Piwik - free/libre analytics platform
|
||||
*
|
||||
* @link http://piwik.org
|
||||
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
||||
*
|
||||
*/
|
||||
namespace Piwik\Plugins\Contents\Columns;
|
||||
|
||||
use Piwik\Piwik;
|
||||
use Piwik\Plugin\Dimension\ActionDimension;
|
||||
use Piwik\Plugins\Actions\Segment;
|
||||
use Piwik\Tracker\Action;
|
||||
use Piwik\Tracker\Request;
|
||||
|
||||
class ContentName extends ActionDimension
|
||||
{
|
||||
protected $columnName = 'idaction_content_name';
|
||||
protected $columnType = 'INTEGER(10) UNSIGNED DEFAULT NULL';
|
||||
|
||||
protected function configureSegments()
|
||||
{
|
||||
$segment = new Segment();
|
||||
$segment->setSegment('contentName');
|
||||
$segment->setName('Contents_ContentName');
|
||||
$segment->setAcceptedValues('The name of a content block, for instance "Ad Sale"');
|
||||
$this->addSegment($segment);
|
||||
}
|
||||
|
||||
public function getName()
|
||||
{
|
||||
return Piwik::translate('Contents_ContentName');
|
||||
}
|
||||
|
||||
public function getActionId()
|
||||
{
|
||||
return Action::TYPE_CONTENT_NAME;
|
||||
}
|
||||
|
||||
public function onLookupAction(Request $request, Action $action)
|
||||
{
|
||||
$contentName = $request->getParam('c_n');
|
||||
|
||||
if (empty($contentName)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$contentName = trim($contentName);
|
||||
|
||||
if (strlen($contentName) > 0) {
|
||||
return $contentName;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
57
www/analytics/plugins/Contents/Columns/ContentPiece.php
Normal file
57
www/analytics/plugins/Contents/Columns/ContentPiece.php
Normal file
|
|
@ -0,0 +1,57 @@
|
|||
<?php
|
||||
/**
|
||||
* Piwik - free/libre analytics platform
|
||||
*
|
||||
* @link http://piwik.org
|
||||
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
||||
*
|
||||
*/
|
||||
namespace Piwik\Plugins\Contents\Columns;
|
||||
|
||||
use Piwik\Piwik;
|
||||
use Piwik\Plugin\Dimension\ActionDimension;
|
||||
use Piwik\Plugins\Actions\Segment;
|
||||
use Piwik\Tracker\Action;
|
||||
use Piwik\Tracker\Request;
|
||||
|
||||
class ContentPiece extends ActionDimension
|
||||
{
|
||||
protected $columnName = 'idaction_content_piece';
|
||||
protected $columnType = 'INTEGER(10) UNSIGNED DEFAULT NULL';
|
||||
|
||||
protected function configureSegments()
|
||||
{
|
||||
$segment = new Segment();
|
||||
$segment->setSegment('contentPiece');
|
||||
$segment->setName('Contents_ContentPiece');
|
||||
$segment->setAcceptedValues('The actual content. For instance "ad.jpg" or "My text ad"');
|
||||
$this->addSegment($segment);
|
||||
}
|
||||
|
||||
public function getName()
|
||||
{
|
||||
return Piwik::translate('Contents_ContentPiece');
|
||||
}
|
||||
|
||||
public function getActionId()
|
||||
{
|
||||
return Action::TYPE_CONTENT_PIECE;
|
||||
}
|
||||
|
||||
public function onLookupAction(Request $request, Action $action)
|
||||
{
|
||||
$contentPiece = $request->getParam('c_p');
|
||||
|
||||
if (empty($contentPiece)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$contentPiece = trim($contentPiece);
|
||||
|
||||
if (strlen($contentPiece) > 0) {
|
||||
return $contentPiece;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
52
www/analytics/plugins/Contents/Columns/ContentTarget.php
Normal file
52
www/analytics/plugins/Contents/Columns/ContentTarget.php
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
<?php
|
||||
/**
|
||||
* Piwik - free/libre analytics platform
|
||||
*
|
||||
* @link http://piwik.org
|
||||
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
||||
*
|
||||
*/
|
||||
namespace Piwik\Plugins\Contents\Columns;
|
||||
|
||||
use Piwik\Piwik;
|
||||
use Piwik\Plugin\Dimension\ActionDimension;
|
||||
use Piwik\Plugins\Actions\Segment;
|
||||
use Piwik\Tracker\Action;
|
||||
use Piwik\Tracker\Request;
|
||||
|
||||
class ContentTarget extends ActionDimension
|
||||
{
|
||||
protected $columnName = 'idaction_content_target';
|
||||
protected $columnType = 'INTEGER(10) UNSIGNED DEFAULT NULL';
|
||||
|
||||
protected function configureSegments()
|
||||
{
|
||||
$segment = new Segment();
|
||||
$segment->setSegment('contentTarget');
|
||||
$segment->setName('Contents_ContentTarget');
|
||||
$segment->setAcceptedValues('For instance the URL of a landing page: "http://landingpage.example.com"');
|
||||
$this->addSegment($segment);
|
||||
}
|
||||
|
||||
public function getName()
|
||||
{
|
||||
return Piwik::translate('Contents_ContentTarget');
|
||||
}
|
||||
|
||||
public function getActionId()
|
||||
{
|
||||
return Action::TYPE_CONTENT_TARGET;
|
||||
}
|
||||
|
||||
public function onLookupAction(Request $request, Action $action)
|
||||
{
|
||||
$contentTarget = $request->getParam('c_t');
|
||||
$contentTarget = trim($contentTarget);
|
||||
|
||||
if (strlen($contentTarget) > 0) {
|
||||
return $contentTarget;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
<?php
|
||||
/**
|
||||
* Piwik - free/libre analytics platform
|
||||
*
|
||||
* @link http://piwik.org
|
||||
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
||||
*/
|
||||
|
||||
namespace Piwik\Plugins\Contents\Columns\Metrics;
|
||||
|
||||
use Piwik\DataTable\Row;
|
||||
use Piwik\Metrics\Formatter;
|
||||
use Piwik\Piwik;
|
||||
use Piwik\Plugin\ProcessedMetric;
|
||||
|
||||
/**
|
||||
* The content interaction rate. Calculated as:
|
||||
*
|
||||
* nb_interactions / nb_impressions
|
||||
*
|
||||
* nb_interactions & nb_impressions are calculated by the Contents archiver.
|
||||
*/
|
||||
class InteractionRate extends ProcessedMetric
|
||||
{
|
||||
public function getName()
|
||||
{
|
||||
return 'interaction_rate';
|
||||
}
|
||||
|
||||
public function getTranslatedName()
|
||||
{
|
||||
return Piwik::translate('Contents_InteractionRate');
|
||||
}
|
||||
|
||||
public function getDocumentation()
|
||||
{
|
||||
return Piwik::translate('Contents_InteractionRateMetricDocumentation');
|
||||
}
|
||||
|
||||
public function compute(Row $row)
|
||||
{
|
||||
$interactions = $this->getMetric($row, 'nb_interactions');
|
||||
$impressions = $this->getMetric($row, 'nb_impressions');
|
||||
|
||||
return Piwik::getQuotientSafe($interactions, $impressions, $precision = 4);
|
||||
}
|
||||
|
||||
public function format($value, Formatter $formatter)
|
||||
{
|
||||
return $formatter->getPrettyPercentFromQuotient($value);
|
||||
}
|
||||
|
||||
public function getDependentMetrics()
|
||||
{
|
||||
return array('nb_interactions', 'nb_impressions');
|
||||
}
|
||||
}
|
||||
50
www/analytics/plugins/Contents/Contents.php
Normal file
50
www/analytics/plugins/Contents/Contents.php
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
<?php
|
||||
/**
|
||||
* Piwik - free/libre analytics platform
|
||||
*
|
||||
* @link http://piwik.org
|
||||
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
||||
*
|
||||
*/
|
||||
namespace Piwik\Plugins\Contents;
|
||||
|
||||
use Piwik\Piwik;
|
||||
|
||||
class Contents extends \Piwik\Plugin
|
||||
{
|
||||
/**
|
||||
* @see Piwik\Plugin::registerEvents
|
||||
*/
|
||||
public function registerEvents()
|
||||
{
|
||||
return array(
|
||||
'Metrics.getDefaultMetricTranslations' => 'addMetricTranslations',
|
||||
'Metrics.getDefaultMetricDocumentationTranslations' => 'addMetricDocumentationTranslations',
|
||||
'AssetManager.getJavaScriptFiles' => 'getJsFiles',
|
||||
'AssetManager.getStylesheetFiles' => 'getStylesheetFiles',
|
||||
);
|
||||
}
|
||||
|
||||
public function addMetricTranslations(&$translations)
|
||||
{
|
||||
$translations['nb_impressions'] = 'Contents_Impressions';
|
||||
$translations['nb_interactions'] = 'Contents_Interactions';
|
||||
$translations['interaction_rate'] = 'Contents_InteractionRate';
|
||||
}
|
||||
|
||||
public function getJsFiles(&$jsFiles)
|
||||
{
|
||||
$jsFiles[] = "plugins/Contents/javascripts/contentsDataTable.js";
|
||||
}
|
||||
|
||||
public function getStylesheetFiles(&$stylesheets)
|
||||
{
|
||||
$stylesheets[] = "plugins/Contents/stylesheets/datatable.less";
|
||||
}
|
||||
|
||||
public function addMetricDocumentationTranslations(&$translations)
|
||||
{
|
||||
$translations['nb_impressions'] = Piwik::translate('Contents_ImpressionsMetricDocumentation');
|
||||
$translations['nb_interactions'] = Piwik::translate('Contents_InteractionsMetricDocumentation');
|
||||
}
|
||||
}
|
||||
51
www/analytics/plugins/Contents/Controller.php
Normal file
51
www/analytics/plugins/Contents/Controller.php
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
<?php
|
||||
/**
|
||||
* Piwik - free/libre analytics platform
|
||||
*
|
||||
* @link http://piwik.org
|
||||
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
||||
*
|
||||
*/
|
||||
namespace Piwik\Plugins\Contents;
|
||||
|
||||
use Piwik\Plugin\Report;
|
||||
use Piwik\View;
|
||||
|
||||
class Controller extends \Piwik\Plugin\Controller
|
||||
{
|
||||
|
||||
public function index()
|
||||
{
|
||||
$reportsView = new View\ReportsByDimension('Contents');
|
||||
|
||||
/** @var \Piwik\Plugin\Report[] $reports */
|
||||
$contentNames = Report::factory($this->pluginName, 'getContentNames');
|
||||
$contentPieces = Report::factory($this->pluginName, 'getContentPieces');
|
||||
$reports = array($contentNames, $contentPieces);
|
||||
|
||||
foreach($reports as $report) {
|
||||
$reportsView->addReport(
|
||||
$report->getCategory(),
|
||||
$report->getName(),
|
||||
'Contents.' . Report::PREFIX_ACTION_IN_MENU . ucfirst($report->getAction())
|
||||
);
|
||||
}
|
||||
|
||||
return $reportsView->render();
|
||||
}
|
||||
|
||||
public function menuGetContentNames()
|
||||
{
|
||||
$report = Report::factory($this->pluginName, 'getContentNames');
|
||||
|
||||
return View::singleReport($report->getName(), $report->render());
|
||||
}
|
||||
|
||||
public function menuGetContentPieces()
|
||||
{
|
||||
$report = Report::factory($this->pluginName, 'getContentPieces');
|
||||
|
||||
return View::singleReport($report->getName(), $report->render());
|
||||
}
|
||||
|
||||
}
|
||||
76
www/analytics/plugins/Contents/DataArray.php
Normal file
76
www/analytics/plugins/Contents/DataArray.php
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
<?php
|
||||
/**
|
||||
* Piwik - free/libre analytics platform
|
||||
*
|
||||
* @link http://piwik.org
|
||||
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
||||
*
|
||||
*/
|
||||
namespace Piwik\Plugins\Contents;
|
||||
|
||||
use Piwik\Metrics;
|
||||
|
||||
/**
|
||||
* The DataArray is a data structure used to aggregate datasets,
|
||||
* ie. sum arrays made of rows made of columns,
|
||||
* data from the logs is stored in a DataArray before being converted in a DataTable
|
||||
*
|
||||
*/
|
||||
|
||||
class DataArray extends \Piwik\DataArray
|
||||
{
|
||||
public function sumMetricsImpressions($label, $row)
|
||||
{
|
||||
if (!isset($this->data[$label])) {
|
||||
$this->data[$label] = self::makeEmptyContentsRow();
|
||||
}
|
||||
$this->doSumContentsImpressionMetrics($row, $this->data[$label]);
|
||||
}
|
||||
|
||||
public function sumMetricsInteractions($label, $row)
|
||||
{
|
||||
if (!isset($this->data[$label])) {
|
||||
return; // do igonre interactions that do not have an impression
|
||||
}
|
||||
$this->doSumContentsInteractionMetrics($row, $this->data[$label]);
|
||||
}
|
||||
|
||||
protected static function makeEmptyContentsRow()
|
||||
{
|
||||
return array(
|
||||
Metrics::INDEX_NB_UNIQ_VISITORS => 0,
|
||||
Metrics::INDEX_NB_VISITS => 0,
|
||||
Metrics::INDEX_CONTENT_NB_IMPRESSIONS => 0,
|
||||
Metrics::INDEX_CONTENT_NB_INTERACTIONS => 0
|
||||
);
|
||||
}
|
||||
|
||||
protected function doSumContentsImpressionMetrics($newRowToAdd, &$oldRowToUpdate)
|
||||
{
|
||||
$oldRowToUpdate[Metrics::INDEX_NB_VISITS] += $newRowToAdd[Metrics::INDEX_NB_VISITS];
|
||||
$oldRowToUpdate[Metrics::INDEX_NB_UNIQ_VISITORS] += $newRowToAdd[Metrics::INDEX_NB_UNIQ_VISITORS];
|
||||
$oldRowToUpdate[Metrics::INDEX_CONTENT_NB_IMPRESSIONS] += $newRowToAdd[Metrics::INDEX_CONTENT_NB_IMPRESSIONS];
|
||||
}
|
||||
|
||||
protected function doSumContentsInteractionMetrics($newRowToAdd, &$oldRowToUpdate)
|
||||
{
|
||||
$oldRowToUpdate[Metrics::INDEX_CONTENT_NB_INTERACTIONS] += $newRowToAdd[Metrics::INDEX_CONTENT_NB_INTERACTIONS];
|
||||
}
|
||||
|
||||
public function sumMetricsContentsImpressionPivot($parentLabel, $label, $row)
|
||||
{
|
||||
if (!isset($this->dataTwoLevels[$parentLabel][$label])) {
|
||||
$this->dataTwoLevels[$parentLabel][$label] = $this->makeEmptyContentsRow();
|
||||
}
|
||||
$this->doSumContentsImpressionMetrics($row, $this->dataTwoLevels[$parentLabel][$label]);
|
||||
}
|
||||
|
||||
public function sumMetricsContentsInteractionPivot($parentLabel, $label, $row)
|
||||
{
|
||||
if (!isset($this->dataTwoLevels[$parentLabel][$label])) {
|
||||
return; // do igonre interactions that do not have an impression
|
||||
}
|
||||
$this->doSumContentsInteractionMetrics($row, $this->dataTwoLevels[$parentLabel][$label]);
|
||||
}
|
||||
|
||||
}
|
||||
33
www/analytics/plugins/Contents/Dimensions.php
Normal file
33
www/analytics/plugins/Contents/Dimensions.php
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
<?php
|
||||
/**
|
||||
* Piwik - free/libre analytics platform
|
||||
*
|
||||
* @link http://piwik.org
|
||||
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
||||
*
|
||||
*/
|
||||
namespace Piwik\Plugins\Contents;
|
||||
|
||||
class Dimensions
|
||||
{
|
||||
public static function getRecordNameForAction($apiMethod)
|
||||
{
|
||||
$apiToRecord = array(
|
||||
'getContentNames' => Archiver::CONTENTS_NAME_PIECE_RECORD_NAME,
|
||||
'getContentPieces' => Archiver::CONTENTS_PIECE_NAME_RECORD_NAME
|
||||
);
|
||||
|
||||
return $apiToRecord[$apiMethod];
|
||||
}
|
||||
|
||||
public static function getSubtableLabelForApiMethod($apiMethod)
|
||||
{
|
||||
$labelToMethod = array(
|
||||
'getContentNames' => 'Contents_ContentPiece',
|
||||
'getContentPieces' => 'Contents_ContentName'
|
||||
);
|
||||
|
||||
return $labelToMethod[$apiMethod];
|
||||
}
|
||||
|
||||
}
|
||||
24
www/analytics/plugins/Contents/Menu.php
Normal file
24
www/analytics/plugins/Contents/Menu.php
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
<?php
|
||||
/**
|
||||
* Piwik - free/libre analytics platform
|
||||
*
|
||||
* @link http://piwik.org
|
||||
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
||||
*
|
||||
*/
|
||||
namespace Piwik\Plugins\Contents;
|
||||
|
||||
use Piwik\Menu\MenuReporting;
|
||||
|
||||
/**
|
||||
* This class allows you to add, remove or rename menu items.
|
||||
* To configure a menu (such as Admin Menu, Reporting Menu, User Menu...) simply call the corresponding methods as
|
||||
* described in the API-Reference http://developer.piwik.org/api-reference/Piwik/Menu/MenuAbstract
|
||||
*/
|
||||
class Menu extends \Piwik\Plugin\Menu
|
||||
{
|
||||
public function configureReportingMenu(MenuReporting $menu)
|
||||
{
|
||||
$menu->addActionsItem('Contents_Contents', array('module' => 'Contents', 'action' => 'index'), $orderId = 40);
|
||||
}
|
||||
}
|
||||
18
www/analytics/plugins/Contents/README.md
Normal file
18
www/analytics/plugins/Contents/README.md
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
# Piwik Contents Plugin
|
||||
|
||||
## Description
|
||||
|
||||
Add your plugin description here.
|
||||
|
||||
## FAQ
|
||||
|
||||
__My question?__
|
||||
My answer
|
||||
|
||||
## Changelog
|
||||
|
||||
Here goes the changelog text.
|
||||
|
||||
## Support
|
||||
|
||||
Please direct any feedback to ...
|
||||
60
www/analytics/plugins/Contents/Reports/Base.php
Normal file
60
www/analytics/plugins/Contents/Reports/Base.php
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
<?php
|
||||
/**
|
||||
* Piwik - free/libre analytics platform
|
||||
*
|
||||
* @link http://piwik.org
|
||||
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
||||
*
|
||||
*/
|
||||
namespace Piwik\Plugins\Contents\Reports;
|
||||
|
||||
use Piwik\Common;
|
||||
use Piwik\Piwik;
|
||||
use Piwik\Plugin\Report;
|
||||
use Piwik\Plugin\ViewDataTable;
|
||||
use Piwik\Plugins\Contents\Dimensions;
|
||||
|
||||
abstract class Base extends Report
|
||||
{
|
||||
protected function init()
|
||||
{
|
||||
$this->category = 'General_Actions';
|
||||
}
|
||||
|
||||
/**
|
||||
* Here you can configure how your report should be displayed. For instance whether your report supports a search
|
||||
* etc. You can also change the default request config. For instance change how many rows are displayed by default.
|
||||
*
|
||||
* @param ViewDataTable $view
|
||||
*/
|
||||
public function configureView(ViewDataTable $view)
|
||||
{
|
||||
$view->config->datatable_js_type = 'ContentsDataTable';
|
||||
$view->config->datatable_css_class = 'ContentsDataTable';
|
||||
|
||||
if (!empty($this->dimension)) {
|
||||
$view->config->addTranslations(array('label' => $this->dimension->getName()));
|
||||
}
|
||||
|
||||
$view->config->columns_to_display = array_merge(
|
||||
array('label'),
|
||||
array_keys($this->getMetrics()),
|
||||
array_keys($this->getProcessedMetrics())
|
||||
);
|
||||
|
||||
$view->requestConfig->filter_sort_column = 'nb_impressions';
|
||||
|
||||
if ($this->hasSubtableId()) {
|
||||
$apiMethod = $view->requestConfig->getApiMethodToRequest();
|
||||
$label = Dimensions::getSubtableLabelForApiMethod($apiMethod);
|
||||
$view->config->addTranslation('label', Piwik::translate($label));
|
||||
}
|
||||
}
|
||||
|
||||
private function hasSubtableId()
|
||||
{
|
||||
$subtable = Common::getRequestVar('idSubtable', false, 'integer');
|
||||
|
||||
return !empty($subtable);
|
||||
}
|
||||
}
|
||||
39
www/analytics/plugins/Contents/Reports/GetContentNames.php
Normal file
39
www/analytics/plugins/Contents/Reports/GetContentNames.php
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
<?php
|
||||
/**
|
||||
* Piwik - free/libre analytics platform
|
||||
*
|
||||
* @link http://piwik.org
|
||||
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
||||
*
|
||||
*/
|
||||
namespace Piwik\Plugins\Contents\Reports;
|
||||
|
||||
use Piwik\Piwik;
|
||||
use Piwik\Plugin\Report;
|
||||
use Piwik\Plugins\Contents\Columns\ContentName;
|
||||
use Piwik\Plugins\Contents\Columns\Metrics\InteractionRate;
|
||||
use Piwik\View;
|
||||
|
||||
/**
|
||||
* This class defines a new report.
|
||||
*
|
||||
* See {@link http://developer.piwik.org/api-reference/Piwik/Plugin/Report} for more information.
|
||||
*/
|
||||
class GetContentNames extends Base
|
||||
{
|
||||
protected function init()
|
||||
{
|
||||
parent::init();
|
||||
|
||||
$this->name = Piwik::translate('Contents_ContentName');
|
||||
$this->dimension = null;
|
||||
// TODO $this->documentation = Piwik::translate('ContentsDocumentation');
|
||||
$this->dimension = new ContentName();
|
||||
$this->order = 35;
|
||||
$this->actionToLoadSubTables = 'getContentNames';
|
||||
|
||||
$this->widgetTitle = 'Contents_ContentName';
|
||||
$this->metrics = array('nb_impressions', 'nb_interactions');
|
||||
$this->processedMetrics = array(new InteractionRate());
|
||||
}
|
||||
}
|
||||
40
www/analytics/plugins/Contents/Reports/GetContentPieces.php
Normal file
40
www/analytics/plugins/Contents/Reports/GetContentPieces.php
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
<?php
|
||||
/**
|
||||
* Piwik - free/libre analytics platform
|
||||
*
|
||||
* @link http://piwik.org
|
||||
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
||||
*
|
||||
*/
|
||||
namespace Piwik\Plugins\Contents\Reports;
|
||||
|
||||
use Piwik\Piwik;
|
||||
use Piwik\Plugin\Report;
|
||||
use Piwik\Plugins\Contents\Columns\ContentPiece;
|
||||
use Piwik\Plugins\Contents\Columns\Metrics\InteractionRate;
|
||||
use Piwik\View;
|
||||
|
||||
/**
|
||||
* This class defines a new report.
|
||||
*
|
||||
* See {@link http://developer.piwik.org/api-reference/Piwik/Plugin/Report} for more information.
|
||||
*/
|
||||
class GetContentPieces extends Base
|
||||
{
|
||||
protected function init()
|
||||
{
|
||||
parent::init();
|
||||
|
||||
$this->name = Piwik::translate('Contents_ContentPiece');
|
||||
$this->dimension = null;
|
||||
// TODO $this->documentation = Piwik::translate('ContentsDocumentation');
|
||||
$this->dimension = new ContentPiece();
|
||||
$this->order = 36;
|
||||
$this->actionToLoadSubTables = 'getContentPieces';
|
||||
|
||||
$this->widgetTitle = 'Contents_ContentPiece';
|
||||
|
||||
$this->metrics = array('nb_impressions', 'nb_interactions');
|
||||
$this->processedMetrics = array(new InteractionRate());
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
/*!
|
||||
* Piwik - free/libre analytics platform
|
||||
*
|
||||
* @link http://piwik.org
|
||||
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
|
||||
*/
|
||||
|
||||
(function ($, require) {
|
||||
|
||||
var exports = require('piwik/UI'),
|
||||
DataTable = exports.DataTable,
|
||||
dataTablePrototype = DataTable.prototype;
|
||||
|
||||
/**
|
||||
* UI control that handles extra functionality for Actions datatables.
|
||||
*
|
||||
* @constructor
|
||||
*/
|
||||
exports.ContentsDataTable = function (element) {
|
||||
DataTable.call(this, element);
|
||||
};
|
||||
|
||||
$.extend(exports.ContentsDataTable.prototype, dataTablePrototype, {
|
||||
|
||||
//see dataTable::bindEventsAndApplyStyle
|
||||
_init: function (domElem) {
|
||||
domElem.find('table > tbody > tr').each(function (index, tr) {
|
||||
var $tr = $(tr);
|
||||
var $td = $tr.find('.label .value');
|
||||
var text = $td.text().trim();
|
||||
|
||||
if (text.search('^https?:\/\/[^\/]+') !== -1) {
|
||||
if (text.match(/(.jpg|.gif|.png|.svg)$/)) {
|
||||
if (window.encodeURI) {
|
||||
text = window.encodeURI(text);
|
||||
}
|
||||
$td.tooltip({
|
||||
track: true,
|
||||
items: 'span',
|
||||
content: '<p><img style="max-width: 150px;max-height:150px;" src="' + text + '"/><br />' + text + '</p>',
|
||||
tooltipClass: 'rowActionTooltip',
|
||||
show: false,
|
||||
hide: false
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
})(jQuery, require);
|
||||
9
www/analytics/plugins/Contents/lang/ar.json
Normal file
9
www/analytics/plugins/Contents/lang/ar.json
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
"Contents": {
|
||||
"Impressions": "طباعة",
|
||||
"Interaction": "المعاملة",
|
||||
"InteractionRate": "نسبة المشاركة",
|
||||
"ContentPiece": "جزء من المحتوى",
|
||||
"Contents": "عنوان المحتوى"
|
||||
}
|
||||
}
|
||||
11
www/analytics/plugins/Contents/lang/bg.json
Normal file
11
www/analytics/plugins/Contents/lang/bg.json
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
"Contents": {
|
||||
"Impressions": "Импресии",
|
||||
"Interactions": "Взаимодействия",
|
||||
"Interaction": "Взаимодействие",
|
||||
"InteractionRate": "Честота на взаимодействие",
|
||||
"ContentName": "Име на съдържанието",
|
||||
"ContentTarget": "Целево съдържание",
|
||||
"Contents": "Съдържание"
|
||||
}
|
||||
}
|
||||
6
www/analytics/plugins/Contents/lang/ca.json
Normal file
6
www/analytics/plugins/Contents/lang/ca.json
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"Contents": {
|
||||
"ContentName": "Nom del contingut",
|
||||
"Contents": "Continguts"
|
||||
}
|
||||
}
|
||||
16
www/analytics/plugins/Contents/lang/cs.json
Normal file
16
www/analytics/plugins/Contents/lang/cs.json
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"Contents": {
|
||||
"PluginDescription": "Sledování obsahu a bannerů vám umožňuje sledovat efektivitu (zobrazení, kliky...) libovolného obsahu (bannerová reklama, obrázek, vlastně cokoliv) na vašich stránkách.",
|
||||
"Impressions": "Dojmy",
|
||||
"Interactions": "Interakce",
|
||||
"Interaction": "Interakce",
|
||||
"InteractionRate": "Rychlost interakcí",
|
||||
"ContentName": "Jméno obsahu",
|
||||
"ContentPiece": "Část obsahu",
|
||||
"ContentTarget": "Cíl obsahu",
|
||||
"Contents": "Obsah",
|
||||
"InteractionsMetricDocumentation": "Kolikrát bylo s blokem obsahu interagováno (t. j. kliknuto na banner nebo reklamu).",
|
||||
"ImpressionsMetricDocumentation": "Počet zobrazení banneru nebo reklamy na stránkách.",
|
||||
"InteractionRateMetricDocumentation": "Poměr impresí obsahu k interakcím."
|
||||
}
|
||||
}
|
||||
12
www/analytics/plugins/Contents/lang/da.json
Normal file
12
www/analytics/plugins/Contents/lang/da.json
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"Contents": {
|
||||
"Impressions": "Indtryk",
|
||||
"Interactions": "Interaktioner",
|
||||
"Interaction": "Interaktion",
|
||||
"InteractionRate": "Interaktionsfrekvens",
|
||||
"ContentName": "Indholdsnavn",
|
||||
"ContentPiece": "Indholdsstykke",
|
||||
"ContentTarget": "Indholdsmål",
|
||||
"Contents": "Indhold"
|
||||
}
|
||||
}
|
||||
16
www/analytics/plugins/Contents/lang/de.json
Normal file
16
www/analytics/plugins/Contents/lang/de.json
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"Contents": {
|
||||
"PluginDescription": "Content und Banner Tracking gibt Ihnen die Möglichkeit die Performance (Ansichten, Klicks, CTR) von einem beliebigen Stück Content (Banner-Werbung, Bild, beliebiges Element) auf Ihrer Seite zu messen.",
|
||||
"Impressions": "Impressionen",
|
||||
"Interactions": "Interaktionen",
|
||||
"Interaction": "Interaktion",
|
||||
"InteractionRate": "Interaktionsrate",
|
||||
"ContentName": "Inhaltsname",
|
||||
"ContentPiece": "Inhaltsteil",
|
||||
"ContentTarget": "Inhaltsziel",
|
||||
"Contents": "Inhalte",
|
||||
"InteractionsMetricDocumentation": "Die Anzahl, wie häufig mit einem Inhalt interagiert wurde (z.B. durch einen Klick auf ein Banner oder eine Anzeige).",
|
||||
"ImpressionsMetricDocumentation": "Die Anzahl, wie häufig ein Inhalt, z.b. ein Banner oder eine Anzeige, auf der Seite angezeigt wurden.",
|
||||
"InteractionRateMetricDocumentation": "Verhältnis zwischen Impressionen des Inhalts und Interaktionen."
|
||||
}
|
||||
}
|
||||
16
www/analytics/plugins/Contents/lang/el.json
Normal file
16
www/analytics/plugins/Contents/lang/el.json
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"Contents": {
|
||||
"PluginDescription": "Η παρακολούθηση περιεχομένου και εικόνων επιτρέπει να μετράτε την απόδοση (επισκέψεις, κλικ, CTR) οποιουδήποτε είδους περιεχομένου των σελίδων σας (εικόνες διαφημίσεων, εικόνες, οποιαδήποτε αντικείμενα).",
|
||||
"Impressions": "Αποτυπώσεις",
|
||||
"Interactions": "Αλληλεπιδράσεις",
|
||||
"Interaction": "Αλληλεπίδραση",
|
||||
"InteractionRate": "Ρυθμός αλληλεπίδρασης",
|
||||
"ContentName": "Όνομα Περιεχομένου",
|
||||
"ContentPiece": "Κομμάτι Περιεχομένου",
|
||||
"ContentTarget": "Στόχος Περιεχομένου",
|
||||
"Contents": "Περιεχόμενα",
|
||||
"InteractionsMetricDocumentation": "Ο αριθμός αλληλεπιδράσεων σε ένα μπλοκ περιεχομένου (πχ. ένα 'κλικ' σε μια εικόνα ή διαφήμιση).",
|
||||
"ImpressionsMetricDocumentation": "Ο αριθμός εμφανίσεων σε μια σελίδα ενός μπλοκ περιεχομένου, όπως μια εικόνα ή διαφήμιση.",
|
||||
"InteractionRateMetricDocumentation": "Ο λόγος Εμφανίσεων περιεχομένου προς Αλληλεπιδράσεις."
|
||||
}
|
||||
}
|
||||
16
www/analytics/plugins/Contents/lang/en.json
Normal file
16
www/analytics/plugins/Contents/lang/en.json
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"Contents": {
|
||||
"PluginDescription": "Content and banner tracking lets you measure the performance (views, clicks, CTR) of any piece of content on your pages (Banner ad, image, any item).",
|
||||
"Impressions": "Impressions",
|
||||
"Interactions": "Interactions",
|
||||
"Interaction": "Interaction",
|
||||
"InteractionRate": "Interaction Rate",
|
||||
"ContentName": "Content Name",
|
||||
"ContentPiece": "Content Piece",
|
||||
"ContentTarget": "Content Target",
|
||||
"Contents": "Contents",
|
||||
"InteractionsMetricDocumentation": "The number of times a content block was interacted with (eg, a 'click' on a banner or ad).",
|
||||
"ImpressionsMetricDocumentation": "The number of times a content block, such as a banner or an ad, was displayed on a page.",
|
||||
"InteractionRateMetricDocumentation": "The ratio of content impressions to interactions."
|
||||
}
|
||||
}
|
||||
13
www/analytics/plugins/Contents/lang/es.json
Normal file
13
www/analytics/plugins/Contents/lang/es.json
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
"Contents": {
|
||||
"PluginDescription": "El contenido y el seguimiento de anuncios le permite medir el rendimiento (visitas, clics, CTR) de cualquier pieza de contenido en sus páginas (anuncios publicitarios, imágenes, cualquier elemento).",
|
||||
"Impressions": "Impresiones",
|
||||
"Interactions": "Interacciones",
|
||||
"Interaction": "Interacción",
|
||||
"InteractionRate": "Nivel de interacción",
|
||||
"ContentName": "Nombre del contenido",
|
||||
"ContentPiece": "Pieza de contenido",
|
||||
"ContentTarget": "Objetivo del contenido",
|
||||
"Contents": "Contenidos"
|
||||
}
|
||||
}
|
||||
9
www/analytics/plugins/Contents/lang/et.json
Normal file
9
www/analytics/plugins/Contents/lang/et.json
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
"Contents": {
|
||||
"Interactions": "Koostoime",
|
||||
"InteractionRate": "Koostoime mõju",
|
||||
"ContentName": "Sisu nimi",
|
||||
"ContentPiece": "Sisu tükk",
|
||||
"Contents": "Sisud"
|
||||
}
|
||||
}
|
||||
12
www/analytics/plugins/Contents/lang/fi.json
Normal file
12
www/analytics/plugins/Contents/lang/fi.json
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"Contents": {
|
||||
"Impressions": "Näkymät",
|
||||
"Interactions": "Interaktiot",
|
||||
"Interaction": "Interaktio",
|
||||
"InteractionRate": "Interaktioiden määrä",
|
||||
"ContentName": "Sisällön nimi",
|
||||
"ContentPiece": "Sisällön osa",
|
||||
"ContentTarget": "Sisällön kohde",
|
||||
"Contents": "Sisällöt"
|
||||
}
|
||||
}
|
||||
16
www/analytics/plugins/Contents/lang/fr.json
Normal file
16
www/analytics/plugins/Contents/lang/fr.json
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"Contents": {
|
||||
"PluginDescription": "Le suivi de contenu et de bannière vous permet de mesurer la performance (vues, clics, CTR) de chaque partie du contenu de vos pages (bannière de pub, image, tout élément).",
|
||||
"Impressions": "Impressions",
|
||||
"Interactions": "Interactions",
|
||||
"Interaction": "Interaction",
|
||||
"InteractionRate": "Taux d'interaction",
|
||||
"ContentName": "Nom du contenu",
|
||||
"ContentPiece": "Partie du contenu",
|
||||
"ContentTarget": "Cible du contenu",
|
||||
"Contents": "Contenus",
|
||||
"InteractionsMetricDocumentation": "Nombre de fois où un bloc de contenu a subi une interaction (ex un click sur une bannière ou sur une publicité).",
|
||||
"ImpressionsMetricDocumentation": "Le nombre de fois qu'un bloc de contenu tel qu'une bannière ou une publicité a été affiché sur la page.",
|
||||
"InteractionRateMetricDocumentation": "Le ratio entre les impressions de contenu et les interactions."
|
||||
}
|
||||
}
|
||||
9
www/analytics/plugins/Contents/lang/gl.json
Normal file
9
www/analytics/plugins/Contents/lang/gl.json
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
"Contents": {
|
||||
"Impressions": "Impresións",
|
||||
"Interactions": "Interaccións",
|
||||
"Interaction": "Interacción",
|
||||
"ContentName": "Nome do contido",
|
||||
"Contents": "Contido"
|
||||
}
|
||||
}
|
||||
13
www/analytics/plugins/Contents/lang/hi.json
Normal file
13
www/analytics/plugins/Contents/lang/hi.json
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
"Contents": {
|
||||
"PluginDescription": "सामग्री और बैनर पर नज़र रखने से आप किसी भी अपने पृष्ठों पर सामग्री का टुकड़ा (बैनर विज्ञापन, छवि, किसी भी आइटम) का प्रदर्शन (विचारों, क्लिक, CTR) को मापने की सुविधा देता है।",
|
||||
"Impressions": "छापे",
|
||||
"Interactions": "सहभागिता",
|
||||
"Interaction": "इंटरेक्शन",
|
||||
"InteractionRate": "सहभागिता दर",
|
||||
"ContentName": "सामग्री का नाम",
|
||||
"ContentPiece": "सामग्री टुकड़ा",
|
||||
"ContentTarget": "सामग्री को लक्षित",
|
||||
"Contents": "अंतर्वस्तु"
|
||||
}
|
||||
}
|
||||
16
www/analytics/plugins/Contents/lang/it.json
Normal file
16
www/analytics/plugins/Contents/lang/it.json
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"Contents": {
|
||||
"PluginDescription": "Il tracciamento di contenuto e banner ti consente di misurare le prestazioni (visite, clicks, CTR) di ciascuna porzione di contenuto delle tue pagine (Banner ad, immagini, ogni elemento).",
|
||||
"Impressions": "Impressioni",
|
||||
"Interactions": "Interazioni",
|
||||
"Interaction": "Interazione",
|
||||
"InteractionRate": "Rapporto di Interazioni",
|
||||
"ContentName": "Nome Contenuto",
|
||||
"ContentPiece": "Pezzo del Contenuto",
|
||||
"ContentTarget": "Obiettivo del Contenuto",
|
||||
"Contents": "Contenuti",
|
||||
"InteractionsMetricDocumentation": "Numero di volte in cui si è interagito con un blocco di contenuto (es. un 'click' su un banner o una inserzione).",
|
||||
"ImpressionsMetricDocumentation": "Numero di volte in cui un blocco di contenuto, come un banner o una inserzione, è stato mostrato in una pagina.",
|
||||
"InteractionRateMetricDocumentation": "Rapporto tra impressioni contenuto e interazioni."
|
||||
}
|
||||
}
|
||||
16
www/analytics/plugins/Contents/lang/ja.json
Normal file
16
www/analytics/plugins/Contents/lang/ja.json
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"Contents": {
|
||||
"PluginDescription": "コンテンツやバナーの追跡では、ページのコンテンツの任意の部分(バナー広告、イメージ、任意項目) のパフォーマンス(ビュー、クリック数、CTR )を測定できます。",
|
||||
"Impressions": "インプレッション",
|
||||
"Interactions": "インタラクション",
|
||||
"Interaction": "インタラクション",
|
||||
"InteractionRate": "インタラクション率",
|
||||
"ContentName": "コンテンツ名",
|
||||
"ContentPiece": "コンテンツ要素",
|
||||
"ContentTarget": "コンテンツターゲット",
|
||||
"Contents": "内容",
|
||||
"InteractionsMetricDocumentation": "( 例えば、バナーや広告を「クリック」というような ) 相互作用をコンテンツブロックが受けた回数。",
|
||||
"ImpressionsMetricDocumentation": "広告やバナーなどのコンテンツブロックがページに表示された回数。",
|
||||
"InteractionRateMetricDocumentation": "相互作用に対するコンテンツの表示回数の比率。"
|
||||
}
|
||||
}
|
||||
11
www/analytics/plugins/Contents/lang/ko.json
Normal file
11
www/analytics/plugins/Contents/lang/ko.json
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
{
|
||||
"Contents": {
|
||||
"Interactions": "상호 작용들",
|
||||
"Interaction": "상호 작용",
|
||||
"InteractionRate": "상호 작용 비율",
|
||||
"ContentName": "콘텐츠 이름",
|
||||
"ContentPiece": "콘텐츠 조각",
|
||||
"ContentTarget": "콘텐츠 목표",
|
||||
"Contents": "콘텐츠"
|
||||
}
|
||||
}
|
||||
16
www/analytics/plugins/Contents/lang/nb.json
Normal file
16
www/analytics/plugins/Contents/lang/nb.json
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"Contents": {
|
||||
"PluginDescription": "Innholds- og bannersporing lar deg måle ytelsen (visninger, klikk, CTR) til deler av innholdet på dine sider (banner-annonser, bilder, eller hva som helst).",
|
||||
"Impressions": "Visninger",
|
||||
"Interactions": "Interaksjoner",
|
||||
"Interaction": "Interaksjon",
|
||||
"InteractionRate": "Interaksjonsrate",
|
||||
"ContentName": "Innholdsnavn",
|
||||
"ContentPiece": "Innholdsdel",
|
||||
"ContentTarget": "Innholdsmål",
|
||||
"Contents": "Innhold",
|
||||
"InteractionsMetricDocumentation": "Antall ganger en innholdsdel ble interagert med (f.eks. et klikk på en banner eller annonse).",
|
||||
"ImpressionsMetricDocumentation": "Antall ganger en innholdsdel, som en banner eller annonse, ble vist på en side.",
|
||||
"InteractionRateMetricDocumentation": "Ratioen mellom visninger og interaksjoner."
|
||||
}
|
||||
}
|
||||
13
www/analytics/plugins/Contents/lang/nl.json
Normal file
13
www/analytics/plugins/Contents/lang/nl.json
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
"Contents": {
|
||||
"PluginDescription": "Met content en banner tracking meet je de prestaties (bezoeken, kliks, CTR) van elk stuk content op je website pagina (Banner ad, plaatje)",
|
||||
"Impressions": "Impressies",
|
||||
"Interactions": "Interacties",
|
||||
"Interaction": "Interactie",
|
||||
"InteractionRate": "Interactie aantal",
|
||||
"ContentName": "Content naam",
|
||||
"ContentPiece": "Content onderdeel",
|
||||
"ContentTarget": "Content doel",
|
||||
"Contents": "Inhoudsopgave"
|
||||
}
|
||||
}
|
||||
7
www/analytics/plugins/Contents/lang/pl.json
Normal file
7
www/analytics/plugins/Contents/lang/pl.json
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"Contents": {
|
||||
"Interactions": "Interakcje",
|
||||
"ContentName": "Nazwa treści",
|
||||
"Contents": "Treść"
|
||||
}
|
||||
}
|
||||
16
www/analytics/plugins/Contents/lang/pt-br.json
Normal file
16
www/analytics/plugins/Contents/lang/pt-br.json
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
{
|
||||
"Contents": {
|
||||
"PluginDescription": "O rastreamento de conteúdo e banner permite que meça o desempenho (visualizações, cliques, CTR) de qualquer parte do conteúdo em suas páginas (Banner de anúncio, imagem, qualquer item).",
|
||||
"Impressions": "Impressões",
|
||||
"Interactions": "Interações",
|
||||
"Interaction": "Interação",
|
||||
"InteractionRate": "Taxa de interação",
|
||||
"ContentName": "Nome do conteúdo",
|
||||
"ContentPiece": "Parte do conteúdo",
|
||||
"ContentTarget": "Destino do conteúdo",
|
||||
"Contents": "Conteúdos",
|
||||
"InteractionsMetricDocumentation": "O número de vezes que interagiram com um bloco de conteúdo (e.g., um 'clique' em um banner ou anúncio).",
|
||||
"ImpressionsMetricDocumentation": "O número de vezes que um bloco de conteúdo, como um banner ou um anúncio, foi exibido em uma página.",
|
||||
"InteractionRateMetricDocumentation": "A proporção de impressões de conteúdo para interações."
|
||||
}
|
||||
}
|
||||
9
www/analytics/plugins/Contents/lang/pt.json
Normal file
9
www/analytics/plugins/Contents/lang/pt.json
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
"Contents": {
|
||||
"Impressions": "Impressões",
|
||||
"Interactions": "Interações",
|
||||
"Interaction": "Interação",
|
||||
"ContentTarget": "Conteúdo de Destino",
|
||||
"Contents": "Conteúdos"
|
||||
}
|
||||
}
|
||||
7
www/analytics/plugins/Contents/lang/ro.json
Normal file
7
www/analytics/plugins/Contents/lang/ro.json
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
{
|
||||
"Contents": {
|
||||
"Interactions": "Interactiuni",
|
||||
"Interaction": "Interactiune",
|
||||
"ContentName": "Nume Continut"
|
||||
}
|
||||
}
|
||||
12
www/analytics/plugins/Contents/lang/ru.json
Normal file
12
www/analytics/plugins/Contents/lang/ru.json
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"Contents": {
|
||||
"Impressions": "Показы",
|
||||
"Interactions": "Взаимодествия",
|
||||
"Interaction": "Взаимодествие",
|
||||
"InteractionRate": "Коэффициент взаимодествия",
|
||||
"ContentName": "Название публикации",
|
||||
"ContentPiece": "Часть публикации",
|
||||
"ContentTarget": "Цель публикации",
|
||||
"Contents": "Публикации"
|
||||
}
|
||||
}
|
||||
12
www/analytics/plugins/Contents/lang/sl.json
Normal file
12
www/analytics/plugins/Contents/lang/sl.json
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"Contents": {
|
||||
"Impressions": "Ogledi",
|
||||
"Interactions": "Interakcije",
|
||||
"Interaction": "Interakcija",
|
||||
"InteractionRate": "Stopnja interakcij",
|
||||
"ContentName": "Ime vsebine",
|
||||
"ContentPiece": "Del vsebine",
|
||||
"ContentTarget": "Cilj vsebine",
|
||||
"Contents": "Vsebine"
|
||||
}
|
||||
}
|
||||
13
www/analytics/plugins/Contents/lang/sq.json
Normal file
13
www/analytics/plugins/Contents/lang/sq.json
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
"Contents": {
|
||||
"PluginDescription": "Gjurmimi i lëndës dhe i banerave ju lejon të matni punimin (parje, klikime, CTR) të çfarëdo pjese të lëndës në faqet tuaja (Banner ad, figurë, çfarëdo objekti).",
|
||||
"Impressions": "Përshtypje",
|
||||
"Interactions": "Ndërveprime",
|
||||
"Interaction": "Ndërveprim",
|
||||
"InteractionRate": "Shkallë Ndërveprimi",
|
||||
"ContentName": "Emër Lënde",
|
||||
"ContentPiece": "Copëz Lënde",
|
||||
"ContentTarget": "Lëndë e Synuar",
|
||||
"Contents": "Lëndë"
|
||||
}
|
||||
}
|
||||
13
www/analytics/plugins/Contents/lang/sr.json
Normal file
13
www/analytics/plugins/Contents/lang/sr.json
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
"Contents": {
|
||||
"PluginDescription": "Praćenje sadržaja i banera vam omogućuje merenje performansi (prikaza, klikova, CTR) bilo kog dela sadržaja vaših stranica (reklama, slika itd.).",
|
||||
"Impressions": "Prikazi",
|
||||
"Interactions": "Interakcije",
|
||||
"Interaction": "Interakcija",
|
||||
"InteractionRate": "Odnos interakcija",
|
||||
"ContentName": "Naziv sadržaja",
|
||||
"ContentPiece": "Sadržaj",
|
||||
"ContentTarget": "Cilj sadržaja",
|
||||
"Contents": "Sadržaji"
|
||||
}
|
||||
}
|
||||
13
www/analytics/plugins/Contents/lang/sv.json
Normal file
13
www/analytics/plugins/Contents/lang/sv.json
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
"Contents": {
|
||||
"PluginDescription": "Innehålls- och bannertracking ger dig möjlighet att mäta prestanda (visningar, klick, CTR) för alla typer av innehåll på dina sidor (bannerannonser, bilder mm).",
|
||||
"Impressions": "Visningar",
|
||||
"Interactions": "Interaktioner",
|
||||
"Interaction": "Interaktion",
|
||||
"InteractionRate": "Andel interaktioner",
|
||||
"ContentName": "Namn på innehåll",
|
||||
"ContentPiece": "Innehållsdel",
|
||||
"ContentTarget": "Innehållsmål",
|
||||
"Contents": "Innehåll"
|
||||
}
|
||||
}
|
||||
12
www/analytics/plugins/Contents/lang/ta.json
Normal file
12
www/analytics/plugins/Contents/lang/ta.json
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"Contents": {
|
||||
"Impressions": "எண்ண ஓட்டம்",
|
||||
"Interactions": "உரையாடல்கள்",
|
||||
"Interaction": "உரையாடல்",
|
||||
"InteractionRate": "உரையாடல் வீதம்",
|
||||
"ContentName": "உள்ளடக்கத்தின் பெயர்",
|
||||
"ContentPiece": "உள்ளடக்கக் கூறு",
|
||||
"ContentTarget": "உள்ளடக்க இலக்கு",
|
||||
"Contents": "உள்ளடக்கம்"
|
||||
}
|
||||
}
|
||||
12
www/analytics/plugins/Contents/lang/tl.json
Normal file
12
www/analytics/plugins/Contents/lang/tl.json
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"Contents": {
|
||||
"Impressions": "Mga Impresyon",
|
||||
"Interactions": "Mga Pakikipag-ugnayan",
|
||||
"Interaction": "Pakikipag-ugnayan",
|
||||
"InteractionRate": "Rate ng Pakikipag-ugnayan",
|
||||
"ContentName": "Pangalan ng Nilalaman",
|
||||
"ContentPiece": "Piraso ng Nilalaman",
|
||||
"ContentTarget": "Target ng Nilalaman",
|
||||
"Contents": "Mga Nilalaman"
|
||||
}
|
||||
}
|
||||
12
www/analytics/plugins/Contents/lang/tr.json
Normal file
12
www/analytics/plugins/Contents/lang/tr.json
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"Contents": {
|
||||
"Impressions": "Gösterimler",
|
||||
"Interactions": "Etkileşimler",
|
||||
"Interaction": "Etkileşim",
|
||||
"InteractionRate": "Etkileşim Oranı",
|
||||
"ContentName": "İçerik İsmi",
|
||||
"ContentPiece": "İçerik Parçası",
|
||||
"ContentTarget": "İçerik Hedefi",
|
||||
"Contents": "İçerikler"
|
||||
}
|
||||
}
|
||||
13
www/analytics/plugins/Contents/lang/vi.json
Normal file
13
www/analytics/plugins/Contents/lang/vi.json
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
"Contents": {
|
||||
"PluginDescription": "Chức năng theo dõi nội dung và banner cho phép bạn đánh giá được hiệu quả (lượt xem, click, CTR) của bất kỳ trang web nào.",
|
||||
"Impressions": "Lượt hiển thị cho người dùng",
|
||||
"Interactions": "Tương tác",
|
||||
"Interaction": "Tương tác",
|
||||
"InteractionRate": "Tỷ lệ tương tác",
|
||||
"ContentName": "Tên nội dung",
|
||||
"ContentPiece": "Thành phần nội dung",
|
||||
"ContentTarget": "Đối tượng nội dung",
|
||||
"Contents": "Nội dung"
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
#content:not(.admin) .ContentsDataTable > .dataTableWrapper {
|
||||
width: 750px;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue