Skip to content

Commit cf3d556

Browse files
committed
multiple changes
1 parent dfede49 commit cf3d556

File tree

1,187 files changed

+1584
-163056
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1,187 files changed

+1584
-163056
lines changed

CHANGELOG.md

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,46 @@
11
# Changelog
22

3+
## 6.2.0 - 2026-02-05
4+
5+
### Neue Features
6+
7+
- **Archiviert-Status**: Einträge können jetzt in 3 Zuständen existieren: Online (1), Offline (0), Archiviert (2)
8+
- Archivierte Einträge werden standardmäßig ausgeblendet (nur mit Status-Filter sichtbar)
9+
- Status-Auswahl als Bootstrap Selectpicker mit REDAXO-typischen Farben und Icons
10+
- **Status-Filter**: Dropdown-Filter im Einträge-Bereich zum Filtern nach Status (Alle/Online/Offline/Archiviert)
11+
- **Content-Preview**: Tooltip-Vorschau des Contents beim Hover über Titel (erste 200 Zeichen)
12+
- **Duplicate Detection**: Automatische Erkennung doppelter URLs beim Fetch mit Warning-Log
13+
- **Stream Health-Check**: Button zum Testen der Erreichbarkeit von Stream-URLs (RSS, YouTube, Podcast, iCal)
14+
- **Konfigurierbare Einstellungen**: Neue Settings-Seite für HTTP-Timeouts, Media-Größen und Log-Level
15+
- **Granulare Berechtigungen**: Separate Rechte für Streams-Verwaltung (`feeds[streams]`) und Einträge-Bearbeitung (`feeds[items]`)
16+
- **Medien-Lightbox**: Klickbare Thumbnails öffnen Original-Bilder in Lightbox-Overlay
17+
18+
### Verbesserungen
19+
20+
- **Performance**: SQL-Injection-Schwachstellen behoben, Prepared Statements verwendet
21+
- **Performance**: N+1 Query-Problem in `getPreloadedItems()` eliminiert durch Batch-Loading
22+
- **Performance**: Composite Index `stream_status_date` für schnellere Queries
23+
- **HTTP-Caching**: Etag und Last-Modified Header für effiziente Feeds-Abfrage
24+
- **UI/UX**: Optimierte Einträge-Ansicht mit besserer Spaltenaufteilung und kürzeren Texten
25+
- **UI/UX**: Einträge-Seite ist jetzt die Standard-Startseite des AddOns
26+
- **UI/UX**: Status-Auswahl mit Bootstrap Selectpicker, REDAXO-Farben (grün/rot/grau) und Icons
27+
- **Fehlerbehandlung**: Konfigurierbare Timeouts und besseres Error-Handling bei Netzwerkfehlern
28+
- **Backward Compatibility**: Deprecated Klassen werden automatisch geladen (Issue #253)
29+
- **Kompatibilität**: Symfony HTTP Client auf 6.4/7.x downgraded für REDAXO Core-Kompatibilität
30+
- **CSP**: Inline-Scripts und Styles mit Nonce-Attributen für Content Security Policy
31+
32+
### Bugfixes
33+
34+
- Array-to-string Conversion Warnings in Settings-Page behoben
35+
- Undefined array key Warnings in `Item::createFromDbRow()` behoben
36+
- Medienanzeige in Einträge-Liste repariert
37+
- TransportException bei DNS-Fehlern besser abgefangen
38+
39+
### Datenbank
40+
41+
- `rex_feeds_item.status` auf `tinyint(4)` erweitert für 3 Status-Zustände
42+
- Neuer Composite Index `stream_status_date` für Performance-Optimierung
43+
344
## 6.1.0 - 2026-01-08
445

546
- Neue Content-Helper in `FriendsOfRedaxo\Feeds\Item`:

README.md

Lines changed: 94 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,59 @@ REDAXO Feed Aggregator
66

77
## Features
88

9-
* Abruf von YouTube-, Vimeo-, RSS-, Mastodon- und Podcast-Streams.
9+
* Abruf von YouTube-, Vimeo-, RSS-, Mastodon- und Podcast-Streams
1010
* Dauerhaftes Speichern der Beiträge
11-
* Speicherung des Hauptmediums Im data-Ordner des AddOns
11+
* Speicherung des Hauptmediums im data-Ordner des AddOns
1212
* Nachträgliche Aktualisierung der Beiträge (z.B. nach einem Update / einer Korrektur)
1313
* Erweiterbar durch eigene Feed-Provider
1414
* Feeds können in Watson gesucht werden `feed suchbegriff`
1515
* Abruf aller oder einzelner Feeds per Cronjob
1616
* Bereinigen von Streams (Löschen aller Einträge) direkt im Backend
1717
* **Filterung:** Positivliste und Negativliste für jeden Stream konfigurierbar (z.B. nur Beiträge mit bestimmten Hashtags importieren)
18+
* **Archivierung:** 3 Status-Zustände (Online/Offline/Archiviert) für Einträge
19+
* **Content-Preview:** Tooltip-Vorschau beim Hover über Titel
20+
* **Duplicate Detection:** Automatische Erkennung doppelter URLs beim Fetch
21+
* **Stream Health-Check:** Testen der Erreichbarkeit von Feed-Quellen
22+
* **Granulare Berechtigungen:** Separate Rechte für Streams und Einträge
23+
* **Konfigurierbare Einstellungen:** HTTP-Timeouts, Media-Größen, Log-Level
24+
* **Medien-Lightbox:** Klickbare Thumbnails mit Vollbild-Ansicht
25+
26+
## Neu in Version 6.2.0
27+
28+
### Status-Verwaltung
29+
- **3 Status-Zustände:** Online (1), Offline (0), Archiviert (2)
30+
- **Status-Filter:** Dropdown-Filter in der Einträge-Liste
31+
- **Quick-Toggle:** Durch Klick auf Status durch alle Zustände wechseln
32+
33+
### Content-Vorschau
34+
- **Tooltip-Preview:** Erste 200 Zeichen des Contents beim Hover über Titel
35+
- **Gepunktete Unterstreichung:** Zeigt verfügbare Vorschau an
36+
37+
### Duplicate Detection
38+
- **Automatische Prüfung:** Erkennt doppelte URLs beim Fetch
39+
- **Warning-Log:** Duplikate werden protokolliert aber nicht importiert
40+
- **Stream-spezifisch:** Prüft nur innerhalb des gleichen Streams
41+
42+
### Stream Health-Check
43+
- **Erreichbarkeit testen:** Button zum Prüfen ob Stream-URL erreichbar ist
44+
- **HTTP-Status anzeigen:** Zeigt Response-Code und Fehlermeldungen
45+
- **Unterstützte Typen:** RSS, Podcast, YouTube (Channel/Playlist), iCal
46+
47+
### Einstellungen
48+
- **HTTP-Timeouts:** Konfigurierbar 5-120 Sekunden
49+
- **Maximale Dauer:** Gesamtdauer inkl. Redirects
50+
- **Media-Größe:** Max. Dateigröße für Downloads (1-500 MB)
51+
- **Log-Level:** Error / Warning / Info
52+
53+
### Berechtigungen
54+
- **feeds[streams]:** Streams erstellen, bearbeiten, löschen, Einstellungen
55+
- **feeds[items]:** Einträge bearbeiten, Status ändern
56+
57+
### Performance & Sicherheit
58+
- **SQL-Injection behoben:** Prepared Statements in allen Queries
59+
- **N+1 Problem gelöst:** Batch-Loading in Listen-Ansicht
60+
- **HTTP-Caching:** Etag/Last-Modified Header für effiziente Updates
61+
- **Composite Index:** Optimierte Queries durch `stream_status_date` Index
1862

1963
## Migration zu Namespaces (REDAXO 6 Vorbereitung)
2064

@@ -96,11 +140,17 @@ Jetzt werden Feeds-Streams regelmäßig dann abgerufen, wenn die Website aufgeru
96140

97141
### Feed ausgeben
98142

143+
**Wichtig:** In den Queries die Status-Werte beachten:
144+
- **Status 1** = Online (für Frontend-Ausgabe)
145+
- **Status 0** = Offline (nicht ausgeben)
146+
- **Status 2** = Archiviert (nicht standardmäßig ausgeben, außer für Archiv-Seiten)
147+
99148
Um ein Feed auszugeben, können die Inhalte in einem Modul oder Template per SQL oder mit nachfolgender Methode abgerufen werden, z.B.:
100149

101150
```php
102151
<?php
103152
use FriendsOfRedaxo\Feeds\Stream;
153+
use FriendsOfRedaxo\Feeds\Item;
104154

105155
$stream_id = 1;
106156
// Mediamanager Typ mit feeds als erster Effekt
@@ -110,7 +160,8 @@ $media_manager_type = 'feeds_thumb';
110160
$stream = Stream::get($stream_id);
111161
// Alternativ: $stream = rex_feeds_stream::get($stream_id); // Weiterhin möglich, aber deprecated
112162

113-
$items = $stream->getPreloadedItems(); // Standard gibt 5 Einträge zurück, sonst gewünschte Anzahl übergeben
163+
// Nur Online-Einträge ausgeben (status = 1)
164+
$items = $stream->getPreloadedItems(5, 1); // 5 Einträge mit Status 1 (Online)
114165
foreach($items as $item) {
115166
// Titel ermitteln und alles verlinken
116167
print '<a href="'. $item->getUrl() .'" title="'. rex_escape($stream->getTitle()) .'">';
@@ -124,6 +175,46 @@ $items = $stream->getPreloadedItems(); // Standard gibt 5 Einträge zurück, son
124175
?>
125176
```
126177

178+
#### Erweiterte Queries mit Status-Filter
179+
180+
```php
181+
<?php
182+
use FriendsOfRedaxo\Feeds\Item;
183+
184+
// Nur Online-Einträge eines Streams
185+
$sql = rex_sql::factory();
186+
$sql->setQuery('
187+
SELECT * FROM ' . Item::table() . '
188+
WHERE stream_id = :stream_id
189+
AND status = 1
190+
ORDER BY date DESC
191+
LIMIT 10
192+
', ['stream_id' => $stream_id]);
193+
194+
// Archiv-Seite: Nur archivierte Einträge
195+
$sql->setQuery('
196+
SELECT * FROM ' . Item::table() . '
197+
WHERE stream_id = :stream_id
198+
AND status = 2
199+
ORDER BY date DESC
200+
', ['stream_id' => $stream_id]);
201+
202+
// Alle nicht-archivierten Einträge (Online + Offline)
203+
$sql->setQuery('
204+
SELECT * FROM ' . Item::table() . '
205+
WHERE status != 2
206+
ORDER BY date DESC
207+
');
208+
209+
// Items durchlaufen
210+
while ($sql->hasNext()) {
211+
$item = Item::createFromDbRow($sql->getRow());
212+
// ... Ausgabe
213+
$sql->next();
214+
}
215+
?>
216+
```
217+
127218
## Content-Helper (Hilfsmethoden)
128219

129220
Dieses AddOn stellt mehrere praktische Helfer für die Verarbeitung von Content zur Verfügung. Die Methoden befinden sich in der Klasse `FriendsOfRedaxo\Feeds\Item` (Datei: `lib/Item.php`).

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"madcoda/php-youtube-api": "^1.0",
77
"vimeo/vimeo-api": "^4.0",
88
"php-feed-io/feed-io": "^6.2",
9-
"symfony/http-client": "^8.0"
9+
"symfony/http-client": "^6.4 || ^7.0"
1010
},
1111
"replace": {
1212
"enshrined/svg-sanitize": "*",

0 commit comments

Comments
 (0)