update Piwik to version 2.16 (fixes #91)

This commit is contained in:
oliver 2016-04-10 18:55:57 +02:00
commit d885a4baa9
5833 changed files with 418860 additions and 226988 deletions

View file

@ -1,6 +1,6 @@
<?php
/**
* Piwik - Open source web analytics
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
@ -11,67 +11,26 @@ namespace Piwik\Plugins\Provider;
use Exception;
use Piwik\ArchiveProcessor;
use Piwik\Common;
use Piwik\Config;
use Piwik\Db;
use Piwik\FrontController;
use Piwik\IP;
use Piwik\Menu\MenuMain;
use Piwik\Piwik;
use Piwik\Plugin\ViewDataTable;
use Piwik\Plugins\PrivacyManager\Config as PrivacyManagerConfig;
use Piwik\WidgetsList;
/**
*
*/
class Provider extends \Piwik\Plugin
{
/**
* @see Piwik\Plugin::getListHooksRegistered
* @see Piwik\Plugin::registerEvents
*/
public function getListHooksRegistered()
public function registerEvents()
{
$hooks = array(
'Tracker.newVisitorInformation' => 'enrichVisitWithProviderInfo',
'WidgetsList.addWidgets' => 'addWidget',
'Menu.Reporting.addItems' => 'addMenu',
'API.getReportMetadata' => 'getReportMetadata',
'API.getSegmentDimensionMetadata' => 'getSegmentsMetadata',
'ViewDataTable.configure' => 'configureViewDataTable',
);
return $hooks;
}
public function getReportMetadata(&$reports)
{
$reports[] = array(
'category' => Piwik::translate('General_Visitors'),
'name' => Piwik::translate('Provider_ColumnProvider'),
'module' => 'Provider',
'action' => 'getProvider',
'dimension' => Piwik::translate('Provider_ColumnProvider'),
'documentation' => Piwik::translate('Provider_ProviderReportDocumentation', '<br />'),
'order' => 50
);
}
public function getSegmentsMetadata(&$segments)
{
$segments[] = array(
'type' => 'dimension',
'category' => 'Visit Location',
'name' => Piwik::translate('Provider_ColumnProvider'),
'segment' => 'provider',
'acceptedValues' => 'comcast.net, proxad.net, etc.',
'sqlSegment' => 'log_visit.location_provider'
return array(
'Live.getAllVisitorDetails' => 'extendVisitorDetails'
);
}
public function install()
{
// add column hostname / hostname ext in the visit table
$query = "ALTER IGNORE TABLE `" . Common::prefixTable('log_visit') . "` ADD `location_provider` VARCHAR( 100 ) NULL";
$query = "ALTER TABLE `" . Common::prefixTable('log_visit') . "` ADD `location_provider` VARCHAR( 100 ) NULL";
// if the column already exist do not throw error. Could be installed twice...
try {
@ -83,6 +42,15 @@ class Provider extends \Piwik\Plugin
}
}
public function extendVisitorDetails(&$visitor, $details)
{
$instance = new Visitor($details);
$visitor['provider'] = $instance->getProvider();
$visitor['providerName'] = $instance->getProviderName();
$visitor['providerUrl'] = $instance->getProviderUrl();
}
public function uninstall()
{
// add column hostname / hostname ext in the visit table
@ -90,56 +58,15 @@ class Provider extends \Piwik\Plugin
Db::exec($query);
}
public function addWidget()
{
WidgetsList::add('General_Visitors', 'Provider_WidgetProviders', 'Provider', 'getProvider');
}
public function addMenu()
{
MenuMain::getInstance()->rename('General_Visitors', 'UserCountry_SubmenuLocations',
'General_Visitors', 'Provider_SubmenuLocationsProvider');
}
public function postLoad()
{
Piwik::addAction('Template.footerUserCountry', array('Piwik\Plugins\Provider\Provider', 'footerUserCountry'));
}
/**
* Logs the provider in the log_visit table
*/
public function enrichVisitWithProviderInfo(&$visitorInfo, \Piwik\Tracker\Request $request)
public static function footerUserCountry(&$out)
{
// if provider info has already been set, abort
if (!empty($visitorInfo['location_provider'])) {
return;
}
$privacyConfig = new PrivacyManagerConfig();
$ip = IP::N2P($privacyConfig->useAnonymizedIpForVisitEnrichment ? $visitorInfo['location_ip'] : $request->getIp());
// In case the IP was anonymized, we should not continue since the DNS reverse lookup will fail and this will slow down tracking
if (substr($ip, -2, 2) == '.0') {
Common::printDebug("IP Was anonymized so we skip the Provider DNS reverse lookup...");
return;
}
$hostname = $this->getHost($ip);
$hostnameExtension = $this->getCleanHostname($hostname);
// add the provider value in the table log_visit
$visitorInfo['location_provider'] = $hostnameExtension;
$visitorInfo['location_provider'] = substr($visitorInfo['location_provider'], 0, 100);
// improve the country using the provider extension if valid
$hostnameDomain = substr($hostnameExtension, 1 + strrpos($hostnameExtension, '.'));
if ($hostnameDomain == 'uk') {
$hostnameDomain = 'gb';
}
if (array_key_exists($hostnameDomain, Common::getCountriesList())) {
$visitorInfo['location_country'] = $hostnameDomain;
}
$out .= '<h2 piwik-enriched-headline>' . Piwik::translate('Provider_WidgetProviders') . '</h2>';
$out .= FrontController::getInstance()->fetchDispatch('Provider', 'getProvider');
}
/**
@ -150,7 +77,7 @@ class Provider extends \Piwik\Plugin
*
* @return string
*/
private function getCleanHostname($hostname)
public static function getCleanHostname($hostname)
{
$extToExclude = array(
'com', 'net', 'org', 'co'
@ -166,19 +93,19 @@ class Provider extends \Piwik\Plugin
/**
* Triggered when prettifying a hostname string.
*
* This event can be used to customize the way a hostname is displayed in the
*
* This event can be used to customize the way a hostname is displayed in the
* Providers report.
*
* **Example**
*
*
* public function getCleanHostname(&$cleanHostname, $hostname)
* {
* if ('fvae.VARG.ceaga.site.co.jp' == $hostname) {
* $cleanHostname = 'site.co.jp';
* }
* }
*
*
* @param string &$cleanHostname The hostname string to display. Set by the event
* handler.
* @param string $hostname The full hostname.
@ -200,37 +127,4 @@ class Provider extends \Piwik\Plugin
}
}
/**
* Returns the hostname given the IP address string
*
* @param string $ip IP Address
* @return string hostname (or human-readable IP address)
*/
private function getHost($ip)
{
return trim(strtolower(@IP::getHostByAddr($ip)));
}
static public function footerUserCountry(&$out)
{
$out = '<div>
<h2>' . Piwik::translate('Provider_WidgetProviders') . '</h2>';
$out .= FrontController::getInstance()->fetchDispatch('Provider', 'getProvider');
$out .= '</div>';
}
public function configureViewDataTable(ViewDataTable $view)
{
switch ($view->requestConfig->apiMethodToRequestDataTable) {
case 'Provider.getProvider':
$this->configureViewForGetProvider($view);
break;
}
}
private function configureViewForGetProvider(ViewDataTable $view)
{
$view->requestConfig->filter_limit = 5;
$view->config->addTranslation('label', Piwik::translate('Provider_ColumnProvider'));
}
}