1
0
Fork 0
mirror of https://github.com/wallabag/wallabag.git synced 2025-09-15 18:57:05 +00:00

Add custom doctrine subscriber for SQLite

Since SQLite doesn’t handle cascade remove by default, we need to handle it manually.

Also some refacto
This commit is contained in:
Jeremy Benoist 2016-10-01 14:01:13 +02:00
parent 98efffc2a6
commit 191564b7f7
No known key found for this signature in database
GPG key ID: BCA73962457ACC3C
5 changed files with 144 additions and 11 deletions

View file

@ -237,25 +237,26 @@ class ConfigController extends Controller
switch ($type) {
case 'annotations':
$em->createQuery('DELETE FROM Wallabag\AnnotationBundle\Entity\Annotation a WHERE a.user = '.$this->getUser()->getId())
->execute();
$this->getDoctrine()
->getRepository('WallabagAnnotationBundle:Annotation')
->removeAllByUserId($this->getUser()->getId());
break;
case 'tags':
$tags = $this->getDoctrine()->getRepository('WallabagCoreBundle:Tag')->findAllTags($this->getUser()->getId());
$this->removeAllTagsByUserId($this->getUser()->getId());
break;
if (empty($tags)) {
break;
case 'entries':
// SQLite doesn't care about cascading remove, so we need to manually remove associated stuf
// otherwise they won't be removed ...
if ($this->get('doctrine')->getConnection()->getDriver() instanceof \Doctrine\DBAL\Driver\PDOSqlite\Driver) {
$this->getDoctrine()->getRepository('WallabagAnnotationBundle:Annotation')->removeAllByUserId($this->getUser()->getId());
$this->removeAllTagsByUserId($this->getUser()->getId());
}
$this->getDoctrine()
->getRepository('WallabagCoreBundle:Entry')
->removeTags($this->getUser()->getId(), $tags);
break;
case 'entries':
$em->createQuery('DELETE FROM Wallabag\CoreBundle\Entity\Entry e WHERE e.user = '.$this->getUser()->getId())
->execute();
->removeAllByUserId($this->getUser()->getId());
}
$this->get('session')->getFlashBag()->add(
@ -266,6 +267,24 @@ class ConfigController extends Controller
return $this->redirect($this->generateUrl('config').'#set3');
}
/**
* Remove all tags for a given user.
*
* @param int $userId
*/
private function removeAllTagsByUserId($userId)
{
$tags = $this->getDoctrine()->getRepository('WallabagCoreBundle:Tag')->findAllTags($userId);
if (empty($tags)) {
return;
}
$this->getDoctrine()
->getRepository('WallabagCoreBundle:Entry')
->removeTags($userId, $tags);
}
/**
* Validate that a rule can be edited/deleted by the current user.
*