Merge pull request #5381 from wallabag/tag-search-results

This commit is contained in:
Jérémy Benoist 2022-05-13 07:09:18 +02:00 committed by GitHub
commit ebfbdb4519
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 65 additions and 0 deletions

View file

@ -2,6 +2,7 @@
namespace Wallabag\CoreBundle\Controller; namespace Wallabag\CoreBundle\Controller;
use Doctrine\ORM\QueryBuilder;
use Pagerfanta\Adapter\ArrayAdapter; use Pagerfanta\Adapter\ArrayAdapter;
use Pagerfanta\Exception\OutOfRangeCurrentPageException; use Pagerfanta\Exception\OutOfRangeCurrentPageException;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
@ -190,4 +191,35 @@ class TagController extends Controller
return $this->redirect($redirectUrl); return $this->redirect($redirectUrl);
} }
/**
* Tag search results with the current search term.
*
* @Route("/tag/search/{filter}", name="tag_this_search")
*
* @return \Symfony\Component\HttpFoundation\Response
*/
public function tagThisSearchAction($filter, Request $request)
{
$currentRoute = $request->query->has('currentRoute') ? $request->query->get('currentRoute') : '';
/** @var QueryBuilder $qb */
$qb = $this->get('wallabag_core.entry_repository')->getBuilderForSearchByUser($this->getUser()->getId(), $filter, $currentRoute);
$em = $this->getDoctrine()->getManager();
$entries = $qb->getQuery()->getResult();
foreach ($entries as $entry) {
$this->get('wallabag_core.tags_assigner')->assignTagsToEntry(
$entry,
$filter
);
$em->persist($entry);
}
$em->flush();
return $this->redirect($this->get('wallabag_core.helper.redirect')->to($request->headers->get('referer'), '', true));
}
} }

View file

@ -237,6 +237,7 @@ entry:
toogle_as_star: Toggle starred toogle_as_star: Toggle starred
delete: Delete delete: Delete
export_title: Export export_title: Export
assign_search_tag: Assign this search as a tag to each result
filters: filters:
title: Filters title: Filters
status_label: Status status_label: Status

View file

@ -34,6 +34,7 @@
{% include "@WallabagCore/themes/common/Entry/_feed_link.html.twig" %} {% include "@WallabagCore/themes/common/Entry/_feed_link.html.twig" %}
{% endif %} {% endif %}
</div> </div>
{% if currentRoute == 'search' %}<div><a href="{{ path('tag_this_search', {'filter': searchTerm, 'currentRoute': app.request.get('currentRoute') }) }}" title="{{ 'entry.list.assign_search_tag'|trans }}">{{ 'entry.list.assign_search_tag'|trans }}</a></div>{% endif %}
{% if entries.getNbPages > 1 %} {% if entries.getNbPages > 1 %}
{{ pagerfanta(entries, 'twitter_bootstrap_translated', {'proximity': 1}) }} {{ pagerfanta(entries, 'twitter_bootstrap_translated', {'proximity': 1}) }}
{% endif %} {% endif %}

View file

@ -476,4 +476,35 @@ class TagControllerTest extends WallabagCoreTestCase
$this->assertNotFalse(array_search('cache', $tags, true), 'Tag cache is assigned to the entry'); $this->assertNotFalse(array_search('cache', $tags, true), 'Tag cache is assigned to the entry');
$this->assertNotFalse(array_search('caché', $tags, true), 'Tag caché is assigned to the entry'); $this->assertNotFalse(array_search('caché', $tags, true), 'Tag caché is assigned to the entry');
} }
public function testAssignTagsOnSearchResults()
{
$this->logInAs('admin');
$client = $this->getClient();
// Search on unread list
$crawler = $client->request('GET', '/unread/list');
$form = $crawler->filter('form[name=search]')->form();
$data = [
'search_entry[term]' => 'title',
];
$crawler = $client->submit($form, $data);
$client->click($crawler->selectLink('entry.list.assign_search_tag')->link());
$client->followRedirect();
$entries = $client->getContainer()
->get('doctrine.orm.entity_manager')
->getRepository('WallabagCoreBundle:Entry')
->getBuilderForSearchByUser($this->getLoggedInUserId(), 'title', 'unread')
->getQuery()->getResult();
foreach ($entries as $entry) {
$tags = $entry->getTagsLabel();
$this->assertContains('title', $tags);
}
}
} }