Kaynağa Gözat

apply rector recommandations

Olivier Massot 2 yıl önce
ebeveyn
işleme
4ae6fdd622
37 değiştirilmiş dosya ile 152 ekleme ve 109 silme
  1. 11 0
      doc/historic/upgrade_v11.md
  2. 1 0
      doc/index.md
  3. 1 1
      ot_admin/Classes/Controller/SiteController.php
  4. 0 3
      ot_admin/ext_emconf.php
  5. 0 3
      ot_connect/ext_emconf.php
  6. 1 1
      ot_connect/ext_localconf.php
  7. 2 1
      ot_core/Classes/Controller/ActionController.php
  8. 4 2
      ot_core/Classes/Controller/SelectedSiteController.php
  9. 2 1
      ot_core/Classes/Middleware/Frontend/OtSiteResolver.php
  10. 2 1
      ot_core/Classes/Middleware/OtBackendUserAuthenticator.php
  11. 2 1
      ot_core/Classes/Service/OpentalentApiService.php
  12. 3 2
      ot_core/Classes/ViewHelpers/OtAbstractViewHelper.php
  13. 12 9
      ot_core/Classes/Website/OtPageRepository.php
  14. 12 8
      ot_core/Classes/Website/OtWebsiteRepository.php
  15. 2 1
      ot_core/Configuration/RequestMiddlewares.php
  16. 6 3
      ot_core/Configuration/TCA/Overrides/pages.php
  17. 2 1
      ot_core/Tests/Unit/Service/OpentalentApiServiceTest.php
  18. 6 3
      ot_core/Tests/Unit/Website/OtPageRepositoryTest.php
  19. 2 1
      ot_core/Tests/Unit/Website/OtWebsiteRepositoryTest.php
  20. 0 3
      ot_core/ext_emconf.php
  21. 1 1
      ot_core/ext_localconf.php
  22. 0 3
      ot_optimizer/ext_emconf.php
  23. 1 1
      ot_optimizer/ext_localconf.php
  24. 15 10
      ot_stats/Classes/Controller/OtStatsController.php
  25. 0 3
      ot_stats/ext_emconf.php
  26. 6 3
      ot_stats/ext_tables.php
  27. 8 9
      ot_templating/Classes/Controller/OtCustomizerController.php
  28. 2 1
      ot_templating/Classes/Page/ErrorHandler.php
  29. 2 1
      ot_templating/Classes/ViewHelpers/CObjectViewHelper.php
  30. 2 1
      ot_templating/Classes/ViewHelpers/Organizations/GetChildFederationViewHelper.php
  31. 2 1
      ot_templating/Classes/ViewHelpers/Organizations/GetFederationStructuresViewHelper.php
  32. 5 4
      ot_templating/Classes/ViewHelpers/Social/MetadataViewHelper.php
  33. 6 1
      ot_templating/Classes/XClass/Form/Configuration/ConfigurationManager.php
  34. 24 18
      ot_templating/Resources/Private/Forms/Contact.form.yaml
  35. 0 3
      ot_templating/ext_emconf.php
  36. 1 1
      ot_templating/ext_localconf.php
  37. 6 3
      ot_templating/ext_tables.php

+ 11 - 0
doc/historic/upgrade_v11.md

@@ -41,3 +41,14 @@ A priori pas de blocage, la mise à jour des extensions sera à faire en même t
 3. Maj les dépendances à leur dernière version compatible (voir paragraphe précédent)
 4. Aller à la page /setup de typo3, et faire passer les différentes opérations de mise à jour
 5. Tester
