This repository has been archived on 2025-02-26. You can view files and clone it, but cannot push or open issues or pull requests.
szurubooru/src/Dao/UserDao.php
2014-11-10 19:14:58 +01:00

86 lines
2.1 KiB
PHP

<?php
namespace Szurubooru\Dao;
use Szurubooru\Dao\EntityConverters\UserEntityConverter;
use Szurubooru\Dao\PublicFileDao;
use Szurubooru\DatabaseConnection;
use Szurubooru\Entities\Entity;
use Szurubooru\Entities\User;
use Szurubooru\Services\ThumbnailService;
class UserDao extends AbstractDao implements ICrudDao
{
const ORDER_NAME = 'name';
const ORDER_REGISTRATION_TIME = 'registrationTime';
private $fileDao;
private $thumbnailService;
public function __construct(
DatabaseConnection $databaseConnection,
PublicFileDao $fileDao,
ThumbnailService $thumbnailService)
{
parent::__construct(
$databaseConnection,
'users',
new UserEntityConverter());
$this->fileDao = $fileDao;
$this->thumbnailService = $thumbnailService;
}
public function findByName($userName)
{
return $this->findOneBy('name', $userName);
}
public function findByEmail($userEmail, $allowUnconfirmed = false)
{
$result = $this->findOneBy('email', $userEmail);
if (!$result && $allowUnconfirmed)
{
$result = $this->findOneBy('emailUnconfirmed', $userEmail);
}
return $result;
}
public function hasAnyUsers()
{
return $this->hasAnyRecords();
}
public function deleteByName($userName)
{
$this->deleteBy('name', $userName);
$this->pdo->deleteFrom('tokens')->where('additionalData', $userName);
}
protected function afterLoad(Entity $user)
{
$user->setLazyLoader(
User::LAZY_LOADER_CUSTOM_AVATAR_SOURCE_CONTENT,
function(User $user)
{
$avatarSource = $user->getCustomAvatarSourceContentPath();
return $this->fileDao->load($avatarSource);
});
}
protected function afterSave(Entity $user)
{
$targetPath = $user->getCustomAvatarSourceContentPath();
$content = $user->getCustomAvatarSourceContent();
if ($content)
$this->fileDao->save($targetPath, $content);
else
$this->fileDao->delete($targetPath);
$this->thumbnailService->deleteUsedThumbnails($targetPath);
}
protected function afterDelete(Entity $user)
{
$avatarSource = $user->getCustomAvatarSourceContentPath();
$this->fileDao->delete($avatarSource);
$this->thumbnailService->deleteUsedThumbnails($avatarSource);
}
}