2014-09-27 21:33:31 +02:00
|
|
|
<?php
|
|
|
|
namespace Szurubooru\Dao;
|
|
|
|
|
|
|
|
class FavoritesDao extends AbstractDao implements ICrudDao
|
|
|
|
{
|
|
|
|
private $userDao;
|
|
|
|
private $postDao;
|
2014-09-28 15:21:25 +02:00
|
|
|
private $timeService;
|
2014-09-27 21:33:31 +02:00
|
|
|
|
|
|
|
public function __construct(
|
|
|
|
\Szurubooru\DatabaseConnection $databaseConnection,
|
|
|
|
\Szurubooru\Dao\UserDao $userDao,
|
2014-09-28 15:21:25 +02:00
|
|
|
\Szurubooru\Dao\PostDao $postDao,
|
|
|
|
\Szurubooru\Services\TimeService $timeService)
|
2014-09-27 21:33:31 +02:00
|
|
|
{
|
|
|
|
parent::__construct(
|
|
|
|
$databaseConnection,
|
|
|
|
'favorites',
|
|
|
|
new \Szurubooru\Dao\EntityConverters\FavoriteEntityConverter());
|
|
|
|
|
|
|
|
$this->userDao = $userDao;
|
|
|
|
$this->postDao = $postDao;
|
2014-09-28 15:21:25 +02:00
|
|
|
$this->timeService = $timeService;
|
2014-09-27 21:33:31 +02:00
|
|
|
}
|
|
|
|
|
2014-09-28 15:21:25 +02:00
|
|
|
public function findByPost(\Szurubooru\Entities\Post $post)
|
2014-09-27 21:33:31 +02:00
|
|
|
{
|
2014-09-28 15:21:25 +02:00
|
|
|
return $this->findBy('postId', $post->getId());
|
2014-09-27 21:33:31 +02:00
|
|
|
}
|
|
|
|
|
2014-09-28 15:21:25 +02:00
|
|
|
public function set(\Szurubooru\Entities\User $user, \Szurubooru\Entities\Post $post)
|
2014-09-27 21:33:31 +02:00
|
|
|
{
|
2014-09-28 15:21:25 +02:00
|
|
|
$favorite = $this->get($user, $post);
|
|
|
|
if (!$favorite)
|
|
|
|
{
|
|
|
|
$favorite = new \Szurubooru\Entities\Favorite();
|
|
|
|
$favorite->setUser($user);
|
|
|
|
$favorite->setPost($post);
|
|
|
|
$favorite->setTime($this->timeService->getCurrentTime());
|
|
|
|
$this->save($favorite);
|
|
|
|
}
|
|
|
|
return $favorite;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function delete(\Szurubooru\Entities\User $user, \Szurubooru\Entities\Post $post)
|
|
|
|
{
|
|
|
|
$favorite = $this->get($user, $post);
|
|
|
|
if ($favorite)
|
|
|
|
$this->deleteById($favorite->getId());
|
2014-09-27 21:33:31 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
protected function afterLoad(\Szurubooru\Entities\Entity $favorite)
|
|
|
|
{
|
|
|
|
$favorite->setLazyLoader(
|
|
|
|
\Szurubooru\Entities\Favorite::LAZY_LOADER_USER,
|
|
|
|
function (\Szurubooru\Entities\Favorite $favorite)
|
|
|
|
{
|
|
|
|
return $this->userDao->findById($favorite->getUserId());
|
|
|
|
});
|
|
|
|
|
|
|
|
$favorite->setLazyLoader(
|
|
|
|
\Szurubooru\Entities\Favorite::LAZY_LOADER_POST,
|
|
|
|
function (\Szurubooru\Entities\Favorite $favorite)
|
|
|
|
{
|
|
|
|
return $this->postDao->findById($favorite->getPostId());
|
|
|
|
});
|
|
|
|
}
|
2014-09-28 15:21:25 +02:00
|
|
|
|
|
|
|
private function get(\Szurubooru\Entities\User $user, \Szurubooru\Entities\Post $post)
|
|
|
|
{
|
|
|
|
$query = $this->fpdo->from($this->tableName)
|
|
|
|
->where('userId', $user->getId())
|
|
|
|
->where('postId', $post->getId());
|
|
|
|
$arrayEntities = iterator_to_array($query);
|
|
|
|
$entities = $this->arrayToEntities($arrayEntities);
|
|
|
|
return array_shift($entities);
|
|
|
|
}
|
2014-09-27 21:33:31 +02:00
|
|
|
}
|