aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorThomas Citharel <tcit@tcit.fr>2017-03-30 16:24:59 +0200
committerNicolas Lœuillet <nicolas@loeuillet.org>2017-03-31 10:46:05 +0200
commit6da1aebc946e6448dd0d5080ee88e79c2bae4666 (patch)
tree43d350623f225ee560e040cd361d628454f2b1a7
parentfa884b30ba0f8cb4231bd37fff23ef2f41ae6cfa (diff)
downloadwallabag-6da1aebc946e6448dd0d5080ee88e79c2bae4666.tar.gz
wallabag-6da1aebc946e6448dd0d5080ee88e79c2bae4666.tar.zst
wallabag-6da1aebc946e6448dd0d5080ee88e79c2bae4666.zip
Allow to remove all archived entries
Since we still support fucking SQLite, we need to retrieve all tags & annotations for archived entries before deleting them. Signed-off-by: Thomas Citharel <tcit@tcit.fr>
-rw-r--r--src/Wallabag/AnnotationBundle/Repository/AnnotationRepository.php16
-rw-r--r--src/Wallabag/CoreBundle/Controller/ConfigController.php59
-rw-r--r--src/Wallabag/CoreBundle/Repository/EntryRepository.php8
-rw-r--r--src/Wallabag/CoreBundle/Repository/TagRepository.php20
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.da.yml2
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.de.yml2
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.en.yml2
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.es.yml2
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.fa.yml2
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.fr.yml2
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.it.yml2
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.oc.yml2
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.pl.yml2
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.pt.yml2
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.ro.yml2
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.tr.yml2
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/material/Config/index.html.twig3
-rw-r--r--tests/Wallabag/CoreBundle/Controller/ConfigControllerTest.php76
18 files changed, 205 insertions, 1 deletions
diff --git a/src/Wallabag/AnnotationBundle/Repository/AnnotationRepository.php b/src/Wallabag/AnnotationBundle/Repository/AnnotationRepository.php
index 8d3f07ee..23f21c3e 100644
--- a/src/Wallabag/AnnotationBundle/Repository/AnnotationRepository.php
+++ b/src/Wallabag/AnnotationBundle/Repository/AnnotationRepository.php
@@ -122,4 +122,20 @@ class AnnotationRepository extends EntityRepository
122 ->setParameter('userId', $userId) 122 ->setParameter('userId', $userId)
123 ->execute(); 123 ->execute();
124 } 124 }
125
126 /**
127 * Find all annotations related to archived entries
128 *
129 * @param $userId
130 * @return mixed
131 */
132 public function findAllByArchivedEntriesAndUserId($userId)
133 {
134 return $this->createQueryBuilder('a')
135 ->leftJoin('a.entry', 'e')
136 ->where('a.user = :userid')->setParameter(':userid', $userId)
137 ->andWhere('e.isArchived = true')
138 ->getQuery()
139 ->getResult();
140 }
125} 141}
diff --git a/src/Wallabag/CoreBundle/Controller/ConfigController.php b/src/Wallabag/CoreBundle/Controller/ConfigController.php
index 907bf78e..7dbe3f18 100644
--- a/src/Wallabag/CoreBundle/Controller/ConfigController.php
+++ b/src/Wallabag/CoreBundle/Controller/ConfigController.php
@@ -248,7 +248,7 @@ class ConfigController extends Controller
248 break; 248 break;
249 249
250 case 'entries': 250 case 'entries':
251 // SQLite doesn't care about cascading remove, so we need to manually remove associated stuf 251 // SQLite doesn't care about cascading remove, so we need to manually remove associated stuff
252 // otherwise they won't be removed ... 252 // otherwise they won't be removed ...
253 if ($this->get('doctrine')->getConnection()->getDriver() instanceof \Doctrine\DBAL\Driver\PDOSqlite\Driver) { 253 if ($this->get('doctrine')->getConnection()->getDriver() instanceof \Doctrine\DBAL\Driver\PDOSqlite\Driver) {
254 $this->getDoctrine()->getRepository('WallabagAnnotationBundle:Annotation')->removeAllByUserId($this->getUser()->getId()); 254 $this->getDoctrine()->getRepository('WallabagAnnotationBundle:Annotation')->removeAllByUserId($this->getUser()->getId());
@@ -260,6 +260,19 @@ class ConfigController extends Controller
260 $this->getDoctrine() 260 $this->getDoctrine()
261 ->getRepository('WallabagCoreBundle:Entry') 261 ->getRepository('WallabagCoreBundle:Entry')
262 ->removeAllByUserId($this->getUser()->getId()); 262 ->removeAllByUserId($this->getUser()->getId());
263 break;
264 case 'archived':
265 if ($this->get('doctrine')->getConnection()->getDriver() instanceof \Doctrine\DBAL\Driver\PDOSqlite\Driver) {
266 $this->removeAnnotationsForArchivedByUserId($this->getUser()->getId());
267 }
268
269 // manually remove tags to avoid orphan tag
270 $this->removeTagsForArchivedByUserId($this->getUser()->getId());
271
272 $this->getDoctrine()
273 ->getRepository('WallabagCoreBundle:Entry')
274 ->removeArchivedByUserId($this->getUser()->getId());
275 break;
263 } 276 }
264 277
265 $this->get('session')->getFlashBag()->add( 278 $this->get('session')->getFlashBag()->add(
@@ -300,6 +313,50 @@ class ConfigController extends Controller
300 } 313 }
301 314
302 /** 315 /**
316 * Remove all tags for a given user and cleanup orphan tags.
317 *
318 * @param int $userId
319 */
320 private function removeTagsForArchivedByUserId($userId)
321 {
322 $tags = $this->getDoctrine()->getRepository('WallabagCoreBundle:Tag')->findTagsForArchivedArticles($userId);
323
324 if (empty($tags)) {
325 return;
326 }
327
328 $this->getDoctrine()
329 ->getRepository('WallabagCoreBundle:Entry')
330 ->removeTags($userId, $tags);
331
332 // cleanup orphan tags
333 $em = $this->getDoctrine()->getManager();
334
335 foreach ($tags as $tag) {
336 if (count($tag->getEntries()) === 0) {
337 $em->remove($tag);
338 }
339 }
340
341 $em->flush();
342 }
343
344 private function removeAnnotationsForArchivedByUserId($userId)
345 {
346 $em = $this->getDoctrine()->getManager();
347
348 $archivedEntriesAnnotations = $this->getDoctrine()
349 ->getRepository('WallabagAnnotationBundle:Annotation')
350 ->findAllByArchivedEntriesAndUserId($userId);
351
352 foreach ($archivedEntriesAnnotations as $archivedEntriesAnnotation) {
353 $em->remove($archivedEntriesAnnotation);
354 }
355
356 $em->flush();
357 }
358
359 /**
303 * Validate that a rule can be edited/deleted by the current user. 360 * Validate that a rule can be edited/deleted by the current user.
304 * 361 *
305 * @param TaggingRule $rule 362 * @param TaggingRule $rule
diff --git a/src/Wallabag/CoreBundle/Repository/EntryRepository.php b/src/Wallabag/CoreBundle/Repository/EntryRepository.php
index 9325d261..1f22e901 100644
--- a/src/Wallabag/CoreBundle/Repository/EntryRepository.php
+++ b/src/Wallabag/CoreBundle/Repository/EntryRepository.php
@@ -371,4 +371,12 @@ class EntryRepository extends EntityRepository
371 ->setParameter('userId', $userId) 371 ->setParameter('userId', $userId)
372 ->execute(); 372 ->execute();
373 } 373 }
374
375 public function removeArchivedByUserId($userId)
376 {
377 $this->getEntityManager()
378 ->createQuery('DELETE FROM Wallabag\CoreBundle\Entity\Entry e WHERE e.user = :userId AND e.isArchived = TRUE')
379 ->setParameter('userId', $userId)
380 ->execute();
381 }
374} 382}
diff --git a/src/Wallabag/CoreBundle/Repository/TagRepository.php b/src/Wallabag/CoreBundle/Repository/TagRepository.php
index 2182df25..b78e244e 100644
--- a/src/Wallabag/CoreBundle/Repository/TagRepository.php
+++ b/src/Wallabag/CoreBundle/Repository/TagRepository.php
@@ -76,4 +76,24 @@ class TagRepository extends EntityRepository
76 ->getQuery() 76 ->getQuery()
77 ->getSingleResult(); 77 ->getSingleResult();
78 } 78 }
79
80 public function findTagsForArchivedArticles($userId)
81 {
82 $ids = $this->createQueryBuilder('t')
83 ->select('t.id')
84 ->leftJoin('t.entries', 'e')
85 ->where('e.user = :userId')->setParameter('userId', $userId)
86 ->andWhere('e.isArchived = true')
87 ->groupBy('t.id')
88 ->orderBy('t.slug')
89 ->getQuery()
90 ->getArrayResult();
91
92 $tags = [];
93 foreach ($ids as $id) {
94 $tags[] = $this->find($id);
95 }
96
97 return $tags;
98 }
79} 99}
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.da.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.da.yml
index 5d9e85e4..dfac7a65 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.da.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.da.yml
@@ -110,6 +110,7 @@ config:
110 # annotations: Remove ALL annotations 110 # annotations: Remove ALL annotations
111 # tags: Remove ALL tags 111 # tags: Remove ALL tags
112 # entries: Remove ALL entries 112 # entries: Remove ALL entries
113 # archived: Remove ALL archived entries
113 # confirm: Are you really really sure? (THIS CAN'T BE UNDONE) 114 # confirm: Are you really really sure? (THIS CAN'T BE UNDONE)
114 form_password: 115 form_password:
115 # description: "You can change your password here. Your new password should by at least 8 characters long." 116 # description: "You can change your password here. Your new password should by at least 8 characters long."
@@ -528,6 +529,7 @@ flashes:
528 # annotations_reset: Annotations reset 529 # annotations_reset: Annotations reset
529 # tags_reset: Tags reset 530 # tags_reset: Tags reset
530 # entries_reset: Entries reset 531 # entries_reset: Entries reset
532 # archived_reset: Archived entries deleted
531 entry: 533 entry:
532 notice: 534 notice:
533 # entry_already_saved: 'Entry already saved on %date%' 535 # entry_already_saved: 'Entry already saved on %date%'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.de.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.de.yml
index f1952a3e..0b9df325 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.de.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.de.yml
@@ -110,6 +110,7 @@ config:
110 annotations: Entferne ALLE Annotationen 110 annotations: Entferne ALLE Annotationen
111 tags: Entferne ALLE Tags 111 tags: Entferne ALLE Tags
112 entries: Entferne ALLE Einträge 112 entries: Entferne ALLE Einträge
113 # archived: Remove ALL archived entries
113 confirm: Bist du wirklich sicher? (DIES KANN NICHT RÜCKGÄNGIG GEMACHT WERDEN) 114 confirm: Bist du wirklich sicher? (DIES KANN NICHT RÜCKGÄNGIG GEMACHT WERDEN)
114 form_password: 115 form_password:
115 description: "Hier kannst du dein Kennwort ändern. Dieses sollte mindestens acht Zeichen enthalten." 116 description: "Hier kannst du dein Kennwort ändern. Dieses sollte mindestens acht Zeichen enthalten."
@@ -528,6 +529,7 @@ flashes:
528 annotations_reset: Anmerkungen zurücksetzen 529 annotations_reset: Anmerkungen zurücksetzen
529 tags_reset: Tags zurücksetzen 530 tags_reset: Tags zurücksetzen
530 entries_reset: Einträge zurücksetzen 531 entries_reset: Einträge zurücksetzen
532 # archived_reset: Archived entries deleted
531 entry: 533 entry:
532 notice: 534 notice:
533 entry_already_saved: 'Eintrag bereits am %date% gespeichert' 535 entry_already_saved: 'Eintrag bereits am %date% gespeichert'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.en.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.en.yml
index 8e7e3c2c..2fa3192e 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.en.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.en.yml
@@ -110,6 +110,7 @@ config:
110 annotations: Remove ALL annotations 110 annotations: Remove ALL annotations
111 tags: Remove ALL tags 111 tags: Remove ALL tags
112 entries: Remove ALL entries 112 entries: Remove ALL entries
113 archived: Remove ALL archived entries
113 confirm: Are you really sure? (THIS CAN'T BE UNDONE) 114 confirm: Are you really sure? (THIS CAN'T BE UNDONE)
114 form_password: 115 form_password:
115 description: "You can change your password here. Your new password should by at least 8 characters long." 116 description: "You can change your password here. Your new password should by at least 8 characters long."
@@ -528,6 +529,7 @@ flashes:
528 annotations_reset: Annotations reset 529 annotations_reset: Annotations reset
529 tags_reset: Tags reset 530 tags_reset: Tags reset
530 entries_reset: Entries reset 531 entries_reset: Entries reset
532 archived_reset: Archived entries deleted
531 entry: 533 entry:
532 notice: 534 notice:
533 entry_already_saved: 'Entry already saved on %date%' 535 entry_already_saved: 'Entry already saved on %date%'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.es.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.es.yml
index 3d65c311..ce581d89 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.es.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.es.yml
@@ -110,6 +110,7 @@ config:
110 annotations: Eliminar TODAS las anotaciones 110 annotations: Eliminar TODAS las anotaciones
111 tags: Eliminar TODAS las etiquetas 111 tags: Eliminar TODAS las etiquetas
112 entries: Eliminar TODOS los artículos 112 entries: Eliminar TODOS los artículos
113 # archived: Remove ALL archived entries
113 confirm: ¿Estás completamente seguro? (NO SE PUEDE DESHACER) 114 confirm: ¿Estás completamente seguro? (NO SE PUEDE DESHACER)
114 form_password: 115 form_password:
115 description: "Puedes cambiar la contraseña aquí. Tu nueva contraseña debe tener al menos 8 caracteres." 116 description: "Puedes cambiar la contraseña aquí. Tu nueva contraseña debe tener al menos 8 caracteres."
@@ -528,6 +529,7 @@ flashes:
528 annotations_reset: Anotaciones reiniciadas 529 annotations_reset: Anotaciones reiniciadas
529 tags_reset: Etiquetas reiniciadas 530 tags_reset: Etiquetas reiniciadas
530 entries_reset: Artículos reiniciados 531 entries_reset: Artículos reiniciados
532 # archived_reset: Archived entries deleted
531 entry: 533 entry:
532 notice: 534 notice:
533 entry_already_saved: 'Artículo ya guardado el %fecha%' 535 entry_already_saved: 'Artículo ya guardado el %fecha%'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.fa.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.fa.yml
index 80500d19..3e3ee12c 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.fa.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.fa.yml
@@ -110,6 +110,7 @@ config:
110 # annotations: Remove ALL annotations 110 # annotations: Remove ALL annotations
111 # tags: Remove ALL tags 111 # tags: Remove ALL tags
112 # entries: Remove ALL entries 112 # entries: Remove ALL entries
113 # archived: Remove ALL archived entries
113 # confirm: Are you really really sure? (THIS CAN'T BE UNDONE) 114 # confirm: Are you really really sure? (THIS CAN'T BE UNDONE)
114 form_password: 115 form_password:
115 # description: "You can change your password here. Your new password should by at least 8 characters long." 116 # description: "You can change your password here. Your new password should by at least 8 characters long."
@@ -528,6 +529,7 @@ flashes:
528 # annotations_reset: Annotations reset 529 # annotations_reset: Annotations reset
529 # tags_reset: Tags reset 530 # tags_reset: Tags reset
530 # entries_reset: Entries reset 531 # entries_reset: Entries reset
532 # archived_reset: Archived entries deleted
531 entry: 533 entry:
532 notice: 534 notice:
533 entry_already_saved: 'این مقاله در تاریخ %date% ذخیره شده بود' 535 entry_already_saved: 'این مقاله در تاریخ %date% ذخیره شده بود'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.fr.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.fr.yml
index 4f49f777..074593a6 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.fr.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.fr.yml
@@ -110,6 +110,7 @@ config:
110 annotations: Supprimer TOUTES les annotations 110 annotations: Supprimer TOUTES les annotations
111 tags: Supprimer TOUS les tags 111 tags: Supprimer TOUS les tags
112 entries: Supprimer TOUS les articles 112 entries: Supprimer TOUS les articles
113 archived: Supprimer TOUS les articles archivés
113 confirm: Êtes-vous vraiment vraiment sûr ? (C'EST IRRÉVERSIBLE) 114 confirm: Êtes-vous vraiment vraiment sûr ? (C'EST IRRÉVERSIBLE)
114 form_password: 115 form_password:
115 description: "Vous pouvez changer ici votre mot de passe. Le mot de passe doit contenir au moins 8 caractères." 116 description: "Vous pouvez changer ici votre mot de passe. Le mot de passe doit contenir au moins 8 caractères."
@@ -528,6 +529,7 @@ flashes:
528 annotations_reset: Annotations supprimées 529 annotations_reset: Annotations supprimées
529 tags_reset: Tags supprimés 530 tags_reset: Tags supprimés
530 entries_reset: Articles supprimés 531 entries_reset: Articles supprimés
532 archived_reset: Articles archivés supprimés
531 entry: 533 entry:
532 notice: 534 notice:
533 entry_already_saved: "Article déjà sauvegardé le %date%" 535 entry_already_saved: "Article déjà sauvegardé le %date%"
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.it.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.it.yml
index 992ff71c..0d86756a 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.it.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.it.yml
@@ -110,6 +110,7 @@ config:
110 # annotations: Remove ALL annotations 110 # annotations: Remove ALL annotations
111 # tags: Remove ALL tags 111 # tags: Remove ALL tags
112 # entries: Remove ALL entries 112 # entries: Remove ALL entries
113 # archived: Remove ALL archived entries
113 # confirm: Are you really really sure? (THIS CAN'T BE UNDONE) 114 # confirm: Are you really really sure? (THIS CAN'T BE UNDONE)
114 form_password: 115 form_password:
115 # description: "You can change your password here. Your new password should by at least 8 characters long." 116 # description: "You can change your password here. Your new password should by at least 8 characters long."
@@ -528,6 +529,7 @@ flashes:
528 # annotations_reset: Annotations reset 529 # annotations_reset: Annotations reset
529 # tags_reset: Tags reset 530 # tags_reset: Tags reset
530 # entries_reset: Entries reset 531 # entries_reset: Entries reset
532 # archived_reset: Archived entries deleted
531 entry: 533 entry:
532 notice: 534 notice:
533 entry_already_saved: 'Contenuto già salvato in data %date%' 535 entry_already_saved: 'Contenuto già salvato in data %date%'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.oc.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.oc.yml
index f6488565..d2949c50 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.oc.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.oc.yml
@@ -110,6 +110,7 @@ config:
110 annotations: Levar TOTAS las anotacions 110 annotations: Levar TOTAS las anotacions
111 tags: Levar TOTAS las etiquetas 111 tags: Levar TOTAS las etiquetas
112 entries: Levar TOTES los articles 112 entries: Levar TOTES los articles
113 # archived: Remove ALL archived entries
113 confirm: Sètz vertadièrament segur ? (ES IRREVERSIBLE) 114 confirm: Sètz vertadièrament segur ? (ES IRREVERSIBLE)
114 form_password: 115 form_password:
115 description: "Podètz cambiar vòstre senhal aquí. Vòstre senhal deu èsser long d'almens 8 caractèrs." 116 description: "Podètz cambiar vòstre senhal aquí. Vòstre senhal deu èsser long d'almens 8 caractèrs."
@@ -528,6 +529,7 @@ flashes:
528 annotations_reset: Anotacions levadas 529 annotations_reset: Anotacions levadas
529 tags_reset: Etiquetas levadas 530 tags_reset: Etiquetas levadas
530 entries_reset: Articles levats 531 entries_reset: Articles levats
532 # archived_reset: Archived entries deleted
531 entry: 533 entry:
532 notice: 534 notice:
533 entry_already_saved: 'Article ja salvargardat lo %date%' 535 entry_already_saved: 'Article ja salvargardat lo %date%'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.pl.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.pl.yml
index eda9bbbf..1f512942 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.pl.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.pl.yml
@@ -110,6 +110,7 @@ config:
110 annotations: Usuń WSZYSTKIE adnotacje 110 annotations: Usuń WSZYSTKIE adnotacje
111 tags: Usuń WSZYSTKIE tagi 111 tags: Usuń WSZYSTKIE tagi
112 entries: usuń WSZYTSTKIE wpisy 112 entries: usuń WSZYTSTKIE wpisy
113 # archived: Remove ALL archived entries
113 confirm: Jesteś pewien? (tej operacji NIE MOŻNA cofnąć) 114 confirm: Jesteś pewien? (tej operacji NIE MOŻNA cofnąć)
114 form_password: 115 form_password:
115 description: "Tutaj możesz zmienić swoje hasło. Twoje nowe hasło powinno mieć conajmniej 8 znaków." 116 description: "Tutaj możesz zmienić swoje hasło. Twoje nowe hasło powinno mieć conajmniej 8 znaków."
@@ -528,6 +529,7 @@ flashes:
528 annotations_reset: Zresetuj adnotacje 529 annotations_reset: Zresetuj adnotacje
529 tags_reset: Zresetuj tagi 530 tags_reset: Zresetuj tagi
530 entries_reset: Zresetuj wpisy 531 entries_reset: Zresetuj wpisy
532 # archived_reset: Archived entries deleted
531 entry: 533 entry:
532 notice: 534 notice:
533 entry_already_saved: 'Wpis już został dodany %date%' 535 entry_already_saved: 'Wpis już został dodany %date%'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.pt.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.pt.yml
index 8a7cc6f8..2e815230 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.pt.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.pt.yml
@@ -110,6 +110,7 @@ config:
110 # annotations: Remove ALL annotations 110 # annotations: Remove ALL annotations
111 # tags: Remove ALL tags 111 # tags: Remove ALL tags
112 # entries: Remove ALL entries 112 # entries: Remove ALL entries
113 # archived: Remove ALL archived entries
113 # confirm: Are you really really sure? (THIS CAN'T BE UNDONE) 114 # confirm: Are you really really sure? (THIS CAN'T BE UNDONE)
114 form_password: 115 form_password:
115 # description: "You can change your password here. Your new password should by at least 8 characters long." 116 # description: "You can change your password here. Your new password should by at least 8 characters long."
@@ -528,6 +529,7 @@ flashes:
528 # annotations_reset: Annotations reset 529 # annotations_reset: Annotations reset
529 # tags_reset: Tags reset 530 # tags_reset: Tags reset
530 # entries_reset: Entries reset 531 # entries_reset: Entries reset
532 # archived_reset: Archived entries deleted
531 entry: 533 entry:
532 notice: 534 notice:
533 entry_already_saved: 'Entrada já foi salva em %date%' 535 entry_already_saved: 'Entrada já foi salva em %date%'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.ro.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.ro.yml
index 52b6414f..16401efd 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.ro.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.ro.yml
@@ -110,6 +110,7 @@ config:
110 # annotations: Remove ALL annotations 110 # annotations: Remove ALL annotations
111 # tags: Remove ALL tags 111 # tags: Remove ALL tags
112 # entries: Remove ALL entries 112 # entries: Remove ALL entries
113 # archived: Remove ALL archived entries
113 # confirm: Are you really really sure? (THIS CAN'T BE UNDONE) 114 # confirm: Are you really really sure? (THIS CAN'T BE UNDONE)
114 form_password: 115 form_password:
115 # description: "You can change your password here. Your new password should by at least 8 characters long." 116 # description: "You can change your password here. Your new password should by at least 8 characters long."
@@ -528,6 +529,7 @@ flashes:
528 # annotations_reset: Annotations reset 529 # annotations_reset: Annotations reset
529 # tags_reset: Tags reset 530 # tags_reset: Tags reset
530 # entries_reset: Entries reset 531 # entries_reset: Entries reset
532 # archived_reset: Archived entries deleted
531 entry: 533 entry:
532 notice: 534 notice:
533 # entry_already_saved: 'Entry already saved on %date%' 535 # entry_already_saved: 'Entry already saved on %date%'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.tr.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.tr.yml
index bfb7e206..a4bf7dfe 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.tr.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.tr.yml
@@ -110,6 +110,7 @@ config:
110 # annotations: Remove ALL annotations 110 # annotations: Remove ALL annotations
111 # tags: Remove ALL tags 111 # tags: Remove ALL tags
112 # entries: Remove ALL entries 112 # entries: Remove ALL entries
113 # archived: Remove ALL archived entries
113 # confirm: Are you really really sure? (THIS CAN'T BE UNDONE) 114 # confirm: Are you really really sure? (THIS CAN'T BE UNDONE)
114 form_password: 115 form_password:
115 # description: "You can change your password here. Your new password should by at least 8 characters long." 116 # description: "You can change your password here. Your new password should by at least 8 characters long."
@@ -528,6 +529,7 @@ flashes:
528 # annotations_reset: Annotations reset 529 # annotations_reset: Annotations reset
529 # tags_reset: Tags reset 530 # tags_reset: Tags reset
530 # entries_reset: Entries reset 531 # entries_reset: Entries reset
532 # archived_reset: Archived entries deleted
531 entry: 533 entry:
532 notice: 534 notice:
533 entry_already_saved: 'Entry already saved on %date%' 535 entry_already_saved: 'Entry already saved on %date%'
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Config/index.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Config/index.html.twig
index 5d411fdd..708ff951 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Config/index.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Config/index.html.twig
@@ -229,6 +229,9 @@
229 <a href="{{ path('config_reset', { type: 'tags'}) }}" onclick="return confirm('{{ 'config.reset.confirm'|trans|escape('js') }}')" class="waves-effect waves-light btn red"> 229 <a href="{{ path('config_reset', { type: 'tags'}) }}" onclick="return confirm('{{ 'config.reset.confirm'|trans|escape('js') }}')" class="waves-effect waves-light btn red">
230 {{ 'config.reset.tags'|trans }} 230 {{ 'config.reset.tags'|trans }}
231 </a> 231 </a>
232 <a href="{{ path('config_reset', { type: 'archived'}) }}" onclick="return confirm('{{ 'config.reset.confirm'|trans|escape('js') }}')" class="waves-effect waves-light btn red">
233 {{ 'config.reset.archived'|trans }}
234 </a>
232 <a href="{{ path('config_reset', { type: 'entries'}) }}" onclick="return confirm('{{ 'config.reset.confirm'|trans|escape('js') }}')" class="waves-effect waves-light btn red"> 235 <a href="{{ path('config_reset', { type: 'entries'}) }}" onclick="return confirm('{{ 'config.reset.confirm'|trans|escape('js') }}')" class="waves-effect waves-light btn red">
233 {{ 'config.reset.entries'|trans }} 236 {{ 'config.reset.entries'|trans }}
234 </a> 237 </a>
diff --git a/tests/Wallabag/CoreBundle/Controller/ConfigControllerTest.php b/tests/Wallabag/CoreBundle/Controller/ConfigControllerTest.php
index 8f2ca1cb..b434a4c4 100644
--- a/tests/Wallabag/CoreBundle/Controller/ConfigControllerTest.php
+++ b/tests/Wallabag/CoreBundle/Controller/ConfigControllerTest.php
@@ -803,6 +803,82 @@ class ConfigControllerTest extends WallabagCoreTestCase
803 $this->assertEquals(0, $entryReset, 'Entries were reset'); 803 $this->assertEquals(0, $entryReset, 'Entries were reset');
804 } 804 }
805 805
806 public function testResetArchivedEntries()
807 {
808 $this->logInAs('empty');
809 $client = $this->getClient();
810
811 $em = $client->getContainer()->get('doctrine.orm.entity_manager');
812
813 $user = static::$kernel->getContainer()->get('security.token_storage')->getToken()->getUser();
814
815 $tag = new Tag();
816 $tag->setLabel('super');
817 $em->persist($tag);
818
819 $entry = new Entry($user);
820 $entry->setUrl('http://www.lemonde.fr/europe/article/2016/10/01/pour-le-psoe-chaque-election-s-est-transformee-en-une-agonie_5006476_3214.html');
821 $entry->setContent('Youhou');
822 $entry->setTitle('Youhou');
823 $entry->addTag($tag);
824 $em->persist($entry);
825
826 $annotation = new Annotation($user);
827 $annotation->setText('annotated');
828 $annotation->setQuote('annotated');
829 $annotation->setRanges([]);
830 $annotation->setEntry($entry);
831 $em->persist($annotation);
832
833 $tagArchived = new Tag();
834 $tagArchived->setLabel('super');
835 $em->persist($tagArchived);
836
837 $entryArchived = new Entry($user);
838 $entryArchived->setUrl('http://www.lemonde.fr/europe/article/2016/10/01/pour-le-psoe-chaque-election-s-est-transformee-en-une-agonie_5006476_3214.html');
839 $entryArchived->setContent('Youhou');
840 $entryArchived->setTitle('Youhou');
841 $entryArchived->addTag($tagArchived);
842 $entryArchived->setArchived(true);
843 $em->persist($entryArchived);
844
845 $annotationArchived = new Annotation($user);
846 $annotationArchived->setText('annotated');
847 $annotationArchived->setQuote('annotated');
848 $annotationArchived->setRanges([]);
849 $annotationArchived->setEntry($entryArchived);
850 $em->persist($annotationArchived);
851
852 $em->flush();
853
854 $crawler = $client->request('GET', '/config#set3');
855
856 $this->assertEquals(200, $client->getResponse()->getStatusCode());
857
858 $crawler = $client->click($crawler->selectLink('config.reset.archived')->link());
859
860 $this->assertEquals(302, $client->getResponse()->getStatusCode());
861 $this->assertContains('flashes.config.notice.archived_reset', $client->getContainer()->get('session')->getFlashBag()->get('notice')[0]);
862
863 $entryReset = $em
864 ->getRepository('WallabagCoreBundle:Entry')
865 ->countAllEntriesByUsername($user->getId());
866
867 $this->assertEquals(1, $entryReset, 'Entries were reset');
868
869 $tagReset = $em
870 ->getRepository('WallabagCoreBundle:Tag')
871 ->countAllTags($user->getId());
872
873 $this->assertEquals(1, $tagReset, 'Tags were reset');
874
875 $annotationsReset = $em
876 ->getRepository('WallabagAnnotationBundle:Annotation')
877 ->findAnnotationsByPageId($annotationArchived->getId(), $user->getId());
878
879 $this->assertEmpty($annotationsReset, 'Annotations were reset');
880 }
881
806 public function testResetEntriesCascade() 882 public function testResetEntriesCascade()
807 { 883 {
808 $this->logInAs('empty'); 884 $this->logInAs('empty');