|
<?php |
|
|
|
namespace Kanboard\Model; |
|
|
|
use PDO; |
|
use Kanboard\Core\Base; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class LinkModel extends Base |
|
{ |
|
|
|
|
|
|
|
|
|
|
|
const TABLE = 'links'; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getById($link_id) |
|
{ |
|
return $this->db->table(self::TABLE)->eq('id', $link_id)->findOne(); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getByLabel($label) |
|
{ |
|
return $this->db->table(self::TABLE)->eq('label', $label)->findOne(); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getOppositeLinkId($link_id) |
|
{ |
|
return $this->db->table(self::TABLE)->eq('id', $link_id)->findOneColumn('opposite_id') ?: $link_id; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getAll() |
|
{ |
|
return $this->db->table(self::TABLE)->findAll(); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getMergedList() |
|
{ |
|
return $this->db |
|
->execute(' |
|
SELECT |
|
links.id, links.label, opposite.label as opposite_label |
|
FROM links |
|
LEFT JOIN links AS opposite ON opposite.id=links.opposite_id |
|
') |
|
->fetchAll(PDO::FETCH_ASSOC); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function getList($exclude_id = 0, $prepend = true) |
|
{ |
|
$labels = $this->db->hashtable(self::TABLE)->neq('id', $exclude_id)->asc('id')->getAll('id', 'label'); |
|
|
|
foreach ($labels as &$value) { |
|
$value = t($value); |
|
} |
|
|
|
return $prepend ? array('') + $labels : $labels; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function create($label, $opposite_label = '') |
|
{ |
|
$this->db->startTransaction(); |
|
|
|
if (! $this->db->table(self::TABLE)->insert(array('label' => $label))) { |
|
$this->db->cancelTransaction(); |
|
return false; |
|
} |
|
|
|
$label_id = $this->db->getLastId(); |
|
|
|
if (! empty($opposite_label)) { |
|
$this->db |
|
->table(self::TABLE) |
|
->insert(array( |
|
'label' => $opposite_label, |
|
'opposite_id' => $label_id, |
|
)); |
|
|
|
$this->db |
|
->table(self::TABLE) |
|
->eq('id', $label_id) |
|
->update(array( |
|
'opposite_id' => $this->db->getLastId() |
|
)); |
|
} |
|
|
|
$this->db->closeTransaction(); |
|
|
|
return (int) $label_id; |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function update(array $values) |
|
{ |
|
return $this->db |
|
->table(self::TABLE) |
|
->eq('id', $values['id']) |
|
->update(array( |
|
'label' => $values['label'], |
|
'opposite_id' => $values['opposite_id'], |
|
)); |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public function remove($link_id) |
|
{ |
|
$this->db->table(self::TABLE)->eq('opposite_id', $link_id)->update(array('opposite_id' => 0)); |
|
return $this->db->table(self::TABLE)->eq('id', $link_id)->remove(); |
|
} |
|
} |
|
|