mirror of
https://github.com/wallabag/wallabag.git
synced 2024-11-30 04:51:01 +00:00
remove tag from entry #1377
This commit is contained in:
parent
ae5b37ef2e
commit
567421af50
5 changed files with 74 additions and 2 deletions
|
@ -55,6 +55,26 @@ class TagController extends Controller
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes tag from entry.
|
||||||
|
*
|
||||||
|
* @Route("/remove-tag/{entry}/{tag}", requirements={"entry" = "\d+", "tag" = "\d+"}, name="remove_tag")
|
||||||
|
*
|
||||||
|
* @return \Symfony\Component\HttpFoundation\Response
|
||||||
|
*/
|
||||||
|
public function removeTagFromEntry(Request $request, Entry $entry, Tag $tag)
|
||||||
|
{
|
||||||
|
$entry->removeTag($tag);
|
||||||
|
$em = $this->getDoctrine()->getManager();
|
||||||
|
$em->flush();
|
||||||
|
if (count($tag->getEntries()) == 0) {
|
||||||
|
$em->remove($tag);
|
||||||
|
}
|
||||||
|
$em->flush();
|
||||||
|
|
||||||
|
return $this->redirect($request->headers->get('referer'));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Shows tags for current user.
|
* Shows tags for current user.
|
||||||
*
|
*
|
||||||
|
|
|
@ -107,4 +107,14 @@ class Tag
|
||||||
{
|
{
|
||||||
return $this->entries->contains($entry);
|
return $this->entries->contains($entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get entries for this tag.
|
||||||
|
*
|
||||||
|
* @return ArrayCollection<Entry>
|
||||||
|
*/
|
||||||
|
public function getEntries()
|
||||||
|
{
|
||||||
|
return $this->entries;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,4 +51,20 @@ class TagRepository extends EntityRepository
|
||||||
->getQuery()
|
->getQuery()
|
||||||
->getResult();
|
->getResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used only in test case to get a tag for our entry.
|
||||||
|
*
|
||||||
|
* @return Tag
|
||||||
|
*/
|
||||||
|
public function findOnebyEntryAndLabel($entry, $label)
|
||||||
|
{
|
||||||
|
return $this->createQueryBuilder('t')
|
||||||
|
->leftJoin('t.entries', 'e')
|
||||||
|
->where('e.id = :entryId')->setParameter('entryId', $entry->getId())
|
||||||
|
->andWhere('t.label = :label')->setParameter('label', $label)
|
||||||
|
->setMaxResults(1)
|
||||||
|
->getQuery()
|
||||||
|
->getSingleResult();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -159,7 +159,7 @@ main {
|
||||||
<div id="list">
|
<div id="list">
|
||||||
{% for tag in entry.tags %}
|
{% for tag in entry.tags %}
|
||||||
<div class="chip">
|
<div class="chip">
|
||||||
{{ tag.label }}
|
{{ tag.label }} <a href="{{ path('remove_tag', { 'entry': entry.id, 'tag': tag.id }) }}"><i class="chip">✘</i></a>
|
||||||
</div>
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -6,6 +6,8 @@ use Wallabag\CoreBundle\Tests\WallabagCoreTestCase;
|
||||||
|
|
||||||
class TagControllerTest extends WallabagCoreTestCase
|
class TagControllerTest extends WallabagCoreTestCase
|
||||||
{
|
{
|
||||||
|
public $tagName = 'opensource';
|
||||||
|
|
||||||
public function testList()
|
public function testList()
|
||||||
{
|
{
|
||||||
$this->logInAs('admin');
|
$this->logInAs('admin');
|
||||||
|
@ -31,7 +33,7 @@ class TagControllerTest extends WallabagCoreTestCase
|
||||||
$form = $crawler->filter('button[id=tag_save]')->form();
|
$form = $crawler->filter('button[id=tag_save]')->form();
|
||||||
|
|
||||||
$data = array(
|
$data = array(
|
||||||
'tag[label]' => 'opensource',
|
'tag[label]' => $this->tagName,
|
||||||
);
|
);
|
||||||
|
|
||||||
$client->submit($form, $data);
|
$client->submit($form, $data);
|
||||||
|
@ -65,4 +67,28 @@ class TagControllerTest extends WallabagCoreTestCase
|
||||||
|
|
||||||
$this->assertEquals(2, count($newEntry->getTags()));
|
$this->assertEquals(2, count($newEntry->getTags()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testRemoveTagFromEntry()
|
||||||
|
{
|
||||||
|
$this->logInAs('admin');
|
||||||
|
$client = $this->getClient();
|
||||||
|
|
||||||
|
$entry = $client->getContainer()
|
||||||
|
->get('doctrine.orm.entity_manager')
|
||||||
|
->getRepository('WallabagCoreBundle:Entry')
|
||||||
|
->findOneByUsernameAndNotArchived('admin');
|
||||||
|
|
||||||
|
$tag = $client->getContainer()
|
||||||
|
->get('doctrine.orm.entity_manager')
|
||||||
|
->getRepository('WallabagCoreBundle:Tag')
|
||||||
|
->findOnebyEntryAndLabel($entry, $this->tagName);
|
||||||
|
|
||||||
|
$client->request('GET', '/remove-tag/'.$entry->getId().'/'.$tag->getId());
|
||||||
|
|
||||||
|
$this->assertEquals(302, $client->getResponse()->getStatusCode());
|
||||||
|
|
||||||
|
$client->request('GET', '/remove-tag/'.$entry->getId().'/'.$tag->getId());
|
||||||
|
|
||||||
|
$this->assertEquals(404, $client->getResponse()->getStatusCode());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue