PDF rausgenommen
This commit is contained in:
42
msd2/tracking/piwik/plugins/CustomPiwikJs/API.php
Normal file
42
msd2/tracking/piwik/plugins/CustomPiwikJs/API.php
Normal file
@ -0,0 +1,42 @@
|
||||
<?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\CustomPiwikJs;
|
||||
|
||||
use Piwik\Container\StaticContainer;
|
||||
use Piwik\Piwik;
|
||||
use Piwik\Plugins\CustomPiwikJs\Exception\AccessDeniedException;
|
||||
|
||||
/**
|
||||
* API for plugin CustomPiwikJs
|
||||
*
|
||||
* @method static \Piwik\Plugins\CustomPiwikJs\API getInstance()
|
||||
*/
|
||||
class API extends \Piwik\Plugin\API
|
||||
{
|
||||
/**
|
||||
* Detects whether plugin trackers will be automatically added to piwik.js or not. If not, the plugin tracker files
|
||||
* need to be loaded manually.
|
||||
* @return bool
|
||||
*/
|
||||
public function doesIncludePluginTrackersAutomatically()
|
||||
{
|
||||
Piwik::checkUserHasSomeAdminAccess();
|
||||
|
||||
try {
|
||||
$updater = StaticContainer::get('Piwik\Plugins\CustomPiwikJs\TrackerUpdater');
|
||||
$updater->checkWillSucceed();
|
||||
return true;
|
||||
} catch (AccessDeniedException $e) {
|
||||
return false;
|
||||
} catch (\Exception $e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,66 @@
|
||||
<?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\CustomPiwikJs\Commands;
|
||||
|
||||
use Piwik\Container\StaticContainer;
|
||||
use Piwik\Plugin\ConsoleCommand;
|
||||
use Piwik\Plugins\CustomPiwikJs\TrackerUpdater;
|
||||
use Piwik\Plugins\CustomPiwikJs\TrackingCode\PluginTrackerFiles;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Input\InputOption;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
|
||||
class UpdateTracker extends ConsoleCommand
|
||||
{
|
||||
protected function configure()
|
||||
{
|
||||
$this->setName('custom-piwik-js:update');
|
||||
$this->setAliases(array('custom-matomo-js:update'));
|
||||
$this->addOption('source-file', null, InputOption::VALUE_REQUIRED, 'Absolute path to source PiwikJS file.', $this->getPathOriginalPiwikJs());
|
||||
$this->addOption('target-file', null, InputOption::VALUE_REQUIRED, 'Absolute path to target file. Useful if your /matomo.js is not writable and you want to replace the file manually', PIWIK_DOCUMENT_ROOT . TrackerUpdater::TARGET_MATOMO_JS);
|
||||
$this->addOption('ignore-minified', null, InputOption::VALUE_NONE, 'Ignore minified tracker files, useful during development so the original source file can be debugged');
|
||||
$this->setDescription('Update the Javascript Tracker with plugin tracker additions');
|
||||
}
|
||||
|
||||
private function getPathOriginalPiwikJs()
|
||||
{
|
||||
return PIWIK_DOCUMENT_ROOT . TrackerUpdater::ORIGINAL_PIWIK_JS;
|
||||
}
|
||||
|
||||
protected function execute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
$sourceFile = $input->getOption('source-file');
|
||||
$targetFile = $input->getOption('target-file');
|
||||
$ignoreMinified = (bool)$input->getOption('ignore-minified');
|
||||
|
||||
$this->updateTracker($sourceFile, $targetFile, $ignoreMinified);
|
||||
|
||||
$output->writeln('<info>The Javascript Tracker has been updated</info>');
|
||||
}
|
||||
|
||||
public function updateTracker($sourceFile, $targetFile, $ignoreMinified)
|
||||
{
|
||||
$pluginTrackerFiles = StaticContainer::get('Piwik\Plugins\CustomPiwikJs\TrackingCode\PluginTrackerFiles');
|
||||
|
||||
if ($ignoreMinified) {
|
||||
if (empty($sourceFile) || $sourceFile === $this->getPathOriginalPiwikJs()) {
|
||||
// no custom source file was requested
|
||||
$sourceFile = PIWIK_DOCUMENT_ROOT . TrackerUpdater::DEVELOPMENT_PIWIK_JS;
|
||||
}
|
||||
$pluginTrackerFiles->ignoreMinified();
|
||||
}
|
||||
|
||||
$updater = StaticContainer::getContainer()->make('Piwik\Plugins\CustomPiwikJs\TrackerUpdater', array(
|
||||
'fromFile' => $sourceFile, 'toFile' => $targetFile
|
||||
));
|
||||
$updater->setTrackerFiles($pluginTrackerFiles);
|
||||
$updater->checkWillSucceed();
|
||||
$updater->update();
|
||||
}
|
||||
}
|
42
msd2/tracking/piwik/plugins/CustomPiwikJs/CustomPiwikJs.php
Normal file
42
msd2/tracking/piwik/plugins/CustomPiwikJs/CustomPiwikJs.php
Normal file
@ -0,0 +1,42 @@
|
||||
<?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\CustomPiwikJs;
|
||||
|
||||
use Piwik\Container\StaticContainer;
|
||||
use Piwik\Log;
|
||||
use Piwik\Plugin;
|
||||
|
||||
class CustomPiwikJs extends Plugin
|
||||
{
|
||||
public function getListHooksRegistered()
|
||||
{
|
||||
return array(
|
||||
'CoreUpdater.update.end' => 'updateTracker',
|
||||
'CronArchive.end' => 'updateTracker',
|
||||
'PluginManager.pluginActivated' => 'updateTracker',
|
||||
'PluginManager.pluginDeactivated' => 'updateTracker',
|
||||
'PluginManager.pluginInstalled' => 'updateTracker',
|
||||
'PluginManager.pluginUninstalled' => 'updateTracker',
|
||||
'Updater.componentUpdated' => 'updateTracker',
|
||||
'Controller.CoreHome.checkForUpdates.end' => 'updateTracker'
|
||||
);
|
||||
}
|
||||
|
||||
public function updateTracker()
|
||||
{
|
||||
try {
|
||||
if (Plugin\Manager::getInstance()->isPluginActivated('CustomPiwikJs')) {
|
||||
$trackerUpdater = StaticContainer::get('Piwik\Plugins\CustomPiwikJs\TrackerUpdater');
|
||||
$trackerUpdater->update();
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
Log::error('There was an error while updating the javascript tracker: ' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,82 @@
|
||||
<?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\CustomPiwikJs\Diagnostic;
|
||||
|
||||
use Piwik\Filechecks;
|
||||
use Piwik\Filesystem;
|
||||
use Piwik\Plugins\CustomPiwikJs\File;
|
||||
use Piwik\Plugins\Diagnostics\Diagnostic\Diagnostic;
|
||||
use Piwik\Plugins\Diagnostics\Diagnostic\DiagnosticResult;
|
||||
use Piwik\SettingsPiwik;
|
||||
use Piwik\SettingsServer;
|
||||
use Piwik\Tracker\TrackerCodeGenerator;
|
||||
use Piwik\Translation\Translator;
|
||||
|
||||
/**
|
||||
* Check Piwik JS is writable
|
||||
*/
|
||||
class PiwikJsCheck implements Diagnostic
|
||||
{
|
||||
/**
|
||||
* @var Translator
|
||||
*/
|
||||
private $translator;
|
||||
|
||||
public function __construct(Translator $translator)
|
||||
{
|
||||
$this->translator = $translator;
|
||||
}
|
||||
|
||||
public function execute()
|
||||
{
|
||||
// for users that installed matomo 3.7+ we only check for matomo.js being writable... for all other users we
|
||||
// check both piwik.js and matomo.js as they can use both
|
||||
$filesToCheck = array('matomo.js');
|
||||
|
||||
$jsCodeGenerator = new TrackerCodeGenerator();
|
||||
if (SettingsPiwik::isMatomoInstalled() && $jsCodeGenerator->shouldPreferPiwikEndpoint()) {
|
||||
// if matomo is not installed yet, we definitely prefer matomo.js... check for isMatomoInstalled is needed
|
||||
// cause otherwise it would perform a db query before matomo DB is configured
|
||||
$filesToCheck[] = 'piwik.js';
|
||||
}
|
||||
|
||||
$notWritableFiles = array();
|
||||
foreach ($filesToCheck as $fileToCheck) {
|
||||
$file = new File(PIWIK_DOCUMENT_ROOT . '/' . $fileToCheck);
|
||||
|
||||
if (!$file->hasWriteAccess()) {
|
||||
$notWritableFiles[] = $fileToCheck;
|
||||
}
|
||||
}
|
||||
|
||||
$label = $this->translator->translate('CustomPiwikJs_DiagnosticPiwikJsWritable', $this->makeFilesTitles($filesToCheck));
|
||||
|
||||
if (empty($notWritableFiles)) {
|
||||
return array(DiagnosticResult::singleResult($label, DiagnosticResult::STATUS_OK, ''));
|
||||
}
|
||||
|
||||
$comment = $this->translator->translate('CustomPiwikJs_DiagnosticPiwikJsNotWritable', $this->makeFilesTitles($notWritableFiles));
|
||||
|
||||
if (!SettingsServer::isWindows()) {
|
||||
$command = '';
|
||||
foreach ($notWritableFiles as $notWritableFile) {
|
||||
$realpath = Filesystem::realpath(PIWIK_INCLUDE_PATH . '/' . $notWritableFile);
|
||||
$command .= "<br/><code> chmod +w $realpath<br/> chown ". Filechecks::getUserAndGroup() ." " . $realpath . "</code><br />";
|
||||
}
|
||||
$comment .= $this->translator->translate('CustomPiwikJs_DiagnosticPiwikJsMakeWritable', array($this->makeFilesTitles($notWritableFiles), $command));
|
||||
}
|
||||
|
||||
return array(DiagnosticResult::singleResult($label, DiagnosticResult::STATUS_WARNING, $comment));
|
||||
}
|
||||
|
||||
private function makeFilesTitles($files)
|
||||
{
|
||||
return '"/'. implode('" & "/', $files) .'"';
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
<?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\CustomPiwikJs\Exception;
|
||||
|
||||
use Exception;
|
||||
|
||||
class AccessDeniedException extends Exception
|
||||
{
|
||||
}
|
85
msd2/tracking/piwik/plugins/CustomPiwikJs/File.php
Normal file
85
msd2/tracking/piwik/plugins/CustomPiwikJs/File.php
Normal file
@ -0,0 +1,85 @@
|
||||
<?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\CustomPiwikJs;
|
||||
|
||||
use Piwik\Plugins\CustomPiwikJs\Exception\AccessDeniedException;
|
||||
|
||||
class File
|
||||
{
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $file;
|
||||
|
||||
public function __construct($file)
|
||||
{
|
||||
$this->file = $file;
|
||||
}
|
||||
|
||||
public function checkReadable()
|
||||
{
|
||||
if (!$this->hasReadAccess()) {
|
||||
throw new AccessDeniedException(sprintf('The file %s is not readable', $this->file));
|
||||
}
|
||||
}
|
||||
|
||||
public function checkWritable()
|
||||
{
|
||||
if (!$this->hasWriteAccess()) {
|
||||
throw new AccessDeniedException(sprintf('The file %s is not writable', $this->file));
|
||||
}
|
||||
}
|
||||
|
||||
public function save($content)
|
||||
{
|
||||
if(false === file_put_contents($this->file, $content)) {
|
||||
throw new AccessDeniedException(sprintf("Could not write to %s", $this->file));
|
||||
}
|
||||
}
|
||||
|
||||
public function getContent()
|
||||
{
|
||||
if (!$this->hasReadAccess()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return file_get_contents($this->file);
|
||||
}
|
||||
|
||||
public function getPath()
|
||||
{
|
||||
return $this->file;
|
||||
}
|
||||
|
||||
public function getName()
|
||||
{
|
||||
return basename($this->file);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function hasWriteAccess()
|
||||
{
|
||||
if (file_exists($this->file) && !is_writable($this->file)) {
|
||||
return false;
|
||||
}
|
||||
return is_writable(dirname($this->file)) || is_writable($this->file);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function hasReadAccess()
|
||||
{
|
||||
return file_exists($this->file) && is_readable($this->file);
|
||||
}
|
||||
|
||||
|
||||
}
|
25
msd2/tracking/piwik/plugins/CustomPiwikJs/Tasks.php
Normal file
25
msd2/tracking/piwik/plugins/CustomPiwikJs/Tasks.php
Normal file
@ -0,0 +1,25 @@
|
||||
<?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\CustomPiwikJs;
|
||||
|
||||
use Piwik\Container\StaticContainer;
|
||||
|
||||
class Tasks extends \Piwik\Plugin\Tasks
|
||||
{
|
||||
public function schedule()
|
||||
{
|
||||
$this->hourly('updateTracker');
|
||||
}
|
||||
|
||||
public function updateTracker()
|
||||
{
|
||||
$updater = StaticContainer::get('Piwik\Plugins\CustomPiwikJs\TrackerUpdater');
|
||||
$updater->update();
|
||||
}
|
||||
}
|
160
msd2/tracking/piwik/plugins/CustomPiwikJs/TrackerUpdater.php
Normal file
160
msd2/tracking/piwik/plugins/CustomPiwikJs/TrackerUpdater.php
Normal file
@ -0,0 +1,160 @@
|
||||
<?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\CustomPiwikJs;
|
||||
|
||||
use Piwik\Common;
|
||||
use Piwik\Container\StaticContainer;
|
||||
use Piwik\Plugins\CustomPiwikJs\TrackingCode\PiwikJsManipulator;
|
||||
use Piwik\Plugins\CustomPiwikJs\TrackingCode\PluginTrackerFiles;
|
||||
use Piwik\Piwik;
|
||||
|
||||
/**
|
||||
* Updates the Piwik JavaScript Tracker "piwik.js" in case plugins extend the tracker.
|
||||
*
|
||||
* Usage:
|
||||
* StaticContainer::get('Piwik\Plugins\CustomPiwikJs\TrackerUpdater')->update();
|
||||
*/
|
||||
class TrackerUpdater
|
||||
{
|
||||
const DEVELOPMENT_PIWIK_JS = '/js/piwik.js';
|
||||
const ORIGINAL_PIWIK_JS = '/js/piwik.min.js';
|
||||
const TARGET_MATOMO_JS = '/matomo.js';
|
||||
|
||||
/**
|
||||
* @var File
|
||||
*/
|
||||
private $fromFile;
|
||||
|
||||
/**
|
||||
* @var File
|
||||
*/
|
||||
private $toFile;
|
||||
|
||||
private $trackerFiles = array();
|
||||
|
||||
/**
|
||||
* @param string|null $fromFile If null then the minified JS tracker file in /js fill be used
|
||||
* @param string|null $toFile If null then the minified JS tracker will be updated.
|
||||
*/
|
||||
public function __construct($fromFile = null, $toFile = null)
|
||||
{
|
||||
if (!isset($fromFile)) {
|
||||
$fromFile = PIWIK_DOCUMENT_ROOT . self::ORIGINAL_PIWIK_JS;
|
||||
}
|
||||
|
||||
if (!isset($toFile)) {
|
||||
$toFile = PIWIK_DOCUMENT_ROOT . self::TARGET_MATOMO_JS;
|
||||
}
|
||||
|
||||
$this->setFromFile($fromFile);
|
||||
$this->setToFile($toFile);
|
||||
$this->trackerFiles = StaticContainer::get('Piwik\Plugins\CustomPiwikJs\TrackingCode\PluginTrackerFiles');
|
||||
}
|
||||
|
||||
public function setFromFile($fromFile)
|
||||
{
|
||||
if (is_string($fromFile)) {
|
||||
$fromFile = new File($fromFile);
|
||||
}
|
||||
$this->fromFile = $fromFile;
|
||||
}
|
||||
|
||||
public function getFromFile()
|
||||
{
|
||||
return $this->fromFile;
|
||||
}
|
||||
|
||||
public function setToFile($toFile)
|
||||
{
|
||||
if (is_string($toFile)) {
|
||||
$toFile = new File($toFile);
|
||||
}
|
||||
$this->toFile = $toFile;
|
||||
}
|
||||
|
||||
public function getToFile()
|
||||
{
|
||||
return $this->toFile;
|
||||
}
|
||||
|
||||
public function setTrackerFiles(PluginTrackerFiles $trackerFiles)
|
||||
{
|
||||
$this->trackerFiles = $trackerFiles;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether the Piwik JavaScript tracker file "piwik.js" is writable.
|
||||
* @throws \Exception In case the piwik.js file is not writable.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
public function checkWillSucceed()
|
||||
{
|
||||
$this->fromFile->checkReadable();
|
||||
$this->toFile->checkWritable();
|
||||
}
|
||||
|
||||
public function getCurrentTrackerFileContent()
|
||||
{
|
||||
return $this->toFile->getContent();
|
||||
}
|
||||
|
||||
public function getUpdatedTrackerFileContent()
|
||||
{
|
||||
$trackingCode = new PiwikJsManipulator($this->fromFile->getContent(), $this->trackerFiles);
|
||||
$newContent = $trackingCode->manipulateContent();
|
||||
|
||||
return $newContent;
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates / re-generates the Piwik JavaScript tracker "piwik.js".
|
||||
*
|
||||
* It may not be possible to update the "piwik.js" tracker file if the file is not writable. It won't throw
|
||||
* an exception in such a case and instead just to nothing. To check if the update would succeed, call
|
||||
* {@link checkWillSucceed()}.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
public function update()
|
||||
{
|
||||
if (!$this->toFile->hasWriteAccess() || !$this->fromFile->hasReadAccess()) {
|
||||
return;
|
||||
}
|
||||
|
||||
$newContent = $this->getUpdatedTrackerFileContent();
|
||||
|
||||
if ($newContent !== $this->getCurrentTrackerFileContent()) {
|
||||
$this->toFile->save($newContent);
|
||||
|
||||
/**
|
||||
* Triggered after the tracker JavaScript content (the content of the piwik.js file) is changed.
|
||||
*
|
||||
* @param string $absolutePath The path to the new piwik.js file.
|
||||
*/
|
||||
Piwik::postEvent('CustomPiwikJs.piwikJsChanged', [$this->toFile->getPath()]);
|
||||
}
|
||||
|
||||
// we need to make sure to sync matomo.js / piwik.js
|
||||
$this->updateAlternative('piwik.js', 'matomo.js', $newContent);
|
||||
$this->updateAlternative('matomo.js', 'piwik.js', $newContent);
|
||||
}
|
||||
|
||||
private function updateAlternative($fromFile, $toFile, $newContent)
|
||||
{
|
||||
if (Common::stringEndsWith($this->toFile->getName(), $fromFile)) {
|
||||
$alternativeFilename = dirname($this->toFile->getPath()) . DIRECTORY_SEPARATOR . $toFile;
|
||||
$file = new File($alternativeFilename);
|
||||
if ($file->hasWriteAccess() && $file->getContent() !== $newContent) {
|
||||
$file->save($newContent);
|
||||
Piwik::postEvent('CustomPiwikJs.piwikJsChanged', [$file->getPath()]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
<?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\CustomPiwikJs\TrackingCode;
|
||||
|
||||
/**
|
||||
* Used for when running Piwik tracker tests. We simply include all custom tracker files there.
|
||||
*/
|
||||
class JsTestPluginTrackerFiles extends PluginTrackerFiles
|
||||
{
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
$this->ignoreMinified = true;
|
||||
}
|
||||
|
||||
protected function isPluginActivated($pluginName)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,77 @@
|
||||
<?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\CustomPiwikJs\TrackingCode;
|
||||
|
||||
use Piwik\Piwik;
|
||||
|
||||
class PiwikJsManipulator
|
||||
{
|
||||
const HOOK = '/*!!! pluginTrackerHook */';
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
private $content;
|
||||
|
||||
/** @var PluginTrackerFiles */
|
||||
private $pluginTrackerFiles;
|
||||
|
||||
public function __construct($content, PluginTrackerFiles $pluginTrackerFiles)
|
||||
{
|
||||
$this->content = $content;
|
||||
$this->pluginTrackerFiles = $pluginTrackerFiles;
|
||||
}
|
||||
|
||||
public function manipulateContent()
|
||||
{
|
||||
$files = $this->pluginTrackerFiles->find();
|
||||
|
||||
foreach ($files as $file) {
|
||||
$trackerExtension = $this->getSignatureWithContent($file->getName(), $file->getContent());
|
||||
|
||||
// for some reasons it is /*!!! in piwik.js minified and /*!! in js/piwik.js unminified
|
||||
$this->content = str_replace(array(self::HOOK, '/*!! pluginTrackerHook */'), self::HOOK . $trackerExtension, $this->content);
|
||||
}
|
||||
|
||||
$content = $this->content;
|
||||
|
||||
/**
|
||||
* Triggered after the Matomo JavaScript tracker has been generated and shortly before the tracker file
|
||||
* is written to disk. You can listen to this event to for example automatically append some code to the JS
|
||||
* tracker file.
|
||||
*
|
||||
* **Example**
|
||||
*
|
||||
* function onManipulateJsTracker (&$content) {
|
||||
* $content .= "\nPiwik.DOM.onLoad(function () { console.log('loaded'); });";
|
||||
* }
|
||||
*
|
||||
* @param string $content the generated JavaScript tracker code
|
||||
*/
|
||||
Piwik::postEvent('CustomMatomoJs.manipulateJsTracker', array(&$content));
|
||||
$this->content = $content;
|
||||
|
||||
return $this->content;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $name
|
||||
* @param string $content
|
||||
* @return string
|
||||
*/
|
||||
private function getSignatureWithContent($name, $content)
|
||||
{
|
||||
return sprintf(
|
||||
"\n\n/* GENERATED: %s */\n%s\n/* END GENERATED: %s */\n",
|
||||
$name,
|
||||
$content,
|
||||
$name
|
||||
);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,110 @@
|
||||
<?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\CustomPiwikJs\TrackingCode;
|
||||
|
||||
use Piwik\Piwik;
|
||||
use Piwik\Plugin;
|
||||
use Piwik\Plugins\CustomPiwikJs\File;
|
||||
|
||||
class PluginTrackerFiles
|
||||
{
|
||||
const TRACKER_FILE = 'tracker.js';
|
||||
const MIN_TRACKER_FILE = 'tracker.min.js';
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected $dir;
|
||||
|
||||
/**
|
||||
* @var Plugin\Manager
|
||||
*/
|
||||
private $pluginManager;
|
||||
|
||||
/**
|
||||
* @var bool
|
||||
*/
|
||||
protected $ignoreMinified = false;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->dir = PIWIK_DOCUMENT_ROOT . '/plugins/';
|
||||
$this->pluginManager = Plugin\Manager::getInstance();
|
||||
}
|
||||
|
||||
public function ignoreMinified()
|
||||
{
|
||||
$this->ignoreMinified = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return File[]
|
||||
*/
|
||||
public function find()
|
||||
{
|
||||
$jsFiles = array();
|
||||
|
||||
if (!$this->ignoreMinified) {
|
||||
$trackerFiles = \_glob($this->dir . '*/' . self::MIN_TRACKER_FILE);
|
||||
|
||||
foreach ($trackerFiles as $trackerFile) {
|
||||
$plugin = $this->getPluginNameFromFile($trackerFile);
|
||||
if ($this->isPluginActivated($plugin)) {
|
||||
$jsFiles[$plugin] = new File($trackerFile);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$trackerFiles = \_glob($this->dir . '*/' . self::TRACKER_FILE);
|
||||
|
||||
foreach ($trackerFiles as $trackerFile) {
|
||||
$plugin = $this->getPluginNameFromFile($trackerFile);
|
||||
if (!isset($jsFiles[$plugin])) {
|
||||
if ($this->isPluginActivated($plugin)) {
|
||||
$jsFiles[$plugin] = new File($trackerFile);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($jsFiles as $plugin => $file) {
|
||||
if (!$this->shouldIncludeFile($plugin)) {
|
||||
unset($jsFiles[$plugin]);
|
||||
}
|
||||
}
|
||||
|
||||
return $jsFiles;
|
||||
}
|
||||
|
||||
protected function shouldIncludeFile($pluginName)
|
||||
{
|
||||
$shouldAddFile = true;
|
||||
|
||||
/**
|
||||
* Detect if a custom tracker file should be added to the piwik.js tracker or not.
|
||||
*
|
||||
* This is useful for example if a plugin only wants to add its tracker file when the plugin is configured.
|
||||
*
|
||||
* @param bool &$shouldAddFile Decides whether the tracker file belonging to the given plugin should be added or not.
|
||||
* @param string $pluginName The name of the plugin this file belongs to
|
||||
*/
|
||||
Piwik::postEvent('CustomPiwikJs.shouldAddTrackerFile', array(&$shouldAddFile, $pluginName));
|
||||
|
||||
return $shouldAddFile;
|
||||
}
|
||||
|
||||
protected function isPluginActivated($pluginName)
|
||||
{
|
||||
return $this->pluginManager->isPluginActivated($pluginName);
|
||||
}
|
||||
|
||||
protected function getPluginNameFromFile($file)
|
||||
{
|
||||
$file = str_replace(array($this->dir, self::TRACKER_FILE, self::MIN_TRACKER_FILE), '', $file);
|
||||
return trim($file, '/');
|
||||
}
|
||||
}
|
@ -0,0 +1,7 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
'diagnostics.optional' => DI\add(array(
|
||||
DI\get('Piwik\Plugins\CustomPiwikJs\Diagnostic\PiwikJsCheck'),
|
||||
)),
|
||||
);
|
7
msd2/tracking/piwik/plugins/CustomPiwikJs/lang/cs.json
Normal file
7
msd2/tracking/piwik/plugins/CustomPiwikJs/lang/cs.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"CustomPiwikJs": {
|
||||
"PluginDescription": "Umožňuje libovolnému zásuvnému modulu rozšířit javascriptový sledovací soubor (piwik.js) o nové funkce a měření webových stránek.",
|
||||
"DiagnosticPiwikJsWritable": "Zapisovatelný JavaScript záznam (\"\/piwik.js\")",
|
||||
"DiagnosticPiwikJsMakeWritable": "Doporučujeme povolit zápis do piwik.js například pomocí příkazu: %s"
|
||||
}
|
||||
}
|
6
msd2/tracking/piwik/plugins/CustomPiwikJs/lang/da.json
Normal file
6
msd2/tracking/piwik/plugins/CustomPiwikJs/lang/da.json
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"CustomPiwikJs": {
|
||||
"DiagnosticPiwikJsWritable": "JavaScript-sporingsfiler (%s) skrivbare",
|
||||
"DiagnosticPiwikJsMakeWritable": "Vi anbefaler at gøre %1$s skrivbare ved at køre denne kommando: %2$s"
|
||||
}
|
||||
}
|
8
msd2/tracking/piwik/plugins/CustomPiwikJs/lang/de.json
Normal file
8
msd2/tracking/piwik/plugins/CustomPiwikJs/lang/de.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"CustomPiwikJs": {
|
||||
"PluginDescription": "Ermöglicht es jedem Plugin, die Matomo-JavaScript-Tracking-Datei (matomo.js) zu erweitern und neue Funktionalitäts- und Website-Messfunktionen hinzuzufügen.",
|
||||
"DiagnosticPiwikJsWritable": "Schreibbarer JavaScript-Tracker (%s)",
|
||||
"DiagnosticPiwikJsNotWritable": "Für die Matomo JavaScript-Tracker-Datei %s sind keine Schreibrechte vorhanden , das bedeutet, dass andere Plugins den JavaScript-Tracker nicht erweitern können. In Zukunft könnten sogar einige Kernfunktionen nicht wie erwartet funktionieren.",
|
||||
"DiagnosticPiwikJsMakeWritable": "Wir empfehlen, %1$sbeschreibbar zu machen, indem Sie folgenden Befehl ausführen: %2$s"
|
||||
}
|
||||
}
|
8
msd2/tracking/piwik/plugins/CustomPiwikJs/lang/el.json
Normal file
8
msd2/tracking/piwik/plugins/CustomPiwikJs/lang/el.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"CustomPiwikJs": {
|
||||
"PluginDescription": "Επιτρέπει σε οποιοδήποτε πρόσθετο να επεκτείνει το αρχείο ιχνηλάτησης σε JavaScript του Matomo (matomo.js) και να προσθέτει νέα λειτουργικότητα και δυνατότητες μετρήσεων των ιστοτόπων.",
|
||||
"DiagnosticPiwikJsWritable": "Εγγράψιμο Αρχείο Ιχνηλάτησης JavaScript (%s)",
|
||||
"DiagnosticPiwikJsNotWritable": "Το αρχείο ιχνηλάτησης της JavaScript του Matomo %s δεν είναι εγγράψιμο, που σημαίνει ότι άλλα πρόσθετα δεν μπορούν να επεκτείνουν την ιχνηλάτηση. Μελλοντικά ενδέχεται ορισμένα χαρακτηριστικά του πυρήνα να μην λειτουργούν όπως πρέπει.",
|
||||
"DiagnosticPiwikJsMakeWritable": "Προτείνουμε να κάνετε το %1$s εγγράψιμο με εκτέλεση της εντολής: %2$s"
|
||||
}
|
||||
}
|
8
msd2/tracking/piwik/plugins/CustomPiwikJs/lang/en.json
Normal file
8
msd2/tracking/piwik/plugins/CustomPiwikJs/lang/en.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"CustomPiwikJs": {
|
||||
"PluginDescription": "Allows any plugin to extend the Matomo JavaScript Tracking file (matomo.js) and add new functionality and website measurement capabilities.",
|
||||
"DiagnosticPiwikJsWritable": "Writable JavaScript Tracker (%s)",
|
||||
"DiagnosticPiwikJsNotWritable": "The Matomo JavaScript tracker file %s is not writable which means other plugins cannot extend the JavaScript tracker. In the future even some core features might not work as expected. ",
|
||||
"DiagnosticPiwikJsMakeWritable": "We recommend to make %1$s writable by running this command: %2$s"
|
||||
}
|
||||
}
|
7
msd2/tracking/piwik/plugins/CustomPiwikJs/lang/eo.json
Normal file
7
msd2/tracking/piwik/plugins/CustomPiwikJs/lang/eo.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"CustomPiwikJs": {
|
||||
"DiagnosticPiwikJsWritable": "Skribebla Sekvanta JavaSkripto (%s)",
|
||||
"DiagnosticPiwikJsNotWritable": "La JavaSkriptan sekvanta dosiero %sne stas skriblebla. Pro tio aliaj kromprogramoj ne povas etendi la JavaSkriptan sekvanto. Estontece eĉ kelkaj kernaj funkcioj povus ne funkcii kiel atendite.",
|
||||
"DiagnosticPiwikJsMakeWritable": "Ni rekomendas fari %1$sskribebla per funkciado de ĉi tiu komando: %2$s"
|
||||
}
|
||||
}
|
8
msd2/tracking/piwik/plugins/CustomPiwikJs/lang/es.json
Normal file
8
msd2/tracking/piwik/plugins/CustomPiwikJs/lang/es.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"CustomPiwikJs": {
|
||||
"PluginDescription": "Permite a cualquier módulo ampliar el archivo de seguimiento Javascript Matomo (matomo.js) y agregar nuevas funcionalidades y capacidades de medición de desempeño a un sitio web.",
|
||||
"DiagnosticPiwikJsWritable": "Archivo de seguimiento Javascript con permiso de escritura (%s)",
|
||||
"DiagnosticPiwikJsNotWritable": "El archivo Javascript de seguimiento Matomo %s no posee permisos de escritura, lo que significa que los otros módulos no pueden enriquecerlo. Más aun, en un futuro, algunas funciones básicas podrían no funcionar como debieran.",
|
||||
"DiagnosticPiwikJsMakeWritable": "Recomendamos que %1$s posea permisos de escritura simplemente ejecutando este comando: %2$s"
|
||||
}
|
||||
}
|
5
msd2/tracking/piwik/plugins/CustomPiwikJs/lang/fi.json
Normal file
5
msd2/tracking/piwik/plugins/CustomPiwikJs/lang/fi.json
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"CustomPiwikJs": {
|
||||
"DiagnosticPiwikJsWritable": "Kirjoitettava Javascript-seuranta (\"\/piwik.js\")"
|
||||
}
|
||||
}
|
8
msd2/tracking/piwik/plugins/CustomPiwikJs/lang/fr.json
Normal file
8
msd2/tracking/piwik/plugins/CustomPiwikJs/lang/fr.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"CustomPiwikJs": {
|
||||
"PluginDescription": "Autorise n'importe quel composant à mettre à jour le fichier de suivi Matomo (matomo.js) et à ajouter de nouvelles fonctionnalités ainsi que des capacités de suivi de site web.",
|
||||
"DiagnosticPiwikJsWritable": "Traceur JavaScript inscriptible (%s)",
|
||||
"DiagnosticPiwikJsNotWritable": "Le fichier traceur JavaScript Matomo %sinscriptible ce qui veut dit que d'autres composants ne peuvent pas le modifier. Dans le futur il se pourrait même que certaines fonctionnalités principales ne fonctionnent pas comme prévu.",
|
||||
"DiagnosticPiwikJsMakeWritable": "Nous recommandons de rendre %1$s inscriptible en exécutant la commande suivante : %2$s"
|
||||
}
|
||||
}
|
5
msd2/tracking/piwik/plugins/CustomPiwikJs/lang/id.json
Normal file
5
msd2/tracking/piwik/plugins/CustomPiwikJs/lang/id.json
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"CustomPiwikJs": {
|
||||
"DiagnosticPiwikJsWritable": "Pelacak JavaScript yang Dapat Ditulis (\"\/piwik.js\")"
|
||||
}
|
||||
}
|
8
msd2/tracking/piwik/plugins/CustomPiwikJs/lang/it.json
Normal file
8
msd2/tracking/piwik/plugins/CustomPiwikJs/lang/it.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"CustomPiwikJs": {
|
||||
"PluginDescription": "Consente a qualsiasi plug-in di estendere il file di tracking JavaScript di Matomo (matomo.js) e di aggiungere nuove funzionalità e capacità di misurazione del sito web.",
|
||||
"DiagnosticPiwikJsWritable": "JavaScript Tracker scrivibile (%s)",
|
||||
"DiagnosticPiwikJsNotWritable": "Il file tracker JavaScript di Matomo %s non è scrivibile, il che significa che altri plugin non possono estendere il tracker JavaScript. In futuro anche alcune funzionalità di base potrebbero non funzionare come previsto.",
|
||||
"DiagnosticPiwikJsMakeWritable": "Ci raccomandiamo di rendere scrivibile %1$s eseguendo questo comando: %2$s"
|
||||
}
|
||||
}
|
7
msd2/tracking/piwik/plugins/CustomPiwikJs/lang/ja.json
Normal file
7
msd2/tracking/piwik/plugins/CustomPiwikJs/lang/ja.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"CustomPiwikJs": {
|
||||
"DiagnosticPiwikJsWritable": "書き込み可能な JavaScript トラッカー(%s)",
|
||||
"DiagnosticPiwikJsNotWritable": "Matomo JavaScriptトラッカーファイル %s は書き込み可能ではありません。これは、他のプラグインが JavaScriptトラッカー を拡張できないことを意味します。 将来的には、一部のコア機能も期待どおりに機能しない可能性があります。",
|
||||
"DiagnosticPiwikJsMakeWritable": "次のコマンドを実行して、%1$s を書き込み可能にすることを推奨します。: %2$s"
|
||||
}
|
||||
}
|
6
msd2/tracking/piwik/plugins/CustomPiwikJs/lang/nb.json
Normal file
6
msd2/tracking/piwik/plugins/CustomPiwikJs/lang/nb.json
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"CustomPiwikJs": {
|
||||
"DiagnosticPiwikJsWritable": "Skrivbar JavaScript-tracker (\"\/piwik.js\")",
|
||||
"DiagnosticPiwikJsMakeWritable": "Vi anbefaler å gjøre piwik.js skrivbar ved å kjøre denne kommandoen: %s"
|
||||
}
|
||||
}
|
6
msd2/tracking/piwik/plugins/CustomPiwikJs/lang/nl.json
Normal file
6
msd2/tracking/piwik/plugins/CustomPiwikJs/lang/nl.json
Normal file
@ -0,0 +1,6 @@
|
||||
{
|
||||
"CustomPiwikJs": {
|
||||
"DiagnosticPiwikJsWritable": "Schrijfbare JavaScript-tracker (\"\/piwik.js\")",
|
||||
"DiagnosticPiwikJsMakeWritable": "We adviseren piwik.js beschrijfbaar te maken door het uitvoeren van het volgende commando: %s"
|
||||
}
|
||||
}
|
5
msd2/tracking/piwik/plugins/CustomPiwikJs/lang/pl.json
Normal file
5
msd2/tracking/piwik/plugins/CustomPiwikJs/lang/pl.json
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"CustomPiwikJs": {
|
||||
"DiagnosticPiwikJsWritable": "Zapisywalny Traker JavaScript (%s)"
|
||||
}
|
||||
}
|
7
msd2/tracking/piwik/plugins/CustomPiwikJs/lang/pt.json
Normal file
7
msd2/tracking/piwik/plugins/CustomPiwikJs/lang/pt.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"CustomPiwikJs": {
|
||||
"DiagnosticPiwikJsWritable": "Permissões de escrita no JavaScript de acompanhamento (%s)",
|
||||
"DiagnosticPiwikJsNotWritable": "O ficheiro JavaScript de acompanhamento do Matomo %snão tem permissões de escrita, o que significa que outras extensões não conseguem complementar o tracker JavaScript. É possível que no futuro certas funcionalidades centrais não funcionem como o esperado.",
|
||||
"DiagnosticPiwikJsMakeWritable": "Recomendamos que dê permissões de escrita a %1$s, executando o seguinte comando %2$s"
|
||||
}
|
||||
}
|
8
msd2/tracking/piwik/plugins/CustomPiwikJs/lang/ru.json
Normal file
8
msd2/tracking/piwik/plugins/CustomPiwikJs/lang/ru.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"CustomPiwikJs": {
|
||||
"PluginDescription": "Разрешить любому плагину дополнять JavaScript-код отслеживания Matomo (matomo.js), добавляя новую функциональность и расширяя возможности мониторинга сайтов.",
|
||||
"DiagnosticPiwikJsWritable": "Записываемый JavaScript Tracker (%s)",
|
||||
"DiagnosticPiwikJsNotWritable": "Файл трекера JavaScript Matomo %s недоступен для записи, это означает, что другие плагины не могут расширять трекер JavaScript. В будущем даже некоторые основные функции могут работать не так, как ожидалось.",
|
||||
"DiagnosticPiwikJsMakeWritable": "Мы рекомендуем сделать %1$s доступным для записи, выполнив эту команду: %2$s"
|
||||
}
|
||||
}
|
8
msd2/tracking/piwik/plugins/CustomPiwikJs/lang/sq.json
Normal file
8
msd2/tracking/piwik/plugins/CustomPiwikJs/lang/sq.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"CustomPiwikJs": {
|
||||
"PluginDescription": "I lejon cilësdo shtojcë të zgjerojë kartelën Matomo JavaScript Tracking (matomo.js) dhe të shtojë aftësi të reja funksionimi dhe matjesh në sajt.",
|
||||
"DiagnosticPiwikJsWritable": "Ndjekës JavaScript i Shkrueshëm (%s)",
|
||||
"DiagnosticPiwikJsNotWritable": "Kartela e ndjekësit JavaScript të Matomo-s %s s’është e shkrueshme, çka do të thotë se shtojcat e tjera s’mund ta zgjerojnë ndjekësin JavaScript. Në të ardhmen mund të mos punojnë siç pritet madje edhe disa veçori bazë.",
|
||||
"DiagnosticPiwikJsMakeWritable": "Këshillojmë bërjen e %1$s të shkrueshme, duke xhiruar urdhrin: %2$s"
|
||||
}
|
||||
}
|
7
msd2/tracking/piwik/plugins/CustomPiwikJs/lang/sr.json
Normal file
7
msd2/tracking/piwik/plugins/CustomPiwikJs/lang/sr.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"CustomPiwikJs": {
|
||||
"PluginDescription": "Omogućuje bilo kom Matomo dodatku da proširi Matomo JavaScript datoteku za praćenje (piwik.js) i doda nove funkcionalnosti i mogućnosti za praćenje sajtova.",
|
||||
"DiagnosticPiwikJsWritable": "JavaScript treker u koji je moguće pisati (\"\/piwik.js\")",
|
||||
"DiagnosticPiwikJsMakeWritable": "Predlažemo da omogućite pisanje u piwik.js sledećom komandom: %s"
|
||||
}
|
||||
}
|
8
msd2/tracking/piwik/plugins/CustomPiwikJs/lang/sv.json
Normal file
8
msd2/tracking/piwik/plugins/CustomPiwikJs/lang/sv.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"CustomPiwikJs": {
|
||||
"PluginDescription": "Låter alla plugins utöka Matomos trackfil (piwik.js) med ny funktionalitet och webbplatsmätningsmöjligheter.",
|
||||
"DiagnosticPiwikJsWritable": "Skrivbar javskript-tracker (\"\/piwik.js\")",
|
||||
"DiagnosticPiwikJsNotWritable": "Matomos JavaScriptsbaserade spårningsfil \"\/piwik.js\" har inte skrivrättighet vilket innebär att andra plugins inte kan utöka den. Det är möjligt att framtida funktionalitet i Matomo inte fungerar som förväntat.",
|
||||
"DiagnosticPiwikJsMakeWritable": "Vi rekommenderar att göra piwik.js skrivbar genom att köra detta kommando: %s"
|
||||
}
|
||||
}
|
8
msd2/tracking/piwik/plugins/CustomPiwikJs/lang/tr.json
Normal file
8
msd2/tracking/piwik/plugins/CustomPiwikJs/lang/tr.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"CustomPiwikJs": {
|
||||
"PluginDescription": "Matomo JavaScript İzleme dosyasına (matomo.js) tüm uygulama eklerinin katkıda bulunmasını sağlayarak yeni özellik ve web sitesi ölçüm yetenekleri ekler.",
|
||||
"DiagnosticPiwikJsWritable": "Yazılabilir JavaScript İzleyici (%s)",
|
||||
"DiagnosticPiwikJsNotWritable": "%s Matomo JavaScript izleyici dosyası yazılabilir olmadığından diğer uygulama ekleri JavaScript İzleyiciyi kullanamaz. İleride bazı temel özellikler de beklendiği gibi çalışmayabilir.",
|
||||
"DiagnosticPiwikJsMakeWritable": "Şu komutu kullanarak %1$s dosyasını yazılabilir yapmanız önerilir: %2$s"
|
||||
}
|
||||
}
|
8
msd2/tracking/piwik/plugins/CustomPiwikJs/lang/uk.json
Normal file
8
msd2/tracking/piwik/plugins/CustomPiwikJs/lang/uk.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"CustomPiwikJs": {
|
||||
"PluginDescription": "Дозволяє будь-якому плагіну розширювати Matomo JavaScript код відстеження (piwik.js) і додавати нові можливості функціонування та можливості вимірювання веб-сайту.",
|
||||
"DiagnosticPiwikJsWritable": "Доступний для запису JavaScript трекер (\"\/piwik.js\")",
|
||||
"DiagnosticPiwikJsNotWritable": "Відстеження файлів Matomo через JavaScript \"\/piwik.js\" не підлягає запису, це означає, що інші плагіни не можуть розширити трекер JavaScript. Надалі навіть деякі основні функції можуть не працювати, як очікується.",
|
||||
"DiagnosticPiwikJsMakeWritable": "Ми рекомендуємо piwik.js зробити доступним для запису, виконавши команду: %s"
|
||||
}
|
||||
}
|
@ -0,0 +1,7 @@
|
||||
{
|
||||
"CustomPiwikJs": {
|
||||
"PluginDescription": "允许任意插件扩展 Matomo Javascript 追踪文件(piwik.js)并添加新的功能及网站测度能力。",
|
||||
"DiagnosticPiwikJsWritable": "可写的 Javascript 追踪器(“\/piwik.js”)",
|
||||
"DiagnosticPiwikJsMakeWritable": "我们建议通过运行这条命令来使 Piwki.js 文件可写:%s"
|
||||
}
|
||||
}
|
@ -0,0 +1,8 @@
|
||||
{
|
||||
"CustomPiwikJs": {
|
||||
"PluginDescription": "允許任何外掛擴展 Matomo JavaScript 追蹤檔案(piwik.js)來增加新功能和網站追蹤能力。",
|
||||
"DiagnosticPiwikJsWritable": "JavaScript 追蹤檔案可寫入(%s)",
|
||||
"DiagnosticPiwikJsNotWritable": "Matomo 的 JavaScript 追蹤檔案 %s 無法寫入,這代表其他外掛無法擴展 JavaScript 追蹤功能。未來甚至有些核心功能會無法正常運作。",
|
||||
"DiagnosticPiwikJsMakeWritable": "我們推薦讓它%1$s可寫入,請執行此指令:%2$s"
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user