# Migration de stratis_news vers TYPO3 v13

## Date de migration
26 janvier 2026

## Résumé
L'extension stratis_news a été migrée de TYPO3 v9 vers TYPO3 v13. Cette migration inclut des changements majeurs pour se conformer aux nouvelles pratiques de TYPO3 v13.

## Modifications principales

### 1. Remplacement d'ObjectManager par l'injection de dépendances

**Fichiers modifiés :**
- `Classes/Controller/NewsController.php`
- `Classes/Domain/Repository/NewsRepository.php`
- `Classes/Domain/Repository/CategoryRepository.php`
- `Classes/Domain/Repository/TagRepository.php`
- `Classes/Hook/NewsDomainSpecificPreviewUrlHook.php`
- `Classes/ViewHelpers/BaseViewHelper.php`

**Changements :**
- Suppression de tous les `use TYPO3\CMS\Extbase\Object\ObjectManager`
- Ajout de l'injection de dépendances via les constructeurs
- Utilisation de `private readonly` pour les propriétés injectées

### 2. Remplacement de SignalSlot par des événements PSR-14

**Fichiers modifiés :**
- `Classes/Controller/NewsController.php`

**Changements :**
- Remplacement de `emitActionSignal()` par `$this->eventDispatcher->dispatch()`
- Utilisation des événements :
  - `NewsListActionEvent`
  - `NewsDetailActionEvent`
  - `NewsListSelectedActionEvent`

**Fichiers supprimés :**
- `Classes/Helper/SignalSlotHelper.php` (obsolète)
- `Classes/Slot/ExtbaseBackendSlot.php` (obsolète)

### 3. Suppression des Widgets Extbase

**Fichiers supprimés :**
- `Classes/ViewHelpers/Widget/Controller/PaginateController.php`

**Raison :**
Les Widgets Extbase ont été supprimés dans TYPO3 v11+. La pagination est désormais gérée par l'extension news de base qui utilise les paginateurs standard de TYPO3.

### 4. Suppression des Xclasses et FormDataProviders obsolètes

**Fichiers supprimés :**
- `Classes/Xclass/PageLayoutView.php`
- `Classes/Xclass/DatabaseTreeDataProvider.php`
- `Classes/Backend/FormDataProvider/NewsFlexFormManipulation.php`

**Fichiers modifiés :**
- `Classes/Xclass/FlexFormHook.php` - Suppression de l'héritage de `GeorgRinger\News\Hooks\BackendUtility` (n'existe plus)

**Raison :**
Ces classes parentes n'existent plus dans l'extension news v13. FlexFormHook a été rendu autonome.

### 5. Mise à jour de ext_localconf.php

**Changements :**
- Décommentage de tout le code fonctionnel
- Suppression des références aux classes obsolètes :
  - `GeorgRinger\News\Backend\FormDataProvider\NewsFlexFormManipulation`
  - `GeorgRinger\News\Hooks\PageLayoutView`
  - `GeorgRinger\News\Hooks\BackendUtility`
  - `GeorgRinger\News\TreeProvider\DatabaseTreeDataProvider`
  - `GeorgRinger\News\ViewHelpers\Widget\Controller\PaginateController`
- Suppression du code SignalSlot/Dispatcher

### 6. Mise à jour de Configuration/Services.yaml

**Ajouts :**
- Configuration explicite de l'injection de dépendances pour :
  - `NewsRepository` (avec queryParser et dataMapper)
  - `CategoryRepository` (avec newsRepository, connectionPool et context)
  - `NewsController` (avec context et searchObject)
- Exclusion des models du chargement automatique
- Configuration du DTO `Search` comme non-partagé

### 7. Remplacement des méthodes dépréciées

**Changements dans tous les repositories :**
- `execute()` → `executeQuery()`
- `fetch()` → `fetchAssociative()`
- `fetchColumn()` → `fetchOne()`
- `fetchAll()` → `fetchAllAssociative()`

### 8. Nettoyage des imports

**Suppressions :**
- `use TYPO3\CMS\Extbase\Object\ObjectManager`
- `use TYPO3\CMS\Extbase\Object\ObjectManagerInterface`
- `use TYPO3\CMS\Extbase\SignalSlot\Dispatcher`
- `use TYPO3\CMS\Extbase\SignalSlot\Exception\*`

### 9. Corrections spécifiques

**NewsController.php :**
- Remplacement de `$this->request->setArgument()` par `$this->request->withArgument()`
- Injection de `Context` et `Search` dans le constructeur
- Correction de la méthode `cleanArrayKeys()` (ajout de `private` et `$this->`)

**NewsRepository.php :**
- Ajout du constructeur avec injection de `Typo3DbQueryParser` et `DataMapper`
- Suppression de l'utilisation d'ObjectManager

**CategoryRepository.php :**
- Injection de `NewsRepository`, `ConnectionPool` et `Context`
- Mise à jour des requêtes SQL

**TagRepository.php :**
- Injection de `ConnectionPool`
- Mise à jour des requêtes SQL

**NewsDomainSpecificPreviewUrlHook.php :**
- Injection de `ConnectionPool`, `NewsRepository` et `ExtensionConfiguration`
- Suppression de l'utilisation d'ObjectManager

**Builder/NewsDemandBuilder.php :**
- Nettoyage des imports inutilisés

## Fichiers de configuration mis à jour

- `ext_emconf.php` - Version TYPO3 : 13.4.0-13.4.99
- `composer.json` - Dépendance TYPO3 : ^13.4
- `ext_localconf.php` - Code décommenté et adapté
- `ext_tables.php` - Inchangé
- `Configuration/Services.yaml` - Injection de dépendances configurée

## Tests recommandés

Après la migration, il est recommandé de tester :

1. **Frontend :**
   - Affichage de la liste des actualités
   - Affichage du détail d'une actualité
   - Filtrage par catégories
   - Filtrage par tags
   - Pagination
   - Recherche

2. **Backend :**
   - Création/édition d'actualités
   - FlexForms des plugins news
   - Aperçu des actualités
   - Gestion des catégories
   - Gestion des tags

3. **Fonctionnalités spécifiques :**
   - Restrictions par domaine
   - Preview URLs
   - Cache clearing
   - Hooks de pré-remplissage

## Notes importantes

- L'extension est maintenant compatible TYPO3 v13.4
- Toutes les dépréciations connues ont été corrigées
- Les Xclasses ont été supprimées (à réévaluer si nécessaire)
- La pagination utilise le système standard de TYPO3 v13
- Les événements PSR-14 remplacent les SignalSlots

## Dépendances

- TYPO3 : ^13.4
- georgringer/news : 7.0.0-7.2.99 (selon ext_emconf.php)

## Auteurs de la migration

Migration effectuée le 26 janvier 2026 par Claude (Anthropic)
