Fix #773: set Piwik URL protocol

This commit is contained in:
ArthurHoaro 2017-03-09 20:51:28 +01:00
parent 844021ab4c
commit fe83d45c46
4 changed files with 80 additions and 16 deletions

View file

@ -1,6 +1,7 @@
<?php
use Shaarli\Config\ConfigJson;
use Shaarli\Config\ConfigPhp;
use Shaarli\Config\ConfigManager;
/**
* Class Updater.
@ -363,6 +364,22 @@ public function updateMethodEscapeMarkdown()
return true;
}
/**
* Add 'http://' to Piwik URL the setting is set.
*
* @return bool true if the update is successful, false otherwise.
*/
public function updateMethodPiwikUrl()
{
if (! $this->conf->exists('plugins.PIWIK_URL') || startsWith($this->conf->get('plugins.PIWIK_URL'), 'http')) {
return true;
}
$this->conf->set('plugins.PIWIK_URL', 'http://'. $this->conf->get('plugins.PIWIK_URL'));
$this->conf->write($this->isLoggedIn);
return true;
}
}
/**

15
plugins/piwik/piwik.html Normal file
View file

@ -0,0 +1,15 @@
<!-- Piwik -->
<script type="text/javascript">
var _paq = _paq || [];
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
var u="%s/";
_paq.push(['setTrackerUrl', u+'piwik.php']);
_paq.push(['setSiteId', '%s']);
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s);
})();
</script>
<noscript><p><img src="%s/piwik.php?idsite=%s" style="border:0;" alt="" /></p></noscript>
<!-- End Piwik Code -->

View file

@ -50,22 +50,13 @@ function hook_piwik_render_footer($data, $conf)
}
// Free elements at the end of the page.
$data['endofpage'][] = '<!-- Piwik -->' .
'<script type="text/javascript">' .
' var _paq = _paq || [];' .
' _paq.push([\'trackPageView\']);' .
' _paq.push([\'enableLinkTracking\']);' .
' (function() {' .
' var u="//' . $piwikUrl . '/";' .
' _paq.push([\'setTrackerUrl\', u+\'piwik.php\']);' .
' _paq.push([\'setSiteId\', \'' . $piwikSiteid . '\']);' .
' var d=document, g=d.createElement(\'script\'), s=d.getElementsByTagName(\'script\')[0];' .
' g.type=\'text/javascript\'; g.async=true; g.defer=true; g.src=u+\'piwik.js\'; s.parentNode.insertBefore(g,s);' .
' })();' .
'</script>' .
'<noscript><p><img src="//' . $piwikUrl . '/piwik.php?idsite=' . $piwikSiteid . '" style="border:0;" alt="" /></p></noscript>' .
'<!-- End Piwik Code -->';
$data['endofpage'][] = sprintf(
file_get_contents(PluginManager::$PLUGINS_PATH . '/piwik/piwik.html'),
$piwikUrl,
$piwikSiteid,
$piwikUrl,
$piwikSiteid
);
return $data;
}

View file

@ -574,4 +574,45 @@ public function testEscapeMarkdownSettingNothingToDoDisabled()
$this->assertTrue($updater->updateMethodEscapeMarkdown());
$this->assertFalse($this->conf->get('security.markdown_escape'));
}
/**
* Test updateMethodPiwikUrl with valid data
*/
public function testUpdatePiwikUrlValid()
{
$sandboxConf = 'sandbox/config';
copy(self::$configFile . '.json.php', $sandboxConf . '.json.php');
$this->conf = new ConfigManager($sandboxConf);
$url = 'mypiwik.tld';
$this->conf->set('plugins.PIWIK_URL', $url);
$updater = new Updater([], [], $this->conf, true);
$this->assertTrue($updater->updateMethodPiwikUrl());
$this->assertEquals('http://'. $url, $this->conf->get('plugins.PIWIK_URL'));
// reload from file
$this->conf = new ConfigManager($sandboxConf);
$this->assertEquals('http://'. $url, $this->conf->get('plugins.PIWIK_URL'));
}
/**
* Test updateMethodPiwikUrl without setting
*/
public function testUpdatePiwikUrlEmpty()
{
$updater = new Updater([], [], $this->conf, true);
$this->assertTrue($updater->updateMethodPiwikUrl());
$this->assertEmpty($this->conf->get('plugins.PIWIK_URL'));
}
/**
* Test updateMethodPiwikUrl: valid URL, nothing to do
*/
public function testUpdatePiwikUrlNothingToDo()
{
$url = 'https://mypiwik.tld';
$this->conf->set('plugins.PIWIK_URL', $url);
$updater = new Updater([], [], $this->conf, true);
$this->assertTrue($updater->updateMethodPiwikUrl());
$this->assertEquals($url, $this->conf->get('plugins.PIWIK_URL'));
}
}