mirror of
https://github.com/wallabag/wallabag.git
synced 2025-08-06 17:41:01 +00:00
Added action to tag search results
This commit is contained in:
parent
88fd7afeb5
commit
5077c46e4e
4 changed files with 69 additions and 0 deletions
|
@ -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 = (null !== $request->query->get('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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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 to results
|
||||||
filters:
|
filters:
|
||||||
title: Filters
|
title: Filters
|
||||||
status_label: Status
|
status_label: Status
|
||||||
|
|
|
@ -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 %}
|
||||||
|
|
|
@ -476,4 +476,39 @@ 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();
|
||||||
|
|
||||||
|
$entry = new Entry($this->getLoggedInUser());
|
||||||
|
$entry->setUrl('https://wallabag/');
|
||||||
|
$entry->setTitle('title');
|
||||||
|
$this->getEntityManager()->persist($entry);
|
||||||
|
$this->getEntityManager()->flush();
|
||||||
|
|
||||||
|
// 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);
|
||||||
|
|
||||||
|
$crawler = $client->click($crawler->selectLink('entry.list.assign_search_tag')->link());
|
||||||
|
$crawler = $client->followRedirect();
|
||||||
|
|
||||||
|
$entries = $client->getContainer()
|
||||||
|
->get('doctrine.orm.entity_manager')
|
||||||
|
->getRepository('WallabagCoreBundle:Entry')
|
||||||
|
->getBuilderForSearchByUser($this->getLoggedInUserId(), 'title', 'unread');
|
||||||
|
|
||||||
|
foreach ($entries as $entry) {
|
||||||
|
$tags = $entry->getTags()->toArray();
|
||||||
|
$this->assertStringContainsString('title', $tags);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue