|
<?php |
|
|
|
namespace Kanboard\Model; |
|
|
|
use Kanboard\Core\Base; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
abstract class MetadataModel extends Base |
|
{ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
abstract protected function getTable(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
abstract protected function getEntityKey(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getAll($entity_id) |
|
{ |
|
return $this->db |
|
->hashtable($this->getTable()) |
|
->eq($this->getEntityKey(), $entity_id) |
|
->asc('name') |
|
->getAll('name', 'value'); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function get($entity_id, $name, $default = '') |
|
{ |
|
return $this->db |
|
->table($this->getTable()) |
|
->eq($this->getEntityKey(), $entity_id) |
|
->eq('name', $name) |
|
->findOneColumn('value') ?: $default; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function exists($entity_id, $name) |
|
{ |
|
return $this->db |
|
->table($this->getTable()) |
|
->eq($this->getEntityKey(), $entity_id) |
|
->eq('name', $name) |
|
->exists(); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function save($entity_id, array $values) |
|
{ |
|
$results = array(); |
|
$user_id = $this->userSession->getId(); |
|
$timestamp = time(); |
|
|
|
$this->db->startTransaction(); |
|
|
|
foreach ($values as $key => $value) { |
|
if ($this->exists($entity_id, $key)) { |
|
$results[] = $this->db->table($this->getTable()) |
|
->eq($this->getEntityKey(), $entity_id) |
|
->eq('name', $key) |
|
->update(array( |
|
'value' => $value, |
|
'changed_on' => $timestamp, |
|
'changed_by' => $user_id, |
|
)); |
|
} else { |
|
$results[] = $this->db->table($this->getTable())->insert(array( |
|
'name' => $key, |
|
'value' => $value, |
|
$this->getEntityKey() => $entity_id, |
|
'changed_on' => $timestamp, |
|
'changed_by' => $user_id, |
|
)); |
|
} |
|
} |
|
|
|
$this->db->closeTransaction(); |
|
return ! in_array(false, $results, true); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function remove($entity_id, $name) |
|
{ |
|
return $this->db->table($this->getTable()) |
|
->eq($this->getEntityKey(), $entity_id) |
|
->eq('name', $name) |
|
->remove(); |
|
} |
|
} |
|
|