+
+
+### Notes upgrade en local
+
+* (réglé, voir: https://github.com/FluidTYPO3/vhs/issues/1869) J'ai dû modifier le type du param ... de la classe FluidTYPO3\Vhs\ViewHelpers\Resource\CollectionViewHelper qui 
+  générait une erreur (mettre Repository comme type à la place de RecordCollectionRepository débloque la situation...)
+* Il a fallu maj le fichier cli, le nouvel emplacement de la console est `/var/www/typo3/vendor/bin/typo3`
+* il faut mettre à jour le .htaccess (prendre celui ici: public/typo3/sysext/install/Resources/Private/FolderStructureTemplateFiles/root-htaccess 
+  et le copier dans public/, puis rajouter les lignes custom en début de fichier)
+* j'ai un bug avec `gzuncompress` au chargement du backend, on peut le corriger avec un `sh cli cache:flush`
+* comme suggéré dans la doc typo3, j'ai lancé un `sh cli referenceindex:update`

+ 1 - 0
doc/index.md

@@ -39,3 +39,4 @@ plus environ 2000 sites archivés.
 2. [Résolution des problèmes d'authentification cross-domaine (2021)](historic/cross_domain_auth.md)
 3. [Upgrade Typo3 v9.5 vers v10.4 (2021)](historic/upgrade_v10.md)
 4. [Contribution / Retour d'expérience à la communauté Typo3 (2021)](historic/typo3_contrib.md)
+5. [Upgrade Typo3 v10.4 vers v11.5 (2023)](historic/upgrade_v11.md)

+ 1 - 1
ot_admin/Classes/Controller/SiteController.php

@@ -2275,7 +2275,7 @@ class SiteController extends ActionController
 
         // Flush cache:
         try {
-            $cacheSystem = $this->cacheManager->getCache('cache_core');
+            $cacheSystem = $this->cacheManager->getCache('core');
             $cacheSystem->remove('site-configuration');
             $cacheSystem->remove('pseudo-sites');
         } catch (NoSuchCacheException $e) {

+ 0 - 3
ot_admin/ext_emconf.php

@@ -15,9 +15,6 @@ $EM_CONF[$_EXTKEY] = [
     'author' => 'Olivier Massot',
     'author_email' => 'olivier.massot@2iopenservice.fr',
     'state' => 'stable',
-    'uploadfolder' => 0,
-    'createDirs' => '',
-    'clearCacheOnLoad' => 0,
     'version' => '1.0.0', //see ot_core/ext_emconf.php to get the current ot extensions version
     'constraints' => [
         'depends' => [

+ 0 - 3
ot_connect/ext_emconf.php

@@ -15,9 +15,6 @@ $EM_CONF[$_EXTKEY] = [
     'author' => 'Olivier Massot',
     'author_email' => 'olivier.massot@2iopenservice.fr',
     'state' => 'stable',
-    'uploadfolder' => 0,
-    'createDirs' => '',
-    'clearCacheOnLoad' => 0,
     'version' => '1.0.0', //see ot_core/ext_emconf.php to get the current ot extensions version
     'constraints' => [
         'depends' => [

+ 1 - 1
ot_connect/ext_localconf.php

@@ -1,5 +1,5 @@
 <?php
-defined('TYPO3_MODE') || die();
+defined('TYPO3') || die();
 
 // Register Opentalent authentication service with TYPO3
 \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addService(

+ 2 - 1
ot_core/Classes/Controller/ActionController.php

@@ -4,6 +4,7 @@ namespace Opentalent\OtCore\Controller;
 
 use Opentalent\OtCore\Website\OtPageRepository;
 use Opentalent\OtCore\Website\OtWebsiteRepository;
+use TYPO3\CMS\Core\Localization\LanguageService;
 
 /**
  * Base class for all controllers of backend modules
@@ -33,7 +34,7 @@ class ActionController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionControlle
     /**
      * Returns the language service.
      *
-     * @return \TYPO3\CMS\Core\Localization\LanguageService
+     * @return LanguageService
      */
     protected function getLanguageService()
     {

+ 4 - 2
ot_core/Classes/Controller/SelectedSiteController.php

@@ -3,8 +3,10 @@
 namespace Opentalent\OtCore\Controller;
 
 use Opentalent\OtCore\Exception\NoSiteSelected;
+use Opentalent\OtCore\Exception\NoSuchWebsiteException;
 use Opentalent\OtCore\Website\OtPageRepository;
 use Psr\Http\Message\ResponseInterface;
+use TYPO3\CMS\Extbase\Mvc\Exception\StopActionException;
 use TYPO3\CMS\Extbase\Mvc\RequestInterface;
 use TYPO3\CMS\Extbase\Object\ObjectManager;
 
@@ -40,8 +42,8 @@ class SelectedSiteController extends ActionController
 
     /**
      *
-     * @throws \TYPO3\CMS\Extbase\Mvc\Exception\StopActionException
-     * @throws \Opentalent\OtCore\Exception\NoSuchWebsiteException
+     * @throws StopActionException
+     * @throws NoSuchWebsiteException
      * @throws \Exception
      */
     protected function callActionMethod(RequestInterface $request): ResponseInterface {

+ 2 - 1
ot_core/Classes/Middleware/Frontend/OtSiteResolver.php

@@ -11,12 +11,13 @@ use TYPO3\CMS\Core\Utility\GeneralUtility;
 use TYPO3\CMS\Extbase\Object\ObjectManager;
 use TYPO3\CMS\Core\Routing\SiteRouteResult;
 use TYPO3\CMS\Frontend\Controller\ErrorController;
+use TYPO3\CMS\Frontend\Middleware\SiteResolver;
 use TYPO3\CMS\Frontend\Page\PageAccessFailureReasons;
 
 /**
  *
  */
-class OtSiteResolver extends \TYPO3\CMS\Frontend\Middleware\SiteResolver
+class OtSiteResolver extends SiteResolver
 {
     /**
      * Resolve the site/language information by checking the page ID or the URL.

+ 2 - 1
ot_core/Classes/Middleware/OtBackendUserAuthenticator.php

@@ -1,6 +1,7 @@
 <?php
 namespace Opentalent\OtCore\Middleware;
 
+use Opentalent\OtAdmin\Http\ApiController;
 use PHPUnit\Exception;
 use TYPO3\CMS\Backend\Middleware\BackendUserAuthenticator;
 use TYPO3\CMS\Backend\Routing\Route;
@@ -25,7 +26,7 @@ class OtBackendUserAuthenticator extends BackendUserAuthenticator
         if (class_exists('\Opentalent\OtAdmin\Http\ApiController')) {
             // The routes defined in the ot-admin extension are limited to some ips
             if (preg_match('/\/otadmin\/.+/', $route->getPath())) {
-                if (\Opentalent\OtAdmin\Http\ApiController::isIpAllowed($_SERVER['REMOTE_ADDR'])) {
+                if (ApiController::isIpAllowed($_SERVER['REMOTE_ADDR'])) {
                     return true;
                 } else {
                     throw new \RuntimeException('An unauthorized IP (' . $_SERVER['REMOTE_ADDR'] . ') ' .

+ 2 - 1
ot_core/Classes/Service/OpentalentApiService.php

@@ -7,6 +7,7 @@ use GuzzleHttp\Exception\GuzzleException;
 use Opentalent\OtCore\Exception\ApiRequestException;
 use Opentalent\OtCore\Logging\OtLogger;
 use Psr\Http\Message\ResponseInterface;
+use TYPO3\CMS\Core\Core\Environment;
 
 class OpentalentApiService
 {
@@ -25,7 +26,7 @@ class OpentalentApiService
     ) {
         // Get the current context (prod, dev...)
         if ($context === null) {
-            $this->context = \TYPO3\CMS\Core\Core\Environment::getContext();
+            $this->context = Environment::getContext();
         } else {
             $this->context = $context;
         }

+ 3 - 2
ot_core/Classes/ViewHelpers/OtAbstractViewHelper.php

@@ -7,6 +7,7 @@ use Opentalent\OtCore\Logging\OtLogger;
 use Opentalent\OtCore\Website\OtPageRepository;
 use Psr\Log\LoggerAwareInterface;
 use Psr\Log\LoggerAwareTrait;
+use TYPO3\CMS\Core\Localization\LanguageService;
 use TYPO3\CMS\Extbase\Utility\LocalizationUtility;
 use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;
 
@@ -42,9 +43,9 @@ class OtAbstractViewHelper extends AbstractViewHelper {
     /**
      * Returns the language service.
      *
-     * @return \TYPO3\CMS\Core\Localization\LanguageService
+     * @return LanguageService
      */
-    protected function getLanguageService(): \TYPO3\CMS\Core\Localization\LanguageService
+    protected function getLanguageService(): LanguageService
     {
         return $GLOBALS['LANG'];
     }

+ 12 - 9
ot_core/Classes/Website/OtPageRepository.php

@@ -2,7 +2,10 @@
 
 namespace Opentalent\OtCore\Website;
 
+use FluidTYPO3\Vhs\Service\PageService;
 use Opentalent\OtCore\Exception\NoSiteSelected;
+use TYPO3\CMS\Core\Database\ConnectionPool;
+use TYPO3\CMS\Core\Domain\Repository\PageRepository;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
 
 /**
@@ -15,31 +18,31 @@ use TYPO3\CMS\Core\Utility\GeneralUtility;
 class OtPageRepository
 {
     /**
-     * @var \FluidTYPO3\Vhs\Service\PageService
+     * @var PageService
      */
-    private \FluidTYPO3\Vhs\Service\PageService $pageService;
+    private PageService $pageService;
 
-    public function injectPageService(\FluidTYPO3\Vhs\Service\PageService $pageService)
+    public function injectPageService(PageService $pageService)
     {
         $this->pageService = $pageService;
     }
 
     /**
-     * @var \TYPO3\CMS\Core\Domain\Repository\PageRepository
+     * @var PageRepository
      */
-    private \TYPO3\CMS\Core\Domain\Repository\PageRepository $pageRepository;
+    private PageRepository $pageRepository;
 
-    public function injectPageRepository(\TYPO3\CMS\Core\Domain\Repository\PageRepository $pageRepository)
+    public function injectPageRepository(PageRepository $pageRepository)
     {
         $this->pageRepository = $pageRepository;
     }
 
     /**
-     * @var \TYPO3\CMS\Core\Database\ConnectionPool
+     * @var ConnectionPool
      */
-    private \TYPO3\CMS\Core\Database\ConnectionPool $connectionPool;
+    private ConnectionPool $connectionPool;
 
-    public function injectConnectionPool(\TYPO3\CMS\Core\Database\ConnectionPool $connectionPool)
+    public function injectConnectionPool(ConnectionPool $connectionPool)
     {
         $this->connectionPool = $connectionPool;
     }

+ 12 - 8
ot_core/Classes/Website/OtWebsiteRepository.php

@@ -2,12 +2,15 @@
 
 namespace Opentalent\OtCore\Website;
 
+use Doctrine\DBAL\DBALException;
 use Opentalent\OtCore\Exception\InvalidWebsiteConfigurationException;
 use Opentalent\OtCore\Exception\NoSuchRecordException;
 use Opentalent\OtCore\Exception\NoSuchWebsiteException;
 use Opentalent\OtCore\Utility\RouteNormalizer;
 use Psr\Http\Message\UriInterface;
+use Symfony\Component\Yaml\Exception\ParseException;
 use Symfony\Component\Yaml\Yaml;
+use TYPO3\CMS\Core\Database\ConnectionPool;
 use TYPO3\CMS\Core\Http\Uri;
 use TYPO3\CMS\Core\Site\Entity\Site;
 
@@ -19,11 +22,11 @@ use TYPO3\CMS\Core\Site\Entity\Site;
 class OtWebsiteRepository
 {
     /**
-     * @var \TYPO3\CMS\Core\Database\ConnectionPool
+     * @var ConnectionPool
      */
-    private \TYPO3\CMS\Core\Database\ConnectionPool $connectionPool;
+    private ConnectionPool $connectionPool;
 
-    public function injectConnectionPool(\TYPO3\CMS\Core\Database\ConnectionPool $connectionPool)
+    public function injectConnectionPool(ConnectionPool $connectionPool)
     {
         $this->connectionPool = $connectionPool;
     }
@@ -72,6 +75,7 @@ class OtWebsiteRepository
      * Get the OtWebsite of the given organization
      *
      * @throws NoSuchWebsiteException
+     * @throws DBALException
      */
     public function getWebsiteByOrganizationId(int $organizationId, bool $withRestrictions = true): array
     {
@@ -328,12 +332,12 @@ class OtWebsiteRepository
     /**
      * Try to retrieve the website matching the given Uri and return the given website
      *
-     * @param \Psr\Http\Message\UriInterface $uri
+     * @param UriInterface $uri
      * @param bool $devMode
      * @return Site
      * @throws NoSuchWebsiteException
      */
-    public function matchUriToWebsite(\Psr\Http\Message\UriInterface $uri, bool $devMode=false, bool $withRestrictions = true): array
+    public function matchUriToWebsite(UriInterface $uri, bool $devMode=false, bool $withRestrictions = true): array
     {
         $queryBuilder = $this->connectionPool->getQueryBuilderForTable('ot_websites');
 
@@ -416,7 +420,7 @@ class OtWebsiteRepository
             $filename = $configs_directory . $identifier . "/config.yaml";
             try {
                 $yamlConfig = Yaml::parseFile($filename);
-            } catch (\Symfony\Component\Yaml\Exception\ParseException $e) {
+            } catch (ParseException $e) {
                 throw new \RuntimeException("No configuration file found for identifier " . $identifier);
             }
 
@@ -442,7 +446,7 @@ class OtWebsiteRepository
                     if ($yamlConfig['rootPageId'] === $rootUid) {
                         return [$filename, $yamlConfig];
                     }
-                } catch (\Symfony\Component\Yaml\Exception\ParseException $e) {
+                } catch (ParseException $e) {
                     continue;
                 }
             }
@@ -456,7 +460,7 @@ class OtWebsiteRepository
                 if ($yamlConfig['rootPageId'] === $rootUid) {
                     return [$filename, $yamlConfig];
                 }
-            } catch (\Symfony\Component\Yaml\Exception\ParseException $e) {
+            } catch (ParseException $e) {
                 continue;
             }
         }

+ 2 - 1
ot_core/Configuration/RequestMiddlewares.php

@@ -1,4 +1,5 @@
 <?php
+use Opentalent\OtCore\Middleware\Frontend\OtSiteResolver;
 
 /**
  * Register middlewares, which will be triggered at each request
@@ -6,7 +7,7 @@
 return [
     'frontend' => [
         'typo3/cms-frontend/site' => [
-            'target' => Opentalent\OtCore\Middleware\Frontend\OtSiteResolver::class,
+            'target' => OtSiteResolver::class,
             'before' => [
                 'typo3/cms-frontend/page-resolver'
             ]

+ 6 - 3
ot_core/Configuration/TCA/Overrides/pages.php

@@ -1,5 +1,8 @@
 <?php
-defined('TYPO3_MODE') or die();
+
+use TYPO3\CMS\Core\Utility\ExtensionManagementUtility;
+
+defined('TYPO3') or die();
 
 // ** Add fields to the backend
 $columns = array (
@@ -12,12 +15,12 @@ $columns = array (
     )
 );
 
-\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns(
+ExtensionManagementUtility::addTCAcolumns(
     'pages',
     $columns
 );
 
-\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCAtypes(
+ExtensionManagementUtility::addToAllTCAtypes(
     'pages',
     'ot_website_uid',
     '',

+ 2 - 1
ot_core/Tests/Unit/Service/OpentalentApiServiceTest.php

@@ -3,6 +3,7 @@
 namespace Opentalent\OtCore\Tests\Unit\Service;
 
 use GuzzleHttp\Client;
+use GuzzleHttp\Exception\TransferException;
 use Nimut\TestingFramework\TestCase\UnitTestCase;
 use Opentalent\OtCore\Exception\ApiRequestException;
 use Opentalent\OtCore\Service\OpentalentApiService;
@@ -51,7 +52,7 @@ class OpentalentApiServiceTest extends UnitTestCase
         } catch (\RuntimeException $e) {
             $client->request($http_method, Argument::type('string'), [])
                 ->shouldBeCalled()
-                ->willThrow(new \GuzzleHttp\Exception\TransferException('bad prophecy request'));
+                ->willThrow(new TransferException('bad prophecy request'));
         }
 
         $reflectionObject = new \ReflectionObject($this->service);

+ 6 - 3
ot_core/Tests/Unit/Website/OtPageRepositoryTest.php

@@ -2,10 +2,13 @@
 
 namespace Opentalent\OtCore\Tests\Unit\Website;
 
+use FluidTYPO3\Vhs\Service\PageService;
 use Opentalent\OtCore\Website\OtPageRepository;
 use Nimut\TestingFramework\TestCase\UnitTestCase;
 use Opentalent\OtCore\Tests\Unit\Fixtures\PageFixtures;
 use Opentalent\OtCore\Tests\Unit\QueryBuilderProphet;
+use TYPO3\CMS\Core\Database\ConnectionPool;
+use TYPO3\CMS\Core\Domain\Repository\PageRepository;
 
 
 class OtPageRepositoryTest extends UnitTestCase
@@ -18,9 +21,9 @@ class OtPageRepositoryTest extends UnitTestCase
 
     public function setUp() {
         // Prophecies to be injected in the under test OtPageRepository
-        $this->pageService = $this->prophesize(\FluidTYPO3\Vhs\Service\PageService::class);
-        $this->pageRepository = $this->prophesize(\TYPO3\CMS\Core\Domain\Repository\PageRepository::class);
-        $this->connectionPool = $this->prophesize(\TYPO3\CMS\Core\Database\ConnectionPool::class);
+        $this->pageService = $this->prophesize(PageService::class);
+        $this->pageRepository = $this->prophesize(PageRepository::class);
+        $this->connectionPool = $this->prophesize(ConnectionPool::class);
 
         // Fixtures
         $this->pageFixtures = new PageFixtures();

+ 2 - 1
ot_core/Tests/Unit/Website/OtWebsiteRepositoryTest.php

@@ -12,6 +12,7 @@ use Opentalent\OtCore\Tests\Unit\Fixtures\WebsiteFixtures;
 use Opentalent\OtCore\Tests\Unit\QueryBuilderProphet;
 use Opentalent\OtCore\Website\OtPageRepository;
 use Opentalent\OtCore\Website\OtWebsiteRepository;
+use TYPO3\CMS\Core\Database\ConnectionPool;
 
 class OtWebsiteRepositoryTest extends UnitTestCase
 {
@@ -22,7 +23,7 @@ class OtWebsiteRepositoryTest extends UnitTestCase
 
     public function setUp() {
         // Prophecies to be injected in the under test OtPageRepository
-        $this->connectionPool = $this->prophesize(\TYPO3\CMS\Core\Database\ConnectionPool::class);
+        $this->connectionPool = $this->prophesize(ConnectionPool::class);
 
         // Fixtures
         $this->pageFixtures = new PageFixtures();

+ 0 - 3
ot_core/ext_emconf.php

@@ -15,9 +15,6 @@ $EM_CONF[$_EXTKEY] = [
     'author' => 'Olivier Massot',
     'author_email' => 'olivier.massot@2iopenservice.fr',
     'state' => 'stable',
-    'uploadfolder' => 0,
-    'createDirs' => '',
-    'clearCacheOnLoad' => 0,
     'version' => '0.7',
     'constraints' => [
         'depends' => [

+ 1 - 1
ot_core/ext_localconf.php

@@ -1,6 +1,6 @@
 <?php
 
-if (!defined('TYPO3_MODE')) {
+if (!defined('TYPO3')) {
     die('Access denied.');
 }
 

+ 0 - 3
ot_optimizer/ext_emconf.php

@@ -15,9 +15,6 @@ $EM_CONF[$_EXTKEY] = [
     'author' => 'Olivier Massot',
     'author_email' => 'olivier.massot@2iopenservice.fr',
     'state' => 'stable',
-    'uploadfolder' => 0,
-    'createDirs' => '',
-    'clearCacheOnLoad' => 0,
     'version' => '1.0.0',  //see ot_core/ext_emconf.php to get the current ot extensions version
     'constraints' => [
         'depends' => [

+ 1 - 1
ot_optimizer/ext_localconf.php

@@ -1,5 +1,5 @@
 <?php
-defined('TYPO3_MODE') || die();
+defined('TYPO3') || die();
 
 $GLOBALS['TYPO3_CONF_VARS']['SYS']['Objects'][TYPO3\CMS\Core\Routing\PageSlugCandidateProvider::class] = [
     'className' => Opentalent\OtOptimizer\XClass\Core\Routing\OtPageSlugCandidateProvider::class

+ 15 - 10
ot_stats/Classes/Controller/OtStatsController.php

@@ -5,8 +5,10 @@ namespace Opentalent\OtStats\Controller;
 use Opentalent\OtCore\Controller\SelectedSiteController;
 use Opentalent\OtCore\Logging\OtLogger;
 use Opentalent\OtStats\Domain\Repository\MatomoWebsiteRepository;
+use Psr\Http\Message\ResponseInterface;
 use TYPO3\CMS\Core\Messaging\AbstractMessage;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Extbase\Http\ForwardResponse;
 use TYPO3\CMS\Extbase\Mvc\Exception\StopActionException;
 use TYPO3\CMS\Extbase\Object\ObjectManager;
 
@@ -26,10 +28,10 @@ class OtStatsController extends SelectedSiteController {
      * Index action (default action)
      * Displays the customizer page on the backend
      */
-    public function indexAction() {
+    public function indexAction(): ResponseInterface {
         $matomoId = $this->currentWebsite['matomo_site_id'];
         if ($matomoId == null) {
-            $this->forward('askForActivationConfirmation');
+            return new ForwardResponse('askForActivationConfirmation');
         }
         $this->view->assign('matomoSiteId', (int)$matomoId);
         $this->view->assign('matomoToken', self::MATOMO_TOKEN);
@@ -38,26 +40,29 @@ class OtStatsController extends SelectedSiteController {
         // Default interval
         $period = $args['period'] ?? 'month';
         $this->view->assign('period', $period);
-
+        return $this->htmlResponse();
     }
 
     /**
      * Display a confirmation page before enabling the stats module
      */
-    public function askForActivationConfirmationAction() {}
+    public function askForActivationConfirmationAction(): ResponseInterface {
+        return $this->htmlResponse();
+    }
 
     /**
      * Display a confirmation page before disabling the stats module
      */
-    public function askForDeactivationConfirmationAction() {
+    public function askForDeactivationConfirmationAction(): ResponseInterface {
         $this->view->assign('rootUid', $this->currentRootUid);
+        return $this->htmlResponse();
     }
 
     /**
      * Creates a matomo site record if none exists and
      * save its id
      */
-    public function enableStatsAction() {
+    public function enableStatsAction(): ResponseInterface {
         $matomoRepository = GeneralUtility::makeInstance(ObjectManager::class)->get(MatomoWebsiteRepository::class);
 
         try {
@@ -72,9 +77,9 @@ class OtStatsController extends SelectedSiteController {
                 '',
                 AbstractMessage::ERROR
             );
-            $this->forward('askForActivationConfirmation');
+            return new ForwardResponse('askForActivationConfirmation');
         }
-        $this->forward('index');
+        return new ForwardResponse('index');
     }
 
     /**
@@ -85,7 +90,7 @@ class OtStatsController extends SelectedSiteController {
      *                          confirmation page.
      * @throws StopActionException
      */
-    public function disableStatsAction(int $rootUid) {
+    public function disableStatsAction(int $rootUid): ResponseInterface {
 
         $matomoRepository = GeneralUtility::makeInstance(ObjectManager::class)->get(MatomoWebsiteRepository::class);
 
@@ -101,6 +106,6 @@ class OtStatsController extends SelectedSiteController {
                 AbstractMessage::ERROR
             );
         }
-        $this->forward('askForActivationConfirmation');
+        return new ForwardResponse('askForActivationConfirmation');
     }
 }

+ 0 - 3
ot_stats/ext_emconf.php

@@ -15,9 +15,6 @@ $EM_CONF[$_EXTKEY] = [
     'author' => 'Olivier Massot',
     'author_email' => 'olivier.massot@2iopenservice.fr',
     'state' => 'stable',
-    'uploadfolder' => 0,
-    'createDirs' => '',
-    'clearCacheOnLoad' => 0,
     'version' => '1.0.0',  //see ot_core/ext_emconf.php to get the current ot extensions version
     'constraints' => [
         'depends' => [

+ 6 - 3
ot_stats/ext_tables.php

@@ -1,5 +1,8 @@
 <?php
-defined('TYPO3_MODE') || die('Access denied.');
+
+use Opentalent\OtStats\Controller\OtStatsController;
+
+defined('TYPO3') || die('Access denied.');
 
 // ext_tables.php contient les directives permettant de configurer le backend
 
@@ -11,12 +14,12 @@ call_user_func(
              * Registers the statistics backend module
              */
             \TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerModule(
-                'Opentalent.OtStats',
+                'OtStats',
                 'web', // Make module a submodule of 'web'
                 'otstats', // Submodule key
                 'after:OtTemplatingOtcustomizer', // Position
                 array(
-                    'OtStats' => 'index,askForActivationConfirmation,askForDeactivationConfirmation,enableStats,disableStats'
+                    OtStatsController::class => 'index,askForActivationConfirmation,askForDeactivationConfirmation,enableStats,disableStats'
                 ),
                 array(
                     'access' => 'user,group',

+ 8 - 9
ot_templating/Classes/Controller/OtCustomizerController.php

@@ -7,6 +7,8 @@ use Opentalent\OtCore\Cache\OtCacheManager;
 use Opentalent\OtCore\Website\OtWebsiteRepository;
 use Opentalent\OtTemplating\Templating\TemplateRepository;
 use PDO;
+use Psr\Http\Message\ResponseInterface;
+use TYPO3\CMS\Extbase\Http\ForwardResponse;
 use TYPO3\CMS\Core\Database\ConnectionPool;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
 use TYPO3\CMS\Extbase\Object\ObjectManager;
@@ -19,11 +21,11 @@ use TYPO3\CMS\Extbase\Object\ObjectManager;
 class OtCustomizerController extends SelectedSiteController {
 
     /**
-     * @var \TYPO3\CMS\Core\Database\ConnectionPool
+     * @var ConnectionPool
      */
     private $connectionPool;
 
-    public function injectConnectionPool(\TYPO3\CMS\Core\Database\ConnectionPool $connectionPool)
+    public function injectConnectionPool(ConnectionPool $connectionPool)
     {
         $this->connectionPool = $connectionPool;
     }
@@ -32,7 +34,7 @@ class OtCustomizerController extends SelectedSiteController {
      * Index action (default action)
      * Displays the customizer page on the backend
      */
-    public function indexAction() {
+    public function indexAction(): ResponseInterface {
         $this->view->assign('rootPage', $this->currentRootUid);
         $this->view->assign('website', $this->currentWebsite);
         $this->view->assign('templates', TemplateRepository::templates);
@@ -40,6 +42,7 @@ class OtCustomizerController extends SelectedSiteController {
         $templateRepository = GeneralUtility::makeInstance(ObjectManager::class)->get(TemplateRepository::class);
         $this->view->assign('currentTemplate', $templateRepository->getTemplate($this->currentWebsite));
         $this->view->assign('preferences', $templateRepository->getTemplatePreferences($this->currentWebsite));
+        return $this->htmlResponse();
     }
 
     /**
@@ -62,7 +65,7 @@ class OtCustomizerController extends SelectedSiteController {
             'LLL:EXT:ot_templating/Resources/Private/Language/locallang.xlf:theme_updated'
         ));
 
-        $this->forward('index');
+        return new ForwardResponse('index');
     }
 
     /**
@@ -100,10 +103,6 @@ class OtCustomizerController extends SelectedSiteController {
             'LLL:EXT:ot_templating/Resources/Private/Language/locallang.xlf:settings_updated'
         ));
 
-        $this->forward(
-            'index',
-            'OtCustomizer',
-            'OtTemplating'
-        );
+        return (new ForwardResponse('index'))->withControllerName('OtCustomizer')->withExtensionName('OtTemplating');
     }
 }

+ 2 - 1
ot_templating/Classes/Page/ErrorHandler.php

@@ -11,6 +11,7 @@ use TYPO3\CMS\Core\Error\PageErrorHandler\PageErrorHandlerInterface;
 use TYPO3\CMS\Core\Http\HtmlResponse;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
 use TYPO3\CMS\Extbase\Mvc\Controller\ControllerContext;
+use TYPO3\CMS\Extbase\Mvc\Request;
 use TYPO3\CMS\Extbase\Mvc\View\ViewInterface;
 use TYPO3\CMS\Extbase\Mvc\Web\Routing\UriBuilder;
 use TYPO3\CMS\Extbase\Object\ObjectManager;
@@ -58,7 +59,7 @@ class ErrorHandler implements PageErrorHandlerInterface
         $objectManager = GeneralUtility::makeInstance(ObjectManager::class);
         $controllerContext = $objectManager->get(ControllerContext::class);
         $renderingContext = $objectManager->get(RenderingContext::class);
-        $webRequest = $objectManager->get(\TYPO3\CMS\Extbase\Mvc\Request::class);
+        $webRequest = $objectManager->get(Request::class);
         $webRequest->setControllerExtensionName('ot_templating');
         $controllerContext->setRequest($webRequest);
         $renderingContext->setControllerContext($controllerContext);

+ 2 - 1
ot_templating/Classes/ViewHelpers/CObjectViewHelper.php

@@ -4,6 +4,7 @@ namespace Opentalent\OtTemplating\ViewHelpers;
 
 use TYPO3\CMS\Core\Utility\GeneralUtility;
 use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface;
+use TYPO3\CMS\Extbase\Reflection\ObjectAccess;
 use TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController;
 use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
 use TYPO3Fluid\Fluid\Core\ViewHelper\Exception;
@@ -70,7 +71,7 @@ class CObjectViewHelper extends \TYPO3\CMS\Fluid\ViewHelpers\CObjectViewHelper {
         }
         $currentValue = null;
         if (is_object($data)) {
-            $data = \TYPO3\CMS\Extbase\Reflection\ObjectAccess::getGettableProperties($data);
+            $data = ObjectAccess::getGettableProperties($data);
         } elseif (is_string($data) || is_numeric($data)) {
             $currentValue = (string)$data;
             $data = [$data];

+ 2 - 1
ot_templating/Classes/ViewHelpers/Organizations/GetChildFederationViewHelper.php

@@ -4,6 +4,7 @@ namespace Opentalent\OtTemplating\ViewHelpers\Organizations;
 
 use FluidTYPO3\Vhs\Traits\TemplateVariableViewHelperTrait;
 use Opentalent\OtCore\Domain\Repository\FederationStructureRepository;
+use Opentalent\OtCore\Exception\ApiRequestException;
 use Opentalent\OtCore\ViewHelpers\OtAbstractViewHelper;
 
 /**
@@ -66,7 +67,7 @@ class GetChildFederationViewHelper extends OtAbstractViewHelper {
      * Renders the content as html
      *
      * @return string
-     * @throws \Opentalent\OtCore\Exception\ApiRequestException
+     * @throws ApiRequestException
      */
     public function render()
     {

+ 2 - 1
ot_templating/Classes/ViewHelpers/Organizations/GetFederationStructuresViewHelper.php

@@ -4,6 +4,7 @@ namespace Opentalent\OtTemplating\ViewHelpers\Organizations;
 
 use FluidTYPO3\Vhs\Traits\TemplateVariableViewHelperTrait;
 use Opentalent\OtCore\Domain\Repository\FederationStructureRepository;
+use Opentalent\OtCore\Exception\ApiRequestException;
 use Opentalent\OtCore\ViewHelpers\OtAbstractViewHelper;
 
 /**
@@ -73,7 +74,7 @@ class GetFederationStructuresViewHelper extends OtAbstractViewHelper {
      * Renders the content as html
      *
      * @return string
-     * @throws \Opentalent\OtCore\Exception\ApiRequestException
+     * @throws ApiRequestException
      */
     public function render()
     {

+ 5 - 4
ot_templating/Classes/ViewHelpers/Social/MetadataViewHelper.php

@@ -8,6 +8,7 @@ use Opentalent\OtCore\Exception\ApiRequestException;
 use Opentalent\OtCore\ViewHelpers\OtAbstractViewHelper;
 use TYPO3\CMS\Core\Database\ConnectionPool;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Extbase\Service\ImageService;
 
 /**
  *   This view helper give access to the data needed by the Opengraph and twitter meta tags
@@ -34,14 +35,14 @@ class MetadataViewHelper extends OtAbstractViewHelper
     protected $escapeOutput = false;
 
     /**
-     * @var \TYPO3\CMS\Extbase\Service\ImageService
+     * @var ImageService
      */
-    protected \TYPO3\CMS\Extbase\Service\ImageService $imageService;
+    protected ImageService $imageService;
 
     /**
-     * @param \TYPO3\CMS\Extbase\Service\ImageService $imageService
+     * @param ImageService $imageService
      */
-    public function injectImageService(\TYPO3\CMS\Extbase\Service\ImageService $imageService)
+    public function injectImageService(ImageService $imageService)
     {
         $this->imageService = $imageService;
     }

+ 6 - 1
ot_templating/Classes/XClass/Form/Configuration/ConfigurationManager.php

@@ -2,10 +2,13 @@
 
 namespace Opentalent\OtTemplating\XClass\Form\Configuration;
 
+use Opentalent\OtCore\Exception\NoSuchWebsiteException;
 use Opentalent\OtCore\Website\OtPageRepository;
 use Opentalent\OtCore\Website\OtWebsiteRepository;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Extbase\Object\Exception;
 use TYPO3\CMS\Extbase\Object\ObjectManager;
+use TYPO3\CMS\Form\Mvc\Configuration\Exception\ExtensionNameRequiredException;
 
 class ConfigurationManager extends \TYPO3\CMS\Form\Mvc\Configuration\ConfigurationManager
 {
@@ -15,7 +18,9 @@ class ConfigurationManager extends \TYPO3\CMS\Form\Mvc\Configuration\Configurati
      *
      * @param string $extensionName
      * @return array
-     * @throws \TYPO3\CMS\Form\Mvc\Configuration\Exception\ExtensionNameRequiredException
+     * @throws ExtensionNameRequiredException
+     * @throws NoSuchWebsiteException
+     * @throws Exception
      */
     protected function getConfigurationFromYamlFile(string $extensionName): array
     {

+ 24 - 18
ot_templating/Resources/Private/Forms/Contact.form.yaml

@@ -13,13 +13,15 @@ finishers:
     identifier: EmailToReceiver
     options:
       subject: 'Informations request'
-      recipientAddress:
-      recipientName: ''
       senderAddress: ne-pas-repondre@opentalent.fr
       senderName: ''
-      replyToAddress: ''
-      carbonCopyAddress: ''
-      blindCarbonCopyAddress: ''
+      replyToRecipients:
+        - ''
+      carbonCopyRecipients:
+        - ''
+      blindCarbonCopyRecipients:
+        - ''
+      recipients: { }
       format: html
       attachUploads: 'true'
       translation:
@@ -28,13 +30,16 @@ finishers:
     identifier: EmailToSender
     options:
       subject: 'Your message has been posted'
-      recipientAddress: '{email}'
-      recipientName: '{firstname} {lastname}'
       senderAddress: ne_pas_repondre@opentalent.fr
       senderName: ''
-      replyToAddress: ''
-      carbonCopyAddress: ''
-      blindCarbonCopyAddress: ''
+      replyToRecipients:
+        - ''
+      carbonCopyRecipients:
+        - ''
+      blindCarbonCopyRecipients:
+        - ''
+      recipients:
+        '{email}': '{firstname} {lastname}'
       format: html
       attachUploads: 'false'
       templatePathAndFilename: 'EXT:ot_templating/Resources/Private/Templates/Forms/EmailToSender.html'
@@ -60,7 +65,7 @@ renderables:
         identifier: mandatory-fields-notice
         properties:
           text: 'Note: Fields marked with a star (*) are mandatory'
-          elementClassAttribute: 'contact-form-info'
+          elementClassAttribute: contact-form-info
         label: ''
       -
         type: GridRow
@@ -69,14 +74,15 @@ renderables:
         renderables:
           -
             identifier: lastname
-            label: 'Name'
+            label: Name
             type: Text
             defaultValue: ''
             properties:
               fluidAdditionalAttributes:
                 required: required
             validators:
-              - identifier: NotEmpty
+              -
+               identifier: NotEmpty
 
           -
             identifier: firstname
@@ -121,18 +127,18 @@ renderables:
 
           -
             identifier: city
-            label: 'City'
+            label: City
             type: Text
             defaultValue: ''
 
           -
             identifier: phone
-            label: 'Phone'
+            label: Phone
             type: Text
             defaultValue: ''
       -
         identifier: subject
-        label: 'Subject'
+        label: Subject
         type: Text
         defaultValue: ''
         properties:
@@ -143,7 +149,7 @@ renderables:
             identifier: NotEmpty
       -
         identifier: message
-        label: 'Message'
+        label: Message
         type: Textarea
         defaultValue: ''
         properties:
@@ -158,7 +164,7 @@ renderables:
         identifier: rgpd-notice
         properties:
           text: 'By submitting this form, you agree that theses informations can be processed in order to contact you back and answer your demand'
-          elementClassAttribute: 'contact-form-info'
+          elementClassAttribute: contact-form-info
         label: ''
       -
         validators:

+ 0 - 3
ot_templating/ext_emconf.php

@@ -15,9 +15,6 @@ $EM_CONF[$_EXTKEY] = [
     'author' => 'Olivier Massot',
     'author_email' => 'olivier.massot@2iopenservice.fr',
     'state' => 'stable',
-    'uploadfolder' => 0,
-    'createDirs' => '',
-    'clearCacheOnLoad' => 0,
     'version' => '1.0.0',  //see ot_core/ext_emconf.php to get the current ot extensions version
     'constraints' => [
         'depends' => [

+ 1 - 1
ot_templating/ext_localconf.php

@@ -1,6 +1,6 @@
 <?php
 
-if (!defined('TYPO3_MODE')) {
+if (!defined('TYPO3')) {
     die('Access denied.');
 }
 

+ 6 - 3
ot_templating/ext_tables.php

@@ -1,5 +1,8 @@
 <?php
-defined('TYPO3_MODE') || die('Access denied.');
+
+use Opentalent\OtTemplating\Controller\OtCustomizerController;
+
+defined('TYPO3') || die('Access denied.');
 
 // ext_tables.php contient les directives permettant de configurer le backend
 
@@ -17,12 +20,12 @@ call_user_func(
              * Registers the customizer backend module
              */
             \TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerModule(
-                'Opentalent.OtTemplating',
+                'OtTemplating',
                 'web', // Make module a submodule of 'web'
                 'otcustomizer', // Submodule key
                 'before:OtStatsOtstats', // Position
                 array(
-                    'OtCustomizer' => 'index,selectTemplate,updatePreferences',
+                    OtCustomizerController::class => 'index,selectTemplate,updatePreferences',
                 ),
                 array(
                     'access' => 'user,group',