Skip to content

Commit a963ea9

Browse files
committed
Add filter
1 parent ec6639e commit a963ea9

File tree

8 files changed

+482
-369
lines changed

8 files changed

+482
-369
lines changed

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "medienbaecker/kirby-alter",
33
"license": "MIT",
44
"type": "kirby-plugin",
5-
"version": "1.6.1",
5+
"version": "1.7.0",
66
"authors": [
77
{
88
"name": "Thomas Günther",

index.css

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

index.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

index.php

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
'action' => function () {
5050
$request = kirby()->request();
5151
$page = (int)$request->get('page', 1);
52+
$filter = $request->get('filter', 'all');
5253
$limit = 100;
5354

5455
// Get current language from panel
@@ -119,9 +120,34 @@
119120
}
120121
}
121122

122-
$totalImages = count($allImages);
123+
// Store original total before filtering
124+
$originalTotalImages = count($allImages);
125+
126+
// Apply filter
127+
$filteredImages = $allImages;
128+
if ($filter === 'with_alt') {
129+
$filteredImages = array_filter($allImages, function($imageData) {
130+
return !empty($imageData['alt']) && trim($imageData['alt']) !== '';
131+
});
132+
} elseif ($filter === 'without_alt') {
133+
$filteredImages = array_filter($allImages, function($imageData) {
134+
return empty($imageData['alt']) || trim($imageData['alt']) === '';
135+
});
136+
} elseif ($filter === 'reviewed') {
137+
$filteredImages = array_filter($allImages, function($imageData) {
138+
return $imageData['alt_reviewed'] === true;
139+
});
140+
} elseif ($filter === 'unreviewed') {
141+
$filteredImages = array_filter($allImages, function($imageData) {
142+
return $imageData['alt_reviewed'] === false;
143+
});
144+
}
145+
146+
// Re-index filtered array
147+
$filteredImages = array_values($filteredImages);
148+
$filteredTotalImages = count($filteredImages);
123149

124-
// Calculate totals for header badges
150+
// Calculate totals for header badges (always based on all images)
125151
$totalWithAltText = 0;
126152
$totalReviewed = 0;
127153
foreach ($allImages as $imageData) {
@@ -133,24 +159,24 @@
133159
}
134160
}
135161

136-
$totalPages = ceil($totalImages / $limit);
162+
$totalPages = ceil($filteredTotalImages / $limit);
137163
$offset = ($page - 1) * $limit;
138-
$paginatedImages = array_slice($allImages, $offset, $limit);
164+
$paginatedImages = array_slice($filteredImages, $offset, $limit);
139165

140166
return [
141167
'images' => $paginatedImages,
142168
'pagination' => [
143169
'page' => (int)$page,
144170
'pages' => $totalPages,
145-
'total' => $totalImages,
171+
'total' => $filteredTotalImages,
146172
'limit' => $limit,
147173
'start' => $offset + 1,
148-
'end' => min($offset + $limit, $totalImages)
174+
'end' => min($offset + $limit, $filteredTotalImages)
149175
],
150176
'totals' => [
151177
'withAltText' => $totalWithAltText,
152178
'reviewed' => $totalReviewed,
153-
'total' => $totalImages
179+
'total' => $originalTotalImages
154180
]
155181
];
156182
}

languages/de.php

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,23 @@
11
<?php
22

