use Wallabag\CoreBundle\Form\Type\EditEntryType;
use Wallabag\CoreBundle\Form\Type\NewEntryType;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Cache;
+use Wallabag\CoreBundle\Event\EntrySavedEvent;
+use Wallabag\CoreBundle\Event\EntryDeletedEvent;
class EntryController extends Controller
{
/**
- * @param Entry $entry
+ * Fetch content and update entry.
+ * In case it fails, entry will return to avod loosing the data.
+ *
+ * @param Entry $entry
+ * @param string $prefixMessage Should be the translation key: entry_saved or entry_reloaded
+ *
+ * @return Entry
*/
- private function updateEntry(Entry $entry)
+ private function updateEntry(Entry $entry, $prefixMessage = 'entry_saved')
{
+ // put default title in case of fetching content failed
+ $entry->setTitle('No title found');
+
+ $message = 'flashes.entry.notice.'.$prefixMessage;
+
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;
+ $message = 'flashes.entry.notice.'.$prefixMessage.'_failed';
}
- return true;
+ $this->get('session')->getFlashBag()->add('notice', $message);
+
+ return $entry;
}
/**
return $this->redirect($this->generateUrl('view', ['id' => $existingEntry->getId()]));
}
- $message = 'flashes.entry.notice.entry_saved';
- if (false === $this->updateEntry($entry)) {
- $message = 'flashes.entry.notice.entry_saved_failed';
- }
+ $this->updateEntry($entry);
+
+ $em = $this->getDoctrine()->getManager();
+ $em->persist($entry);
+ $em->flush();
- $this->get('session')->getFlashBag()->add('notice', $message);
+ // entry saved, dispatch event about it!
+ $this->get('event_dispatcher')->dispatch(EntrySavedEvent::NAME, new EntrySavedEvent($entry));
return $this->redirect($this->generateUrl('homepage'));
}
if (false === $this->checkIfEntryAlreadyExists($entry)) {
$this->updateEntry($entry);
+
+ $em = $this->getDoctrine()->getManager();
+ $em->persist($entry);
+ $em->flush();
+
+ // entry saved, dispatch event about it!
+ $this->get('event_dispatcher')->dispatch(EntrySavedEvent::NAME, new EntrySavedEvent($entry));
}
return $this->redirect($this->generateUrl('homepage'));
{
$this->checkUserAction($entry);
- $message = 'flashes.entry.notice.entry_reloaded';
- if (false === $this->updateEntry($entry)) {
- $message = 'flashes.entry.notice.entry_reload_failed';
+ $this->updateEntry($entry, 'entry_reloaded');
+
+ // if refreshing entry failed, don't save it
+ if ($this->getParameter('wallabag_core.fetching_error_message') === $entry->getContent()) {
+ $bag = $this->get('session')->getFlashBag();
+ $bag->clear();
+ $bag->add('notice', 'flashes.entry.notice.entry_reloaded_failed');
+
+ return $this->redirect($this->generateUrl('view', ['id' => $entry->getId()]));
}
- $this->get('session')->getFlashBag()->add(
- 'notice',
- $message
- );
+ $em = $this->getDoctrine()->getManager();
+ $em->persist($entry);
+ $em->flush();
+
+ // entry saved, dispatch event about it!
+ $this->get('event_dispatcher')->dispatch(EntrySavedEvent::NAME, new EntrySavedEvent($entry));
return $this->redirect($this->generateUrl('view', ['id' => $entry->getId()]));
}
UrlGeneratorInterface::ABSOLUTE_PATH
);
+ // entry deleted, dispatch event about it!
+ $this->get('event_dispatcher')->dispatch(EntryDeletedEvent::NAME, new EntryDeletedEvent($entry));
+
$em = $this->getDoctrine()->getManager();
$em->remove($entry);
$em->flush();
}
return $this->render(
- '@WallabagCore/themes/share.html.twig',
+ '@WallabagCore/themes/common/Entry/share.html.twig',
['entry' => $entry]
);
}