diff options
Diffstat (limited to 'plugins/CustomJsTracker/TrackingCode/PiwikJsManipulator.php')
-rw-r--r-- | plugins/CustomJsTracker/TrackingCode/PiwikJsManipulator.php | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/plugins/CustomJsTracker/TrackingCode/PiwikJsManipulator.php b/plugins/CustomJsTracker/TrackingCode/PiwikJsManipulator.php new file mode 100644 index 0000000000..0fe821c4e6 --- /dev/null +++ b/plugins/CustomJsTracker/TrackingCode/PiwikJsManipulator.php @@ -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\CustomJsTracker\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 + ); + } + +} |