Returns list of valid country codes
public static getCountriesList ( boolean $includeInternalCodes = false ) : array | ||
$includeInternalCodes | boolean | |
Результат | array | Array of (2 letter ISO codes => 3 letter continent code) |
public function index() { Piwik::checkUserIsNotAnonymous(); $view = new View('@MobileMessaging/index'); $view->isSuperUser = Piwik::hasUserSuperUserAccess(); $mobileMessagingAPI = API::getInstance(); $view->delegatedManagement = $mobileMessagingAPI->getDelegatedManagement(); $view->credentialSupplied = $mobileMessagingAPI->areSMSAPICredentialProvided(); $view->accountManagedByCurrentUser = $view->isSuperUser || $view->delegatedManagement; $view->strHelpAddPhone = Piwik::translate('MobileMessaging_Settings_PhoneNumbers_HelpAdd', array(Piwik::translate('General_Settings'), Piwik::translate('MobileMessaging_SettingsMenu'))); if ($view->credentialSupplied && $view->accountManagedByCurrentUser) { $view->provider = $mobileMessagingAPI->getSMSProvider(); $view->creditLeft = $mobileMessagingAPI->getCreditLeft(); } $view->smsProviders = SMSProvider::$availableSMSProviders; // construct the list of countries from the lang files $countries = array(); foreach (Common::getCountriesList() as $countryCode => $continentCode) { if (isset(CountryCallingCodes::$countryCallingCodes[$countryCode])) { $countries[$countryCode] = array('countryName' => \Piwik\Plugins\UserCountry\countryTranslate($countryCode), 'countryCallingCode' => CountryCallingCodes::$countryCallingCodes[$countryCode]); } } $view->countries = $countries; $view->defaultCountry = Common::getCountry(LanguagesManager::getLanguageCodeForCurrentUser(), true, IP::getIpFromHeader()); $view->phoneNumbers = $mobileMessagingAPI->getPhoneNumbers(); $this->setBasicVariablesView($view); return $view->render(); }
/** * Returns a list of country codes for a given continent code. * * @param string $continent The continent code. * @return array */ public static function getCountriesForContinent($continent) { $result = array(); $continent = strtolower($continent); foreach (Common::getCountriesList() as $countryCode => $continentCode) { if ($continent == $continentCode) { $result[] = $countryCode; } } return array('SQL' => "'" . implode("', '", $result) . "', ?", 'bind' => '-'); // HACK: SegmentExpression requires a $bind, even if there's nothing to bind }
private function getCountryUsingProviderExtensionIfValid($ipAddress) { if (!Manager::getInstance()->isPluginInstalled('Provider')) { return false; } $hostname = $this->getHost($ipAddress); $hostnameExtension = ProviderProvider::getCleanHostname($hostname); $hostnameDomain = substr($hostnameExtension, 1 + strrpos($hostnameExtension, '.')); if ($hostnameDomain == 'uk') { $hostnameDomain = 'gb'; } if (array_key_exists($hostnameDomain, Common::getCountriesList())) { return $hostnameDomain; } return false; }
/** * Validates the given translations * * There need to be more than 250 translations presen * * Locale, TranslatorName and TranslatorEmail needs to be set in plugin General * * LayoutDirection needs to be ltr or rtl if present * * Locale must be valid (format, language & country) * * @param array $translations * * @return boolean */ public function isValid($translations) { $this->message = null; if (250 > count($translations, COUNT_RECURSIVE)) { $this->message = self::ERRORSTATE_MINIMUMTRANSLATIONS; return false; } if (empty($translations['General']['Locale'])) { $this->message = self::ERRORSTATE_LOCALEREQUIRED; return false; } if (empty($translations['General']['TranslatorName'])) { $this->message = self::ERRORSTATE_TRANSLATORINFOREQUIRED; return false; } if (empty($translations['General']['TranslatorEmail'])) { $this->message = self::ERRORSTATE_TRANSLATOREMAILREQUIRED; return false; } if (!empty($translations['General']['LayoutDirection']) && !in_array($translations['General']['LayoutDirection'], array('ltr', 'rtl'))) { $this->message = self::ERRORSTATE_LAYOUTDIRECTIONINVALID; return false; } $allLanguages = Common::getLanguagesList(); $allCountries = Common::getCountriesList(); if (!preg_match('/^([a-z]{2})_([A-Z]{2})\\.UTF-8$/', $translations['General']['Locale'], $matches)) { $this->message = self::ERRORSTATE_LOCALEINVALID; return false; } else { if (!array_key_exists($matches[1], $allLanguages)) { $this->message = self::ERRORSTATE_LOCALEINVALIDLANGUAGE; return false; } else { if (!array_key_exists(strtolower($matches[2]), $allCountries)) { $this->message = self::ERRORSTATE_LOCALEINVALIDCOUNTRY; return false; } } } return true; }
/** * Dataprovider for testExtractCountryCodeFromBrowserLanguage */ public function getCountryCodeTestData() { return array(array("", array(), "xx"), array("", array("us" => 'amn'), "xx"), array("en", array("us" => 'amn'), "xx"), array("en-us", array("us" => 'amn'), "us"), array("en-ca", array("us" => 'amn'), "xx"), array("en-ca", array("us" => 'amn', "ca" => 'amn'), "ca"), array("fr-fr,fr-ca", array("us" => 'amn', "ca" => 'amn'), "ca"), array("fr-fr;q=1.0,fr-ca;q=0.9", array("us" => 'amn', "ca" => 'amn'), "ca"), array("fr-ca,fr;q=0.1", array("us" => 'amn', "ca" => 'amn'), "ca"), array("en-us,en;q=0.5", Common::getCountriesList(), "us"), array("fr-ca,fr;q=0.1", array("fr" => 'eur', "us" => 'amn', "ca" => 'amn'), "ca"), array("fr-fr,fr-ca", array("fr" => 'eur', "us" => 'amn', "ca" => 'amn'), "fr")); }
/** * Logs the provider in the log_visit table */ public function enrichVisitWithProviderInfo(&$visitorInfo, \Piwik\Tracker\Request $request) { // 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; } }
protected function aggregateByLanguage() { $query = $this->getLogAggregator()->queryVisitsByDimension(array("label" => self::LANGUAGE_DIMENSION)); $languageCodes = array_keys(Common::getLanguagesList()); $countryCodes = Common::getCountriesList($includeInternalCodes = true); $metricsByLanguage = new DataArray(); while ($row = $query->fetch()) { $langCode = Common::extractLanguageCodeFromBrowserLanguage($row['label'], $languageCodes); $countryCode = Common::extractCountryCodeFromBrowserLanguage($row['label'], $countryCodes, $enableLanguageToCountryGuess = true); if ($countryCode == 'xx' || $countryCode == $langCode) { $metricsByLanguage->sumMetricsVisits($langCode, $row); } else { $metricsByLanguage->sumMetricsVisits($langCode . '-' . $countryCode, $row); } } $report = $metricsByLanguage->asDataTable(); $this->insertTable(self::LANGUAGE_RECORD_NAME, $report); }