Files
DESKTOP-GBA0BK8\Admin 7c8c8b1c76 first commit
2023-04-08 12:19:53 -04:00

129 lines
3.5 KiB
PHP

<?php
/**
Each datasource has:
- An id, name & description
- A reader that can generate Maxmind GeoIP records.
- (optional) Configuration options
- (optional) Data Source Information (only shown for
- activate / deactivate when activated / deactivated by the user
For future compatibility:
Each data source may not rely on the fact that it is the "currently chosen" source. There may be several sources that are "activated" and then used in a fallback manner.
In practise this means that wordpress filters should be used only in conjunction of checks like
if ($record->extra->source == $this->getId()) { ...
*/
namespace YellowTree\GeoipDetect\DataSources {
abstract class AbstractDataSource {
public function __construct() {}
abstract public function getId();
public function getLabel() { return ''; }
public function getDescriptionHTML() { return ''; }
public function getStatusInformationHTML() { return ''; }
public function getParameterHTML() { return ''; }
public function saveParameters($post) { }
public function getShortLabel() { return $this->getLabel(); }
public function activate() { }
public function deactivate() { }
public function uninstall() {}
public function getReader($locales = array('en'), $options = array()) { return null; }
public function isWorking() { return false; }
}
/**
* This Class extends the Maxmind City with more attributes.
*
* @property bool $isEmpty (Wordpress Plugin) If the record is empty or contains any data.
*
* @property \YellowTree\GeoipDetect\DataSources\ExtraInformation $extra (Wordpress Plugin) Extra Information added by the GeoIP Detect plugin
*/
class City extends \GeoIp2\Model\Insights {
/**
* @ignore
*/
protected $extra;
/**
* @ignore
*/
public function __construct($raw, $locales) {
parent::__construct($raw, $locales);
$this->extra = new ExtraInformation($this->get('extra'));
}
public function __get($attr) {
if ($attr == 'isEmpty')
return $this->raw['is_empty'];
else
return parent::__get($attr);
}
}
/**
* @property string $source Id of the source that this record is originating from.
*
* @property int $cached 0 if not cached, else Unix Timestamp when it was written to the cache.
*
* @property string $error Error message if one occured during lookup. If multiple errors, they are seperated by \n
*/
class ExtraInformation extends \GeoIp2\Record\AbstractRecord {
/**
* @ignore
*/
protected $validAttributes = array('source', 'cached', 'error', 'original', 'flag', 'tel');
}
interface ReaderInterface extends \GeoIp2\ProviderInterface {
/**
* Closes the database and returns the resources to the system.
*/
public function close();
}
abstract class AbstractReader implements \YellowTree\GeoipDetect\DataSources\ReaderInterface {
protected $options;
public function __construct($options = array()) {
$this->options = $options;
}
public function city($ip) {
throw new \BadMethodCallException('This datasource does not provide data for city()');
}
public function country($ip) {
throw new \BadMethodCallException('This datasource does not provide data for country()');
}
public function close() {
}
}
} // end namespace
namespace { // global namespace
function geoip_detect2_register_source($source) {
$registry = \YellowTree\GeoipDetect\DataSources\DataSourceRegistry::getInstance();
$registry->register($source);
}
function geoip_detect2_is_source_active($sourceId) {
$registry = \YellowTree\GeoipDetect\DataSources\DataSourceRegistry::getInstance();
return $sourceId == $registry->getCurrentSource();
}
}