33
return array(
4-
'medienbaecker.alter.title' => 'Alt-Texte',
5-
'medienbaecker.alter.noImages' => 'Keine Bilder gefunden',
6-
'medienbaecker.alter.noAltText' => 'Kein Alt-Text',
7-
'medienbaecker.alter.reviewed' => 'Überprüft',
8-
'medienbaecker.alter.save' => 'Speichern',
9-
'medienbaecker.alter.error' => 'Fehler beim Speichern',
10-
'medienbaecker.alter.unsavedChanges' => 'Du hast ungespeicherte Änderungen. Trotzdem fortfahren?',
11-
'medienbaecker.alter.image' => 'Bild',
12-
'medienbaecker.alter.images' => 'Bilder',
13-
'medienbaecker.alter.notAuthenticated' => 'Nicht authentifiziert',
14-
'medienbaecker.alter.invalidField' => 'Ungültiges Feld',
15-
'medienbaecker.alter.imageNotFound' => 'Bild nicht gefunden',
16-
'medienbaecker.alter.success' => 'Änderungen erfolgreich gespeichert',
4+
'medienbaecker.alter.title' => 'Alt-Texte',
5+
'medienbaecker.alter.noImages' => 'Keine Bilder gefunden',
6+
'medienbaecker.alter.noAltText' => 'Kein Alt-Text',
7+
'medienbaecker.alter.reviewed' => 'Überprüft',
8+
'medienbaecker.alter.save' => 'Speichern',
9+
'medienbaecker.alter.error' => 'Fehler beim Speichern',
10+
'medienbaecker.alter.unsavedChanges' => 'Du hast ungespeicherte Änderungen. Trotzdem fortfahren?',
11+
'medienbaecker.alter.image' => 'Bild',
12+
'medienbaecker.alter.images' => 'Bilder',
13+
'medienbaecker.alter.notAuthenticated' => 'Nicht authentifiziert',
14+
'medienbaecker.alter.invalidField' => 'Ungültiges Feld',
15+
'medienbaecker.alter.imageNotFound' => 'Bild nicht gefunden',
16+
'medienbaecker.alter.success' => 'Änderungen erfolgreich gespeichert',
17+
'medienbaecker.alter.filter.label' => 'Filter',
18+
'medienbaecker.alter.filter.all' => 'Alle Bilder',
19+
'medienbaecker.alter.filter.with_alt' => 'Bilder mit Alt-Text',
20+
'medienbaecker.alter.filter.without_alt' => 'Bilder ohne Alt-Text',
21+
'medienbaecker.alter.filter.reviewed' => 'Geprüfte Bilder',
22+
'medienbaecker.alter.filter.unreviewed' => 'Ungeprüfte Bilder',
1723
);

languages/en.php

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,23 @@
11
<?php
22

33
return array(
4-
'medienbaecker.alter.title' => 'Alt texts',
5-
'medienbaecker.alter.noImages' => 'No images found',
6-
'medienbaecker.alter.noAltText' => 'No alt text',
7-
'medienbaecker.alter.reviewed' => 'Reviewed',
8-
'medienbaecker.alter.save' => 'Save',
9-
'medienbaecker.alter.error' => 'Failed to save changes',
10-
'medienbaecker.alter.unsavedChanges' => 'You have unsaved changes. Continue anyway?',
11-
'medienbaecker.alter.image' => 'image',
12-
'medienbaecker.alter.images' => 'images',
13-
'medienbaecker.alter.notAuthenticated' => 'Not authenticated',
14-
'medienbaecker.alter.invalidField' => 'Invalid field',
15-
'medienbaecker.alter.imageNotFound' => 'Image not found',
16-
'medienbaecker.alter.success' => 'Changes saved successfully',
4+
'medienbaecker.alter.title' => 'Alt texts',
5+
'medienbaecker.alter.noImages' => 'No images found',
6+
'medienbaecker.alter.noAltText' => 'No alt text',
7+
'medienbaecker.alter.reviewed' => 'Reviewed',
8+
'medienbaecker.alter.save' => 'Save',
9+
'medienbaecker.alter.error' => 'Failed to save changes',
10+
'medienbaecker.alter.unsavedChanges' => 'You have unsaved changes. Continue anyway?',
11+
'medienbaecker.alter.image' => 'image',
12+
'medienbaecker.alter.images' => 'images',
13+
'medienbaecker.alter.notAuthenticated' => 'Not authenticated',
14+
'medienbaecker.alter.invalidField' => 'Invalid field',
15+
'medienbaecker.alter.imageNotFound' => 'Image not found',
16+
'medienbaecker.alter.success' => 'Changes saved successfully',
17+
'medienbaecker.alter.filter.label' => 'Filter',
18+
'medienbaecker.alter.filter.all' => 'All images',
19+
'medienbaecker.alter.filter.with_alt' => 'Images with alt text',
20+
'medienbaecker.alter.filter.without_alt' => 'Images without alt text',
21+
'medienbaecker.alter.filter.reviewed' => 'Reviewed images',
22+
'medienbaecker.alter.filter.unreviewed' => 'Unreviewed images',
1723
);

0 commit comments

Comments
 (0)