The following information is provided for each provider:
'id' - The provider's unique string ID.
'title' - The provider's title.
'description' - A description of how the location provider works.
'status' - Either self::NOT_INSTALLED, self::INSTALLED or self::BROKEN.
'statusMessage' - If the status is self::BROKEN, then the message describes why.
'location' - A pretty formatted location of the current IP address
(IP::getIpFromHeader()).
An example result:
array(
'geoip_php' => array('id' => 'geoip_php',
'title' => '...',
'desc' => '...',
'status' => GeoIp::BROKEN,
'statusMessage' => '...',
'location' => '...')
'geoip_serverbased' => array(...)
)
public function adminIndex() { $this->dieIfGeolocationAdminIsDisabled(); Piwik::checkUserHasSuperUserAccess(); $view = new View('@UserCountry/adminIndex'); $allProviderInfo = LocationProvider::getAllProviderInfo($newline = '<br/>', $includeExtra = true); $view->locationProviders = $allProviderInfo; $view->currentProviderId = LocationProvider::getCurrentProviderId(); $view->thisIP = IP::getIpFromHeader(); $geoIPDatabasesInstalled = GeoIp::isDatabaseInstalled(); $view->geoIPDatabasesInstalled = $geoIPDatabasesInstalled; $view->updatePeriodOptions = $this->getPeriodUpdateOptions(); // check if there is a working provider (that isn't the default one) $isThereWorkingProvider = false; foreach ($allProviderInfo as $id => $provider) { if ($id != DefaultProvider::ID && $provider['status'] == LocationProvider::INSTALLED) { $isThereWorkingProvider = true; break; } } $view->isThereWorkingProvider = $isThereWorkingProvider; // if using either the Apache or PECL module, they are working and there are no databases // in misc, then the databases are located outside of Piwik, so we cannot update them $view->showGeoIPUpdateSection = true; $currentProviderId = LocationProvider::getCurrentProviderId(); if (!$geoIPDatabasesInstalled && ($currentProviderId == ServerBased::ID || $currentProviderId == Pecl::ID) && $allProviderInfo[$currentProviderId]['status'] == LocationProvider::INSTALLED) { $view->showGeoIPUpdateSection = false; } $this->setUpdaterManageVars($view); $this->setBasicVariablesView($view); $this->setBasicVariablesAdminView($view); return $view->render(); }
public function execute() { $isPiwikInstalling = !Config::getInstance()->existsLocalConfig(); if ($isPiwikInstalling) { // Skip the diagnostic if Piwik is being installed return array(); } $label = $this->translator->translate('UserCountry_Geolocation'); $currentProviderId = LocationProvider::getCurrentProviderId(); $allProviders = LocationProvider::getAllProviderInfo(); $isRecommendedProvider = in_array($currentProviderId, array(LocationProvider\GeoIp\Php::ID, $currentProviderId == LocationProvider\GeoIp\Pecl::ID)); $isProviderInstalled = $allProviders[$currentProviderId]['status'] == LocationProvider::INSTALLED; if ($isRecommendedProvider && $isProviderInstalled) { return array(DiagnosticResult::singleResult($label, DiagnosticResult::STATUS_OK)); } if ($isProviderInstalled) { $comment = $this->translator->translate('UserCountry_GeoIpLocationProviderNotRecomnended') . ' '; $comment .= $this->translator->translate('UserCountry_GeoIpLocationProviderDesc_ServerBased2', array('<a href="http://piwik.org/docs/geo-locate/" rel="noreferrer" target="_blank">', '', '', '</a>')); } else { $comment = $this->translator->translate('UserCountry_DefaultLocationProviderDesc1') . ' '; $comment .= $this->translator->translate('UserCountry_DefaultLocationProviderDesc2', array('<a href="http://piwik.org/docs/geo-locate/" rel="noreferrer" target="_blank">', '', '', '</a>')); } return array(DiagnosticResult::singleResult($label, DiagnosticResult::STATUS_WARNING, $comment)); }
private static function checkGeolocation(&$result) { $currentProviderId = LocationProvider::getCurrentProviderId(); $allProviders = LocationProvider::getAllProviderInfo(); $isRecommendedProvider = in_array($currentProviderId, array(LocationProvider\GeoIp\Php::ID, $currentProviderId == LocationProvider\GeoIp\Pecl::ID)); $isProviderInstalled = $allProviders[$currentProviderId]['status'] == LocationProvider::INSTALLED; $result['geolocation_using_non_recommended'] = $result['geolocation_ok'] = false; if ($isRecommendedProvider && $isProviderInstalled) { $result['geolocation_ok'] = true; } elseif ($isProviderInstalled) { $result['geolocation_using_non_recommended'] = true; } }