diff options
Diffstat (limited to 'src/Wallabag/CoreBundle/Controller')
-rw-r--r-- | src/Wallabag/CoreBundle/Controller/ConfigController.php | 63 | ||||
-rw-r--r-- | src/Wallabag/CoreBundle/Controller/EntryController.php | 16 | ||||
-rw-r--r-- | src/Wallabag/CoreBundle/Controller/TagController.php | 7 |
3 files changed, 63 insertions, 23 deletions
diff --git a/src/Wallabag/CoreBundle/Controller/ConfigController.php b/src/Wallabag/CoreBundle/Controller/ConfigController.php index 907bf78e..0e61c642 100644 --- a/src/Wallabag/CoreBundle/Controller/ConfigController.php +++ b/src/Wallabag/CoreBundle/Controller/ConfigController.php | |||
@@ -248,9 +248,9 @@ 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()->getDatabasePlatform() instanceof \Doctrine\DBAL\Platforms\SqlitePlatform) { |
254 | $this->getDoctrine()->getRepository('WallabagAnnotationBundle:Annotation')->removeAllByUserId($this->getUser()->getId()); | 254 | $this->getDoctrine()->getRepository('WallabagAnnotationBundle:Annotation')->removeAllByUserId($this->getUser()->getId()); |
255 | } | 255 | } |
256 | 256 | ||
@@ -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()->getDatabasePlatform() instanceof \Doctrine\DBAL\Platforms\SqlitePlatform) { | ||
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( |
@@ -271,14 +284,13 @@ class ConfigController extends Controller | |||
271 | } | 284 | } |
272 | 285 | ||
273 | /** | 286 | /** |
274 | * Remove all tags for a given user and cleanup orphan tags. | 287 | * Remove all tags for given tags and a given user and cleanup orphan tags. |
275 | * | 288 | * |
276 | * @param int $userId | 289 | * @param array $tags |
290 | * @param int $userId | ||
277 | */ | 291 | */ |
278 | private function removeAllTagsByUserId($userId) | 292 | private function removeAllTagsByStatusAndUserId($tags, $userId) |
279 | { | 293 | { |
280 | $tags = $this->getDoctrine()->getRepository('WallabagCoreBundle:Tag')->findAllTags($userId); | ||
281 | |||
282 | if (empty($tags)) { | 294 | if (empty($tags)) { |
283 | return; | 295 | return; |
284 | } | 296 | } |
@@ -300,6 +312,43 @@ class ConfigController extends Controller | |||
300 | } | 312 | } |
301 | 313 | ||
302 | /** | 314 | /** |
315 | * Remove all tags for a given user and cleanup orphan tags. | ||
316 | * | ||
317 | * @param int $userId | ||
318 | */ | ||
319 | private function removeAllTagsByUserId($userId) | ||
320 | { | ||
321 | $tags = $this->getDoctrine()->getRepository('WallabagCoreBundle:Tag')->findAllTags($userId); | ||
322 | $this->removeAllTagsByStatusAndUserId($tags, $userId); | ||
323 | } | ||
324 | |||
325 | /** | ||
326 | * Remove all tags for a given user and cleanup orphan tags. | ||
327 | * | ||
328 | * @param int $userId | ||
329 | */ | ||
330 | private function removeTagsForArchivedByUserId($userId) | ||
331 | { | ||
332 | $tags = $this->getDoctrine()->getRepository('WallabagCoreBundle:Tag')->findForArchivedArticlesByUser($userId); | ||
333 | $this->removeAllTagsByStatusAndUserId($tags, $userId); | ||
334 | } | ||
335 | |||
336 | private function removeAnnotationsForArchivedByUserId($userId) | ||
337 | { | ||
338 | $em = $this->getDoctrine()->getManager(); | ||
339 | |||
340 | $archivedEntriesAnnotations = $this->getDoctrine() | ||
341 | ->getRepository('WallabagAnnotationBundle:Annotation') | ||
342 | ->findAllArchivedEntriesByUser($userId); | ||
343 | |||
344 | foreach ($archivedEntriesAnnotations as $archivedEntriesAnnotation) { | ||
345 | $em->remove($archivedEntriesAnnotation); | ||
346 | } | ||
347 | |||
348 | $em->flush(); | ||
349 | } | ||
350 | |||
351 | /** | ||
303 | * Validate that a rule can be edited/deleted by the current user. | 352 | * Validate that a rule can be edited/deleted by the current user. |
304 | * | 353 | * |
305 | * @param TaggingRule $rule | 354 | * @param TaggingRule $rule |
diff --git a/src/Wallabag/CoreBundle/Controller/EntryController.php b/src/Wallabag/CoreBundle/Controller/EntryController.php index f7398e69..fafa49f1 100644 --- a/src/Wallabag/CoreBundle/Controller/EntryController.php +++ b/src/Wallabag/CoreBundle/Controller/EntryController.php | |||
@@ -53,22 +53,17 @@ class EntryController extends Controller | |||
53 | 53 | ||
54 | /** | 54 | /** |
55 | * Fetch content and update entry. | 55 | * Fetch content and update entry. |
56 | * In case it fails, entry will return to avod loosing the data. | 56 | * In case it fails, $entry->getContent will return an error message. |
57 | * | 57 | * |
58 | * @param Entry $entry | 58 | * @param Entry $entry |
59 | * @param string $prefixMessage Should be the translation key: entry_saved or entry_reloaded | 59 | * @param string $prefixMessage Should be the translation key: entry_saved or entry_reloaded |
60 | * | ||
61 | * @return Entry | ||
62 | */ | 60 | */ |
63 | private function updateEntry(Entry $entry, $prefixMessage = 'entry_saved') | 61 | private function updateEntry(Entry $entry, $prefixMessage = 'entry_saved') |
64 | { | 62 | { |
65 | // put default title in case of fetching content failed | ||
66 | $entry->setTitle('No title found'); | ||
67 | |||
68 | $message = 'flashes.entry.notice.'.$prefixMessage; | 63 | $message = 'flashes.entry.notice.'.$prefixMessage; |
69 | 64 | ||
70 | try { | 65 | try { |
71 | $entry = $this->get('wallabag_core.content_proxy')->updateEntry($entry, $entry->getUrl()); | 66 | $this->get('wallabag_core.content_proxy')->updateEntry($entry, $entry->getUrl()); |
72 | } catch (\Exception $e) { | 67 | } catch (\Exception $e) { |
73 | $this->get('logger')->error('Error while saving an entry', [ | 68 | $this->get('logger')->error('Error while saving an entry', [ |
74 | 'exception' => $e, | 69 | 'exception' => $e, |
@@ -79,8 +74,6 @@ class EntryController extends Controller | |||
79 | } | 74 | } |
80 | 75 | ||
81 | $this->get('session')->getFlashBag()->add('notice', $message); | 76 | $this->get('session')->getFlashBag()->add('notice', $message); |
82 | |||
83 | return $entry; | ||
84 | } | 77 | } |
85 | 78 | ||
86 | /** | 79 | /** |
@@ -227,7 +220,7 @@ class EntryController extends Controller | |||
227 | public function showUnreadAction(Request $request, $page) | 220 | public function showUnreadAction(Request $request, $page) |
228 | { | 221 | { |
229 | // load the quickstart if no entry in database | 222 | // load the quickstart if no entry in database |
230 | if ($page == 1 && $this->get('wallabag_core.entry_repository')->countAllEntriesByUsername($this->getUser()->getId()) == 0) { | 223 | if ($page == 1 && $this->get('wallabag_core.entry_repository')->countAllEntriesByUser($this->getUser()->getId()) == 0) { |
231 | return $this->redirect($this->generateUrl('quickstart')); | 224 | return $this->redirect($this->generateUrl('quickstart')); |
232 | } | 225 | } |
233 | 226 | ||
@@ -321,8 +314,7 @@ class EntryController extends Controller | |||
321 | 314 | ||
322 | $pagerAdapter = new DoctrineORMAdapter($qb->getQuery(), true, false); | 315 | $pagerAdapter = new DoctrineORMAdapter($qb->getQuery(), true, false); |
323 | 316 | ||
324 | $entries = $this->get('wallabag_core.helper.prepare_pager_for_entries') | 317 | $entries = $this->get('wallabag_core.helper.prepare_pager_for_entries')->prepare($pagerAdapter); |
325 | ->prepare($pagerAdapter, $page); | ||
326 | 318 | ||
327 | try { | 319 | try { |
328 | $entries->setCurrentPage($page); | 320 | $entries->setCurrentPage($page); |
diff --git a/src/Wallabag/CoreBundle/Controller/TagController.php b/src/Wallabag/CoreBundle/Controller/TagController.php index 8a093289..9422bae4 100644 --- a/src/Wallabag/CoreBundle/Controller/TagController.php +++ b/src/Wallabag/CoreBundle/Controller/TagController.php | |||
@@ -28,7 +28,7 @@ class TagController extends Controller | |||
28 | $form->handleRequest($request); | 28 | $form->handleRequest($request); |
29 | 29 | ||
30 | if ($form->isSubmitted() && $form->isValid()) { | 30 | if ($form->isSubmitted() && $form->isValid()) { |
31 | $this->get('wallabag_core.content_proxy')->assignTagsToEntry( | 31 | $this->get('wallabag_core.tags_assigner')->assignTagsToEntry( |
32 | $entry, | 32 | $entry, |
33 | $form->get('label')->getData() | 33 | $form->get('label')->getData() |
34 | ); | 34 | ); |
@@ -70,7 +70,7 @@ class TagController extends Controller | |||
70 | $em->flush(); | 70 | $em->flush(); |
71 | } | 71 | } |
72 | 72 | ||
73 | $redirectUrl = $this->get('wallabag_core.helper.redirect')->to($request->headers->get('referer')); | 73 | $redirectUrl = $this->get('wallabag_core.helper.redirect')->to($request->headers->get('referer'), '', true); |
74 | 74 | ||
75 | return $this->redirect($redirectUrl); | 75 | return $this->redirect($redirectUrl); |
76 | } | 76 | } |
@@ -125,8 +125,7 @@ class TagController extends Controller | |||
125 | 125 | ||
126 | $pagerAdapter = new ArrayAdapter($entriesByTag); | 126 | $pagerAdapter = new ArrayAdapter($entriesByTag); |
127 | 127 | ||
128 | $entries = $this->get('wallabag_core.helper.prepare_pager_for_entries') | 128 | $entries = $this->get('wallabag_core.helper.prepare_pager_for_entries')->prepare($pagerAdapter); |
129 | ->prepare($pagerAdapter, $page); | ||
130 | 129 | ||
131 | try { | 130 | try { |
132 | $entries->setCurrentPage($page); | 131 | $entries->setCurrentPage($page); |