public function getCity($idSite, $period, $date, $segment = false)
{
$dataTable = $this->getDataTable(Archiver::CITY_RECORD_NAME, $idSite, $period, $date, $segment);
$segments = array('city', 'regionCode', 'countryCode');
$dataTable->filter('AddSegmentByLabel', array($segments, Archiver::LOCATION_SEPARATOR));
$separator = Archiver::LOCATION_SEPARATOR;
$unk = Visit::UNKNOWN_CODE;
// split the label and put the elements into the 'city_name', 'region', 'country',
// 'lat' & 'long' metadata fields
$strUnknown = Piwik::translate('General_Unknown');
$dataTable->filter('ColumnCallbackAddMetadata', array('label', 'city_name', __NAMESPACE__ . '\\getElementFromStringArray', array($separator, 0, $strUnknown)));
$dataTable->filter('MetadataCallbackAddMetadata', array('city_name', 'city', function ($city) use($strUnknown) {
if ($city == $strUnknown) {
return "xx";
} else {
return false;
}
}));
$dataTable->filter('ColumnCallbackAddMetadata', array('label', 'region', __NAMESPACE__ . '\\getElementFromStringArray', array($separator, 1, $unk)));
$dataTable->filter('ColumnCallbackAddMetadata', array('label', 'country', __NAMESPACE__ . '\\getElementFromStringArray', array($separator, 2, $unk)));
// backwards compatibility: for reports that have lat|long in label
$dataTable->filter('ColumnCallbackAddMetadata', array('label', 'lat', __NAMESPACE__ . '\\getElementFromStringArray', array($separator, 3, false)));
$dataTable->filter('ColumnCallbackAddMetadata', array('label', 'long', __NAMESPACE__ . '\\getElementFromStringArray', array($separator, 4, false)));
// add country name & region name metadata
$dataTable->filter('MetadataCallbackAddMetadata', array('country', 'country_name', __NAMESPACE__ . '\\countryTranslate', $applyToSummaryRow = false));
$getRegionName = '\\Piwik\\Plugins\\UserCountry\\LocationProvider\\GeoIp::getRegionNameFromCodes';
$dataTable->filter('MetadataCallbackAddMetadata', array(array('country', 'region'), 'region_name', $getRegionName, $applyToSummaryRow = false));
// add the country flag as a url to the 'logo' metadata field
$dataTable->filter('MetadataCallbackAddMetadata', array('country', 'logo', __NAMESPACE__ . '\\getFlagFromCode'));
// prettify the label
$dataTable->filter('ColumnCallbackReplace', array('label', __NAMESPACE__ . '\\getPrettyCityName'));
$dataTable->queueFilter('ReplaceSummaryRowLabel');
return $dataTable;
}