Skip to content

Commit 5ded6a0

Browse files
committed
Add bulk actions to broken link and image tables
1 parent d75e144 commit 5ded6a0

File tree

5 files changed

+674
-7
lines changed

5 files changed

+674
-7
lines changed

README.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@ Liens Morts Detector est une extension WordPress qui détecte les liens et image
55
## Fonctionnalités
66
- Vérification automatique des liens `<a>` grâce à WP‑Cron, et déclenchement manuel des images `<img>` (traitées ensuite en arrière-plan)
77
- Planification quotidienne, hebdomadaire ou mensuelle
8-
- Tableau de bord listant les liens et images cassés avec statistiques
9-
- Actions rapides pour modifier une URL ou retirer un lien directement depuis la liste
8+
- Tableau de bord listant les liens et images cassés avec statistiques
9+
- Actions groupées pour relancer une vérification ou purger plusieurs entrées en une seule fois
10+
- Actions rapides pour modifier une URL ou retirer un lien directement depuis la liste
1011
- Options avancées : exclusion de domaines, plages horaires de repos, mode debug
1112

1213
## Installation
@@ -17,6 +18,7 @@ Liens Morts Detector est une extension WordPress qui détecte les liens et image
1718
## Utilisation
1819
- Les liens sont vérifiés automatiquement selon la fréquence choisie, tandis que les images nécessitent de lancer un scan manuel depuis le rapport (le traitement se poursuit ensuite en arrière-plan).
1920
- Les liens ou images détectés comme cassés apparaissent dans une table permettant la modification rapide de l’URL ou la suppression du lien.
21+
- Des actions groupées (relancer une vérification ou supprimer) sont disponibles au-dessus des tableaux pour traiter plusieurs éléments simultanément.
2022
- Des réglages avancés permettent d’exclure certains domaines, de limiter l’analyse à des plages horaires et d’activer un mode debug pour le suivi.
2123

2224
## Hooks disponibles

liens-morts-detector-jlg/includes/blc-admin-pages.php

Lines changed: 110 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,94 @@ function blc_render_action_modal() {
8585
<?php
8686
}
8787

88+
/**
89+
* Renders notices after processing bulk actions on list tables.
90+
*
91+
* @param array $result Bulk action processing result array.
92+
* @param string $context Context identifier (`link` or `image`).
93+
*/
94+
function blc_render_bulk_action_notice($result, $context) {
95+
if (!is_array($result)) {
96+
return;
97+
}
98+
99+
$action = isset($result['action']) ? (string) $result['action'] : '';
100+
$error = isset($result['error']) ? (string) $result['error'] : '';
101+
102+
if ($action === '' && $error === '') {
103+
return;
104+
}
105+
106+
$count = isset($result['count']) ? (int) $result['count'] : 0;
107+
$count_display = function_exists('number_format_i18n')
108+
? number_format_i18n($count)
109+
: (string) $count;
110+
111+
$message = '';
112+
$class = 'notice notice-success is-dismissible';
113+
114+
if ($error !== '') {
115+
$class = 'notice notice-error is-dismissible';
116+
117+
switch ($error) {
118+
case 'invalid_nonce':
119+
$message = esc_html__("La sécurité de la requête n'a pas pu être vérifiée. Merci de réessayer.", 'liens-morts-detector-jlg');
120+
break;
121+
case 'no_ids':
122+
$class = 'notice notice-warning is-dismissible';
123+
$message = esc_html__('Veuillez sélectionner au moins un élément avant d\'appliquer une action groupée.', 'liens-morts-detector-jlg');
124+
break;
125+
case 'db_error':
126+
$message = esc_html__("L'action groupée a échoué suite à une erreur de base de données.", 'liens-morts-detector-jlg');
127+
break;
128+
case 'missing_db':
129+
$message = esc_html__("La base de données est indisponible pour exécuter cette action.", 'liens-morts-detector-jlg');
130+
break;
131+
case 'unknown_action':
132+
default:
133+
$message = esc_html__("L'action groupée demandée est inconnue.", 'liens-morts-detector-jlg');
134+
break;
135+
}
136+
} else {
137+
if ($count <= 0) {
138+
$class = 'notice notice-warning is-dismissible';
139+
$message = esc_html__("Aucun élément n'a été modifié.", 'liens-morts-detector-jlg');
140+
} elseif ($action === 'blc_mark_for_recheck') {
141+
$message = sprintf(
142+
esc_html__('La vérification sera relancée pour %s élément(s) sélectionné(s).', 'liens-morts-detector-jlg'),
143+
$count_display
144+
);
145+
} elseif ($action === 'blc_delete_entries') {
146+
if ($context === 'image') {
147+
$message = sprintf(
148+
esc_html__('%s élément(s) ont été retirés de la liste des images cassées.', 'liens-morts-detector-jlg'),
149+
$count_display
150+
);
151+
} else {
152+
$message = sprintf(
153+
esc_html__('%s élément(s) ont été retirés de la liste des liens cassés.', 'liens-morts-detector-jlg'),
154+
$count_display
155+
);
156+
}
157+
} else {
158+
$message = sprintf(
159+
esc_html__('Action groupée appliquée avec succès (%s élément(s)).', 'liens-morts-detector-jlg'),
160+
$count_display
161+
);
162+
}
163+
}
164+
165+
if ($message === '') {
166+
return;
167+
}
168+
169+
printf(
170+
'<div class="%1$s"><p>%2$s</p></div>',
171+
esc_attr($class),
172+
$message
173+
);
174+
}
175+
88176
/**
89177
* Affiche la page du rapport des LIENS cassés.
90178
*/
@@ -158,6 +246,9 @@ function blc_dashboard_links_page() {
158246
}
159247
}
160248

