Implement save method in collection reference repository

This commit is contained in:
Thibaud Fabre
2015-07-09 20:13:46 +02:00
parent c5cab178a9
commit 07c0691092
5 changed files with 77 additions and 17 deletions

View File

@@ -2,15 +2,35 @@
namespace Alchemy\Phrasea\Collection\Reference;
use Alchemy\Phrasea\Core\Database\QueryBuilder;
use Doctrine\DBAL\Connection;
class DbalCollectionReferenceRepository implements CollectionReferenceRepository
{
private static $query = 'SELECT base_id AS baseId, sbas_id AS databoxId, server_coll_id AS collectionId,
private static $table = 'bas';
private static $columns = [
'base_id' => 'baseId',
'sbas_id' => 'databoxId',
'server_coll_id' => 'collectionId',
'ord' => 'displayIndex',
'active' => 'isActive',
'aliases' => 'alias'
];
private static $selectQuery = 'SELECT base_id AS baseId, sbas_id AS databoxId, server_coll_id AS collectionId,
ord AS displayIndex, active AS isActive, aliases AS alias
FROM bas';
private static $insertQuery = 'INSERT INTO bas (sbas_id, server_coll_id, ord, active, aliases)
VALUES (:databoxId, :collectionId,
(SELECT COALESCE(MAX(ord), 0) + 1 AS ord FROM bas WHERE sbas_id = :sbas_id),
:isActive, :alias)';
private static $updateQuery = 'UPDATE bas SET ord = :displayIndex, active = :isActive, aliases = :alias
WHERE base_id = :baseId';
/**
* @var Connection
*/
@@ -29,7 +49,7 @@ class DbalCollectionReferenceRepository implements CollectionReferenceRepository
*/
public function findAll()
{
return $this->createManyReferences($this->connection->fetchAll(self::$query));
return $this->createManyReferences($this->connection->fetchAll(self::$selectQuery));
}
/**
@@ -38,7 +58,7 @@ class DbalCollectionReferenceRepository implements CollectionReferenceRepository
*/
public function findAllByDatabox($databoxId)
{
$query = self::$query . ' WHERE sbas_id = :databoxId';
$query = self::$selectQuery . ' WHERE sbas_id = :databoxId';
$rows = $this->connection->fetchAll($query, [ ':databoxId' => $databoxId ]);
return $this->createManyReferences($rows);
@@ -50,7 +70,7 @@ class DbalCollectionReferenceRepository implements CollectionReferenceRepository
*/
public function find($baseId)
{
$query = self::$query . ' WHERE base_id = :baseId';
$query = self::$selectQuery . ' WHERE base_id = :baseId';
$row = $this->connection->fetchAssoc($query, [ ':baseId' => $baseId ]);
if ($row !== false) {
@@ -67,7 +87,7 @@ class DbalCollectionReferenceRepository implements CollectionReferenceRepository
*/
public function findByCollectionId($databoxId, $collectionId)
{
$query = self::$query . ' WHERE sbas_id = :databoxId AND server_coll_id = :collectionId';
$query = self::$selectQuery . ' WHERE sbas_id = :databoxId AND server_coll_id = :collectionId';
$row = $this->connection->fetchAssoc($query, [ ':databoxId' => $databoxId, ':collectionId' => $collectionId ]);
if ($row !== false) {
@@ -77,6 +97,35 @@ class DbalCollectionReferenceRepository implements CollectionReferenceRepository
return null;
}
public function save(CollectionReference $collectionReference)
{
$query = self::$insertQuery;
$isInsert = true;
$parameters = [
'isActive' => $collectionReference->isActive(),
'alias' => $collectionReference->getAlias()
];
if ($collectionReference->getBaseId() > 0) {
$query = self::$updateQuery;
$isInsert = false;
$parameters['baseId'] = $collectionReference->getBaseId();
$parameters['displayIndex'] = $collectionReference->getDisplayIndex();
}
else {
$parameters['databoxId'] = $collectionReference->getDataboxId();
$parameters['collectionId'] = $collectionReference->getCollectionId();
}
$this->connection->executeQuery($query, $parameters);
if ($isInsert) {
$collectionReference->setBaseId($this->connection->lastInsertId());
}
}
/**
* @param array $row
* @return CollectionReference