use Wallabag\CoreBundle\Entity\Entry;
use Wallabag\CoreBundle\Entity\Tag;
use Wallabag\CoreBundle\Service\Extractor;
+use Symfony\Component\Security\Core\Exception\AccessDeniedException;
class WallabagRestController extends Controller
{
+ /**
+ * @param Entry $entry
+ * @param string $tags
+ */
+ private function assignTagsToEntry(Entry $entry, $tags)
+ {
+ foreach (explode(',', $tags) as $label) {
+ $label = trim($label);
+ $tagEntity = $this
+ ->getDoctrine()
+ ->getRepository('WallabagCoreBundle:Tag')
+ ->findOneByLabel($label);
+
+ if (is_null($tagEntity)) {
+ $tagEntity = new Tag($this->getUser());
+ $tagEntity->setLabel($label);
+ }
+
+ // only add the tag on the entry if the relation doesn't exist
+ if (!$entry->getTags()->contains($tagEntity)) {
+ $entry->addTag($tagEntity);
+ }
+ }
+ }
+
/**
* Retrieve salt for a giver user.
*
*/
public function getEntryAction(Entry $entry)
{
+ if ($entry->getUser()->getId() != $this->getUser()->getId()) {
+ throw $this->createAccessDeniedException();
+ }
+
$json = $this->get('serializer')->serialize($entry, 'json');
return new Response($json, 200, array('application/json'));
*/
public function postEntriesAction(Request $request)
{
- //TODO gérer si on passe les tags
$url = $request->request->get('url');
$content = Extractor::extract($url);
$entry->setUrl($url);
$entry->setTitle($request->request->get('title') ?: $content->getTitle());
$entry->setContent($content->getBody());
+
+ $this->assignTagsToEntry($entry, $request->request->get('tags', array()));
+
$em = $this->getDoctrine()->getManager();
$em->persist($entry);
$em->flush();
*/
public function patchEntriesAction(Entry $entry, Request $request)
{
+ if ($entry->getUser()->getId() != $this->getUser()->getId()) {
+ throw $this->createAccessDeniedException();
+ }
+
$title = $request->request->get("title");
- $tags = $request->request->get("tags", array());
$isArchived = $request->request->get("archive");
$isStarred = $request->request->get("star");
$entry->setStarred($isStarred);
}
+ $this->assignTagsToEntry($entry, $request->request->get('tags', array()));
+
$em = $this->getDoctrine()->getManager();
$em->flush();
*/
public function deleteEntriesAction(Entry $entry)
{
+ if ($entry->getUser()->getId() != $this->getUser()->getId()) {
+ throw $this->createAccessDeniedException();
+ }
+
$em = $this->getDoctrine()->getManager();
$em->remove($entry);
$em->flush();
*/
public function getEntriesTagsAction(Entry $entry)
{
+ var_dump($entry->getUser()->getId());
+ var_dump($this->getUser()->getId());
+ if ($entry->getUser()->getId() != $this->getUser()->getId()) {
+ throw $this->createAccessDeniedException();
+ }
+
$json = $this->get('serializer')->serialize($entry->getTags(), 'json');
return new Response($json, 200, array('application/json'));
*/
public function postEntriesTagsAction(Request $request, Entry $entry)
{
- $tags = explode(',', $request->request->get('tags'));
-
- foreach ($tags as $label) {
- $tagEntity = $this
- ->getDoctrine()
- ->getRepository('WallabagCoreBundle:Tag')
- ->findOneByLabel($label);
-
- if (is_null($tagEntity)) {
- $tagEntity = new Tag();
- $tagEntity->setLabel($label);
- }
-
- // only add the tag on the entry if the relation doesn't exist
- if (!$entry->getTags()->contains($tagEntity)) {
- $entry->addTag($tagEntity);
- }
+ if ($entry->getUser()->getId() != $this->getUser()->getId()) {
+ throw $this->createAccessDeniedException();
}
+ $this->assignTagsToEntry($entry, $request->request->get('tags', array()));
+
$em = $this->getDoctrine()->getManager();
$em->persist($entry);
$em->flush();
*/
public function deleteEntriesTagsAction(Entry $entry, Tag $tag)
{
+ if ($entry->getUser()->getId() != $this->getUser()->getId()) {
+ throw $this->createAccessDeniedException();
+ }
+
+ $entry->removeTag($tag);
+ $em = $this->getDoctrine()->getManager();
+ $em->persist($entry);
+ $em->flush();
+
+ $json = $this->get('serializer')->serialize($entry, 'json');
+
+ return new Response($json, 200, array('application/json'));
}
/**
* Retrieve all tags
*
- * @ApiDoc(
- * {"name"="user", "dataType"="integer", "requirement"="\w+", "description"="The user ID"}
- * )
+ * @ApiDoc()
*/
- public function getTagsUserAction()
+ public function getTagsAction()
{
+ $json = $this->get('serializer')->serialize($this->getUser()->getTags(), 'json');
+
+ return new Response($json, 200, array('application/json'));
}
/**
*/
public function deleteTagAction(Tag $tag)
{
+ if ($tag->getUser()->getId() != $this->getUser()->getId()) {
+ throw $this->createAccessDeniedException();
+ }
+
+ $em = $this->getDoctrine()->getManager();
+ $em->remove($tag);
+ $em->flush();
+
+ $json = $this->get('serializer')->serialize($tag, 'json');
+
+ return new Response($json, 200, array('application/json'));
}
}