249+
$list_table = new BLC_Links_List_Table();
250+
$bulk_action_result = $list_table->process_bulk_action();
251+
161252
// Préparation des données et des statistiques pour les liens
162253
global $wpdb;
163254
$table_name = $wpdb->prefix . 'blc_broken_links';
@@ -177,7 +268,6 @@ function blc_dashboard_links_page() {
177268
? wp_date('j M Y', $last_check_time)
178269
: __('Jamais', 'liens-morts-detector-jlg');
179270

180-
$list_table = new BLC_Links_List_Table();
181271
$list_table->prepare_items();
182272
blc_render_action_modal();
183273

@@ -198,6 +288,7 @@ function blc_dashboard_links_page() {
198288
<span class="blc-stat-label"><?php esc_html_e('Dernière analyse', 'liens-morts-detector-jlg'); ?></span>
199289
</div>
200290
</div>
291+
<?php blc_render_bulk_action_notice($bulk_action_result, 'link'); ?>
201292
<form method="post" style="margin-bottom: 20px;">
202293
<?php wp_nonce_field('blc_manual_check_nonce'); ?>
203294
<input type="hidden" name="blc_manual_check" value="1">
@@ -226,7 +317,14 @@ function blc_dashboard_links_page() {
226317
<p><?php esc_html_e('✅ Aucun lien mort trouvé. Bravo !', 'liens-morts-detector-jlg'); ?></p>
227318
<?php else: ?>
228319
<form method="post">
229-
<?php $list_table->views(); $list_table->display(); ?>
320+
<?php
321+
wp_nonce_field(
322+
$list_table->get_bulk_action_nonce_action(),
323+
$list_table->get_bulk_action_nonce_field_name()
324+
);
325+
$list_table->views();
326+
$list_table->display();
327+
?>
230328
</form>
231329
<?php endif; ?>
232330
</div>
@@ -301,6 +399,8 @@ function blc_dashboard_images_page() {
301399
}
302400

303401
global $wpdb;
402+
$list_table = new BLC_Images_List_Table();
403+
$bulk_action_result = $list_table->process_bulk_action();
304404
$table_name = $wpdb->prefix . 'blc_broken_links';
305405
$broken_images_count = (int) $wpdb->get_var(
306406
$wpdb->prepare(
@@ -318,7 +418,6 @@ function blc_dashboard_images_page() {
318418
? wp_date('j M Y', $last_image_check_time)
319419
: __('Jamais', 'liens-morts-detector-jlg');
320420

321-
$list_table = new BLC_Images_List_Table();
322421
$list_table->prepare_items();
323422
?>
324423
<div class="wrap">
@@ -337,6 +436,7 @@ function blc_dashboard_images_page() {
337436
<span class="blc-stat-label"><?php esc_html_e('Dernière analyse d\'images', 'liens-morts-detector-jlg'); ?></span>
338437
</div>
339438
</div>
439+
<?php blc_render_bulk_action_notice($bulk_action_result, 'image'); ?>
340440
<form method="post" style="margin-bottom: 20px;">
341441
<?php wp_nonce_field('blc_manual_image_check_nonce'); ?>
342442
<input type="hidden" name="blc_manual_image_check" value="1">
@@ -347,7 +447,13 @@ function blc_dashboard_images_page() {
347447
<p><?php esc_html_e('✅ Aucune image cassée trouvée. Bravo !', 'liens-morts-detector-jlg'); ?></p>
348448
<?php else: ?>
349449
<form method="post">
350-
<?php $list_table->display(); ?>
450+
<?php
451+
wp_nonce_field(
452+
$list_table->get_bulk_action_nonce_action(),
453+
$list_table->get_bulk_action_nonce_field_name()
454+
);
455+
$list_table->display();
456+
?>
351457
</form>
352458
<?php endif; ?>
353459
</div>

0 commit comments

Comments
 (0)