mirror of https://github.com/wallabag/wallabag.git
parent
2984c0dfcc
commit
4feca1ccd5
|
@ -222,4 +222,29 @@ class TagController extends Controller
|
||||||
|
|
||||||
return $this->redirect($this->get('wallabag_core.helper.redirect')->to($request->headers->get('referer'), '', true));
|
return $this->redirect($this->get('wallabag_core.helper.redirect')->to($request->headers->get('referer'), '', true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Delete a given tag for the current user.
|
||||||
|
*
|
||||||
|
* @Route("/tag/delete/{slug}", name="tag_delete")
|
||||||
|
* @ParamConverter("tag", options={"mapping": {"slug": "slug"}})
|
||||||
|
*
|
||||||
|
* @return \Symfony\Component\HttpFoundation\Response
|
||||||
|
*/
|
||||||
|
public function removeTagAction(Tag $tag, Request $request) {
|
||||||
|
foreach ($tag->getEntriesByUserId($this->getUser()->getId()) as $entry) {
|
||||||
|
$this->get('wallabag_core.entry_repository')->removeTag($this->getUser()->getId(), $tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
// remove orphan tag in case no entries are associated to it
|
||||||
|
if (0 === \count($tag->getEntries())) {
|
||||||
|
$em = $this->getDoctrine()->getManager();
|
||||||
|
$em->remove($tag);
|
||||||
|
$em->flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
$redirectUrl = $this->get('wallabag_core.helper.redirect')->to($request->headers->get('referer'), '', true);
|
||||||
|
|
||||||
|
return $this->redirect($redirectUrl);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,6 +26,9 @@
|
||||||
<i class="material-icons">mode_edit</i>
|
<i class="material-icons">mode_edit</i>
|
||||||
</a>
|
</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
<a href="{{ path('tag_delete', {'slug': tag.slug})}}">
|
||||||
|
<i class="material-icons">mode_delete</i>
|
||||||
|
</a>
|
||||||
{% if app.user.config.feedToken %}
|
{% if app.user.config.feedToken %}
|
||||||
<a rel="alternate" type="application/atom+xml" href="{{ path('tag_feed', {'username': app.user.username, 'token': app.user.config.feedToken, 'slug': tag.slug}) }}" class="card-tag-icon"><i class="material-icons">rss_feed</i></a>
|
<a rel="alternate" type="application/atom+xml" href="{{ path('tag_feed', {'username': app.user.username, 'token': app.user.config.feedToken, 'slug': tag.slug}) }}" class="card-tag-icon"><i class="material-icons">rss_feed</i></a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
|
@ -141,6 +141,53 @@ class TagControllerTest extends WallabagCoreTestCase
|
||||||
$this->assertNull($tag, $this->tagName . ' was removed because it begun an orphan tag');
|
$this->assertNull($tag, $this->tagName . ' was removed because it begun an orphan tag');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testRemoveTag()
|
||||||
|
{
|
||||||
|
$this->logInAs('admin');
|
||||||
|
$client = $this->getClient();
|
||||||
|
|
||||||
|
$tag = new Tag();
|
||||||
|
$tag->setLabel($this->tagName);
|
||||||
|
|
||||||
|
$entry = new Entry($this->getLoggedInUser());
|
||||||
|
$entry->setUrl('http://0.0.0.0/foo');
|
||||||
|
$entry->addTag($tag);
|
||||||
|
$this->getEntityManager()->persist($entry);
|
||||||
|
|
||||||
|
$entry2 = new Entry($this->getLoggedInUser());
|
||||||
|
$entry2->setUrl('http://0.0.0.0/bar');
|
||||||
|
$entry2->addTag($tag);
|
||||||
|
$this->getEntityManager()->persist($entry2);
|
||||||
|
$this->getEntityManager()->flush();
|
||||||
|
$this->getEntityManager()->clear();
|
||||||
|
|
||||||
|
$client->request('GET', '/tag/delete/' . $tag->getSlug());
|
||||||
|
|
||||||
|
$tag = $client->getContainer()
|
||||||
|
->get('doctrine.orm.entity_manager')
|
||||||
|
->getRepository('WallabagCoreBundle:Tag')
|
||||||
|
->findOneByLabel($this->tagName);
|
||||||
|
|
||||||
|
$this->assertNull($tag, $this->tagName . ' was removed because it begun an orphan tag');
|
||||||
|
|
||||||
|
$user = $this->getEntityManager()
|
||||||
|
->getRepository('WallabagUserBundle:User')
|
||||||
|
->findOneByUserName('admin');
|
||||||
|
|
||||||
|
$entry = $client->getContainer()
|
||||||
|
->get('doctrine.orm.entity_manager')
|
||||||
|
->getRepository('WallabagCoreBundle:Entry')
|
||||||
|
->findByUrlAndUserId('http://0.0.0.0/foo', $user->getId());
|
||||||
|
|
||||||
|
$entry2 = $client->getContainer()
|
||||||
|
->get('doctrine.orm.entity_manager')
|
||||||
|
->getRepository('WallabagCoreBundle:Entry')
|
||||||
|
->findByUrlAndUserId('http://0.0.0.0/bar', $user->getId());
|
||||||
|
|
||||||
|
$this->assertEmpty($entry->getTagsLabel());
|
||||||
|
$this->assertEmpty($entry2->getTagsLabel());
|
||||||
|
}
|
||||||
|
|
||||||
public function testShowEntriesForTagAction()
|
public function testShowEntriesForTagAction()
|
||||||
{
|
{
|
||||||
$this->logInAs('admin');
|
$this->logInAs('admin');
|
||||||
|
|
Loading…
Reference in New Issue