sddns/include/dbrecord.php
2010-08-17 01:23:57 +02:00

113 lines
No EOL
3.6 KiB
PHP
Executable file

<?php
class DBRecord extends Record implements DBObject {
public $id;
public $lifetime;
public $lastAccessed;
private $db;
public function __construct($id, Database $db) {
$config = Registry::get('config');
$this->db = $db;
$sql = 'SELECT *
FROM ' . $config['db']['tbl']['records'] . '
WHERE id = ' . (int) $id;
$result = $this->db->query($sql, 1);
$record = $result->first();
$this->id = $record['id'];
$this->lastAccessed = strtotime($record['last_accessed']);
$this->lifetime = $record['lifetime'];
$this->host = new DBHost($record['host_id'], $this->db);
parent::__construct($this->host, (int) $record['ttl'], $record['class'], $record['type'], $record['rdata']);
}
public function __destruct() {
//$this->update();
}
public function update() {
$config = Registry::get('config');
$sql = 'UPDATE ' . $config['db']['tbl']['records'] . '
SET
lifetime = ' . (int) $this->lifetime . ',
last_accessed = \'' . date('Y-m-d H:i:s', $this->lastAccessed) . '\',
host_id = \'' . $this->db->escape($this->host->id) . '\',
ttl = ' . (int) $this->ttl . ',
class = \'' . $this->db->escape($this->class) . '\',
type = \'' . $this->db->escape($this->type) . '\',
rdata = \'' . $this->db->escape( $this->rdata) . '\'
WHERE id = ' . (int) $this->id;
$this->db->execute($sql);
}
public function toXml(DOMDocument $doc) {
$xmlRecord = parent::toXml($doc);
$xmlRecord->setAttribute('id', $this->id);
$xmlRecord->appendChild($doc->createElement('lifetime', $this->lifetime));
$xmlRecord->appendChild($doc->createElement('lastaccessed', $this->lastAccessed));
return $xmlRecord;
}
public function delete() {
$config = Registry::get('config');
$sql = 'DELETE FROM ' . $config['db']['tbl']['records'] . '
WHERE id = ' . (int) $this->id;
$this->db->execute($sql);
}
public static function get(Database $db, $filter = false) {
$config = Registry::get('config');
$sql = 'SELECT r.id
FROM ' . $config['db']['tbl']['records'] . ' AS r
LEFT JOIN ' . $config['db']['tbl']['hosts'] . ' AS h
ON h.id = r.host_id
WHERE true';
if (!empty($filter['id']))
$sql .= ' && id = ' . (int) $filter['id'];
if (!empty($filter['host']) && $filter['host'] instanceof Host)
$sql .= ' && host_id = ' . (int) $filter['host']->isRegistred($db);
if (!empty($filter['host']) && $filter['host'] instanceof DBHost)
$sql .= ' && host_id = ' . (int) $filter['host']->id;
if (!empty($filter['host']) && is_string($filter['host']))
$sql .= ' && hostname = \'' . $db->escape($filter['host']) . '\'';
if (!empty($filter['zone']) && $filter['zone'] instanceof Zone)
$sql .= ' && zone = \'' . $db->escape($filter['zone']->name) . '\'';
if (!empty($filter['zone']) && is_string($filter['zone']))
$sql .= ' && zone = \'' . $db->escape($filter['zone']->name) . '\'';
if (!empty($filter['type']))
$sql .= ' && type = \'' . $db->escape($filter['type']) . '\'';
if (!empty($filter['class']))
$sql .= ' && class = \'' . $db->escape($filter['class']) . '\'';
if (!empty($filter['rdata']))
$sql .= ' && rdata = \'' . $db->escape($filter['rdata']) . '\'';
if (!empty($filter['ttl']))
$sql .= ' && ttl = ' . (int) $filter['ttl'];
$sql .= ' ORDER BY r.id ASC';
$result = $db->query($sql);
$records = array();
foreach ($result as $record) {
$records[] = new self($record['id'], $db);
}
return $records;
}
}
?>