namespace Wallabag\CoreBundle\Controller;
use Pagerfanta\Adapter\DoctrineORMAdapter;
+use Pagerfanta\Exception\OutOfRangeCurrentPageException;
use Pagerfanta\Pagerfanta;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
{
try {
$entry = $this->get('wallabag_core.content_proxy')->updateEntry($entry, $entry->getUrl());
+
$em = $this->getDoctrine()->getManager();
$em->persist($entry);
$em->flush();
} catch (\Exception $e) {
+ $this->get('logger')->error('Error while saving an entry', [
+ 'exception' => $e,
+ 'entry' => $entry,
+ ]);
+
return false;
}
if (false !== $existingEntry) {
$this->get('session')->getFlashBag()->add(
'notice',
- $this->get('translator')->trans('flashes.entry.notice.entry_already_saved', array('%date%' => $existingEntry->getCreatedAt()->format('d-m-Y')))
+ $this->get('translator')->trans('flashes.entry.notice.entry_already_saved', ['%date%' => $existingEntry->getCreatedAt()->format('d-m-Y')])
);
- return $this->redirect($this->generateUrl('view', array('id' => $existingEntry->getId())));
+ return $this->redirect($this->generateUrl('view', ['id' => $existingEntry->getId()]));
}
- $this->updateEntry($entry);
- $this->get('session')->getFlashBag()->add(
- 'notice',
- 'flashes.entry.notice.entry_saved'
- );
+ $message = 'flashes.entry.notice.entry_saved';
+ if (false === $this->updateEntry($entry)) {
+ $message = 'flashes.entry.notice.entry_saved_failed';
+ }
+
+ $this->get('session')->getFlashBag()->add('notice', $message);
return $this->redirect($this->generateUrl('homepage'));
}
- return $this->render('WallabagCoreBundle:Entry:new_form.html.twig', array(
+ return $this->render('WallabagCoreBundle:Entry:new_form.html.twig', [
'form' => $form->createView(),
- ));
+ ]);
}
/**
'flashes.entry.notice.entry_updated'
);
- return $this->redirect($this->generateUrl('view', array('id' => $entry->getId())));
+ return $this->redirect($this->generateUrl('view', ['id' => $entry->getId()]));
}
- return $this->render('WallabagCoreBundle:Entry:edit.html.twig', array(
+ return $this->render('WallabagCoreBundle:Entry:edit.html.twig', [
'form' => $form->createView(),
- ));
+ ]);
}
/**
$entries = new Pagerfanta($pagerAdapter);
$entries->setMaxPerPage($this->getUser()->getConfig()->getItemsPerPage());
- $entries->setCurrentPage($page);
+ try {
+ $entries->setCurrentPage($page);
+ } catch (OutOfRangeCurrentPageException $e) {
+ if ($page > 1) {
+ return $this->redirect($this->generateUrl($type, ['page' => $entries->getNbPages()]), 302);
+ }
+ }
return $this->render(
'WallabagCoreBundle:Entry:entries.html.twig',
- array(
+ [
'form' => $form->createView(),
'entries' => $entries,
'currentPage' => $page,
- )
+ ]
);
}
return $this->render(
'WallabagCoreBundle:Entry:entry.html.twig',
- array('entry' => $entry)
+ ['entry' => $entry]
);
}
$message
);
- return $this->redirect($this->generateUrl('view', array('id' => $entry->getId())));
+ return $this->redirect($this->generateUrl('view', ['id' => $entry->getId()]));
}
/**
$message
);
- return $this->redirect($request->headers->get('referer'));
+ $redirectUrl = $this->get('wallabag_core.helper.redirect')->to($request->headers->get('referer'));
+
+ return $this->redirect($redirectUrl);
}
/**
$message
);
- return $this->redirect($request->headers->get('referer'));
+ $redirectUrl = $this->get('wallabag_core.helper.redirect')->to($request->headers->get('referer'));
+
+ return $this->redirect($redirectUrl);
}
/**
// to avoid redirecting to the deleted entry. Ugh.
$url = $this->generateUrl(
'view',
- array('id' => $entry->getId()),
- UrlGeneratorInterface::ABSOLUTE_URL
+ ['id' => $entry->getId()],
+ UrlGeneratorInterface::ABSOLUTE_PATH
);
$em = $this->getDoctrine()->getManager();
'flashes.entry.notice.entry_deleted'
);
- // don't redirect user to the deleted entry
- return $this->redirect($url !== $request->headers->get('referer') ? $request->headers->get('referer') : $this->generateUrl('homepage'));
+ // don't redirect user to the deleted entry (check that the referer doesn't end with the same url)
+ $referer = $request->headers->get('referer');
+ $to = (1 !== preg_match('#'.$url.'$#i', $referer) ? $referer : null);
+
+ $redirectUrl = $this->get('wallabag_core.helper.redirect')->to($to);
+
+ return $this->redirect($redirectUrl);
}
/**
/**
* Check for existing entry, if it exists, redirect to it with a message.
*
- * @param $entry
+ * @param Entry $entry
*
- * @return array|bool
+ * @return Entry|bool
*/
- private function checkIfEntryAlreadyExists($entry)
+ private function checkIfEntryAlreadyExists(Entry $entry)
{
return $this->get('wallabag_core.entry_repository')->findByUrlAndUserId($entry->getUrl(), $this->getUser()->getId());
}