szurubooru/src/Dao/FavoritesDao.php

75 lines
1.8 KiB
PHP
Raw Normal View History

2014-09-27 21:33:31 +02:00
<?php
namespace Szurubooru\Dao;
use Szurubooru\Dao\EntityConverters\FavoriteEntityConverter;
use Szurubooru\DatabaseConnection;
use Szurubooru\Entities\Entity;
use Szurubooru\Entities\Favorite;
use Szurubooru\Entities\Post;
use Szurubooru\Entities\User;
use Szurubooru\Services\TimeService;
2014-09-27 21:33:31 +02:00
class FavoritesDao extends AbstractDao implements ICrudDao
{
2014-09-28 15:21:25 +02:00
private $timeService;
2014-09-27 21:33:31 +02:00
public function __construct(
DatabaseConnection $databaseConnection,
TimeService $timeService)
2014-09-27 21:33:31 +02:00
{
parent::__construct(
$databaseConnection,
'favorites',
new FavoriteEntityConverter());
2014-09-27 21:33:31 +02:00
2014-09-28 15:21:25 +02:00
$this->timeService = $timeService;
2014-09-27 21:33:31 +02:00
}
public function findByEntity(Entity $entity)
2014-09-27 21:33:31 +02:00
{
if ($entity instanceof Post)
return $this->findBy('postId', $entity->getId());
else
throw new \InvalidArgumentException();
2014-09-27 21:33:31 +02:00
}
public function set(User $user, Entity $entity)
2014-09-27 21:33:31 +02:00
{
$favorite = $this->get($user, $entity);
2014-09-28 15:21:25 +02:00
if (!$favorite)
{
$favorite = new Favorite();
2014-09-28 15:21:25 +02:00
$favorite->setTime($this->timeService->getCurrentTime());
2014-10-05 15:15:03 +02:00
$favorite->setUserId($user->getId());
if ($entity instanceof Post)
2014-10-05 15:15:03 +02:00
$favorite->setPostId($entity->getId());
else
throw new \InvalidArgumentException();
2014-09-28 15:21:25 +02:00
$this->save($favorite);
}
return $favorite;
}
public function delete(User $user, Entity $entity)
2014-09-28 15:21:25 +02:00
{
$favorite = $this->get($user, $entity);
2014-09-28 15:21:25 +02:00
if ($favorite)
$this->deleteById($favorite->getId());
2014-09-27 21:33:31 +02:00
}
private function get(User $user, Entity $entity)
2014-09-28 15:21:25 +02:00
{
$query = $this->fpdo->from($this->tableName)->where('userId', $user->getId());
if ($entity instanceof Post)
$query->where('postId', $entity->getId());
else
throw new \InvalidArgumentException();
2014-09-28 15:21:25 +02:00
$arrayEntities = iterator_to_array($query);
$entities = $this->arrayToEntities($arrayEntities);
return array_shift($entities);
}
2014-09-27 21:33:31 +02:00
}