Merged list and search methods

This commit is contained in:
Nicolas Lœuillet 2017-05-02 15:27:58 +02:00
parent d01dc5a81e
commit b5b6877976
15 changed files with 102 additions and 157 deletions

View file

@ -513,7 +513,6 @@ user:
# delete_confirm: Are you sure?
# back_to_list: Back to list
search:
# label: Filter
# placeholder: Filter by username or email
error:

View file

@ -513,7 +513,6 @@ user:
delete_confirm: Bist du sicher?
back_to_list: Zurück zur Liste
search:
# label: Filter
# placeholder: Filter by username or email
error:

View file

@ -513,7 +513,6 @@ user:
delete_confirm: Are you sure?
back_to_list: Back to list
search:
label: Filter
placeholder: Filter by username or email
error:

View file

@ -513,7 +513,6 @@ user:
delete_confirm: ¿Estás seguro?
back_to_list: Volver a la lista
search:
# label: Filter
# placeholder: Filter by username or email
error:

View file

@ -513,7 +513,6 @@ user:
# delete_confirm: Are you sure?
# back_to_list: Back to list
search:
# label: Filter
# placeholder: Filter by username or email
error:

View file

@ -46,7 +46,7 @@ footer:
social: "Social"
powered_by: "propulsé par"
about: "À propos"
stats: Depuis le %user_creation%, vous avez lu %nb_archives% articles. Ce qui fait %per_day% par jour !
stats: "Depuis le %user_creation%, vous avez lu %nb_archives% articles. Ce qui fait %per_day% par jour !"
config:
page_title: "Configuration"
@ -71,16 +71,16 @@ config:
300_word: "Je lis environ 300 mots par minute"
400_word: "Je lis environ 400 mots par minute"
action_mark_as_read:
label: 'Où souhaitez-vous être redirigé après avoir marqué un article comme lu ?'
redirect_homepage: "À la page d'accueil"
redirect_current_page: 'À la page courante'
pocket_consumer_key_label: Clé dauthentification Pocket pour importer les données
android_configuration: Configurez votre application Android
help_theme: "L'affichage de wallabag est personnalisable. C'est ici que vous choisissez le thème que vous préférez."
help_items_per_page: "Vous pouvez définir le nombre d'articles affichés sur chaque page."
label: "Où souhaitez-vous être redirigé après avoir marqué un article comme lu ?"
redirect_homepage: "À la page daccueil"
redirect_current_page: "À la page courante"
pocket_consumer_key_label: "Clé dauthentification Pocket pour importer les données"
android_configuration: "Configurez votre application Android"
help_theme: "Laffichage de wallabag est personnalisable. Cest ici que vous choisissez le thème que vous préférez."
help_items_per_page: "Vous pouvez définir le nombre darticles affichés sur chaque page."
help_reading_speed: "wallabag calcule une durée de lecture pour chaque article. Vous pouvez définir ici, grâce à cette liste déroulante, si vous lisez plus ou moins vite. wallabag recalculera la durée de lecture de chaque article."
help_language: "Vous pouvez définir la langue de l'interface de wallabag."
help_pocket_consumer_key: "Nécessaire pour l'import depuis Pocket. Vous pouvez le créer depuis votre compte Pocket."
help_language: "Vous pouvez définir la langue de linterface de wallabag."
help_pocket_consumer_key: "Nécessaire pour limport depuis Pocket. Vous pouvez le créer depuis votre compte Pocket."
form_rss:
description: "Les flux RSS fournis par wallabag vous permettent de lire vos articles sauvegardés dans votre lecteur de flux préféré. Pour pouvoir les utiliser, vous devez dabord créer un jeton."
token_label: "Jeton RSS"
@ -100,18 +100,18 @@ config:
twoFactorAuthentication_label: "Double authentification"
help_twoFactorAuthentication: "Si vous activez 2FA, à chaque tentative de connexion à wallabag, vous recevrez un code par email."
delete:
title: Supprimer mon compte (attention danger !)
description: Si vous confirmez la suppression de votre compte, TOUS les articles, TOUS les tags, TOUTES les annotations et votre compte seront DÉFINITIVEMENT supprimé (c'est IRRÉVERSIBLE). Vous serez ensuite déconnecté.
confirm: Vous êtes vraiment sûr ? (C'EST IRRÉVERSIBLE)
button: 'Supprimer mon compte'
title: "Supprimer mon compte (attention danger !)"
description: "Si vous confirmez la suppression de votre compte, TOUS les articles, TOUS les tags, TOUTES les annotations et votre compte seront DÉFINITIVEMENT supprimé (cest IRRÉVERSIBLE). Vous serez ensuite déconnecté."
confirm: "Vous êtes vraiment sûr ? (CEST IRRÉVERSIBLE)"
button: "Supprimer mon compte"
reset:
title: Réinitialisation (attention danger !)
description: En cliquant sur les boutons ci-dessous vous avez la possibilité de supprimer certaines informations de votre compte. Attention, ces actions sont IRRÉVERSIBLES !
annotations: Supprimer TOUTES les annotations
tags: Supprimer TOUS les tags
entries: Supprimer TOUS les articles
archived: Supprimer TOUS les articles archivés
confirm: Êtes-vous vraiment vraiment sûr ? (C'EST IRRÉVERSIBLE)
title: "Réinitialisation (attention danger !)"
description: "En cliquant sur les boutons ci-dessous vous avez la possibilité de supprimer certaines informations de votre compte. Attention, ces actions sont IRRÉVERSIBLES !"
annotations: "Supprimer TOUTES les annotations"
tags: "Supprimer TOUS les tags"
entries: "Supprimer TOUS les articles"
archived: "Supprimer TOUS les articles archivés"
confirm: "Êtes-vous vraiment vraiment sûr ? (CEST IRRÉVERSIBLE)"
form_password:
description: "Vous pouvez changer ici votre mot de passe. Le mot de passe doit contenir au moins 8 caractères."
old_password_label: "Mot de passe actuel"
@ -163,7 +163,7 @@ entry:
archived: "Articles lus"
filtered: "Articles filtrés"
filtered_tags: "Articles filtrés par tags :"
filtered_search: 'Articles filtrés par recherche :'
filtered_search: "Articles filtrés par recherche :"
untagged: "Article sans tag"
list:
number_on_the_page: "{0} Il ny a pas darticle.|{1} Il y a un article.|]1,Inf[ Il y a %count% articles."
@ -187,7 +187,7 @@ entry:
preview_picture_label: "A une photo"
preview_picture_help: "Photo"
language_label: "Langue"
http_status_label: 'Statut HTTP'
http_status_label: "Statut HTTP"
reading_time:
label: "Durée de lecture en minutes"
from: "de"
@ -297,32 +297,32 @@ howto:
bookmarklet:
description: "Glissez et déposez ce lien dans votre barre de favoris :"
shortcuts:
page_description: Voici les raccourcis disponibles dans wallabag.
shortcut: Raccourci
action: Action
all_pages_title: Raccourcis disponibles dans toutes les pages
go_unread: Afficher les articles non lus
go_starred: Afficher les articles favoris
go_archive: Afficher les articles lus
go_all: Afficher tous les articles
go_tags: Afficher les tags
go_config: Aller à la configuration
go_import: Aller aux imports
go_developers: Aller à la section Développeurs
go_howto: Afficher l'aide (cette page !)
go_logout: Se déconnecter
list_title: Raccourcis disponibles dans les pages de liste
search: Afficher le formulaire de recherche
article_title: Raccourcis disponibles quand on affiche un article
open_original: Ouvrir l'URL originale de l'article
toggle_favorite: Changer le statut Favori de l'article
toggle_archive: Changer le status Lu de l'article
delete: Supprimer l'article
material_title: Raccourcis disponibles avec le thème Material uniquement
add_link: Ajouter un nouvel article
hide_form: Masquer le formulaire courant (recherche ou nouvel article)
arrows_navigation: Naviguer à travers les articles
open_article: Afficher l'article sélectionné
page_description: "Voici les raccourcis disponibles dans wallabag."
shortcut: "Raccourci"
action: "Action"
all_pages_title: "Raccourcis disponibles dans toutes les pages"
go_unread: "Afficher les articles non lus"
go_starred: "Afficher les articles favoris"
go_archive: "Afficher les articles lus"
go_all: "Afficher tous les articles"
go_tags: "Afficher les tags"
go_config: "Aller à la configuration"
go_import: "Aller aux imports"
go_developers: "Aller à la section Développeurs"
go_howto: "Afficher laide (cette page !)"
go_logout: "Se déconnecter"
list_title: "Raccourcis disponibles dans les pages de liste"
search: "Afficher le formulaire de recherche"
article_title: "Raccourcis disponibles quand on affiche un article"
open_original: "Ouvrir lURL originale de larticle"
toggle_favorite: "Changer le statut Favori de larticle"
toggle_archive: "Changer le status Lu de larticle"
delete: "Supprimer larticle"
material_title: "Raccourcis disponibles avec le thème Material uniquement"
add_link: "Ajouter un nouvel article"
hide_form: "Masquer le formulaire courant (recherche ou nouvel article)"
arrows_navigation: "Naviguer à travers les articles"
open_article: "Afficher larticle sélectionné"
quickstart:
page_title: "Pour bien débuter"
@ -384,8 +384,8 @@ tag:
number_on_the_page: "{0} Il ny a pas de tag.|{1} Il y a un tag.|]1,Inf[ Il y a %count% tags."
see_untagged_entries: "Voir les articles sans tag"
new:
add: 'Ajouter'
placeholder: 'Vous pouvez ajouter plusieurs tags, séparés par une virgule.'
add: "Ajouter"
placeholder: "Vous pouvez ajouter plusieurs tags, séparés par une virgule."
import:
page_title: "Importer"
@ -419,7 +419,7 @@ import:
how_to: "Choisissez le fichier de votre export Readability et cliquez sur le bouton ci-dessous pour limporter."
worker:
enabled: "Les imports sont asynchrones. Une fois limport commencé un worker externe traitera les messages un par un. Le service activé est :"
download_images_warning: "Vous avez configuré le téléchagement des images pour vos articles. Combiné à l'import classique, cette opération peut être très très longue (voire échouer). Nous vous conseillons <strong>vivement</strong> d'activer les imports asynchrones."
download_images_warning: "Vous avez configuré le téléchagement des images pour vos articles. Combiné à limport classique, cette opération peut être très très longue (voire échouer). Nous vous conseillons <strong>vivement</strong> dactiver les imports asynchrones."
firefox:
page_title: "Import > Firefox"
description: "Cet outil va vous permettre dimporter tous vos marques-pages de Firefox. Ouvrez le panneau des marques-pages (Ctrl+Maj+O), puis dans « Importation et sauvegarde », choisissez « Sauvegarde… ». Vous allez récupérer un fichier .json. </p>"
@ -488,16 +488,16 @@ developer:
back: "Retour"
user:
page_title: Gestion des utilisateurs
new_user: Créer un nouvel utilisateur
edit_user: Éditer un utilisateur existant
description: Ici vous pouvez gérer vos utilisateurs (création, mise à jour et suppression)
page_title: "Gestion des utilisateurs"
new_user: "Créer un nouvel utilisateur"
edit_user: "Éditer un utilisateur existant"
description: "Ici vous pouvez gérer vos utilisateurs (création, mise à jour et suppression)"
list:
actions: Actions
edit_action: Éditer
yes: Oui
no: Non
create_new_one: Créer un nouvel utilisateur
actions: "Actions"
edit_action: "Éditer"
yes: "Oui"
no: "Non"
create_new_one: "Créer un nouvel utilisateur"
form:
username_label: "Nom dutilisateur"
name_label: "Nom"
@ -513,11 +513,10 @@ user:
delete_confirm: "Voulez-vous vraiment ?"
back_to_list: "Revenir à la liste"
search:
label: Filtrer
placeholder: Filtrer par nom d'utilisateur ou email
placeholder: "Filtrer par nom dutilisateur ou email"
error:
page_title: Une erreur est survenue
page_title: "Une erreur est survenue"
flashes:
config:
@ -530,10 +529,10 @@ flashes:
tagging_rules_updated: "Règles mises à jour"
tagging_rules_deleted: "Règle supprimée"
rss_token_updated: "Jeton RSS mis à jour"
annotations_reset: Annotations supprimées
tags_reset: Tags supprimés
entries_reset: Articles supprimés
archived_reset: Articles archivés supprimés
annotations_reset: "Annotations supprimées"
tags_reset: "Tags supprimés"
entries_reset: "Articles supprimés"
archived_reset: "Articles archivés supprimés"
entry:
notice:
entry_already_saved: "Article déjà sauvegardé le %date%"
@ -565,6 +564,6 @@ flashes:
client_deleted: "Client %name% supprimé"
user:
notice:
added: 'Utilisateur "%username%" ajouté'
updated: 'Utilisateur "%username%" mis à jour'
deleted: 'Utilisateur "%username%" supprimé'
added: "Utilisateur \"%username%\" ajouté"
updated: "Utilisateur \"%username%\" mis à jour"
deleted: "Utilisateur \"%username%\" supprimé"

View file

@ -513,7 +513,6 @@ user:
# delete_confirm: Are you sure?
# back_to_list: Back to list
search:
# label: Filter
# placeholder: Filter by username or email
error:

View file

@ -513,7 +513,6 @@ user:
delete_confirm: 'Sètz segur ?'
back_to_list: 'Tornar a la lista'
search:
# label: Filter
# placeholder: Filter by username or email
error:

View file

@ -513,7 +513,6 @@ user:
delete_confirm: Jesteś pewien?
back_to_list: Powrót do listy
search:
# label: Filter
# placeholder: Filter by username or email
error:

View file

@ -513,7 +513,6 @@ user:
delete_confirm: 'Tem certeza?'
back_to_list: 'Voltar para a lista'
search:
# label: Filter
# placeholder: Filter by username or email
error:

View file

@ -513,7 +513,6 @@ user:
# delete_confirm: Are you sure?
# back_to_list: Back to list
search:
# label: Filter
# placeholder: Filter by username or email
error:

View file

@ -513,7 +513,6 @@ user:
# delete_confirm: Are you sure?
# back_to_list: Back to list
search:
# label: Filter
# placeholder: Filter by username or email
error:

View file

@ -19,38 +19,6 @@ use Wallabag\UserBundle\Form\SearchUserType;
*/
class ManageController extends Controller
{
/**
* Lists all User entities.
*
* @Route("/list/{page}", name="user_index")
* @Method("GET")
*
* @param int $page
*
* @return \Symfony\Component\HttpFoundation\RedirectResponse|\Symfony\Component\HttpFoundation\Response
*/
public function indexAction($page = 1)
{
$em = $this->getDoctrine()->getManager();
$qb = $em->getRepository('WallabagUserBundle:User')->createQueryBuilder('u');
$pagerAdapter = new DoctrineORMAdapter($qb->getQuery(), true, false);
$pagerFanta = new Pagerfanta($pagerAdapter);
$pagerFanta->setMaxPerPage(50);
try {
$pagerFanta->setCurrentPage($page);
} catch (OutOfRangeCurrentPageException $e) {
if ($page > 1) {
return $this->redirect($this->generateUrl('user_index', ['page' => $pagerFanta->getNbPages()]), 302);
}
}
return $this->render('WallabagUserBundle:Manage:index.html.twig', array(
'users' => $pagerFanta,
));
}
/**
* Creates a new User entity.
*
@ -169,52 +137,44 @@ class ManageController extends Controller
* @param Request $request
* @param int $page
*
* @Route("/search/{page}", name="user-search", defaults={"page" = 1})
* @Route("/list/{page}", name="user_index", defaults={"page" = 1})
*
* Default parameter for page is hardcoded (in duplication of the defaults from the Route)
* because this controller is also called inside the layout template without any page as argument
*
* @return \Symfony\Component\HttpFoundation\Response
*/
public function searchFormAction(Request $request, $page = 1, $currentRoute = null)
public function searchFormAction(Request $request, $page = 1)
{
// fallback to retrieve currentRoute from query parameter instead of injected one (when using inside a template)
if (null === $currentRoute && $request->query->has('currentRoute')) {
$currentRoute = $request->query->get('currentRoute');
}
$em = $this->getDoctrine()->getManager();
$qb = $em->getRepository('WallabagUserBundle:User')->createQueryBuilder('u');
$form = $this->createForm(SearchUserType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$this->get('logger')->info('searching users');
$em = $this->getDoctrine()->getManager();
$searchTerm = (isset($request->get('search_user')['term']) ? $request->get('search_user')['term'] : '');
$qb = $em->getRepository('WallabagUserBundle:User')->getQueryBuilderForSearch($searchTerm);
$pagerAdapter = new DoctrineORMAdapter($qb->getQuery(), true, false);
$pagerFanta = new Pagerfanta($pagerAdapter);
$pagerFanta->setMaxPerPage(50);
try {
$pagerFanta->setCurrentPage($page);
} catch (OutOfRangeCurrentPageException $e) {
if ($page > 1) {
return $this->redirect($this->generateUrl('user_index', ['page' => $pagerFanta->getNbPages()]), 302);
}
}
return $this->render('WallabagUserBundle:Manage:index.html.twig', array(
'users' => $pagerFanta,
));
}
return $this->render('WallabagUserBundle:Manage:search_form.html.twig', [
'form' => $form->createView(),
'currentRoute' => $currentRoute,
$pagerAdapter = new DoctrineORMAdapter($qb->getQuery(), true, false);
$pagerFanta = new Pagerfanta($pagerAdapter);
$pagerFanta->setMaxPerPage(50);
try {
$pagerFanta->setCurrentPage($page);
} catch (OutOfRangeCurrentPageException $e) {
if ($page > 1) {
return $this->redirect($this->generateUrl('user_index', ['page' => $pagerFanta->getNbPages()]), 302);
}
}
return $this->render('WallabagUserBundle:Manage:index.html.twig', [
'searchForm' => $form->createView(),
'users' => $pagerFanta,
]);
}
}

View file

@ -16,7 +16,19 @@
</div>
<div class="col s6">
<div class="input-field">
{{ render(controller("WallabagUserBundle:Manage:searchForm", {'currentRoute': app.request.attributes.get('_route')})) }}
<form name="search_users" method="GET" action="{{ path('user_index')}}">
{% if form_errors(searchForm) %}
<span class="black-text">{{ form_errors(searchForm) }}</span>
{% endif %}
{% if form_errors(searchForm.term) %}
<span class="black-text">{{ form_errors(searchForm.term) }}</span>
{% endif %}
{{ form_widget(searchForm.term, { 'attr': {'autocomplete': 'off', 'placeholder': 'user.search.placeholder'} }) }}
{{ form_rest(searchForm) }}
</form>
</div>
</div>

View file

@ -1,15 +0,0 @@
<form name="search_users" method="GET" action="{{ path('user-search')}}">
{% if form_errors(form) %}
<span class="black-text">{{ form_errors(form) }}</span>
{% endif %}
{% if form_errors(form.term) %}
<span class="black-text">{{ form_errors(form.term) }}</span>
{% endif %}
<i class="material-icons prefix">search</i>
{{ form_widget(form.term, { 'attr': {'autocomplete': 'off', 'placeholder': 'user.search.placeholder'} }) }}
<label for="search_user_term" class="active">{{ 'user.search.label' | trans }}</label>
{{ form_rest(form) }}
</form>